Reformat whole codebase with astyle.options (#128)
authorEven Rouault <even.rouault@spatialys.com>
Tue, 9 May 2017 13:44:46 +0000 (15:44 +0200)
committerEven Rouault <even.rouault@spatialys.com>
Tue, 9 May 2017 18:46:20 +0000 (20:46 +0200)
127 files changed:
src/bin/common/color.c
src/bin/common/opj_getopt.c
src/bin/jp2/convert.c
src/bin/jp2/convertbmp.c
src/bin/jp2/convertpng.c
src/bin/jp2/converttif.c
src/bin/jp2/index.c
src/bin/jp2/opj_compress.c
src/bin/jp2/opj_decompress.c
src/bin/jp2/opj_dump.c
src/bin/jp3d/convert.c [changed mode: 0755->0644]
src/bin/jp3d/getopt.c [changed mode: 0755->0644]
src/bin/jp3d/opj_jp3d_compress.c [changed mode: 0755->0644]
src/bin/jp3d/opj_jp3d_decompress.c [changed mode: 0755->0644]
src/bin/jpip/opj_dec_server.c
src/bin/jpip/opj_jpip_addxml.c
src/bin/jpip/opj_jpip_test.c
src/bin/jpip/opj_jpip_transcode.c
src/bin/jpip/opj_server.c
src/bin/jpwl/convert.c
src/bin/jpwl/index.c
src/bin/jpwl/opj_jpwl_compress.c
src/bin/jpwl/opj_jpwl_decompress.c
src/bin/mj2/meta_out.c
src/bin/mj2/mj2_to_metadata.c
src/bin/mj2/opj_mj2_compress.c
src/bin/mj2/opj_mj2_decompress.c
src/bin/mj2/opj_mj2_extract.c
src/bin/mj2/opj_mj2_wrap.c
src/lib/openjp2/bio.c
src/lib/openjp2/cidx_manager.c
src/lib/openjp2/cio.c
src/lib/openjp2/dwt.c
src/lib/openjp2/event.c
src/lib/openjp2/function_list.c
src/lib/openjp2/image.c
src/lib/openjp2/invert.c
src/lib/openjp2/j2k.c
src/lib/openjp2/jp2.c
src/lib/openjp2/mct.c
src/lib/openjp2/mqc.c
src/lib/openjp2/openjpeg.c
src/lib/openjp2/opj_clock.c
src/lib/openjp2/opj_malloc.c
src/lib/openjp2/phix_manager.c
src/lib/openjp2/pi.c
src/lib/openjp2/ppix_manager.c
src/lib/openjp2/raw.c
src/lib/openjp2/t1.c
src/lib/openjp2/t1_generate_luts.c
src/lib/openjp2/t2.c
src/lib/openjp2/tcd.c
src/lib/openjp2/tgt.c
src/lib/openjp2/thix_manager.c
src/lib/openjp2/thread.c
src/lib/openjp2/tpix_manager.c
src/lib/openjp3d/bio.c
src/lib/openjp3d/cio.c
src/lib/openjp3d/dwt.c
src/lib/openjp3d/event.c
src/lib/openjp3d/jp3d.c
src/lib/openjp3d/jp3d_lib.c
src/lib/openjp3d/mct.c
src/lib/openjp3d/mqc.c
src/lib/openjp3d/openjp3d.c
src/lib/openjp3d/pi.c
src/lib/openjp3d/raw.c
src/lib/openjp3d/t1.c
src/lib/openjp3d/t1_3d.c
src/lib/openjp3d/t2.c
src/lib/openjp3d/tcd.c
src/lib/openjp3d/tgt.c
src/lib/openjp3d/volume.c
src/lib/openjpip/auxtrans_manager.c
src/lib/openjpip/box_manager.c
src/lib/openjpip/boxheader_manager.c
src/lib/openjpip/byte_manager.c
src/lib/openjpip/cache_manager.c
src/lib/openjpip/cachemodel_manager.c
src/lib/openjpip/channel_manager.c
src/lib/openjpip/codestream_manager.c
src/lib/openjpip/dec_clientmsg_handler.c
src/lib/openjpip/faixbox_manager.c
src/lib/openjpip/ihdrbox_manager.c
src/lib/openjpip/imgreg_manager.c
src/lib/openjpip/imgsock_manager.c
src/lib/openjpip/index_manager.c
src/lib/openjpip/j2kheader_manager.c
src/lib/openjpip/jp2k_decoder.c
src/lib/openjpip/jp2k_encoder.c
src/lib/openjpip/jpip_parser.c
src/lib/openjpip/jpipstream_manager.c
src/lib/openjpip/manfbox_manager.c
src/lib/openjpip/marker_manager.c
src/lib/openjpip/metadata_manager.c
src/lib/openjpip/mhixbox_manager.c
src/lib/openjpip/msgqueue_manager.c
src/lib/openjpip/openjpip.c
src/lib/openjpip/placeholder_manager.c
src/lib/openjpip/query_parser.c
src/lib/openjpip/session_manager.c
src/lib/openjpip/sock_manager.c
src/lib/openjpip/target_manager.c
src/lib/openjpwl/crc.c
src/lib/openjpwl/jpwl.c
src/lib/openjpwl/jpwl_lib.c
src/lib/openjpwl/rs.c
src/lib/openmj2/bio.c
src/lib/openmj2/cio.c
src/lib/openmj2/dwt.c
src/lib/openmj2/event.c
src/lib/openmj2/image.c
src/lib/openmj2/j2k.c
src/lib/openmj2/j2k_lib.c
src/lib/openmj2/jp2.c
src/lib/openmj2/jpt.c
src/lib/openmj2/mct.c
src/lib/openmj2/mj2.c
src/lib/openmj2/mj2_convert.c
src/lib/openmj2/mqc.c
src/lib/openmj2/openjpeg.c
src/lib/openmj2/pi.c
src/lib/openmj2/raw.c
src/lib/openmj2/t1.c
src/lib/openmj2/t2.c
src/lib/openmj2/tcd.c
src/lib/openmj2/tgt.c

index 234c7bdf8df647fa2c7a4a8664809cd626dc03f6..6c74bf318cf88b05ca04c245c3ddde2b232647e7 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * All rights reserved.
@@ -72,284 +72,367 @@ B: 0.999823  1.77204       -8.04142e-06  :Cr - 2^(prec - 1)
 
 -----------------------------------------------------------*/
 static void sycc_to_rgb(int offset, int upb, int y, int cb, int cr,
-       int *out_r, int *out_g, int *out_b)
+                        int *out_r, int *out_g, int *out_b)
 {
-       int r, g, b;
-
-       cb -= offset; cr -= offset;
-       r = y + (int)(1.402 * (float)cr);
-       if(r < 0) r = 0; else if(r > upb) r = upb; *out_r = r;
-
-       g = y - (int)(0.344 * (float)cb + 0.714 * (float)cr);
-       if(g < 0) g = 0; else if(g > upb) g = upb; *out_g = g;
-
-       b = y + (int)(1.772 * (float)cb);
-       if(b < 0) b = 0; else if(b > upb) b = upb; *out_b = b;
+    int r, g, b;
+
+    cb -= offset;
+    cr -= offset;
+    r = y + (int)(1.402 * (float)cr);
+    if (r < 0) {
+        r = 0;
+    } else if (r > upb) {
+        r = upb;
+    }
+    *out_r = r;
+
+    g = y - (int)(0.344 * (float)cb + 0.714 * (float)cr);
+    if (g < 0) {
+        g = 0;
+    } else if (g > upb) {
+        g = upb;
+    }
+    *out_g = g;
+
+    b = y + (int)(1.772 * (float)cb);
+    if (b < 0) {
+        b = 0;
+    } else if (b > upb) {
+        b = upb;
+    }
+    *out_b = b;
 }
 
 static void sycc444_to_rgb(opj_image_t *img)
 {
-       int *d0, *d1, *d2, *r, *g, *b;
-       const int *y, *cb, *cr;
-       size_t maxw, maxh, max, i;
-       int offset, upb;
-
-       upb = (int)img->comps[0].prec;
-       offset = 1<<(upb - 1); upb = (1<<upb)-1;
-
-       maxw = (size_t)img->comps[0].w; maxh = (size_t)img->comps[0].h;
-       max = maxw * maxh;
-
-       y = img->comps[0].data;
-       cb = img->comps[1].data;
-       cr = img->comps[2].data;
-
-       d0 = r = (int*)malloc(sizeof(int) * max);
-       d1 = g = (int*)malloc(sizeof(int) * max);
-       d2 = b = (int*)malloc(sizeof(int) * max);
-
-       if(r == NULL || g == NULL || b == NULL) goto fails;
-
-       for(i = 0U; i < max; ++i)
-       {
-               sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
-               ++y; ++cb; ++cr; ++r; ++g; ++b;
-       }
-       free(img->comps[0].data); img->comps[0].data = d0;
-       free(img->comps[1].data); img->comps[1].data = d1;
-       free(img->comps[2].data); img->comps[2].data = d2;
-       img->color_space = OPJ_CLRSPC_SRGB;
-       return;
+    int *d0, *d1, *d2, *r, *g, *b;
+    const int *y, *cb, *cr;
+    size_t maxw, maxh, max, i;
+    int offset, upb;
+
+    upb = (int)img->comps[0].prec;
+    offset = 1 << (upb - 1);
+    upb = (1 << upb) - 1;
+
+    maxw = (size_t)img->comps[0].w;
+    maxh = (size_t)img->comps[0].h;
+    max = maxw * maxh;
+
+    y = img->comps[0].data;
+    cb = img->comps[1].data;
+    cr = img->comps[2].data;
+
+    d0 = r = (int*)malloc(sizeof(int) * max);
+    d1 = g = (int*)malloc(sizeof(int) * max);
+    d2 = b = (int*)malloc(sizeof(int) * max);
+
+    if (r == NULL || g == NULL || b == NULL) {
+        goto fails;
+    }
+
+    for (i = 0U; i < max; ++i) {
+        sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+        ++y;
+        ++cb;
+        ++cr;
+        ++r;
+        ++g;
+        ++b;
+    }
+    free(img->comps[0].data);
+    img->comps[0].data = d0;
+    free(img->comps[1].data);
+    img->comps[1].data = d1;
+    free(img->comps[2].data);
+    img->comps[2].data = d2;
+    img->color_space = OPJ_CLRSPC_SRGB;
+    return;
 
 fails:
-       free(r);
-       free(g);
-       free(b);
+    free(r);
+    free(g);
+    free(b);
 }/* sycc444_to_rgb() */
 
 static void sycc422_to_rgb(opj_image_t *img)
-{      
-       int *d0, *d1, *d2, *r, *g, *b;
-       const int *y, *cb, *cr;
-       size_t maxw, maxh, max, offx, loopmaxw;
-       int offset, upb;
-       size_t i;
-
-       upb = (int)img->comps[0].prec;
-       offset = 1<<(upb - 1); upb = (1<<upb)-1;
-
-       maxw = (size_t)img->comps[0].w; maxh = (size_t)img->comps[0].h;
-       max = maxw * maxh;
-
-       y = img->comps[0].data;
-       cb = img->comps[1].data;
-       cr = img->comps[2].data;
-
-       d0 = r = (int*)malloc(sizeof(int) * max);
-       d1 = g = (int*)malloc(sizeof(int) * max);
-       d2 = b = (int*)malloc(sizeof(int) * max);
-
-       if(r == NULL || g == NULL || b == NULL) goto fails;
-
-       /* if img->x0 is odd, then first column shall use Cb/Cr = 0 */
-       offx = img->x0 & 1U;
-       loopmaxw = maxw - offx;
-       
-       for(i=0U; i < maxh; ++i)
-       {
-               size_t j;
-               
-               if (offx > 0U) {
-                       sycc_to_rgb(offset, upb, *y, 0, 0, r, g, b);
-                       ++y; ++r; ++g; ++b;
-               }
-               
-               for(j=0U; j < (loopmaxw & ~(size_t)1U); j += 2U)
-               {
-                       sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
-                       ++y; ++r; ++g; ++b;
-                       sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
-                       ++y; ++r; ++g; ++b; ++cb; ++cr;
-               }
-               if (j < loopmaxw) {
-                       sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
-                       ++y; ++r; ++g; ++b; ++cb; ++cr;
-               }
-       }
-       
-       free(img->comps[0].data); img->comps[0].data = d0;
-       free(img->comps[1].data); img->comps[1].data = d1;
-       free(img->comps[2].data); img->comps[2].data = d2;
-
-       img->comps[1].w = img->comps[2].w = img->comps[0].w;
-       img->comps[1].h = img->comps[2].h = img->comps[0].h;
-       img->comps[1].dx = img->comps[2].dx = img->comps[0].dx;
-       img->comps[1].dy = img->comps[2].dy = img->comps[0].dy;
-       img->color_space = OPJ_CLRSPC_SRGB;
-       return;
+{
+    int *d0, *d1, *d2, *r, *g, *b;
+    const int *y, *cb, *cr;
+    size_t maxw, maxh, max, offx, loopmaxw;
+    int offset, upb;
+    size_t i;
+
+    upb = (int)img->comps[0].prec;
+    offset = 1 << (upb - 1);
+    upb = (1 << upb) - 1;
+
+    maxw = (size_t)img->comps[0].w;
+    maxh = (size_t)img->comps[0].h;
+    max = maxw * maxh;
+
+    y = img->comps[0].data;
+    cb = img->comps[1].data;
+    cr = img->comps[2].data;
+
+    d0 = r = (int*)malloc(sizeof(int) * max);
+    d1 = g = (int*)malloc(sizeof(int) * max);
+    d2 = b = (int*)malloc(sizeof(int) * max);
+
+    if (r == NULL || g == NULL || b == NULL) {
+        goto fails;
+    }
+
+    /* if img->x0 is odd, then first column shall use Cb/Cr = 0 */
+    offx = img->x0 & 1U;
+    loopmaxw = maxw - offx;
+
+    for (i = 0U; i < maxh; ++i) {
+        size_t j;
+
+        if (offx > 0U) {
+            sycc_to_rgb(offset, upb, *y, 0, 0, r, g, b);
+            ++y;
+            ++r;
+            ++g;
+            ++b;
+        }
+
+        for (j = 0U; j < (loopmaxw & ~(size_t)1U); j += 2U) {
+            sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+            ++y;
+            ++r;
+            ++g;
+            ++b;
+            sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+            ++y;
+            ++r;
+            ++g;
+            ++b;
+            ++cb;
+            ++cr;
+        }
+        if (j < loopmaxw) {
+            sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+            ++y;
+            ++r;
+            ++g;
+            ++b;
+            ++cb;
+            ++cr;
+        }
+    }
+
+    free(img->comps[0].data);
+    img->comps[0].data = d0;
+    free(img->comps[1].data);
+    img->comps[1].data = d1;
+    free(img->comps[2].data);
+    img->comps[2].data = d2;
+
+    img->comps[1].w = img->comps[2].w = img->comps[0].w;
+    img->comps[1].h = img->comps[2].h = img->comps[0].h;
+    img->comps[1].dx = img->comps[2].dx = img->comps[0].dx;
+    img->comps[1].dy = img->comps[2].dy = img->comps[0].dy;
+    img->color_space = OPJ_CLRSPC_SRGB;
+    return;
 
 fails:
-       free(r);
-       free(g);
-       free(b);
+    free(r);
+    free(g);
+    free(b);
 }/* sycc422_to_rgb() */
 
 static void sycc420_to_rgb(opj_image_t *img)
 {
-       int *d0, *d1, *d2, *r, *g, *b, *nr, *ng, *nb;
-       const int *y, *cb, *cr, *ny;
-       size_t maxw, maxh, max, offx, loopmaxw, offy, loopmaxh;
-       int offset, upb;
-       size_t i;
-
-       upb = (int)img->comps[0].prec;
-       offset = 1<<(upb - 1); upb = (1<<upb)-1;
-
-       maxw = (size_t)img->comps[0].w; maxh = (size_t)img->comps[0].h;
-       max = maxw * maxh;
-
-       y = img->comps[0].data;
-       cb = img->comps[1].data;
-       cr = img->comps[2].data;
-
-       d0 = r = (int*)malloc(sizeof(int) * max);
-       d1 = g = (int*)malloc(sizeof(int) * max);
-       d2 = b = (int*)malloc(sizeof(int) * max);
-       
-       if (r == NULL || g == NULL || b == NULL) goto fails;
-       
-       /* if img->x0 is odd, then first column shall use Cb/Cr = 0 */
-       offx = img->x0 & 1U;
-       loopmaxw = maxw - offx;
-       /* if img->y0 is odd, then first line shall use Cb/Cr = 0 */
-       offy = img->y0 & 1U;
-       loopmaxh = maxh - offy;
-       
-       if (offy > 0U) {
-               size_t j;
-               
-               for(j=0; j < maxw; ++j)
-               {
-                       sycc_to_rgb(offset, upb, *y, 0, 0, r, g, b);
-                       ++y; ++r; ++g; ++b;
-               }
-       }
-
-       for(i=0U; i < (loopmaxh & ~(size_t)1U); i += 2U)
-       {
-               size_t j;
-               
-               ny = y + maxw;
-               nr = r + maxw; ng = g + maxw; nb = b + maxw;
-               
-               if (offx > 0U) {
-                       sycc_to_rgb(offset, upb, *y, 0, 0, r, g, b);
-                       ++y; ++r; ++g; ++b;
-                       sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
-                       ++ny; ++nr; ++ng; ++nb;
-               }
-
-               for(j=0; j < (loopmaxw & ~(size_t)1U); j += 2U)
-               {
-                       sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
-                       ++y; ++r; ++g; ++b;
-                       sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
-                       ++y; ++r; ++g; ++b;
-
-                       sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
-                       ++ny; ++nr; ++ng; ++nb;
-                       sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
-                       ++ny; ++nr; ++ng; ++nb; ++cb; ++cr;
-               }
-               if(j < loopmaxw)
-               {
-                       sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
-                       ++y; ++r; ++g; ++b;
-
-                       sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
-                       ++ny; ++nr; ++ng; ++nb; ++cb; ++cr;
-               }
-               y += maxw; r += maxw; g += maxw; b += maxw;
-       }
-       if(i < loopmaxh)
-       {
-               size_t j;
-               
-               for(j=0U; j < (maxw & ~(size_t)1U); j += 2U)
-               {
-                       sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
-
-                       ++y; ++r; ++g; ++b;
-
-                       sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
-
-                       ++y; ++r; ++g; ++b; ++cb; ++cr;
-               }
-               if(j < maxw)
-               {
-                       sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
-               }
-       }
-
-       free(img->comps[0].data); img->comps[0].data = d0;
-       free(img->comps[1].data); img->comps[1].data = d1;
-       free(img->comps[2].data); img->comps[2].data = d2;
-
-       img->comps[1].w = img->comps[2].w = img->comps[0].w;
-       img->comps[1].h = img->comps[2].h = img->comps[0].h;
-       img->comps[1].dx = img->comps[2].dx = img->comps[0].dx;
-       img->comps[1].dy = img->comps[2].dy = img->comps[0].dy;
-       img->color_space = OPJ_CLRSPC_SRGB;
-       return;
+    int *d0, *d1, *d2, *r, *g, *b, *nr, *ng, *nb;
+    const int *y, *cb, *cr, *ny;
+    size_t maxw, maxh, max, offx, loopmaxw, offy, loopmaxh;
+    int offset, upb;
+    size_t i;
+
+    upb = (int)img->comps[0].prec;
+    offset = 1 << (upb - 1);
+    upb = (1 << upb) - 1;
+
+    maxw = (size_t)img->comps[0].w;
+    maxh = (size_t)img->comps[0].h;
+    max = maxw * maxh;
+
+    y = img->comps[0].data;
+    cb = img->comps[1].data;
+    cr = img->comps[2].data;
+
+    d0 = r = (int*)malloc(sizeof(int) * max);
+    d1 = g = (int*)malloc(sizeof(int) * max);
+    d2 = b = (int*)malloc(sizeof(int) * max);
+
+    if (r == NULL || g == NULL || b == NULL) {
+        goto fails;
+    }
+
+    /* if img->x0 is odd, then first column shall use Cb/Cr = 0 */
+    offx = img->x0 & 1U;
+    loopmaxw = maxw - offx;
+    /* if img->y0 is odd, then first line shall use Cb/Cr = 0 */
+    offy = img->y0 & 1U;
+    loopmaxh = maxh - offy;
+
+    if (offy > 0U) {
+        size_t j;
+
+        for (j = 0; j < maxw; ++j) {
+            sycc_to_rgb(offset, upb, *y, 0, 0, r, g, b);
+            ++y;
+            ++r;
+            ++g;
+            ++b;
+        }
+    }
+
+    for (i = 0U; i < (loopmaxh & ~(size_t)1U); i += 2U) {
+        size_t j;
+
+        ny = y + maxw;
+        nr = r + maxw;
+        ng = g + maxw;
+        nb = b + maxw;
+
+        if (offx > 0U) {
+            sycc_to_rgb(offset, upb, *y, 0, 0, r, g, b);
+            ++y;
+            ++r;
+            ++g;
+            ++b;
+            sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
+            ++ny;
+            ++nr;
+            ++ng;
+            ++nb;
+        }
+
+        for (j = 0; j < (loopmaxw & ~(size_t)1U); j += 2U) {
+            sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+            ++y;
+            ++r;
+            ++g;
+            ++b;
+            sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+            ++y;
+            ++r;
+            ++g;
+            ++b;
+
+            sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
+            ++ny;
+            ++nr;
+            ++ng;
+            ++nb;
+            sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
+            ++ny;
+            ++nr;
+            ++ng;
+            ++nb;
+            ++cb;
+            ++cr;
+        }
+        if (j < loopmaxw) {
+            sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+            ++y;
+            ++r;
+            ++g;
+            ++b;
+
+            sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
+            ++ny;
+            ++nr;
+            ++ng;
+            ++nb;
+            ++cb;
+            ++cr;
+        }
+        y += maxw;
+        r += maxw;
+        g += maxw;
+        b += maxw;
+    }
+    if (i < loopmaxh) {
+        size_t j;
+
+        for (j = 0U; j < (maxw & ~(size_t)1U); j += 2U) {
+            sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+
+            ++y;
+            ++r;
+            ++g;
+            ++b;
+
+            sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+
+            ++y;
+            ++r;
+            ++g;
+            ++b;
+            ++cb;
+            ++cr;
+        }
+        if (j < maxw) {
+            sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
+        }
+    }
+
+    free(img->comps[0].data);
+    img->comps[0].data = d0;
+    free(img->comps[1].data);
+    img->comps[1].data = d1;
+    free(img->comps[2].data);
+    img->comps[2].data = d2;
+
+    img->comps[1].w = img->comps[2].w = img->comps[0].w;
+    img->comps[1].h = img->comps[2].h = img->comps[0].h;
+    img->comps[1].dx = img->comps[2].dx = img->comps[0].dx;
+    img->comps[1].dy = img->comps[2].dy = img->comps[0].dy;
+    img->color_space = OPJ_CLRSPC_SRGB;
+    return;
 
 fails:
-       free(r);
-       free(g);
-       free(b);
+    free(r);
+    free(g);
+    free(b);
 }/* sycc420_to_rgb() */
 
 void color_sycc_to_rgb(opj_image_t *img)
 {
-       if(img->numcomps < 3)
-       {
-               img->color_space = OPJ_CLRSPC_GRAY;
-               return;
-       }
-
-       if((img->comps[0].dx == 1)
-       && (img->comps[1].dx == 2)
-       && (img->comps[2].dx == 2)
-       && (img->comps[0].dy == 1)
-       && (img->comps[1].dy == 2)
-       && (img->comps[2].dy == 2))/* horizontal and vertical sub-sample */
-  {
-               sycc420_to_rgb(img);
-  }
-       else
-       if((img->comps[0].dx == 1)
-       && (img->comps[1].dx == 2)
-       && (img->comps[2].dx == 2)
-       && (img->comps[0].dy == 1)
-       && (img->comps[1].dy == 1)
-       && (img->comps[2].dy == 1))/* horizontal sub-sample only */
-  {
-               sycc422_to_rgb(img);
-  }
-       else
-       if((img->comps[0].dx == 1)
-       && (img->comps[1].dx == 1)
-       && (img->comps[2].dx == 1)
-       && (img->comps[0].dy == 1)
-       && (img->comps[1].dy == 1)
-       && (img->comps[2].dy == 1))/* no sub-sample */
-  {
-               sycc444_to_rgb(img);
-  }
-       else
-  {
-               fprintf(stderr,"%s:%d:color_sycc_to_rgb\n\tCAN NOT CONVERT\n", __FILE__,__LINE__);
-               return;
-  }
+    if (img->numcomps < 3) {
+        img->color_space = OPJ_CLRSPC_GRAY;
+        return;
+    }
+
+    if ((img->comps[0].dx == 1)
+            && (img->comps[1].dx == 2)
+            && (img->comps[2].dx == 2)
+            && (img->comps[0].dy == 1)
+            && (img->comps[1].dy == 2)
+            && (img->comps[2].dy == 2)) { /* horizontal and vertical sub-sample */
+        sycc420_to_rgb(img);
+    } else if ((img->comps[0].dx == 1)
+               && (img->comps[1].dx == 2)
+               && (img->comps[2].dx == 2)
+               && (img->comps[0].dy == 1)
+               && (img->comps[1].dy == 1)
+               && (img->comps[2].dy == 1)) { /* horizontal sub-sample only */
+        sycc422_to_rgb(img);
+    } else if ((img->comps[0].dx == 1)
+               && (img->comps[1].dx == 1)
+               && (img->comps[2].dx == 1)
+               && (img->comps[0].dy == 1)
+               && (img->comps[1].dy == 1)
+               && (img->comps[2].dy == 1)) { /* no sub-sample */
+        sycc444_to_rgb(img);
+    } else {
+        fprintf(stderr, "%s:%d:color_sycc_to_rgb\n\tCAN NOT CONVERT\n", __FILE__,
+                __LINE__);
+        return;
+    }
 }/* color_sycc_to_rgb() */
 
 #if defined(OPJ_HAVE_LIBLCMS2) || defined(OPJ_HAVE_LIBLCMS1)
@@ -373,534 +456,547 @@ void color_sycc_to_rgb(opj_image_t *img)
 /*#define DEBUG_PROFILE*/
 void color_apply_icc_profile(opj_image_t *image)
 {
-       cmsHPROFILE in_prof, out_prof;
-       cmsHTRANSFORM transform;
-       cmsColorSpaceSignature in_space, out_space;
-       cmsUInt32Number intent, in_type, out_type;
-       int *r, *g, *b;
-       size_t nr_samples, i, max, max_w, max_h;
-       int prec, ok = 0;
-       OPJ_COLOR_SPACE new_space;
-
-       in_prof = cmsOpenProfileFromMem(image->icc_profile_buf, image->icc_profile_len);
+    cmsHPROFILE in_prof, out_prof;
+    cmsHTRANSFORM transform;
+    cmsColorSpaceSignature in_space, out_space;
+    cmsUInt32Number intent, in_type, out_type;
+    int *r, *g, *b;
+    size_t nr_samples, i, max, max_w, max_h;
+    int prec, ok = 0;
+    OPJ_COLOR_SPACE new_space;
+
+    in_prof = cmsOpenProfileFromMem(image->icc_profile_buf, image->icc_profile_len);
 #ifdef DEBUG_PROFILE
-       FILE *icm = fopen("debug.icm","wb");
-       fwrite( image->icc_profile_buf,1, image->icc_profile_len,icm);
-       fclose(icm);
+    FILE *icm = fopen("debug.icm", "wb");
+    fwrite(image->icc_profile_buf, 1, image->icc_profile_len, icm);
+    fclose(icm);
 #endif
 
-       if(in_prof == NULL) return;
-
-       in_space = cmsGetPCS(in_prof);
-       out_space = cmsGetColorSpace(in_prof);
-       intent = cmsGetHeaderRenderingIntent(in_prof);
-
-       
-       max_w = image->comps[0].w;
-       max_h = image->comps[0].h;
-       prec = (int)image->comps[0].prec;
-
-       if(out_space == cmsSigRgbData) /* enumCS 16 */
-       {
-               if( prec <= 8 )
-               {
-                       in_type = TYPE_RGB_8;
-                       out_type = TYPE_RGB_8;
-               }
-               else
-               {
-                       in_type = TYPE_RGB_16;
-                       out_type = TYPE_RGB_16;
-               }
-               out_prof = cmsCreate_sRGBProfile();
-               new_space = OPJ_CLRSPC_SRGB;
-       }
-       else if(out_space == cmsSigGrayData) /* enumCS 17 */
-       {
-               in_type = TYPE_GRAY_8;
-               out_type = TYPE_RGB_8;
-               out_prof = cmsCreate_sRGBProfile();
-               new_space = OPJ_CLRSPC_SRGB;
-       }
-       else if(out_space == cmsSigYCbCrData) /* enumCS 18 */
-       {
-               in_type = TYPE_YCbCr_16;
-               out_type = TYPE_RGB_16;
-               out_prof = cmsCreate_sRGBProfile();
-               new_space = OPJ_CLRSPC_SRGB;
-       }
-       else
-       {
+    if (in_prof == NULL) {
+        return;
+    }
+
+    in_space = cmsGetPCS(in_prof);
+    out_space = cmsGetColorSpace(in_prof);
+    intent = cmsGetHeaderRenderingIntent(in_prof);
+
+
+    max_w = image->comps[0].w;
+    max_h = image->comps[0].h;
+    prec = (int)image->comps[0].prec;
+
+    if (out_space == cmsSigRgbData) { /* enumCS 16 */
+        if (prec <= 8) {
+            in_type = TYPE_RGB_8;
+            out_type = TYPE_RGB_8;
+        } else {
+            in_type = TYPE_RGB_16;
+            out_type = TYPE_RGB_16;
+        }
+        out_prof = cmsCreate_sRGBProfile();
+        new_space = OPJ_CLRSPC_SRGB;
+    } else if (out_space == cmsSigGrayData) { /* enumCS 17 */
+        in_type = TYPE_GRAY_8;
+        out_type = TYPE_RGB_8;
+        out_prof = cmsCreate_sRGBProfile();
+        new_space = OPJ_CLRSPC_SRGB;
+    } else if (out_space == cmsSigYCbCrData) { /* enumCS 18 */
+        in_type = TYPE_YCbCr_16;
+        out_type = TYPE_RGB_16;
+        out_prof = cmsCreate_sRGBProfile();
+        new_space = OPJ_CLRSPC_SRGB;
+    } else {
 #ifdef DEBUG_PROFILE
-               fprintf(stderr,"%s:%d: color_apply_icc_profile\n\tICC Profile has unknown "
-                       "output colorspace(%#x)(%c%c%c%c)\n\tICC Profile ignored.\n",
-                       __FILE__,__LINE__,out_space,
-                       (out_space>>24) & 0xff,(out_space>>16) & 0xff,
-                       (out_space>>8) & 0xff, out_space & 0xff);
+        fprintf(stderr, "%s:%d: color_apply_icc_profile\n\tICC Profile has unknown "
+                "output colorspace(%#x)(%c%c%c%c)\n\tICC Profile ignored.\n",
+                __FILE__, __LINE__, out_space,
+                (out_space >> 24) & 0xff, (out_space >> 16) & 0xff,
+                (out_space >> 8) & 0xff, out_space & 0xff);
 #endif
-               cmsCloseProfile(in_prof);
+        cmsCloseProfile(in_prof);
 
-               return;
-       }
-       if(out_prof == NULL)
-       {
-               cmsCloseProfile(in_prof);
-               return;
-       }
+        return;
+    }
+    if (out_prof == NULL) {
+        cmsCloseProfile(in_prof);
+        return;
+    }
 
 #ifdef DEBUG_PROFILE
-       fprintf(stderr,"%s:%d:color_apply_icc_profile\n\tchannels(%d) prec(%d) w(%d) h(%d)"
-               "\n\tprofile: in(%p) out(%p)\n",__FILE__,__LINE__,image->numcomps,prec,
-               max_w,max_h, (void*)in_prof,(void*)out_prof);
-
-       fprintf(stderr,"\trender_intent (%u)\n\t"
-               "color_space: in(%#x)(%c%c%c%c)   out:(%#x)(%c%c%c%c)\n\t"
-               "       type: in(%u)              out:(%u)\n",
-               intent,
-               in_space,
-               (in_space>>24) & 0xff,(in_space>>16) & 0xff,
-               (in_space>>8) & 0xff, in_space & 0xff,
-
-               out_space,
-               (out_space>>24) & 0xff,(out_space>>16) & 0xff,
-               (out_space>>8) & 0xff, out_space & 0xff,
-
-               in_type,out_type
-       );
+    fprintf(stderr,
+            "%s:%d:color_apply_icc_profile\n\tchannels(%d) prec(%d) w(%d) h(%d)"
+            "\n\tprofile: in(%p) out(%p)\n", __FILE__, __LINE__, image->numcomps, prec,
+            max_w, max_h, (void*)in_prof, (void*)out_prof);
+
+    fprintf(stderr, "\trender_intent (%u)\n\t"
+            "color_space: in(%#x)(%c%c%c%c)   out:(%#x)(%c%c%c%c)\n\t"
+            "       type: in(%u)              out:(%u)\n",
+            intent,
+            in_space,
+            (in_space >> 24) & 0xff, (in_space >> 16) & 0xff,
+            (in_space >> 8) & 0xff, in_space & 0xff,
+
+            out_space,
+            (out_space >> 24) & 0xff, (out_space >> 16) & 0xff,
+            (out_space >> 8) & 0xff, out_space & 0xff,
+
+            in_type, out_type
+           );
 #else
-  (void)prec;
-  (void)in_space;
+    (void)prec;
+    (void)in_space;
 #endif /* DEBUG_PROFILE */
 
-       transform = cmsCreateTransform(in_prof, in_type, out_prof, out_type, intent, 0);
+    transform = cmsCreateTransform(in_prof, in_type, out_prof, out_type, intent, 0);
 
 #ifdef OPJ_HAVE_LIBLCMS2
-/* Possible for: LCMS_VERSION >= 2000 :*/
-       cmsCloseProfile(in_prof);
-       cmsCloseProfile(out_prof);
+    /* Possible for: LCMS_VERSION >= 2000 :*/
+    cmsCloseProfile(in_prof);
+    cmsCloseProfile(out_prof);
 #endif
 
-       if(transform == NULL)
-       {
+    if (transform == NULL) {
 #ifdef DEBUG_PROFILE
-               fprintf(stderr,"%s:%d:color_apply_icc_profile\n\tcmsCreateTransform failed. "
-                       "ICC Profile ignored.\n",__FILE__,__LINE__);
+        fprintf(stderr, "%s:%d:color_apply_icc_profile\n\tcmsCreateTransform failed. "
+                "ICC Profile ignored.\n", __FILE__, __LINE__);
 #endif
 
 #ifdef OPJ_HAVE_LIBLCMS1
-               cmsCloseProfile(in_prof);
-               cmsCloseProfile(out_prof);
+        cmsCloseProfile(in_prof);
+        cmsCloseProfile(out_prof);
 #endif
-               return;
-       }
-
-       if(image->numcomps > 2)/* RGB, RGBA */
-       {
-               if( prec <= 8 )
-               {
-                       unsigned char *inbuf, *outbuf, *in, *out;
-
-                       max = max_w * max_h;
-                       nr_samples = (size_t)(max * 3U * sizeof(unsigned char));
-                       in = inbuf = (unsigned char*)malloc(nr_samples);
-                       out = outbuf = (unsigned char*)malloc(nr_samples);
-
-                       if(inbuf == NULL || outbuf == NULL) goto fails0;
-
-                       r = image->comps[0].data;
-                       g = image->comps[1].data;
-                       b = image->comps[2].data;
-
-                       for(i = 0U; i < max; ++i)
-                       {
-                               *in++ = (unsigned char)*r++;
-                               *in++ = (unsigned char)*g++;
-                               *in++ = (unsigned char)*b++;
-                       }
-
-                       cmsDoTransform(transform, inbuf, outbuf, (cmsUInt32Number)max);
-
-                       r = image->comps[0].data;
-                       g = image->comps[1].data;
-                       b = image->comps[2].data;
-
-                       for(i = 0U; i < max; ++i)
-                       {
-                               *r++ = (int)*out++;
-                               *g++ = (int)*out++;
-                               *b++ = (int)*out++;
-                       }
-                       ok = 1;
+        return;
+    }
+
+    if (image->numcomps > 2) { /* RGB, RGBA */
+        if (prec <= 8) {
+            unsigned char *inbuf, *outbuf, *in, *out;
+
+            max = max_w * max_h;
+            nr_samples = (size_t)(max * 3U * sizeof(unsigned char));
+            in = inbuf = (unsigned char*)malloc(nr_samples);
+            out = outbuf = (unsigned char*)malloc(nr_samples);
+
+            if (inbuf == NULL || outbuf == NULL) {
+                goto fails0;
+            }
+
+            r = image->comps[0].data;
+            g = image->comps[1].data;
+            b = image->comps[2].data;
+
+            for (i = 0U; i < max; ++i) {
+                *in++ = (unsigned char) * r++;
+                *in++ = (unsigned char) * g++;
+                *in++ = (unsigned char) * b++;
+            }
+
+            cmsDoTransform(transform, inbuf, outbuf, (cmsUInt32Number)max);
+
+            r = image->comps[0].data;
+            g = image->comps[1].data;
+            b = image->comps[2].data;
+
+            for (i = 0U; i < max; ++i) {
+                *r++ = (int) * out++;
+                *g++ = (int) * out++;
+                *b++ = (int) * out++;
+            }
+            ok = 1;
 
 fails0:
-                       free(inbuf);
-                       free(outbuf);
-               }
-               else /* prec > 8 */
-               {
-                       unsigned short *inbuf, *outbuf, *in, *out;
-
-                       max = max_w * max_h;
-                       nr_samples = (size_t)(max * 3U * sizeof(unsigned short));
-                       in = inbuf = (unsigned short*)malloc(nr_samples);
-                       out = outbuf = (unsigned short*)malloc(nr_samples);
-
-                       if(inbuf == NULL || outbuf == NULL) goto fails1;
-
-                       r = image->comps[0].data;
-                       g = image->comps[1].data;
-                       b = image->comps[2].data;
-
-                       for(i = 0U      ; i < max; ++i)
-                       {
-                               *in++ = (unsigned short)*r++;
-                               *in++ = (unsigned short)*g++;
-                               *in++ = (unsigned short)*b++;
-                       }
-
-                       cmsDoTransform(transform, inbuf, outbuf, (cmsUInt32Number)max);
-
-                       r = image->comps[0].data;
-                       g = image->comps[1].data;
-                       b = image->comps[2].data;
-
-                       for(i = 0; i < max; ++i)
-                       {
-                               *r++ = (int)*out++;
-                               *g++ = (int)*out++;
-                               *b++ = (int)*out++;
-                       }
-                       ok = 1;
+            free(inbuf);
+            free(outbuf);
+        } else { /* prec > 8 */
+            unsigned short *inbuf, *outbuf, *in, *out;
+
+            max = max_w * max_h;
+            nr_samples = (size_t)(max * 3U * sizeof(unsigned short));
+            in = inbuf = (unsigned short*)malloc(nr_samples);
+            out = outbuf = (unsigned short*)malloc(nr_samples);
+
+            if (inbuf == NULL || outbuf == NULL) {
+                goto fails1;
+            }
+
+            r = image->comps[0].data;
+            g = image->comps[1].data;
+            b = image->comps[2].data;
+
+            for (i = 0U  ; i < max; ++i) {
+                *in++ = (unsigned short) * r++;
+                *in++ = (unsigned short) * g++;
+                *in++ = (unsigned short) * b++;
+            }
+
+            cmsDoTransform(transform, inbuf, outbuf, (cmsUInt32Number)max);
+
+            r = image->comps[0].data;
+            g = image->comps[1].data;
+            b = image->comps[2].data;
+
+            for (i = 0; i < max; ++i) {
+                *r++ = (int) * out++;
+                *g++ = (int) * out++;
+                *b++ = (int) * out++;
+            }
+            ok = 1;
 
 fails1:
-                       free(inbuf);
-                       free(outbuf);
-               }
-       }
-       else /* image->numcomps <= 2 : GRAY, GRAYA */
-       {
-               if(prec <= 8)
-               {
-                       unsigned char *in, *inbuf, *out, *outbuf;
-                       opj_image_comp_t *new_comps;
+            free(inbuf);
+            free(outbuf);
+        }
+    } else { /* image->numcomps <= 2 : GRAY, GRAYA */
+        if (prec <= 8) {
+            unsigned char *in, *inbuf, *out, *outbuf;
+            opj_image_comp_t *new_comps;
 
-                       max = max_w * max_h;
-                       nr_samples = (size_t)(max * 3 * sizeof(unsigned char));
-                       in = inbuf = (unsigned char*)malloc(nr_samples);
-                       out = outbuf = (unsigned char*)malloc(nr_samples);
-                       g = (int*)calloc((size_t)max, sizeof(int));
-                       b = (int*)calloc((size_t)max, sizeof(int));
+            max = max_w * max_h;
+            nr_samples = (size_t)(max * 3 * sizeof(unsigned char));
+            in = inbuf = (unsigned char*)malloc(nr_samples);
+            out = outbuf = (unsigned char*)malloc(nr_samples);
+            g = (int*)calloc((size_t)max, sizeof(int));
+            b = (int*)calloc((size_t)max, sizeof(int));
 
-                       if(inbuf == NULL || outbuf == NULL || g == NULL || b == NULL) goto fails2;
+            if (inbuf == NULL || outbuf == NULL || g == NULL || b == NULL) {
+                goto fails2;
+            }
 
-                       new_comps = (opj_image_comp_t*)realloc(image->comps, (image->numcomps+2)*sizeof(opj_image_comp_t));
+            new_comps = (opj_image_comp_t*)realloc(image->comps,
+                                                   (image->numcomps + 2) * sizeof(opj_image_comp_t));
 
-                       if(new_comps == NULL) goto fails2;
+            if (new_comps == NULL) {
+                goto fails2;
+            }
 
-                       image->comps = new_comps;
+            image->comps = new_comps;
 
-                       if(image->numcomps == 2)
-                               image->comps[3] = image->comps[1];
+            if (image->numcomps == 2) {
+                image->comps[3] = image->comps[1];
+            }
 
-                       image->comps[1] = image->comps[0];
-                       image->comps[2] = image->comps[0];
+            image->comps[1] = image->comps[0];
+            image->comps[2] = image->comps[0];
 
-                       image->comps[1].data = g;
-                       image->comps[2].data = b;
+            image->comps[1].data = g;
+            image->comps[2].data = b;
 
-                       image->numcomps += 2;
+            image->numcomps += 2;
 
-                       r = image->comps[0].data;
+            r = image->comps[0].data;
 
-                       for(i = 0U; i < max; ++i)
-                       {
-                               *in++ = (unsigned char)*r++;
-                       }
-                       cmsDoTransform(transform, inbuf, outbuf, (cmsUInt32Number)max);
+            for (i = 0U; i < max; ++i) {
+                *in++ = (unsigned char) * r++;
+            }
+            cmsDoTransform(transform, inbuf, outbuf, (cmsUInt32Number)max);
 
-                       r = image->comps[0].data;
-                       g = image->comps[1].data;
-                       b = image->comps[2].data;
+            r = image->comps[0].data;
+            g = image->comps[1].data;
+            b = image->comps[2].data;
 
-                       for(i = 0U; i < max; ++i)
-                       {
-                               *r++ = (int)*out++; *g++ = (int)*out++; *b++ = (int)*out++;
-                       }
-                       r = g = b = NULL;
-                       ok = 1;
+            for (i = 0U; i < max; ++i) {
+                *r++ = (int) * out++;
+                *g++ = (int) * out++;
+                *b++ = (int) * out++;
+            }
+            r = g = b = NULL;
+            ok = 1;
 
 fails2:
-                       free(inbuf);
-                       free(outbuf);
-                       free(g);
-                       free(b);
-               }
-               else /* prec > 8 */
-               {
-                       unsigned short *in, *inbuf, *out, *outbuf;
-                       opj_image_comp_t *new_comps;
+            free(inbuf);
+            free(outbuf);
+            free(g);
+            free(b);
+        } else { /* prec > 8 */
+            unsigned short *in, *inbuf, *out, *outbuf;
+            opj_image_comp_t *new_comps;
 
-                       max = max_w * max_h;
-                       nr_samples = (size_t)(max * 3U * sizeof(unsigned short));
-                       in = inbuf = (unsigned short*)malloc(nr_samples);
-                       out = outbuf = (unsigned short*)malloc(nr_samples);
-                       g = (int*)calloc((size_t)max, sizeof(int));
-                       b = (int*)calloc((size_t)max, sizeof(int));
+            max = max_w * max_h;
+            nr_samples = (size_t)(max * 3U * sizeof(unsigned short));
+            in = inbuf = (unsigned short*)malloc(nr_samples);
+            out = outbuf = (unsigned short*)malloc(nr_samples);
+            g = (int*)calloc((size_t)max, sizeof(int));
+            b = (int*)calloc((size_t)max, sizeof(int));
 
-                       if(inbuf == NULL || outbuf == NULL || g == NULL || b == NULL) goto fails3;
+            if (inbuf == NULL || outbuf == NULL || g == NULL || b == NULL) {
+                goto fails3;
+            }
 
-                       new_comps = (opj_image_comp_t*)realloc(image->comps, (image->numcomps+2)*sizeof(opj_image_comp_t));
+            new_comps = (opj_image_comp_t*)realloc(image->comps,
+                                                   (image->numcomps + 2) * sizeof(opj_image_comp_t));
 
-                       if(new_comps == NULL) goto fails3;
+            if (new_comps == NULL) {
+                goto fails3;
+            }
 
-                       image->comps = new_comps;
+            image->comps = new_comps;
 
-                       if(image->numcomps == 2)
-                               image->comps[3] = image->comps[1];
+            if (image->numcomps == 2) {
+                image->comps[3] = image->comps[1];
+            }
 
-                       image->comps[1] = image->comps[0];
-                       image->comps[2] = image->comps[0];
+            image->comps[1] = image->comps[0];
+            image->comps[2] = image->comps[0];
 
-                       image->comps[1].data = g;
-                       image->comps[2].data = b;
+            image->comps[1].data = g;
+            image->comps[2].data = b;
 
-                       image->numcomps += 2;
+            image->numcomps += 2;
 
-                       r = image->comps[0].data;
+            r = image->comps[0].data;
 
-                       for(i = 0U; i < max; ++i)
-                       {
-                               *in++ = (unsigned short)*r++;
-                       }
-                       cmsDoTransform(transform, inbuf, outbuf, (cmsUInt32Number)max);
+            for (i = 0U; i < max; ++i) {
+                *in++ = (unsigned short) * r++;
+            }
+            cmsDoTransform(transform, inbuf, outbuf, (cmsUInt32Number)max);
 
-                       r = image->comps[0].data;
-                       g = image->comps[1].data;
-                       b = image->comps[2].data;
+            r = image->comps[0].data;
+            g = image->comps[1].data;
+            b = image->comps[2].data;
 
-                       for(i = 0; i < max; ++i)
-                       {
-                               *r++ = (int)*out++; *g++ = (int)*out++; *b++ = (int)*out++;
-                       }
-                       r = g = b = NULL;
-                       ok = 1;
+            for (i = 0; i < max; ++i) {
+                *r++ = (int) * out++;
+                *g++ = (int) * out++;
+                *b++ = (int) * out++;
+            }
+            r = g = b = NULL;
+            ok = 1;
 
 fails3:
-                       free(inbuf);
-                       free(outbuf);
-                       free(g);
-                       free(b);
-               }
-       }/* if(image->numcomps > 2) */
+            free(inbuf);
+            free(outbuf);
+            free(g);
+            free(b);
+        }
+    }/* if(image->numcomps > 2) */
 
-       cmsDeleteTransform(transform);
+    cmsDeleteTransform(transform);
 
 #ifdef OPJ_HAVE_LIBLCMS1
-       cmsCloseProfile(in_prof);
-       cmsCloseProfile(out_prof);
+    cmsCloseProfile(in_prof);
+    cmsCloseProfile(out_prof);
 #endif
-       if(ok)
-       {
-               image->color_space = new_space;
-       }
+    if (ok) {
+        image->color_space = new_space;
+    }
 }/* color_apply_icc_profile() */
 
 void color_cielab_to_rgb(opj_image_t *image)
 {
-       int *row;
-       int enumcs, numcomps;
-       OPJ_COLOR_SPACE new_space;
-
-       numcomps = (int)image->numcomps;
-       
-       if(numcomps != 3)
-       {
-               fprintf(stderr,"%s:%d:\n\tnumcomps %d not handled. Quitting.\n",
-                                               __FILE__,__LINE__,numcomps);
-               return;
-       }
-       
-       row = (int*)image->icc_profile_buf;
-       enumcs = row[0];
-       
-       if(enumcs == 14) /* CIELab */
-       {
-               int *L, *a, *b, *red, *green, *blue;
-               int *src0, *src1, *src2, *dst0, *dst1, *dst2;
-               double rl, ol, ra, oa, rb, ob, prec0, prec1, prec2;
-               double minL, maxL, mina, maxa, minb, maxb;
-               unsigned int default_type;
-               unsigned int i, max;
-               cmsHPROFILE in, out;
-               cmsHTRANSFORM transform;
-               cmsUInt16Number RGB[3];
-               cmsCIELab Lab;
-               
-               in = cmsCreateLab4Profile(NULL);
-               if(in == NULL){
-                       return;
-               }
-               out = cmsCreate_sRGBProfile();
-               if(out == NULL){
-                       cmsCloseProfile(in);
-                       return;
-               }
-               transform = cmsCreateTransform(in, TYPE_Lab_DBL, out, TYPE_RGB_16, INTENT_PERCEPTUAL, 0);
-               
+    int *row;
+    int enumcs, numcomps;
+    OPJ_COLOR_SPACE new_space;
+
+    numcomps = (int)image->numcomps;
+
+    if (numcomps != 3) {
+        fprintf(stderr, "%s:%d:\n\tnumcomps %d not handled. Quitting.\n",
+                __FILE__, __LINE__, numcomps);
+        return;
+    }
+
+    row = (int*)image->icc_profile_buf;
+    enumcs = row[0];
+
+    if (enumcs == 14) { /* CIELab */
+        int *L, *a, *b, *red, *green, *blue;
+        int *src0, *src1, *src2, *dst0, *dst1, *dst2;
+        double rl, ol, ra, oa, rb, ob, prec0, prec1, prec2;
+        double minL, maxL, mina, maxa, minb, maxb;
+        unsigned int default_type;
+        unsigned int i, max;
+        cmsHPROFILE in, out;
+        cmsHTRANSFORM transform;
+        cmsUInt16Number RGB[3];
+        cmsCIELab Lab;
+
+        in = cmsCreateLab4Profile(NULL);
+        if (in == NULL) {
+            return;
+        }
+        out = cmsCreate_sRGBProfile();
+        if (out == NULL) {
+            cmsCloseProfile(in);
+            return;
+        }
+        transform = cmsCreateTransform(in, TYPE_Lab_DBL, out, TYPE_RGB_16,
+                                       INTENT_PERCEPTUAL, 0);
+
 #ifdef OPJ_HAVE_LIBLCMS2
-               cmsCloseProfile(in);
-               cmsCloseProfile(out);
+        cmsCloseProfile(in);
+        cmsCloseProfile(out);
 #endif
-               if(transform == NULL)
-               {
+        if (transform == NULL) {
 #ifdef OPJ_HAVE_LIBLCMS1
-                       cmsCloseProfile(in);
-                       cmsCloseProfile(out);
+            cmsCloseProfile(in);
+            cmsCloseProfile(out);
 #endif
-                       return;
-               }
-               new_space = OPJ_CLRSPC_SRGB;
-
-               prec0 = (double)image->comps[0].prec;
-               prec1 = (double)image->comps[1].prec;
-               prec2 = (double)image->comps[2].prec;
-               
-               default_type = (unsigned int)row[1];
-               
-               if(default_type == 0x44454600)/* DEF : default */
-               {
-                       rl = 100; ra = 170; rb = 200;
-                       ol = 0;
-                       oa = pow(2, prec1 - 1);
-                       ob = pow(2, prec2 - 2) +  pow(2, prec2 - 3);
-               }
-               else
-               {
-                       rl = row[2]; ra = row[4]; rb = row[6];
-                       ol = row[3]; oa = row[5]; ob = row[7];
-               }
-               
-               L = src0 = image->comps[0].data;
-               a = src1 = image->comps[1].data;
-               b = src2 = image->comps[2].data;
-               
-               max = image->comps[0].w * image->comps[0].h;
-               
-               red = dst0 = (int*)malloc(max * sizeof(int));
-               green = dst1 = (int*)malloc(max * sizeof(int));
-               blue = dst2 = (int*)malloc(max * sizeof(int));
-
-               if(red == NULL || green == NULL || blue == NULL) goto fails;
-
-               minL = -(rl * ol)/(pow(2, prec0)-1);
-               maxL = minL + rl;
-               
-               mina = -(ra * oa)/(pow(2, prec1)-1);
-               maxa = mina + ra;
-               
-               minb = -(rb * ob)/(pow(2, prec2)-1);
-               maxb = minb + rb;
-               
-               for(i = 0; i < max; ++i)
-               {
-                       Lab.L = minL + (double)(*L) * (maxL - minL)/(pow(2, prec0)-1); ++L;
-                       Lab.a = mina + (double)(*a) * (maxa - mina)/(pow(2, prec1)-1); ++a;
-                       Lab.b = minb + (double)(*b) * (maxb - minb)/(pow(2, prec2)-1); ++b;
-               
-                       cmsDoTransform(transform, &Lab, RGB, 1);
-               
-                       *red++ = RGB[0];
-                       *green++ = RGB[1];
-                       *blue++ = RGB[2];
-               }
-               cmsDeleteTransform(transform);
+            return;
+        }
+        new_space = OPJ_CLRSPC_SRGB;
+
+        prec0 = (double)image->comps[0].prec;
+        prec1 = (double)image->comps[1].prec;
+        prec2 = (double)image->comps[2].prec;
+
+        default_type = (unsigned int)row[1];
+
+        if (default_type == 0x44454600) { /* DEF : default */
+            rl = 100;
+            ra = 170;
+            rb = 200;
+            ol = 0;
+            oa = pow(2, prec1 - 1);
+            ob = pow(2, prec2 - 2) +  pow(2, prec2 - 3);
+        } else {
+            rl = row[2];
+            ra = row[4];
+            rb = row[6];
+            ol = row[3];
+            oa = row[5];
+            ob = row[7];
+        }
+
+        L = src0 = image->comps[0].data;
+        a = src1 = image->comps[1].data;
+        b = src2 = image->comps[2].data;
+
+        max = image->comps[0].w * image->comps[0].h;
+
+        red = dst0 = (int*)malloc(max * sizeof(int));
+        green = dst1 = (int*)malloc(max * sizeof(int));
+        blue = dst2 = (int*)malloc(max * sizeof(int));
+
+        if (red == NULL || green == NULL || blue == NULL) {
+            goto fails;
+        }
+
+        minL = -(rl * ol) / (pow(2, prec0) - 1);
+        maxL = minL + rl;
+
+        mina = -(ra * oa) / (pow(2, prec1) - 1);
+        maxa = mina + ra;
+
+        minb = -(rb * ob) / (pow(2, prec2) - 1);
+        maxb = minb + rb;
+
+        for (i = 0; i < max; ++i) {
+            Lab.L = minL + (double)(*L) * (maxL - minL) / (pow(2, prec0) - 1);
+            ++L;
+            Lab.a = mina + (double)(*a) * (maxa - mina) / (pow(2, prec1) - 1);
+            ++a;
+            Lab.b = minb + (double)(*b) * (maxb - minb) / (pow(2, prec2) - 1);
+            ++b;
+
+            cmsDoTransform(transform, &Lab, RGB, 1);
+
+            *red++ = RGB[0];
+            *green++ = RGB[1];
+            *blue++ = RGB[2];
+        }
+        cmsDeleteTransform(transform);
 #ifdef OPJ_HAVE_LIBLCMS1
-               cmsCloseProfile(in);
-               cmsCloseProfile(out);
+        cmsCloseProfile(in);
+        cmsCloseProfile(out);
 #endif
-               free(src0); image->comps[0].data = dst0;
-               free(src1); image->comps[1].data = dst1;
-               free(src2); image->comps[2].data = dst2;
-               
-               image->color_space = new_space;
-               image->comps[0].prec = 16;
-               image->comps[1].prec = 16;
-               image->comps[2].prec = 16;
-               
-               return;
+        free(src0);
+        image->comps[0].data = dst0;
+        free(src1);
+        image->comps[1].data = dst1;
+        free(src2);
+        image->comps[2].data = dst2;
+
+        image->color_space = new_space;
+        image->comps[0].prec = 16;
+        image->comps[1].prec = 16;
+        image->comps[2].prec = 16;
+
+        return;
 
 fails:
-               cmsDeleteTransform(transform);
+        cmsDeleteTransform(transform);
 #ifdef OPJ_HAVE_LIBLCMS1
-               cmsCloseProfile(in);
-               cmsCloseProfile(out);
+        cmsCloseProfile(in);
+        cmsCloseProfile(out);
 #endif
-               if(red) free(red);
-               if(green) free(green);
-               if(blue) free(blue);
-               return;
-       }
-       
-       fprintf(stderr,"%s:%d:\n\tenumCS %d not handled. Ignoring.\n", __FILE__,__LINE__, enumcs);
+        if (red) {
+            free(red);
+        }
+        if (green) {
+            free(green);
+        }
+        if (blue) {
+            free(blue);
+        }
+        return;
+    }
+
+    fprintf(stderr, "%s:%d:\n\tenumCS %d not handled. Ignoring.\n", __FILE__,
+            __LINE__, enumcs);
 }/* color_cielab_to_rgb() */
 
 #endif /* OPJ_HAVE_LIBLCMS2 || OPJ_HAVE_LIBLCMS1 */
 
 void color_cmyk_to_rgb(opj_image_t *image)
 {
-       float C, M, Y, K;
-       float sC, sM, sY, sK;
-       unsigned int w, h, max, i;
-
-       w = image->comps[0].w;
-       h = image->comps[0].h;
-
-       if (
-                       (image->numcomps < 4)
-                || (image->comps[0].dx != image->comps[1].dx) || (image->comps[0].dx != image->comps[2].dx) || (image->comps[0].dx != image->comps[3].dx)
-                || (image->comps[0].dy != image->comps[1].dy) || (image->comps[0].dy != image->comps[2].dy) || (image->comps[0].dy != image->comps[3].dy)
-                       ) {
-               fprintf(stderr,"%s:%d:color_cmyk_to_rgb\n\tCAN NOT CONVERT\n", __FILE__,__LINE__);
-               return;
-       }
-
-       max = w * h;
-       
-       sC = 1.0F / (float)((1 << image->comps[0].prec) - 1);
-       sM = 1.0F / (float)((1 << image->comps[1].prec) - 1);
-       sY = 1.0F / (float)((1 << image->comps[2].prec) - 1);
-       sK = 1.0F / (float)((1 << image->comps[3].prec) - 1);
-
-       for(i = 0; i < max; ++i)
-       {
-               /* CMYK values from 0 to 1 */
-               C = (float)(image->comps[0].data[i]) * sC;
-               M = (float)(image->comps[1].data[i]) * sM;
-               Y = (float)(image->comps[2].data[i]) * sY;
-               K = (float)(image->comps[3].data[i]) * sK;
-               
-               /* Invert all CMYK values */
-               C = 1.0F - C;
-               M = 1.0F - M;
-               Y = 1.0F - Y;
-               K = 1.0F - K;
-
-               /* CMYK -> RGB : RGB results from 0 to 255 */
-               image->comps[0].data[i] = (int)(255.0F * C * K); /* R */
-               image->comps[1].data[i] = (int)(255.0F * M * K); /* G */
-               image->comps[2].data[i] = (int)(255.0F * Y * K); /* B */
-       }
-
-       free(image->comps[3].data); image->comps[3].data = NULL;
-       image->comps[0].prec = 8;
-       image->comps[1].prec = 8;
-       image->comps[2].prec = 8;
-       image->numcomps -= 1;
-       image->color_space = OPJ_CLRSPC_SRGB;
-       
-       for (i = 3; i < image->numcomps; ++i) {
-               memcpy(&(image->comps[i]), &(image->comps[i+1]), sizeof(image->comps[i]));
-       }
+    float C, M, Y, K;
+    float sC, sM, sY, sK;
+    unsigned int w, h, max, i;
+
+    w = image->comps[0].w;
+    h = image->comps[0].h;
+
+    if (
+        (image->numcomps < 4)
+        || (image->comps[0].dx != image->comps[1].dx) ||
+        (image->comps[0].dx != image->comps[2].dx) ||
+        (image->comps[0].dx != image->comps[3].dx)
+        || (image->comps[0].dy != image->comps[1].dy) ||
+        (image->comps[0].dy != image->comps[2].dy) ||
+        (image->comps[0].dy != image->comps[3].dy)
+    ) {
+        fprintf(stderr, "%s:%d:color_cmyk_to_rgb\n\tCAN NOT CONVERT\n", __FILE__,
+                __LINE__);
+        return;
+    }
+
+    max = w * h;
+
+    sC = 1.0F / (float)((1 << image->comps[0].prec) - 1);
+    sM = 1.0F / (float)((1 << image->comps[1].prec) - 1);
+    sY = 1.0F / (float)((1 << image->comps[2].prec) - 1);
+    sK = 1.0F / (float)((1 << image->comps[3].prec) - 1);
+
+    for (i = 0; i < max; ++i) {
+        /* CMYK values from 0 to 1 */
+        C = (float)(image->comps[0].data[i]) * sC;
+        M = (float)(image->comps[1].data[i]) * sM;
+        Y = (float)(image->comps[2].data[i]) * sY;
+        K = (float)(image->comps[3].data[i]) * sK;
+
+        /* Invert all CMYK values */
+        C = 1.0F - C;
+        M = 1.0F - M;
+        Y = 1.0F - Y;
+        K = 1.0F - K;
+
+        /* CMYK -> RGB : RGB results from 0 to 255 */
+        image->comps[0].data[i] = (int)(255.0F * C * K); /* R */
+        image->comps[1].data[i] = (int)(255.0F * M * K); /* G */
+        image->comps[2].data[i] = (int)(255.0F * Y * K); /* B */
+    }
+
+    free(image->comps[3].data);
+    image->comps[3].data = NULL;
+    image->comps[0].prec = 8;
+    image->comps[1].prec = 8;
+    image->comps[2].prec = 8;
+    image->numcomps -= 1;
+    image->color_space = OPJ_CLRSPC_SRGB;
+
+    for (i = 3; i < image->numcomps; ++i) {
+        memcpy(&(image->comps[i]), &(image->comps[i + 1]), sizeof(image->comps[i]));
+    }
 
 }/* color_cmyk_to_rgb() */
 
@@ -909,57 +1005,77 @@ void color_cmyk_to_rgb(opj_image_t *image)
  */
 void color_esycc_to_rgb(opj_image_t *image)
 {
-       int y, cb, cr, sign1, sign2, val;
-       unsigned int w, h, max, i;
-       int flip_value = (1 << (image->comps[0].prec-1));
-       int max_value = (1 << image->comps[0].prec) - 1;
-       
-       if (
-                   (image->numcomps < 3)
-                || (image->comps[0].dx != image->comps[1].dx) || (image->comps[0].dx != image->comps[2].dx)
-                || (image->comps[0].dy != image->comps[1].dy) || (image->comps[0].dy != image->comps[2].dy)
-          ) {
-               fprintf(stderr,"%s:%d:color_esycc_to_rgb\n\tCAN NOT CONVERT\n", __FILE__,__LINE__);
-               return;
-       }
-       
-       w = image->comps[0].w;
-       h = image->comps[0].h;
-       
-       sign1 = (int)image->comps[1].sgnd;
-       sign2 = (int)image->comps[2].sgnd;
-       
-       max = w * h;
-       
-       for(i = 0; i < max; ++i)
-       {
-               
-               y = image->comps[0].data[i]; cb = image->comps[1].data[i]; cr = image->comps[2].data[i];
-               
-               if( !sign1) cb -= flip_value;
-               if( !sign2) cr -= flip_value;
-               
-               val = (int)
-               ((float)y - (float)0.0000368 * (float)cb
-                + (float)1.40199 * (float)cr + (float)0.5);
-               
-               if(val > max_value) val = max_value; else if(val < 0) val = 0;
-               image->comps[0].data[i] = val;
-               
-               val = (int)
-               ((float)1.0003 * (float)y - (float)0.344125 * (float)cb
-                - (float)0.7141128 * (float)cr + (float)0.5);
-               
-               if(val > max_value) val = max_value; else if(val < 0) val = 0;
-               image->comps[1].data[i] = val;
-               
-               val = (int)
-               ((float)0.999823 * (float)y + (float)1.77204 * (float)cb
-                - (float)0.000008 *(float)cr + (float)0.5);
-               
-               if(val > max_value) val = max_value; else if(val < 0) val = 0;
-               image->comps[2].data[i] = val;
-       }
-       image->color_space = OPJ_CLRSPC_SRGB;
+    int y, cb, cr, sign1, sign2, val;
+    unsigned int w, h, max, i;
+    int flip_value = (1 << (image->comps[0].prec - 1));
+    int max_value = (1 << image->comps[0].prec) - 1;
+
+    if (
+        (image->numcomps < 3)
+        || (image->comps[0].dx != image->comps[1].dx) ||
+        (image->comps[0].dx != image->comps[2].dx)
+        || (image->comps[0].dy != image->comps[1].dy) ||
+        (image->comps[0].dy != image->comps[2].dy)
+    ) {
+        fprintf(stderr, "%s:%d:color_esycc_to_rgb\n\tCAN NOT CONVERT\n", __FILE__,
+                __LINE__);
+        return;
+    }
+
+    w = image->comps[0].w;
+    h = image->comps[0].h;
+
+    sign1 = (int)image->comps[1].sgnd;
+    sign2 = (int)image->comps[2].sgnd;
+
+    max = w * h;
+
+    for (i = 0; i < max; ++i) {
+
+        y = image->comps[0].data[i];
+        cb = image->comps[1].data[i];
+        cr = image->comps[2].data[i];
+
+        if (!sign1) {
+            cb -= flip_value;
+        }
+        if (!sign2) {
+            cr -= flip_value;
+        }
+
+        val = (int)
+              ((float)y - (float)0.0000368 * (float)cb
+               + (float)1.40199 * (float)cr + (float)0.5);
+
+        if (val > max_value) {
+            val = max_value;
+        } else if (val < 0) {
+            val = 0;
+        }
+        image->comps[0].data[i] = val;
+
+        val = (int)
+              ((float)1.0003 * (float)y - (float)0.344125 * (float)cb
+               - (float)0.7141128 * (float)cr + (float)0.5);
+
+        if (val > max_value) {
+            val = max_value;
+        } else if (val < 0) {
+            val = 0;
+        }
+        image->comps[1].data[i] = val;
+
+        val = (int)
+              ((float)0.999823 * (float)y + (float)1.77204 * (float)cb
+               - (float)0.000008 * (float)cr + (float)0.5);
+
+        if (val > max_value) {
+            val = max_value;
+        } else if (val < 0) {
+            val = 0;
+        }
+        image->comps[2].data[i] = val;
+    }
+    image->color_space = OPJ_CLRSPC_SRGB;
 
 }/* color_esycc_to_rgb() */
index 65f271f8a2f9a07ef9e6732dce53952a6f6eee10..ef9a920a51b1ce5829f18a883a4f0167aa5badcd 100644 (file)
@@ -1,11 +1,11 @@
 /*
- * The copyright in this software is being made available under the 3-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 3-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
  * Copyright (c) 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
 
 #if defined(LIBC_SCCS) && !defined(lint)
 static char sccsid[] = "@(#)opj_getopt.c       8.3 (Berkeley) 4/27/95";
-#endif                         /* LIBC_SCCS and not lint */
+#endif              /* LIBC_SCCS and not lint */
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include "opj_getopt.h"
 
-int opj_opterr = 1,                    /* if error message should be printed */
opj_optind = 1,                       /* index into parent argv vector */
opj_optopt,                   /* character checked for validity */
opj_optreset;                 /* reset getopt */
- char *opj_optarg;                     /* argument associated with option */
+int opj_opterr = 1,         /* if error message should be printed */
   opj_optind = 1,            /* index into parent argv vector */
   opj_optopt,            /* character checked for validity */
   opj_optreset;          /* reset getopt */
+char *opj_optarg;          /* argument associated with option */
 
-#define        BADCH   (int)'?'
-#define        BADARG  (int)':'
-static char EMSG[]={""};
+#define BADCH   (int)'?'
+#define BADARG  (int)':'
+static char EMSG[] = {""};
 
 /* As this class remembers its values from one Java call to the other, reset the values before each use */
-void opj_reset_options_reading(void) {
-       opj_opterr = 1;
-       opj_optind = 1;
+void opj_reset_options_reading(void)
+{
+    opj_opterr = 1;
+    opj_optind = 1;
 }
 
 /*
  * getopt --
- *     Parse argc/argv argument vector.
+ *  Parse argc/argv argument vector.
  */
-int opj_getopt(int nargc, char *const *nargv, const char *ostr) {
+int opj_getopt(int nargc, char *const *nargv, const char *ostr)
+{
 #  define __progname nargv[0]
-  static char *place = EMSG;   /* option letter processing */
-  const char *oli = NULL;      /* option letter list index */
-
-  if (opj_optreset || !*place) {       /* update scanning pointer */
-    opj_optreset = 0;
-    if (opj_optind >= nargc || *(place = nargv[opj_optind]) != '-') {
-      place = EMSG;
-      return (-1);
+    static char *place = EMSG;    /* option letter processing */
+    const char *oli = NULL;   /* option letter list index */
+
+    if (opj_optreset || !*place) {    /* update scanning pointer */
+        opj_optreset = 0;
+        if (opj_optind >= nargc || *(place = nargv[opj_optind]) != '-') {
+            place = EMSG;
+            return (-1);
+        }
+        if (place[1] && *++place == '-') {  /* found "--" */
+            ++opj_optind;
+            place = EMSG;
+            return (-1);
+        }
+    }             /* option letter okay? */
+    if ((opj_optopt = (int) * place++) == (int) ':' ||
+            !(oli = strchr(ostr, opj_optopt))) {
+        /*
+         * if the user didn't specify '-' as an option,
+         * assume it means -1.
+         */
+        if (opj_optopt == (int) '-') {
+            return (-1);
+        }
+        if (!*place) {
+            ++opj_optind;
+        }
+        if (opj_opterr && *ostr != ':') {
+            fprintf(stderr,
+                    "%s: illegal option -- %c\n", __progname, opj_optopt);
+            return (BADCH);
+        }
     }
-    if (place[1] && *++place == '-') { /* found "--" */
-      ++opj_optind;
-      place = EMSG;
-      return (-1);
+    if (*++oli != ':') {      /* don't need argument */
+        opj_optarg = NULL;
+        if (!*place) {
+            ++opj_optind;
+        }
+    } else {          /* need an argument */
+        if (*place) {       /* no white space */
+            opj_optarg = place;
+        } else if (nargc <= ++opj_optind) { /* no arg */
+            place = EMSG;
+            if (*ostr == ':') {
+                return (BADARG);
+            }
+            if (opj_opterr) {
+                fprintf(stderr,
+                        "%s: option requires an argument -- %c\n",
+                        __progname, opj_optopt);
+                return (BADCH);
+            }
+        } else {        /* white space */
+            opj_optarg = nargv[opj_optind];
+        }
+        place = EMSG;
+        ++opj_optind;
     }
-  }                            /* option letter okay? */
-  if ((opj_optopt = (int) *place++) == (int) ':' ||
-      !(oli = strchr(ostr, opj_optopt))) {
-    /*
-     * if the user didn't specify '-' as an option,
-     * assume it means -1.
-     */
-    if (opj_optopt == (int) '-')
-      return (-1);
-    if (!*place)
-      ++opj_optind;
-               if (opj_opterr && *ostr != ':') {
-      fprintf(stderr,
-                    "%s: illegal option -- %c\n", __progname, opj_optopt);
-                       return (BADCH);
-               }
-  }
-  if (*++oli != ':') {         /* don't need argument */
-    opj_optarg = NULL;
-    if (!*place)
-      ++opj_optind;
-  } else {                     /* need an argument */
-    if (*place)                        /* no white space */
-      opj_optarg = place;
-    else if (nargc <= ++opj_optind) {  /* no arg */
-      place = EMSG;
-      if (*ostr == ':')
-       return (BADARG);
-                       if (opj_opterr) {
-                               fprintf(stderr,
-                      "%s: option requires an argument -- %c\n",
-                      __progname, opj_optopt);
-                               return (BADCH);
-                       }
-    } else                     /* white space */
-      opj_optarg = nargv[opj_optind];
-    place = EMSG;
-    ++opj_optind;
-  }
-  return (opj_optopt);         /* dump back option letter */
+    return (opj_optopt);      /* dump back option letter */
 }
 
 
 int opj_getopt_long(int argc, char * const argv[], const char *optstring,
-const opj_option_t *longopts, int totlen) {
-       static int lastidx,lastofs;
-       const char *tmp;
-       int i,len;
-       char param = 1;
+                    const opj_option_t *longopts, int totlen)
+{
+    static int lastidx, lastofs;
+    const char *tmp;
+    int i, len;
+    char param = 1;
 
 again:
-       if (opj_optind >= argc || !argv[opj_optind] || *argv[opj_optind]!='-')
-               return -1;
-
-       if (argv[opj_optind][0]=='-' && argv[opj_optind][1]==0) {
-               if(opj_optind >= (argc - 1)){ /* no more input parameters */
-                       param = 0;
-               }
-               else{ /* more input parameters */
-                       if(argv[opj_optind + 1][0] == '-'){
-                               param = 0; /* Missing parameter after '-' */
-                       }
-                       else{
-                               param = 2;
-                       }
-               }
-       }
-
-       if (param == 0) {
-               ++opj_optind;
-               return (BADCH);
-       }
-
-       if (argv[opj_optind][0]=='-') { /* long option */
-               char* arg=argv[opj_optind]+1;
-               const opj_option_t* o;
-               o=longopts;
-               len=sizeof(longopts[0]);
-
-               if (param > 1){
-                       arg = argv[opj_optind+1];
-                       opj_optind++;
-               }
-               else
-                       arg = argv[opj_optind]+1;
-
-               if(strlen(arg)>1){
-                       for (i=0;i<totlen;i=i+len,o++) {
-                               if (!strcmp(o->name,arg)) {     /* match */
-                                       if (o->has_arg == 0) {
-                                               if ((argv[opj_optind+1])&&(!(argv[opj_optind+1][0]=='-'))){
-                                                       fprintf(stderr,"%s: option does not require an argument. Ignoring %s\n",arg,argv[opj_optind+1]);
-                                                       ++opj_optind;
-                                               }
-                                       }else{ 
-                                               opj_optarg=argv[opj_optind+1];
-                                               if(opj_optarg){
-                                                       if (opj_optarg[0] == '-'){ /* Has read next input parameter: No arg for current parameter */                                                            
-                                                               if (opj_opterr) {
-                                                                       fprintf(stderr,"%s: option requires an argument\n",arg);
-                                                                       return (BADCH);
-                                                               }
-                                                       }
-                                               }
-                                               if (!opj_optarg && o->has_arg==1) {     /* no argument there */
-                                                       if (opj_opterr) {
-                                                               fprintf(stderr,"%s: option requires an argument \n",arg);
-                                                               return (BADCH);
-                                                       }
-                                               }
-                                               ++opj_optind;
-                                       }
-                                       ++opj_optind;
-                                       if (o->flag)
-                                               *(o->flag)=o->val;
-                                       else
-                                               return o->val;
-                                       return 0;
-                               }
-                       }/*(end for)String not found in the list*/
-                       fprintf(stderr,"Invalid option %s\n",arg);
-                       ++opj_optind;
-                       return (BADCH);
-               }else{ /*Single character input parameter*/
-                       if (*optstring==':') return ':';
-                       if (lastidx!=opj_optind) {
-                               lastidx=opj_optind; lastofs=0;
-                       }
-                       opj_optopt=argv[opj_optind][lastofs+1];
-                       if ((tmp=strchr(optstring,opj_optopt))) {/*Found input parameter in list*/
-                               if (*tmp==0) {  /* apparently, we looked for \0, i.e. end of argument */
-                                       ++opj_optind;
-                                       goto again;
-                               }
-                               if (tmp[1]==':') {      /* argument expected */
-                                       if (tmp[2]==':' || argv[opj_optind][lastofs+2]) {       /* "-foo", return "oo" as opj_optarg */
-                                               if (!*(opj_optarg=argv[opj_optind]+lastofs+2)) opj_optarg=0;
-                                               goto found;
-                                       }
-                                       opj_optarg=argv[opj_optind+1];
-                                       if(opj_optarg){
-                                               if (opj_optarg[0] == '-'){ /* Has read next input parameter: No arg for current parameter */
-                                                       if (opj_opterr) {
-                                                               fprintf(stderr,"%s: option requires an argument\n",arg);
-                                                               return (BADCH);
-                                                       }
-                                               }
-                                       }
-                                       if (!opj_optarg) {      /* missing argument */
-                                               if (opj_opterr) {
-                                                       fprintf(stderr,"%s: option requires an argument\n",arg);
-                                                       return (BADCH);
-                                               }
-                                       }
-                                       ++opj_optind;
-                               }else {/*Argument not expected*/
-                                       ++lastofs;
-                                       return opj_optopt;
-                               }
+    if (opj_optind >= argc || !argv[opj_optind] || *argv[opj_optind] != '-') {
+        return -1;
+    }
+
+    if (argv[opj_optind][0] == '-' && argv[opj_optind][1] == 0) {
+        if (opj_optind >= (argc - 1)) { /* no more input parameters */
+            param = 0;
+        } else { /* more input parameters */
+            if (argv[opj_optind + 1][0] == '-') {
+                param = 0; /* Missing parameter after '-' */
+            } else {
+                param = 2;
+            }
+        }
+    }
+
+    if (param == 0) {
+        ++opj_optind;
+        return (BADCH);
+    }
+
+    if (argv[opj_optind][0] == '-') { /* long option */
+        char* arg = argv[opj_optind] + 1;
+        const opj_option_t* o;
+        o = longopts;
+        len = sizeof(longopts[0]);
+
+        if (param > 1) {
+            arg = argv[opj_optind + 1];
+            opj_optind++;
+        } else {
+            arg = argv[opj_optind] + 1;
+        }
+
+        if (strlen(arg) > 1) {
+            for (i = 0; i < totlen; i = i + len, o++) {
+                if (!strcmp(o->name, arg)) { /* match */
+                    if (o->has_arg == 0) {
+                        if ((argv[opj_optind + 1]) && (!(argv[opj_optind + 1][0] == '-'))) {
+                            fprintf(stderr, "%s: option does not require an argument. Ignoring %s\n", arg,
+                                    argv[opj_optind + 1]);
+                            ++opj_optind;
+                        }
+                    } else {
+                        opj_optarg = argv[opj_optind + 1];
+                        if (opj_optarg) {
+                            if (opj_optarg[0] ==
+                                    '-') { /* Has read next input parameter: No arg for current parameter */
+                                if (opj_opterr) {
+                                    fprintf(stderr, "%s: option requires an argument\n", arg);
+                                    return (BADCH);
+                                }
+                            }
+                        }
+                        if (!opj_optarg && o->has_arg == 1) { /* no argument there */
+                            if (opj_opterr) {
+                                fprintf(stderr, "%s: option requires an argument \n", arg);
+                                return (BADCH);
+                            }
+                        }
+                        ++opj_optind;
+                    }
+                    ++opj_optind;
+                    if (o->flag) {
+                        *(o->flag) = o->val;
+                    } else {
+                        return o->val;
+                    }
+                    return 0;
+                }
+            }/*(end for)String not found in the list*/
+            fprintf(stderr, "Invalid option %s\n", arg);
+            ++opj_optind;
+            return (BADCH);
+        } else { /*Single character input parameter*/
+            if (*optstring == ':') {
+                return ':';
+            }
+            if (lastidx != opj_optind) {
+                lastidx = opj_optind;
+                lastofs = 0;
+            }
+            opj_optopt = argv[opj_optind][lastofs + 1];
+            if ((tmp = strchr(optstring, opj_optopt))) { /*Found input parameter in list*/
+                if (*tmp == 0) { /* apparently, we looked for \0, i.e. end of argument */
+                    ++opj_optind;
+                    goto again;
+                }
+                if (tmp[1] == ':') { /* argument expected */
+                    if (tmp[2] == ':' ||
+                            argv[opj_optind][lastofs + 2]) { /* "-foo", return "oo" as opj_optarg */
+                        if (!*(opj_optarg = argv[opj_optind] + lastofs + 2)) {
+                            opj_optarg = 0;
+                        }
+                        goto found;
+                    }
+                    opj_optarg = argv[opj_optind + 1];
+                    if (opj_optarg) {
+                        if (opj_optarg[0] ==
+                                '-') { /* Has read next input parameter: No arg for current parameter */
+                            if (opj_opterr) {
+                                fprintf(stderr, "%s: option requires an argument\n", arg);
+                                return (BADCH);
+                            }
+                        }
+                    }
+                    if (!opj_optarg) {  /* missing argument */
+                        if (opj_opterr) {
+                            fprintf(stderr, "%s: option requires an argument\n", arg);
+                            return (BADCH);
+                        }
+                    }
+                    ++opj_optind;
+                } else {/*Argument not expected*/
+                    ++lastofs;
+                    return opj_optopt;
+                }
 found:
-                               ++opj_optind;
-                               return opj_optopt;
-                       }       else {  /* not found */
-                               fprintf(stderr,"Invalid option %s\n",arg);
-                               ++opj_optind;
-                               return (BADCH);
-                       }/*end of not found*/
-               
-               }/* end of single character*/
-       }/*end '-'*/
-       fprintf(stderr,"Invalid option\n");
-       ++opj_optind;
-       return (BADCH);;
+                ++opj_optind;
+                return opj_optopt;
+            }   else {  /* not found */
+                fprintf(stderr, "Invalid option %s\n", arg);
+                ++opj_optind;
+                return (BADCH);
+            }/*end of not found*/
+
+        }/* end of single character*/
+    }/*end '-'*/
+    fprintf(stderr, "Invalid option\n");
+    ++opj_optind;
+    return (BADCH);;
 }/*end function*/
index deee4f6e051ffcaf4c13173861f3ea6c30122a0d..a540128fca56f88c7efdbcf1de1739cd4f43cfd6 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * Copyright (c) 2006-2007, Parvatha Elangovan
@@ -50,7 +50,8 @@
  *
  * log2(a)
  */
-static int int_floorlog2(int a) {
+static int int_floorlog2(int a)
+{
     int l;
     for (l = 0; a > 1; l++) {
         a >>= 1;
@@ -61,470 +62,491 @@ static int int_floorlog2(int a) {
 /* Component precision scaling */
 void clip_component(opj_image_comp_t* component, OPJ_UINT32 precision)
 {
-       OPJ_SIZE_T i;
-       OPJ_SIZE_T len;
-       OPJ_UINT32 umax = (OPJ_UINT32)((OPJ_INT32)-1);
-       
-       len = (OPJ_SIZE_T)component->w * (OPJ_SIZE_T)component->h;
-       if (precision < 32) {
-               umax = (1U << precision) - 1U;
-       }
-       
-       if (component->sgnd) {
-               OPJ_INT32* l_data = component->data;
-               OPJ_INT32 max = (OPJ_INT32)(umax / 2U);
-               OPJ_INT32 min = -max - 1;
-               for (i = 0; i < len; ++i) {
-                       if (l_data[i] > max) {
-                               l_data[i] = max;
-                       } else if (l_data[i] < min) {
-                               l_data[i] = min;
-                       }
-               }
-       } else {
-               OPJ_UINT32* l_data = (OPJ_UINT32*)component->data;
-               for (i = 0; i < len; ++i) {
-                       if (l_data[i] > umax) {
-                               l_data[i] = umax;
-                       }
-               }
-       }
-       component->prec = precision;
+    OPJ_SIZE_T i;
+    OPJ_SIZE_T len;
+    OPJ_UINT32 umax = (OPJ_UINT32)((OPJ_INT32) - 1);
+
+    len = (OPJ_SIZE_T)component->w * (OPJ_SIZE_T)component->h;
+    if (precision < 32) {
+        umax = (1U << precision) - 1U;
+    }
+
+    if (component->sgnd) {
+        OPJ_INT32* l_data = component->data;
+        OPJ_INT32 max = (OPJ_INT32)(umax / 2U);
+        OPJ_INT32 min = -max - 1;
+        for (i = 0; i < len; ++i) {
+            if (l_data[i] > max) {
+                l_data[i] = max;
+            } else if (l_data[i] < min) {
+                l_data[i] = min;
+            }
+        }
+    } else {
+        OPJ_UINT32* l_data = (OPJ_UINT32*)component->data;
+        for (i = 0; i < len; ++i) {
+            if (l_data[i] > umax) {
+                l_data[i] = umax;
+            }
+        }
+    }
+    component->prec = precision;
 }
 
 /* Component precision scaling */
-static void scale_component_up(opj_image_comp_t* component, OPJ_UINT32 precision)
+static void scale_component_up(opj_image_comp_t* component,
+                               OPJ_UINT32 precision)
 {
-       OPJ_SIZE_T i, len;
-       
-       len = (OPJ_SIZE_T)component->w * (OPJ_SIZE_T)component->h;
-       if (component->sgnd) {
-               OPJ_INT64  newMax = (OPJ_INT64)(1U << (precision - 1));
-               OPJ_INT64  oldMax = (OPJ_INT64)(1U << (component->prec - 1));
-               OPJ_INT32* l_data = component->data;
-               for (i = 0; i < len; ++i) {
-                       l_data[i] = (OPJ_INT32)(((OPJ_INT64)l_data[i] * newMax) / oldMax);
-               }
-       } else {
-               OPJ_UINT64  newMax = (OPJ_UINT64)((1U << precision) - 1U);
-               OPJ_UINT64  oldMax = (OPJ_UINT64)((1U << component->prec) - 1U);
-               OPJ_UINT32* l_data = (OPJ_UINT32*)component->data;
-               for (i = 0; i < len; ++i) {
-                       l_data[i] = (OPJ_UINT32)(((OPJ_UINT64)l_data[i] * newMax) / oldMax);
-               }
-       }
-       component->prec = precision;
-       component->bpp = precision;
+    OPJ_SIZE_T i, len;
+
+    len = (OPJ_SIZE_T)component->w * (OPJ_SIZE_T)component->h;
+    if (component->sgnd) {
+        OPJ_INT64  newMax = (OPJ_INT64)(1U << (precision - 1));
+        OPJ_INT64  oldMax = (OPJ_INT64)(1U << (component->prec - 1));
+        OPJ_INT32* l_data = component->data;
+        for (i = 0; i < len; ++i) {
+            l_data[i] = (OPJ_INT32)(((OPJ_INT64)l_data[i] * newMax) / oldMax);
+        }
+    } else {
+        OPJ_UINT64  newMax = (OPJ_UINT64)((1U << precision) - 1U);
+        OPJ_UINT64  oldMax = (OPJ_UINT64)((1U << component->prec) - 1U);
+        OPJ_UINT32* l_data = (OPJ_UINT32*)component->data;
+        for (i = 0; i < len; ++i) {
+            l_data[i] = (OPJ_UINT32)(((OPJ_UINT64)l_data[i] * newMax) / oldMax);
+        }
+    }
+    component->prec = precision;
+    component->bpp = precision;
 }
 void scale_component(opj_image_comp_t* component, OPJ_UINT32 precision)
 {
-       int shift;
-       OPJ_SIZE_T i, len;
-       
-       if (component->prec == precision) {
-               return;
-       }
-       if (component->prec < precision) {
-               scale_component_up(component, precision);
-               return;
-       }
-       shift = (int)(component->prec - precision);
-       len = (OPJ_SIZE_T)component->w * (OPJ_SIZE_T)component->h;
-       if (component->sgnd) {
-               OPJ_INT32* l_data = component->data;
-               for (i = 0; i < len; ++i) {
-                       l_data[i] >>= shift;
-               }
-       } else {
-               OPJ_UINT32* l_data = (OPJ_UINT32*)component->data;
-               for (i = 0; i < len; ++i) {
-                       l_data[i] >>= shift;
-               }
-       }
-       component->bpp = precision;
-       component->prec = precision;
+    int shift;
+    OPJ_SIZE_T i, len;
+
+    if (component->prec == precision) {
+        return;
+    }
+    if (component->prec < precision) {
+        scale_component_up(component, precision);
+        return;
+    }
+    shift = (int)(component->prec - precision);
+    len = (OPJ_SIZE_T)component->w * (OPJ_SIZE_T)component->h;
+    if (component->sgnd) {
+        OPJ_INT32* l_data = component->data;
+        for (i = 0; i < len; ++i) {
+            l_data[i] >>= shift;
+        }
+    } else {
+        OPJ_UINT32* l_data = (OPJ_UINT32*)component->data;
+        for (i = 0; i < len; ++i) {
+            l_data[i] >>= shift;
+        }
+    }
+    component->bpp = precision;
+    component->prec = precision;
 }
 
 
 /* planar / interleaved conversions */
 /* used by PNG/TIFF */
-static void convert_32s_C1P1(const OPJ_INT32* pSrc, OPJ_INT32* const* pDst, OPJ_SIZE_T length)
+static void convert_32s_C1P1(const OPJ_INT32* pSrc, OPJ_INT32* const* pDst,
+                             OPJ_SIZE_T length)
 {
-       memcpy(pDst[0], pSrc, length * sizeof(OPJ_INT32));
+    memcpy(pDst[0], pSrc, length * sizeof(OPJ_INT32));
 }
-static void convert_32s_C2P2(const OPJ_INT32* pSrc, OPJ_INT32* const* pDst, OPJ_SIZE_T length)
+static void convert_32s_C2P2(const OPJ_INT32* pSrc, OPJ_INT32* const* pDst,
+                             OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       OPJ_INT32* pDst0 = pDst[0];
-       OPJ_INT32* pDst1 = pDst[1];
-       
-       for (i = 0; i < length; i++) {
-               pDst0[i] = pSrc[2*i+0];
-               pDst1[i] = pSrc[2*i+1];
-       }
+    OPJ_SIZE_T i;
+    OPJ_INT32* pDst0 = pDst[0];
+    OPJ_INT32* pDst1 = pDst[1];
+
+    for (i = 0; i < length; i++) {
+        pDst0[i] = pSrc[2 * i + 0];
+        pDst1[i] = pSrc[2 * i + 1];
+    }
 }
-static void convert_32s_C3P3(const OPJ_INT32* pSrc, OPJ_INT32* const* pDst, OPJ_SIZE_T length)
+static void convert_32s_C3P3(const OPJ_INT32* pSrc, OPJ_INT32* const* pDst,
+                             OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       OPJ_INT32* pDst0 = pDst[0];
-       OPJ_INT32* pDst1 = pDst[1];
-       OPJ_INT32* pDst2 = pDst[2];
-       
-       for (i = 0; i < length; i++) {
-               pDst0[i] = pSrc[3*i+0];
-               pDst1[i] = pSrc[3*i+1];
-               pDst2[i] = pSrc[3*i+2];
-       }
+    OPJ_SIZE_T i;
+    OPJ_INT32* pDst0 = pDst[0];
+    OPJ_INT32* pDst1 = pDst[1];
+    OPJ_INT32* pDst2 = pDst[2];
+
+    for (i = 0; i < length; i++) {
+        pDst0[i] = pSrc[3 * i + 0];
+        pDst1[i] = pSrc[3 * i + 1];
+        pDst2[i] = pSrc[3 * i + 2];
+    }
 }
-static void convert_32s_C4P4(const OPJ_INT32* pSrc, OPJ_INT32* const* pDst, OPJ_SIZE_T length)
+static void convert_32s_C4P4(const OPJ_INT32* pSrc, OPJ_INT32* const* pDst,
+                             OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       OPJ_INT32* pDst0 = pDst[0];
-       OPJ_INT32* pDst1 = pDst[1];
-       OPJ_INT32* pDst2 = pDst[2];
-       OPJ_INT32* pDst3 = pDst[3];
-       
-       for (i = 0; i < length; i++) {
-               pDst0[i] = pSrc[4*i+0];
-               pDst1[i] = pSrc[4*i+1];
-               pDst2[i] = pSrc[4*i+2];
-               pDst3[i] = pSrc[4*i+3];
-       }
+    OPJ_SIZE_T i;
+    OPJ_INT32* pDst0 = pDst[0];
+    OPJ_INT32* pDst1 = pDst[1];
+    OPJ_INT32* pDst2 = pDst[2];
+    OPJ_INT32* pDst3 = pDst[3];
+
+    for (i = 0; i < length; i++) {
+        pDst0[i] = pSrc[4 * i + 0];
+        pDst1[i] = pSrc[4 * i + 1];
+        pDst2[i] = pSrc[4 * i + 2];
+        pDst3[i] = pSrc[4 * i + 3];
+    }
 }
 const convert_32s_CXPX convert_32s_CXPX_LUT[5] = {
-       NULL,
-       convert_32s_C1P1,
-       convert_32s_C2P2,
-       convert_32s_C3P3,
-       convert_32s_C4P4
+    NULL,
+    convert_32s_C1P1,
+    convert_32s_C2P2,
+    convert_32s_C3P3,
+    convert_32s_C4P4
 };
 
-static void convert_32s_P1C1(OPJ_INT32 const* const* pSrc, OPJ_INT32* pDst, OPJ_SIZE_T length, OPJ_INT32 adjust)
+static void convert_32s_P1C1(OPJ_INT32 const* const* pSrc, OPJ_INT32* pDst,
+                             OPJ_SIZE_T length, OPJ_INT32 adjust)
 {
-       OPJ_SIZE_T i;
-       const OPJ_INT32* pSrc0 = pSrc[0];
-       
-       for (i = 0; i < length; i++) {
-               pDst[i] = pSrc0[i] + adjust;
-       }
+    OPJ_SIZE_T i;
+    const OPJ_INT32* pSrc0 = pSrc[0];
+
+    for (i = 0; i < length; i++) {
+        pDst[i] = pSrc0[i] + adjust;
+    }
 }
-static void convert_32s_P2C2(OPJ_INT32 const* const* pSrc, OPJ_INT32* pDst, OPJ_SIZE_T length, OPJ_INT32 adjust)
+static void convert_32s_P2C2(OPJ_INT32 const* const* pSrc, OPJ_INT32* pDst,
+                             OPJ_SIZE_T length, OPJ_INT32 adjust)
 {
-       OPJ_SIZE_T i;
-       const OPJ_INT32* pSrc0 = pSrc[0];
-       const OPJ_INT32* pSrc1 = pSrc[1];
-       
-       for (i = 0; i < length; i++) {
-               pDst[2*i+0] = pSrc0[i] + adjust;
-               pDst[2*i+1] = pSrc1[i] + adjust;
-       }
+    OPJ_SIZE_T i;
+    const OPJ_INT32* pSrc0 = pSrc[0];
+    const OPJ_INT32* pSrc1 = pSrc[1];
+
+    for (i = 0; i < length; i++) {
+        pDst[2 * i + 0] = pSrc0[i] + adjust;
+        pDst[2 * i + 1] = pSrc1[i] + adjust;
+    }
 }
-static void convert_32s_P3C3(OPJ_INT32 const* const* pSrc, OPJ_INT32* pDst, OPJ_SIZE_T length, OPJ_INT32 adjust)
+static void convert_32s_P3C3(OPJ_INT32 const* const* pSrc, OPJ_INT32* pDst,
+                             OPJ_SIZE_T length, OPJ_INT32 adjust)
 {
-       OPJ_SIZE_T i;
-       const OPJ_INT32* pSrc0 = pSrc[0];
-       const OPJ_INT32* pSrc1 = pSrc[1];
-       const OPJ_INT32* pSrc2 = pSrc[2];
-       
-       for (i = 0; i < length; i++) {
-               pDst[3*i+0] = pSrc0[i] + adjust;
-               pDst[3*i+1] = pSrc1[i] + adjust;
-               pDst[3*i+2] = pSrc2[i] + adjust;
-       }
+    OPJ_SIZE_T i;
+    const OPJ_INT32* pSrc0 = pSrc[0];
+    const OPJ_INT32* pSrc1 = pSrc[1];
+    const OPJ_INT32* pSrc2 = pSrc[2];
+
+    for (i = 0; i < length; i++) {
+        pDst[3 * i + 0] = pSrc0[i] + adjust;
+        pDst[3 * i + 1] = pSrc1[i] + adjust;
+        pDst[3 * i + 2] = pSrc2[i] + adjust;
+    }
 }
-static void convert_32s_P4C4(OPJ_INT32 const* const* pSrc, OPJ_INT32* pDst, OPJ_SIZE_T length, OPJ_INT32 adjust)
+static void convert_32s_P4C4(OPJ_INT32 const* const* pSrc, OPJ_INT32* pDst,
+                             OPJ_SIZE_T length, OPJ_INT32 adjust)
 {
-       OPJ_SIZE_T i;
-       const OPJ_INT32* pSrc0 = pSrc[0];
-       const OPJ_INT32* pSrc1 = pSrc[1];
-       const OPJ_INT32* pSrc2 = pSrc[2];
-       const OPJ_INT32* pSrc3 = pSrc[3];
-       
-       for (i = 0; i < length; i++) {
-               pDst[4*i+0] = pSrc0[i] + adjust;
-               pDst[4*i+1] = pSrc1[i] + adjust;
-               pDst[4*i+2] = pSrc2[i] + adjust;
-               pDst[4*i+3] = pSrc3[i] + adjust;
-       }
+    OPJ_SIZE_T i;
+    const OPJ_INT32* pSrc0 = pSrc[0];
+    const OPJ_INT32* pSrc1 = pSrc[1];
+    const OPJ_INT32* pSrc2 = pSrc[2];
+    const OPJ_INT32* pSrc3 = pSrc[3];
+
+    for (i = 0; i < length; i++) {
+        pDst[4 * i + 0] = pSrc0[i] + adjust;
+        pDst[4 * i + 1] = pSrc1[i] + adjust;
+        pDst[4 * i + 2] = pSrc2[i] + adjust;
+        pDst[4 * i + 3] = pSrc3[i] + adjust;
+    }
 }
 const convert_32s_PXCX convert_32s_PXCX_LUT[5] = {
-       NULL,
-       convert_32s_P1C1,
-       convert_32s_P2C2,
-       convert_32s_P3C3,
-       convert_32s_P4C4
+    NULL,
+    convert_32s_P1C1,
+    convert_32s_P2C2,
+    convert_32s_P3C3,
+    convert_32s_P4C4
 };
 
 /* bit depth conversions */
 /* used by PNG/TIFF up to 8bpp */
-static void convert_1u32s_C1R(const OPJ_BYTE* pSrc, OPJ_INT32* pDst, OPJ_SIZE_T length)
+static void convert_1u32s_C1R(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
+                              OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i+=8U) {
-               OPJ_UINT32 val = *pSrc++;
-               pDst[i+0] = (OPJ_INT32)( val >> 7);
-               pDst[i+1] = (OPJ_INT32)((val >> 6) & 0x1U);
-               pDst[i+2] = (OPJ_INT32)((val >> 5) & 0x1U);
-               pDst[i+3] = (OPJ_INT32)((val >> 4) & 0x1U);
-               pDst[i+4] = (OPJ_INT32)((val >> 3) & 0x1U);
-               pDst[i+5] = (OPJ_INT32)((val >> 2) & 0x1U);
-               pDst[i+6] = (OPJ_INT32)((val >> 1) & 0x1U);
-               pDst[i+7] = (OPJ_INT32)(val & 0x1U);
-       }
-       if (length & 7U) {
-               OPJ_UINT32 val = *pSrc++;
-               length = length & 7U;
-               pDst[i+0] = (OPJ_INT32)(val >> 7);
-               
-               if (length > 1U) {
-                       pDst[i+1] = (OPJ_INT32)((val >> 6) & 0x1U);
-                       if (length > 2U) {
-                               pDst[i+2] = (OPJ_INT32)((val >> 5) & 0x1U);
-                               if (length > 3U) {
-                                       pDst[i+3] = (OPJ_INT32)((val >> 4) & 0x1U);
-                                       if (length > 4U) {
-                                               pDst[i+4] = (OPJ_INT32)((val >> 3) & 0x1U);
-                                               if (length > 5U) {
-                                                       pDst[i+5] = (OPJ_INT32)((val >> 2) & 0x1U);
-                                                       if (length > 6U) {
-                                                               pDst[i+6] = (OPJ_INT32)((val >> 1) & 0x1U);
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
+        OPJ_UINT32 val = *pSrc++;
+        pDst[i + 0] = (OPJ_INT32)(val >> 7);
+        pDst[i + 1] = (OPJ_INT32)((val >> 6) & 0x1U);
+        pDst[i + 2] = (OPJ_INT32)((val >> 5) & 0x1U);
+        pDst[i + 3] = (OPJ_INT32)((val >> 4) & 0x1U);
+        pDst[i + 4] = (OPJ_INT32)((val >> 3) & 0x1U);
+        pDst[i + 5] = (OPJ_INT32)((val >> 2) & 0x1U);
+        pDst[i + 6] = (OPJ_INT32)((val >> 1) & 0x1U);
+        pDst[i + 7] = (OPJ_INT32)(val & 0x1U);
+    }
+    if (length & 7U) {
+        OPJ_UINT32 val = *pSrc++;
+        length = length & 7U;
+        pDst[i + 0] = (OPJ_INT32)(val >> 7);
+
+        if (length > 1U) {
+            pDst[i + 1] = (OPJ_INT32)((val >> 6) & 0x1U);
+            if (length > 2U) {
+                pDst[i + 2] = (OPJ_INT32)((val >> 5) & 0x1U);
+                if (length > 3U) {
+                    pDst[i + 3] = (OPJ_INT32)((val >> 4) & 0x1U);
+                    if (length > 4U) {
+                        pDst[i + 4] = (OPJ_INT32)((val >> 3) & 0x1U);
+                        if (length > 5U) {
+                            pDst[i + 5] = (OPJ_INT32)((val >> 2) & 0x1U);
+                            if (length > 6U) {
+                                pDst[i + 6] = (OPJ_INT32)((val >> 1) & 0x1U);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
 }
-static void convert_2u32s_C1R(const OPJ_BYTE* pSrc, OPJ_INT32* pDst, OPJ_SIZE_T length)
+static void convert_2u32s_C1R(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
+                              OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)3U); i+=4U) {
-               OPJ_UINT32 val = *pSrc++;
-               pDst[i+0] = (OPJ_INT32)( val >> 6);
-               pDst[i+1] = (OPJ_INT32)((val >> 4) & 0x3U);
-               pDst[i+2] = (OPJ_INT32)((val >> 2) & 0x3U);
-               pDst[i+3] = (OPJ_INT32)(val & 0x3U);
-       }
-       if (length & 3U) {
-               OPJ_UINT32 val = *pSrc++;
-               length = length & 3U;
-               pDst[i+0] =  (OPJ_INT32)(val >> 6);
-               
-               if (length > 1U) {
-                       pDst[i+1] = (OPJ_INT32)((val >> 4) & 0x3U);
-                       if (length > 2U) {
-                               pDst[i+2] = (OPJ_INT32)((val >> 2) & 0x3U);
-                               
-                       }
-               }
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)3U); i += 4U) {
+        OPJ_UINT32 val = *pSrc++;
+        pDst[i + 0] = (OPJ_INT32)(val >> 6);
+        pDst[i + 1] = (OPJ_INT32)((val >> 4) & 0x3U);
+        pDst[i + 2] = (OPJ_INT32)((val >> 2) & 0x3U);
+        pDst[i + 3] = (OPJ_INT32)(val & 0x3U);
+    }
+    if (length & 3U) {
+        OPJ_UINT32 val = *pSrc++;
+        length = length & 3U;
+        pDst[i + 0] = (OPJ_INT32)(val >> 6);
+
+        if (length > 1U) {
+            pDst[i + 1] = (OPJ_INT32)((val >> 4) & 0x3U);
+            if (length > 2U) {
+                pDst[i + 2] = (OPJ_INT32)((val >> 2) & 0x3U);
+
+            }
+        }
+    }
 }
-static void convert_4u32s_C1R(const OPJ_BYTE* pSrc, OPJ_INT32* pDst, OPJ_SIZE_T length)
+static void convert_4u32s_C1R(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
+                              OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)1U); i+=2U) {
-               OPJ_UINT32 val = *pSrc++;
-               pDst[i+0] = (OPJ_INT32)(val >> 4);
-               pDst[i+1] = (OPJ_INT32)(val & 0xFU);
-       }
-       if (length & 1U) {
-               OPJ_UINT8 val = *pSrc++;
-               pDst[i+0] = (OPJ_INT32)(val >> 4);
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)1U); i += 2U) {
+        OPJ_UINT32 val = *pSrc++;
+        pDst[i + 0] = (OPJ_INT32)(val >> 4);
+        pDst[i + 1] = (OPJ_INT32)(val & 0xFU);
+    }
+    if (length & 1U) {
+        OPJ_UINT8 val = *pSrc++;
+        pDst[i + 0] = (OPJ_INT32)(val >> 4);
+    }
 }
-static void convert_6u32s_C1R(const OPJ_BYTE* pSrc, OPJ_INT32* pDst, OPJ_SIZE_T length)
+static void convert_6u32s_C1R(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
+                              OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)3U); i+=4U) {
-               OPJ_UINT32 val0 = *pSrc++;
-               OPJ_UINT32 val1 = *pSrc++;
-               OPJ_UINT32 val2 = *pSrc++;
-               pDst[i+0] = (OPJ_INT32)(val0 >> 2);
-               pDst[i+1] = (OPJ_INT32)(((val0 & 0x3U) << 4) | (val1 >> 4));
-               pDst[i+2] = (OPJ_INT32)(((val1 & 0xFU) << 2) | (val2 >> 6));
-               pDst[i+3] = (OPJ_INT32)(val2 & 0x3FU);
-               
-       }
-       if (length & 3U) {
-               OPJ_UINT32 val0 = *pSrc++;
-               length = length & 3U;
-               pDst[i+0] = (OPJ_INT32)(val0 >> 2);
-               
-               if (length > 1U) {
-                       OPJ_UINT32 val1 = *pSrc++;
-                       pDst[i+1] = (OPJ_INT32)(((val0 & 0x3U) << 4) | (val1 >> 4));
-                       if (length > 2U) {
-                               OPJ_UINT32 val2 = *pSrc++;
-                               pDst[i+2] = (OPJ_INT32)(((val1 & 0xFU) << 2) | (val2 >> 6));
-                       }
-               }
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)3U); i += 4U) {
+        OPJ_UINT32 val0 = *pSrc++;
+        OPJ_UINT32 val1 = *pSrc++;
+        OPJ_UINT32 val2 = *pSrc++;
+        pDst[i + 0] = (OPJ_INT32)(val0 >> 2);
+        pDst[i + 1] = (OPJ_INT32)(((val0 & 0x3U) << 4) | (val1 >> 4));
+        pDst[i + 2] = (OPJ_INT32)(((val1 & 0xFU) << 2) | (val2 >> 6));
+        pDst[i + 3] = (OPJ_INT32)(val2 & 0x3FU);
+
+    }
+    if (length & 3U) {
+        OPJ_UINT32 val0 = *pSrc++;
+        length = length & 3U;
+        pDst[i + 0] = (OPJ_INT32)(val0 >> 2);
+
+        if (length > 1U) {
+            OPJ_UINT32 val1 = *pSrc++;
+            pDst[i + 1] = (OPJ_INT32)(((val0 & 0x3U) << 4) | (val1 >> 4));
+            if (length > 2U) {
+                OPJ_UINT32 val2 = *pSrc++;
+                pDst[i + 2] = (OPJ_INT32)(((val1 & 0xFU) << 2) | (val2 >> 6));
+            }
+        }
+    }
 }
-static void convert_8u32s_C1R(const OPJ_BYTE* pSrc, OPJ_INT32* pDst, OPJ_SIZE_T length)
+static void convert_8u32s_C1R(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
+                              OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < length; i++) {
-               pDst[i] = pSrc[i];
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < length; i++) {
+        pDst[i] = pSrc[i];
+    }
 }
 const convert_XXx32s_C1R convert_XXu32s_C1R_LUT[9] = {
-       NULL,
-       convert_1u32s_C1R,
-       convert_2u32s_C1R,
-       NULL,
-       convert_4u32s_C1R,
-       NULL,
-       convert_6u32s_C1R,
-       NULL,
-       convert_8u32s_C1R
+    NULL,
+    convert_1u32s_C1R,
+    convert_2u32s_C1R,
+    NULL,
+    convert_4u32s_C1R,
+    NULL,
+    convert_6u32s_C1R,
+    NULL,
+    convert_8u32s_C1R
 };
 
 
-static void convert_32s1u_C1R(const OPJ_INT32* pSrc, OPJ_BYTE* pDst, OPJ_SIZE_T length)
+static void convert_32s1u_C1R(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
+                              OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i+=8U) {
-               OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i+0];
-               OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i+1];
-               OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i+2];
-               OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i+3];
-               OPJ_UINT32 src4 = (OPJ_UINT32)pSrc[i+4];
-               OPJ_UINT32 src5 = (OPJ_UINT32)pSrc[i+5];
-               OPJ_UINT32 src6 = (OPJ_UINT32)pSrc[i+6];
-               OPJ_UINT32 src7 = (OPJ_UINT32)pSrc[i+7];
-               
-               *pDst++ = (OPJ_BYTE)((src0 << 7) | (src1 << 6) | (src2 << 5) | (src3 << 4) | (src4 << 3) | (src5 << 2) | (src6 << 1) | src7);
-       }
-       
-       if (length & 7U) {
-               OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i+0];
-               OPJ_UINT32 src1 = 0U;
-               OPJ_UINT32 src2 = 0U;
-               OPJ_UINT32 src3 = 0U;
-               OPJ_UINT32 src4 = 0U;
-               OPJ_UINT32 src5 = 0U;
-               OPJ_UINT32 src6 = 0U;
-               length = length & 7U;
-               
-               if (length > 1U) {
-                       src1 = (OPJ_UINT32)pSrc[i+1];
-                       if (length > 2U) {
-                               src2 = (OPJ_UINT32)pSrc[i+2];
-                               if (length > 3U) {
-                                       src3 = (OPJ_UINT32)pSrc[i+3];
-                                       if (length > 4U) {
-                                               src4 = (OPJ_UINT32)pSrc[i+4];
-                                               if (length > 5U) {
-                                                       src5 = (OPJ_UINT32)pSrc[i+5];
-                                                       if (length > 6U) {
-                                                               src6 = (OPJ_UINT32)pSrc[i+6];
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-               *pDst++ = (OPJ_BYTE)((src0 << 7) | (src1 << 6) | (src2 << 5) | (src3 << 4) | (src4 << 3) | (src5 << 2) | (src6 << 1));
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
+        OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
+        OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
+        OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i + 2];
+        OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i + 3];
+        OPJ_UINT32 src4 = (OPJ_UINT32)pSrc[i + 4];
+        OPJ_UINT32 src5 = (OPJ_UINT32)pSrc[i + 5];
+        OPJ_UINT32 src6 = (OPJ_UINT32)pSrc[i + 6];
+        OPJ_UINT32 src7 = (OPJ_UINT32)pSrc[i + 7];
+
+        *pDst++ = (OPJ_BYTE)((src0 << 7) | (src1 << 6) | (src2 << 5) | (src3 << 4) |
+                             (src4 << 3) | (src5 << 2) | (src6 << 1) | src7);
+    }
+
+    if (length & 7U) {
+        OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
+        OPJ_UINT32 src1 = 0U;
+        OPJ_UINT32 src2 = 0U;
+        OPJ_UINT32 src3 = 0U;
+        OPJ_UINT32 src4 = 0U;
+        OPJ_UINT32 src5 = 0U;
+        OPJ_UINT32 src6 = 0U;
+        length = length & 7U;
+
+        if (length > 1U) {
+            src1 = (OPJ_UINT32)pSrc[i + 1];
+            if (length > 2U) {
+                src2 = (OPJ_UINT32)pSrc[i + 2];
+                if (length > 3U) {
+                    src3 = (OPJ_UINT32)pSrc[i + 3];
+                    if (length > 4U) {
+                        src4 = (OPJ_UINT32)pSrc[i + 4];
+                        if (length > 5U) {
+                            src5 = (OPJ_UINT32)pSrc[i + 5];
+                            if (length > 6U) {
+                                src6 = (OPJ_UINT32)pSrc[i + 6];
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        *pDst++ = (OPJ_BYTE)((src0 << 7) | (src1 << 6) | (src2 << 5) | (src3 << 4) |
+                             (src4 << 3) | (src5 << 2) | (src6 << 1));
+    }
 }
 
-static void convert_32s2u_C1R(const OPJ_INT32* pSrc, OPJ_BYTE* pDst, OPJ_SIZE_T length)
+static void convert_32s2u_C1R(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
+                              OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)3U); i+=4U) {
-               OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i+0];
-               OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i+1];
-               OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i+2];
-               OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i+3];
-               
-               *pDst++ = (OPJ_BYTE)((src0 << 6) | (src1 << 4) | (src2 << 2) | src3);
-       }
-       
-       if (length & 3U) {
-               OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i+0];
-               OPJ_UINT32 src1 = 0U;
-               OPJ_UINT32 src2 = 0U;
-               length = length & 3U;
-               
-               if (length > 1U) {
-                       src1 = (OPJ_UINT32)pSrc[i+1];
-                       if (length > 2U) {
-                               src2 = (OPJ_UINT32)pSrc[i+2];
-                       }
-               }
-               *pDst++ = (OPJ_BYTE)((src0 << 6) | (src1 << 4) | (src2 << 2));
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)3U); i += 4U) {
+        OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
+        OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
+        OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i + 2];
+        OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i + 3];
+
+        *pDst++ = (OPJ_BYTE)((src0 << 6) | (src1 << 4) | (src2 << 2) | src3);
+    }
+
+    if (length & 3U) {
+        OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
+        OPJ_UINT32 src1 = 0U;
+        OPJ_UINT32 src2 = 0U;
+        length = length & 3U;
+
+        if (length > 1U) {
+            src1 = (OPJ_UINT32)pSrc[i + 1];
+            if (length > 2U) {
+                src2 = (OPJ_UINT32)pSrc[i + 2];
+            }
+        }
+        *pDst++ = (OPJ_BYTE)((src0 << 6) | (src1 << 4) | (src2 << 2));
+    }
 }
 
-static void convert_32s4u_C1R(const OPJ_INT32* pSrc, OPJ_BYTE* pDst, OPJ_SIZE_T length)
+static void convert_32s4u_C1R(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
+                              OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)1U); i+=2U) {
-               OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i+0];
-               OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i+1];
-               
-               *pDst++ = (OPJ_BYTE)((src0 << 4) | src1);
-       }
-       
-       if (length & 1U) {
-               OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i+0];
-               *pDst++ = (OPJ_BYTE)((src0 << 4));
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)1U); i += 2U) {
+        OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
+        OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
+
+        *pDst++ = (OPJ_BYTE)((src0 << 4) | src1);
+    }
+
+    if (length & 1U) {
+        OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
+        *pDst++ = (OPJ_BYTE)((src0 << 4));
+    }
 }
 
-static void convert_32s6u_C1R(const OPJ_INT32* pSrc, OPJ_BYTE* pDst, OPJ_SIZE_T length)
+static void convert_32s6u_C1R(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
+                              OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)3U); i+=4U) {
-               OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i+0];
-               OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i+1];
-               OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i+2];
-               OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i+3];
-               
-               *pDst++ = (OPJ_BYTE)((src0 << 2) | (src1 >> 4));
-               *pDst++ = (OPJ_BYTE)(((src1 & 0xFU) << 4) | (src2 >> 2));
-               *pDst++ = (OPJ_BYTE)(((src2 & 0x3U) << 6) | src3);
-       }
-       
-       if (length & 3U) {
-               OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i+0];
-               OPJ_UINT32 src1 = 0U;
-               OPJ_UINT32 src2 = 0U;
-               length = length & 3U;
-               
-               if (length > 1U) {
-                       src1 = (OPJ_UINT32)pSrc[i+1];
-                       if (length > 2U) {
-                               src2 = (OPJ_UINT32)pSrc[i+2];
-                       }
-               }
-               *pDst++ = (OPJ_BYTE)((src0 << 2) | (src1 >> 4));
-               if (length > 1U) {
-                       *pDst++ = (OPJ_BYTE)(((src1 & 0xFU) << 4) | (src2 >> 2));
-                       if (length > 2U) {
-                               *pDst++ = (OPJ_BYTE)(((src2 & 0x3U) << 6));
-                       }
-               }
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)3U); i += 4U) {
+        OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
+        OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
+        OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i + 2];
+        OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i + 3];
+
+        *pDst++ = (OPJ_BYTE)((src0 << 2) | (src1 >> 4));
+        *pDst++ = (OPJ_BYTE)(((src1 & 0xFU) << 4) | (src2 >> 2));
+        *pDst++ = (OPJ_BYTE)(((src2 & 0x3U) << 6) | src3);
+    }
+
+    if (length & 3U) {
+        OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
+        OPJ_UINT32 src1 = 0U;
+        OPJ_UINT32 src2 = 0U;
+        length = length & 3U;
+
+        if (length > 1U) {
+            src1 = (OPJ_UINT32)pSrc[i + 1];
+            if (length > 2U) {
+                src2 = (OPJ_UINT32)pSrc[i + 2];
+            }
+        }
+        *pDst++ = (OPJ_BYTE)((src0 << 2) | (src1 >> 4));
+        if (length > 1U) {
+            *pDst++ = (OPJ_BYTE)(((src1 & 0xFU) << 4) | (src2 >> 2));
+            if (length > 2U) {
+                *pDst++ = (OPJ_BYTE)(((src2 & 0x3U) << 6));
+            }
+        }
+    }
 }
-static void convert_32s8u_C1R(const OPJ_INT32* pSrc, OPJ_BYTE* pDst, OPJ_SIZE_T length)
+static void convert_32s8u_C1R(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
+                              OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < length; ++i) {
-               pDst[i] = (OPJ_BYTE)pSrc[i];
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < length; ++i) {
+        pDst[i] = (OPJ_BYTE)pSrc[i];
+    }
 }
 const convert_32sXXx_C1R convert_32sXXu_C1R_LUT[9] = {
-       NULL,
-       convert_32s1u_C1R,
-       convert_32s2u_C1R,
-       NULL,
-       convert_32s4u_C1R,
-       NULL,
-       convert_32s6u_C1R,
-       NULL,
-       convert_32s8u_C1R
+    NULL,
+    convert_32s1u_C1R,
+    convert_32s2u_C1R,
+    NULL,
+    convert_32s4u_C1R,
+    NULL,
+    convert_32s6u_C1R,
+    NULL,
+    convert_32s8u_C1R
 };
 
 /* -->> -->> -->> -->>
@@ -535,8 +557,7 @@ const convert_32sXXx_C1R convert_32sXXu_C1R_LUT[9] = {
 
 #ifdef INFORMATION_ONLY
 /* TGA header definition. */
-struct tga_header
-{                           
+struct tga_header {
     unsigned char   id_length;              /* Image id field length    */
     unsigned char   colour_map_type;        /* Colour map type          */
     unsigned char   image_type;             /* Image type               */
@@ -558,7 +579,8 @@ struct tga_header
 };
 #endif /* INFORMATION_ONLY */
 
-static unsigned short get_ushort(const unsigned char *data) {
+static unsigned short get_ushort(const unsigned char *data)
+{
     unsigned short val = *(const unsigned short *)data;
 #ifdef OPJ_BIG_ENDIAN
     val = ((val & 0xffU) << 8) | (val >> 8);
@@ -568,7 +590,7 @@ static unsigned short get_ushort(const unsigned char *data) {
 
 #define TGA_HEADER_SIZE 18
 
-static int tga_readheader(FILE *fp, unsigned int *bits_per_pixel, 
+static int tga_readheader(FILE *fp, unsigned int *bits_per_pixel,
                           unsigned int *width, unsigned int *height, int *flip_image)
 {
     int palette_size;
@@ -578,12 +600,13 @@ static int tga_readheader(FILE *fp, unsigned int *bits_per_pixel,
     unsigned short /*cmap_index,*/ cmap_len, cmap_entry_size;
     unsigned short /*x_origin, y_origin,*/ image_w, image_h;
 
-    if (!bits_per_pixel || !width || !height || !flip_image)
+    if (!bits_per_pixel || !width || !height || !flip_image) {
         return 0;
+    }
 
-    if ( fread(tga, TGA_HEADER_SIZE, 1, fp) != 1 )
-    {
-        fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
+    if (fread(tga, TGA_HEADER_SIZE, 1, fp) != 1) {
+        fprintf(stderr,
+                "\nError: fread return a number of element different from the expected.\n");
         return 0 ;
     }
     id_len = tga[0];
@@ -608,16 +631,15 @@ static int tga_readheader(FILE *fp, unsigned int *bits_per_pixel,
     *height = (unsigned int)image_h;
 
     /* Ignore tga identifier, if present ... */
-    if (id_len)
-    {
+    if (id_len) {
         unsigned char *id = (unsigned char *) malloc(id_len);
-               if(id == 0){
-                       fprintf(stderr, "tga_readheader: memory out\n");
-                       return 0;
-               }
-        if ( !fread(id, id_len, 1, fp) )
-        {
-            fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
+        if (id == 0) {
+            fprintf(stderr, "tga_readheader: memory out\n");
+            return 0;
+        }
+        if (!fread(id, id_len, 1, fp)) {
+            fprintf(stderr,
+                    "\nError: fread return a number of element different from the expected.\n");
             free(id);
             return 0 ;
         }
@@ -626,9 +648,8 @@ static int tga_readheader(FILE *fp, unsigned int *bits_per_pixel,
 
     /* Test for compressed formats ... not yet supported ...
     // Note :-  9 - RLE encoded palettized.
-    //            10 - RLE encoded RGB. */
-    if (image_type > 8)
-    {
+    //         10 - RLE encoded RGB. */
+    if (image_type > 8) {
         fprintf(stderr, "Sorry, compressed tga files are not currently supported.\n");
         return 0 ;
     }
@@ -636,10 +657,9 @@ static int tga_readheader(FILE *fp, unsigned int *bits_per_pixel,
     *flip_image = !(image_desc & 32);
 
     /* Palettized formats are not yet supported, skip over the palette, if present ... */
-    palette_size = cmap_len * (cmap_entry_size/8);
+    palette_size = cmap_len * (cmap_entry_size / 8);
 
-    if (palette_size>0)
-    {
+    if (palette_size > 0) {
         fprintf(stderr, "File contains a palette - not yet supported.");
         fseek(fp, palette_size, SEEK_CUR);
     }
@@ -655,60 +675,90 @@ static INLINE OPJ_UINT16 swap16(OPJ_UINT16 x)
 
 #endif
 
-static int tga_writeheader(FILE *fp, int bits_per_pixel, int width, int height, 
+static int tga_writeheader(FILE *fp, int bits_per_pixel, int width, int height,
                            OPJ_BOOL flip_image)
 {
     OPJ_UINT16 image_w, image_h, us0;
     unsigned char uc0, image_type;
     unsigned char pixel_depth, image_desc;
 
-    if (!bits_per_pixel || !width || !height)
+    if (!bits_per_pixel || !width || !height) {
         return 0;
+    }
 
     pixel_depth = 0;
 
-    if ( bits_per_pixel < 256 )
+    if (bits_per_pixel < 256) {
         pixel_depth = (unsigned char)bits_per_pixel;
-    else{
-        fprintf(stderr,"ERROR: Wrong bits per pixel inside tga_header");
+    } else {
+        fprintf(stderr, "ERROR: Wrong bits per pixel inside tga_header");
         return 0;
     }
     uc0 = 0;
 
-    if(fwrite(&uc0, 1, 1, fp) != 1) goto fails; /* id_length */
-    if(fwrite(&uc0, 1, 1, fp) != 1) goto fails; /* colour_map_type */
+    if (fwrite(&uc0, 1, 1, fp) != 1) {
+        goto fails;    /* id_length */
+    }
+    if (fwrite(&uc0, 1, 1, fp) != 1) {
+        goto fails;    /* colour_map_type */
+    }
 
     image_type = 2; /* Uncompressed. */
-    if(fwrite(&image_type, 1, 1, fp) != 1) goto fails;
+    if (fwrite(&image_type, 1, 1, fp) != 1) {
+        goto fails;
+    }
 
     us0 = 0;
-    if(fwrite(&us0, 2, 1, fp) != 1) goto fails; /* colour_map_index */
-    if(fwrite(&us0, 2, 1, fp) != 1) goto fails; /* colour_map_length */
-    if(fwrite(&uc0, 1, 1, fp) != 1) goto fails; /* colour_map_entry_size */
+    if (fwrite(&us0, 2, 1, fp) != 1) {
+        goto fails;    /* colour_map_index */
+    }
+    if (fwrite(&us0, 2, 1, fp) != 1) {
+        goto fails;    /* colour_map_length */
+    }
+    if (fwrite(&uc0, 1, 1, fp) != 1) {
+        goto fails;    /* colour_map_entry_size */
+    }
 
-    if(fwrite(&us0, 2, 1, fp) != 1) goto fails; /* x_origin */
-    if(fwrite(&us0, 2, 1, fp) != 1) goto fails; /* y_origin */
+    if (fwrite(&us0, 2, 1, fp) != 1) {
+        goto fails;    /* x_origin */
+    }
+    if (fwrite(&us0, 2, 1, fp) != 1) {
+        goto fails;    /* y_origin */
+    }
 
     image_w = (unsigned short)width;
     image_h = (unsigned short) height;
 
 #ifndef OPJ_BIG_ENDIAN
-    if(fwrite(&image_w, 2, 1, fp) != 1) goto fails;
-    if(fwrite(&image_h, 2, 1, fp) != 1) goto fails;
+    if (fwrite(&image_w, 2, 1, fp) != 1) {
+        goto fails;
+    }
+    if (fwrite(&image_h, 2, 1, fp) != 1) {
+        goto fails;
+    }
 #else
     image_w = swap16(image_w);
     image_h = swap16(image_h);
-    if(fwrite(&image_w, 2, 1, fp) != 1) goto fails;
-    if(fwrite(&image_h, 2, 1, fp) != 1) goto fails;
+    if (fwrite(&image_w, 2, 1, fp) != 1) {
+        goto fails;
+    }
+    if (fwrite(&image_h, 2, 1, fp) != 1) {
+        goto fails;
+    }
 #endif
 
-    if(fwrite(&pixel_depth, 1, 1, fp) != 1) goto fails;
+    if (fwrite(&pixel_depth, 1, 1, fp) != 1) {
+        goto fails;
+    }
 
     image_desc = 8; /* 8 bits per component. */
 
-    if (flip_image)
+    if (flip_image) {
         image_desc |= 32;
-    if(fwrite(&image_desc, 1, 1, fp) != 1) goto fails;
+    }
+    if (fwrite(&image_desc, 1, 1, fp) != 1) {
+        goto fails;
+    }
 
     return 1;
 
@@ -717,13 +767,14 @@ fails:
     return 0;
 }
 
-opj_image_t* tgatoimage(const char *filename, opj_cparameters_t *parameters) {
+opj_image_t* tgatoimage(const char *filename, opj_cparameters_t *parameters)
+{
     FILE *f;
     opj_image_t *image;
     unsigned int image_width, image_height, pixel_bit_depth;
     unsigned int x, y;
-    int flip_image=0;
-    opj_image_cmptparm_t cmptparm[4];  /* maximum 4 components */
+    int flip_image = 0;
+    opj_image_cmptparm_t cmptparm[4];   /* maximum 4 components */
     int numcomps;
     OPJ_COLOR_SPACE color_space;
     OPJ_BOOL mono ;
@@ -737,7 +788,8 @@ opj_image_t* tgatoimage(const char *filename, opj_cparameters_t *parameters) {
         return 0;
     }
 
-    if (!tga_readheader(f, &pixel_bit_depth, &image_width, &image_height, &flip_image)) {
+    if (!tga_readheader(f, &pixel_bit_depth, &image_width, &image_height,
+                        &flip_image)) {
         fclose(f);
         return NULL;
     }
@@ -751,14 +803,15 @@ opj_image_t* tgatoimage(const char *filename, opj_cparameters_t *parameters) {
     /* initialize image components */
     memset(&cmptparm[0], 0, 4 * sizeof(opj_image_cmptparm_t));
 
-    mono = (pixel_bit_depth == 8) || (pixel_bit_depth == 16);  /* Mono with & without alpha. */
-    save_alpha = (pixel_bit_depth == 16) || (pixel_bit_depth == 32); /* Mono with alpha, or RGB with alpha */
+    mono = (pixel_bit_depth == 8) ||
+           (pixel_bit_depth == 16);  /* Mono with & without alpha. */
+    save_alpha = (pixel_bit_depth == 16) ||
+                 (pixel_bit_depth == 32); /* Mono with alpha, or RGB with alpha */
 
     if (mono) {
         color_space = OPJ_CLRSPC_GRAY;
         numcomps = save_alpha ? 2 : 1;
-    }
-    else {
+    } else {
         numcomps = save_alpha ? 4 : 3;
         color_space = OPJ_CLRSPC_SRGB;
     }
@@ -788,95 +841,93 @@ opj_image_t* tgatoimage(const char *filename, opj_cparameters_t *parameters) {
     /* set image offset and reference grid */
     image->x0 = (OPJ_UINT32)parameters->image_offset_x0;
     image->y0 = (OPJ_UINT32)parameters->image_offset_y0;
-    image->x1 =        !image->x0 ? (OPJ_UINT32)(image_width - 1)  * (OPJ_UINT32)subsampling_dx + 1 : image->x0 + (OPJ_UINT32)(image_width - 1)  * (OPJ_UINT32)subsampling_dx + 1;
-    image->y1 =        !image->y0 ? (OPJ_UINT32)(image_height - 1) * (OPJ_UINT32)subsampling_dy + 1 : image->y0 + (OPJ_UINT32)(image_height - 1) * (OPJ_UINT32)subsampling_dy + 1;
+    image->x1 = !image->x0 ? (OPJ_UINT32)(image_width - 1)  *
+                (OPJ_UINT32)subsampling_dx + 1 : image->x0 + (OPJ_UINT32)(image_width - 1)  *
+                (OPJ_UINT32)subsampling_dx + 1;
+    image->y1 = !image->y0 ? (OPJ_UINT32)(image_height - 1) *
+                (OPJ_UINT32)subsampling_dy + 1 : image->y0 + (OPJ_UINT32)(image_height - 1) *
+                (OPJ_UINT32)subsampling_dy + 1;
 
     /* set image data */
-    for (y=0; y < image_height; y++)
-    {
+    for (y = 0; y < image_height; y++) {
         int index;
 
-        if (flip_image)
-            index = (int)((image_height-y-1)*image_width);
-        else
-            index = (int)(y*image_width);
+        if (flip_image) {
+            index = (int)((image_height - y - 1) * image_width);
+        } else {
+            index = (int)(y * image_width);
+        }
 
-        if (numcomps==3)
-        {
-            for (x=0;x<image_width;x++)
-            {
-                unsigned char r,g,b;
+        if (numcomps == 3) {
+            for (x = 0; x < image_width; x++) {
+                unsigned char r, g, b;
 
-                if( !fread(&b, 1, 1, f) )
-                {
-                    fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
+                if (!fread(&b, 1, 1, f)) {
+                    fprintf(stderr,
+                            "\nError: fread return a number of element different from the expected.\n");
                     opj_image_destroy(image);
                     fclose(f);
                     return NULL;
                 }
-                if ( !fread(&g, 1, 1, f) )
-                {
-                    fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
+                if (!fread(&g, 1, 1, f)) {
+                    fprintf(stderr,
+                            "\nError: fread return a number of element different from the expected.\n");
                     opj_image_destroy(image);
                     fclose(f);
                     return NULL;
                 }
-                if ( !fread(&r, 1, 1, f) )
-                {
-                    fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
+                if (!fread(&r, 1, 1, f)) {
+                    fprintf(stderr,
+                            "\nError: fread return a number of element different from the expected.\n");
                     opj_image_destroy(image);
                     fclose(f);
                     return NULL;
                 }
 
-                image->comps[0].data[index]=r;
-                image->comps[1].data[index]=g;
-                image->comps[2].data[index]=b;
+                image->comps[0].data[index] = r;
+                image->comps[1].data[index] = g;
+                image->comps[2].data[index] = b;
                 index++;
             }
-        }
-        else if (numcomps==4)
-        {
-            for (x=0;x<image_width;x++)
-            {
-                unsigned char r,g,b,a;
-                if ( !fread(&b, 1, 1, f) )
-                {
-                    fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
+        } else if (numcomps == 4) {
+            for (x = 0; x < image_width; x++) {
+                unsigned char r, g, b, a;
+                if (!fread(&b, 1, 1, f)) {
+                    fprintf(stderr,
+                            "\nError: fread return a number of element different from the expected.\n");
                     opj_image_destroy(image);
                     fclose(f);
                     return NULL;
                 }
-                if ( !fread(&g, 1, 1, f) )
-                {
-                    fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
+                if (!fread(&g, 1, 1, f)) {
+                    fprintf(stderr,
+                            "\nError: fread return a number of element different from the expected.\n");
                     opj_image_destroy(image);
                     fclose(f);
                     return NULL;
                 }
-                if ( !fread(&r, 1, 1, f) )
-                {
-                    fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
+                if (!fread(&r, 1, 1, f)) {
+                    fprintf(stderr,
+                            "\nError: fread return a number of element different from the expected.\n");
                     opj_image_destroy(image);
                     fclose(f);
                     return NULL;
                 }
-                if ( !fread(&a, 1, 1, f) )
-                {
-                    fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
+                if (!fread(&a, 1, 1, f)) {
+                    fprintf(stderr,
+                            "\nError: fread return a number of element different from the expected.\n");
                     opj_image_destroy(image);
                     fclose(f);
                     return NULL;
                 }
 
-                image->comps[0].data[index]=r;
-                image->comps[1].data[index]=g;
-                image->comps[2].data[index]=b;
-                image->comps[3].data[index]=a;
+                image->comps[0].data[index] = r;
+                image->comps[1].data[index] = g;
+                image->comps[2].data[index] = b;
+                image->comps[3].data[index] = a;
                 index++;
             }
-        }
-        else {
+        } else {
             fprintf(stderr, "Currently unsupported bit depth : %s\n", filename);
         }
     }
@@ -884,13 +935,14 @@ opj_image_t* tgatoimage(const char *filename, opj_cparameters_t *parameters) {
     return image;
 }
 
-int imagetotga(opj_image_t * image, const char *outfile) {
+int imagetotga(opj_image_t * image, const char *outfile)
+{
     int width, height, bpp, x, y;
     OPJ_BOOL write_alpha;
     unsigned int i;
     int adjustR, adjustG, adjustB, fails;
     unsigned int alpha_channel;
-    float r,g,b,a;
+    float r, g, b, a;
     unsigned char value;
     float scale;
     FILE *fdest;
@@ -903,12 +955,13 @@ int imagetotga(opj_image_t * image, const char *outfile) {
         return 1;
     }
 
-    for (i = 0; i < image->numcomps-1; i++)    {
-        if ((image->comps[0].dx != image->comps[i+1].dx)
-                ||(image->comps[0].dy != image->comps[i+1].dy)
-                ||(image->comps[0].prec != image->comps[i+1].prec))    {
+    for (i = 0; i < image->numcomps - 1; i++) {
+        if ((image->comps[0].dx != image->comps[i + 1].dx)
+                || (image->comps[0].dy != image->comps[i + 1].dy)
+                || (image->comps[0].prec != image->comps[i + 1].prec)) {
             fclose(fdest);
-            fprintf(stderr, "Unable to create a tga file with such J2K image charateristics.");
+            fprintf(stderr,
+                    "Unable to create a tga file with such J2K image charateristics.");
             return 1;
         }
     }
@@ -917,90 +970,98 @@ int imagetotga(opj_image_t * image, const char *outfile) {
     height = (int)image->comps[0].h;
 
     /* Mono with alpha, or RGB with alpha. */
-    write_alpha = (image->numcomps==2) || (image->numcomps==4);
+    write_alpha = (image->numcomps == 2) || (image->numcomps == 4);
 
     /* Write TGA header  */
     bpp = write_alpha ? 32 : 24;
 
-    if (!tga_writeheader(fdest, bpp, width , height, OPJ_TRUE))
-               goto fin;
+    if (!tga_writeheader(fdest, bpp, width, height, OPJ_TRUE)) {
+        goto fin;
+    }
 
-    alpha_channel = image->numcomps-1;
+    alpha_channel = image->numcomps - 1;
 
-    scale = 255.0f / (float)((1<<image->comps[0].prec)-1);
+    scale = 255.0f / (float)((1 << image->comps[0].prec) - 1);
 
     adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
     adjustG = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
     adjustB = (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
 
-       for (y=0; y < height; y++) 
-   {
-       unsigned int index= (unsigned int)(y*width);
-
-       for (x=0; x < width; x++, index++)      
-  {
-       r = (float)(image->comps[0].data[index] + adjustR);
-
-       if (image->numcomps > 2) 
- {
-       g = (float)(image->comps[1].data[index] + adjustG);
-       b = (float)(image->comps[2].data[index] + adjustB);
- }
-       else  
- {/* Greyscale ... */
-       g = r;
-       b = r;
- }
-
-/* TGA format writes BGR ... */
-       if(b > 255.) b = 255.; else if(b < 0.) b = 0.;
-       value = (unsigned char)(b*scale);
-       res = fwrite(&value,1,1,fdest);
-
-       if( res < 1 ) 
- {
-       fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
-       goto fin;
- }
-       if(g > 255.) g = 255.; else if(g < 0.) g = 0.;
-       value = (unsigned char)(g*scale);
-       res = fwrite(&value,1,1,fdest);
-
-       if( res < 1 ) 
- {
-       fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
-       goto fin;
- }
-       if(r > 255.) r = 255.; else if(r < 0.) r = 0.;
-       value = (unsigned char)(r*scale);
-       res = fwrite(&value,1,1,fdest);
-
-       if( res < 1 ) 
- {
-       fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
-       goto fin;
- }
-
-       if (write_alpha) 
- {
-       a = (float)(image->comps[alpha_channel].data[index]);
-       if(a > 255.) a = 255.; else if(a < 0.) a = 0.;
-       value = (unsigned char)(a*scale);
-       res = fwrite(&value,1,1,fdest);
-
-               if( res < 1 ) 
-          {
-               fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
-               goto fin;
-          }
- }
-  }
-   }
-       fails = 0;
+    for (y = 0; y < height; y++) {
+        unsigned int index = (unsigned int)(y * width);
+
+        for (x = 0; x < width; x++, index++) {
+            r = (float)(image->comps[0].data[index] + adjustR);
+
+            if (image->numcomps > 2) {
+                g = (float)(image->comps[1].data[index] + adjustG);
+                b = (float)(image->comps[2].data[index] + adjustB);
+            } else {
+                /* Greyscale ... */
+                g = r;
+                b = r;
+            }
+
+            /* TGA format writes BGR ... */
+            if (b > 255.) {
+                b = 255.;
+            } else if (b < 0.) {
+                b = 0.;
+            }
+            value = (unsigned char)(b * scale);
+            res = fwrite(&value, 1, 1, fdest);
+
+            if (res < 1) {
+                fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
+                goto fin;
+            }
+            if (g > 255.) {
+                g = 255.;
+            } else if (g < 0.) {
+                g = 0.;
+            }
+            value = (unsigned char)(g * scale);
+            res = fwrite(&value, 1, 1, fdest);
+
+            if (res < 1) {
+                fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
+                goto fin;
+            }
+            if (r > 255.) {
+                r = 255.;
+            } else if (r < 0.) {
+                r = 0.;
+            }
+            value = (unsigned char)(r * scale);
+            res = fwrite(&value, 1, 1, fdest);
+
+            if (res < 1) {
+                fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
+                goto fin;
+            }
+
+            if (write_alpha) {
+                a = (float)(image->comps[alpha_channel].data[index]);
+                if (a > 255.) {
+                    a = 255.;
+                } else if (a < 0.) {
+                    a = 0.;
+                }
+                value = (unsigned char)(a * scale);
+                res = fwrite(&value, 1, 1, fdest);
+
+                if (res < 1) {
+                    fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
+                    goto fin;
+                }
+            }
+        }
+    }
+    fails = 0;
 fin:
-       fclose(fdest);
+    fclose(fdest);
 
-       return fails;
+    return fails;
 }
 
 /* -->> -->> -->> -->>
@@ -1013,9 +1074,9 @@ PGX IMAGE FORMAT
 static unsigned char readuchar(FILE * f)
 {
     unsigned char c1;
-    if ( !fread(&c1, 1, 1, f) )
-    {
-        fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
+    if (!fread(&c1, 1, 1, f)) {
+        fprintf(stderr,
+                "\nError: fread return a number of element different from the expected.\n");
         return 0;
     }
     return c1;
@@ -1024,61 +1085,66 @@ static unsigned char readuchar(FILE * f)
 static unsigned short readushort(FILE * f, int bigendian)
 {
     unsigned char c1, c2;
-    if ( !fread(&c1, 1, 1, f) )
-    {
-        fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
+    if (!fread(&c1, 1, 1, f)) {
+        fprintf(stderr,
+                "\nError: fread return a number of element different from the expected.\n");
         return 0;
     }
-    if ( !fread(&c2, 1, 1, f) )
-    {
-        fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
+    if (!fread(&c2, 1, 1, f)) {
+        fprintf(stderr,
+                "\nError: fread return a number of element different from the expected.\n");
         return 0;
     }
-    if (bigendian)
+    if (bigendian) {
         return (unsigned short)((c1 << 8) + c2);
-    else
+    } else {
         return (unsigned short)((c2 << 8) + c1);
+    }
 }
 
 static unsigned int readuint(FILE * f, int bigendian)
 {
     unsigned char c1, c2, c3, c4;
-    if ( !fread(&c1, 1, 1, f) )
-    {
-        fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
+    if (!fread(&c1, 1, 1, f)) {
+        fprintf(stderr,
+                "\nError: fread return a number of element different from the expected.\n");
         return 0;
     }
-    if ( !fread(&c2, 1, 1, f) )
-    {
-        fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
+    if (!fread(&c2, 1, 1, f)) {
+        fprintf(stderr,
+                "\nError: fread return a number of element different from the expected.\n");
         return 0;
     }
-    if ( !fread(&c3, 1, 1, f) )
-    {
-        fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
+    if (!fread(&c3, 1, 1, f)) {
+        fprintf(stderr,
+                "\nError: fread return a number of element different from the expected.\n");
         return 0;
     }
-    if ( !fread(&c4, 1, 1, f) )
-    {
-        fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
+    if (!fread(&c4, 1, 1, f)) {
+        fprintf(stderr,
+                "\nError: fread return a number of element different from the expected.\n");
         return 0;
     }
-    if (bigendian)
-        return (unsigned int)(c1 << 24) + (unsigned int)(c2 << 16) + (unsigned int)(c3 << 8) + c4;
-    else
-        return (unsigned int)(c4 << 24) + (unsigned int)(c3 << 16) + (unsigned int)(c2 << 8) + c1;
+    if (bigendian) {
+        return (unsigned int)(c1 << 24) + (unsigned int)(c2 << 16) + (unsigned int)(
+                   c3 << 8) + c4;
+    } else {
+        return (unsigned int)(c4 << 24) + (unsigned int)(c3 << 16) + (unsigned int)(
+                   c2 << 8) + c1;
+    }
 }
 
-opj_image_t* pgxtoimage(const char *filename, opj_cparameters_t *parameters) {
+opj_image_t* pgxtoimage(const char *filename, opj_cparameters_t *parameters)
+{
     FILE *f = NULL;
     int w, h, prec;
     int i, numcomps, max;
     OPJ_COLOR_SPACE color_space;
-    opj_image_cmptparm_t cmptparm;     /* maximum of 1 component  */
+    opj_image_cmptparm_t cmptparm;  /* maximum of 1 component  */
     opj_image_t * image = NULL;
     int adjustS, ushift, dshift, force8;
 
-    char endian1,endian2,sign;
+    char endian1, endian2, sign;
     char signtmp[32];
 
     char temp[32];
@@ -1099,23 +1165,27 @@ opj_image_t* pgxtoimage(const char *filename, opj_cparameters_t *parameters) {
     }
 
     fseek(f, 0, SEEK_SET);
-    if( fscanf(f, "PG%[ \t]%c%c%[ \t+-]%d%[ \t]%d%[ \t]%d",temp,&endian1,&endian2,signtmp,&prec,temp,&w,temp,&h) != 9){
+    if (fscanf(f, "PG%[ \t]%c%c%[ \t+-]%d%[ \t]%d%[ \t]%d", temp, &endian1,
+               &endian2, signtmp, &prec, temp, &w, temp, &h) != 9) {
         fclose(f);
-        fprintf(stderr, "ERROR: Failed to read the right number of element from the fscanf() function!\n");
+        fprintf(stderr,
+                "ERROR: Failed to read the right number of element from the fscanf() function!\n");
         return NULL;
     }
 
-    i=0;
-    sign='+';
-    while (signtmp[i]!='\0') {
-        if (signtmp[i]=='-') sign='-';
+    i = 0;
+    sign = '+';
+    while (signtmp[i] != '\0') {
+        if (signtmp[i] == '-') {
+            sign = '-';
+        }
         i++;
     }
 
     fgetc(f);
-    if (endian1=='M' && endian2=='L') {
+    if (endian1 == 'M' && endian2 == 'L') {
         bigendian = 1;
-    } else if (endian2=='M' && endian1=='L') {
+    } else if (endian2 == 'M' && endian1 == 'L') {
         bigendian = 0;
     } else {
         fclose(f);
@@ -1127,23 +1197,32 @@ opj_image_t* pgxtoimage(const char *filename, opj_cparameters_t *parameters) {
 
     cmptparm.x0 = (OPJ_UINT32)parameters->image_offset_x0;
     cmptparm.y0 = (OPJ_UINT32)parameters->image_offset_y0;
-    cmptparm.w = !cmptparm.x0 ? (OPJ_UINT32)((w - 1) * parameters->subsampling_dx + 1) : cmptparm.x0 + (OPJ_UINT32)(w - 1) * (OPJ_UINT32)parameters->subsampling_dx + 1;
-    cmptparm.h = !cmptparm.y0 ? (OPJ_UINT32)((h - 1) * parameters->subsampling_dy + 1) : cmptparm.y0 + (OPJ_UINT32)(h - 1) * (OPJ_UINT32)parameters->subsampling_dy + 1;
+    cmptparm.w = !cmptparm.x0 ? (OPJ_UINT32)((w - 1) * parameters->subsampling_dx +
+                 1) : cmptparm.x0 + (OPJ_UINT32)(w - 1) * (OPJ_UINT32)parameters->subsampling_dx
+                 + 1;
+    cmptparm.h = !cmptparm.y0 ? (OPJ_UINT32)((h - 1) * parameters->subsampling_dy +
+                 1) : cmptparm.y0 + (OPJ_UINT32)(h - 1) * (OPJ_UINT32)parameters->subsampling_dy
+                 + 1;
 
     if (sign == '-') {
         cmptparm.sgnd = 1;
     } else {
         cmptparm.sgnd = 0;
     }
-    if(prec < 8)
-    {
+    if (prec < 8) {
         force8 = 1;
-        ushift = 8 - prec; dshift = prec - ushift;
-        if(cmptparm.sgnd) adjustS = (1<<(prec - 1)); else adjustS = 0;
+        ushift = 8 - prec;
+        dshift = prec - ushift;
+        if (cmptparm.sgnd) {
+            adjustS = (1 << (prec - 1));
+        } else {
+            adjustS = 0;
+        }
         cmptparm.sgnd = 0;
         prec = 8;
+    } else {
+        ushift = dshift = force8 = adjustS = 0;
     }
-    else ushift = dshift = force8 = adjustS = 0;
 
     cmptparm.prec = (OPJ_UINT32)prec;
     cmptparm.bpp = (OPJ_UINT32)prec;
@@ -1152,7 +1231,7 @@ opj_image_t* pgxtoimage(const char *filename, opj_cparameters_t *parameters) {
 
     /* create the image */
     image = opj_image_create((OPJ_UINT32)numcomps, &cmptparm, color_space);
-    if(!image) {
+    if (!image) {
         fclose(f);
         return NULL;
     }
@@ -1168,13 +1247,14 @@ opj_image_t* pgxtoimage(const char *filename, opj_cparameters_t *parameters) {
 
     for (i = 0; i < w * h; i++) {
         int v;
-        if(force8)
-        {
+        if (force8) {
             v = readuchar(f) + adjustS;
-            v = (v<<ushift) + (v>>dshift);
+            v = (v << ushift) + (v >> dshift);
             comp->data[i] = (unsigned char)v;
 
-            if(v > max) max = v;
+            if (v > max) {
+                max = v;
+            }
 
             continue;
         }
@@ -1197,8 +1277,9 @@ opj_image_t* pgxtoimage(const char *filename, opj_cparameters_t *parameters) {
                 v = (int) readuint(f, bigendian);
             }
         }
-        if (v > max)
+        if (v > max) {
             max = v;
+        }
         comp->data[i] = v;
     }
     fclose(f);
@@ -1209,108 +1290,116 @@ opj_image_t* pgxtoimage(const char *filename, opj_cparameters_t *parameters) {
 
 #define CLAMP(x,a,b) x < a ? a : (x > b ? b : x)
 
-static INLINE int clamp( const int value, const int prec, const int sgnd )
+static INLINE int clamp(const int value, const int prec, const int sgnd)
 {
-  if( sgnd )
-    {
-    if (prec <= 8)       return CLAMP(value,-128,127);
-    else if (prec <= 16) return CLAMP(value,-32768,32767);
-    else                 return CLAMP(value,-2147483647-1,2147483647);
-    }
-  else
-    {
-    if (prec <= 8)       return CLAMP(value,0,255);
-    else if (prec <= 16) return CLAMP(value,0,65535);
-    else                 return value; /*CLAMP(value,0,4294967295);*/
+    if (sgnd) {
+        if (prec <= 8) {
+            return CLAMP(value, -128, 127);
+        } else if (prec <= 16) {
+            return CLAMP(value, -32768, 32767);
+        } else {
+            return CLAMP(value, -2147483647 - 1, 2147483647);
+        }
+    } else {
+        if (prec <= 8) {
+            return CLAMP(value, 0, 255);
+        } else if (prec <= 16) {
+            return CLAMP(value, 0, 65535);
+        } else {
+            return value;    /*CLAMP(value,0,4294967295);*/
+        }
     }
 }
 
-int imagetopgx(opj_image_t * image, const char *outfile) 
+int imagetopgx(opj_image_t * image, const char *outfile)
 {
-  int w, h;
-  int i, j, fails = 1;
-  unsigned int compno;
-  FILE *fdest = NULL;
-
-  for (compno = 0; compno < image->numcomps; compno++) 
-       {
-    opj_image_comp_t *comp = &image->comps[compno];
-    char bname[256]; /* buffer for name */
-    char *name = bname; /* pointer */
-    int nbytes = 0;
-    size_t res;
-    const size_t olen = strlen(outfile);
-    const size_t dotpos = olen - 4;
-    const size_t total = dotpos + 1 + 1 + 4; /* '-' + '[1-3]' + '.pgx' */
-
-    if( outfile[dotpos] != '.' ) 
-               {
-      /* `pgx` was recognized but there is no dot at expected position */
-      fprintf(stderr, "ERROR -> Impossible happen." );
-      goto fin;
-               }
-    if( total > 256 ) 
-               {
-      name = (char*)malloc(total+1);
-                       if (name == NULL) {
-                               fprintf(stderr, "imagetopgx: memory out\n");
-                               goto fin;
-                       }
-               }
-    strncpy(name, outfile, dotpos);
-    sprintf(name+dotpos, "_%u.pgx", compno);
-    fdest = fopen(name, "wb");
-    /* don't need name anymore */
-                       
-    if (!fdest) 
-               {
-                               
-      fprintf(stderr, "ERROR -> failed to open %s for writing\n", name);
-                       if( total > 256 ) free(name);
-      goto fin;
-               }
-
-    w = (int)image->comps[compno].w;
-    h = (int)image->comps[compno].h;
-
-    fprintf(fdest, "PG ML %c %d %d %d\n", comp->sgnd ? '-' : '+', comp->prec,
-      w, h);
-
-    if (comp->prec <= 8) 
-      nbytes = 1;
-    else if (comp->prec <= 16)
-      nbytes = 2;
-    else
-      nbytes = 4;
-
-    for (i = 0; i < w * h; i++) 
-               {
-      /* FIXME: clamp func is being called within a loop */
-      const int val = clamp(image->comps[compno].data[i],
-        (int)comp->prec, (int)comp->sgnd);
-
-      for (j = nbytes - 1; j >= 0; j--) 
-                       {
-        int v = (int)(val >> (j * 8));
-        unsigned char byte = (unsigned char)v;
-        res = fwrite(&byte, 1, 1, fdest);
-
-        if( res < 1 ) 
-                               {
-          fprintf(stderr, "failed to write 1 byte for %s\n", name);
-                                       if( total > 256 ) free(name);
-          goto fin;
-                               }
-                       }
-               }
-               if( total > 256 ) free(name);
-    fclose(fdest); fdest = NULL;
-       }
-  fails = 0;
+    int w, h;
+    int i, j, fails = 1;
+    unsigned int compno;
+    FILE *fdest = NULL;
+
+    for (compno = 0; compno < image->numcomps; compno++) {
+        opj_image_comp_t *comp = &image->comps[compno];
+        char bname[256]; /* buffer for name */
+        char *name = bname; /* pointer */
+        int nbytes = 0;
+        size_t res;
+        const size_t olen = strlen(outfile);
+        const size_t dotpos = olen - 4;
+        const size_t total = dotpos + 1 + 1 + 4; /* '-' + '[1-3]' + '.pgx' */
+
+        if (outfile[dotpos] != '.') {
+            /* `pgx` was recognized but there is no dot at expected position */
+            fprintf(stderr, "ERROR -> Impossible happen.");
+            goto fin;
+        }
+        if (total > 256) {
+            name = (char*)malloc(total + 1);
+            if (name == NULL) {
+                fprintf(stderr, "imagetopgx: memory out\n");
+                goto fin;
+            }
+        }
+        strncpy(name, outfile, dotpos);
+        sprintf(name + dotpos, "_%u.pgx", compno);
+        fdest = fopen(name, "wb");
+        /* don't need name anymore */
+
+        if (!fdest) {
+
+            fprintf(stderr, "ERROR -> failed to open %s for writing\n", name);
+            if (total > 256) {
+                free(name);
+            }
+            goto fin;
+        }
+
+        w = (int)image->comps[compno].w;
+        h = (int)image->comps[compno].h;
+
+        fprintf(fdest, "PG ML %c %d %d %d\n", comp->sgnd ? '-' : '+', comp->prec,
+                w, h);
+
+        if (comp->prec <= 8) {
+            nbytes = 1;
+        } else if (comp->prec <= 16) {
+            nbytes = 2;
+        } else {
+            nbytes = 4;
+        }
+
+        for (i = 0; i < w * h; i++) {
+            /* FIXME: clamp func is being called within a loop */
+            const int val = clamp(image->comps[compno].data[i],
+                                  (int)comp->prec, (int)comp->sgnd);
+
+            for (j = nbytes - 1; j >= 0; j--) {
+                int v = (int)(val >> (j * 8));
+                unsigned char byte = (unsigned char)v;
+                res = fwrite(&byte, 1, 1, fdest);
+
+                if (res < 1) {
+                    fprintf(stderr, "failed to write 1 byte for %s\n", name);
+                    if (total > 256) {
+                        free(name);
+                    }
+                    goto fin;
+                }
+            }
+        }
+        if (total > 256) {
+            free(name);
+        }
+        fclose(fdest);
+        fdest = NULL;
+    }
+    fails = 0;
 fin:
-  if(fdest) fclose(fdest);
+    if (fdest) {
+        fclose(fdest);
+    }
 
-  return fails;
+    return fails;
 }
 
 /* -->> -->> -->> -->>
@@ -1319,8 +1408,7 @@ PNM IMAGE FORMAT
 
 <<-- <<-- <<-- <<-- */
 
-struct pnm_header
-{
+struct pnm_header {
     int width, height, maxval, depth, format;
     char rgb, rgba, gray, graya, bw;
     char ok;
@@ -1328,12 +1416,15 @@ struct pnm_header
 
 static char *skip_white(char *s)
 {
-    if (s != NULL)
-    {
-        while(*s)
-        {
-            if(*s == '\n' || *s == '\r') return NULL;
-            if(isspace(*s)) { ++s; continue; }
+    if (s != NULL) {
+        while (*s) {
+            if (*s == '\n' || *s == '\r') {
+                return NULL;
+            }
+            if (isspace(*s)) {
+                ++s;
+                continue;
+            }
             return s;
         }
     }
@@ -1348,15 +1439,21 @@ static char *skip_int(char *start, int *out_n)
     *out_n = 0;
 
     s = skip_white(start);
-    if(s == NULL) return NULL;
+    if (s == NULL) {
+        return NULL;
+    }
     start = s;
 
-    while(*s)
-    {
-        if( !isdigit(*s)) break;
+    while (*s) {
+        if (!isdigit(*s)) {
+            break;
+        }
         ++s;
     }
-    c = *s; *s = 0; *out_n = atoi(start); *s = c;
+    c = *s;
+    *s = 0;
+    *out_n = atoi(start);
+    *s = c;
     return s;
 }
 
@@ -1366,15 +1463,22 @@ static char *skip_idf(char *start, char out_idf[256])
     char c;
 
     s = skip_white(start);
-    if(s == NULL) return NULL;
+    if (s == NULL) {
+        return NULL;
+    }
     start = s;
 
-    while(*s)
-    {
-        if(isalpha(*s) || *s == '_') { ++s; continue; }
+    while (*s) {
+        if (isalpha(*s) || *s == '_') {
+            ++s;
+            continue;
+        }
         break;
     }
-    c = *s; *s = 0; strncpy(out_idf, start, 255); *s = c;
+    c = *s;
+    *s = 0;
+    strncpy(out_idf, start, 255);
+    *s = c;
     return s;
 }
 
@@ -1384,147 +1488,169 @@ static void read_pnm_header(FILE *reader, struct pnm_header *ph)
     char idf[256], type[256];
     char line[256];
 
-    if (fgets(line, 250, reader) == NULL)
-    {
-        fprintf(stderr,"\nWARNING: fgets return a NULL value");
+    if (fgets(line, 250, reader) == NULL) {
+        fprintf(stderr, "\nWARNING: fgets return a NULL value");
         return;
     }
 
-    if(line[0] != 'P')
-    {
-        fprintf(stderr,"read_pnm_header:PNM:magic P missing\n"); return;
+    if (line[0] != 'P') {
+        fprintf(stderr, "read_pnm_header:PNM:magic P missing\n");
+        return;
     }
     format = atoi(line + 1);
-    if(format < 1 || format > 7)
-    {
-        fprintf(stderr,"read_pnm_header:magic format %d invalid\n", format);
+    if (format < 1 || format > 7) {
+        fprintf(stderr, "read_pnm_header:magic format %d invalid\n", format);
         return;
     }
     ph->format = format;
     ttype = end = 0;
 
-    while(fgets(line, 250, reader))
-    {
+    while (fgets(line, 250, reader)) {
         char *s;
         int allow_null = 0;
 
-        if(*line == '#') continue;
+        if (*line == '#') {
+            continue;
+        }
 
         s = line;
 
-        if(format == 7)
-        {
+        if (format == 7) {
             s = skip_idf(s, idf);
 
-            if(s == NULL || *s == 0) return;
+            if (s == NULL || *s == 0) {
+                return;
+            }
 
-            if(strcmp(idf, "ENDHDR") == 0)
-            {
-                end = 1; break;
+            if (strcmp(idf, "ENDHDR") == 0) {
+                end = 1;
+                break;
             }
-            if(strcmp(idf, "WIDTH") == 0)
-            {
+            if (strcmp(idf, "WIDTH") == 0) {
                 s = skip_int(s, &ph->width);
-                if(s == NULL || *s == 0) return;
+                if (s == NULL || *s == 0) {
+                    return;
+                }
 
                 continue;
             }
-            if(strcmp(idf, "HEIGHT") == 0)
-            {
+            if (strcmp(idf, "HEIGHT") == 0) {
                 s = skip_int(s, &ph->height);
-                if(s == NULL || *s == 0) return;
+                if (s == NULL || *s == 0) {
+                    return;
+                }
 
                 continue;
             }
-            if(strcmp(idf, "DEPTH") == 0)
-            {
+            if (strcmp(idf, "DEPTH") == 0) {
                 s = skip_int(s, &ph->depth);
-                if(s == NULL || *s == 0) return;
+                if (s == NULL || *s == 0) {
+                    return;
+                }
 
                 continue;
             }
-            if(strcmp(idf, "MAXVAL") == 0)
-            {
+            if (strcmp(idf, "MAXVAL") == 0) {
                 s = skip_int(s, &ph->maxval);
-                if(s == NULL || *s == 0) return;
+                if (s == NULL || *s == 0) {
+                    return;
+                }
 
                 continue;
             }
-            if(strcmp(idf, "TUPLTYPE") == 0)
-            {
+            if (strcmp(idf, "TUPLTYPE") == 0) {
                 s = skip_idf(s, type);
-                if(s == NULL || *s == 0) return;
+                if (s == NULL || *s == 0) {
+                    return;
+                }
 
-                if(strcmp(type, "BLACKANDWHITE") == 0)
-                {
-                    ph->bw = 1; ttype = 1; continue;
+                if (strcmp(type, "BLACKANDWHITE") == 0) {
+                    ph->bw = 1;
+                    ttype = 1;
+                    continue;
                 }
-                if(strcmp(type, "GRAYSCALE") == 0)
-                {
-                    ph->gray = 1; ttype = 1; continue;
+                if (strcmp(type, "GRAYSCALE") == 0) {
+                    ph->gray = 1;
+                    ttype = 1;
+                    continue;
                 }
-                if(strcmp(type, "GRAYSCALE_ALPHA") == 0)
-                {
-                    ph->graya = 1; ttype = 1; continue;
+                if (strcmp(type, "GRAYSCALE_ALPHA") == 0) {
+                    ph->graya = 1;
+                    ttype = 1;
+                    continue;
                 }
-                if(strcmp(type, "RGB") == 0)
-                {
-                    ph->rgb = 1; ttype = 1; continue;
+                if (strcmp(type, "RGB") == 0) {
+                    ph->rgb = 1;
+                    ttype = 1;
+                    continue;
                 }
-                if(strcmp(type, "RGB_ALPHA") == 0)
-                {
-                    ph->rgba = 1; ttype = 1; continue;
+                if (strcmp(type, "RGB_ALPHA") == 0) {
+                    ph->rgba = 1;
+                    ttype = 1;
+                    continue;
                 }
-                fprintf(stderr,"read_pnm_header:unknown P7 TUPLTYPE %s\n",type);
+                fprintf(stderr, "read_pnm_header:unknown P7 TUPLTYPE %s\n", type);
                 return;
             }
-            fprintf(stderr,"read_pnm_header:unknown P7 idf %s\n",idf);
+            fprintf(stderr, "read_pnm_header:unknown P7 idf %s\n", idf);
             return;
         } /* if(format == 7) */
 
         /* Here format is in range [1,6] */
         if (ph->width == 0) {
             s = skip_int(s, &ph->width);
-            if ((s == NULL) || (*s == 0) || (ph->width < 1)) return;
+            if ((s == NULL) || (*s == 0) || (ph->width < 1)) {
+                return;
+            }
             allow_null = 1;
         }
         if (ph->height == 0) {
             s = skip_int(s, &ph->height);
-            if ((s == NULL) && allow_null) continue;
-            if ((s == NULL) || (*s == 0) || (ph->height < 1)) return;
-            if(format == 1 || format == 4) {
+            if ((s == NULL) && allow_null) {
+                continue;
+            }
+            if ((s == NULL) || (*s == 0) || (ph->height < 1)) {
+                return;
+            }
+            if (format == 1 || format == 4) {
                 break;
             }
             allow_null = 1;
         }
         /* here, format is in P2, P3, P5, P6 */
         s = skip_int(s, &ph->maxval);
-        if ((s == NULL) && allow_null) continue;
-        if ((s == NULL) || (*s == 0)) return;
+        if ((s == NULL) && allow_null) {
+            continue;
+        }
+        if ((s == NULL) || (*s == 0)) {
+            return;
+        }
         break;
     }/* while(fgets( ) */
-    if(format == 2 || format == 3 || format > 4)
-    {
-        if(ph->maxval < 1 || ph->maxval > 65535) return;
+    if (format == 2 || format == 3 || format > 4) {
+        if (ph->maxval < 1 || ph->maxval > 65535) {
+            return;
+        }
+    }
+    if (ph->width < 1 || ph->height < 1) {
+        return;
     }
-    if(ph->width < 1 || ph->height < 1) return;
 
-    if(format == 7)
-    {
-        if(!end)
-        {
-            fprintf(stderr,"read_pnm_header:P7 without ENDHDR\n"); return;
+    if (format == 7) {
+        if (!end) {
+            fprintf(stderr, "read_pnm_header:P7 without ENDHDR\n");
+            return;
+        }
+        if (ph->depth < 1 || ph->depth > 4) {
+            return;
         }
-        if(ph->depth < 1 || ph->depth > 4) return;
 
-        if (ttype)
+        if (ttype) {
             ph->ok = 1;
-    }
-    else
-    {
+        }
+    } else {
         ph->ok = 1;
-        if(format == 1 || format == 4)
-        {
+        if (format == 1 || format == 4) {
             ph->maxval = 255;
         }
     }
@@ -1532,25 +1658,56 @@ static void read_pnm_header(FILE *reader, struct pnm_header *ph)
 
 static int has_prec(int val)
 {
-    if(val < 2) return 1;
-    if(val < 4) return 2;
-    if(val < 8) return 3;
-    if(val < 16) return 4;
-    if(val < 32) return 5;
-    if(val < 64) return 6;
-    if(val < 128) return 7;
-    if(val < 256) return 8;
-    if(val < 512) return 9;
-    if(val < 1024) return 10;
-    if(val < 2048) return 11;
-    if(val < 4096) return 12;
-    if(val < 8192) return 13;
-    if(val < 16384) return 14;
-    if(val < 32768) return 15;
+    if (val < 2) {
+        return 1;
+    }
+    if (val < 4) {
+        return 2;
+    }
+    if (val < 8) {
+        return 3;
+    }
+    if (val < 16) {
+        return 4;
+    }
+    if (val < 32) {
+        return 5;
+    }
+    if (val < 64) {
+        return 6;
+    }
+    if (val < 128) {
+        return 7;
+    }
+    if (val < 256) {
+        return 8;
+    }
+    if (val < 512) {
+        return 9;
+    }
+    if (val < 1024) {
+        return 10;
+    }
+    if (val < 2048) {
+        return 11;
+    }
+    if (val < 4096) {
+        return 12;
+    }
+    if (val < 8192) {
+        return 13;
+    }
+    if (val < 16384) {
+        return 14;
+    }
+    if (val < 32768) {
+        return 15;
+    }
     return 16;
 }
 
-opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters) {
+opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters)
+{
     int subsampling_dx = parameters->subsampling_dx;
     int subsampling_dy = parameters->subsampling_dy;
 
@@ -1561,21 +1718,22 @@ opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters) {
     opj_image_t * image = NULL;
     struct pnm_header header_info;
 
-    if((fp = fopen(filename, "rb")) == NULL)
-    {
-        fprintf(stderr, "pnmtoimage:Failed to open %s for reading!\n",filename);
+    if ((fp = fopen(filename, "rb")) == NULL) {
+        fprintf(stderr, "pnmtoimage:Failed to open %s for reading!\n", filename);
         return NULL;
     }
     memset(&header_info, 0, sizeof(struct pnm_header));
 
     read_pnm_header(fp, &header_info);
 
-    if(!header_info.ok) { fclose(fp); return NULL; }
+    if (!header_info.ok) {
+        fclose(fp);
+        return NULL;
+    }
 
     format = header_info.format;
 
-    switch(format)
-    {
+    switch (format) {
     case 1: /* ascii bitmap */
     case 4: /* raw bitmap */
         numcomps = 1;
@@ -1595,16 +1753,21 @@ opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters) {
         numcomps = header_info.depth;
         break;
 
-    default: fclose(fp); return NULL;
+    default:
+        fclose(fp);
+        return NULL;
+    }
+    if (numcomps < 3) {
+        color_space = OPJ_CLRSPC_GRAY;    /* GRAY, GRAYA */
+    } else {
+        color_space = OPJ_CLRSPC_SRGB;    /* RGB, RGBA */
     }
-    if(numcomps < 3)
-        color_space = OPJ_CLRSPC_GRAY;/* GRAY, GRAYA */
-    else
-        color_space = OPJ_CLRSPC_SRGB;/* RGB, RGBA */
 
     prec = has_prec(header_info.maxval);
 
-    if(prec < 8) prec = 8;
+    if (prec < 8) {
+        prec = 8;
+    }
 
     w = header_info.width;
     h = header_info.height;
@@ -1613,8 +1776,7 @@ opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters) {
 
     memset(&cmptparm[0], 0, (size_t)numcomps * sizeof(opj_image_cmptparm_t));
 
-    for(i = 0; i < numcomps; i++)
-    {
+    for (i = 0; i < numcomps; i++) {
         cmptparm[i].prec = (OPJ_UINT32)prec;
         cmptparm[i].bpp = (OPJ_UINT32)prec;
         cmptparm[i].sgnd = 0;
@@ -1625,114 +1787,104 @@ opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters) {
     }
     image = opj_image_create((OPJ_UINT32)numcomps, &cmptparm[0], color_space);
 
-    if(!image) { fclose(fp); return NULL; }
+    if (!image) {
+        fclose(fp);
+        return NULL;
+    }
 
     /* set image offset and reference grid */
     image->x0 = (OPJ_UINT32)parameters->image_offset_x0;
     image->y0 = (OPJ_UINT32)parameters->image_offset_y0;
-    image->x1 = (OPJ_UINT32)(parameters->image_offset_x0 + (w - 1) * subsampling_dx + 1);
-    image->y1 = (OPJ_UINT32)(parameters->image_offset_y0 + (h - 1) * subsampling_dy + 1);
+    image->x1 = (OPJ_UINT32)(parameters->image_offset_x0 + (w - 1) * subsampling_dx
+                             + 1);
+    image->y1 = (OPJ_UINT32)(parameters->image_offset_y0 + (h - 1) * subsampling_dy
+                             + 1);
 
-    if((format == 2) || (format == 3)) /* ascii pixmap */
-    {
+    if ((format == 2) || (format == 3)) { /* ascii pixmap */
         unsigned int index;
 
-        for (i = 0; i < w * h; i++)
-        {
-            for(compno = 0; compno < numcomps; compno++)
-            {
+        for (i = 0; i < w * h; i++) {
+            for (compno = 0; compno < numcomps; compno++) {
                 index = 0;
-                if (fscanf(fp, "%u", &index) != 1)
-                    fprintf(stderr, "\nWARNING: fscanf return a number of element different from the expected.\n");
+                if (fscanf(fp, "%u", &index) != 1) {
+                    fprintf(stderr,
+                            "\nWARNING: fscanf return a number of element different from the expected.\n");
+                }
 
-                image->comps[compno].data[i] = (OPJ_INT32)(index * 255)/header_info.maxval;
+                image->comps[compno].data[i] = (OPJ_INT32)(index * 255) / header_info.maxval;
             }
         }
-    }
-    else
-        if((format == 5)
-                || (format == 6)
-                ||((format == 7)
-                   && (   header_info.gray || header_info.graya
-                          || header_info.rgb || header_info.rgba)))/* binary pixmap */
-        {
-            unsigned char c0, c1, one;
-
-            one = (prec < 9);
-
-            for (i = 0; i < w * h; i++)
-            {
-                for(compno = 0; compno < numcomps; compno++)
-                {
-                if ( !fread(&c0, 1, 1, fp) )
-                  {
-                  fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-                  opj_image_destroy(image);
-                  fclose(fp);
-                  return NULL;
-                  }
-                    if(one)
-                    {
-                        image->comps[compno].data[i] = c0;
-                    }
-                    else
-                    {
-                        if ( !fread(&c1, 1, 1, fp) )
-                            fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-                        /* netpbm: */
-                        image->comps[compno].data[i] = ((c0<<8) | c1);
+    } else if ((format == 5)
+               || (format == 6)
+               || ((format == 7)
+                   && (header_info.gray || header_info.graya
+                       || header_info.rgb || header_info.rgba))) { /* binary pixmap */
+        unsigned char c0, c1, one;
+
+        one = (prec < 9);
+
+        for (i = 0; i < w * h; i++) {
+            for (compno = 0; compno < numcomps; compno++) {
+                if (!fread(&c0, 1, 1, fp)) {
+                    fprintf(stderr,
+                            "\nError: fread return a number of element different from the expected.\n");
+                    opj_image_destroy(image);
+                    fclose(fp);
+                    return NULL;
+                }
+                if (one) {
+                    image->comps[compno].data[i] = c0;
+                } else {
+                    if (!fread(&c1, 1, 1, fp)) {
+                        fprintf(stderr,
+                                "\nError: fread return a number of element different from the expected.\n");
                     }
+                    /* netpbm: */
+                    image->comps[compno].data[i] = ((c0 << 8) | c1);
                 }
             }
         }
-        else
-            if(format == 1) /* ascii bitmap */
-            {
-                for (i = 0; i < w * h; i++)
-                {
-                    unsigned int index;
+    } else if (format == 1) { /* ascii bitmap */
+        for (i = 0; i < w * h; i++) {
+            unsigned int index;
 
-                    if ( fscanf(fp, "%u", &index) != 1)
-                        fprintf(stderr, "\nWARNING: fscanf return a number of element different from the expected.\n");
+            if (fscanf(fp, "%u", &index) != 1) {
+                fprintf(stderr,
+                        "\nWARNING: fscanf return a number of element different from the expected.\n");
+            }
 
-                    image->comps[0].data[i] = (index?0:255);
+            image->comps[0].data[i] = (index ? 0 : 255);
+        }
+    } else if (format == 4) {
+        int x, y, bit;
+        unsigned char uc;
+
+        i = 0;
+        for (y = 0; y < h; ++y) {
+            bit = -1;
+            uc = 0;
+
+            for (x = 0; x < w; ++x) {
+                if (bit == -1) {
+                    bit = 7;
+                    uc = (unsigned char)getc(fp);
                 }
+                image->comps[0].data[i] = (((uc >> bit) & 1) ? 0 : 255);
+                --bit;
+                ++i;
             }
-            else
-                if(format == 4)
-                {
-                    int x, y, bit;
-                    unsigned char uc;
-
-                    i = 0;
-                    for(y = 0; y < h; ++y)
-                    {
-                        bit = -1; uc = 0;
-
-                        for(x = 0; x < w; ++x)
-                        {
-                            if(bit == -1)
-                            {
-                                bit = 7;
-                                uc = (unsigned char)getc(fp);
-                            }
-                            image->comps[0].data[i] = (((uc>>bit) & 1)?0:255);
-                            --bit; ++i;
-                        }
-                    }
-                }
-                else
-                    if((format == 7 && header_info.bw)) /*MONO*/
-                    {
-                        unsigned char uc;
-
-                        for(i = 0; i < w * h; ++i)
-                        {
-                            if ( !fread(&uc, 1, 1, fp) )
-                                fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-                            image->comps[0].data[i] = (uc & 1)?0:255;
-                        }
-                    }
+        }
+    } else if ((format == 7 && header_info.bw)) { /*MONO*/
+        unsigned char uc;
+
+        for (i = 0; i < w * h; ++i) {
+            if (!fread(&uc, 1, 1, fp)) {
+                fprintf(stderr,
+                        "\nError: fread return a number of element different from the expected.\n");
+            }
+            image->comps[0].data[i] = (uc & 1) ? 0 : 255;
+        }
+    }
     fclose(fp);
 
     return image;
@@ -1753,215 +1905,253 @@ int imagetopnm(opj_image_t * image, const char *outfile, int force_split)
 
     alpha = NULL;
 
-    if((prec = (int)image->comps[0].prec) > 16)
-    {
-        fprintf(stderr,"%s:%d:imagetopnm\n\tprecision %d is larger than 16"
-                "\n\t: refused.\n",__FILE__,__LINE__,prec);
+    if ((prec = (int)image->comps[0].prec) > 16) {
+        fprintf(stderr, "%s:%d:imagetopnm\n\tprecision %d is larger than 16"
+                "\n\t: refused.\n", __FILE__, __LINE__, prec);
         return 1;
     }
-    two = has_alpha = 0; fails = 1;
+    two = has_alpha = 0;
+    fails = 1;
     ncomp = image->numcomps;
 
-    while (*tmp) ++tmp; tmp -= 2;
+    while (*tmp) {
+        ++tmp;
+    }
+    tmp -= 2;
     want_gray = (*tmp == 'g' || *tmp == 'G');
     ncomp = image->numcomps;
 
-    if(want_gray) ncomp = 1;
+    if (want_gray) {
+        ncomp = 1;
+    }
 
     if ((force_split == 0) &&
-                               (ncomp == 2 /* GRAYA */
-            || (ncomp > 2 /* RGB, RGBA */
-                && image->comps[0].dx == image->comps[1].dx
-                && image->comps[1].dx == image->comps[2].dx
-                && image->comps[0].dy == image->comps[1].dy
-                && image->comps[1].dy == image->comps[2].dy
-                && image->comps[0].prec == image->comps[1].prec
-                && image->comps[1].prec == image->comps[2].prec
-                )))
-               {
+            (ncomp == 2 /* GRAYA */
+             || (ncomp > 2 /* RGB, RGBA */
+                 && image->comps[0].dx == image->comps[1].dx
+                 && image->comps[1].dx == image->comps[2].dx
+                 && image->comps[0].dy == image->comps[1].dy
+                 && image->comps[1].dy == image->comps[2].dy
+                 && image->comps[0].prec == image->comps[1].prec
+                 && image->comps[1].prec == image->comps[2].prec
+                ))) {
         fdest = fopen(outfile, "wb");
 
-        if (!fdest)
-        {
+        if (!fdest) {
             fprintf(stderr, "ERROR -> failed to open %s for writing\n", outfile);
             return fails;
         }
         two = (prec > 8);
         triple = (ncomp > 2);
-        wr = (int)image->comps[0].w; hr = (int)image->comps[0].h;
-        max = (1<<prec) - 1; has_alpha = (ncomp == 4 || ncomp == 2);
+        wr = (int)image->comps[0].w;
+        hr = (int)image->comps[0].h;
+        max = (1 << prec) - 1;
+        has_alpha = (ncomp == 4 || ncomp == 2);
 
         red = image->comps[0].data;
 
-        if(triple)
-        {
+        if (triple) {
             green = image->comps[1].data;
             blue = image->comps[2].data;
+        } else {
+            green = blue = NULL;
         }
-        else green = blue = NULL;
 
-        if(has_alpha)
-        {
-            const char *tt = (triple?"RGB_ALPHA":"GRAYSCALE_ALPHA");
+        if (has_alpha) {
+            const char *tt = (triple ? "RGB_ALPHA" : "GRAYSCALE_ALPHA");
 
             fprintf(fdest, "P7\n# OpenJPEG-%s\nWIDTH %d\nHEIGHT %d\nDEPTH %u\n"
                     "MAXVAL %d\nTUPLTYPE %s\nENDHDR\n", opj_version(),
                     wr, hr, ncomp, max, tt);
             alpha = image->comps[ncomp - 1].data;
             adjustA = (image->comps[ncomp - 1].sgnd ?
-                        1 << (image->comps[ncomp - 1].prec - 1) : 0);
-        }
-        else
-        {
+                       1 << (image->comps[ncomp - 1].prec - 1) : 0);
+        } else {
             fprintf(fdest, "P6\n# OpenJPEG-%s\n%d %d\n%d\n",
                     opj_version(), wr, hr, max);
             adjustA = 0;
         }
         adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
 
-        if(triple)
-        {
+        if (triple) {
             adjustG = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
             adjustB = (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
+        } else {
+            adjustG = adjustB = 0;
         }
-        else adjustG = adjustB = 0;
 
-        for(i = 0; i < wr * hr; ++i)
-        {
-            if(two)
-            {
-                v = *red + adjustR; ++red;
-                if(v > 65535) v = 65535; else if(v < 0) v = 0;
+        for (i = 0; i < wr * hr; ++i) {
+            if (two) {
+                v = *red + adjustR;
+                ++red;
+                if (v > 65535) {
+                    v = 65535;
+                } else if (v < 0) {
+                    v = 0;
+                }
 
                 /* netpbm: */
-                fprintf(fdest, "%c%c",(unsigned char)(v>>8), (unsigned char)v);
-
-                if(triple)
-                {
-                    v = *green + adjustG; ++green;
-                    if(v > 65535) v = 65535; else if(v < 0) v = 0;
+                fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
+
+                if (triple) {
+                    v = *green + adjustG;
+                    ++green;
+                    if (v > 65535) {
+                        v = 65535;
+                    } else if (v < 0) {
+                        v = 0;
+                    }
 
                     /* netpbm: */
-                    fprintf(fdest, "%c%c",(unsigned char)(v>>8), (unsigned char)v);
-
-                    v =  *blue + adjustB; ++blue;
-                    if(v > 65535) v = 65535; else if(v < 0) v = 0;
+                    fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
+
+                    v =  *blue + adjustB;
+                    ++blue;
+                    if (v > 65535) {
+                        v = 65535;
+                    } else if (v < 0) {
+                        v = 0;
+                    }
 
                     /* netpbm: */
-                    fprintf(fdest, "%c%c",(unsigned char)(v>>8), (unsigned char)v);
+                    fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
 
                 }/* if(triple) */
 
-                if(has_alpha)
-                {
-                    v = *alpha + adjustA; ++alpha;
-                    if(v > 65535) v = 65535; else if(v < 0) v = 0;
+                if (has_alpha) {
+                    v = *alpha + adjustA;
+                    ++alpha;
+                    if (v > 65535) {
+                        v = 65535;
+                    } else if (v < 0) {
+                        v = 0;
+                    }
 
                     /* netpbm: */
-                    fprintf(fdest, "%c%c",(unsigned char)(v>>8), (unsigned char)v);
+                    fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
                 }
                 continue;
 
-            }  /* if(two) */
+            }   /* if(two) */
 
             /* prec <= 8: */
             v = *red++;
-            if(v > 255) v = 255; else if(v < 0) v = 0;
+            if (v > 255) {
+                v = 255;
+            } else if (v < 0) {
+                v = 0;
+            }
 
             fprintf(fdest, "%c", (unsigned char)v);
-            if(triple)
-            {
+            if (triple) {
                 v = *green++;
-                if(v > 255) v = 255; else if(v < 0) v = 0;
+                if (v > 255) {
+                    v = 255;
+                } else if (v < 0) {
+                    v = 0;
+                }
 
                 fprintf(fdest, "%c", (unsigned char)v);
                 v = *blue++;
-                if(v > 255) v = 255; else if(v < 0) v = 0;
+                if (v > 255) {
+                    v = 255;
+                } else if (v < 0) {
+                    v = 0;
+                }
 
                 fprintf(fdest, "%c", (unsigned char)v);
-                                               }
-            if(has_alpha)
-            {
+            }
+            if (has_alpha) {
                 v = *alpha++;
-                if(v > 255) v = 255; else if(v < 0) v = 0;
+                if (v > 255) {
+                    v = 255;
+                } else if (v < 0) {
+                    v = 0;
+                }
 
                 fprintf(fdest, "%c", (unsigned char)v);
             }
-        }      /* for(i */
+        }   /* for(i */
 
-        fclose(fdest); return 0;
+        fclose(fdest);
+        return 0;
     }
 
     /* YUV or MONO: */
 
-    if (image->numcomps > ncomp)
-    {
-        fprintf(stderr,"WARNING -> [PGM file] Only the first component\n");
-        fprintf(stderr,"           is written to the file\n");
+    if (image->numcomps > ncomp) {
+        fprintf(stderr, "WARNING -> [PGM file] Only the first component\n");
+        fprintf(stderr, "           is written to the file\n");
     }
     destname = (char*)malloc(strlen(outfile) + 8);
-    if(destname == NULL){
+    if (destname == NULL) {
         fprintf(stderr, "imagetopnm: memory out\n");
         return 1;
     }
-    for (compno = 0; compno < ncomp; compno++)
-    {
-        if (ncomp > 1)
-        {
+    for (compno = 0; compno < ncomp; compno++) {
+        if (ncomp > 1) {
             /*sprintf(destname, "%d.%s", compno, outfile);*/
             const size_t olen = strlen(outfile);
             const size_t dotpos = olen - 4;
 
             strncpy(destname, outfile, dotpos);
-            sprintf(destname+dotpos, "_%u.pgm", compno);
-        }
-        else
+            sprintf(destname + dotpos, "_%u.pgm", compno);
+        } else {
             sprintf(destname, "%s", outfile);
+        }
 
         fdest = fopen(destname, "wb");
-        if (!fdest)
-        {
+        if (!fdest) {
             fprintf(stderr, "ERROR -> failed to open %s for writing\n", destname);
             free(destname);
             return 1;
         }
-        wr = (int)image->comps[compno].w; hr = (int)image->comps[compno].h;
+        wr = (int)image->comps[compno].w;
+        hr = (int)image->comps[compno].h;
         prec = (int)image->comps[compno].prec;
-        max = (1<<prec) - 1;
+        max = (1 << prec) - 1;
 
         fprintf(fdest, "P5\n#OpenJPEG-%s\n%d %d\n%d\n",
                 opj_version(), wr, hr, max);
 
         red = image->comps[compno].data;
         adjustR =
-                (image->comps[compno].sgnd ? 1 << (image->comps[compno].prec - 1) : 0);
-
-        if(prec > 8)
-        {
-            for (i = 0; i < wr * hr; i++)
-            {
-                v = *red + adjustR; ++red;
-                if(v > 65535) v = 65535; else if(v < 0) v = 0;
+            (image->comps[compno].sgnd ? 1 << (image->comps[compno].prec - 1) : 0);
+
+        if (prec > 8) {
+            for (i = 0; i < wr * hr; i++) {
+                v = *red + adjustR;
+                ++red;
+                if (v > 65535) {
+                    v = 65535;
+                } else if (v < 0) {
+                    v = 0;
+                }
 
                 /* netpbm: */
-                fprintf(fdest, "%c%c",(unsigned char)(v>>8), (unsigned char)v);
+                fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
 
-                if(has_alpha)
-                {
+                if (has_alpha) {
                     v = *alpha++;
-                    if(v > 65535) v = 65535; else if(v < 0) v = 0;
+                    if (v > 65535) {
+                        v = 65535;
+                    } else if (v < 0) {
+                        v = 0;
+                    }
 
                     /* netpbm: */
-                    fprintf(fdest, "%c%c",(unsigned char)(v>>8), (unsigned char)v);
+                    fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
                 }
             }/* for(i */
-        }
-        else /* prec <= 8 */
-        {
-            for(i = 0; i < wr * hr; ++i)
-            {
-                v = *red + adjustR; ++red;
-                if(v > 255) v = 255; else if(v < 0) v = 0;
+        } else { /* prec <= 8 */
+            for (i = 0; i < wr * hr; ++i) {
+                v = *red + adjustR;
+                ++red;
+                if (v > 255) {
+                    v = 255;
+                } else if (v < 0) {
+                    v = 0;
+                }
 
                 fprintf(fdest, "%c", (unsigned char)v);
             }
@@ -1978,7 +2168,9 @@ int imagetopnm(opj_image_t * image, const char *outfile, int force_split)
     RAW IMAGE FORMAT
 
  <<-- <<-- <<-- <<-- */
-static opj_image_t* rawtoimage_common(const char *filename, opj_cparameters_t *parameters, raw_cparameters_t *raw_cp, OPJ_BOOL big_endian) {
+static opj_image_t* rawtoimage_common(const char *filename,
+                                      opj_cparameters_t *parameters, raw_cparameters_t *raw_cp, OPJ_BOOL big_endian)
+{
     int subsampling_dx = parameters->subsampling_dx;
     int subsampling_dy = parameters->subsampling_dy;
 
@@ -1989,22 +2181,25 @@ static opj_image_t* rawtoimage_common(const char *filename, opj_cparameters_t *p
     opj_image_t * image = NULL;
     unsigned short ch;
 
-    if((! (raw_cp->rawWidth & raw_cp->rawHeight & raw_cp->rawComp & raw_cp->rawBitDepth)) == 0)
-    {
-        fprintf(stderr,"\nError: invalid raw image parameters\n");
-        fprintf(stderr,"Please use the Format option -F:\n");
-        fprintf(stderr,"-F <width>,<height>,<ncomp>,<bitdepth>,{s,u}@<dx1>x<dy1>:...:<dxn>x<dyn>\n");
-        fprintf(stderr,"If subsampling is omitted, 1x1 is assumed for all components\n");
-        fprintf(stderr,"Example: -i image.raw -o image.j2k -F 512,512,3,8,u@1x1:2x2:2x2\n");
-        fprintf(stderr,"         for raw 512x512 image with 4:2:0 subsampling\n");
-        fprintf(stderr,"Aborting.\n");
+    if ((!(raw_cp->rawWidth & raw_cp->rawHeight & raw_cp->rawComp &
+            raw_cp->rawBitDepth)) == 0) {
+        fprintf(stderr, "\nError: invalid raw image parameters\n");
+        fprintf(stderr, "Please use the Format option -F:\n");
+        fprintf(stderr,
+                "-F <width>,<height>,<ncomp>,<bitdepth>,{s,u}@<dx1>x<dy1>:...:<dxn>x<dyn>\n");
+        fprintf(stderr,
+                "If subsampling is omitted, 1x1 is assumed for all components\n");
+        fprintf(stderr,
+                "Example: -i image.raw -o image.j2k -F 512,512,3,8,u@1x1:2x2:2x2\n");
+        fprintf(stderr, "         for raw 512x512 image with 4:2:0 subsampling\n");
+        fprintf(stderr, "Aborting.\n");
         return NULL;
     }
 
     f = fopen(filename, "rb");
     if (!f) {
         fprintf(stderr, "Failed to open %s for reading !!\n", filename);
-        fprintf(stderr,"Aborting\n");
+        fprintf(stderr, "Aborting\n");
         return NULL;
     }
     numcomps = raw_cp->rawComp;
@@ -2021,15 +2216,16 @@ static opj_image_t* rawtoimage_common(const char *filename, opj_cparameters_t *p
     }
     w = raw_cp->rawWidth;
     h = raw_cp->rawHeight;
-    cmptparm = (opj_image_cmptparm_t*) calloc((OPJ_UINT32)numcomps,sizeof(opj_image_cmptparm_t));
+    cmptparm = (opj_image_cmptparm_t*) calloc((OPJ_UINT32)numcomps,
+               sizeof(opj_image_cmptparm_t));
     if (!cmptparm) {
         fprintf(stderr, "Failed to allocate image components parameters !!\n");
-        fprintf(stderr,"Aborting\n");
+        fprintf(stderr, "Aborting\n");
         fclose(f);
         return NULL;
     }
     /* initialize image components */
-    for(i = 0; i < numcomps; i++) {
+    for (i = 0; i < numcomps; i++) {
         cmptparm[i].prec = (OPJ_UINT32)raw_cp->rawBitDepth;
         cmptparm[i].bpp = (OPJ_UINT32)raw_cp->rawBitDepth;
         cmptparm[i].sgnd = (OPJ_UINT32)raw_cp->rawSigned;
@@ -2041,88 +2237,91 @@ static opj_image_t* rawtoimage_common(const char *filename, opj_cparameters_t *p
     /* create the image */
     image = opj_image_create((OPJ_UINT32)numcomps, &cmptparm[0], color_space);
     free(cmptparm);
-    if(!image) {
+    if (!image) {
         fclose(f);
         return NULL;
     }
     /* set image offset and reference grid */
     image->x0 = (OPJ_UINT32)parameters->image_offset_x0;
     image->y0 = (OPJ_UINT32)parameters->image_offset_y0;
-    image->x1 = (OPJ_UINT32)parameters->image_offset_x0 + (OPJ_UINT32)(w - 1) *        (OPJ_UINT32)subsampling_dx + 1;
-    image->y1 = (OPJ_UINT32)parameters->image_offset_y0 + (OPJ_UINT32)(h - 1) * (OPJ_UINT32)subsampling_dy + 1;
+    image->x1 = (OPJ_UINT32)parameters->image_offset_x0 + (OPJ_UINT32)(w - 1) *
+                (OPJ_UINT32)subsampling_dx + 1;
+    image->y1 = (OPJ_UINT32)parameters->image_offset_y0 + (OPJ_UINT32)(h - 1) *
+                (OPJ_UINT32)subsampling_dy + 1;
 
-    if(raw_cp->rawBitDepth <= 8)
-    {
+    if (raw_cp->rawBitDepth <= 8) {
         unsigned char value = 0;
-        for(compno = 0; compno < numcomps; compno++) {
-            int nloop = (w*h)/(raw_cp->rawComps[compno].dx*raw_cp->rawComps[compno].dy);
+        for (compno = 0; compno < numcomps; compno++) {
+            int nloop = (w * h) / (raw_cp->rawComps[compno].dx *
+                                   raw_cp->rawComps[compno].dy);
             for (i = 0; i < nloop; i++) {
                 if (!fread(&value, 1, 1, f)) {
-                    fprintf(stderr,"Error reading raw file. End of file probably reached.\n");
+                    fprintf(stderr, "Error reading raw file. End of file probably reached.\n");
                     opj_image_destroy(image);
                     fclose(f);
                     return NULL;
                 }
-                image->comps[compno].data[i] = raw_cp->rawSigned?(char)value:value;
+                image->comps[compno].data[i] = raw_cp->rawSigned ? (char)value : value;
             }
         }
-    }
-    else if(raw_cp->rawBitDepth <= 16)
-    {
+    } else if (raw_cp->rawBitDepth <= 16) {
         unsigned short value;
-        for(compno = 0; compno < numcomps; compno++) {
-            int nloop = (w*h)/(raw_cp->rawComps[compno].dx*raw_cp->rawComps[compno].dy);
+        for (compno = 0; compno < numcomps; compno++) {
+            int nloop = (w * h) / (raw_cp->rawComps[compno].dx *
+                                   raw_cp->rawComps[compno].dy);
             for (i = 0; i < nloop; i++) {
                 unsigned char temp1;
                 unsigned char temp2;
                 if (!fread(&temp1, 1, 1, f)) {
-                    fprintf(stderr,"Error reading raw file. End of file probably reached.\n");
+                    fprintf(stderr, "Error reading raw file. End of file probably reached.\n");
                     opj_image_destroy(image);
                     fclose(f);
                     return NULL;
                 }
                 if (!fread(&temp2, 1, 1, f)) {
-                    fprintf(stderr,"Error reading raw file. End of file probably reached.\n");
+                    fprintf(stderr, "Error reading raw file. End of file probably reached.\n");
                     opj_image_destroy(image);
                     fclose(f);
                     return NULL;
                 }
-                if( big_endian )
-                {
+                if (big_endian) {
                     value = (unsigned short)((temp1 << 8) + temp2);
-                }
-                else
-                {
+                } else {
                     value = (unsigned short)((temp2 << 8) + temp1);
                 }
-                image->comps[compno].data[i] = raw_cp->rawSigned?(short)value:value;
+                image->comps[compno].data[i] = raw_cp->rawSigned ? (short)value : value;
             }
         }
-    }
-    else {
-        fprintf(stderr,"OpenJPEG cannot encode raw components with bit depth higher than 16 bits.\n");
+    } else {
+        fprintf(stderr,
+                "OpenJPEG cannot encode raw components with bit depth higher than 16 bits.\n");
         opj_image_destroy(image);
         fclose(f);
         return NULL;
     }
 
     if (fread(&ch, 1, 1, f)) {
-        fprintf(stderr,"Warning. End of raw file not reached... processing anyway\n");
+        fprintf(stderr, "Warning. End of raw file not reached... processing anyway\n");
     }
     fclose(f);
 
     return image;
 }
 
-opj_image_t* rawltoimage(const char *filename, opj_cparameters_t *parameters, raw_cparameters_t *raw_cp) {
+opj_image_t* rawltoimage(const char *filename, opj_cparameters_t *parameters,
+                         raw_cparameters_t *raw_cp)
+{
     return rawtoimage_common(filename, parameters, raw_cp, OPJ_FALSE);
 }
 
-opj_image_t* rawtoimage(const char *filename, opj_cparameters_t *parameters, raw_cparameters_t *raw_cp) {
+opj_image_t* rawtoimage(const char *filename, opj_cparameters_t *parameters,
+                        raw_cparameters_t *raw_cp)
+{
     return rawtoimage_common(filename, parameters, raw_cp, OPJ_TRUE);
 }
 
-static int imagetoraw_common(opj_image_t * image, const char *outfile, OPJ_BOOL big_endian)
+static int imagetoraw_common(opj_image_t * image, const char *outfile,
+                             OPJ_BOOL big_endian)
 {
     FILE *rawFile = NULL;
     size_t res;
@@ -2133,9 +2332,8 @@ static int imagetoraw_common(opj_image_t * image, const char *outfile, OPJ_BOOL
     unsigned char uc;
     (void)big_endian;
 
-    if((image->numcomps * image->x1 * image->y1) == 0)
-    {
-        fprintf(stderr,"\nError: invalid raw image parameters\n");
+    if ((image->numcomps * image->x1 * image->y1) == 0) {
+        fprintf(stderr, "\nError: invalid raw image parameters\n");
         return 1;
     }
 
@@ -2146,47 +2344,52 @@ static int imagetoraw_common(opj_image_t * image, const char *outfile, OPJ_BOOL
     }
 
     fails = 1;
-    fprintf(stdout,"Raw image characteristics: %d components\n", image->numcomps);
+    fprintf(stdout, "Raw image characteristics: %d components\n", image->numcomps);
 
-    for(compno = 0; compno < image->numcomps; compno++)
-    {
-        fprintf(stdout,"Component %u characteristics: %dx%dx%d %s\n", compno, image->comps[compno].w,
-                image->comps[compno].h, image->comps[compno].prec, image->comps[compno].sgnd==1 ? "signed": "unsigned");
+    for (compno = 0; compno < image->numcomps; compno++) {
+        fprintf(stdout, "Component %u characteristics: %dx%dx%d %s\n", compno,
+                image->comps[compno].w,
+                image->comps[compno].h, image->comps[compno].prec,
+                image->comps[compno].sgnd == 1 ? "signed" : "unsigned");
 
         w = (int)image->comps[compno].w;
         h = (int)image->comps[compno].h;
 
-        if(image->comps[compno].prec <= 8)
-        {
-            if(image->comps[compno].sgnd == 1)
-            {
+        if (image->comps[compno].prec <= 8) {
+            if (image->comps[compno].sgnd == 1) {
                 mask = (1 << image->comps[compno].prec) - 1;
                 ptr = image->comps[compno].data;
                 for (line = 0; line < h; line++) {
-                    for(row = 0; row < w; row++)       {
+                    for (row = 0; row < w; row++)    {
                         curr = *ptr;
-                        if(curr > 127) curr = 127; else if(curr < -128) curr = -128;
-                        uc = (unsigned char) (curr & mask);
+                        if (curr > 127) {
+                            curr = 127;
+                        } else if (curr < -128) {
+                            curr = -128;
+                        }
+                        uc = (unsigned char)(curr & mask);
                         res = fwrite(&uc, 1, 1, rawFile);
-                        if( res < 1 ) {
+                        if (res < 1) {
                             fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
                             goto fin;
                         }
                         ptr++;
                     }
                 }
-            }
-            else if(image->comps[compno].sgnd == 0)
-            {
+            } else if (image->comps[compno].sgnd == 0) {
                 mask = (1 << image->comps[compno].prec) - 1;
                 ptr = image->comps[compno].data;
                 for (line = 0; line < h; line++) {
-                    for(row = 0; row < w; row++)       {
+                    for (row = 0; row < w; row++)    {
                         curr = *ptr;
-                        if(curr > 255) curr = 255; else if(curr < 0) curr = 0;
-                        uc = (unsigned char) (curr & mask);
+                        if (curr > 255) {
+                            curr = 255;
+                        } else if (curr < 0) {
+                            curr = 0;
+                        }
+                        uc = (unsigned char)(curr & mask);
                         res = fwrite(&uc, 1, 1, rawFile);
-                        if( res < 1 ) {
+                        if (res < 1) {
                             fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
                             goto fin;
                         }
@@ -2194,40 +2397,49 @@ static int imagetoraw_common(opj_image_t * image, const char *outfile, OPJ_BOOL
                     }
                 }
             }
-        }
-        else if(image->comps[compno].prec <= 16)
-        {
-            if(image->comps[compno].sgnd == 1)
-            {
-                union { signed short val; signed char vals[2]; } uc16;
+        } else if (image->comps[compno].prec <= 16) {
+            if (image->comps[compno].sgnd == 1) {
+                union {
+                    signed short val;
+                    signed char vals[2];
+                } uc16;
                 mask = (1 << image->comps[compno].prec) - 1;
                 ptr = image->comps[compno].data;
                 for (line = 0; line < h; line++) {
-                    for(row = 0; row < w; row++)       {
+                    for (row = 0; row < w; row++)    {
                         curr = *ptr;
-                        if(curr > 32767 ) curr = 32767; else if( curr < -32768) curr = -32768;
+                        if (curr > 32767) {
+                            curr = 32767;
+                        } else if (curr < -32768) {
+                            curr = -32768;
+                        }
                         uc16.val = (signed short)(curr & mask);
                         res = fwrite(uc16.vals, 1, 2, rawFile);
-                        if( res < 2 ) {
+                        if (res < 2) {
                             fprintf(stderr, "failed to write 2 byte for %s\n", outfile);
                             goto fin;
                         }
                         ptr++;
                     }
                 }
-            }
-            else if(image->comps[compno].sgnd == 0)
-            {
-                union { unsigned short val; unsigned char vals[2]; } uc16;
+            } else if (image->comps[compno].sgnd == 0) {
+                union {
+                    unsigned short val;
+                    unsigned char vals[2];
+                } uc16;
                 mask = (1 << image->comps[compno].prec) - 1;
                 ptr = image->comps[compno].data;
                 for (line = 0; line < h; line++) {
-                    for(row = 0; row < w; row++)       {
+                    for (row = 0; row < w; row++)    {
                         curr = *ptr;
-                        if(curr > 65535 ) curr = 65535; else if( curr < 0) curr = 0;
+                        if (curr > 65535) {
+                            curr = 65535;
+                        } else if (curr < 0) {
+                            curr = 0;
+                        }
                         uc16.val = (unsigned short)(curr & mask);
                         res = fwrite(uc16.vals, 1, 2, rawFile);
-                        if( res < 2 ) {
+                        if (res < 2) {
                             fprintf(stderr, "failed to write 2 byte for %s\n", outfile);
                             goto fin;
                         }
@@ -2235,19 +2447,15 @@ static int imagetoraw_common(opj_image_t * image, const char *outfile, OPJ_BOOL
                     }
                 }
             }
-        }
-        else if (image->comps[compno].prec <= 32)
-        {
-            fprintf(stderr,"More than 16 bits per component no handled yet\n");
+        } else if (image->comps[compno].prec <= 32) {
+            fprintf(stderr, "More than 16 bits per component no handled yet\n");
             goto fin;
-        }
-        else
-        {
-            fprintf(stderr,"Error: invalid precision: %d\n", image->comps[compno].prec);
+        } else {
+            fprintf(stderr, "Error: invalid precision: %d\n", image->comps[compno].prec);
             goto fin;
         }
     }
-  fails = 0;
+    fails = 0;
 fin:
     fclose(rawFile);
     return fails;
index ae83077caafce06d872fb498c766423c88fe77d6..0bc9c9f352f2bf906c955a9986cff57c865117e9 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * Copyright (c) 2006-2007, Parvatha Elangovan
 #include "convert.h"
 
 typedef struct {
-       OPJ_UINT16 bfType;      /* 'BM' for Bitmap (19776) */
-       OPJ_UINT32 bfSize;      /* Size of the file        */
-       OPJ_UINT16 bfReserved1; /* Reserved : 0            */
-       OPJ_UINT16 bfReserved2; /* Reserved : 0            */
-       OPJ_UINT32 bfOffBits;   /* Offset                  */
+    OPJ_UINT16 bfType;      /* 'BM' for Bitmap (19776) */
+    OPJ_UINT32 bfSize;      /* Size of the file        */
+    OPJ_UINT16 bfReserved1; /* Reserved : 0            */
+    OPJ_UINT16 bfReserved2; /* Reserved : 0            */
+    OPJ_UINT32 bfOffBits;   /* Offset                  */
 } OPJ_BITMAPFILEHEADER;
 
 typedef struct {
-       OPJ_UINT32 biSize;             /* Size of the structure in bytes */
-       OPJ_UINT32 biWidth;            /* Width of the image in pixels */
-       OPJ_UINT32 biHeight;           /* Heigth of the image in pixels */
-       OPJ_UINT16 biPlanes;           /* 1 */
-       OPJ_UINT16 biBitCount;         /* Number of color bits by pixels */
-       OPJ_UINT32 biCompression;      /* Type of encoding 0: none 1: RLE8 2: RLE4 */
-       OPJ_UINT32 biSizeImage;        /* Size of the image in bytes */
-       OPJ_UINT32 biXpelsPerMeter;    /* Horizontal (X) resolution in pixels/meter */
-       OPJ_UINT32 biYpelsPerMeter;    /* Vertical (Y) resolution in pixels/meter */
-       OPJ_UINT32 biClrUsed;          /* Number of color used in the image (0: ALL) */
-       OPJ_UINT32 biClrImportant;     /* Number of important color (0: ALL) */
-       OPJ_UINT32 biRedMask;          /* Red channel bit mask */
-       OPJ_UINT32 biGreenMask;        /* Green channel bit mask */
-       OPJ_UINT32 biBlueMask;         /* Blue channel bit mask */
-       OPJ_UINT32 biAlphaMask;        /* Alpha channel bit mask */
-       OPJ_UINT32 biColorSpaceType;   /* Color space type */
-       OPJ_UINT8  biColorSpaceEP[36]; /* Color space end points */
-       OPJ_UINT32 biRedGamma;         /* Red channel gamma */
-       OPJ_UINT32 biGreenGamma;       /* Green channel gamma */
-       OPJ_UINT32 biBlueGamma;        /* Blue channel gamma */
-       OPJ_UINT32 biIntent;           /* Intent */
-       OPJ_UINT32 biIccProfileData;   /* ICC profile data */
-       OPJ_UINT32 biIccProfileSize;   /* ICC profile size */
-       OPJ_UINT32 biReserved;         /* Reserved */
+    OPJ_UINT32 biSize;             /* Size of the structure in bytes */
+    OPJ_UINT32 biWidth;            /* Width of the image in pixels */
+    OPJ_UINT32 biHeight;           /* Heigth of the image in pixels */
+    OPJ_UINT16 biPlanes;           /* 1 */
+    OPJ_UINT16 biBitCount;         /* Number of color bits by pixels */
+    OPJ_UINT32 biCompression;      /* Type of encoding 0: none 1: RLE8 2: RLE4 */
+    OPJ_UINT32 biSizeImage;        /* Size of the image in bytes */
+    OPJ_UINT32 biXpelsPerMeter;    /* Horizontal (X) resolution in pixels/meter */
+    OPJ_UINT32 biYpelsPerMeter;    /* Vertical (Y) resolution in pixels/meter */
+    OPJ_UINT32 biClrUsed;          /* Number of color used in the image (0: ALL) */
+    OPJ_UINT32 biClrImportant;     /* Number of important color (0: ALL) */
+    OPJ_UINT32 biRedMask;          /* Red channel bit mask */
+    OPJ_UINT32 biGreenMask;        /* Green channel bit mask */
+    OPJ_UINT32 biBlueMask;         /* Blue channel bit mask */
+    OPJ_UINT32 biAlphaMask;        /* Alpha channel bit mask */
+    OPJ_UINT32 biColorSpaceType;   /* Color space type */
+    OPJ_UINT8  biColorSpaceEP[36]; /* Color space end points */
+    OPJ_UINT32 biRedGamma;         /* Red channel gamma */
+    OPJ_UINT32 biGreenGamma;       /* Green channel gamma */
+    OPJ_UINT32 biBlueGamma;        /* Blue channel gamma */
+    OPJ_UINT32 biIntent;           /* Intent */
+    OPJ_UINT32 biIccProfileData;   /* ICC profile data */
+    OPJ_UINT32 biIccProfileSize;   /* ICC profile size */
+    OPJ_UINT32 biReserved;         /* Reserved */
 } OPJ_BITMAPINFOHEADER;
 
 static void opj_applyLUT8u_8u32s_C1R(
-       OPJ_UINT8 const* pSrc, OPJ_INT32 srcStride,
-       OPJ_INT32* pDst, OPJ_INT32 dstStride,
-       OPJ_UINT8 const* pLUT,
-       OPJ_UINT32 width, OPJ_UINT32 height)
+    OPJ_UINT8 const* pSrc, OPJ_INT32 srcStride,
+    OPJ_INT32* pDst, OPJ_INT32 dstStride,
+    OPJ_UINT8 const* pLUT,
+    OPJ_UINT32 width, OPJ_UINT32 height)
 {
-       OPJ_UINT32 y;
-       
-       for (y = height; y != 0U; --y) {
-               OPJ_UINT32 x;
-               
-               for(x = 0; x < width; x++)
-               {
-                       pDst[x] = (OPJ_INT32)pLUT[pSrc[x]];
-               }
-               pSrc += srcStride;
-               pDst += dstStride;
-       }
+    OPJ_UINT32 y;
+
+    for (y = height; y != 0U; --y) {
+        OPJ_UINT32 x;
+
+        for (x = 0; x < width; x++) {
+            pDst[x] = (OPJ_INT32)pLUT[pSrc[x]];
+        }
+        pSrc += srcStride;
+        pDst += dstStride;
+    }
 }
 
 static void opj_applyLUT8u_8u32s_C1P3R(
-       OPJ_UINT8 const* pSrc, OPJ_INT32 srcStride,
-       OPJ_INT32* const* pDst, OPJ_INT32 const* pDstStride,
-       OPJ_UINT8 const* const* pLUT,
-       OPJ_UINT32 width, OPJ_UINT32 height)
+    OPJ_UINT8 const* pSrc, OPJ_INT32 srcStride,
+    OPJ_INT32* const* pDst, OPJ_INT32 const* pDstStride,
+    OPJ_UINT8 const* const* pLUT,
+    OPJ_UINT32 width, OPJ_UINT32 height)
 {
-       OPJ_UINT32 y;
-       OPJ_INT32* pR = pDst[0];
-       OPJ_INT32* pG = pDst[1];
-       OPJ_INT32* pB = pDst[2];
-       OPJ_UINT8 const* pLUT_R = pLUT[0];
-       OPJ_UINT8 const* pLUT_G = pLUT[1];
-       OPJ_UINT8 const* pLUT_B = pLUT[2];
-       
-       for (y = height; y != 0U; --y) {
-               OPJ_UINT32 x;
-               
-               for(x = 0; x < width; x++)
-               {
-                       OPJ_UINT8 idx = pSrc[x];
-                       pR[x] = (OPJ_INT32)pLUT_R[idx];
-                       pG[x] = (OPJ_INT32)pLUT_G[idx];
-                       pB[x] = (OPJ_INT32)pLUT_B[idx];
-               }
-               pSrc += srcStride;
-               pR += pDstStride[0];
-               pG += pDstStride[1];
-               pB += pDstStride[2];
-       }
+    OPJ_UINT32 y;
+    OPJ_INT32* pR = pDst[0];
+    OPJ_INT32* pG = pDst[1];
+    OPJ_INT32* pB = pDst[2];
+    OPJ_UINT8 const* pLUT_R = pLUT[0];
+    OPJ_UINT8 const* pLUT_G = pLUT[1];
+    OPJ_UINT8 const* pLUT_B = pLUT[2];
+
+    for (y = height; y != 0U; --y) {
+        OPJ_UINT32 x;
+
+        for (x = 0; x < width; x++) {
+            OPJ_UINT8 idx = pSrc[x];
+            pR[x] = (OPJ_INT32)pLUT_R[idx];
+            pG[x] = (OPJ_INT32)pLUT_G[idx];
+            pB[x] = (OPJ_INT32)pLUT_B[idx];
+        }
+        pSrc += srcStride;
+        pR += pDstStride[0];
+        pG += pDstStride[1];
+        pB += pDstStride[2];
+    }
 }
 
-static void bmp24toimage(const OPJ_UINT8* pData, OPJ_UINT32 stride, opj_image_t* image)
+static void bmp24toimage(const OPJ_UINT8* pData, OPJ_UINT32 stride,
+                         opj_image_t* image)
 {
-       int index;
-       OPJ_UINT32 width, height;
-       OPJ_UINT32 x, y;
-       const OPJ_UINT8 *pSrc = NULL;
-
-       width  = image->comps[0].w;
-       height = image->comps[0].h;
-       
-       index = 0;
-       pSrc = pData + (height - 1U) * stride;
-       for(y = 0; y < height; y++)
-       {
-               for(x = 0; x < width; x++)
-               {
-                       image->comps[0].data[index] = (OPJ_INT32)pSrc[3*x+2];   /* R */
-                       image->comps[1].data[index] = (OPJ_INT32)pSrc[3*x+1];   /* G */
-                       image->comps[2].data[index] = (OPJ_INT32)pSrc[3*x+0];   /* B */
-                       index++;
-               }
-               pSrc -= stride;
-       }
+    int index;
+    OPJ_UINT32 width, height;
+    OPJ_UINT32 x, y;
+    const OPJ_UINT8 *pSrc = NULL;
+
+    width  = image->comps[0].w;
+    height = image->comps[0].h;
+
+    index = 0;
+    pSrc = pData + (height - 1U) * stride;
+    for (y = 0; y < height; y++) {
+        for (x = 0; x < width; x++) {
+            image->comps[0].data[index] = (OPJ_INT32)pSrc[3 * x + 2]; /* R */
+            image->comps[1].data[index] = (OPJ_INT32)pSrc[3 * x + 1]; /* G */
+            image->comps[2].data[index] = (OPJ_INT32)pSrc[3 * x + 0]; /* B */
+            index++;
+        }
+        pSrc -= stride;
+    }
 }
 
-static void bmp_mask_get_shift_and_prec(OPJ_UINT32 mask, OPJ_UINT32* shift, OPJ_UINT32* prec)
+static void bmp_mask_get_shift_and_prec(OPJ_UINT32 mask, OPJ_UINT32* shift,
+                                        OPJ_UINT32* prec)
 {
-       OPJ_UINT32 l_shift, l_prec;
-       
-       l_shift = l_prec = 0U;
-       
-       if (mask != 0U) {
-               while ((mask & 1U) == 0U) {
-                       mask >>= 1;
-                       l_shift++;
-               }
-               while (mask & 1U) {
-                       mask >>= 1;
-                       l_prec++;
-               }
-       }
-       *shift = l_shift; *prec = l_prec;
+    OPJ_UINT32 l_shift, l_prec;
+
+    l_shift = l_prec = 0U;
+
+    if (mask != 0U) {
+        while ((mask & 1U) == 0U) {
+            mask >>= 1;
+            l_shift++;
+        }
+        while (mask & 1U) {
+            mask >>= 1;
+            l_prec++;
+        }
+    }
+    *shift = l_shift;
+    *prec = l_prec;
 }
 
-static void bmpmask32toimage(const OPJ_UINT8* pData, OPJ_UINT32 stride, opj_image_t* image, OPJ_UINT32 redMask, OPJ_UINT32 greenMask, OPJ_UINT32 blueMask, OPJ_UINT32 alphaMask)
+static void bmpmask32toimage(const OPJ_UINT8* pData, OPJ_UINT32 stride,
+                             opj_image_t* image, OPJ_UINT32 redMask, OPJ_UINT32 greenMask,
+                             OPJ_UINT32 blueMask, OPJ_UINT32 alphaMask)
 {
-       int index;
-       OPJ_UINT32 width, height;
-       OPJ_UINT32 x, y;
-       const OPJ_UINT8 *pSrc = NULL;
-       OPJ_BOOL hasAlpha;
-       OPJ_UINT32 redShift,   redPrec;
-       OPJ_UINT32 greenShift, greenPrec;
-       OPJ_UINT32 blueShift,  bluePrec;
-       OPJ_UINT32 alphaShift, alphaPrec;
-       
-       width  = image->comps[0].w;
-       height = image->comps[0].h;
-       
-       hasAlpha = image->numcomps > 3U;
-       
-       bmp_mask_get_shift_and_prec(redMask,   &redShift,   &redPrec);
-       bmp_mask_get_shift_and_prec(greenMask, &greenShift, &greenPrec);
-       bmp_mask_get_shift_and_prec(blueMask,  &blueShift,  &bluePrec);
-       bmp_mask_get_shift_and_prec(alphaMask, &alphaShift, &alphaPrec);
-       
-       image->comps[0].bpp = redPrec;
-       image->comps[0].prec = redPrec;
-       image->comps[1].bpp = greenPrec;
-       image->comps[1].prec = greenPrec;
-       image->comps[2].bpp = bluePrec;
-       image->comps[2].prec = bluePrec;
-       if (hasAlpha) {
-               image->comps[3].bpp = alphaPrec;
-               image->comps[3].prec = alphaPrec;
-       }
-       
-       index = 0;
-       pSrc = pData + (height - 1U) * stride;
-       for(y = 0; y < height; y++)
-       {
-               for(x = 0; x < width; x++)
-               {
-                       OPJ_UINT32 value = 0U;
-                       
-                       value |= ((OPJ_UINT32)pSrc[4*x+0]) <<  0;
-                       value |= ((OPJ_UINT32)pSrc[4*x+1]) <<  8;
-                       value |= ((OPJ_UINT32)pSrc[4*x+2]) << 16;
-                       value |= ((OPJ_UINT32)pSrc[4*x+3]) << 24;
-                       
-                       image->comps[0].data[index] = (OPJ_INT32)((value & redMask)   >> redShift);   /* R */
-                       image->comps[1].data[index] = (OPJ_INT32)((value & greenMask) >> greenShift); /* G */
-                       image->comps[2].data[index] = (OPJ_INT32)((value & blueMask)  >> blueShift);  /* B */
-                       if (hasAlpha) {
-                               image->comps[3].data[index] = (OPJ_INT32)((value & alphaMask)  >> alphaShift);  /* A */
-                       }
-                       index++;
-               }
-               pSrc -= stride;
-       }
+    int index;
+    OPJ_UINT32 width, height;
+    OPJ_UINT32 x, y;
+    const OPJ_UINT8 *pSrc = NULL;
+    OPJ_BOOL hasAlpha;
+    OPJ_UINT32 redShift,   redPrec;
+    OPJ_UINT32 greenShift, greenPrec;
+    OPJ_UINT32 blueShift,  bluePrec;
+    OPJ_UINT32 alphaShift, alphaPrec;
+
+    width  = image->comps[0].w;
+    height = image->comps[0].h;
+
+    hasAlpha = image->numcomps > 3U;
+
+    bmp_mask_get_shift_and_prec(redMask,   &redShift,   &redPrec);
+    bmp_mask_get_shift_and_prec(greenMask, &greenShift, &greenPrec);
+    bmp_mask_get_shift_and_prec(blueMask,  &blueShift,  &bluePrec);
+    bmp_mask_get_shift_and_prec(alphaMask, &alphaShift, &alphaPrec);
+
+    image->comps[0].bpp = redPrec;
+    image->comps[0].prec = redPrec;
+    image->comps[1].bpp = greenPrec;
+    image->comps[1].prec = greenPrec;
+    image->comps[2].bpp = bluePrec;
+    image->comps[2].prec = bluePrec;
+    if (hasAlpha) {
+        image->comps[3].bpp = alphaPrec;
+        image->comps[3].prec = alphaPrec;
+    }
+
+    index = 0;
+    pSrc = pData + (height - 1U) * stride;
+    for (y = 0; y < height; y++) {
+        for (x = 0; x < width; x++) {
+            OPJ_UINT32 value = 0U;
+
+            value |= ((OPJ_UINT32)pSrc[4 * x + 0]) <<  0;
+            value |= ((OPJ_UINT32)pSrc[4 * x + 1]) <<  8;
+            value |= ((OPJ_UINT32)pSrc[4 * x + 2]) << 16;
+            value |= ((OPJ_UINT32)pSrc[4 * x + 3]) << 24;
+
+            image->comps[0].data[index] = (OPJ_INT32)((value & redMask)   >>
+                                          redShift);   /* R */
+            image->comps[1].data[index] = (OPJ_INT32)((value & greenMask) >>
+                                          greenShift); /* G */
+            image->comps[2].data[index] = (OPJ_INT32)((value & blueMask)  >>
+                                          blueShift);  /* B */
+            if (hasAlpha) {
+                image->comps[3].data[index] = (OPJ_INT32)((value & alphaMask)  >>
+                                              alphaShift);  /* A */
+            }
+            index++;
+        }
+        pSrc -= stride;
+    }
 }
 
-static void bmpmask16toimage(const OPJ_UINT8* pData, OPJ_UINT32 stride, opj_image_t* image, OPJ_UINT32 redMask, OPJ_UINT32 greenMask, OPJ_UINT32 blueMask, OPJ_UINT32 alphaMask)
+static void bmpmask16toimage(const OPJ_UINT8* pData, OPJ_UINT32 stride,
+                             opj_image_t* image, OPJ_UINT32 redMask, OPJ_UINT32 greenMask,
+                             OPJ_UINT32 blueMask, OPJ_UINT32 alphaMask)
 {
-       int index;
-       OPJ_UINT32 width, height;
-       OPJ_UINT32 x, y;
-       const OPJ_UINT8 *pSrc = NULL;
-       OPJ_BOOL hasAlpha;
-       OPJ_UINT32 redShift,   redPrec;
-       OPJ_UINT32 greenShift, greenPrec;
-       OPJ_UINT32 blueShift,  bluePrec;
-       OPJ_UINT32 alphaShift, alphaPrec;
-       
-       width  = image->comps[0].w;
-       height = image->comps[0].h;
-       
-       hasAlpha = image->numcomps > 3U;
-       
-       bmp_mask_get_shift_and_prec(redMask,   &redShift,   &redPrec);
-       bmp_mask_get_shift_and_prec(greenMask, &greenShift, &greenPrec);
-       bmp_mask_get_shift_and_prec(blueMask,  &blueShift,  &bluePrec);
-       bmp_mask_get_shift_and_prec(alphaMask, &alphaShift, &alphaPrec);
-       
-       image->comps[0].bpp = redPrec;
-       image->comps[0].prec = redPrec;
-       image->comps[1].bpp = greenPrec;
-       image->comps[1].prec = greenPrec;
-       image->comps[2].bpp = bluePrec;
-       image->comps[2].prec = bluePrec;
-       if (hasAlpha) {
-               image->comps[3].bpp = alphaPrec;
-               image->comps[3].prec = alphaPrec;
-       }
-       
-       index = 0;
-       pSrc = pData + (height - 1U) * stride;
-       for(y = 0; y < height; y++)
-       {
-               for(x = 0; x < width; x++)
-               {
-                       OPJ_UINT32 value = 0U;
-                       
-                       value |= ((OPJ_UINT32)pSrc[2*x+0]) <<  0;
-                       value |= ((OPJ_UINT32)pSrc[2*x+1]) <<  8;
-                       
-                       image->comps[0].data[index] = (OPJ_INT32)((value & redMask)   >> redShift);   /* R */
-                       image->comps[1].data[index] = (OPJ_INT32)((value & greenMask) >> greenShift); /* G */
-                       image->comps[2].data[index] = (OPJ_INT32)((value & blueMask)  >> blueShift);  /* B */
-                       if (hasAlpha) {
-                               image->comps[3].data[index] = (OPJ_INT32)((value & alphaMask)  >> alphaShift);  /* A */
-                       }
-                       index++;
-               }
-               pSrc -= stride;
-       }
+    int index;
+    OPJ_UINT32 width, height;
+    OPJ_UINT32 x, y;
+    const OPJ_UINT8 *pSrc = NULL;
+    OPJ_BOOL hasAlpha;
+    OPJ_UINT32 redShift,   redPrec;
+    OPJ_UINT32 greenShift, greenPrec;
+    OPJ_UINT32 blueShift,  bluePrec;
+    OPJ_UINT32 alphaShift, alphaPrec;
+
+    width  = image->comps[0].w;
+    height = image->comps[0].h;
+
+    hasAlpha = image->numcomps > 3U;
+
+    bmp_mask_get_shift_and_prec(redMask,   &redShift,   &redPrec);
+    bmp_mask_get_shift_and_prec(greenMask, &greenShift, &greenPrec);
+    bmp_mask_get_shift_and_prec(blueMask,  &blueShift,  &bluePrec);
+    bmp_mask_get_shift_and_prec(alphaMask, &alphaShift, &alphaPrec);
+
+    image->comps[0].bpp = redPrec;
+    image->comps[0].prec = redPrec;
+    image->comps[1].bpp = greenPrec;
+    image->comps[1].prec = greenPrec;
+    image->comps[2].bpp = bluePrec;
+    image->comps[2].prec = bluePrec;
+    if (hasAlpha) {
+        image->comps[3].bpp = alphaPrec;
+        image->comps[3].prec = alphaPrec;
+    }
+
+    index = 0;
+    pSrc = pData + (height - 1U) * stride;
+    for (y = 0; y < height; y++) {
+        for (x = 0; x < width; x++) {
+            OPJ_UINT32 value = 0U;
+
+            value |= ((OPJ_UINT32)pSrc[2 * x + 0]) <<  0;
+            value |= ((OPJ_UINT32)pSrc[2 * x + 1]) <<  8;
+
+            image->comps[0].data[index] = (OPJ_INT32)((value & redMask)   >>
+                                          redShift);   /* R */
+            image->comps[1].data[index] = (OPJ_INT32)((value & greenMask) >>
+                                          greenShift); /* G */
+            image->comps[2].data[index] = (OPJ_INT32)((value & blueMask)  >>
+                                          blueShift);  /* B */
+            if (hasAlpha) {
+                image->comps[3].data[index] = (OPJ_INT32)((value & alphaMask)  >>
+                                              alphaShift);  /* A */
+            }
+            index++;
+        }
+        pSrc -= stride;
+    }
 }
 
-static opj_image_t* bmp8toimage(const OPJ_UINT8* pData, OPJ_UINT32 stride, opj_image_t* image, OPJ_UINT8 const* const* pLUT)
+static opj_image_t* bmp8toimage(const OPJ_UINT8* pData, OPJ_UINT32 stride,
+                                opj_image_t* image, OPJ_UINT8 const* const* pLUT)
 {
-       OPJ_UINT32 width, height;
-       const OPJ_UINT8 *pSrc = NULL;
-       
-       width  = image->comps[0].w;
-       height = image->comps[0].h;
-       
-       pSrc = pData + (height - 1U) * stride;
-       if (image->numcomps == 1U) {
-               opj_applyLUT8u_8u32s_C1R(pSrc, -(OPJ_INT32)stride, image->comps[0].data, (OPJ_INT32)width, pLUT[0], width, height);
-       }
-       else {
-               OPJ_INT32* pDst[3];
-               OPJ_INT32  pDstStride[3];
-               
-               pDst[0] = image->comps[0].data; pDst[1] = image->comps[1].data; pDst[2] = image->comps[2].data;
-               pDstStride[0] = (OPJ_INT32)width; pDstStride[1] = (OPJ_INT32)width; pDstStride[2] = (OPJ_INT32)width;
-               opj_applyLUT8u_8u32s_C1P3R(pSrc, -(OPJ_INT32)stride, pDst, pDstStride, pLUT, width, height);
-       }
-       return image;
+    OPJ_UINT32 width, height;
+    const OPJ_UINT8 *pSrc = NULL;
+
+    width  = image->comps[0].w;
+    height = image->comps[0].h;
+
+    pSrc = pData + (height - 1U) * stride;
+    if (image->numcomps == 1U) {
+        opj_applyLUT8u_8u32s_C1R(pSrc, -(OPJ_INT32)stride, image->comps[0].data,
+                                 (OPJ_INT32)width, pLUT[0], width, height);
+    } else {
+        OPJ_INT32* pDst[3];
+        OPJ_INT32  pDstStride[3];
+
+        pDst[0] = image->comps[0].data;
+        pDst[1] = image->comps[1].data;
+        pDst[2] = image->comps[2].data;
+        pDstStride[0] = (OPJ_INT32)width;
+        pDstStride[1] = (OPJ_INT32)width;
+        pDstStride[2] = (OPJ_INT32)width;
+        opj_applyLUT8u_8u32s_C1P3R(pSrc, -(OPJ_INT32)stride, pDst, pDstStride, pLUT,
+                                   width, height);
+    }
+    return image;
 }
 
 static OPJ_BOOL bmp_read_file_header(FILE* IN, OPJ_BITMAPFILEHEADER* header)
 {
-       header->bfType  = (OPJ_UINT16)getc(IN);
-       header->bfType |= (OPJ_UINT16)((OPJ_UINT32)getc(IN) << 8);
-       
-       if (header->bfType != 19778) {
-               fprintf(stderr,"Error, not a BMP file!\n");
-               return OPJ_FALSE;
-       }
-       
-       /* FILE HEADER */
-       /* ------------- */
-       header->bfSize  = (OPJ_UINT32)getc(IN);
-       header->bfSize |= (OPJ_UINT32)getc(IN) << 8;
-       header->bfSize |= (OPJ_UINT32)getc(IN) << 16;
-       header->bfSize |= (OPJ_UINT32)getc(IN) << 24;
-       
-       header->bfReserved1  = (OPJ_UINT16)getc(IN);
-       header->bfReserved1 |= (OPJ_UINT16)((OPJ_UINT32)getc(IN) << 8);
-       
-       header->bfReserved2  = (OPJ_UINT16)getc(IN);
-       header->bfReserved2 |= (OPJ_UINT16)((OPJ_UINT32)getc(IN) << 8);
-       
-       header->bfOffBits  = (OPJ_UINT32)getc(IN);
-       header->bfOffBits |= (OPJ_UINT32)getc(IN) << 8;
-       header->bfOffBits |= (OPJ_UINT32)getc(IN) << 16;
-       header->bfOffBits |= (OPJ_UINT32)getc(IN) << 24;
-       return OPJ_TRUE;
+    header->bfType  = (OPJ_UINT16)getc(IN);
+    header->bfType |= (OPJ_UINT16)((OPJ_UINT32)getc(IN) << 8);
+
+    if (header->bfType != 19778) {
+        fprintf(stderr, "Error, not a BMP file!\n");
+        return OPJ_FALSE;
+    }
+
+    /* FILE HEADER */
+    /* ------------- */
+    header->bfSize  = (OPJ_UINT32)getc(IN);
+    header->bfSize |= (OPJ_UINT32)getc(IN) << 8;
+    header->bfSize |= (OPJ_UINT32)getc(IN) << 16;
+    header->bfSize |= (OPJ_UINT32)getc(IN) << 24;
+
+    header->bfReserved1  = (OPJ_UINT16)getc(IN);
+    header->bfReserved1 |= (OPJ_UINT16)((OPJ_UINT32)getc(IN) << 8);
+
+    header->bfReserved2  = (OPJ_UINT16)getc(IN);
+    header->bfReserved2 |= (OPJ_UINT16)((OPJ_UINT32)getc(IN) << 8);
+
+    header->bfOffBits  = (OPJ_UINT32)getc(IN);
+    header->bfOffBits |= (OPJ_UINT32)getc(IN) << 8;
+    header->bfOffBits |= (OPJ_UINT32)getc(IN) << 16;
+    header->bfOffBits |= (OPJ_UINT32)getc(IN) << 24;
+    return OPJ_TRUE;
 }
 static OPJ_BOOL bmp_read_info_header(FILE* IN, OPJ_BITMAPINFOHEADER* header)
 {
-       memset(header, 0, sizeof(*header));
-       /* INFO HEADER */
-       /* ------------- */
-       header->biSize  = (OPJ_UINT32)getc(IN);
-       header->biSize |= (OPJ_UINT32)getc(IN) << 8;
-       header->biSize |= (OPJ_UINT32)getc(IN) << 16;
-       header->biSize |= (OPJ_UINT32)getc(IN) << 24;
-       
-       switch (header->biSize) {
-               case 12U:  /* BITMAPCOREHEADER */
-               case 40U:  /* BITMAPINFOHEADER */
-               case 52U:  /* BITMAPV2INFOHEADER */
-               case 56U:  /* BITMAPV3INFOHEADER */
-               case 108U: /* BITMAPV4HEADER */
-               case 124U: /* BITMAPV5HEADER */
-                       break;
-  default:
-                       fprintf(stderr,"Error, unknown BMP header size %d\n", header->biSize);
-                       return OPJ_FALSE;
-       }
-       
-       header->biWidth  = (OPJ_UINT32)getc(IN);
-       header->biWidth |= (OPJ_UINT32)getc(IN) << 8;
-       header->biWidth |= (OPJ_UINT32)getc(IN) << 16;
-       header->biWidth |= (OPJ_UINT32)getc(IN) << 24;
-       
-       header->biHeight  = (OPJ_UINT32)getc(IN);
-       header->biHeight |= (OPJ_UINT32)getc(IN) << 8;
-       header->biHeight |= (OPJ_UINT32)getc(IN) << 16;
-       header->biHeight |= (OPJ_UINT32)getc(IN) << 24;
-       
-       header->biPlanes  = (OPJ_UINT16)getc(IN);
-       header->biPlanes |= (OPJ_UINT16)((OPJ_UINT32)getc(IN) << 8);
-       
-       header->biBitCount  = (OPJ_UINT16)getc(IN);
-       header->biBitCount |= (OPJ_UINT16)((OPJ_UINT32)getc(IN) << 8);
-       
-       if(header->biSize >= 40U) {
-               header->biCompression  = (OPJ_UINT32)getc(IN);
-               header->biCompression |= (OPJ_UINT32)getc(IN) << 8;
-               header->biCompression |= (OPJ_UINT32)getc(IN) << 16;
-               header->biCompression |= (OPJ_UINT32)getc(IN) << 24;
-               
-               header->biSizeImage  = (OPJ_UINT32)getc(IN);
-               header->biSizeImage |= (OPJ_UINT32)getc(IN) << 8;
-               header->biSizeImage |= (OPJ_UINT32)getc(IN) << 16;
-               header->biSizeImage |= (OPJ_UINT32)getc(IN) << 24;
-               
-               header->biXpelsPerMeter  = (OPJ_UINT32)getc(IN);
-               header->biXpelsPerMeter |= (OPJ_UINT32)getc(IN) << 8;
-               header->biXpelsPerMeter |= (OPJ_UINT32)getc(IN) << 16;
-               header->biXpelsPerMeter |= (OPJ_UINT32)getc(IN) << 24;
-               
-               header->biYpelsPerMeter  = (OPJ_UINT32)getc(IN);
-               header->biYpelsPerMeter |= (OPJ_UINT32)getc(IN) << 8;
-               header->biYpelsPerMeter |= (OPJ_UINT32)getc(IN) << 16;
-               header->biYpelsPerMeter |= (OPJ_UINT32)getc(IN) << 24;
-               
-               header->biClrUsed  = (OPJ_UINT32)getc(IN);
-               header->biClrUsed |= (OPJ_UINT32)getc(IN) << 8;
-               header->biClrUsed |= (OPJ_UINT32)getc(IN) << 16;
-               header->biClrUsed |= (OPJ_UINT32)getc(IN) << 24;
-               
-               header->biClrImportant  = (OPJ_UINT32)getc(IN);
-               header->biClrImportant |= (OPJ_UINT32)getc(IN) << 8;
-               header->biClrImportant |= (OPJ_UINT32)getc(IN) << 16;
-               header->biClrImportant |= (OPJ_UINT32)getc(IN) << 24;
-       }
-       
-       if(header->biSize >= 56U) {
-               header->biRedMask  = (OPJ_UINT32)getc(IN);
-               header->biRedMask |= (OPJ_UINT32)getc(IN) << 8;
-               header->biRedMask |= (OPJ_UINT32)getc(IN) << 16;
-               header->biRedMask |= (OPJ_UINT32)getc(IN) << 24;
-               
-               header->biGreenMask  = (OPJ_UINT32)getc(IN);
-               header->biGreenMask |= (OPJ_UINT32)getc(IN) << 8;
-               header->biGreenMask |= (OPJ_UINT32)getc(IN) << 16;
-               header->biGreenMask |= (OPJ_UINT32)getc(IN) << 24;
-               
-               header->biBlueMask  = (OPJ_UINT32)getc(IN);
-               header->biBlueMask |= (OPJ_UINT32)getc(IN) << 8;
-               header->biBlueMask |= (OPJ_UINT32)getc(IN) << 16;
-               header->biBlueMask |= (OPJ_UINT32)getc(IN) << 24;
-               
-               header->biAlphaMask  = (OPJ_UINT32)getc(IN);
-               header->biAlphaMask |= (OPJ_UINT32)getc(IN) << 8;
-               header->biAlphaMask |= (OPJ_UINT32)getc(IN) << 16;
-               header->biAlphaMask |= (OPJ_UINT32)getc(IN) << 24;
-       }
-       
-       if(header->biSize >= 108U) {
-               header->biColorSpaceType  = (OPJ_UINT32)getc(IN);
-               header->biColorSpaceType |= (OPJ_UINT32)getc(IN) << 8;
-               header->biColorSpaceType |= (OPJ_UINT32)getc(IN) << 16;
-               header->biColorSpaceType |= (OPJ_UINT32)getc(IN) << 24;
-               
-               if (fread(&(header->biColorSpaceEP), 1U, sizeof(header->biColorSpaceEP), IN) != sizeof(header->biColorSpaceEP)) {
-                       fprintf(stderr,"Error, can't  read BMP header\n");
-                       return OPJ_FALSE;
-               }
-               
-               header->biRedGamma  = (OPJ_UINT32)getc(IN);
-               header->biRedGamma |= (OPJ_UINT32)getc(IN) << 8;
-               header->biRedGamma |= (OPJ_UINT32)getc(IN) << 16;
-               header->biRedGamma |= (OPJ_UINT32)getc(IN) << 24;
-               
-               header->biGreenGamma  = (OPJ_UINT32)getc(IN);
-               header->biGreenGamma |= (OPJ_UINT32)getc(IN) << 8;
-               header->biGreenGamma |= (OPJ_UINT32)getc(IN) << 16;
-               header->biGreenGamma |= (OPJ_UINT32)getc(IN) << 24;
-               
-               header->biBlueGamma  = (OPJ_UINT32)getc(IN);
-               header->biBlueGamma |= (OPJ_UINT32)getc(IN) << 8;
-               header->biBlueGamma |= (OPJ_UINT32)getc(IN) << 16;
-               header->biBlueGamma |= (OPJ_UINT32)getc(IN) << 24;
-       }
-       
-       if(header->biSize >= 124U) {
-               header->biIntent  = (OPJ_UINT32)getc(IN);
-               header->biIntent |= (OPJ_UINT32)getc(IN) << 8;
-               header->biIntent |= (OPJ_UINT32)getc(IN) << 16;
-               header->biIntent |= (OPJ_UINT32)getc(IN) << 24;
-               
-               header->biIccProfileData  = (OPJ_UINT32)getc(IN);
-               header->biIccProfileData |= (OPJ_UINT32)getc(IN) << 8;
-               header->biIccProfileData |= (OPJ_UINT32)getc(IN) << 16;
-               header->biIccProfileData |= (OPJ_UINT32)getc(IN) << 24;
-               
-               header->biIccProfileSize  = (OPJ_UINT32)getc(IN);
-               header->biIccProfileSize |= (OPJ_UINT32)getc(IN) << 8;
-               header->biIccProfileSize |= (OPJ_UINT32)getc(IN) << 16;
-               header->biIccProfileSize |= (OPJ_UINT32)getc(IN) << 24;
-               
-               header->biReserved  = (OPJ_UINT32)getc(IN);
-               header->biReserved |= (OPJ_UINT32)getc(IN) << 8;
-               header->biReserved |= (OPJ_UINT32)getc(IN) << 16;
-               header->biReserved |= (OPJ_UINT32)getc(IN) << 24;
-       }
-       return OPJ_TRUE;
+    memset(header, 0, sizeof(*header));
+    /* INFO HEADER */
+    /* ------------- */
+    header->biSize  = (OPJ_UINT32)getc(IN);
+    header->biSize |= (OPJ_UINT32)getc(IN) << 8;
+    header->biSize |= (OPJ_UINT32)getc(IN) << 16;
+    header->biSize |= (OPJ_UINT32)getc(IN) << 24;
+
+    switch (header->biSize) {
+    case 12U:  /* BITMAPCOREHEADER */
+    case 40U:  /* BITMAPINFOHEADER */
+    case 52U:  /* BITMAPV2INFOHEADER */
+    case 56U:  /* BITMAPV3INFOHEADER */
+    case 108U: /* BITMAPV4HEADER */
+    case 124U: /* BITMAPV5HEADER */
+        break;
+    default:
+        fprintf(stderr, "Error, unknown BMP header size %d\n", header->biSize);
+        return OPJ_FALSE;
+    }
+
+    header->biWidth  = (OPJ_UINT32)getc(IN);
+    header->biWidth |= (OPJ_UINT32)getc(IN) << 8;
+    header->biWidth |= (OPJ_UINT32)getc(IN) << 16;
+    header->biWidth |= (OPJ_UINT32)getc(IN) << 24;
+
+    header->biHeight  = (OPJ_UINT32)getc(IN);
+    header->biHeight |= (OPJ_UINT32)getc(IN) << 8;
+    header->biHeight |= (OPJ_UINT32)getc(IN) << 16;
+    header->biHeight |= (OPJ_UINT32)getc(IN) << 24;
+
+    header->biPlanes  = (OPJ_UINT16)getc(IN);
+    header->biPlanes |= (OPJ_UINT16)((OPJ_UINT32)getc(IN) << 8);
+
+    header->biBitCount  = (OPJ_UINT16)getc(IN);
+    header->biBitCount |= (OPJ_UINT16)((OPJ_UINT32)getc(IN) << 8);
+
+    if (header->biSize >= 40U) {
+        header->biCompression  = (OPJ_UINT32)getc(IN);
+        header->biCompression |= (OPJ_UINT32)getc(IN) << 8;
+        header->biCompression |= (OPJ_UINT32)getc(IN) << 16;
+        header->biCompression |= (OPJ_UINT32)getc(IN) << 24;
+
+        header->biSizeImage  = (OPJ_UINT32)getc(IN);
+        header->biSizeImage |= (OPJ_UINT32)getc(IN) << 8;
+        header->biSizeImage |= (OPJ_UINT32)getc(IN) << 16;
+        header->biSizeImage |= (OPJ_UINT32)getc(IN) << 24;
+
+        header->biXpelsPerMeter  = (OPJ_UINT32)getc(IN);
+        header->biXpelsPerMeter |= (OPJ_UINT32)getc(IN) << 8;
+        header->biXpelsPerMeter |= (OPJ_UINT32)getc(IN) << 16;
+        header->biXpelsPerMeter |= (OPJ_UINT32)getc(IN) << 24;
+
+        header->biYpelsPerMeter  = (OPJ_UINT32)getc(IN);
+        header->biYpelsPerMeter |= (OPJ_UINT32)getc(IN) << 8;
+        header->biYpelsPerMeter |= (OPJ_UINT32)getc(IN) << 16;
+        header->biYpelsPerMeter |= (OPJ_UINT32)getc(IN) << 24;
+
+        header->biClrUsed  = (OPJ_UINT32)getc(IN);
+        header->biClrUsed |= (OPJ_UINT32)getc(IN) << 8;
+        header->biClrUsed |= (OPJ_UINT32)getc(IN) << 16;
+        header->biClrUsed |= (OPJ_UINT32)getc(IN) << 24;
+
+        header->biClrImportant  = (OPJ_UINT32)getc(IN);
+        header->biClrImportant |= (OPJ_UINT32)getc(IN) << 8;
+        header->biClrImportant |= (OPJ_UINT32)getc(IN) << 16;
+        header->biClrImportant |= (OPJ_UINT32)getc(IN) << 24;
+    }
+
+    if (header->biSize >= 56U) {
+        header->biRedMask  = (OPJ_UINT32)getc(IN);
+        header->biRedMask |= (OPJ_UINT32)getc(IN) << 8;
+        header->biRedMask |= (OPJ_UINT32)getc(IN) << 16;
+        header->biRedMask |= (OPJ_UINT32)getc(IN) << 24;
+
+        header->biGreenMask  = (OPJ_UINT32)getc(IN);
+        header->biGreenMask |= (OPJ_UINT32)getc(IN) << 8;
+        header->biGreenMask |= (OPJ_UINT32)getc(IN) << 16;
+        header->biGreenMask |= (OPJ_UINT32)getc(IN) << 24;
+
+        header->biBlueMask  = (OPJ_UINT32)getc(IN);
+        header->biBlueMask |= (OPJ_UINT32)getc(IN) << 8;
+        header->biBlueMask |= (OPJ_UINT32)getc(IN) << 16;
+        header->biBlueMask |= (OPJ_UINT32)getc(IN) << 24;
+
+        header->biAlphaMask  = (OPJ_UINT32)getc(IN);
+        header->biAlphaMask |= (OPJ_UINT32)getc(IN) << 8;
+        header->biAlphaMask |= (OPJ_UINT32)getc(IN) << 16;
+        header->biAlphaMask |= (OPJ_UINT32)getc(IN) << 24;
+    }
+
+    if (header->biSize >= 108U) {
+        header->biColorSpaceType  = (OPJ_UINT32)getc(IN);
+        header->biColorSpaceType |= (OPJ_UINT32)getc(IN) << 8;
+        header->biColorSpaceType |= (OPJ_UINT32)getc(IN) << 16;
+        header->biColorSpaceType |= (OPJ_UINT32)getc(IN) << 24;
+
+        if (fread(&(header->biColorSpaceEP), 1U, sizeof(header->biColorSpaceEP),
+                  IN) != sizeof(header->biColorSpaceEP)) {
+            fprintf(stderr, "Error, can't  read BMP header\n");
+            return OPJ_FALSE;
+        }
+
+        header->biRedGamma  = (OPJ_UINT32)getc(IN);
+        header->biRedGamma |= (OPJ_UINT32)getc(IN) << 8;
+        header->biRedGamma |= (OPJ_UINT32)getc(IN) << 16;
+        header->biRedGamma |= (OPJ_UINT32)getc(IN) << 24;
+
+        header->biGreenGamma  = (OPJ_UINT32)getc(IN);
+        header->biGreenGamma |= (OPJ_UINT32)getc(IN) << 8;
+        header->biGreenGamma |= (OPJ_UINT32)getc(IN) << 16;
+        header->biGreenGamma |= (OPJ_UINT32)getc(IN) << 24;
+
+        header->biBlueGamma  = (OPJ_UINT32)getc(IN);
+        header->biBlueGamma |= (OPJ_UINT32)getc(IN) << 8;
+        header->biBlueGamma |= (OPJ_UINT32)getc(IN) << 16;
+        header->biBlueGamma |= (OPJ_UINT32)getc(IN) << 24;
+    }
+
+    if (header->biSize >= 124U) {
+        header->biIntent  = (OPJ_UINT32)getc(IN);
+        header->biIntent |= (OPJ_UINT32)getc(IN) << 8;
+        header->biIntent |= (OPJ_UINT32)getc(IN) << 16;
+        header->biIntent |= (OPJ_UINT32)getc(IN) << 24;
+
+        header->biIccProfileData  = (OPJ_UINT32)getc(IN);
+        header->biIccProfileData |= (OPJ_UINT32)getc(IN) << 8;
+        header->biIccProfileData |= (OPJ_UINT32)getc(IN) << 16;
+        header->biIccProfileData |= (OPJ_UINT32)getc(IN) << 24;
+
+        header->biIccProfileSize  = (OPJ_UINT32)getc(IN);
+        header->biIccProfileSize |= (OPJ_UINT32)getc(IN) << 8;
+        header->biIccProfileSize |= (OPJ_UINT32)getc(IN) << 16;
+        header->biIccProfileSize |= (OPJ_UINT32)getc(IN) << 24;
+
+        header->biReserved  = (OPJ_UINT32)getc(IN);
+        header->biReserved |= (OPJ_UINT32)getc(IN) << 8;
+        header->biReserved |= (OPJ_UINT32)getc(IN) << 16;
+        header->biReserved |= (OPJ_UINT32)getc(IN) << 24;
+    }
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL bmp_read_raw_data(FILE* IN, OPJ_UINT8* pData, OPJ_UINT32 stride, OPJ_UINT32 width, OPJ_UINT32 height)
+static OPJ_BOOL bmp_read_raw_data(FILE* IN, OPJ_UINT8* pData, OPJ_UINT32 stride,
+                                  OPJ_UINT32 width, OPJ_UINT32 height)
 {
-       OPJ_ARG_NOT_USED(width);
-       
-       if ( fread(pData, sizeof(OPJ_UINT8), stride * height, IN) != (stride * height) )
-       {
-               fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-               return OPJ_FALSE;
-       }
-       return OPJ_TRUE;
+    OPJ_ARG_NOT_USED(width);
+
+    if (fread(pData, sizeof(OPJ_UINT8), stride * height, IN) != (stride * height)) {
+        fprintf(stderr,
+                "\nError: fread return a number of element different from the expected.\n");
+        return OPJ_FALSE;
+    }
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL bmp_read_rle8_data(FILE* IN, OPJ_UINT8* pData, OPJ_UINT32 stride, OPJ_UINT32 width, OPJ_UINT32 height)
+static OPJ_BOOL bmp_read_rle8_data(FILE* IN, OPJ_UINT8* pData,
+                                   OPJ_UINT32 stride, OPJ_UINT32 width, OPJ_UINT32 height)
 {
-       OPJ_UINT32 x, y;
-       OPJ_UINT8 *pix;
-       const OPJ_UINT8 *beyond;
-       
-       beyond = pData + stride * height;
-       pix = pData;
-       
-       x = y = 0U;
-       while (y < height)
-       {
-               int c = getc(IN);
-               
-               if (c) {
-                       int j;
-                       OPJ_UINT8 c1 = (OPJ_UINT8)getc(IN);
-                       
-                       for (j = 0; (j < c) && (x < width) && ((OPJ_SIZE_T)pix < (OPJ_SIZE_T)beyond); j++, x++, pix++) {
-                               *pix = c1;
-                       }
-               }
-               else {
-                       c = getc(IN);
-                       if (c == 0x00) { /* EOL */
-                               x = 0;
-                               ++y;
-                               pix = pData + y * stride + x;
-                       }
-                       else if (c == 0x01) { /* EOP */
-                               break;
-                       }
-                       else if (c == 0x02) { /* MOVE by dxdy */
-                               c = getc(IN);
-                               x += (OPJ_UINT32)c;
-                               c = getc(IN);
-                               y += (OPJ_UINT32)c;
-                               pix = pData + y * stride + x;
-                       }
-                       else /* 03 .. 255 */
-                       {
-                               int j;
-                               for (j = 0; (j < c) && (x < width) && ((OPJ_SIZE_T)pix < (OPJ_SIZE_T)beyond); j++, x++, pix++)
-                               {
-                                       OPJ_UINT8 c1 = (OPJ_UINT8)getc(IN);
-                                       *pix = c1;
-                               }
-                               if ((OPJ_UINT32)c & 1U) { /* skip padding byte */
-                                       getc(IN);
-                               }
-                       }
-               }
-       }/* while() */
-       return OPJ_TRUE;
+    OPJ_UINT32 x, y;
+    OPJ_UINT8 *pix;
+    const OPJ_UINT8 *beyond;
+
+    beyond = pData + stride * height;
+    pix = pData;
+
+    x = y = 0U;
+    while (y < height) {
+        int c = getc(IN);
+
+        if (c) {
+            int j;
+            OPJ_UINT8 c1 = (OPJ_UINT8)getc(IN);
+
+            for (j = 0; (j < c) && (x < width) &&
+                    ((OPJ_SIZE_T)pix < (OPJ_SIZE_T)beyond); j++, x++, pix++) {
+                *pix = c1;
+            }
+        } else {
+            c = getc(IN);
+            if (c == 0x00) { /* EOL */
+                x = 0;
+                ++y;
+                pix = pData + y * stride + x;
+            } else if (c == 0x01) { /* EOP */
+                break;
+            } else if (c == 0x02) { /* MOVE by dxdy */
+                c = getc(IN);
+                x += (OPJ_UINT32)c;
+                c = getc(IN);
+                y += (OPJ_UINT32)c;
+                pix = pData + y * stride + x;
+            } else { /* 03 .. 255 */
+                int j;
+                for (j = 0; (j < c) && (x < width) &&
+                        ((OPJ_SIZE_T)pix < (OPJ_SIZE_T)beyond); j++, x++, pix++) {
+                    OPJ_UINT8 c1 = (OPJ_UINT8)getc(IN);
+                    *pix = c1;
+                }
+                if ((OPJ_UINT32)c & 1U) { /* skip padding byte */
+                    getc(IN);
+                }
+            }
+        }
+    }/* while() */
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL bmp_read_rle4_data(FILE* IN, OPJ_UINT8* pData, OPJ_UINT32 stride, OPJ_UINT32 width, OPJ_UINT32 height)
+static OPJ_BOOL bmp_read_rle4_data(FILE* IN, OPJ_UINT8* pData,
+                                   OPJ_UINT32 stride, OPJ_UINT32 width, OPJ_UINT32 height)
 {
-       OPJ_UINT32 x, y;
-       OPJ_UINT8 *pix;
-       const OPJ_UINT8 *beyond;
-       
-       beyond = pData + stride * height;
-       pix = pData;
-       x = y = 0U;
-       while(y < height)
-       {
-               int c = getc(IN);
-               if(c == EOF) break;
-               
-               if(c) {/* encoded mode */
-                       int j;
-                       OPJ_UINT8 c1 = (OPJ_UINT8)getc(IN);
-               
-                       for (j = 0; (j < c) && (x < width) && ((OPJ_SIZE_T)pix < (OPJ_SIZE_T)beyond); j++, x++, pix++) {
-                               *pix = (OPJ_UINT8)((j&1) ? (c1 & 0x0fU) : ((c1>>4)&0x0fU));
-                       }
-               }
-               else { /* absolute mode */
-                       c = getc(IN);
-                       if(c == EOF) break;
-               
-                       if(c == 0x00) { /* EOL */
-                               x = 0;  y++;  pix = pData + y * stride;
-                       }
-                       else if(c == 0x01) { /* EOP */
-                               break;
-                       }
-                       else if(c == 0x02) { /* MOVE by dxdy */
-                               c = getc(IN);  x += (OPJ_UINT32)c;
-                               c = getc(IN);  y += (OPJ_UINT32)c;
-                               pix = pData + y * stride + x;
-                       }
-                       else { /* 03 .. 255 : absolute mode */
-                               int j;
-                               OPJ_UINT8 c1 = 0U;
-                               
-                               for (j = 0; (j < c) && (x < width) && ((OPJ_SIZE_T)pix < (OPJ_SIZE_T)beyond); j++, x++, pix++) {
-                                       if((j&1) == 0) {
-                                                       c1 = (OPJ_UINT8)getc(IN);
-                                       }
-                                       *pix =  (OPJ_UINT8)((j&1) ? (c1 & 0x0fU) : ((c1>>4)&0x0fU));
-                               }
-                               if(((c&3) == 1) || ((c&3) == 2)) { /* skip padding byte */
-                                               getc(IN);
-                               }
-                       }
-               }
-       }  /* while(y < height) */
-       return OPJ_TRUE;
+    OPJ_UINT32 x, y;
+    OPJ_UINT8 *pix;
+    const OPJ_UINT8 *beyond;
+
+    beyond = pData + stride * height;
+    pix = pData;
+    x = y = 0U;
+    while (y < height) {
+        int c = getc(IN);
+        if (c == EOF) {
+            break;
+        }
+
+        if (c) { /* encoded mode */
+            int j;
+            OPJ_UINT8 c1 = (OPJ_UINT8)getc(IN);
+
+            for (j = 0; (j < c) && (x < width) &&
+                    ((OPJ_SIZE_T)pix < (OPJ_SIZE_T)beyond); j++, x++, pix++) {
+                *pix = (OPJ_UINT8)((j & 1) ? (c1 & 0x0fU) : ((c1 >> 4) & 0x0fU));
+            }
+        } else { /* absolute mode */
+            c = getc(IN);
+            if (c == EOF) {
+                break;
+            }
+
+            if (c == 0x00) { /* EOL */
+                x = 0;
+                y++;
+                pix = pData + y * stride;
+            } else if (c == 0x01) { /* EOP */
+                break;
+            } else if (c == 0x02) { /* MOVE by dxdy */
+                c = getc(IN);
+                x += (OPJ_UINT32)c;
+                c = getc(IN);
+                y += (OPJ_UINT32)c;
+                pix = pData + y * stride + x;
+            } else { /* 03 .. 255 : absolute mode */
+                int j;
+                OPJ_UINT8 c1 = 0U;
+
+                for (j = 0; (j < c) && (x < width) &&
+                        ((OPJ_SIZE_T)pix < (OPJ_SIZE_T)beyond); j++, x++, pix++) {
+                    if ((j & 1) == 0) {
+                        c1 = (OPJ_UINT8)getc(IN);
+                    }
+                    *pix = (OPJ_UINT8)((j & 1) ? (c1 & 0x0fU) : ((c1 >> 4) & 0x0fU));
+                }
+                if (((c & 3) == 1) || ((c & 3) == 2)) { /* skip padding byte */
+                    getc(IN);
+                }
+            }
+        }
+    }  /* while(y < height) */
+    return OPJ_TRUE;
 }
 
 opj_image_t* bmptoimage(const char *filename, opj_cparameters_t *parameters)
 {
-       opj_image_cmptparm_t cmptparm[4];       /* maximum of 4 components */
-       OPJ_UINT8 lut_R[256], lut_G[256], lut_B[256];
-       OPJ_UINT8 const* pLUT[3];
-       opj_image_t * image = NULL;
-       FILE *IN;
-       OPJ_BITMAPFILEHEADER File_h;
-       OPJ_BITMAPINFOHEADER Info_h;
-       OPJ_UINT32 i, palette_len, numcmpts = 1U;
-       OPJ_BOOL l_result = OPJ_FALSE;
-       OPJ_UINT8* pData = NULL;
-       OPJ_UINT32 stride;
-       
-       pLUT[0] = lut_R; pLUT[1] = lut_G; pLUT[2] = lut_B;
-       
-       IN = fopen(filename, "rb");
-       if (!IN)
-       {
-               fprintf(stderr, "Failed to open %s for reading !!\n", filename);
-               return NULL;
-       }
-
-       if (!bmp_read_file_header(IN, &File_h)) {
-               fclose(IN);
-               return NULL;
-       }
-       if (!bmp_read_info_header(IN, &Info_h)) {
-               fclose(IN);
-               return NULL;
-       }
-       
-       /* Load palette */
-       if (Info_h.biBitCount <= 8U)
-       {
-               memset(&lut_R[0], 0, sizeof(lut_R));
-               memset(&lut_G[0], 0, sizeof(lut_G));
-               memset(&lut_B[0], 0, sizeof(lut_B));
-               
-               palette_len = Info_h.biClrUsed;
-               if((palette_len == 0U) && (Info_h.biBitCount <= 8U)) {
-                       palette_len = (1U << Info_h.biBitCount);
-               }
-               if (palette_len > 256U) {
-                       palette_len = 256U;
-               }
-               if (palette_len > 0U) {
-                       OPJ_UINT8 has_color = 0U;
-                       for (i = 0U; i < palette_len; i++) {
-                               lut_B[i] = (OPJ_UINT8)getc(IN);
-                               lut_G[i] = (OPJ_UINT8)getc(IN);
-                               lut_R[i] = (OPJ_UINT8)getc(IN);
-                               (void)getc(IN); /* padding */
-                               has_color |= (lut_B[i] ^ lut_G[i]) | (lut_G[i] ^ lut_R[i]);
-                       }
-                       if(has_color) {
-                               numcmpts = 3U;
-                       }
-               }
-       } else {
-               numcmpts = 3U;
-               if ((Info_h.biCompression == 3) && (Info_h.biAlphaMask != 0U)) {
-                       numcmpts++;
-               }
-       }
-       
-       if (Info_h.biWidth == 0 || Info_h.biHeight == 0) {
-               fclose(IN);
-               return NULL;
-       }
-       
-       if (Info_h.biBitCount > (((OPJ_UINT32)-1) - 31) / Info_h.biWidth) {
-               fclose(IN);
-               return NULL;
-       }
-       stride = ((Info_h.biWidth * Info_h.biBitCount + 31U) / 32U) * 4U; /* rows are aligned on 32bits */
-       if (Info_h.biBitCount == 4 && Info_h.biCompression == 2) { /* RLE 4 gets decoded as 8 bits data for now... */
-               if (8 > (((OPJ_UINT32)-1) - 31) / Info_h.biWidth) {
-                       fclose(IN);
-                       return NULL;
-               }
-               stride = ((Info_h.biWidth * 8U + 31U) / 32U) * 4U;
-       }
-       
-       if (stride > ((OPJ_UINT32)-1) / sizeof(OPJ_UINT8) / Info_h.biHeight) {
-               fclose(IN);
-               return NULL;
-       }
-       pData = (OPJ_UINT8 *) calloc(1, stride * Info_h.biHeight * sizeof(OPJ_UINT8));
-       if (pData == NULL) {
-               fclose(IN);
-               return NULL;
-       }
-       /* Place the cursor at the beginning of the image information */
-       fseek(IN, 0, SEEK_SET);
-       fseek(IN, (long)File_h.bfOffBits, SEEK_SET);
-       
-       switch (Info_h.biCompression) {
-               case 0:
-               case 3:
-                       /* read raw data */
-                       l_result = bmp_read_raw_data(IN, pData, stride, Info_h.biWidth, Info_h.biHeight);
-                       break;
-               case 1:
-                       /* read rle8 data */
-                       l_result = bmp_read_rle8_data(IN, pData, stride, Info_h.biWidth, Info_h.biHeight);
-                       break;
-               case 2:
-                       /* read rle4 data */
-                       l_result = bmp_read_rle4_data(IN, pData, stride, Info_h.biWidth, Info_h.biHeight);
-                       break;
-  default:
-                       fprintf(stderr, "Unsupported BMP compression\n");
-                       l_result = OPJ_FALSE;
-                       break;
-       }
-       if (!l_result) {
-               free(pData);
-               fclose(IN);
-               return NULL;
-       }
-       
-       /* create the image */
-       memset(&cmptparm[0], 0, sizeof(cmptparm));
-       for(i = 0; i < 4U; i++)
-       {
-               cmptparm[i].prec = 8;
-               cmptparm[i].bpp  = 8;
-               cmptparm[i].sgnd = 0;
-               cmptparm[i].dx   = (OPJ_UINT32)parameters->subsampling_dx;
-               cmptparm[i].dy   = (OPJ_UINT32)parameters->subsampling_dy;
-               cmptparm[i].w    = Info_h.biWidth;
-               cmptparm[i].h    = Info_h.biHeight;
-       }
-
-       image = opj_image_create(numcmpts, &cmptparm[0], (numcmpts == 1U) ? OPJ_CLRSPC_GRAY : OPJ_CLRSPC_SRGB);
-       if(!image) {
-               fclose(IN);
-               free(pData);
-               return NULL;
-       }
-       if (numcmpts == 4U) {
-               image->comps[3].alpha = 1;
-       }
-       
-       /* set image offset and reference grid */
-       image->x0 = (OPJ_UINT32)parameters->image_offset_x0;
-       image->y0 = (OPJ_UINT32)parameters->image_offset_y0;
-       image->x1 =     image->x0 + (Info_h.biWidth  - 1U) * (OPJ_UINT32)parameters->subsampling_dx + 1U;
-       image->y1 = image->y0 + (Info_h.biHeight - 1U) * (OPJ_UINT32)parameters->subsampling_dy + 1U;
-       
-       /* Read the data */
-       if (Info_h.biBitCount == 24 && Info_h.biCompression == 0) { /*RGB */
-               bmp24toimage(pData, stride, image);
-       }
-       else if (Info_h.biBitCount == 8 && Info_h.biCompression == 0) { /* RGB 8bpp Indexed */
-               bmp8toimage(pData, stride, image, pLUT);
-       }
-       else if (Info_h.biBitCount == 8 && Info_h.biCompression == 1) { /*RLE8*/
-               bmp8toimage(pData, stride, image, pLUT);
-       }
-       else if (Info_h.biBitCount == 4 && Info_h.biCompression == 2) { /*RLE4*/
-               bmp8toimage(pData, stride, image, pLUT); /* RLE 4 gets decoded as 8 bits data for now */
-       }
-       else if (Info_h.biBitCount == 32 && Info_h.biCompression == 0) { /* RGBX */
-               bmpmask32toimage(pData, stride, image, 0x00FF0000U, 0x0000FF00U, 0x000000FFU, 0x00000000U);
-       }
-       else if (Info_h.biBitCount == 32 && Info_h.biCompression == 3) { /* bitmask */
-               bmpmask32toimage(pData, stride, image, Info_h.biRedMask, Info_h.biGreenMask, Info_h.biBlueMask, Info_h.biAlphaMask);
-       }
-       else if (Info_h.biBitCount == 16 && Info_h.biCompression == 0) { /* RGBX */
-               bmpmask16toimage(pData, stride, image, 0x7C00U, 0x03E0U, 0x001FU, 0x0000U);
-       }
-       else if (Info_h.biBitCount == 16 && Info_h.biCompression == 3) { /* bitmask */
-               if ((Info_h.biRedMask == 0U) && (Info_h.biGreenMask == 0U) && (Info_h.biBlueMask == 0U)) {
-                       Info_h.biRedMask   = 0xF800U;
-                       Info_h.biGreenMask = 0x07E0U;
-                       Info_h.biBlueMask  = 0x001FU;
-               }
-               bmpmask16toimage(pData, stride, image, Info_h.biRedMask, Info_h.biGreenMask, Info_h.biBlueMask, Info_h.biAlphaMask);
-       }
-       else {
-               opj_image_destroy(image);
-               image = NULL;
-               fprintf(stderr, "Other system than 24 bits/pixels or 8 bits (no RLE coding) is not yet implemented [%d]\n", Info_h.biBitCount);
-       }
-       free(pData);
-       fclose(IN);
-       return image;
+    opj_image_cmptparm_t cmptparm[4];   /* maximum of 4 components */
+    OPJ_UINT8 lut_R[256], lut_G[256], lut_B[256];
+    OPJ_UINT8 const* pLUT[3];
+    opj_image_t * image = NULL;
+    FILE *IN;
+    OPJ_BITMAPFILEHEADER File_h;
+    OPJ_BITMAPINFOHEADER Info_h;
+    OPJ_UINT32 i, palette_len, numcmpts = 1U;
+    OPJ_BOOL l_result = OPJ_FALSE;
+    OPJ_UINT8* pData = NULL;
+    OPJ_UINT32 stride;
+
+    pLUT[0] = lut_R;
+    pLUT[1] = lut_G;
+    pLUT[2] = lut_B;
+
+    IN = fopen(filename, "rb");
+    if (!IN) {
+        fprintf(stderr, "Failed to open %s for reading !!\n", filename);
+        return NULL;
+    }
+
+    if (!bmp_read_file_header(IN, &File_h)) {
+        fclose(IN);
+        return NULL;
+    }
+    if (!bmp_read_info_header(IN, &Info_h)) {
+        fclose(IN);
+        return NULL;
+    }
+
+    /* Load palette */
+    if (Info_h.biBitCount <= 8U) {
+        memset(&lut_R[0], 0, sizeof(lut_R));
+        memset(&lut_G[0], 0, sizeof(lut_G));
+        memset(&lut_B[0], 0, sizeof(lut_B));
+
+        palette_len = Info_h.biClrUsed;
+        if ((palette_len == 0U) && (Info_h.biBitCount <= 8U)) {
+            palette_len = (1U << Info_h.biBitCount);
+        }
+        if (palette_len > 256U) {
+            palette_len = 256U;
+        }
+        if (palette_len > 0U) {
+            OPJ_UINT8 has_color = 0U;
+            for (i = 0U; i < palette_len; i++) {
+                lut_B[i] = (OPJ_UINT8)getc(IN);
+                lut_G[i] = (OPJ_UINT8)getc(IN);
+                lut_R[i] = (OPJ_UINT8)getc(IN);
+                (void)getc(IN); /* padding */
+                has_color |= (lut_B[i] ^ lut_G[i]) | (lut_G[i] ^ lut_R[i]);
+            }
+            if (has_color) {
+                numcmpts = 3U;
+            }
+        }
+    } else {
+        numcmpts = 3U;
+        if ((Info_h.biCompression == 3) && (Info_h.biAlphaMask != 0U)) {
+            numcmpts++;
+        }
+    }
+
+    if (Info_h.biWidth == 0 || Info_h.biHeight == 0) {
+        fclose(IN);
+        return NULL;
+    }
+
+    if (Info_h.biBitCount > (((OPJ_UINT32) - 1) - 31) / Info_h.biWidth) {
+        fclose(IN);
+        return NULL;
+    }
+    stride = ((Info_h.biWidth * Info_h.biBitCount + 31U) / 32U) *
+             4U; /* rows are aligned on 32bits */
+    if (Info_h.biBitCount == 4 &&
+            Info_h.biCompression == 2) { /* RLE 4 gets decoded as 8 bits data for now... */
+        if (8 > (((OPJ_UINT32) - 1) - 31) / Info_h.biWidth) {
+            fclose(IN);
+            return NULL;
+        }
+        stride = ((Info_h.biWidth * 8U + 31U) / 32U) * 4U;
+    }
+
+    if (stride > ((OPJ_UINT32) - 1) / sizeof(OPJ_UINT8) / Info_h.biHeight) {
+        fclose(IN);
+        return NULL;
+    }
+    pData = (OPJ_UINT8 *) calloc(1, stride * Info_h.biHeight * sizeof(OPJ_UINT8));
+    if (pData == NULL) {
+        fclose(IN);
+        return NULL;
+    }
+    /* Place the cursor at the beginning of the image information */
+    fseek(IN, 0, SEEK_SET);
+    fseek(IN, (long)File_h.bfOffBits, SEEK_SET);
+
+    switch (Info_h.biCompression) {
+    case 0:
+    case 3:
+        /* read raw data */
+        l_result = bmp_read_raw_data(IN, pData, stride, Info_h.biWidth,
+                                     Info_h.biHeight);
+        break;
+    case 1:
+        /* read rle8 data */
+        l_result = bmp_read_rle8_data(IN, pData, stride, Info_h.biWidth,
+                                      Info_h.biHeight);
+        break;
+    case 2:
+        /* read rle4 data */
+        l_result = bmp_read_rle4_data(IN, pData, stride, Info_h.biWidth,
+                                      Info_h.biHeight);
+        break;
+    default:
+        fprintf(stderr, "Unsupported BMP compression\n");
+        l_result = OPJ_FALSE;
+        break;
+    }
+    if (!l_result) {
+        free(pData);
+        fclose(IN);
+        return NULL;
+    }
+
+    /* create the image */
+    memset(&cmptparm[0], 0, sizeof(cmptparm));
+    for (i = 0; i < 4U; i++) {
+        cmptparm[i].prec = 8;
+        cmptparm[i].bpp  = 8;
+        cmptparm[i].sgnd = 0;
+        cmptparm[i].dx   = (OPJ_UINT32)parameters->subsampling_dx;
+        cmptparm[i].dy   = (OPJ_UINT32)parameters->subsampling_dy;
+        cmptparm[i].w    = Info_h.biWidth;
+        cmptparm[i].h    = Info_h.biHeight;
+    }
+
+    image = opj_image_create(numcmpts, &cmptparm[0],
+                             (numcmpts == 1U) ? OPJ_CLRSPC_GRAY : OPJ_CLRSPC_SRGB);
+    if (!image) {
+        fclose(IN);
+        free(pData);
+        return NULL;
+    }
+    if (numcmpts == 4U) {
+        image->comps[3].alpha = 1;
+    }
+
+    /* set image offset and reference grid */
+    image->x0 = (OPJ_UINT32)parameters->image_offset_x0;
+    image->y0 = (OPJ_UINT32)parameters->image_offset_y0;
+    image->x1 = image->x0 + (Info_h.biWidth  - 1U) * (OPJ_UINT32)
+                parameters->subsampling_dx + 1U;
+    image->y1 = image->y0 + (Info_h.biHeight - 1U) * (OPJ_UINT32)
+                parameters->subsampling_dy + 1U;
+
+    /* Read the data */
+    if (Info_h.biBitCount == 24 && Info_h.biCompression == 0) { /*RGB */
+        bmp24toimage(pData, stride, image);
+    } else if (Info_h.biBitCount == 8 &&
+               Info_h.biCompression == 0) { /* RGB 8bpp Indexed */
+        bmp8toimage(pData, stride, image, pLUT);
+    } else if (Info_h.biBitCount == 8 && Info_h.biCompression == 1) { /*RLE8*/
+        bmp8toimage(pData, stride, image, pLUT);
+    } else if (Info_h.biBitCount == 4 && Info_h.biCompression == 2) { /*RLE4*/
+        bmp8toimage(pData, stride, image,
+                    pLUT); /* RLE 4 gets decoded as 8 bits data for now */
+    } else if (Info_h.biBitCount == 32 && Info_h.biCompression == 0) { /* RGBX */
+        bmpmask32toimage(pData, stride, image, 0x00FF0000U, 0x0000FF00U, 0x000000FFU,
+                         0x00000000U);
+    } else if (Info_h.biBitCount == 32 && Info_h.biCompression == 3) { /* bitmask */
+        bmpmask32toimage(pData, stride, image, Info_h.biRedMask, Info_h.biGreenMask,
+                         Info_h.biBlueMask, Info_h.biAlphaMask);
+    } else if (Info_h.biBitCount == 16 && Info_h.biCompression == 0) { /* RGBX */
+        bmpmask16toimage(pData, stride, image, 0x7C00U, 0x03E0U, 0x001FU, 0x0000U);
+    } else if (Info_h.biBitCount == 16 && Info_h.biCompression == 3) { /* bitmask */
+        if ((Info_h.biRedMask == 0U) && (Info_h.biGreenMask == 0U) &&
+                (Info_h.biBlueMask == 0U)) {
+            Info_h.biRedMask   = 0xF800U;
+            Info_h.biGreenMask = 0x07E0U;
+            Info_h.biBlueMask  = 0x001FU;
+        }
+        bmpmask16toimage(pData, stride, image, Info_h.biRedMask, Info_h.biGreenMask,
+                         Info_h.biBlueMask, Info_h.biAlphaMask);
+    } else {
+        opj_image_destroy(image);
+        image = NULL;
+        fprintf(stderr,
+                "Other system than 24 bits/pixels or 8 bits (no RLE coding) is not yet implemented [%d]\n",
+                Info_h.biBitCount);
+    }
+    free(pData);
+    fclose(IN);
+    return image;
 }
 
-int imagetobmp(opj_image_t * image, const char *outfile) {
+int imagetobmp(opj_image_t * image, const char *outfile)
+{
     int w, h;
     int i, pad;
     FILE *fdest = NULL;
@@ -835,54 +860,65 @@ int imagetobmp(opj_image_t * image, const char *outfile) {
         /* FILE HEADER */
         /* ------------- */
         fprintf(fdest, "%c%c%c%c",
-                (OPJ_UINT8) (h * w * 3 + 3 * h * (w % 2) + 54) & 0xff,
-                (OPJ_UINT8) ((h * w * 3 + 3 * h * (w % 2) + 54)        >> 8) & 0xff,
-                (OPJ_UINT8) ((h * w * 3 + 3 * h * (w % 2) + 54)        >> 16) & 0xff,
-                (OPJ_UINT8) ((h * w * 3 + 3 * h * (w % 2) + 54)        >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (54) & 0xff, ((54) >> 8) & 0xff,((54) >> 16) & 0xff, ((54) >> 24) & 0xff);
+                (OPJ_UINT8)(h * w * 3 + 3 * h * (w % 2) + 54) & 0xff,
+                (OPJ_UINT8)((h * w * 3 + 3 * h * (w % 2) + 54) >> 8) & 0xff,
+                (OPJ_UINT8)((h * w * 3 + 3 * h * (w % 2) + 54) >> 16) & 0xff,
+                (OPJ_UINT8)((h * w * 3 + 3 * h * (w % 2) + 54) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
+                ((0) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (54) & 0xff, ((54) >> 8) & 0xff, ((54) >> 16) & 0xff,
+                ((54) >> 24) & 0xff);
 
         /* INFO HEADER   */
         /* ------------- */
-        fprintf(fdest, "%c%c%c%c", (40) & 0xff, ((40) >> 8) & 0xff,    ((40) >> 16) & 0xff, ((40) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (OPJ_UINT8) ((w) & 0xff),
-                (OPJ_UINT8) ((w) >> 8) & 0xff,
-                (OPJ_UINT8) ((w) >> 16) & 0xff,
-                (OPJ_UINT8) ((w) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (OPJ_UINT8) ((h) & 0xff),
-                (OPJ_UINT8) ((h) >> 8) & 0xff,
-                (OPJ_UINT8) ((h) >> 16) & 0xff,
-                (OPJ_UINT8) ((h) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (40) & 0xff, ((40) >> 8) & 0xff, ((40) >> 16) & 0xff,
+                ((40) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (OPJ_UINT8)((w) & 0xff),
+                (OPJ_UINT8)((w) >> 8) & 0xff,
+                (OPJ_UINT8)((w) >> 16) & 0xff,
+                (OPJ_UINT8)((w) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (OPJ_UINT8)((h) & 0xff),
+                (OPJ_UINT8)((h) >> 8) & 0xff,
+                (OPJ_UINT8)((h) >> 16) & 0xff,
+                (OPJ_UINT8)((h) >> 24) & 0xff);
         fprintf(fdest, "%c%c", (1) & 0xff, ((1) >> 8) & 0xff);
         fprintf(fdest, "%c%c", (24) & 0xff, ((24) >> 8) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (OPJ_UINT8) (3 * h * w + 3 * h * (w % 2)) & 0xff,
-                (OPJ_UINT8) ((h * w * 3 + 3 * h * (w % 2)) >> 8) & 0xff,
-                (OPJ_UINT8) ((h * w * 3 + 3 * h * (w % 2)) >> 16) & 0xff,
-                (OPJ_UINT8) ((h * w * 3 + 3 * h * (w % 2)) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff, ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,        ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
+                ((0) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (OPJ_UINT8)(3 * h * w + 3 * h * (w % 2)) & 0xff,
+                (OPJ_UINT8)((h * w * 3 + 3 * h * (w % 2)) >> 8) & 0xff,
+                (OPJ_UINT8)((h * w * 3 + 3 * h * (w % 2)) >> 16) & 0xff,
+                (OPJ_UINT8)((h * w * 3 + 3 * h * (w % 2)) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
+                ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
+                ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
+                ((0) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
+                ((0) >> 24) & 0xff);
 
         if (image->comps[0].prec > 8) {
             adjustR = (int)image->comps[0].prec - 8;
-            printf("BMP CONVERSION: Truncating component 0 from %d bits to 8 bits\n", image->comps[0].prec);
-        }
-        else
+            printf("BMP CONVERSION: Truncating component 0 from %d bits to 8 bits\n",
+                   image->comps[0].prec);
+        } else {
             adjustR = 0;
+        }
         if (image->comps[1].prec > 8) {
             adjustG = (int)image->comps[1].prec - 8;
-            printf("BMP CONVERSION: Truncating component 1 from %d bits to 8 bits\n", image->comps[1].prec);
-        }
-        else
+            printf("BMP CONVERSION: Truncating component 1 from %d bits to 8 bits\n",
+                   image->comps[1].prec);
+        } else {
             adjustG = 0;
+        }
         if (image->comps[2].prec > 8) {
             adjustB = (int)image->comps[2].prec - 8;
-            printf("BMP CONVERSION: Truncating component 2 from %d bits to 8 bits\n", image->comps[2].prec);
-        }
-        else
+            printf("BMP CONVERSION: Truncating component 2 from %d bits to 8 bits\n",
+                   image->comps[2].prec);
+        } else {
             adjustB = 0;
+        }
 
         for (i = 0; i < w * h; i++) {
             OPJ_UINT8 rc, gc, bc;
@@ -890,31 +926,44 @@ int imagetobmp(opj_image_t * image, const char *outfile) {
 
             r = image->comps[0].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
             r += (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
-            r = ((r >> adjustR)+((r >> (adjustR-1))%2));
-            if(r > 255) r = 255; else if(r < 0) r = 0;
+            r = ((r >> adjustR) + ((r >> (adjustR - 1)) % 2));
+            if (r > 255) {
+                r = 255;
+            } else if (r < 0) {
+                r = 0;
+            }
             rc = (OPJ_UINT8)r;
 
             g = image->comps[1].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
             g += (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
-            g = ((g >> adjustG)+((g >> (adjustG-1))%2));
-            if(g > 255) g = 255; else if(g < 0) g = 0;
+            g = ((g >> adjustG) + ((g >> (adjustG - 1)) % 2));
+            if (g > 255) {
+                g = 255;
+            } else if (g < 0) {
+                g = 0;
+            }
             gc = (OPJ_UINT8)g;
 
             b = image->comps[2].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
             b += (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
-            b = ((b >> adjustB)+((b >> (adjustB-1))%2));
-            if(b > 255) b = 255; else if(b < 0) b = 0;
+            b = ((b >> adjustB) + ((b >> (adjustB - 1)) % 2));
+            if (b > 255) {
+                b = 255;
+            } else if (b < 0) {
+                b = 0;
+            }
             bc = (OPJ_UINT8)b;
 
             fprintf(fdest, "%c%c%c", bc, gc, rc);
 
             if ((i + 1) % w == 0) {
-                for (pad = ((3 * w) % 4) ? (4 - (3 * w) % 4) : 0; pad > 0; pad--)      /* ADD */
+                for (pad = ((3 * w) % 4) ? (4 - (3 * w) % 4) : 0; pad > 0; pad--) { /* ADD */
                     fprintf(fdest, "%c", 0);
+                }
             }
         }
         fclose(fdest);
-    } else {                   /* Gray-scale */
+    } else {            /* Gray-scale */
 
         /* -->> -->> -->> -->>
         8 bits non code (Gray scale)
@@ -932,43 +981,52 @@ int imagetobmp(opj_image_t * image, const char *outfile) {
 
         /* FILE HEADER */
         /* ------------- */
-        fprintf(fdest, "%c%c%c%c", (OPJ_UINT8) (h * w + 54 + 1024 + h * (w % 2)) & 0xff,
-                (OPJ_UINT8) ((h * w + 54 + 1024 + h * (w % 2)) >> 8) & 0xff,
-                (OPJ_UINT8) ((h * w + 54 + 1024 + h * (w % 2)) >> 16) & 0xff,
-                (OPJ_UINT8) ((h * w + 54 + 1024 + w * (w % 2)) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (OPJ_UINT8)(h * w + 54 + 1024 + h * (w % 2)) & 0xff,
+                (OPJ_UINT8)((h * w + 54 + 1024 + h * (w % 2)) >> 8) & 0xff,
+                (OPJ_UINT8)((h * w + 54 + 1024 + h * (w % 2)) >> 16) & 0xff,
+                (OPJ_UINT8)((h * w + 54 + 1024 + w * (w % 2)) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
+                ((0) >> 24) & 0xff);
         fprintf(fdest, "%c%c%c%c", (54 + 1024) & 0xff, ((54 + 1024) >> 8) & 0xff,
                 ((54 + 1024) >> 16) & 0xff,
                 ((54 + 1024) >> 24) & 0xff);
 
         /* INFO HEADER */
         /* ------------- */
-        fprintf(fdest, "%c%c%c%c", (40) & 0xff, ((40) >> 8) & 0xff,    ((40) >> 16) & 0xff, ((40) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (OPJ_UINT8) ((w) & 0xff),
-                (OPJ_UINT8) ((w) >> 8) & 0xff,
-                (OPJ_UINT8) ((w) >> 16) & 0xff,
-                (OPJ_UINT8) ((w) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (OPJ_UINT8) ((h) & 0xff),
-                (OPJ_UINT8) ((h) >> 8) & 0xff,
-                (OPJ_UINT8) ((h) >> 16) & 0xff,
-                (OPJ_UINT8) ((h) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (40) & 0xff, ((40) >> 8) & 0xff, ((40) >> 16) & 0xff,
+                ((40) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (OPJ_UINT8)((w) & 0xff),
+                (OPJ_UINT8)((w) >> 8) & 0xff,
+                (OPJ_UINT8)((w) >> 16) & 0xff,
+                (OPJ_UINT8)((w) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (OPJ_UINT8)((h) & 0xff),
+                (OPJ_UINT8)((h) >> 8) & 0xff,
+                (OPJ_UINT8)((h) >> 16) & 0xff,
+                (OPJ_UINT8)((h) >> 24) & 0xff);
         fprintf(fdest, "%c%c", (1) & 0xff, ((1) >> 8) & 0xff);
         fprintf(fdest, "%c%c", (8) & 0xff, ((8) >> 8) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (OPJ_UINT8) (h * w + h * (w % 2)) & 0xff,
-                (OPJ_UINT8) ((h * w + h * (w % 2)) >> 8) &     0xff,
-                (OPJ_UINT8) ((h * w + h * (w % 2)) >> 16) &    0xff,
-                (OPJ_UINT8) ((h * w + h * (w % 2)) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,        ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,        ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (256) & 0xff, ((256) >> 8) & 0xff, ((256) >> 16) & 0xff, ((256) >> 24) & 0xff);
-        fprintf(fdest, "%c%c%c%c", (256) & 0xff, ((256) >> 8) & 0xff, ((256) >> 16) & 0xff, ((256) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
+                ((0) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (OPJ_UINT8)(h * w + h * (w % 2)) & 0xff,
+                (OPJ_UINT8)((h * w + h * (w % 2)) >> 8) &  0xff,
+                (OPJ_UINT8)((h * w + h * (w % 2)) >> 16) & 0xff,
+                (OPJ_UINT8)((h * w + h * (w % 2)) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
+                ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
+                ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (256) & 0xff, ((256) >> 8) & 0xff,
+                ((256) >> 16) & 0xff, ((256) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (256) & 0xff, ((256) >> 8) & 0xff,
+                ((256) >> 16) & 0xff, ((256) >> 24) & 0xff);
 
         if (image->comps[0].prec > 8) {
             adjustR = (int)image->comps[0].prec - 8;
-            printf("BMP CONVERSION: Truncating component 0 from %d bits to 8 bits\n", image->comps[0].prec);
-        }else
+            printf("BMP CONVERSION: Truncating component 0 from %d bits to 8 bits\n",
+                   image->comps[0].prec);
+        } else {
             adjustR = 0;
+        }
 
         for (i = 0; i < 256; i++) {
             fprintf(fdest, "%c%c%c%c", i, i, i, 0);
@@ -979,14 +1037,19 @@ int imagetobmp(opj_image_t * image, const char *outfile) {
 
             r = image->comps[0].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
             r += (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
-            r = ((r >> adjustR)+((r >> (adjustR-1))%2));
-            if(r > 255) r = 255; else if(r < 0) r = 0;
+            r = ((r >> adjustR) + ((r >> (adjustR - 1)) % 2));
+            if (r > 255) {
+                r = 255;
+            } else if (r < 0) {
+                r = 0;
+            }
 
             fprintf(fdest, "%c", (OPJ_UINT8)r);
 
             if ((i + 1) % w == 0) {
-                for (pad = (w % 4) ? (4 - w % 4) : 0; pad > 0; pad--)  /* ADD */
+                for (pad = (w % 4) ? (4 - w % 4) : 0; pad > 0; pad--) { /* ADD */
                     fprintf(fdest, "%c", 0);
+                }
             }
         }
         fclose(fdest);
index 5635c7d0d8897c6446addc4674e7ec5cbc6caba9..44d985f2333a65f40050af190ba1b1eedaca11a1 100644 (file)
 /* PNG allows bits per sample: 1, 2, 4, 8, 16 */
 
 
-static void convert_16u32s_C1R(const OPJ_BYTE* pSrc, OPJ_INT32* pDst, OPJ_SIZE_T length)
+static void convert_16u32s_C1R(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
+                               OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < length; i++) {
-               OPJ_INT32 val0 = *pSrc++;
-               OPJ_INT32 val1 = *pSrc++;
-               pDst[i] = val0 << 8 | val1;
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < length; i++) {
+        OPJ_INT32 val0 = *pSrc++;
+        OPJ_INT32 val1 = *pSrc++;
+        pDst[i] = val0 << 8 | val1;
+    }
 }
 
 opj_image_t *pngtoimage(const char *read_idf, opj_cparameters_t * params)
 {
-       png_structp  png = NULL;
-       png_infop    info = NULL;
-       double gamma;
-       int bit_depth, interlace_type,compression_type, filter_type;
-       OPJ_UINT32 i;
-       png_uint_32  width, height = 0U;
-       int color_type;
-       FILE *reader = NULL;
-       OPJ_BYTE** rows = NULL;
-       OPJ_INT32* row32s = NULL;
-       /* j2k: */
-       opj_image_t *image = NULL;
-       opj_image_cmptparm_t cmptparm[4];
-       OPJ_UINT32 nr_comp;
-       OPJ_BYTE sigbuf[8];
-       convert_XXx32s_C1R cvtXXTo32s = NULL;
-       convert_32s_CXPX cvtCxToPx = NULL;
-       OPJ_INT32* planes[4];
-       
-       if((reader = fopen(read_idf, "rb")) == NULL)
-       {
-               fprintf(stderr,"pngtoimage: can not open %s\n",read_idf);
-               return NULL;
-       }
-       
-       if(fread(sigbuf, 1, MAGIC_SIZE, reader) != MAGIC_SIZE
-                || memcmp(sigbuf, PNG_MAGIC, MAGIC_SIZE) != 0)
-       {
-               fprintf(stderr,"pngtoimage: %s is no valid PNG file\n",read_idf);
-               goto fin;
-       }
-       
-       if((png = png_create_read_struct(PNG_LIBPNG_VER_STRING,
-                                                                                                                                        NULL, NULL, NULL)) == NULL)
-               goto fin;
-       if((info = png_create_info_struct(png)) == NULL)
-               goto fin;
-       
-       if(setjmp(png_jmpbuf(png)))
-               goto fin;
-       
-       png_init_io(png, reader);
-       png_set_sig_bytes(png, MAGIC_SIZE);
-       
-       png_read_info(png, info);
-       
-       if(png_get_IHDR(png, info, &width, &height,
-                                                                       &bit_depth, &color_type, &interlace_type,
-                                                                       &compression_type, &filter_type) == 0)
-               goto fin;
-       
-       /* png_set_expand():
-        * expand paletted images to RGB, expand grayscale images of
-        * less than 8-bit depth to 8-bit depth, and expand tRNS chunks
-        * to alpha channels.
-        */
-       if(color_type == PNG_COLOR_TYPE_PALETTE) {
-               png_set_expand(png);
-       }
-       
-       if(png_get_valid(png, info, PNG_INFO_tRNS)) {
-               png_set_expand(png);
-       }
-       /* We might wan't to expand background */
-       /*
-       if(png_get_valid(png, info, PNG_INFO_bKGD)) {
-               png_color_16p bgnd;
-               png_get_bKGD(png, info, &bgnd);
-               png_set_background(png, bgnd, PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
-       }
-       */
-       
-       if( !png_get_gAMA(png, info, &gamma))
-               gamma = 1.0;
-       
-       /* we're not displaying but converting, screen gamma == 1.0 */
-       png_set_gamma(png, 1.0, gamma);
-       
-       png_read_update_info(png, info);
-       
-       color_type = png_get_color_type(png, info);
-       
-       switch (color_type) {
-               case PNG_COLOR_TYPE_GRAY:
-                       nr_comp = 1;
-                       break;
-               case PNG_COLOR_TYPE_GRAY_ALPHA:
-                       nr_comp = 2;
-                       break;
-               case PNG_COLOR_TYPE_RGB:
-                       nr_comp = 3;
-                       break;
-               case PNG_COLOR_TYPE_RGB_ALPHA:
-                       nr_comp = 4;
-                       break;
-               default:
-                       fprintf(stderr,"pngtoimage: colortype %d is not supported\n", color_type);
-                       goto fin;
-       }
-       cvtCxToPx = convert_32s_CXPX_LUT[nr_comp];
-       bit_depth = png_get_bit_depth(png, info);
-       
-       switch (bit_depth) {
-               case 1:
-               case 2:
-               case 4:
-               case 8:
-                       cvtXXTo32s = convert_XXu32s_C1R_LUT[bit_depth];
-                       break;
-               case 16: /* 16 bpp is specific to PNG */
-                       cvtXXTo32s = convert_16u32s_C1R;
-                       break;
-               default:
-                       fprintf(stderr,"pngtoimage: bit depth %d is not supported\n", bit_depth);
-                       goto fin;
-       }
-
-       
-       rows = (OPJ_BYTE**)calloc(height+1, sizeof(OPJ_BYTE*));
-       if(rows == NULL){
-               fprintf(stderr, "pngtoimage: memory out\n");
-               goto fin;
-       }
-       for(i = 0; i < height; ++i){
-               rows[i] = (OPJ_BYTE*)malloc(png_get_rowbytes(png,info));
-               if(rows[i] == NULL){
-                       fprintf(stderr,"pngtoimage: memory out\n");
-                       goto fin;
-               }
-       }       
-       png_read_image(png, rows);
-       
-       /* Create image */
-       memset(cmptparm, 0, sizeof(cmptparm));
-       for(i = 0; i < nr_comp; ++i)
-       {
-               cmptparm[i].prec = (OPJ_UINT32)bit_depth;
-               /* bits_per_pixel: 8 or 16 */
-               cmptparm[i].bpp = (OPJ_UINT32)bit_depth;
-               cmptparm[i].sgnd = 0;
-               cmptparm[i].dx = (OPJ_UINT32)params->subsampling_dx;
-               cmptparm[i].dy = (OPJ_UINT32)params->subsampling_dy;
-               cmptparm[i].w = (OPJ_UINT32)width;
-               cmptparm[i].h = (OPJ_UINT32)height;
-       }
-       
-       image = opj_image_create(nr_comp, &cmptparm[0], (nr_comp > 2U) ? OPJ_CLRSPC_SRGB : OPJ_CLRSPC_GRAY);
-       if(image == NULL) goto fin;
-       image->x0 = (OPJ_UINT32)params->image_offset_x0;
-       image->y0 = (OPJ_UINT32)params->image_offset_y0;
-       image->x1 = (OPJ_UINT32)(image->x0 + (width  - 1) * (OPJ_UINT32)params->subsampling_dx + 1 + image->x0);
-       image->y1 = (OPJ_UINT32)(image->y0 + (height - 1) * (OPJ_UINT32)params->subsampling_dy + 1 + image->y0);
-       
-       row32s = (OPJ_INT32 *)malloc((size_t)width * nr_comp * sizeof(OPJ_INT32));
-       if(row32s == NULL) goto fin;
-       
-       /* Set alpha channel */
-       image->comps[nr_comp-1U].alpha = 1U - (nr_comp & 1U);
-       
-       for(i = 0; i < nr_comp; i++)
-       {
-               planes[i] = image->comps[i].data;
-       }
-       
-       for(i = 0; i < height; ++i)
-       {
-               cvtXXTo32s(rows[i], row32s, (OPJ_SIZE_T)width * nr_comp);
-               cvtCxToPx(row32s, planes, width);
-               planes[0] += width;
-               planes[1] += width;
-               planes[2] += width;
-               planes[3] += width;
-       }
+    png_structp  png = NULL;
+    png_infop    info = NULL;
+    double gamma;
+    int bit_depth, interlace_type, compression_type, filter_type;
+    OPJ_UINT32 i;
+    png_uint_32  width, height = 0U;
+    int color_type;
+    FILE *reader = NULL;
+    OPJ_BYTE** rows = NULL;
+    OPJ_INT32* row32s = NULL;
+    /* j2k: */
+    opj_image_t *image = NULL;
+    opj_image_cmptparm_t cmptparm[4];
+    OPJ_UINT32 nr_comp;
+    OPJ_BYTE sigbuf[8];
+    convert_XXx32s_C1R cvtXXTo32s = NULL;
+    convert_32s_CXPX cvtCxToPx = NULL;
+    OPJ_INT32* planes[4];
+
+    if ((reader = fopen(read_idf, "rb")) == NULL) {
+        fprintf(stderr, "pngtoimage: can not open %s\n", read_idf);
+        return NULL;
+    }
+
+    if (fread(sigbuf, 1, MAGIC_SIZE, reader) != MAGIC_SIZE
+            || memcmp(sigbuf, PNG_MAGIC, MAGIC_SIZE) != 0) {
+        fprintf(stderr, "pngtoimage: %s is no valid PNG file\n", read_idf);
+        goto fin;
+    }
+
+    if ((png = png_create_read_struct(PNG_LIBPNG_VER_STRING,
+                                      NULL, NULL, NULL)) == NULL) {
+        goto fin;
+    }
+    if ((info = png_create_info_struct(png)) == NULL) {
+        goto fin;
+    }
+
+    if (setjmp(png_jmpbuf(png))) {
+        goto fin;
+    }
+
+    png_init_io(png, reader);
+    png_set_sig_bytes(png, MAGIC_SIZE);
+
+    png_read_info(png, info);
+
+    if (png_get_IHDR(png, info, &width, &height,
+                     &bit_depth, &color_type, &interlace_type,
+                     &compression_type, &filter_type) == 0) {
+        goto fin;
+    }
+
+    /* png_set_expand():
+     * expand paletted images to RGB, expand grayscale images of
+     * less than 8-bit depth to 8-bit depth, and expand tRNS chunks
+     * to alpha channels.
+     */
+    if (color_type == PNG_COLOR_TYPE_PALETTE) {
+        png_set_expand(png);
+    }
+
+    if (png_get_valid(png, info, PNG_INFO_tRNS)) {
+        png_set_expand(png);
+    }
+    /* We might wan't to expand background */
+    /*
+    if(png_get_valid(png, info, PNG_INFO_bKGD)) {
+        png_color_16p bgnd;
+        png_get_bKGD(png, info, &bgnd);
+        png_set_background(png, bgnd, PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
+    }
+    */
+
+    if (!png_get_gAMA(png, info, &gamma)) {
+        gamma = 1.0;
+    }
+
+    /* we're not displaying but converting, screen gamma == 1.0 */
+    png_set_gamma(png, 1.0, gamma);
+
+    png_read_update_info(png, info);
+
+    color_type = png_get_color_type(png, info);
+
+    switch (color_type) {
+    case PNG_COLOR_TYPE_GRAY:
+        nr_comp = 1;
+        break;
+    case PNG_COLOR_TYPE_GRAY_ALPHA:
+        nr_comp = 2;
+        break;
+    case PNG_COLOR_TYPE_RGB:
+        nr_comp = 3;
+        break;
+    case PNG_COLOR_TYPE_RGB_ALPHA:
+        nr_comp = 4;
+        break;
+    default:
+        fprintf(stderr, "pngtoimage: colortype %d is not supported\n", color_type);
+        goto fin;
+    }
+    cvtCxToPx = convert_32s_CXPX_LUT[nr_comp];
+    bit_depth = png_get_bit_depth(png, info);
+
+    switch (bit_depth) {
+    case 1:
+    case 2:
+    case 4:
+    case 8:
+        cvtXXTo32s = convert_XXu32s_C1R_LUT[bit_depth];
+        break;
+    case 16: /* 16 bpp is specific to PNG */
+        cvtXXTo32s = convert_16u32s_C1R;
+        break;
+    default:
+        fprintf(stderr, "pngtoimage: bit depth %d is not supported\n", bit_depth);
+        goto fin;
+    }
+
+
+    rows = (OPJ_BYTE**)calloc(height + 1, sizeof(OPJ_BYTE*));
+    if (rows == NULL) {
+        fprintf(stderr, "pngtoimage: memory out\n");
+        goto fin;
+    }
+    for (i = 0; i < height; ++i) {
+        rows[i] = (OPJ_BYTE*)malloc(png_get_rowbytes(png, info));
+        if (rows[i] == NULL) {
+            fprintf(stderr, "pngtoimage: memory out\n");
+            goto fin;
+        }
+    }
+    png_read_image(png, rows);
+
+    /* Create image */
+    memset(cmptparm, 0, sizeof(cmptparm));
+    for (i = 0; i < nr_comp; ++i) {
+        cmptparm[i].prec = (OPJ_UINT32)bit_depth;
+        /* bits_per_pixel: 8 or 16 */
+        cmptparm[i].bpp = (OPJ_UINT32)bit_depth;
+        cmptparm[i].sgnd = 0;
+        cmptparm[i].dx = (OPJ_UINT32)params->subsampling_dx;
+        cmptparm[i].dy = (OPJ_UINT32)params->subsampling_dy;
+        cmptparm[i].w = (OPJ_UINT32)width;
+        cmptparm[i].h = (OPJ_UINT32)height;
+    }
+
+    image = opj_image_create(nr_comp, &cmptparm[0],
+                             (nr_comp > 2U) ? OPJ_CLRSPC_SRGB : OPJ_CLRSPC_GRAY);
+    if (image == NULL) {
+        goto fin;
+    }
+    image->x0 = (OPJ_UINT32)params->image_offset_x0;
+    image->y0 = (OPJ_UINT32)params->image_offset_y0;
+    image->x1 = (OPJ_UINT32)(image->x0 + (width  - 1) * (OPJ_UINT32)
+                             params->subsampling_dx + 1 + image->x0);
+    image->y1 = (OPJ_UINT32)(image->y0 + (height - 1) * (OPJ_UINT32)
+                             params->subsampling_dy + 1 + image->y0);
+
+    row32s = (OPJ_INT32 *)malloc((size_t)width * nr_comp * sizeof(OPJ_INT32));
+    if (row32s == NULL) {
+        goto fin;
+    }
+
+    /* Set alpha channel */
+    image->comps[nr_comp - 1U].alpha = 1U - (nr_comp & 1U);
+
+    for (i = 0; i < nr_comp; i++) {
+        planes[i] = image->comps[i].data;
+    }
+
+    for (i = 0; i < height; ++i) {
+        cvtXXTo32s(rows[i], row32s, (OPJ_SIZE_T)width * nr_comp);
+        cvtCxToPx(row32s, planes, width);
+        planes[0] += width;
+        planes[1] += width;
+        planes[2] += width;
+        planes[3] += width;
+    }
 fin:
-       if(rows)
-       {
-               for(i = 0; i < height; ++i)
-                       if(rows[i]) free(rows[i]);
-               free(rows);
-       }
-       if (row32s) {
-               free(row32s);
-       }
-       if(png)
-               png_destroy_read_struct(&png, &info, NULL);
-       
-       fclose(reader);
-       
-       return image;
-       
+    if (rows) {
+        for (i = 0; i < height; ++i)
+            if (rows[i]) {
+                free(rows[i]);
+            }
+        free(rows);
+    }
+    if (row32s) {
+        free(row32s);
+    }
+    if (png) {
+        png_destroy_read_struct(&png, &info, NULL);
+    }
+
+    fclose(reader);
+
+    return image;
+
 }/* pngtoimage() */
 
 
-static void convert_32s16u_C1R(const OPJ_INT32* pSrc, OPJ_BYTE* pDst, OPJ_SIZE_T length)
+static void convert_32s16u_C1R(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
+                               OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < length; i++) {
-               OPJ_UINT32 val = (OPJ_UINT32)pSrc[i];
-               *pDst++ = (OPJ_BYTE)(val >> 8);
-               *pDst++ = (OPJ_BYTE)val;
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < length; i++) {
+        OPJ_UINT32 val = (OPJ_UINT32)pSrc[i];
+        *pDst++ = (OPJ_BYTE)(val >> 8);
+        *pDst++ = (OPJ_BYTE)val;
+    }
 }
 int imagetopng(opj_image_t * image, const char *write_idf)
 {
-       FILE * volatile writer = NULL;
-       png_structp png = NULL;
-       png_infop info = NULL;
-       png_bytep volatile row_buf = NULL;
-       int nr_comp, color_type;
-       volatile int prec;
-       png_color_8 sig_bit;
-       OPJ_INT32 const* planes[4];
-       int i;
-       OPJ_INT32* volatile buffer32s = NULL;
-       
-       volatile int fails = 1;
-       
-       memset(&sig_bit, 0, sizeof(sig_bit));
-       prec = (int)image->comps[0].prec;
-       planes[0] = image->comps[0].data;
-       nr_comp = (int)image->numcomps;
-       
-       if (nr_comp > 4) {
-               nr_comp = 4;
-       }
-       for (i = 1; i < nr_comp; ++i) {
-               if (image->comps[0].dx != image->comps[i].dx) {
-                       break;
-               }
-               if (image->comps[0].dy != image->comps[i].dy) {
-                       break;
-               }
-               if (image->comps[0].prec != image->comps[i].prec) {
-                       break;
-               }
-               if (image->comps[0].sgnd != image->comps[i].sgnd) {
-                       break;
-               }
-               planes[i] = image->comps[i].data;
-       }
-       if (i != nr_comp) {
-               fprintf(stderr,"imagetopng: All components shall have the same subsampling, same bit depth, same sign.\n");
-               fprintf(stderr,"\tAborting\n");
-               return 1;
-       }
-       for (i = 0; i < nr_comp; ++i) {
-               clip_component(&(image->comps[i]), image->comps[0].prec);
-       }
-       if(prec > 8 && prec < 16)
-       {
-               for (i = 0; i < nr_comp; ++i) {
-                       scale_component(&(image->comps[i]), 16);
-               }
-               prec = 16;
-       }
-       else if(prec < 8 && nr_comp > 1)/* GRAY_ALPHA, RGB, RGB_ALPHA */
-       {
-               for (i = 0; i < nr_comp; ++i) {
-                       scale_component(&(image->comps[i]), 8);
-               }
-               prec = 8;
-       } else if((prec > 1) && (prec < 8) && ((prec == 6) || ((prec & 1)==1))) { /* GRAY with non native precision */
-               if ((prec == 5) || (prec == 6)) {
-                       prec = 8;
-               } else {
-                       prec++;
-               }
-               for (i = 0; i < nr_comp; ++i) {
-                       scale_component(&(image->comps[i]), (OPJ_UINT32)prec);
-               }
-       }
-       
-       if(prec != 1 && prec != 2 && prec != 4 && prec != 8 && prec != 16)
-       {
-               fprintf(stderr,"imagetopng: can not create %s\n\twrong bit_depth %d\n", write_idf, prec);
-               return fails;
-       }
-       
-       writer = fopen(write_idf, "wb");
-       
-       if(writer == NULL) return fails;
-       
-       /* Create and initialize the png_struct with the desired error handler
-        * functions.  If you want to use the default stderr and longjump method,
-        * you can supply NULL for the last three parameters.  We also check that
-        * the library version is compatible with the one used at compile time,
-        * in case we are using dynamically linked libraries.  REQUIRED.
-        */
-       png = png_create_write_struct(PNG_LIBPNG_VER_STRING,
-                                                                                                                               NULL, NULL, NULL);
-       /*png_voidp user_error_ptr, user_error_fn, user_warning_fn); */
-       
-       if(png == NULL) goto fin;
-       
-       /* Allocate/initialize the image information data.  REQUIRED
-        */
-       info = png_create_info_struct(png);
-       
-       if(info == NULL) goto fin;
-       
-       /* Set error handling.  REQUIRED if you are not supplying your own
-        * error handling functions in the png_create_write_struct() call.
-        */
-       if(setjmp(png_jmpbuf(png))) goto fin;
-       
-       /* I/O initialization functions is REQUIRED
-        */
-       png_init_io(png, writer);
-       
-       /* Set the image information here.  Width and height are up to 2^31,
-        * bit_depth is one of 1, 2, 4, 8, or 16, but valid values also depend on
-        * the color_type selected. color_type is one of PNG_COLOR_TYPE_GRAY,
-        * PNG_COLOR_TYPE_GRAY_ALPHA, PNG_COLOR_TYPE_PALETTE, PNG_COLOR_TYPE_RGB,
-        * or PNG_COLOR_TYPE_RGB_ALPHA.  interlace is either PNG_INTERLACE_NONE or
-        * PNG_INTERLACE_ADAM7, and the compression_type and filter_type MUST
-        * currently be PNG_COMPRESSION_TYPE_BASE and PNG_FILTER_TYPE_BASE.
-        * REQUIRED
-        *
-        * ERRORS:
-        *
-        * color_type == PNG_COLOR_TYPE_PALETTE && bit_depth > 8
-        * color_type == PNG_COLOR_TYPE_RGB && bit_depth < 8
-        * color_type == PNG_COLOR_TYPE_GRAY_ALPHA && bit_depth < 8
-        * color_type == PNG_COLOR_TYPE_RGB_ALPHA) && bit_depth < 8
-        *
-        */
-       png_set_compression_level(png, Z_BEST_COMPRESSION);
-       
-       if(nr_comp >= 3) /* RGB(A) */
-       {
-               color_type = PNG_COLOR_TYPE_RGB;
-               sig_bit.red = sig_bit.green = sig_bit.blue = (png_byte)prec;
-       }
-       else /* GRAY(A) */
-       {
-               color_type = PNG_COLOR_TYPE_GRAY;
-               sig_bit.gray = (png_byte)prec;
-       }
-       if((nr_comp & 1) == 0) /* ALPHA */
-       {
-               color_type |= PNG_COLOR_MASK_ALPHA;
-               sig_bit.alpha = (png_byte)prec;
-       }
-       
-       png_set_IHDR(png, info, image->comps[0].w, image->comps[0].h, prec, color_type,
-                                                        PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE,  PNG_FILTER_TYPE_BASE);
-       
-       png_set_sBIT(png, info, &sig_bit);
-       /* png_set_gamma(png, 2.2, 1./2.2); */
-       /* png_set_sRGB(png, info, PNG_sRGB_INTENT_PERCEPTUAL); */
-       png_write_info(png, info);
-       
-       /* setup conversion */
-       {
-               OPJ_SIZE_T rowStride;
-               png_size_t png_row_size;
-               
-               png_row_size = png_get_rowbytes(png, info);
-               rowStride = ((OPJ_SIZE_T)image->comps[0].w * (OPJ_SIZE_T)nr_comp * (OPJ_SIZE_T)prec + 7U) / 8U;
-               if (rowStride != (OPJ_SIZE_T)png_row_size) {
-                       fprintf(stderr, "Invalid PNG row size\n");
-                       goto fin;
-               }
-               row_buf = (png_bytep)malloc(png_row_size);
-               if (row_buf == NULL) {
-                       fprintf(stderr, "Can't allocate memory for PNG row\n");
-                       goto fin;
-               }
-               buffer32s = (OPJ_INT32*)malloc((OPJ_SIZE_T)image->comps[0].w * (OPJ_SIZE_T)nr_comp * sizeof(OPJ_INT32));
-               if (buffer32s == NULL) {
-                       fprintf(stderr, "Can't allocate memory for interleaved 32s row\n");
-                       goto fin;
-               }
-       }
-       
-       /* convert */
-       {
-               OPJ_SIZE_T width= image->comps[0].w;
-               OPJ_UINT32 y;
-               convert_32s_PXCX cvtPxToCx = convert_32s_PXCX_LUT[nr_comp];
-               convert_32sXXx_C1R cvt32sToPack = NULL;
-               OPJ_INT32 adjust = image->comps[0].sgnd ? 1 << (prec - 1) : 0;
-               png_bytep row_buf_cpy = row_buf;
-               OPJ_INT32* buffer32s_cpy = buffer32s;
-
-               switch (prec) {
-                       case 1:
-                       case 2:
-                       case 4:
-                       case 8:
-                               cvt32sToPack = convert_32sXXu_C1R_LUT[prec];
-                               break;
-                       case 16:
-                               cvt32sToPack = convert_32s16u_C1R;
-                               break;
-                       default:
-                               /* never here */
-                               break;
-               }
-       
-               for(y = 0; y < image->comps[0].h; ++y)
-               {
-                       cvtPxToCx(planes, buffer32s_cpy, width, adjust);
-                       cvt32sToPack(buffer32s_cpy, row_buf_cpy, width * (OPJ_SIZE_T)nr_comp);
-                       png_write_row(png, row_buf_cpy);
-                       planes[0] += width;
-                       planes[1] += width;
-                       planes[2] += width;
-                       planes[3] += width;
-               }
-       }
-
-       png_write_end(png, info);
-       
-       fails = 0;
-       
+    FILE * volatile writer = NULL;
+    png_structp png = NULL;
+    png_infop info = NULL;
+    png_bytep volatile row_buf = NULL;
+    int nr_comp, color_type;
+    volatile int prec;
+    png_color_8 sig_bit;
+    OPJ_INT32 const* planes[4];
+    int i;
+    OPJ_INT32* volatile buffer32s = NULL;
+
+    volatile int fails = 1;
+
+    memset(&sig_bit, 0, sizeof(sig_bit));
+    prec = (int)image->comps[0].prec;
+    planes[0] = image->comps[0].data;
+    nr_comp = (int)image->numcomps;
+
+    if (nr_comp > 4) {
+        nr_comp = 4;
+    }
+    for (i = 1; i < nr_comp; ++i) {
+        if (image->comps[0].dx != image->comps[i].dx) {
+            break;
+        }
+        if (image->comps[0].dy != image->comps[i].dy) {
+            break;
+        }
+        if (image->comps[0].prec != image->comps[i].prec) {
+            break;
+        }
+        if (image->comps[0].sgnd != image->comps[i].sgnd) {
+            break;
+        }
+        planes[i] = image->comps[i].data;
+    }
+    if (i != nr_comp) {
+        fprintf(stderr,
+                "imagetopng: All components shall have the same subsampling, same bit depth, same sign.\n");
+        fprintf(stderr, "\tAborting\n");
+        return 1;
+    }
+    for (i = 0; i < nr_comp; ++i) {
+        clip_component(&(image->comps[i]), image->comps[0].prec);
+    }
+    if (prec > 8 && prec < 16) {
+        for (i = 0; i < nr_comp; ++i) {
+            scale_component(&(image->comps[i]), 16);
+        }
+        prec = 16;
+    } else if (prec < 8 && nr_comp > 1) { /* GRAY_ALPHA, RGB, RGB_ALPHA */
+        for (i = 0; i < nr_comp; ++i) {
+            scale_component(&(image->comps[i]), 8);
+        }
+        prec = 8;
+    } else if ((prec > 1) && (prec < 8) && ((prec == 6) ||
+                                            ((prec & 1) == 1))) { /* GRAY with non native precision */
+        if ((prec == 5) || (prec == 6)) {
+            prec = 8;
+        } else {
+            prec++;
+        }
+        for (i = 0; i < nr_comp; ++i) {
+            scale_component(&(image->comps[i]), (OPJ_UINT32)prec);
+        }
+    }
+
+    if (prec != 1 && prec != 2 && prec != 4 && prec != 8 && prec != 16) {
+        fprintf(stderr, "imagetopng: can not create %s\n\twrong bit_depth %d\n",
+                write_idf, prec);
+        return fails;
+    }
+
+    writer = fopen(write_idf, "wb");
+
+    if (writer == NULL) {
+        return fails;
+    }
+
+    /* Create and initialize the png_struct with the desired error handler
+     * functions.  If you want to use the default stderr and longjump method,
+     * you can supply NULL for the last three parameters.  We also check that
+     * the library version is compatible with the one used at compile time,
+     * in case we are using dynamically linked libraries.  REQUIRED.
+     */
+    png = png_create_write_struct(PNG_LIBPNG_VER_STRING,
+                                  NULL, NULL, NULL);
+    /*png_voidp user_error_ptr, user_error_fn, user_warning_fn); */
+
+    if (png == NULL) {
+        goto fin;
+    }
+
+    /* Allocate/initialize the image information data.  REQUIRED
+     */
+    info = png_create_info_struct(png);
+
+    if (info == NULL) {
+        goto fin;
+    }
+
+    /* Set error handling.  REQUIRED if you are not supplying your own
+     * error handling functions in the png_create_write_struct() call.
+     */
+    if (setjmp(png_jmpbuf(png))) {
+        goto fin;
+    }
+
+    /* I/O initialization functions is REQUIRED
+     */
+    png_init_io(png, writer);
+
+    /* Set the image information here.  Width and height are up to 2^31,
+     * bit_depth is one of 1, 2, 4, 8, or 16, but valid values also depend on
+     * the color_type selected. color_type is one of PNG_COLOR_TYPE_GRAY,
+     * PNG_COLOR_TYPE_GRAY_ALPHA, PNG_COLOR_TYPE_PALETTE, PNG_COLOR_TYPE_RGB,
+     * or PNG_COLOR_TYPE_RGB_ALPHA.  interlace is either PNG_INTERLACE_NONE or
+     * PNG_INTERLACE_ADAM7, and the compression_type and filter_type MUST
+     * currently be PNG_COMPRESSION_TYPE_BASE and PNG_FILTER_TYPE_BASE.
+     * REQUIRED
+     *
+     * ERRORS:
+     *
+     * color_type == PNG_COLOR_TYPE_PALETTE && bit_depth > 8
+     * color_type == PNG_COLOR_TYPE_RGB && bit_depth < 8
+     * color_type == PNG_COLOR_TYPE_GRAY_ALPHA && bit_depth < 8
+     * color_type == PNG_COLOR_TYPE_RGB_ALPHA) && bit_depth < 8
+     *
+     */
+    png_set_compression_level(png, Z_BEST_COMPRESSION);
+
+    if (nr_comp >= 3) { /* RGB(A) */
+        color_type = PNG_COLOR_TYPE_RGB;
+        sig_bit.red = sig_bit.green = sig_bit.blue = (png_byte)prec;
+    } else { /* GRAY(A) */
+        color_type = PNG_COLOR_TYPE_GRAY;
+        sig_bit.gray = (png_byte)prec;
+    }
+    if ((nr_comp & 1) == 0) { /* ALPHA */
+        color_type |= PNG_COLOR_MASK_ALPHA;
+        sig_bit.alpha = (png_byte)prec;
+    }
+
+    png_set_IHDR(png, info, image->comps[0].w, image->comps[0].h, prec, color_type,
+                 PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE,  PNG_FILTER_TYPE_BASE);
+
+    png_set_sBIT(png, info, &sig_bit);
+    /* png_set_gamma(png, 2.2, 1./2.2); */
+    /* png_set_sRGB(png, info, PNG_sRGB_INTENT_PERCEPTUAL); */
+    png_write_info(png, info);
+
+    /* setup conversion */
+    {
+        OPJ_SIZE_T rowStride;
+        png_size_t png_row_size;
+
+        png_row_size = png_get_rowbytes(png, info);
+        rowStride = ((OPJ_SIZE_T)image->comps[0].w * (OPJ_SIZE_T)nr_comp *
+                     (OPJ_SIZE_T)prec + 7U) / 8U;
+        if (rowStride != (OPJ_SIZE_T)png_row_size) {
+            fprintf(stderr, "Invalid PNG row size\n");
+            goto fin;
+        }
+        row_buf = (png_bytep)malloc(png_row_size);
+        if (row_buf == NULL) {
+            fprintf(stderr, "Can't allocate memory for PNG row\n");
+            goto fin;
+        }
+        buffer32s = (OPJ_INT32*)malloc((OPJ_SIZE_T)image->comps[0].w *
+                                       (OPJ_SIZE_T)nr_comp * sizeof(OPJ_INT32));
+        if (buffer32s == NULL) {
+            fprintf(stderr, "Can't allocate memory for interleaved 32s row\n");
+            goto fin;
+        }
+    }
+
+    /* convert */
+    {
+        OPJ_SIZE_T width = image->comps[0].w;
+        OPJ_UINT32 y;
+        convert_32s_PXCX cvtPxToCx = convert_32s_PXCX_LUT[nr_comp];
+        convert_32sXXx_C1R cvt32sToPack = NULL;
+        OPJ_INT32 adjust = image->comps[0].sgnd ? 1 << (prec - 1) : 0;
+        png_bytep row_buf_cpy = row_buf;
+        OPJ_INT32* buffer32s_cpy = buffer32s;
+
+        switch (prec) {
+        case 1:
+        case 2:
+        case 4:
+        case 8:
+            cvt32sToPack = convert_32sXXu_C1R_LUT[prec];
+            break;
+        case 16:
+            cvt32sToPack = convert_32s16u_C1R;
+            break;
+        default:
+            /* never here */
+            break;
+        }
+
+        for (y = 0; y < image->comps[0].h; ++y) {
+            cvtPxToCx(planes, buffer32s_cpy, width, adjust);
+            cvt32sToPack(buffer32s_cpy, row_buf_cpy, width * (OPJ_SIZE_T)nr_comp);
+            png_write_row(png, row_buf_cpy);
+            planes[0] += width;
+            planes[1] += width;
+            planes[2] += width;
+            planes[3] += width;
+        }
+    }
+
+    png_write_end(png, info);
+
+    fails = 0;
+
 fin:
-       if(png) {
-               png_destroy_write_struct(&png, &info);
-       }
-       if(row_buf) {
-               free(row_buf);
-       }
-       if(buffer32s) {
-               free(buffer32s);
-       }
-       fclose(writer);
-       
-       if(fails) (void)remove(write_idf); /* ignore return value */
-       
-       return fails;
+    if (png) {
+        png_destroy_write_struct(&png, &info);
+    }
+    if (row_buf) {
+        free(row_buf);
+    }
+    if (buffer32s) {
+        free(buffer32s);
+    }
+    fclose(writer);
+
+    if (fails) {
+        (void)remove(write_idf);    /* ignore return value */
+    }
+
+    return fails;
 }/* imagetopng() */
index 143d3be6ff635c3adc21c2b9ca8321fff7ef0802..c4eba4b7ec295a79af73fa7cb54f3e69b4c70dee 100644 (file)
 #include "convert.h"
 
 /* -->> -->> -->> -->>
+
  TIFF IMAGE FORMAT
+
  <<-- <<-- <<-- <<-- */
 #define PUTBITS2(s, nb) \
-       trailing <<= remaining; \
-       trailing |= (unsigned int)((s) >> (nb - remaining)); \
-       *pDst++ = (OPJ_BYTE)trailing; \
-       trailing = (unsigned int)((s) & ((1U << (nb - remaining)) - 1U)); \
-       if (nb >= (remaining + 8)) { \
-               *pDst++ = (OPJ_BYTE)(trailing >> (nb - (remaining + 8))); \
-               trailing &= (unsigned int)((1U << (nb - (remaining + 8))) - 1U); \
-               remaining += 16 - nb; \
-       } else { \
-               remaining += 8 - nb; \
-       }
+    trailing <<= remaining; \
+    trailing |= (unsigned int)((s) >> (nb - remaining)); \
+    *pDst++ = (OPJ_BYTE)trailing; \
+    trailing = (unsigned int)((s) & ((1U << (nb - remaining)) - 1U)); \
+    if (nb >= (remaining + 8)) { \
+        *pDst++ = (OPJ_BYTE)(trailing >> (nb - (remaining + 8))); \
+        trailing &= (unsigned int)((1U << (nb - (remaining + 8))) - 1U); \
+        remaining += 16 - nb; \
+    } else { \
+        remaining += 8 - nb; \
+    }
 
 #define PUTBITS(s, nb) \
   if (nb >= remaining) { \
-               PUTBITS2(s, nb) \
-       } else { \
-               trailing <<= nb; \
-               trailing |= (unsigned int)(s); \
-               remaining -= nb; \
-       }
+        PUTBITS2(s, nb) \
+    } else { \
+        trailing <<= nb; \
+        trailing |= (unsigned int)(s); \
+        remaining -= nb; \
+    }
 #define FLUSHBITS() \
-       if (remaining != 8) { \
-               trailing <<= remaining; \
-               *pDst++ = (OPJ_BYTE)trailing; \
-       }
+    if (remaining != 8) { \
+        trailing <<= remaining; \
+        *pDst++ = (OPJ_BYTE)trailing; \
+    }
 
-static void tif_32sto3u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst, OPJ_SIZE_T length)
+static void tif_32sto3u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
+                        OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i+=8U) {
-               OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i+0];
-               OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i+1];
-               OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i+2];
-               OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i+3];
-               OPJ_UINT32 src4 = (OPJ_UINT32)pSrc[i+4];
-               OPJ_UINT32 src5 = (OPJ_UINT32)pSrc[i+5];
-               OPJ_UINT32 src6 = (OPJ_UINT32)pSrc[i+6];
-               OPJ_UINT32 src7 = (OPJ_UINT32)pSrc[i+7];
-                       
-               *pDst++ = (OPJ_BYTE)((src0 << 5) | (src1 << 2) | (src2 >> 1));
-               *pDst++ = (OPJ_BYTE)((src2 << 7) | (src3 << 4) | (src4 << 1) | (src5 >> 2));
-               *pDst++ = (OPJ_BYTE)((src5 << 6) | (src6 << 3) | (src7));
-       }
-               
-       if (length & 7U) {
-               unsigned int trailing = 0U;
-               int remaining = 8U;
-               length &= 7U;
-               PUTBITS((OPJ_UINT32)pSrc[i+0], 3)
-               if (length > 1U) {
-                       PUTBITS((OPJ_UINT32)pSrc[i+1], 3)
-                       if (length > 2U) {
-                               PUTBITS((OPJ_UINT32)pSrc[i+2], 3)
-                               if (length > 3U) {
-                                       PUTBITS((OPJ_UINT32)pSrc[i+3], 3)
-                                       if (length > 4U) {
-                                               PUTBITS((OPJ_UINT32)pSrc[i+4], 3)
-                                               if (length > 5U) {
-                                                       PUTBITS((OPJ_UINT32)pSrc[i+5], 3)
-                                                       if (length > 6U) {
-                                                               PUTBITS((OPJ_UINT32)pSrc[i+6], 3)
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-               FLUSHBITS()
-       }
+    OPJ_SIZE_T i;
+
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
+        OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
+        OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
+        OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i + 2];
+        OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i + 3];
+        OPJ_UINT32 src4 = (OPJ_UINT32)pSrc[i + 4];
+        OPJ_UINT32 src5 = (OPJ_UINT32)pSrc[i + 5];
+        OPJ_UINT32 src6 = (OPJ_UINT32)pSrc[i + 6];
+        OPJ_UINT32 src7 = (OPJ_UINT32)pSrc[i + 7];
+
+        *pDst++ = (OPJ_BYTE)((src0 << 5) | (src1 << 2) | (src2 >> 1));
+        *pDst++ = (OPJ_BYTE)((src2 << 7) | (src3 << 4) | (src4 << 1) | (src5 >> 2));
+        *pDst++ = (OPJ_BYTE)((src5 << 6) | (src6 << 3) | (src7));
+    }
+
+    if (length & 7U) {
+        unsigned int trailing = 0U;
+        int remaining = 8U;
+        length &= 7U;
+        PUTBITS((OPJ_UINT32)pSrc[i + 0], 3)
+        if (length > 1U) {
+            PUTBITS((OPJ_UINT32)pSrc[i + 1], 3)
+            if (length > 2U) {
+                PUTBITS((OPJ_UINT32)pSrc[i + 2], 3)
+                if (length > 3U) {
+                    PUTBITS((OPJ_UINT32)pSrc[i + 3], 3)
+                    if (length > 4U) {
+                        PUTBITS((OPJ_UINT32)pSrc[i + 4], 3)
+                        if (length > 5U) {
+                            PUTBITS((OPJ_UINT32)pSrc[i + 5], 3)
+                            if (length > 6U) {
+                                PUTBITS((OPJ_UINT32)pSrc[i + 6], 3)
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        FLUSHBITS()
+    }
 }
 
-static void tif_32sto5u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst, OPJ_SIZE_T length)
+static void tif_32sto5u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
+                        OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i+=8U) {
-               OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i+0];
-               OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i+1];
-               OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i+2];
-               OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i+3];
-               OPJ_UINT32 src4 = (OPJ_UINT32)pSrc[i+4];
-               OPJ_UINT32 src5 = (OPJ_UINT32)pSrc[i+5];
-               OPJ_UINT32 src6 = (OPJ_UINT32)pSrc[i+6];
-               OPJ_UINT32 src7 = (OPJ_UINT32)pSrc[i+7];
-               
-               *pDst++ = (OPJ_BYTE)((src0 << 3) | (src1 >> 2));
-               *pDst++ = (OPJ_BYTE)((src1 << 6) | (src2 << 1) | (src3 >> 4));
-               *pDst++ = (OPJ_BYTE)((src3 << 4) | (src4 >> 1));
-               *pDst++ = (OPJ_BYTE)((src4 << 7) | (src5 << 2) | (src6 >> 3));
-               *pDst++ = (OPJ_BYTE)((src6 << 5) | (src7));
-
-       }
-       
-       if (length & 7U) {
-               unsigned int trailing = 0U;
-               int remaining = 8U;
-               length &= 7U;
-               PUTBITS((OPJ_UINT32)pSrc[i+0], 5)
-               if (length > 1U) {
-                       PUTBITS((OPJ_UINT32)pSrc[i+1], 5)
-                       if (length > 2U) {
-                               PUTBITS((OPJ_UINT32)pSrc[i+2], 5)
-                               if (length > 3U) {
-                                       PUTBITS((OPJ_UINT32)pSrc[i+3], 5)
-                                       if (length > 4U) {
-                                               PUTBITS((OPJ_UINT32)pSrc[i+4], 5)
-                                               if (length > 5U) {
-                                                       PUTBITS((OPJ_UINT32)pSrc[i+5], 5)
-                                                       if (length > 6U) {
-                                                               PUTBITS((OPJ_UINT32)pSrc[i+6], 5)
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-               FLUSHBITS()
-       }
+    OPJ_SIZE_T i;
+
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
+        OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
+        OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
+        OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i + 2];
+        OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i + 3];
+        OPJ_UINT32 src4 = (OPJ_UINT32)pSrc[i + 4];
+        OPJ_UINT32 src5 = (OPJ_UINT32)pSrc[i + 5];
+        OPJ_UINT32 src6 = (OPJ_UINT32)pSrc[i + 6];
+        OPJ_UINT32 src7 = (OPJ_UINT32)pSrc[i + 7];
+
+        *pDst++ = (OPJ_BYTE)((src0 << 3) | (src1 >> 2));
+        *pDst++ = (OPJ_BYTE)((src1 << 6) | (src2 << 1) | (src3 >> 4));
+        *pDst++ = (OPJ_BYTE)((src3 << 4) | (src4 >> 1));
+        *pDst++ = (OPJ_BYTE)((src4 << 7) | (src5 << 2) | (src6 >> 3));
+        *pDst++ = (OPJ_BYTE)((src6 << 5) | (src7));
+
+    }
+
+    if (length & 7U) {
+        unsigned int trailing = 0U;
+        int remaining = 8U;
+        length &= 7U;
+        PUTBITS((OPJ_UINT32)pSrc[i + 0], 5)
+        if (length > 1U) {
+            PUTBITS((OPJ_UINT32)pSrc[i + 1], 5)
+            if (length > 2U) {
+                PUTBITS((OPJ_UINT32)pSrc[i + 2], 5)
+                if (length > 3U) {
+                    PUTBITS((OPJ_UINT32)pSrc[i + 3], 5)
+                    if (length > 4U) {
+                        PUTBITS((OPJ_UINT32)pSrc[i + 4], 5)
+                        if (length > 5U) {
+                            PUTBITS((OPJ_UINT32)pSrc[i + 5], 5)
+                            if (length > 6U) {
+                                PUTBITS((OPJ_UINT32)pSrc[i + 6], 5)
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        FLUSHBITS()
+    }
 }
 
-static void tif_32sto7u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst, OPJ_SIZE_T length)
+static void tif_32sto7u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
+                        OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i+=8U) {
-               OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i+0];
-               OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i+1];
-               OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i+2];
-               OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i+3];
-               OPJ_UINT32 src4 = (OPJ_UINT32)pSrc[i+4];
-               OPJ_UINT32 src5 = (OPJ_UINT32)pSrc[i+5];
-               OPJ_UINT32 src6 = (OPJ_UINT32)pSrc[i+6];
-               OPJ_UINT32 src7 = (OPJ_UINT32)pSrc[i+7];
-               
-               *pDst++ = (OPJ_BYTE)((src0 << 1) | (src1 >> 6));
-               *pDst++ = (OPJ_BYTE)((src1 << 2) | (src2 >> 5));
-               *pDst++ = (OPJ_BYTE)((src2 << 3) | (src3 >> 4));
-               *pDst++ = (OPJ_BYTE)((src3 << 4) | (src4 >> 3));
-               *pDst++ = (OPJ_BYTE)((src4 << 5) | (src5 >> 2));
-               *pDst++ = (OPJ_BYTE)((src5 << 6) | (src6 >> 1));
-               *pDst++ = (OPJ_BYTE)((src6 << 7) | (src7));
-       }
-       
-       if (length & 7U) {
-               unsigned int trailing = 0U;
-               int remaining = 8U;
-               length &= 7U;
-               PUTBITS((OPJ_UINT32)pSrc[i+0], 7)
-               if (length > 1U) {
-                       PUTBITS((OPJ_UINT32)pSrc[i+1], 7)
-                       if (length > 2U) {
-                               PUTBITS((OPJ_UINT32)pSrc[i+2], 7)
-                               if (length > 3U) {
-                                       PUTBITS((OPJ_UINT32)pSrc[i+3], 7)
-                                       if (length > 4U) {
-                                               PUTBITS((OPJ_UINT32)pSrc[i+4], 7)
-                                               if (length > 5U) {
-                                                       PUTBITS((OPJ_UINT32)pSrc[i+5], 7)
-                                                       if (length > 6U) {
-                                                               PUTBITS((OPJ_UINT32)pSrc[i+6], 7)
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-               FLUSHBITS()
-       }
+    OPJ_SIZE_T i;
+
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
+        OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
+        OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
+        OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i + 2];
+        OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i + 3];
+        OPJ_UINT32 src4 = (OPJ_UINT32)pSrc[i + 4];
+        OPJ_UINT32 src5 = (OPJ_UINT32)pSrc[i + 5];
+        OPJ_UINT32 src6 = (OPJ_UINT32)pSrc[i + 6];
+        OPJ_UINT32 src7 = (OPJ_UINT32)pSrc[i + 7];
+
+        *pDst++ = (OPJ_BYTE)((src0 << 1) | (src1 >> 6));
+        *pDst++ = (OPJ_BYTE)((src1 << 2) | (src2 >> 5));
+        *pDst++ = (OPJ_BYTE)((src2 << 3) | (src3 >> 4));
+        *pDst++ = (OPJ_BYTE)((src3 << 4) | (src4 >> 3));
+        *pDst++ = (OPJ_BYTE)((src4 << 5) | (src5 >> 2));
+        *pDst++ = (OPJ_BYTE)((src5 << 6) | (src6 >> 1));
+        *pDst++ = (OPJ_BYTE)((src6 << 7) | (src7));
+    }
+
+    if (length & 7U) {
+        unsigned int trailing = 0U;
+        int remaining = 8U;
+        length &= 7U;
+        PUTBITS((OPJ_UINT32)pSrc[i + 0], 7)
+        if (length > 1U) {
+            PUTBITS((OPJ_UINT32)pSrc[i + 1], 7)
+            if (length > 2U) {
+                PUTBITS((OPJ_UINT32)pSrc[i + 2], 7)
+                if (length > 3U) {
+                    PUTBITS((OPJ_UINT32)pSrc[i + 3], 7)
+                    if (length > 4U) {
+                        PUTBITS((OPJ_UINT32)pSrc[i + 4], 7)
+                        if (length > 5U) {
+                            PUTBITS((OPJ_UINT32)pSrc[i + 5], 7)
+                            if (length > 6U) {
+                                PUTBITS((OPJ_UINT32)pSrc[i + 6], 7)
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        FLUSHBITS()
+    }
 }
 
-static void tif_32sto9u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst, OPJ_SIZE_T length)
+static void tif_32sto9u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
+                        OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i+=8U) {
-               OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i+0];
-               OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i+1];
-               OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i+2];
-               OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i+3];
-               OPJ_UINT32 src4 = (OPJ_UINT32)pSrc[i+4];
-               OPJ_UINT32 src5 = (OPJ_UINT32)pSrc[i+5];
-               OPJ_UINT32 src6 = (OPJ_UINT32)pSrc[i+6];
-               OPJ_UINT32 src7 = (OPJ_UINT32)pSrc[i+7];
-               
-               *pDst++ = (OPJ_BYTE)((src0 >> 1));
-               *pDst++ = (OPJ_BYTE)((src0 << 7) | (src1 >> 2));
-               *pDst++ = (OPJ_BYTE)((src1 << 6) | (src2 >> 3));
-               *pDst++ = (OPJ_BYTE)((src2 << 5) | (src3 >> 4));
-               *pDst++ = (OPJ_BYTE)((src3 << 4) | (src4 >> 5));
-               *pDst++ = (OPJ_BYTE)((src4 << 3) | (src5 >> 6));
-               *pDst++ = (OPJ_BYTE)((src5 << 2) | (src6 >> 7));
-               *pDst++ = (OPJ_BYTE)((src6 << 1) | (src7 >> 8));
-               *pDst++ = (OPJ_BYTE)(src7);
-       }
-       
-       if (length & 7U) {
-               unsigned int trailing = 0U;
-               int remaining = 8U;
-               length &= 7U;
-               PUTBITS2((OPJ_UINT32)pSrc[i+0], 9)
-               if (length > 1U) {
-                       PUTBITS2((OPJ_UINT32)pSrc[i+1], 9)
-                       if (length > 2U) {
-                               PUTBITS2((OPJ_UINT32)pSrc[i+2], 9)
-                               if (length > 3U) {
-                                       PUTBITS2((OPJ_UINT32)pSrc[i+3], 9)
-                                       if (length > 4U) {
-                                               PUTBITS2((OPJ_UINT32)pSrc[i+4], 9)
-                                               if (length > 5U) {
-                                                       PUTBITS2((OPJ_UINT32)pSrc[i+5], 9)
-                                                       if (length > 6U) {
-                                                               PUTBITS2((OPJ_UINT32)pSrc[i+6], 9)
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-               FLUSHBITS()
-       }
+    OPJ_SIZE_T i;
+
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
+        OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
+        OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
+        OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i + 2];
+        OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i + 3];
+        OPJ_UINT32 src4 = (OPJ_UINT32)pSrc[i + 4];
+        OPJ_UINT32 src5 = (OPJ_UINT32)pSrc[i + 5];
+        OPJ_UINT32 src6 = (OPJ_UINT32)pSrc[i + 6];
+        OPJ_UINT32 src7 = (OPJ_UINT32)pSrc[i + 7];
+
+        *pDst++ = (OPJ_BYTE)((src0 >> 1));
+        *pDst++ = (OPJ_BYTE)((src0 << 7) | (src1 >> 2));
+        *pDst++ = (OPJ_BYTE)((src1 << 6) | (src2 >> 3));
+        *pDst++ = (OPJ_BYTE)((src2 << 5) | (src3 >> 4));
+        *pDst++ = (OPJ_BYTE)((src3 << 4) | (src4 >> 5));
+        *pDst++ = (OPJ_BYTE)((src4 << 3) | (src5 >> 6));
+        *pDst++ = (OPJ_BYTE)((src5 << 2) | (src6 >> 7));
+        *pDst++ = (OPJ_BYTE)((src6 << 1) | (src7 >> 8));
+        *pDst++ = (OPJ_BYTE)(src7);
+    }
+
+    if (length & 7U) {
+        unsigned int trailing = 0U;
+        int remaining = 8U;
+        length &= 7U;
+        PUTBITS2((OPJ_UINT32)pSrc[i + 0], 9)
+        if (length > 1U) {
+            PUTBITS2((OPJ_UINT32)pSrc[i + 1], 9)
+            if (length > 2U) {
+                PUTBITS2((OPJ_UINT32)pSrc[i + 2], 9)
+                if (length > 3U) {
+                    PUTBITS2((OPJ_UINT32)pSrc[i + 3], 9)
+                    if (length > 4U) {
+                        PUTBITS2((OPJ_UINT32)pSrc[i + 4], 9)
+                        if (length > 5U) {
+                            PUTBITS2((OPJ_UINT32)pSrc[i + 5], 9)
+                            if (length > 6U) {
+                                PUTBITS2((OPJ_UINT32)pSrc[i + 6], 9)
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        FLUSHBITS()
+    }
 }
 
-static void tif_32sto10u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst, OPJ_SIZE_T length)
+static void tif_32sto10u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
+                         OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)3U); i+=4U) {
-               OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i+0];
-               OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i+1];
-               OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i+2];
-               OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i+3];
-               
-               *pDst++ = (OPJ_BYTE)(src0 >> 2);
-               *pDst++ = (OPJ_BYTE)(((src0 & 0x3U) << 6) | (src1 >> 4));
-               *pDst++ = (OPJ_BYTE)(((src1 & 0xFU) << 4) | (src2 >> 6));
-               *pDst++ = (OPJ_BYTE)(((src2 & 0x3FU) << 2) | (src3 >> 8));
-               *pDst++ = (OPJ_BYTE)(src3);
-       }
-       
-       if (length & 3U) {
-               OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i+0];
-               OPJ_UINT32 src1 = 0U;
-               OPJ_UINT32 src2 = 0U;
-               length = length & 3U;
-               
-               if (length > 1U) {
-                       src1 = (OPJ_UINT32)pSrc[i+1];
-                       if (length > 2U) {
-                               src2 = (OPJ_UINT32)pSrc[i+2];
-                       }
-               }
-               *pDst++ = (OPJ_BYTE)(src0 >> 2);
-               *pDst++ = (OPJ_BYTE)(((src0 & 0x3U) << 6) | (src1 >> 4));
-               if (length > 1U) {
-                       *pDst++ = (OPJ_BYTE)(((src1 & 0xFU) << 4) | (src2 >> 6));
-                       if (length > 2U) {
-                               *pDst++ = (OPJ_BYTE)(((src2 & 0x3FU) << 2));
-                       }
-               }
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)3U); i += 4U) {
+        OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
+        OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
+        OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i + 2];
+        OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i + 3];
+
+        *pDst++ = (OPJ_BYTE)(src0 >> 2);
+        *pDst++ = (OPJ_BYTE)(((src0 & 0x3U) << 6) | (src1 >> 4));
+        *pDst++ = (OPJ_BYTE)(((src1 & 0xFU) << 4) | (src2 >> 6));
+        *pDst++ = (OPJ_BYTE)(((src2 & 0x3FU) << 2) | (src3 >> 8));
+        *pDst++ = (OPJ_BYTE)(src3);
+    }
+
+    if (length & 3U) {
+        OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
+        OPJ_UINT32 src1 = 0U;
+        OPJ_UINT32 src2 = 0U;
+        length = length & 3U;
+
+        if (length > 1U) {
+            src1 = (OPJ_UINT32)pSrc[i + 1];
+            if (length > 2U) {
+                src2 = (OPJ_UINT32)pSrc[i + 2];
+            }
+        }
+        *pDst++ = (OPJ_BYTE)(src0 >> 2);
+        *pDst++ = (OPJ_BYTE)(((src0 & 0x3U) << 6) | (src1 >> 4));
+        if (length > 1U) {
+            *pDst++ = (OPJ_BYTE)(((src1 & 0xFU) << 4) | (src2 >> 6));
+            if (length > 2U) {
+                *pDst++ = (OPJ_BYTE)(((src2 & 0x3FU) << 2));
+            }
+        }
+    }
 }
-static void tif_32sto11u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst, OPJ_SIZE_T length)
+static void tif_32sto11u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
+                         OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i+=8U) {
-               OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i+0];
-               OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i+1];
-               OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i+2];
-               OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i+3];
-               OPJ_UINT32 src4 = (OPJ_UINT32)pSrc[i+4];
-               OPJ_UINT32 src5 = (OPJ_UINT32)pSrc[i+5];
-               OPJ_UINT32 src6 = (OPJ_UINT32)pSrc[i+6];
-               OPJ_UINT32 src7 = (OPJ_UINT32)pSrc[i+7];
-               
-               *pDst++ = (OPJ_BYTE)((src0 >> 3));
-               *pDst++ = (OPJ_BYTE)((src0 << 5) | (src1 >> 6));
-               *pDst++ = (OPJ_BYTE)((src1 << 2) | (src2 >> 9));
-               *pDst++ = (OPJ_BYTE)((src2 >> 1));
-               *pDst++ = (OPJ_BYTE)((src2 << 7) | (src3 >> 4));
-               *pDst++ = (OPJ_BYTE)((src3 << 4) | (src4 >> 7));
-               *pDst++ = (OPJ_BYTE)((src4 << 1) | (src5 >> 10));
-               *pDst++ = (OPJ_BYTE)((src5 >> 2));
-               *pDst++ = (OPJ_BYTE)((src5 << 6) | (src6 >> 5));
-               *pDst++ = (OPJ_BYTE)((src6 << 3) | (src7 >> 8));
-               *pDst++ = (OPJ_BYTE)(src7);
-       }
-       
-       if (length & 7U) {
-               unsigned int trailing = 0U;
-               int remaining = 8U;
-               length &= 7U;
-               PUTBITS2((OPJ_UINT32)pSrc[i+0], 11)
-               if (length > 1U) {
-                       PUTBITS2((OPJ_UINT32)pSrc[i+1], 11)
-                       if (length > 2U) {
-                               PUTBITS2((OPJ_UINT32)pSrc[i+2], 11)
-                               if (length > 3U) {
-                                       PUTBITS2((OPJ_UINT32)pSrc[i+3], 11)
-                                       if (length > 4U) {
-                                               PUTBITS2((OPJ_UINT32)pSrc[i+4], 11)
-                                               if (length > 5U) {
-                                                       PUTBITS2((OPJ_UINT32)pSrc[i+5], 11)
-                                                       if (length > 6U) {
-                                                               PUTBITS2((OPJ_UINT32)pSrc[i+6], 11)
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-               FLUSHBITS()
-       }
+    OPJ_SIZE_T i;
+
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
+        OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
+        OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
+        OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i + 2];
+        OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i + 3];
+        OPJ_UINT32 src4 = (OPJ_UINT32)pSrc[i + 4];
+        OPJ_UINT32 src5 = (OPJ_UINT32)pSrc[i + 5];
+        OPJ_UINT32 src6 = (OPJ_UINT32)pSrc[i + 6];
+        OPJ_UINT32 src7 = (OPJ_UINT32)pSrc[i + 7];
+
+        *pDst++ = (OPJ_BYTE)((src0 >> 3));
+        *pDst++ = (OPJ_BYTE)((src0 << 5) | (src1 >> 6));
+        *pDst++ = (OPJ_BYTE)((src1 << 2) | (src2 >> 9));
+        *pDst++ = (OPJ_BYTE)((src2 >> 1));
+        *pDst++ = (OPJ_BYTE)((src2 << 7) | (src3 >> 4));
+        *pDst++ = (OPJ_BYTE)((src3 << 4) | (src4 >> 7));
+        *pDst++ = (OPJ_BYTE)((src4 << 1) | (src5 >> 10));
+        *pDst++ = (OPJ_BYTE)((src5 >> 2));
+        *pDst++ = (OPJ_BYTE)((src5 << 6) | (src6 >> 5));
+        *pDst++ = (OPJ_BYTE)((src6 << 3) | (src7 >> 8));
+        *pDst++ = (OPJ_BYTE)(src7);
+    }
+
+    if (length & 7U) {
+        unsigned int trailing = 0U;
+        int remaining = 8U;
+        length &= 7U;
+        PUTBITS2((OPJ_UINT32)pSrc[i + 0], 11)
+        if (length > 1U) {
+            PUTBITS2((OPJ_UINT32)pSrc[i + 1], 11)
+            if (length > 2U) {
+                PUTBITS2((OPJ_UINT32)pSrc[i + 2], 11)
+                if (length > 3U) {
+                    PUTBITS2((OPJ_UINT32)pSrc[i + 3], 11)
+                    if (length > 4U) {
+                        PUTBITS2((OPJ_UINT32)pSrc[i + 4], 11)
+                        if (length > 5U) {
+                            PUTBITS2((OPJ_UINT32)pSrc[i + 5], 11)
+                            if (length > 6U) {
+                                PUTBITS2((OPJ_UINT32)pSrc[i + 6], 11)
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        FLUSHBITS()
+    }
 }
-static void tif_32sto12u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst, OPJ_SIZE_T length)
+static void tif_32sto12u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
+                         OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)1U); i+=2U) {
-               OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i+0];
-               OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i+1];
-               
-               *pDst++ = (OPJ_BYTE)(src0 >> 4);
-               *pDst++ = (OPJ_BYTE)(((src0 & 0xFU) << 4) | (src1 >> 8));
-               *pDst++ = (OPJ_BYTE)(src1);
-       }
-       
-       if (length & 1U) {
-               OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i+0];
-               *pDst++ = (OPJ_BYTE)(src0 >> 4);
-               *pDst++ = (OPJ_BYTE)(((src0 & 0xFU) << 4));
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)1U); i += 2U) {
+        OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
+        OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
+
+        *pDst++ = (OPJ_BYTE)(src0 >> 4);
+        *pDst++ = (OPJ_BYTE)(((src0 & 0xFU) << 4) | (src1 >> 8));
+        *pDst++ = (OPJ_BYTE)(src1);
+    }
+
+    if (length & 1U) {
+        OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
+        *pDst++ = (OPJ_BYTE)(src0 >> 4);
+        *pDst++ = (OPJ_BYTE)(((src0 & 0xFU) << 4));
+    }
 }
-static void tif_32sto13u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst, OPJ_SIZE_T length)
+static void tif_32sto13u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
+                         OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i+=8U) {
-               OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i+0];
-               OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i+1];
-               OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i+2];
-               OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i+3];
-               OPJ_UINT32 src4 = (OPJ_UINT32)pSrc[i+4];
-               OPJ_UINT32 src5 = (OPJ_UINT32)pSrc[i+5];
-               OPJ_UINT32 src6 = (OPJ_UINT32)pSrc[i+6];
-               OPJ_UINT32 src7 = (OPJ_UINT32)pSrc[i+7];
-               
-               *pDst++ = (OPJ_BYTE)((src0 >> 5));
-               *pDst++ = (OPJ_BYTE)((src0 << 3) | (src1 >> 10));
-               *pDst++ = (OPJ_BYTE)((src1 >> 2));
-               *pDst++ = (OPJ_BYTE)((src1 << 6) | (src2 >> 7));
-               *pDst++ = (OPJ_BYTE)((src2 << 1) | (src3 >> 12));
-               *pDst++ = (OPJ_BYTE)((src3 >> 4));
-               *pDst++ = (OPJ_BYTE)((src3 << 4) | (src4 >> 9));
-               *pDst++ = (OPJ_BYTE)((src4 >> 1));
-               *pDst++ = (OPJ_BYTE)((src4 << 7) | (src5 >> 6));
-               *pDst++ = (OPJ_BYTE)((src5 << 2) | (src6 >> 11));
-               *pDst++ = (OPJ_BYTE)((src6 >> 3));
-               *pDst++ = (OPJ_BYTE)((src6 << 5) | (src7 >> 8));
-               *pDst++ = (OPJ_BYTE)(src7);
-       }
-       
-       if (length & 7U) {
-               unsigned int trailing = 0U;
-               int remaining = 8U;
-               length &= 7U;
-               PUTBITS2((OPJ_UINT32)pSrc[i+0], 13)
-               if (length > 1U) {
-                       PUTBITS2((OPJ_UINT32)pSrc[i+1], 13)
-                       if (length > 2U) {
-                               PUTBITS2((OPJ_UINT32)pSrc[i+2], 13)
-                               if (length > 3U) {
-                                       PUTBITS2((OPJ_UINT32)pSrc[i+3], 13)
-                                       if (length > 4U) {
-                                               PUTBITS2((OPJ_UINT32)pSrc[i+4], 13)
-                                               if (length > 5U) {
-                                                       PUTBITS2((OPJ_UINT32)pSrc[i+5], 13)
-                                                       if (length > 6U) {
-                                                               PUTBITS2((OPJ_UINT32)pSrc[i+6], 13)
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-               FLUSHBITS()
-       }
+    OPJ_SIZE_T i;
+
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
+        OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
+        OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
+        OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i + 2];
+        OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i + 3];
+        OPJ_UINT32 src4 = (OPJ_UINT32)pSrc[i + 4];
+        OPJ_UINT32 src5 = (OPJ_UINT32)pSrc[i + 5];
+        OPJ_UINT32 src6 = (OPJ_UINT32)pSrc[i + 6];
+        OPJ_UINT32 src7 = (OPJ_UINT32)pSrc[i + 7];
+
+        *pDst++ = (OPJ_BYTE)((src0 >> 5));
+        *pDst++ = (OPJ_BYTE)((src0 << 3) | (src1 >> 10));
+        *pDst++ = (OPJ_BYTE)((src1 >> 2));
+        *pDst++ = (OPJ_BYTE)((src1 << 6) | (src2 >> 7));
+        *pDst++ = (OPJ_BYTE)((src2 << 1) | (src3 >> 12));
+        *pDst++ = (OPJ_BYTE)((src3 >> 4));
+        *pDst++ = (OPJ_BYTE)((src3 << 4) | (src4 >> 9));
+        *pDst++ = (OPJ_BYTE)((src4 >> 1));
+        *pDst++ = (OPJ_BYTE)((src4 << 7) | (src5 >> 6));
+        *pDst++ = (OPJ_BYTE)((src5 << 2) | (src6 >> 11));
+        *pDst++ = (OPJ_BYTE)((src6 >> 3));
+        *pDst++ = (OPJ_BYTE)((src6 << 5) | (src7 >> 8));
+        *pDst++ = (OPJ_BYTE)(src7);
+    }
+
+    if (length & 7U) {
+        unsigned int trailing = 0U;
+        int remaining = 8U;
+        length &= 7U;
+        PUTBITS2((OPJ_UINT32)pSrc[i + 0], 13)
+        if (length > 1U) {
+            PUTBITS2((OPJ_UINT32)pSrc[i + 1], 13)
+            if (length > 2U) {
+                PUTBITS2((OPJ_UINT32)pSrc[i + 2], 13)
+                if (length > 3U) {
+                    PUTBITS2((OPJ_UINT32)pSrc[i + 3], 13)
+                    if (length > 4U) {
+                        PUTBITS2((OPJ_UINT32)pSrc[i + 4], 13)
+                        if (length > 5U) {
+                            PUTBITS2((OPJ_UINT32)pSrc[i + 5], 13)
+                            if (length > 6U) {
+                                PUTBITS2((OPJ_UINT32)pSrc[i + 6], 13)
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        FLUSHBITS()
+    }
 }
-static void tif_32sto14u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst, OPJ_SIZE_T length)
+static void tif_32sto14u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
+                         OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)3U); i+=4U) {
-               OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i+0];
-               OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i+1];
-               OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i+2];
-               OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i+3];
-               
-               *pDst++ = (OPJ_BYTE)(src0 >> 6);
-               *pDst++ = (OPJ_BYTE)(((src0 & 0x3FU) << 2) | (src1 >> 12));
-               *pDst++ = (OPJ_BYTE)(src1 >> 4);
-               *pDst++ = (OPJ_BYTE)(((src1 & 0xFU) << 4) | (src2 >> 10));
-               *pDst++ = (OPJ_BYTE)(src2 >> 2);
-               *pDst++ = (OPJ_BYTE)(((src2 & 0x3U) << 6) | (src3 >> 8));
-               *pDst++ = (OPJ_BYTE)(src3);
-       }
-       
-       if (length & 3U) {
-               OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i+0];
-               OPJ_UINT32 src1 = 0U;
-               OPJ_UINT32 src2 = 0U;
-               length = length & 3U;
-               
-               if (length > 1U) {
-                       src1 = (OPJ_UINT32)pSrc[i+1];
-                       if (length > 2U) {
-                               src2 = (OPJ_UINT32)pSrc[i+2];
-                       }
-               }
-               *pDst++ = (OPJ_BYTE)(src0 >> 6);
-               *pDst++ = (OPJ_BYTE)(((src0 & 0x3FU) << 2) | (src1 >> 12));
-               if (length > 1U) {
-                       *pDst++ = (OPJ_BYTE)(src1 >> 4);
-                       *pDst++ = (OPJ_BYTE)(((src1 & 0xFU) << 4) | (src2 >> 10));
-                       if (length > 2U) {
-                               *pDst++ = (OPJ_BYTE)(src2 >> 2);
-                               *pDst++ = (OPJ_BYTE)(((src2 & 0x3U) << 6));
-                       }
-               }
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)3U); i += 4U) {
+        OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
+        OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
+        OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i + 2];
+        OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i + 3];
+
+        *pDst++ = (OPJ_BYTE)(src0 >> 6);
+        *pDst++ = (OPJ_BYTE)(((src0 & 0x3FU) << 2) | (src1 >> 12));
+        *pDst++ = (OPJ_BYTE)(src1 >> 4);
+        *pDst++ = (OPJ_BYTE)(((src1 & 0xFU) << 4) | (src2 >> 10));
+        *pDst++ = (OPJ_BYTE)(src2 >> 2);
+        *pDst++ = (OPJ_BYTE)(((src2 & 0x3U) << 6) | (src3 >> 8));
+        *pDst++ = (OPJ_BYTE)(src3);
+    }
+
+    if (length & 3U) {
+        OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
+        OPJ_UINT32 src1 = 0U;
+        OPJ_UINT32 src2 = 0U;
+        length = length & 3U;
+
+        if (length > 1U) {
+            src1 = (OPJ_UINT32)pSrc[i + 1];
+            if (length > 2U) {
+                src2 = (OPJ_UINT32)pSrc[i + 2];
+            }
+        }
+        *pDst++ = (OPJ_BYTE)(src0 >> 6);
+        *pDst++ = (OPJ_BYTE)(((src0 & 0x3FU) << 2) | (src1 >> 12));
+        if (length > 1U) {
+            *pDst++ = (OPJ_BYTE)(src1 >> 4);
+            *pDst++ = (OPJ_BYTE)(((src1 & 0xFU) << 4) | (src2 >> 10));
+            if (length > 2U) {
+                *pDst++ = (OPJ_BYTE)(src2 >> 2);
+                *pDst++ = (OPJ_BYTE)(((src2 & 0x3U) << 6));
+            }
+        }
+    }
 }
-static void tif_32sto15u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst, OPJ_SIZE_T length)
+static void tif_32sto15u(const OPJ_INT32* pSrc, OPJ_BYTE* pDst,
+                         OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i+=8U) {
-               OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i+0];
-               OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i+1];
-               OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i+2];
-               OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i+3];
-               OPJ_UINT32 src4 = (OPJ_UINT32)pSrc[i+4];
-               OPJ_UINT32 src5 = (OPJ_UINT32)pSrc[i+5];
-               OPJ_UINT32 src6 = (OPJ_UINT32)pSrc[i+6];
-               OPJ_UINT32 src7 = (OPJ_UINT32)pSrc[i+7];
-               
-               *pDst++ = (OPJ_BYTE)((src0 >> 7));
-               *pDst++ = (OPJ_BYTE)((src0 << 1) | (src1 >> 14));
-               *pDst++ = (OPJ_BYTE)((src1 >> 6));
-               *pDst++ = (OPJ_BYTE)((src1 << 2) | (src2 >> 13));
-               *pDst++ = (OPJ_BYTE)((src2 >> 5));
-               *pDst++ = (OPJ_BYTE)((src2 << 3) | (src3 >> 12));
-               *pDst++ = (OPJ_BYTE)((src3 >> 4));
-               *pDst++ = (OPJ_BYTE)((src3 << 4) | (src4 >> 11));
-               *pDst++ = (OPJ_BYTE)((src4 >> 3));
-               *pDst++ = (OPJ_BYTE)((src4 << 5) | (src5 >> 10));
-               *pDst++ = (OPJ_BYTE)((src5 >> 2));
-               *pDst++ = (OPJ_BYTE)((src5 << 6) | (src6 >> 9));
-               *pDst++ = (OPJ_BYTE)((src6 >> 1));
-               *pDst++ = (OPJ_BYTE)((src6 << 7) | (src7 >> 8));
-               *pDst++ = (OPJ_BYTE)(src7);
-       }
-       
-       if (length & 7U) {
-               unsigned int trailing = 0U;
-               int remaining = 8U;
-               length &= 7U;
-               PUTBITS2((OPJ_UINT32)pSrc[i+0], 15)
-               if (length > 1U) {
-                       PUTBITS2((OPJ_UINT32)pSrc[i+1], 15)
-                       if (length > 2U) {
-                               PUTBITS2((OPJ_UINT32)pSrc[i+2], 15)
-                               if (length > 3U) {
-                                       PUTBITS2((OPJ_UINT32)pSrc[i+3], 15)
-                                       if (length > 4U) {
-                                               PUTBITS2((OPJ_UINT32)pSrc[i+4], 15)
-                                               if (length > 5U) {
-                                                       PUTBITS2((OPJ_UINT32)pSrc[i+5], 15)
-                                                       if (length > 6U) {
-                                                               PUTBITS2((OPJ_UINT32)pSrc[i+6], 15)
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-               FLUSHBITS()
-       }
+    OPJ_SIZE_T i;
+
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
+        OPJ_UINT32 src0 = (OPJ_UINT32)pSrc[i + 0];
+        OPJ_UINT32 src1 = (OPJ_UINT32)pSrc[i + 1];
+        OPJ_UINT32 src2 = (OPJ_UINT32)pSrc[i + 2];
+        OPJ_UINT32 src3 = (OPJ_UINT32)pSrc[i + 3];
+        OPJ_UINT32 src4 = (OPJ_UINT32)pSrc[i + 4];
+        OPJ_UINT32 src5 = (OPJ_UINT32)pSrc[i + 5];
+        OPJ_UINT32 src6 = (OPJ_UINT32)pSrc[i + 6];
+        OPJ_UINT32 src7 = (OPJ_UINT32)pSrc[i + 7];
+
+        *pDst++ = (OPJ_BYTE)((src0 >> 7));
+        *pDst++ = (OPJ_BYTE)((src0 << 1) | (src1 >> 14));
+        *pDst++ = (OPJ_BYTE)((src1 >> 6));
+        *pDst++ = (OPJ_BYTE)((src1 << 2) | (src2 >> 13));
+        *pDst++ = (OPJ_BYTE)((src2 >> 5));
+        *pDst++ = (OPJ_BYTE)((src2 << 3) | (src3 >> 12));
+        *pDst++ = (OPJ_BYTE)((src3 >> 4));
+        *pDst++ = (OPJ_BYTE)((src3 << 4) | (src4 >> 11));
+        *pDst++ = (OPJ_BYTE)((src4 >> 3));
+        *pDst++ = (OPJ_BYTE)((src4 << 5) | (src5 >> 10));
+        *pDst++ = (OPJ_BYTE)((src5 >> 2));
+        *pDst++ = (OPJ_BYTE)((src5 << 6) | (src6 >> 9));
+        *pDst++ = (OPJ_BYTE)((src6 >> 1));
+        *pDst++ = (OPJ_BYTE)((src6 << 7) | (src7 >> 8));
+        *pDst++ = (OPJ_BYTE)(src7);
+    }
+
+    if (length & 7U) {
+        unsigned int trailing = 0U;
+        int remaining = 8U;
+        length &= 7U;
+        PUTBITS2((OPJ_UINT32)pSrc[i + 0], 15)
+        if (length > 1U) {
+            PUTBITS2((OPJ_UINT32)pSrc[i + 1], 15)
+            if (length > 2U) {
+                PUTBITS2((OPJ_UINT32)pSrc[i + 2], 15)
+                if (length > 3U) {
+                    PUTBITS2((OPJ_UINT32)pSrc[i + 3], 15)
+                    if (length > 4U) {
+                        PUTBITS2((OPJ_UINT32)pSrc[i + 4], 15)
+                        if (length > 5U) {
+                            PUTBITS2((OPJ_UINT32)pSrc[i + 5], 15)
+                            if (length > 6U) {
+                                PUTBITS2((OPJ_UINT32)pSrc[i + 6], 15)
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        FLUSHBITS()
+    }
 }
-static void tif_32sto16u(const OPJ_INT32* pSrc, OPJ_UINT16* pDst, OPJ_SIZE_T length)
+static void tif_32sto16u(const OPJ_INT32* pSrc, OPJ_UINT16* pDst,
+                         OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < length; ++i) {
-               pDst[i] = (OPJ_UINT16)pSrc[i];
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < length; ++i) {
+        pDst[i] = (OPJ_UINT16)pSrc[i];
+    }
 }
 
 int imagetotif(opj_image_t * image, const char *outfile)
 {
-       int width, height;
-       int bps,adjust, sgnd;
-       int tiPhoto;
-       TIFF *tif;
-       tdata_t buf;
-       tsize_t strip_size;
-       OPJ_UINT32 i, numcomps;
-       OPJ_SIZE_T rowStride;
-       OPJ_INT32* buffer32s = NULL;
-       OPJ_INT32 const* planes[4];
-       convert_32s_PXCX cvtPxToCx = NULL;
-       convert_32sXXx_C1R cvt32sToTif = NULL;
-
-       bps = (int)image->comps[0].prec;
-       planes[0] = image->comps[0].data;
-       
-       numcomps = image->numcomps;
-       
-       if (image->color_space == OPJ_CLRSPC_CMYK) {
-               if (numcomps < 4U) {
-                       fprintf(stderr,"imagetotif: CMYK images shall be composed of at least 4 planes.\n");
-                       fprintf(stderr,"\tAborting\n");
-                       return 1;
-               }
-               tiPhoto = PHOTOMETRIC_SEPARATED;
-               if (numcomps > 4U) {
-                       numcomps = 4U; /* Alpha not supported */
-               }
-       }
-       else if (numcomps > 2U) {
-               tiPhoto = PHOTOMETRIC_RGB;
-               if (numcomps > 4U) {
-                       numcomps = 4U;
-               }
-       } else {
-               tiPhoto = PHOTOMETRIC_MINISBLACK;
-       }
-       for (i = 1U; i < numcomps; ++i) {
-               if (image->comps[0].dx != image->comps[i].dx) {
-                       break;
-               }
-               if (image->comps[0].dy != image->comps[i].dy) {
-                       break;
-               }
-               if (image->comps[0].prec != image->comps[i].prec) {
-                       break;
-               }
-               if (image->comps[0].sgnd != image->comps[i].sgnd) {
-                       break;
-               }
-               planes[i] = image->comps[i].data;
-       }
-       if (i != numcomps) {
-               fprintf(stderr,"imagetotif: All components shall have the same subsampling, same bit depth.\n");
-               fprintf(stderr,"\tAborting\n");
-               return 1;
-       }
-       
-       if(bps > 16) bps = 0;
-       if(bps == 0)
-       {
-               fprintf(stderr,"imagetotif: Bits=%d, Only 1 to 16 bits implemented\n",bps);
-               fprintf(stderr,"\tAborting\n");
-               return 1;
-       }
-       tif = TIFFOpen(outfile, "wb");
-       if (!tif)
-       {
-               fprintf(stderr, "imagetotif:failed to open %s for writing\n", outfile);
-               return 1;
-       }
-       for (i = 0U; i < numcomps; ++i) {
-               clip_component(&(image->comps[i]), image->comps[0].prec);
-       }
-       cvtPxToCx = convert_32s_PXCX_LUT[numcomps];
-       switch (bps) {
-               case 1:
-               case 2:
-               case 4:
-               case 6:
-               case 8:
-                       cvt32sToTif = convert_32sXXu_C1R_LUT[bps];
-                       break;
-               case 3:
-                       cvt32sToTif = tif_32sto3u;
-                       break;
-               case 5:
-                       cvt32sToTif = tif_32sto5u;
-                       break;
-               case 7:
-                       cvt32sToTif = tif_32sto7u;
-                       break;
-               case 9:
-                       cvt32sToTif = tif_32sto9u;
-                       break;
-               case 10:
-                       cvt32sToTif = tif_32sto10u;
-                       break;
-               case 11:
-                       cvt32sToTif = tif_32sto11u;
-                       break;
-               case 12:
-                       cvt32sToTif = tif_32sto12u;
-                       break;
-               case 13:
-                       cvt32sToTif = tif_32sto13u;
-                       break;
-               case 14:
-                       cvt32sToTif = tif_32sto14u;
-                       break;
-               case 15:
-                       cvt32sToTif = tif_32sto15u;
-                       break;
-               case 16:
-                       cvt32sToTif = (convert_32sXXx_C1R)tif_32sto16u;
-                       break;
-               default:
-                       /* never here */
-                       break;
-       }
-       sgnd = (int)image->comps[0].sgnd;
-       adjust = sgnd ? 1 << (image->comps[0].prec - 1) : 0;
-       width   = (int)image->comps[0].w;
-       height  = (int)image->comps[0].h;
-       
-       TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width);
-       TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height);
-       TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, numcomps);
-       TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bps);
-       TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
-       TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
-       TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, tiPhoto);
-       TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1);
-       
-       strip_size = TIFFStripSize(tif);
-       rowStride = ((OPJ_SIZE_T)width * numcomps * (OPJ_SIZE_T)bps + 7U) / 8U;
-       if (rowStride != (OPJ_SIZE_T)strip_size) {
-               fprintf(stderr, "Invalid TIFF strip size\n");
-               TIFFClose(tif);
-               return 1;
-       }
-       buf = _TIFFmalloc(strip_size);
-       if (buf == NULL) {
-               TIFFClose(tif);
-               return 1;
-       }
-       buffer32s = (OPJ_INT32 *)malloc((OPJ_SIZE_T)width * numcomps * sizeof(OPJ_INT32));
-       if (buffer32s == NULL) {
-               _TIFFfree(buf);
-               TIFFClose(tif);
-               return 1;
-       }
-       
-       for (i = 0; i < image->comps[0].h; ++i) {
-               cvtPxToCx(planes, buffer32s, (OPJ_SIZE_T)width, adjust);
-               cvt32sToTif(buffer32s, (OPJ_BYTE *)buf, (OPJ_SIZE_T)width * numcomps);
-               (void)TIFFWriteEncodedStrip(tif, i, (void*)buf, strip_size);
-               planes[0] += width;
-               planes[1] += width;
-               planes[2] += width;
-               planes[3] += width;
-       }
-       _TIFFfree((void*)buf);
-       TIFFClose(tif);
-       free(buffer32s);
-               
-       return 0;
+    int width, height;
+    int bps, adjust, sgnd;
+    int tiPhoto;
+    TIFF *tif;
+    tdata_t buf;
+    tsize_t strip_size;
+    OPJ_UINT32 i, numcomps;
+    OPJ_SIZE_T rowStride;
+    OPJ_INT32* buffer32s = NULL;
+    OPJ_INT32 const* planes[4];
+    convert_32s_PXCX cvtPxToCx = NULL;
+    convert_32sXXx_C1R cvt32sToTif = NULL;
+
+    bps = (int)image->comps[0].prec;
+    planes[0] = image->comps[0].data;
+
+    numcomps = image->numcomps;
+
+    if (image->color_space == OPJ_CLRSPC_CMYK) {
+        if (numcomps < 4U) {
+            fprintf(stderr,
+                    "imagetotif: CMYK images shall be composed of at least 4 planes.\n");
+            fprintf(stderr, "\tAborting\n");
+            return 1;
+        }
+        tiPhoto = PHOTOMETRIC_SEPARATED;
+        if (numcomps > 4U) {
+            numcomps = 4U; /* Alpha not supported */
+        }
+    } else if (numcomps > 2U) {
+        tiPhoto = PHOTOMETRIC_RGB;
+        if (numcomps > 4U) {
+            numcomps = 4U;
+        }
+    } else {
+        tiPhoto = PHOTOMETRIC_MINISBLACK;
+    }
+    for (i = 1U; i < numcomps; ++i) {
+        if (image->comps[0].dx != image->comps[i].dx) {
+            break;
+        }
+        if (image->comps[0].dy != image->comps[i].dy) {
+            break;
+        }
+        if (image->comps[0].prec != image->comps[i].prec) {
+            break;
+        }
+        if (image->comps[0].sgnd != image->comps[i].sgnd) {
+            break;
+        }
+        planes[i] = image->comps[i].data;
+    }
+    if (i != numcomps) {
+        fprintf(stderr,
+                "imagetotif: All components shall have the same subsampling, same bit depth.\n");
+        fprintf(stderr, "\tAborting\n");
+        return 1;
+    }
+
+    if (bps > 16) {
+        bps = 0;
+    }
+    if (bps == 0) {
+        fprintf(stderr, "imagetotif: Bits=%d, Only 1 to 16 bits implemented\n", bps);
+        fprintf(stderr, "\tAborting\n");
+        return 1;
+    }
+    tif = TIFFOpen(outfile, "wb");
+    if (!tif) {
+        fprintf(stderr, "imagetotif:failed to open %s for writing\n", outfile);
+        return 1;
+    }
+    for (i = 0U; i < numcomps; ++i) {
+        clip_component(&(image->comps[i]), image->comps[0].prec);
+    }
+    cvtPxToCx = convert_32s_PXCX_LUT[numcomps];
+    switch (bps) {
+    case 1:
+    case 2:
+    case 4:
+    case 6:
+    case 8:
+        cvt32sToTif = convert_32sXXu_C1R_LUT[bps];
+        break;
+    case 3:
+        cvt32sToTif = tif_32sto3u;
+        break;
+    case 5:
+        cvt32sToTif = tif_32sto5u;
+        break;
+    case 7:
+        cvt32sToTif = tif_32sto7u;
+        break;
+    case 9:
+        cvt32sToTif = tif_32sto9u;
+        break;
+    case 10:
+        cvt32sToTif = tif_32sto10u;
+        break;
+    case 11:
+        cvt32sToTif = tif_32sto11u;
+        break;
+    case 12:
+        cvt32sToTif = tif_32sto12u;
+        break;
+    case 13:
+        cvt32sToTif = tif_32sto13u;
+        break;
+    case 14:
+        cvt32sToTif = tif_32sto14u;
+        break;
+    case 15:
+        cvt32sToTif = tif_32sto15u;
+        break;
+    case 16:
+        cvt32sToTif = (convert_32sXXx_C1R)tif_32sto16u;
+        break;
+    default:
+        /* never here */
+        break;
+    }
+    sgnd = (int)image->comps[0].sgnd;
+    adjust = sgnd ? 1 << (image->comps[0].prec - 1) : 0;
+    width   = (int)image->comps[0].w;
+    height  = (int)image->comps[0].h;
+
+    TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width);
+    TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height);
+    TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, numcomps);
+    TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bps);
+    TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
+    TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
+    TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, tiPhoto);
+    TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1);
+
+    strip_size = TIFFStripSize(tif);
+    rowStride = ((OPJ_SIZE_T)width * numcomps * (OPJ_SIZE_T)bps + 7U) / 8U;
+    if (rowStride != (OPJ_SIZE_T)strip_size) {
+        fprintf(stderr, "Invalid TIFF strip size\n");
+        TIFFClose(tif);
+        return 1;
+    }
+    buf = _TIFFmalloc(strip_size);
+    if (buf == NULL) {
+        TIFFClose(tif);
+        return 1;
+    }
+    buffer32s = (OPJ_INT32 *)malloc((OPJ_SIZE_T)width * numcomps * sizeof(
+                                        OPJ_INT32));
+    if (buffer32s == NULL) {
+        _TIFFfree(buf);
+        TIFFClose(tif);
+        return 1;
+    }
+
+    for (i = 0; i < image->comps[0].h; ++i) {
+        cvtPxToCx(planes, buffer32s, (OPJ_SIZE_T)width, adjust);
+        cvt32sToTif(buffer32s, (OPJ_BYTE *)buf, (OPJ_SIZE_T)width * numcomps);
+        (void)TIFFWriteEncodedStrip(tif, i, (void*)buf, strip_size);
+        planes[0] += width;
+        planes[1] += width;
+        planes[2] += width;
+        planes[3] += width;
+    }
+    _TIFFfree((void*)buf);
+    TIFFClose(tif);
+    free(buffer32s);
+
+    return 0;
 }/* imagetotif() */
 
 #define GETBITS(dest, nb) { \
-       int needed = (nb); \
-       unsigned int dst = 0U; \
-       if (available == 0) { \
-               val = *pSrc++; \
-               available = 8; \
-       } \
-       while (needed > available) { \
-               dst |= val & ((1U << available) - 1U); \
-               needed -= available; \
-               dst <<= needed; \
-               val = *pSrc++; \
-               available = 8; \
-       } \
-       dst |= (val >> (available - needed)) & ((1U << needed) - 1U); \
-       available -= needed; \
-       dest = (OPJ_INT32)dst; \
+    int needed = (nb); \
+    unsigned int dst = 0U; \
+    if (available == 0) { \
+        val = *pSrc++; \
+        available = 8; \
+    } \
+    while (needed > available) { \
+        dst |= val & ((1U << available) - 1U); \
+        needed -= available; \
+        dst <<= needed; \
+        val = *pSrc++; \
+        available = 8; \
+    } \
+    dst |= (val >> (available - needed)) & ((1U << needed) - 1U); \
+    available -= needed; \
+    dest = (OPJ_INT32)dst; \
 }
 
-static void tif_3uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst, OPJ_SIZE_T length)
+static void tif_3uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
+                        OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i+=8U) {
-               OPJ_UINT32 val0 = *pSrc++;
-               OPJ_UINT32 val1 = *pSrc++;
-               OPJ_UINT32 val2 = *pSrc++;
-               
-               pDst[i+0] = (OPJ_INT32)((val0 >> 5));
-               pDst[i+1] = (OPJ_INT32)(((val0 & 0x1FU) >> 2));
-               pDst[i+2] = (OPJ_INT32)(((val0 & 0x3U) << 1) | (val1 >> 7));
-               pDst[i+3] = (OPJ_INT32)(((val1 & 0x7FU) >> 4));
-               pDst[i+4] = (OPJ_INT32)(((val1 & 0xFU) >> 1));
-               pDst[i+5] = (OPJ_INT32)(((val1 & 0x1U) << 2) | (val2 >> 6));
-               pDst[i+6] = (OPJ_INT32)(((val2 & 0x3FU) >> 3));
-               pDst[i+7] = (OPJ_INT32)(((val2 & 0x7U)));
-               
-       }
-       if (length & 7U) {
-               unsigned int val;
-               int available = 0;
-               
-               length = length & 7U;
-               
-               GETBITS(pDst[i+0], 3)
-               
-               if (length > 1U) {
-                       GETBITS(pDst[i+1], 3)
-                       if (length > 2U) {
-                               GETBITS(pDst[i+2], 3)
-                               if (length > 3U) {
-                                       GETBITS(pDst[i+3], 3)
-                                       if (length > 4U) {
-                                               GETBITS(pDst[i+4], 3)
-                                               if (length > 5U) {
-                                                       GETBITS(pDst[i+5], 3)
-                                                       if (length > 6U) {
-                                                               GETBITS(pDst[i+6], 3)
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
+        OPJ_UINT32 val0 = *pSrc++;
+        OPJ_UINT32 val1 = *pSrc++;
+        OPJ_UINT32 val2 = *pSrc++;
+
+        pDst[i + 0] = (OPJ_INT32)((val0 >> 5));
+        pDst[i + 1] = (OPJ_INT32)(((val0 & 0x1FU) >> 2));
+        pDst[i + 2] = (OPJ_INT32)(((val0 & 0x3U) << 1) | (val1 >> 7));
+        pDst[i + 3] = (OPJ_INT32)(((val1 & 0x7FU) >> 4));
+        pDst[i + 4] = (OPJ_INT32)(((val1 & 0xFU) >> 1));
+        pDst[i + 5] = (OPJ_INT32)(((val1 & 0x1U) << 2) | (val2 >> 6));
+        pDst[i + 6] = (OPJ_INT32)(((val2 & 0x3FU) >> 3));
+        pDst[i + 7] = (OPJ_INT32)(((val2 & 0x7U)));
+
+    }
+    if (length & 7U) {
+        unsigned int val;
+        int available = 0;
+
+        length = length & 7U;
+
+        GETBITS(pDst[i + 0], 3)
+
+        if (length > 1U) {
+            GETBITS(pDst[i + 1], 3)
+            if (length > 2U) {
+                GETBITS(pDst[i + 2], 3)
+                if (length > 3U) {
+                    GETBITS(pDst[i + 3], 3)
+                    if (length > 4U) {
+                        GETBITS(pDst[i + 4], 3)
+                        if (length > 5U) {
+                            GETBITS(pDst[i + 5], 3)
+                            if (length > 6U) {
+                                GETBITS(pDst[i + 6], 3)
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
 }
-static void tif_5uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst, OPJ_SIZE_T length)
+static void tif_5uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
+                        OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i+=8U) {
-               OPJ_UINT32 val0 = *pSrc++;
-               OPJ_UINT32 val1 = *pSrc++;
-               OPJ_UINT32 val2 = *pSrc++;
-               OPJ_UINT32 val3 = *pSrc++;
-               OPJ_UINT32 val4 = *pSrc++;
-               
-               pDst[i+0] = (OPJ_INT32)((val0 >> 3));
-               pDst[i+1] = (OPJ_INT32)(((val0 & 0x7U) << 2) | (val1 >> 6));
-               pDst[i+2] = (OPJ_INT32)(((val1 & 0x3FU) >> 1));
-               pDst[i+3] = (OPJ_INT32)(((val1 & 0x1U) << 4) | (val2 >> 4));
-               pDst[i+4] = (OPJ_INT32)(((val2 & 0xFU) << 1) | (val3 >> 7));
-               pDst[i+5] = (OPJ_INT32)(((val3 & 0x7FU) >> 2));
-               pDst[i+6] = (OPJ_INT32)(((val3 & 0x3U) << 3) | (val4 >> 5));
-               pDst[i+7] = (OPJ_INT32)(((val4 & 0x1FU)));
-               
-       }
-       if (length & 7U) {
-               unsigned int val;
-               int available = 0;
-               
-               length = length & 7U;
-               
-               GETBITS(pDst[i+0], 5)
-               
-               if (length > 1U) {
-                       GETBITS(pDst[i+1], 5)
-                       if (length > 2U) {
-                               GETBITS(pDst[i+2], 5)
-                               if (length > 3U) {
-                                       GETBITS(pDst[i+3], 5)
-                                       if (length > 4U) {
-                                               GETBITS(pDst[i+4], 5)
-                                               if (length > 5U) {
-                                                       GETBITS(pDst[i+5], 5)
-                                                       if (length > 6U) {
-                                                               GETBITS(pDst[i+6], 5)
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
+        OPJ_UINT32 val0 = *pSrc++;
+        OPJ_UINT32 val1 = *pSrc++;
+        OPJ_UINT32 val2 = *pSrc++;
+        OPJ_UINT32 val3 = *pSrc++;
+        OPJ_UINT32 val4 = *pSrc++;
+
+        pDst[i + 0] = (OPJ_INT32)((val0 >> 3));
+        pDst[i + 1] = (OPJ_INT32)(((val0 & 0x7U) << 2) | (val1 >> 6));
+        pDst[i + 2] = (OPJ_INT32)(((val1 & 0x3FU) >> 1));
+        pDst[i + 3] = (OPJ_INT32)(((val1 & 0x1U) << 4) | (val2 >> 4));
+        pDst[i + 4] = (OPJ_INT32)(((val2 & 0xFU) << 1) | (val3 >> 7));
+        pDst[i + 5] = (OPJ_INT32)(((val3 & 0x7FU) >> 2));
+        pDst[i + 6] = (OPJ_INT32)(((val3 & 0x3U) << 3) | (val4 >> 5));
+        pDst[i + 7] = (OPJ_INT32)(((val4 & 0x1FU)));
+
+    }
+    if (length & 7U) {
+        unsigned int val;
+        int available = 0;
+
+        length = length & 7U;
+
+        GETBITS(pDst[i + 0], 5)
+
+        if (length > 1U) {
+            GETBITS(pDst[i + 1], 5)
+            if (length > 2U) {
+                GETBITS(pDst[i + 2], 5)
+                if (length > 3U) {
+                    GETBITS(pDst[i + 3], 5)
+                    if (length > 4U) {
+                        GETBITS(pDst[i + 4], 5)
+                        if (length > 5U) {
+                            GETBITS(pDst[i + 5], 5)
+                            if (length > 6U) {
+                                GETBITS(pDst[i + 6], 5)
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
 }
-static void tif_7uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst, OPJ_SIZE_T length)
+static void tif_7uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
+                        OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i+=8U) {
-               OPJ_UINT32 val0 = *pSrc++;
-               OPJ_UINT32 val1 = *pSrc++;
-               OPJ_UINT32 val2 = *pSrc++;
-               OPJ_UINT32 val3 = *pSrc++;
-               OPJ_UINT32 val4 = *pSrc++;
-               OPJ_UINT32 val5 = *pSrc++;
-               OPJ_UINT32 val6 = *pSrc++;
-               
-               pDst[i+0] = (OPJ_INT32)((val0 >> 1));
-               pDst[i+1] = (OPJ_INT32)(((val0 & 0x1U) << 6) | (val1 >> 2));
-               pDst[i+2] = (OPJ_INT32)(((val1 & 0x3U) << 5) | (val2 >> 3));
-               pDst[i+3] = (OPJ_INT32)(((val2 & 0x7U) << 4) | (val3 >> 4));
-               pDst[i+4] = (OPJ_INT32)(((val3 & 0xFU) << 3) | (val4 >> 5));
-               pDst[i+5] = (OPJ_INT32)(((val4 & 0x1FU) << 2) | (val5 >> 6));
-               pDst[i+6] = (OPJ_INT32)(((val5 & 0x3FU) << 1) | (val6 >> 7));
-               pDst[i+7] = (OPJ_INT32)(((val6 & 0x7FU)));
-               
-       }
-       if (length & 7U) {
-               unsigned int val;
-               int available = 0;
-               
-               length = length & 7U;
-               
-               GETBITS(pDst[i+0], 7)
-               
-               if (length > 1U) {
-                       GETBITS(pDst[i+1], 7)
-                       if (length > 2U) {
-                               GETBITS(pDst[i+2], 7)
-                               if (length > 3U) {
-                                       GETBITS(pDst[i+3], 7)
-                                       if (length > 4U) {
-                                               GETBITS(pDst[i+4], 7)
-                                               if (length > 5U) {
-                                                       GETBITS(pDst[i+5], 7)
-                                                       if (length > 6U) {
-                                                               GETBITS(pDst[i+6], 7)
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
+        OPJ_UINT32 val0 = *pSrc++;
+        OPJ_UINT32 val1 = *pSrc++;
+        OPJ_UINT32 val2 = *pSrc++;
+        OPJ_UINT32 val3 = *pSrc++;
+        OPJ_UINT32 val4 = *pSrc++;
+        OPJ_UINT32 val5 = *pSrc++;
+        OPJ_UINT32 val6 = *pSrc++;
+
+        pDst[i + 0] = (OPJ_INT32)((val0 >> 1));
+        pDst[i + 1] = (OPJ_INT32)(((val0 & 0x1U) << 6) | (val1 >> 2));
+        pDst[i + 2] = (OPJ_INT32)(((val1 & 0x3U) << 5) | (val2 >> 3));
+        pDst[i + 3] = (OPJ_INT32)(((val2 & 0x7U) << 4) | (val3 >> 4));
+        pDst[i + 4] = (OPJ_INT32)(((val3 & 0xFU) << 3) | (val4 >> 5));
+        pDst[i + 5] = (OPJ_INT32)(((val4 & 0x1FU) << 2) | (val5 >> 6));
+        pDst[i + 6] = (OPJ_INT32)(((val5 & 0x3FU) << 1) | (val6 >> 7));
+        pDst[i + 7] = (OPJ_INT32)(((val6 & 0x7FU)));
+
+    }
+    if (length & 7U) {
+        unsigned int val;
+        int available = 0;
+
+        length = length & 7U;
+
+        GETBITS(pDst[i + 0], 7)
+
+        if (length > 1U) {
+            GETBITS(pDst[i + 1], 7)
+            if (length > 2U) {
+                GETBITS(pDst[i + 2], 7)
+                if (length > 3U) {
+                    GETBITS(pDst[i + 3], 7)
+                    if (length > 4U) {
+                        GETBITS(pDst[i + 4], 7)
+                        if (length > 5U) {
+                            GETBITS(pDst[i + 5], 7)
+                            if (length > 6U) {
+                                GETBITS(pDst[i + 6], 7)
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
 }
-static void tif_9uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst, OPJ_SIZE_T length)
+static void tif_9uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
+                        OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i+=8U) {
-               OPJ_UINT32 val0 = *pSrc++;
-               OPJ_UINT32 val1 = *pSrc++;
-               OPJ_UINT32 val2 = *pSrc++;
-               OPJ_UINT32 val3 = *pSrc++;
-               OPJ_UINT32 val4 = *pSrc++;
-               OPJ_UINT32 val5 = *pSrc++;
-               OPJ_UINT32 val6 = *pSrc++;
-               OPJ_UINT32 val7 = *pSrc++;
-               OPJ_UINT32 val8 = *pSrc++;
-               
-               pDst[i+0] = (OPJ_INT32)((val0 << 1) | (val1 >> 7));
-               pDst[i+1] = (OPJ_INT32)(((val1 & 0x7FU) << 2) | (val2 >> 6));
-               pDst[i+2] = (OPJ_INT32)(((val2 & 0x3FU) << 3) | (val3 >> 5));
-               pDst[i+3] = (OPJ_INT32)(((val3 & 0x1FU) << 4) | (val4 >> 4));
-               pDst[i+4] = (OPJ_INT32)(((val4 & 0xFU) << 5) | (val5 >> 3));
-               pDst[i+5] = (OPJ_INT32)(((val5 & 0x7U) << 6) | (val6 >> 2));
-               pDst[i+6] = (OPJ_INT32)(((val6 & 0x3U) << 7) | (val7 >> 1));
-               pDst[i+7] = (OPJ_INT32)(((val7 & 0x1U) << 8) | (val8));
-               
-       }
-       if (length & 7U) {
-               unsigned int val;
-               int available = 0;
-               
-               length = length & 7U;
-               
-               GETBITS(pDst[i+0], 9)
-               
-               if (length > 1U) {
-                       GETBITS(pDst[i+1], 9)
-                       if (length > 2U) {
-                               GETBITS(pDst[i+2], 9)
-                               if (length > 3U) {
-                                       GETBITS(pDst[i+3], 9)
-                                       if (length > 4U) {
-                                               GETBITS(pDst[i+4], 9)
-                                               if (length > 5U) {
-                                                       GETBITS(pDst[i+5], 9)
-                                                       if (length > 6U) {
-                                                               GETBITS(pDst[i+6], 9)
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
+        OPJ_UINT32 val0 = *pSrc++;
+        OPJ_UINT32 val1 = *pSrc++;
+        OPJ_UINT32 val2 = *pSrc++;
+        OPJ_UINT32 val3 = *pSrc++;
+        OPJ_UINT32 val4 = *pSrc++;
+        OPJ_UINT32 val5 = *pSrc++;
+        OPJ_UINT32 val6 = *pSrc++;
+        OPJ_UINT32 val7 = *pSrc++;
+        OPJ_UINT32 val8 = *pSrc++;
+
+        pDst[i + 0] = (OPJ_INT32)((val0 << 1) | (val1 >> 7));
+        pDst[i + 1] = (OPJ_INT32)(((val1 & 0x7FU) << 2) | (val2 >> 6));
+        pDst[i + 2] = (OPJ_INT32)(((val2 & 0x3FU) << 3) | (val3 >> 5));
+        pDst[i + 3] = (OPJ_INT32)(((val3 & 0x1FU) << 4) | (val4 >> 4));
+        pDst[i + 4] = (OPJ_INT32)(((val4 & 0xFU) << 5) | (val5 >> 3));
+        pDst[i + 5] = (OPJ_INT32)(((val5 & 0x7U) << 6) | (val6 >> 2));
+        pDst[i + 6] = (OPJ_INT32)(((val6 & 0x3U) << 7) | (val7 >> 1));
+        pDst[i + 7] = (OPJ_INT32)(((val7 & 0x1U) << 8) | (val8));
+
+    }
+    if (length & 7U) {
+        unsigned int val;
+        int available = 0;
+
+        length = length & 7U;
+
+        GETBITS(pDst[i + 0], 9)
+
+        if (length > 1U) {
+            GETBITS(pDst[i + 1], 9)
+            if (length > 2U) {
+                GETBITS(pDst[i + 2], 9)
+                if (length > 3U) {
+                    GETBITS(pDst[i + 3], 9)
+                    if (length > 4U) {
+                        GETBITS(pDst[i + 4], 9)
+                        if (length > 5U) {
+                            GETBITS(pDst[i + 5], 9)
+                            if (length > 6U) {
+                                GETBITS(pDst[i + 6], 9)
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
 }
-static void tif_10uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst, OPJ_SIZE_T length)
+static void tif_10uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
+                         OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)3U); i+=4U) {
-               OPJ_UINT32 val0 = *pSrc++;
-               OPJ_UINT32 val1 = *pSrc++;
-               OPJ_UINT32 val2 = *pSrc++;
-               OPJ_UINT32 val3 = *pSrc++;
-               OPJ_UINT32 val4 = *pSrc++;
-               
-               pDst[i+0] = (OPJ_INT32)((val0 << 2) | (val1 >> 6));
-               pDst[i+1] = (OPJ_INT32)(((val1 & 0x3FU) << 4) | (val2 >> 4));
-               pDst[i+2] = (OPJ_INT32)(((val2 & 0xFU) << 6) | (val3 >> 2));
-               pDst[i+3] = (OPJ_INT32)(((val3 & 0x3U) << 8) | val4);
-               
-       }
-       if (length & 3U) {
-               OPJ_UINT32 val0 = *pSrc++;
-               OPJ_UINT32 val1 = *pSrc++;
-               length = length & 3U;
-               pDst[i+0] = (OPJ_INT32)((val0 << 2) | (val1 >> 6));
-               
-               if (length > 1U) {
-                       OPJ_UINT32 val2 = *pSrc++;
-                       pDst[i+1] = (OPJ_INT32)(((val1 & 0x3FU) << 4) | (val2 >> 4));
-                       if (length > 2U) {
-                               OPJ_UINT32 val3 = *pSrc++;
-                               pDst[i+2] = (OPJ_INT32)(((val2 & 0xFU) << 6) | (val3 >> 2));
-                       }
-               }
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)3U); i += 4U) {
+        OPJ_UINT32 val0 = *pSrc++;
+        OPJ_UINT32 val1 = *pSrc++;
+        OPJ_UINT32 val2 = *pSrc++;
+        OPJ_UINT32 val3 = *pSrc++;
+        OPJ_UINT32 val4 = *pSrc++;
+
+        pDst[i + 0] = (OPJ_INT32)((val0 << 2) | (val1 >> 6));
+        pDst[i + 1] = (OPJ_INT32)(((val1 & 0x3FU) << 4) | (val2 >> 4));
+        pDst[i + 2] = (OPJ_INT32)(((val2 & 0xFU) << 6) | (val3 >> 2));
+        pDst[i + 3] = (OPJ_INT32)(((val3 & 0x3U) << 8) | val4);
+
+    }
+    if (length & 3U) {
+        OPJ_UINT32 val0 = *pSrc++;
+        OPJ_UINT32 val1 = *pSrc++;
+        length = length & 3U;
+        pDst[i + 0] = (OPJ_INT32)((val0 << 2) | (val1 >> 6));
+
+        if (length > 1U) {
+            OPJ_UINT32 val2 = *pSrc++;
+            pDst[i + 1] = (OPJ_INT32)(((val1 & 0x3FU) << 4) | (val2 >> 4));
+            if (length > 2U) {
+                OPJ_UINT32 val3 = *pSrc++;
+                pDst[i + 2] = (OPJ_INT32)(((val2 & 0xFU) << 6) | (val3 >> 2));
+            }
+        }
+    }
 }
-static void tif_11uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst, OPJ_SIZE_T length)
+static void tif_11uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
+                         OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i+=8U) {
-               OPJ_UINT32 val0 = *pSrc++;
-               OPJ_UINT32 val1 = *pSrc++;
-               OPJ_UINT32 val2 = *pSrc++;
-               OPJ_UINT32 val3 = *pSrc++;
-               OPJ_UINT32 val4 = *pSrc++;
-               OPJ_UINT32 val5 = *pSrc++;
-               OPJ_UINT32 val6 = *pSrc++;
-               OPJ_UINT32 val7 = *pSrc++;
-               OPJ_UINT32 val8 = *pSrc++;
-               OPJ_UINT32 val9 = *pSrc++;
-               OPJ_UINT32 val10 = *pSrc++;
-               
-               pDst[i+0] = (OPJ_INT32)((val0 << 3) | (val1 >> 5));
-               pDst[i+1] = (OPJ_INT32)(((val1 & 0x1FU) << 6) | (val2 >> 2));
-               pDst[i+2] = (OPJ_INT32)(((val2 & 0x3U) << 9) | (val3 << 1) | (val4 >> 7));
-               pDst[i+3] = (OPJ_INT32)(((val4 & 0x7FU) << 4) | (val5 >> 4));
-               pDst[i+4] = (OPJ_INT32)(((val5 & 0xFU) << 7) | (val6 >> 1));
-               pDst[i+5] = (OPJ_INT32)(((val6 & 0x1U) << 10) | (val7 << 2) | (val8 >> 6));
-               pDst[i+6] = (OPJ_INT32)(((val8 & 0x3FU) << 5) | (val9 >> 3));
-               pDst[i+7] = (OPJ_INT32)(((val9 & 0x7U) << 8) | (val10));
-               
-       }
-       if (length & 7U) {
-               unsigned int val;
-               int available = 0;
-               
-               length = length & 7U;
-               
-               GETBITS(pDst[i+0], 11)
-               
-               if (length > 1U) {
-                       GETBITS(pDst[i+1], 11)
-                       if (length > 2U) {
-                               GETBITS(pDst[i+2], 11)
-                               if (length > 3U) {
-                                       GETBITS(pDst[i+3], 11)
-                                       if (length > 4U) {
-                                               GETBITS(pDst[i+4], 11)
-                                               if (length > 5U) {
-                                                       GETBITS(pDst[i+5], 11)
-                                                       if (length > 6U) {
-                                                               GETBITS(pDst[i+6], 11)
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
+        OPJ_UINT32 val0 = *pSrc++;
+        OPJ_UINT32 val1 = *pSrc++;
+        OPJ_UINT32 val2 = *pSrc++;
+        OPJ_UINT32 val3 = *pSrc++;
+        OPJ_UINT32 val4 = *pSrc++;
+        OPJ_UINT32 val5 = *pSrc++;
+        OPJ_UINT32 val6 = *pSrc++;
+        OPJ_UINT32 val7 = *pSrc++;
+        OPJ_UINT32 val8 = *pSrc++;
+        OPJ_UINT32 val9 = *pSrc++;
+        OPJ_UINT32 val10 = *pSrc++;
+
+        pDst[i + 0] = (OPJ_INT32)((val0 << 3) | (val1 >> 5));
+        pDst[i + 1] = (OPJ_INT32)(((val1 & 0x1FU) << 6) | (val2 >> 2));
+        pDst[i + 2] = (OPJ_INT32)(((val2 & 0x3U) << 9) | (val3 << 1) | (val4 >> 7));
+        pDst[i + 3] = (OPJ_INT32)(((val4 & 0x7FU) << 4) | (val5 >> 4));
+        pDst[i + 4] = (OPJ_INT32)(((val5 & 0xFU) << 7) | (val6 >> 1));
+        pDst[i + 5] = (OPJ_INT32)(((val6 & 0x1U) << 10) | (val7 << 2) | (val8 >> 6));
+        pDst[i + 6] = (OPJ_INT32)(((val8 & 0x3FU) << 5) | (val9 >> 3));
+        pDst[i + 7] = (OPJ_INT32)(((val9 & 0x7U) << 8) | (val10));
+
+    }
+    if (length & 7U) {
+        unsigned int val;
+        int available = 0;
+
+        length = length & 7U;
+
+        GETBITS(pDst[i + 0], 11)
+
+        if (length > 1U) {
+            GETBITS(pDst[i + 1], 11)
+            if (length > 2U) {
+                GETBITS(pDst[i + 2], 11)
+                if (length > 3U) {
+                    GETBITS(pDst[i + 3], 11)
+                    if (length > 4U) {
+                        GETBITS(pDst[i + 4], 11)
+                        if (length > 5U) {
+                            GETBITS(pDst[i + 5], 11)
+                            if (length > 6U) {
+                                GETBITS(pDst[i + 6], 11)
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
 }
-static void tif_12uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst, OPJ_SIZE_T length)
+static void tif_12uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
+                         OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)1U); i+=2U) {
-               OPJ_UINT32 val0 = *pSrc++;
-               OPJ_UINT32 val1 = *pSrc++;
-               OPJ_UINT32 val2 = *pSrc++;
-
-               pDst[i+0] = (OPJ_INT32)((val0 << 4) | (val1 >> 4));
-               pDst[i+1] = (OPJ_INT32)(((val1 & 0xFU) << 8) | val2);
-       }
-       if (length & 1U) {
-               OPJ_UINT32 val0 = *pSrc++;
-               OPJ_UINT32 val1 = *pSrc++;
-               pDst[i+0] = (OPJ_INT32)((val0 << 4) | (val1 >> 4));
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)1U); i += 2U) {
+        OPJ_UINT32 val0 = *pSrc++;
+        OPJ_UINT32 val1 = *pSrc++;
+        OPJ_UINT32 val2 = *pSrc++;
+
+        pDst[i + 0] = (OPJ_INT32)((val0 << 4) | (val1 >> 4));
+        pDst[i + 1] = (OPJ_INT32)(((val1 & 0xFU) << 8) | val2);
+    }
+    if (length & 1U) {
+        OPJ_UINT32 val0 = *pSrc++;
+        OPJ_UINT32 val1 = *pSrc++;
+        pDst[i + 0] = (OPJ_INT32)((val0 << 4) | (val1 >> 4));
+    }
 }
-static void tif_13uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst, OPJ_SIZE_T length)
+static void tif_13uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
+                         OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i+=8U) {
-               OPJ_UINT32 val0 = *pSrc++;
-               OPJ_UINT32 val1 = *pSrc++;
-               OPJ_UINT32 val2 = *pSrc++;
-               OPJ_UINT32 val3 = *pSrc++;
-               OPJ_UINT32 val4 = *pSrc++;
-               OPJ_UINT32 val5 = *pSrc++;
-               OPJ_UINT32 val6 = *pSrc++;
-               OPJ_UINT32 val7 = *pSrc++;
-               OPJ_UINT32 val8 = *pSrc++;
-               OPJ_UINT32 val9 = *pSrc++;
-               OPJ_UINT32 val10 = *pSrc++;
-               OPJ_UINT32 val11 = *pSrc++;
-               OPJ_UINT32 val12 = *pSrc++;
-               
-               pDst[i+0] = (OPJ_INT32)((val0 << 5) | (val1 >> 3));
-               pDst[i+1] = (OPJ_INT32)(((val1 & 0x7U) << 10) | (val2 << 2) | (val3 >> 6));
-               pDst[i+2] = (OPJ_INT32)(((val3 & 0x3FU) << 7) | (val4 >> 1));
-               pDst[i+3] = (OPJ_INT32)(((val4 & 0x1U) << 12) | (val5 << 4) | (val6 >> 4));
-               pDst[i+4] = (OPJ_INT32)(((val6 & 0xFU) << 9) | (val7 << 1) | (val8 >> 7));
-               pDst[i+5] = (OPJ_INT32)(((val8 & 0x7FU) << 6) | (val9 >> 2));
-               pDst[i+6] = (OPJ_INT32)(((val9 & 0x3U) << 11) | (val10 << 3) | (val11 >> 5));
-               pDst[i+7] = (OPJ_INT32)(((val11 & 0x1FU) << 8) | (val12));
-               
-       }
-       if (length & 7U) {
-               unsigned int val;
-               int available = 0;
-               
-               length = length & 7U;
-               
-               GETBITS(pDst[i+0], 13)
-               
-               if (length > 1U) {
-                       GETBITS(pDst[i+1], 13)
-                       if (length > 2U) {
-                               GETBITS(pDst[i+2], 13)
-                               if (length > 3U) {
-                                       GETBITS(pDst[i+3], 13)
-                                       if (length > 4U) {
-                                               GETBITS(pDst[i+4], 13)
-                                               if (length > 5U) {
-                                                       GETBITS(pDst[i+5], 13)
-                                                       if (length > 6U) {
-                                                               GETBITS(pDst[i+6], 13)
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
+        OPJ_UINT32 val0 = *pSrc++;
+        OPJ_UINT32 val1 = *pSrc++;
+        OPJ_UINT32 val2 = *pSrc++;
+        OPJ_UINT32 val3 = *pSrc++;
+        OPJ_UINT32 val4 = *pSrc++;
+        OPJ_UINT32 val5 = *pSrc++;
+        OPJ_UINT32 val6 = *pSrc++;
+        OPJ_UINT32 val7 = *pSrc++;
+        OPJ_UINT32 val8 = *pSrc++;
+        OPJ_UINT32 val9 = *pSrc++;
+        OPJ_UINT32 val10 = *pSrc++;
+        OPJ_UINT32 val11 = *pSrc++;
+        OPJ_UINT32 val12 = *pSrc++;
+
+        pDst[i + 0] = (OPJ_INT32)((val0 << 5) | (val1 >> 3));
+        pDst[i + 1] = (OPJ_INT32)(((val1 & 0x7U) << 10) | (val2 << 2) | (val3 >> 6));
+        pDst[i + 2] = (OPJ_INT32)(((val3 & 0x3FU) << 7) | (val4 >> 1));
+        pDst[i + 3] = (OPJ_INT32)(((val4 & 0x1U) << 12) | (val5 << 4) | (val6 >> 4));
+        pDst[i + 4] = (OPJ_INT32)(((val6 & 0xFU) << 9) | (val7 << 1) | (val8 >> 7));
+        pDst[i + 5] = (OPJ_INT32)(((val8 & 0x7FU) << 6) | (val9 >> 2));
+        pDst[i + 6] = (OPJ_INT32)(((val9 & 0x3U) << 11) | (val10 << 3) | (val11 >> 5));
+        pDst[i + 7] = (OPJ_INT32)(((val11 & 0x1FU) << 8) | (val12));
+
+    }
+    if (length & 7U) {
+        unsigned int val;
+        int available = 0;
+
+        length = length & 7U;
+
+        GETBITS(pDst[i + 0], 13)
+
+        if (length > 1U) {
+            GETBITS(pDst[i + 1], 13)
+            if (length > 2U) {
+                GETBITS(pDst[i + 2], 13)
+                if (length > 3U) {
+                    GETBITS(pDst[i + 3], 13)
+                    if (length > 4U) {
+                        GETBITS(pDst[i + 4], 13)
+                        if (length > 5U) {
+                            GETBITS(pDst[i + 5], 13)
+                            if (length > 6U) {
+                                GETBITS(pDst[i + 6], 13)
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
 }
-static void tif_14uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst, OPJ_SIZE_T length)
+static void tif_14uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
+                         OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)3U); i+=4U) {
-               OPJ_UINT32 val0 = *pSrc++;
-               OPJ_UINT32 val1 = *pSrc++;
-               OPJ_UINT32 val2 = *pSrc++;
-               OPJ_UINT32 val3 = *pSrc++;
-               OPJ_UINT32 val4 = *pSrc++;
-               OPJ_UINT32 val5 = *pSrc++;
-               OPJ_UINT32 val6 = *pSrc++;
-               
-               pDst[i+0] = (OPJ_INT32)((val0 << 6) | (val1 >> 2));
-               pDst[i+1] = (OPJ_INT32)(((val1 & 0x3U) << 12) | (val2 << 4) | (val3 >> 4));
-               pDst[i+2] = (OPJ_INT32)(((val3 & 0xFU) << 10) | (val4 << 2) | (val5 >> 6));
-               pDst[i+3] = (OPJ_INT32)(((val5 & 0x3FU) << 8) | val6);
-               
-       }
-       if (length & 3U) {
-               OPJ_UINT32 val0 = *pSrc++;
-               OPJ_UINT32 val1 = *pSrc++;
-               length = length & 3U;
-               pDst[i+0] = (OPJ_INT32)((val0 << 6) | (val1 >> 2));
-               
-               if (length > 1U) {
-                       OPJ_UINT32 val2 = *pSrc++;
-                       OPJ_UINT32 val3 = *pSrc++;
-                       pDst[i+1] = (OPJ_INT32)(((val1 & 0x3U) << 12) | (val2 << 4) | (val3 >> 4));
-                       if (length > 2U) {
-                               OPJ_UINT32 val4 = *pSrc++;
-                               OPJ_UINT32 val5 = *pSrc++;
-                               pDst[i+2] = (OPJ_INT32)(((val3 & 0xFU) << 10) | (val4 << 2) | (val5 >> 6));
-                       }
-               }
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)3U); i += 4U) {
+        OPJ_UINT32 val0 = *pSrc++;
+        OPJ_UINT32 val1 = *pSrc++;
+        OPJ_UINT32 val2 = *pSrc++;
+        OPJ_UINT32 val3 = *pSrc++;
+        OPJ_UINT32 val4 = *pSrc++;
+        OPJ_UINT32 val5 = *pSrc++;
+        OPJ_UINT32 val6 = *pSrc++;
+
+        pDst[i + 0] = (OPJ_INT32)((val0 << 6) | (val1 >> 2));
+        pDst[i + 1] = (OPJ_INT32)(((val1 & 0x3U) << 12) | (val2 << 4) | (val3 >> 4));
+        pDst[i + 2] = (OPJ_INT32)(((val3 & 0xFU) << 10) | (val4 << 2) | (val5 >> 6));
+        pDst[i + 3] = (OPJ_INT32)(((val5 & 0x3FU) << 8) | val6);
+
+    }
+    if (length & 3U) {
+        OPJ_UINT32 val0 = *pSrc++;
+        OPJ_UINT32 val1 = *pSrc++;
+        length = length & 3U;
+        pDst[i + 0] = (OPJ_INT32)((val0 << 6) | (val1 >> 2));
+
+        if (length > 1U) {
+            OPJ_UINT32 val2 = *pSrc++;
+            OPJ_UINT32 val3 = *pSrc++;
+            pDst[i + 1] = (OPJ_INT32)(((val1 & 0x3U) << 12) | (val2 << 4) | (val3 >> 4));
+            if (length > 2U) {
+                OPJ_UINT32 val4 = *pSrc++;
+                OPJ_UINT32 val5 = *pSrc++;
+                pDst[i + 2] = (OPJ_INT32)(((val3 & 0xFU) << 10) | (val4 << 2) | (val5 >> 6));
+            }
+        }
+    }
 }
-static void tif_15uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst, OPJ_SIZE_T length)
+static void tif_15uto32s(const OPJ_BYTE* pSrc, OPJ_INT32* pDst,
+                         OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i+=8U) {
-               OPJ_UINT32 val0 = *pSrc++;
-               OPJ_UINT32 val1 = *pSrc++;
-               OPJ_UINT32 val2 = *pSrc++;
-               OPJ_UINT32 val3 = *pSrc++;
-               OPJ_UINT32 val4 = *pSrc++;
-               OPJ_UINT32 val5 = *pSrc++;
-               OPJ_UINT32 val6 = *pSrc++;
-               OPJ_UINT32 val7 = *pSrc++;
-               OPJ_UINT32 val8 = *pSrc++;
-               OPJ_UINT32 val9 = *pSrc++;
-               OPJ_UINT32 val10 = *pSrc++;
-               OPJ_UINT32 val11 = *pSrc++;
-               OPJ_UINT32 val12 = *pSrc++;
-               OPJ_UINT32 val13 = *pSrc++;
-               OPJ_UINT32 val14 = *pSrc++;
-               
-               pDst[i+0] = (OPJ_INT32)((val0 << 7) | (val1 >> 1));
-               pDst[i+1] = (OPJ_INT32)(((val1 & 0x1U) << 14) | (val2 << 6) | (val3 >> 2));
-               pDst[i+2] = (OPJ_INT32)(((val3 & 0x3U) << 13) | (val4 << 5) | (val5 >> 3));
-               pDst[i+3] = (OPJ_INT32)(((val5 & 0x7U) << 12) | (val6 << 4) | (val7 >> 4));
-               pDst[i+4] = (OPJ_INT32)(((val7 & 0xFU) << 11) | (val8 << 3) | (val9 >> 5));
-               pDst[i+5] = (OPJ_INT32)(((val9 & 0x1FU) << 10) | (val10 << 2) | (val11 >> 6));
-               pDst[i+6] = (OPJ_INT32)(((val11 & 0x3FU) << 9) | (val12 << 1) | (val13 >> 7));
-               pDst[i+7] = (OPJ_INT32)(((val13 & 0x7FU) << 8) | (val14));
-               
-       }
-       if (length & 7U) {
-               unsigned int val;
-               int available = 0;
-               
-               length = length & 7U;
-               
-               GETBITS(pDst[i+0], 15)
-
-               if (length > 1U) {
-                       GETBITS(pDst[i+1], 15)
-                       if (length > 2U) {
-                               GETBITS(pDst[i+2], 15)
-                               if (length > 3U) {
-                                       GETBITS(pDst[i+3], 15)
-                                       if (length > 4U) {
-                                               GETBITS(pDst[i+4], 15)
-                                               if (length > 5U) {
-                                                       GETBITS(pDst[i+5], 15)
-                                                       if (length > 6U) {
-                                                               GETBITS(pDst[i+6], 15)
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < (length & ~(OPJ_SIZE_T)7U); i += 8U) {
+        OPJ_UINT32 val0 = *pSrc++;
+        OPJ_UINT32 val1 = *pSrc++;
+        OPJ_UINT32 val2 = *pSrc++;
+        OPJ_UINT32 val3 = *pSrc++;
+        OPJ_UINT32 val4 = *pSrc++;
+        OPJ_UINT32 val5 = *pSrc++;
+        OPJ_UINT32 val6 = *pSrc++;
+        OPJ_UINT32 val7 = *pSrc++;
+        OPJ_UINT32 val8 = *pSrc++;
+        OPJ_UINT32 val9 = *pSrc++;
+        OPJ_UINT32 val10 = *pSrc++;
+        OPJ_UINT32 val11 = *pSrc++;
+        OPJ_UINT32 val12 = *pSrc++;
+        OPJ_UINT32 val13 = *pSrc++;
+        OPJ_UINT32 val14 = *pSrc++;
+
+        pDst[i + 0] = (OPJ_INT32)((val0 << 7) | (val1 >> 1));
+        pDst[i + 1] = (OPJ_INT32)(((val1 & 0x1U) << 14) | (val2 << 6) | (val3 >> 2));
+        pDst[i + 2] = (OPJ_INT32)(((val3 & 0x3U) << 13) | (val4 << 5) | (val5 >> 3));
+        pDst[i + 3] = (OPJ_INT32)(((val5 & 0x7U) << 12) | (val6 << 4) | (val7 >> 4));
+        pDst[i + 4] = (OPJ_INT32)(((val7 & 0xFU) << 11) | (val8 << 3) | (val9 >> 5));
+        pDst[i + 5] = (OPJ_INT32)(((val9 & 0x1FU) << 10) | (val10 << 2) | (val11 >> 6));
+        pDst[i + 6] = (OPJ_INT32)(((val11 & 0x3FU) << 9) | (val12 << 1) | (val13 >> 7));
+        pDst[i + 7] = (OPJ_INT32)(((val13 & 0x7FU) << 8) | (val14));
+
+    }
+    if (length & 7U) {
+        unsigned int val;
+        int available = 0;
+
+        length = length & 7U;
+
+        GETBITS(pDst[i + 0], 15)
+
+        if (length > 1U) {
+            GETBITS(pDst[i + 1], 15)
+            if (length > 2U) {
+                GETBITS(pDst[i + 2], 15)
+                if (length > 3U) {
+                    GETBITS(pDst[i + 3], 15)
+                    if (length > 4U) {
+                        GETBITS(pDst[i + 4], 15)
+                        if (length > 5U) {
+                            GETBITS(pDst[i + 5], 15)
+                            if (length > 6U) {
+                                GETBITS(pDst[i + 6], 15)
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
 }
 
 /* seems that libtiff decodes this to machine endianness */
-static void tif_16uto32s(const OPJ_UINT16* pSrc, OPJ_INT32* pDst, OPJ_SIZE_T length)
+static void tif_16uto32s(const OPJ_UINT16* pSrc, OPJ_INT32* pDst,
+                         OPJ_SIZE_T length)
 {
-       OPJ_SIZE_T i;
-       for (i = 0; i < length; i++) {
-               pDst[i] = pSrc[i];
-       }
+    OPJ_SIZE_T i;
+    for (i = 0; i < length; i++) {
+        pDst[i] = pSrc[i];
+    }
 }
 
 /*
@@ -1206,252 +1230,245 @@ static void tif_16uto32s(const OPJ_UINT16* pSrc, OPJ_INT32* pDst, OPJ_SIZE_T len
  */
 opj_image_t* tiftoimage(const char *filename, opj_cparameters_t *parameters)
 {
-       int subsampling_dx = parameters->subsampling_dx;
-       int subsampling_dy = parameters->subsampling_dy;
-       TIFF *tif;
-       tdata_t buf;
-       tstrip_t strip;
-       tsize_t strip_size;
-       int j, currentPlane, numcomps = 0, w, h;
-       OPJ_COLOR_SPACE color_space = OPJ_CLRSPC_UNKNOWN;
-       opj_image_cmptparm_t cmptparm[4]; /* RGBA */
-       opj_image_t *image = NULL;
-       int has_alpha = 0;
-       unsigned short tiBps, tiPhoto, tiSf, tiSpp, tiPC;
-       unsigned int tiWidth, tiHeight;
-       OPJ_BOOL is_cinema = OPJ_IS_CINEMA(parameters->rsiz);
-       convert_XXx32s_C1R cvtTifTo32s = NULL;
-       convert_32s_CXPX cvtCxToPx = NULL;
-       OPJ_INT32* buffer32s = NULL;
-       OPJ_INT32* planes[4];
-       OPJ_SIZE_T rowStride;
-       
-       tif = TIFFOpen(filename, "r");
-       
-       if(!tif)
-       {
-               fprintf(stderr, "tiftoimage:Failed to open %s for reading\n", filename);
-               return 0;
-       }
-       tiBps = tiPhoto = tiSf = tiSpp = tiPC = 0;
-       tiWidth = tiHeight = 0;
-       
-       TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &tiWidth);
-       TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &tiHeight);
-       TIFFGetField(tif, TIFFTAG_BITSPERSAMPLE, &tiBps);
-       TIFFGetField(tif, TIFFTAG_SAMPLEFORMAT, &tiSf);
-       TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &tiSpp);
-       TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &tiPhoto);
-       TIFFGetField(tif, TIFFTAG_PLANARCONFIG, &tiPC);
-       w= (int)tiWidth;
-       h= (int)tiHeight;
-       
-       if(tiBps > 16U) {
-               fprintf(stderr,"tiftoimage: Bits=%d, Only 1 to 16 bits implemented\n",tiBps);
-               fprintf(stderr,"\tAborting\n");
-               TIFFClose(tif);
-               return NULL;
-       }
-       if(tiPhoto != PHOTOMETRIC_MINISBLACK && tiPhoto != PHOTOMETRIC_RGB) {
-               fprintf(stderr,"tiftoimage: Bad color format %d.\n\tOnly RGB(A) and GRAY(A) has been implemented\n",(int) tiPhoto);
-               fprintf(stderr,"\tAborting\n");
-               TIFFClose(tif);
-               return NULL;
-       }
-       
-       switch (tiBps) {
-               case 1:
-               case 2:
-               case 4:
-               case 6:
-               case 8:
-                       cvtTifTo32s = convert_XXu32s_C1R_LUT[tiBps];
-                       break;
-               /* others are specific to TIFF */
-               case 3:
-                       cvtTifTo32s = tif_3uto32s;
-                       break;
-               case 5:
-                       cvtTifTo32s = tif_5uto32s;
-                       break;
-               case 7:
-                       cvtTifTo32s = tif_7uto32s;
-                       break;
-               case 9:
-                       cvtTifTo32s = tif_9uto32s;
-                       break;
-               case 10:
-                       cvtTifTo32s = tif_10uto32s;
-                       break;
-               case 11:
-                       cvtTifTo32s = tif_11uto32s;
-                       break;
-               case 12:
-                       cvtTifTo32s = tif_12uto32s;
-                       break;
-               case 13:
-                       cvtTifTo32s = tif_13uto32s;
-                       break;
-               case 14:
-                       cvtTifTo32s = tif_14uto32s;
-                       break;
-               case 15:
-                       cvtTifTo32s = tif_15uto32s;
-                       break;
-               case 16:
-                       cvtTifTo32s = (convert_XXx32s_C1R)tif_16uto32s;
-                       break;
-               default:
-                       /* never here */
-                       break;
-       }
-       
-       {/* From: tiff-4.0.x/libtiff/tif_getimage.c : */
-               uint16* sampleinfo;
-               uint16 extrasamples;
-               
-               TIFFGetFieldDefaulted(tif, TIFFTAG_EXTRASAMPLES,
-                                                                                                       &extrasamples, &sampleinfo);
-               
-               if(extrasamples >= 1)
-               {
-                       switch(sampleinfo[0])
-                       {
-                               case EXTRASAMPLE_UNSPECIFIED:
-                                       /* Workaround for some images without correct info about alpha channel
-                                        */
-                                       if(tiSpp > 3)
-                                               has_alpha = 1;
-                                       break;
-                                       
-                               case EXTRASAMPLE_ASSOCALPHA: /* data pre-multiplied */
-                               case EXTRASAMPLE_UNASSALPHA: /* data not pre-multiplied */
-                                       has_alpha = 1;
-                                       break;
-                       }
-               }
-               else /* extrasamples == 0 */
-                       if(tiSpp == 4 || tiSpp == 2) has_alpha = 1;
-       }
-       
-       /* initialize image components */
-       memset(&cmptparm[0], 0, 4 * sizeof(opj_image_cmptparm_t));
-       
-       if ((tiPhoto == PHOTOMETRIC_RGB) && (is_cinema) && (tiBps != 12U)) {
-               fprintf(stdout,"WARNING:\n"
-                                               "Input image bitdepth is %d bits\n"
-                                               "TIF conversion has automatically rescaled to 12-bits\n"
-                                               "to comply with cinema profiles.\n",
-                                               tiBps);
-       } else {
-               is_cinema = 0U;
-       }
-       
-       if(tiPhoto == PHOTOMETRIC_RGB) /* RGB(A) */
-       {
-               numcomps = 3 + has_alpha;
-               color_space = OPJ_CLRSPC_SRGB;
-       }
-       else if (tiPhoto == PHOTOMETRIC_MINISBLACK) /* GRAY(A) */
-       {
-               numcomps = 1 + has_alpha;
-               color_space = OPJ_CLRSPC_GRAY;
-       }
-       
-       cvtCxToPx = convert_32s_CXPX_LUT[numcomps];
-       if (tiPC == PLANARCONFIG_SEPARATE) {
-               cvtCxToPx = convert_32s_CXPX_LUT[1]; /* override */
-               tiSpp = 1U; /* consider only one sample per plane */
-       }
-
-       for(j = 0; j < numcomps; j++)
-       {
-               cmptparm[j].prec = tiBps;
-               cmptparm[j].bpp = tiBps;
-               cmptparm[j].dx = (OPJ_UINT32)subsampling_dx;
-               cmptparm[j].dy = (OPJ_UINT32)subsampling_dy;
-               cmptparm[j].w = (OPJ_UINT32)w;
-               cmptparm[j].h = (OPJ_UINT32)h;
-       }
-               
-       image = opj_image_create((OPJ_UINT32)numcomps, &cmptparm[0], color_space);
-       if(!image)
-       {
-               TIFFClose(tif);
-               return NULL;
-       }
-       /* set image offset and reference grid */
-       image->x0 = (OPJ_UINT32)parameters->image_offset_x0;
-       image->y0 = (OPJ_UINT32)parameters->image_offset_y0;
-       image->x1 =     !image->x0 ? (OPJ_UINT32)(w - 1) * (OPJ_UINT32)subsampling_dx + 1 :
-       image->x0 + (OPJ_UINT32)(w - 1) * (OPJ_UINT32)subsampling_dx + 1;
-       image->y1 =     !image->y0 ? (OPJ_UINT32)(h - 1) * (OPJ_UINT32)subsampling_dy + 1 :
-       image->y0 + (OPJ_UINT32)(h - 1) * (OPJ_UINT32)subsampling_dy + 1;
-
-       for(j = 0; j < numcomps; j++)
-       {
-               planes[j] = image->comps[j].data;
-       }
-       image->comps[numcomps - 1].alpha = (OPJ_UINT16)(1 - (numcomps & 1));
-               
-       strip_size = TIFFStripSize(tif);
-       
-       buf = _TIFFmalloc(strip_size);
-       if (buf == NULL) {
-               TIFFClose(tif);
-               opj_image_destroy(image);
-               return NULL;
-       }
-       rowStride = ((OPJ_SIZE_T)w * tiSpp * tiBps + 7U) / 8U;
-       buffer32s = (OPJ_INT32 *)malloc((OPJ_SIZE_T)w * tiSpp * sizeof(OPJ_INT32));
-       if (buffer32s == NULL) {
-               _TIFFfree(buf);
-               TIFFClose(tif);
-               opj_image_destroy(image);
-               return NULL;
-       }
-       
-       strip = 0;
-       currentPlane = 0;
-       do
-       {
-               planes[0] = image->comps[currentPlane].data; /* to manage planar data */
-               h= (int)tiHeight;
-               /* Read the Image components */
-               for(; (h > 0) && (strip < TIFFNumberOfStrips(tif)); strip++)
-               {
-                               const OPJ_UINT8 *dat8;
-                               OPJ_SIZE_T ssize;
-                               
-                               ssize = (OPJ_SIZE_T)TIFFReadEncodedStrip(tif, strip, buf, strip_size);
-                               dat8 = (const OPJ_UINT8*)buf;
-                               
-                               while (ssize >= rowStride) {
-                                       cvtTifTo32s(dat8, buffer32s, (OPJ_SIZE_T)w * tiSpp);
-                                       cvtCxToPx(buffer32s, planes, (OPJ_SIZE_T)w);
-                                       planes[0] += w;
-                                       planes[1] += w;
-                                       planes[2] += w;
-                                       planes[3] += w;
-                                       dat8  += rowStride;
-                                       ssize -= rowStride;
-                                       h--;
-                               }
-               }
-               currentPlane++;
-       } while ((tiPC == PLANARCONFIG_SEPARATE) && (currentPlane < numcomps));
-       
-       free(buffer32s);
-       _TIFFfree(buf);
-       TIFFClose(tif);
-       
-       if (is_cinema) {
-               for (j=0; j < numcomps; ++j) {
-                       scale_component(&(image->comps[j]), 12);
-               }
-               
-       }
-       return image;
+    int subsampling_dx = parameters->subsampling_dx;
+    int subsampling_dy = parameters->subsampling_dy;
+    TIFF *tif;
+    tdata_t buf;
+    tstrip_t strip;
+    tsize_t strip_size;
+    int j, currentPlane, numcomps = 0, w, h;
+    OPJ_COLOR_SPACE color_space = OPJ_CLRSPC_UNKNOWN;
+    opj_image_cmptparm_t cmptparm[4]; /* RGBA */
+    opj_image_t *image = NULL;
+    int has_alpha = 0;
+    unsigned short tiBps, tiPhoto, tiSf, tiSpp, tiPC;
+    unsigned int tiWidth, tiHeight;
+    OPJ_BOOL is_cinema = OPJ_IS_CINEMA(parameters->rsiz);
+    convert_XXx32s_C1R cvtTifTo32s = NULL;
+    convert_32s_CXPX cvtCxToPx = NULL;
+    OPJ_INT32* buffer32s = NULL;
+    OPJ_INT32* planes[4];
+    OPJ_SIZE_T rowStride;
+
+    tif = TIFFOpen(filename, "r");
+
+    if (!tif) {
+        fprintf(stderr, "tiftoimage:Failed to open %s for reading\n", filename);
+        return 0;
+    }
+    tiBps = tiPhoto = tiSf = tiSpp = tiPC = 0;
+    tiWidth = tiHeight = 0;
+
+    TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &tiWidth);
+    TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &tiHeight);
+    TIFFGetField(tif, TIFFTAG_BITSPERSAMPLE, &tiBps);
+    TIFFGetField(tif, TIFFTAG_SAMPLEFORMAT, &tiSf);
+    TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &tiSpp);
+    TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &tiPhoto);
+    TIFFGetField(tif, TIFFTAG_PLANARCONFIG, &tiPC);
+    w = (int)tiWidth;
+    h = (int)tiHeight;
+
+    if (tiBps > 16U) {
+        fprintf(stderr, "tiftoimage: Bits=%d, Only 1 to 16 bits implemented\n", tiBps);
+        fprintf(stderr, "\tAborting\n");
+        TIFFClose(tif);
+        return NULL;
+    }
+    if (tiPhoto != PHOTOMETRIC_MINISBLACK && tiPhoto != PHOTOMETRIC_RGB) {
+        fprintf(stderr,
+                "tiftoimage: Bad color format %d.\n\tOnly RGB(A) and GRAY(A) has been implemented\n",
+                (int) tiPhoto);
+        fprintf(stderr, "\tAborting\n");
+        TIFFClose(tif);
+        return NULL;
+    }
+
+    switch (tiBps) {
+    case 1:
+    case 2:
+    case 4:
+    case 6:
+    case 8:
+        cvtTifTo32s = convert_XXu32s_C1R_LUT[tiBps];
+        break;
+    /* others are specific to TIFF */
+    case 3:
+        cvtTifTo32s = tif_3uto32s;
+        break;
+    case 5:
+        cvtTifTo32s = tif_5uto32s;
+        break;
+    case 7:
+        cvtTifTo32s = tif_7uto32s;
+        break;
+    case 9:
+        cvtTifTo32s = tif_9uto32s;
+        break;
+    case 10:
+        cvtTifTo32s = tif_10uto32s;
+        break;
+    case 11:
+        cvtTifTo32s = tif_11uto32s;
+        break;
+    case 12:
+        cvtTifTo32s = tif_12uto32s;
+        break;
+    case 13:
+        cvtTifTo32s = tif_13uto32s;
+        break;
+    case 14:
+        cvtTifTo32s = tif_14uto32s;
+        break;
+    case 15:
+        cvtTifTo32s = tif_15uto32s;
+        break;
+    case 16:
+        cvtTifTo32s = (convert_XXx32s_C1R)tif_16uto32s;
+        break;
+    default:
+        /* never here */
+        break;
+    }
+
+    {/* From: tiff-4.0.x/libtiff/tif_getimage.c : */
+        uint16* sampleinfo;
+        uint16 extrasamples;
+
+        TIFFGetFieldDefaulted(tif, TIFFTAG_EXTRASAMPLES,
+                              &extrasamples, &sampleinfo);
+
+        if (extrasamples >= 1) {
+            switch (sampleinfo[0]) {
+            case EXTRASAMPLE_UNSPECIFIED:
+                /* Workaround for some images without correct info about alpha channel
+                 */
+                if (tiSpp > 3) {
+                    has_alpha = 1;
+                }
+                break;
+
+            case EXTRASAMPLE_ASSOCALPHA: /* data pre-multiplied */
+            case EXTRASAMPLE_UNASSALPHA: /* data not pre-multiplied */
+                has_alpha = 1;
+                break;
+            }
+        } else /* extrasamples == 0 */
+            if (tiSpp == 4 || tiSpp == 2) {
+                has_alpha = 1;
+            }
+    }
+
+    /* initialize image components */
+    memset(&cmptparm[0], 0, 4 * sizeof(opj_image_cmptparm_t));
+
+    if ((tiPhoto == PHOTOMETRIC_RGB) && (is_cinema) && (tiBps != 12U)) {
+        fprintf(stdout, "WARNING:\n"
+                "Input image bitdepth is %d bits\n"
+                "TIF conversion has automatically rescaled to 12-bits\n"
+                "to comply with cinema profiles.\n",
+                tiBps);
+    } else {
+        is_cinema = 0U;
+    }
+
+    if (tiPhoto == PHOTOMETRIC_RGB) { /* RGB(A) */
+        numcomps = 3 + has_alpha;
+        color_space = OPJ_CLRSPC_SRGB;
+    } else if (tiPhoto == PHOTOMETRIC_MINISBLACK) { /* GRAY(A) */
+        numcomps = 1 + has_alpha;
+        color_space = OPJ_CLRSPC_GRAY;
+    }
+
+    cvtCxToPx = convert_32s_CXPX_LUT[numcomps];
+    if (tiPC == PLANARCONFIG_SEPARATE) {
+        cvtCxToPx = convert_32s_CXPX_LUT[1]; /* override */
+        tiSpp = 1U; /* consider only one sample per plane */
+    }
+
+    for (j = 0; j < numcomps; j++) {
+        cmptparm[j].prec = tiBps;
+        cmptparm[j].bpp = tiBps;
+        cmptparm[j].dx = (OPJ_UINT32)subsampling_dx;
+        cmptparm[j].dy = (OPJ_UINT32)subsampling_dy;
+        cmptparm[j].w = (OPJ_UINT32)w;
+        cmptparm[j].h = (OPJ_UINT32)h;
+    }
+
+    image = opj_image_create((OPJ_UINT32)numcomps, &cmptparm[0], color_space);
+    if (!image) {
+        TIFFClose(tif);
+        return NULL;
+    }
+    /* set image offset and reference grid */
+    image->x0 = (OPJ_UINT32)parameters->image_offset_x0;
+    image->y0 = (OPJ_UINT32)parameters->image_offset_y0;
+    image->x1 = !image->x0 ? (OPJ_UINT32)(w - 1) * (OPJ_UINT32)subsampling_dx + 1 :
+                image->x0 + (OPJ_UINT32)(w - 1) * (OPJ_UINT32)subsampling_dx + 1;
+    image->y1 = !image->y0 ? (OPJ_UINT32)(h - 1) * (OPJ_UINT32)subsampling_dy + 1 :
+                image->y0 + (OPJ_UINT32)(h - 1) * (OPJ_UINT32)subsampling_dy + 1;
+
+    for (j = 0; j < numcomps; j++) {
+        planes[j] = image->comps[j].data;
+    }
+    image->comps[numcomps - 1].alpha = (OPJ_UINT16)(1 - (numcomps & 1));
+
+    strip_size = TIFFStripSize(tif);
+
+    buf = _TIFFmalloc(strip_size);
+    if (buf == NULL) {
+        TIFFClose(tif);
+        opj_image_destroy(image);
+        return NULL;
+    }
+    rowStride = ((OPJ_SIZE_T)w * tiSpp * tiBps + 7U) / 8U;
+    buffer32s = (OPJ_INT32 *)malloc((OPJ_SIZE_T)w * tiSpp * sizeof(OPJ_INT32));
+    if (buffer32s == NULL) {
+        _TIFFfree(buf);
+        TIFFClose(tif);
+        opj_image_destroy(image);
+        return NULL;
+    }
+
+    strip = 0;
+    currentPlane = 0;
+    do {
+        planes[0] = image->comps[currentPlane].data; /* to manage planar data */
+        h = (int)tiHeight;
+        /* Read the Image components */
+        for (; (h > 0) && (strip < TIFFNumberOfStrips(tif)); strip++) {
+            const OPJ_UINT8 *dat8;
+            OPJ_SIZE_T ssize;
+
+            ssize = (OPJ_SIZE_T)TIFFReadEncodedStrip(tif, strip, buf, strip_size);
+            dat8 = (const OPJ_UINT8*)buf;
+
+            while (ssize >= rowStride) {
+                cvtTifTo32s(dat8, buffer32s, (OPJ_SIZE_T)w * tiSpp);
+                cvtCxToPx(buffer32s, planes, (OPJ_SIZE_T)w);
+                planes[0] += w;
+                planes[1] += w;
+                planes[2] += w;
+                planes[3] += w;
+                dat8  += rowStride;
+                ssize -= rowStride;
+                h--;
+            }
+        }
+        currentPlane++;
+    } while ((tiPC == PLANARCONFIG_SEPARATE) && (currentPlane < numcomps));
+
+    free(buffer32s);
+    _TIFFfree(buf);
+    TIFFClose(tif);
+
+    if (is_cinema) {
+        for (j = 0; j < numcomps; ++j) {
+            scale_component(&(image->comps[j]), 12);
+        }
+
+    }
+    return image;
 
 }/* tiftoimage() */
 
index 478f556a0a8a898ebaf90995d6a58353931fd06a..3eae2f974af1226a1480fcd67c9f0c4a127b1383 100644 (file)
@@ -1,12 +1,12 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
  * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
  * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
 
 /**
 Write a structured index to a file
-@param cstr_info Codestream information 
+@param cstr_info Codestream information
 @param index Index filename
 @return Returns 0 if successful, returns 1 otherwise
 */
-int write_index_file(opj_codestream_info_t *cstr_info, char *index) {
-       int tileno, compno, layno, resno, precno, pack_nb, x, y;
-       FILE *stream = NULL;
-       double total_disto = 0;
-/* UniPG>> */
-       int tilepartno;
-       char disto_on, numpix_on;
+int write_index_file(opj_codestream_info_t *cstr_info, char *index)
+{
+    int tileno, compno, layno, resno, precno, pack_nb, x, y;
+    FILE *stream = NULL;
+    double total_disto = 0;
+    /* UniPG>> */
+    int tilepartno;
+    char disto_on, numpix_on;
 
 #ifdef USE_JPWL
-       if (!strcmp(index, JPWL_PRIVATEINDEX_NAME))
-               return 0;
+    if (!strcmp(index, JPWL_PRIVATEINDEX_NAME)) {
+        return 0;
+    }
 #endif /* USE_JPWL */
-/* <<UniPG */
-
-       if (!cstr_info)         
-               return 1;
-
-       stream = fopen(index, "w");
-       if (!stream) {
-               fprintf(stderr, "failed to open index file [%s] for writing\n", index);
-               return 1;
-       }
-       
-       if (cstr_info->tile[0].distotile > 0.0)
-               disto_on = 1;
-       else 
-               disto_on = 0;
-
-       if (cstr_info->tile[0].numpix)
-               numpix_on = 1;
-       else 
-               numpix_on = 0;
-
-       fprintf(stream, "%d %d\n", cstr_info->image_w, cstr_info->image_h);
-       fprintf(stream, "%d\n", cstr_info->prog);
-       fprintf(stream, "%d %d\n", cstr_info->tile_x, cstr_info->tile_y);
-       fprintf(stream, "%d %d\n", cstr_info->tw, cstr_info->th);
-       fprintf(stream, "%d\n", cstr_info->numcomps);
-       fprintf(stream, "%d\n", cstr_info->numlayers);
-       fprintf(stream, "%d\n", cstr_info->numdecompos[0]); /* based on component 0 */
-
-       for (resno = cstr_info->numdecompos[0]; resno >= 0; resno--) {
-               fprintf(stream, "[%d,%d] ", 
-                       (1 << cstr_info->tile[0].pdx[resno]), (1 << cstr_info->tile[0].pdx[resno]));    /* based on tile 0 and component 0 */
-       }
-
-       fprintf(stream, "\n");
-/* UniPG>> */
-       fprintf(stream, "%d\n", cstr_info->main_head_start);
-/* <<UniPG */
-       fprintf(stream, "%d\n", cstr_info->main_head_end);
-       fprintf(stream, "%d\n", cstr_info->codestream_size);
-       
-       fprintf(stream, "\nINFO ON TILES\n");
-       fprintf(stream, "tileno start_pos  end_hd  end_tile   nbparts");
-       if (disto_on)
-               fprintf(stream,"         disto");
-       if (numpix_on)
-               fprintf(stream,"     nbpix");
-       if (disto_on && numpix_on)
-               fprintf(stream,"  disto/nbpix");
-       fprintf(stream, "\n");
-
-       for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) {
-               fprintf(stream, "%4d %9d %9d %9d %9d", 
-                       cstr_info->tile[tileno].tileno,
-                       cstr_info->tile[tileno].start_pos,
-                       cstr_info->tile[tileno].end_header,
-                       cstr_info->tile[tileno].end_pos,
-                       cstr_info->tile[tileno].num_tps);
-               if (disto_on)
-                       fprintf(stream," %9e", cstr_info->tile[tileno].distotile);
-               if (numpix_on)
-                       fprintf(stream," %9d", cstr_info->tile[tileno].numpix);
-               if (disto_on && numpix_on)
-                       fprintf(stream," %9e", cstr_info->tile[tileno].distotile / cstr_info->tile[tileno].numpix);
-               fprintf(stream, "\n");
-       }
-               
-       for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) {
-               OPJ_OFF_T start_pos, end_ph_pos, end_pos;
-               double disto = 0;
-               int max_numdecompos = 0;
-               pack_nb = 0;
-
-               for (compno = 0; compno < cstr_info->numcomps; compno++) {
-                       if (max_numdecompos < cstr_info->numdecompos[compno])
-                               max_numdecompos = cstr_info->numdecompos[compno];
-               }       
-
-               fprintf(stream, "\nTILE %d DETAILS\n", tileno); 
-               fprintf(stream, "part_nb tileno  start_pack num_packs  start_pos end_tph_pos   end_pos\n");
-               for (tilepartno = 0; tilepartno < cstr_info->tile[tileno].num_tps; tilepartno++)
-                       fprintf(stream, "%4d %9d   %9d %9d  %9d %11d %9d\n",
-                               tilepartno, tileno,
-                               cstr_info->tile[tileno].tp[tilepartno].tp_start_pack,
-                               cstr_info->tile[tileno].tp[tilepartno].tp_numpacks,
-                               cstr_info->tile[tileno].tp[tilepartno].tp_start_pos,
-                               cstr_info->tile[tileno].tp[tilepartno].tp_end_header,
-                               cstr_info->tile[tileno].tp[tilepartno].tp_end_pos
-                               );
-
-               if (cstr_info->prog == OPJ_LRCP) {      /* LRCP */
-                       fprintf(stream, "LRCP\npack_nb tileno layno resno compno precno start_pos end_ph_pos end_pos");
-                       if (disto_on)
-                               fprintf(stream, " disto");
-                       fprintf(stream,"\n");
-
-                       for (layno = 0; layno < cstr_info->numlayers; layno++) {
-                               for (resno = 0; resno < max_numdecompos + 1; resno++) {
-                                       for (compno = 0; compno < cstr_info->numcomps; compno++) {
-                                               int prec_max;
-                                               if (resno > cstr_info->numdecompos[compno])
-                                                       break;
-                                               prec_max = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];
-                                               for (precno = 0; precno < prec_max; precno++) {
-                                                       start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
-                                                       end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
-                                                       end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
-                                                       disto = cstr_info->tile[tileno].packet[pack_nb].disto;
-                                                       fprintf(stream, "%4d %6d %7d %5d %6d  %6d    %6" PRId64 "     %6" PRId64 " %7" PRId64,
-                                                               pack_nb, tileno, layno, resno, compno, precno, start_pos, end_ph_pos, end_pos);
-                                                       if (disto_on)
-                                                               fprintf(stream, " %8e", disto);
-                                                       fprintf(stream, "\n");
-                                                       total_disto += disto;
-                                                       pack_nb++;
-                                               }
-                                       }
-                               }
-                       }
-               } /* LRCP */
-
-               else if (cstr_info->prog == OPJ_RLCP) { /* RLCP */                      
-                       fprintf(stream, "RLCP\npack_nb tileno resno layno compno precno start_pos end_ph_pos end_pos\n");
-                       if (disto_on)
-                               fprintf(stream, " disto");
-                       fprintf(stream,"\n");
-
-                       for (resno = 0; resno < max_numdecompos + 1; resno++) {
-                               for (layno = 0; layno < cstr_info->numlayers; layno++) {
-                                       for (compno = 0; compno < cstr_info->numcomps; compno++) {
-                                               int prec_max; 
-                                               if (resno > cstr_info->numdecompos[compno])
-                                                       break;
-                                               prec_max = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];
-                                               for (precno = 0; precno < prec_max; precno++) {
-                                                       start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
-                                                       end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
-                                                       end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
-                                                       disto = cstr_info->tile[tileno].packet[pack_nb].disto;
-                                                       fprintf(stream, "%4d %6d %5d %7d %6d %6d %9" PRId64 "   %9" PRId64 " %7" PRId64,
-                                                               pack_nb, tileno, resno, layno, compno, precno, start_pos, end_ph_pos, end_pos);
-                                                       if (disto_on)
-                                                               fprintf(stream, " %8e", disto);
-                                                       fprintf(stream, "\n");
-                                                       total_disto += disto;
-                                                       pack_nb++;
-                                               }
-                                       }
-                               }
-                       }
-               } /* RLCP */
-
-               else if (cstr_info->prog == OPJ_RPCL) { /* RPCL */
-
-                       fprintf(stream, "RPCL\npack_nb tileno resno precno compno layno start_pos end_ph_pos end_pos"); 
-                       if (disto_on)
-                               fprintf(stream, " disto");
-                       fprintf(stream,"\n");
-
-                       for (resno = 0; resno < max_numdecompos + 1; resno++) {
-                               int numprec = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];
-                               for (precno = 0; precno < numprec; precno++) {                                                          
-                                       /* I suppose components have same XRsiz, YRsiz */
-                                       int x0 = cstr_info->tile_Ox + tileno - (int)floor((float)tileno/(float)cstr_info->tw ) * cstr_info->tw * cstr_info->tile_x;
-                                       int y0 = cstr_info->tile_Ox + (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tile_y;
-                                       int x1 = x0 + cstr_info->tile_x;
-                                       int y1 = y0 + cstr_info->tile_y;
-                                       for (compno = 0; compno < cstr_info->numcomps; compno++) {                                      
-                                               int pcnx = cstr_info->tile[tileno].pw[resno];
-                                               int pcx = (int) pow( 2, cstr_info->tile[tileno].pdx[resno] + cstr_info->numdecompos[compno] - resno );
-                                               int pcy = (int) pow( 2, cstr_info->tile[tileno].pdy[resno] + cstr_info->numdecompos[compno] - resno );
-                                               int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx;
-                                               int precno_y = (int) floor( (float)precno/(float)pcnx );
-                                               if (resno > cstr_info->numdecompos[compno])
-                                                       break;
-                                               for(y = y0; y < y1; y++) {                                                      
-                                                       if (precno_y*pcy == y ) {
-                                                               for (x = x0; x < x1; x++) {                                                                     
-                                                                       if (precno_x*pcx == x ) {
-                                                                               for (layno = 0; layno < cstr_info->numlayers; layno++) {
-                                                                                       start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
-                                                                                       end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
-                                                                                       end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
-                                                                                       disto = cstr_info->tile[tileno].packet[pack_nb].disto;
-                                                                                       fprintf(stream, "%4d %6d %5d %6d %6d %7d %9" PRId64 "   %9" PRId64 " %7" PRId64,
-                                                                                               pack_nb, tileno, resno, precno, compno, layno, start_pos, end_ph_pos, end_pos); 
-                                                                                       if (disto_on)
-                                                                                               fprintf(stream, " %8e", disto);
-                                                                                       fprintf(stream, "\n");
-                                                                                       total_disto += disto;
-                                                                                       pack_nb++; 
-                                                                               }
-                                                                       }
-                                                               }/* x = x0..x1 */
-                                                       } 
-                                               }  /* y = y0..y1 */
-                                       } /* precno */
-                               } /* compno */
-                       } /* resno */
-               } /* RPCL */
-
-               else if (cstr_info->prog == OPJ_PCRL) { /* PCRL */
-                       /* I suppose components have same XRsiz, YRsiz */
-                       int x0 = cstr_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tw * cstr_info->tile_x;
-                       int y0 = cstr_info->tile_Ox + (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tile_y;
-                       int x1 = x0 + cstr_info->tile_x;
-                       int y1 = y0 + cstr_info->tile_y;
-
-                       /* Count the maximum number of precincts */
-                       int max_numprec = 0;
-                       for (resno = 0; resno < max_numdecompos + 1; resno++) {
-                               int numprec = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];
-                               if (numprec > max_numprec)
-                                       max_numprec = numprec;
-                       }
-
-                       fprintf(stream, "PCRL\npack_nb tileno precno compno resno layno start_pos end_ph_pos end_pos"); 
-                       if (disto_on)
-                               fprintf(stream, " disto");
-                       fprintf(stream,"\n");
-
-                       for (precno = 0; precno < max_numprec; precno++) {
-                               for (compno = 0; compno < cstr_info->numcomps; compno++) {
-                                       for (resno = 0; resno < cstr_info->numdecompos[compno] + 1; resno++) {
-                                               int numprec = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];
-                                               int pcnx = cstr_info->tile[tileno].pw[resno];
-                                               int pcx = (int) pow( 2, cstr_info->tile[tileno].pdx[resno] + cstr_info->numdecompos[compno] - resno );
-                                               int pcy = (int) pow( 2, cstr_info->tile[tileno].pdy[resno] + cstr_info->numdecompos[compno] - resno );
-                                               int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx;
-                                               int precno_y = (int) floor( (float)precno/(float)pcnx );
-                                               if (precno >= numprec)
-                                                       continue;
-                                               for(y = y0; y < y1; y++) {                                                      
-                                                       if (precno_y*pcy == y ) {
-                                                               for (x = x0; x < x1; x++) {                                                                     
-                                                                       if (precno_x*pcx == x ) {
-                                                                               for (layno = 0; layno < cstr_info->numlayers; layno++) {
-                                                                                       start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
-                                                                                       end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
-                                                                                       end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
-                                                                                       disto = cstr_info->tile[tileno].packet[pack_nb].disto;
-                                                                                       fprintf(stream, "%4d %6d %6d %6d %5d %7d %9" PRId64 "   %9" PRId64 " %7" PRId64,
-                                                                                               pack_nb, tileno, precno, compno, resno, layno, start_pos, end_ph_pos, end_pos); 
-                                                                                       if (disto_on)
-                                                                                               fprintf(stream, " %8e", disto);
-                                                                                       fprintf(stream, "\n");
-                                                                                       total_disto += disto;
-                                                                                       pack_nb++; 
-                                                                               }
-                                                                       }
-                                                               }/* x = x0..x1 */
-                                                       } 
-                                               }  /* y = y0..y1 */
-                                       } /* resno */
-                               } /* compno */
-                       } /* precno */
-               } /* PCRL */
-
-               else {  /* CPRL */
-                       /* Count the maximum number of precincts */
-                       int max_numprec = 0;
-                       for (resno = 0; resno < max_numdecompos + 1; resno++) {
-                               int numprec = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];
-                               if (numprec > max_numprec)
-                                       max_numprec = numprec;
-                       }
-
-                       fprintf(stream, "CPRL\npack_nb tileno compno precno resno layno start_pos end_ph_pos end_pos"); 
-                       if (disto_on)
-                               fprintf(stream, " disto");
-                       fprintf(stream,"\n");
-
-                       for (compno = 0; compno < cstr_info->numcomps; compno++) {
-                               /* I suppose components have same XRsiz, YRsiz */
-                               int x0 = cstr_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tw * cstr_info->tile_x;
-                               int y0 = cstr_info->tile_Ox + (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tile_y;
-                               int x1 = x0 + cstr_info->tile_x;
-                               int y1 = y0 + cstr_info->tile_y;
-
-                               for (precno = 0; precno < max_numprec; precno++) {
-                                       for (resno = 0; resno < cstr_info->numdecompos[compno] + 1; resno++) {
-                                               int numprec = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];
-                                               int pcnx = cstr_info->tile[tileno].pw[resno];
-                                               int pcx = (int) pow( 2, cstr_info->tile[tileno].pdx[resno] + cstr_info->numdecompos[compno] - resno );
-                                               int pcy = (int) pow( 2, cstr_info->tile[tileno].pdy[resno] + cstr_info->numdecompos[compno] - resno );
-                                               int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx;
-                                               int precno_y = (int) floor( (float)precno/(float)pcnx );
-                                               if (precno >= numprec)
-                                                       continue;
-
-                                               for(y = y0; y < y1; y++) {
-                                                       if (precno_y*pcy == y ) {
-                                                               for (x = x0; x < x1; x++) {
-                                                                       if (precno_x*pcx == x ) {
-                                                                               for (layno = 0; layno < cstr_info->numlayers; layno++) {
-                                                                                       start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
-                                                                                       end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
-                                                                                       end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
-                                                                                       disto = cstr_info->tile[tileno].packet[pack_nb].disto;
-                                                                                       fprintf(stream, "%4d %6d %6d %6d %5d %7d %9" PRId64 "   %9" PRId64 " %7" PRId64,
-                                                                                               pack_nb, tileno, compno, precno, resno, layno, start_pos, end_ph_pos, end_pos); 
-                                                                                       if (disto_on)
-                                                                                               fprintf(stream, " %8e", disto);
-                                                                                       fprintf(stream, "\n");
-                                                                                       total_disto += disto;
-                                                                                       pack_nb++; 
-                                                                               }
-                                                                       }
-                                                               }/* x = x0..x1 */
-                                                       }
-                                               } /* y = y0..y1 */
-                                       } /* resno */
-                               } /* precno */
-                       } /* compno */
-               } /* CPRL */   
-       } /* tileno */
-       
-       if (disto_on) {
-               fprintf(stream, "%8e\n", cstr_info->D_max); /* SE max */        
-               fprintf(stream, "%.8e\n", total_disto); /* SE totale */
-       }
-/* UniPG>> */
-       /* print the markers' list */
-       if (cstr_info->marknum) {
-               fprintf(stream, "\nMARKER LIST\n");
-               fprintf(stream, "%d\n", cstr_info->marknum);
-               fprintf(stream, "type\tstart_pos    length\n");
-               for (x = 0; x < cstr_info->marknum; x++)
-                       fprintf(stream, "%X\t%9" PRId64 " %9d\n", cstr_info->marker[x].type, cstr_info->marker[x].pos, cstr_info->marker[x].len);
-       }
-/* <<UniPG */
-       fclose(stream);
-
-       fprintf(stderr,"Generated index file %s\n", index);
-
-       return 0;
+    /* <<UniPG */
+
+    if (!cstr_info) {
+        return 1;
+    }
+
+    stream = fopen(index, "w");
+    if (!stream) {
+        fprintf(stderr, "failed to open index file [%s] for writing\n", index);
+        return 1;
+    }
+
+    if (cstr_info->tile[0].distotile > 0.0) {
+        disto_on = 1;
+    } else {
+        disto_on = 0;
+    }
+
+    if (cstr_info->tile[0].numpix) {
+        numpix_on = 1;
+    } else {
+        numpix_on = 0;
+    }
+
+    fprintf(stream, "%d %d\n", cstr_info->image_w, cstr_info->image_h);
+    fprintf(stream, "%d\n", cstr_info->prog);
+    fprintf(stream, "%d %d\n", cstr_info->tile_x, cstr_info->tile_y);
+    fprintf(stream, "%d %d\n", cstr_info->tw, cstr_info->th);
+    fprintf(stream, "%d\n", cstr_info->numcomps);
+    fprintf(stream, "%d\n", cstr_info->numlayers);
+    fprintf(stream, "%d\n", cstr_info->numdecompos[0]); /* based on component 0 */
+
+    for (resno = cstr_info->numdecompos[0]; resno >= 0; resno--) {
+        fprintf(stream, "[%d,%d] ",
+                (1 << cstr_info->tile[0].pdx[resno]),
+                (1 << cstr_info->tile[0].pdx[resno]));    /* based on tile 0 and component 0 */
+    }
+
+    fprintf(stream, "\n");
+    /* UniPG>> */
+    fprintf(stream, "%d\n", cstr_info->main_head_start);
+    /* <<UniPG */
+    fprintf(stream, "%d\n", cstr_info->main_head_end);
+    fprintf(stream, "%d\n", cstr_info->codestream_size);
+
+    fprintf(stream, "\nINFO ON TILES\n");
+    fprintf(stream, "tileno start_pos  end_hd  end_tile   nbparts");
+    if (disto_on) {
+        fprintf(stream, "         disto");
+    }
+    if (numpix_on) {
+        fprintf(stream, "     nbpix");
+    }
+    if (disto_on && numpix_on) {
+        fprintf(stream, "  disto/nbpix");
+    }
+    fprintf(stream, "\n");
+
+    for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) {
+        fprintf(stream, "%4d %9d %9d %9d %9d",
+                cstr_info->tile[tileno].tileno,
+                cstr_info->tile[tileno].start_pos,
+                cstr_info->tile[tileno].end_header,
+                cstr_info->tile[tileno].end_pos,
+                cstr_info->tile[tileno].num_tps);
+        if (disto_on) {
+            fprintf(stream, " %9e", cstr_info->tile[tileno].distotile);
+        }
+        if (numpix_on) {
+            fprintf(stream, " %9d", cstr_info->tile[tileno].numpix);
+        }
+        if (disto_on && numpix_on) {
+            fprintf(stream, " %9e", cstr_info->tile[tileno].distotile /
+                    cstr_info->tile[tileno].numpix);
+        }
+        fprintf(stream, "\n");
+    }
+
+    for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) {
+        OPJ_OFF_T start_pos, end_ph_pos, end_pos;
+        double disto = 0;
+        int max_numdecompos = 0;
+        pack_nb = 0;
+
+        for (compno = 0; compno < cstr_info->numcomps; compno++) {
+            if (max_numdecompos < cstr_info->numdecompos[compno]) {
+                max_numdecompos = cstr_info->numdecompos[compno];
+            }
+        }
+
+        fprintf(stream, "\nTILE %d DETAILS\n", tileno);
+        fprintf(stream,
+                "part_nb tileno  start_pack num_packs  start_pos end_tph_pos   end_pos\n");
+        for (tilepartno = 0; tilepartno < cstr_info->tile[tileno].num_tps; tilepartno++)
+            fprintf(stream, "%4d %9d   %9d %9d  %9d %11d %9d\n",
+                    tilepartno, tileno,
+                    cstr_info->tile[tileno].tp[tilepartno].tp_start_pack,
+                    cstr_info->tile[tileno].tp[tilepartno].tp_numpacks,
+                    cstr_info->tile[tileno].tp[tilepartno].tp_start_pos,
+                    cstr_info->tile[tileno].tp[tilepartno].tp_end_header,
+                    cstr_info->tile[tileno].tp[tilepartno].tp_end_pos
+                   );
+
+        if (cstr_info->prog == OPJ_LRCP) {  /* LRCP */
+            fprintf(stream,
+                    "LRCP\npack_nb tileno layno resno compno precno start_pos end_ph_pos end_pos");
+            if (disto_on) {
+                fprintf(stream, " disto");
+            }
+            fprintf(stream, "\n");
+
+            for (layno = 0; layno < cstr_info->numlayers; layno++) {
+                for (resno = 0; resno < max_numdecompos + 1; resno++) {
+                    for (compno = 0; compno < cstr_info->numcomps; compno++) {
+                        int prec_max;
+                        if (resno > cstr_info->numdecompos[compno]) {
+                            break;
+                        }
+                        prec_max = cstr_info->tile[tileno].pw[resno] *
+                                   cstr_info->tile[tileno].ph[resno];
+                        for (precno = 0; precno < prec_max; precno++) {
+                            start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
+                            end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
+                            end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
+                            disto = cstr_info->tile[tileno].packet[pack_nb].disto;
+                            fprintf(stream, "%4d %6d %7d %5d %6d  %6d    %6" PRId64 "     %6" PRId64 " %7"
+                                    PRId64,
+                                    pack_nb, tileno, layno, resno, compno, precno, start_pos, end_ph_pos, end_pos);
+                            if (disto_on) {
+                                fprintf(stream, " %8e", disto);
+                            }
+                            fprintf(stream, "\n");
+                            total_disto += disto;
+                            pack_nb++;
+                        }
+                    }
+                }
+            }
+        } /* LRCP */
+
+        else if (cstr_info->prog == OPJ_RLCP) { /* RLCP */
+            fprintf(stream,
+                    "RLCP\npack_nb tileno resno layno compno precno start_pos end_ph_pos end_pos\n");
+            if (disto_on) {
+                fprintf(stream, " disto");
+            }
+            fprintf(stream, "\n");
+
+            for (resno = 0; resno < max_numdecompos + 1; resno++) {
+                for (layno = 0; layno < cstr_info->numlayers; layno++) {
+                    for (compno = 0; compno < cstr_info->numcomps; compno++) {
+                        int prec_max;
+                        if (resno > cstr_info->numdecompos[compno]) {
+                            break;
+                        }
+                        prec_max = cstr_info->tile[tileno].pw[resno] *
+                                   cstr_info->tile[tileno].ph[resno];
+                        for (precno = 0; precno < prec_max; precno++) {
+                            start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
+                            end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
+                            end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
+                            disto = cstr_info->tile[tileno].packet[pack_nb].disto;
+                            fprintf(stream, "%4d %6d %5d %7d %6d %6d %9" PRId64 "   %9" PRId64 " %7" PRId64,
+                                    pack_nb, tileno, resno, layno, compno, precno, start_pos, end_ph_pos, end_pos);
+                            if (disto_on) {
+                                fprintf(stream, " %8e", disto);
+                            }
+                            fprintf(stream, "\n");
+                            total_disto += disto;
+                            pack_nb++;
+                        }
+                    }
+                }
+            }
+        } /* RLCP */
+
+        else if (cstr_info->prog == OPJ_RPCL) { /* RPCL */
+
+            fprintf(stream,
+                    "RPCL\npack_nb tileno resno precno compno layno start_pos end_ph_pos end_pos");
+            if (disto_on) {
+                fprintf(stream, " disto");
+            }
+            fprintf(stream, "\n");
+
+            for (resno = 0; resno < max_numdecompos + 1; resno++) {
+                int numprec = cstr_info->tile[tileno].pw[resno] *
+                              cstr_info->tile[tileno].ph[resno];
+                for (precno = 0; precno < numprec; precno++) {
+                    /* I suppose components have same XRsiz, YRsiz */
+                    int x0 = cstr_info->tile_Ox + tileno - (int)floor((float)tileno /
+                             (float)cstr_info->tw) * cstr_info->tw * cstr_info->tile_x;
+                    int y0 = cstr_info->tile_Ox + (int)floor((float)tileno /
+                             (float)cstr_info->tw) * cstr_info->tile_y;
+                    int x1 = x0 + cstr_info->tile_x;
+                    int y1 = y0 + cstr_info->tile_y;
+                    for (compno = 0; compno < cstr_info->numcomps; compno++) {
+                        int pcnx = cstr_info->tile[tileno].pw[resno];
+                        int pcx = (int) pow(2, cstr_info->tile[tileno].pdx[resno] +
+                                            cstr_info->numdecompos[compno] - resno);
+                        int pcy = (int) pow(2, cstr_info->tile[tileno].pdy[resno] +
+                                            cstr_info->numdecompos[compno] - resno);
+                        int precno_x = precno - (int) floor((float)precno / (float)pcnx) * pcnx;
+                        int precno_y = (int) floor((float)precno / (float)pcnx);
+                        if (resno > cstr_info->numdecompos[compno]) {
+                            break;
+                        }
+                        for (y = y0; y < y1; y++) {
+                            if (precno_y * pcy == y) {
+                                for (x = x0; x < x1; x++) {
+                                    if (precno_x * pcx == x) {
+                                        for (layno = 0; layno < cstr_info->numlayers; layno++) {
+                                            start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
+                                            end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
+                                            end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
+                                            disto = cstr_info->tile[tileno].packet[pack_nb].disto;
+                                            fprintf(stream, "%4d %6d %5d %6d %6d %7d %9" PRId64 "   %9" PRId64 " %7" PRId64,
+                                                    pack_nb, tileno, resno, precno, compno, layno, start_pos, end_ph_pos, end_pos);
+                                            if (disto_on) {
+                                                fprintf(stream, " %8e", disto);
+                                            }
+                                            fprintf(stream, "\n");
+                                            total_disto += disto;
+                                            pack_nb++;
+                                        }
+                                    }
+                                }/* x = x0..x1 */
+                            }
+                        }  /* y = y0..y1 */
+                    } /* precno */
+                } /* compno */
+            } /* resno */
+        } /* RPCL */
+
+        else if (cstr_info->prog == OPJ_PCRL) { /* PCRL */
+            /* I suppose components have same XRsiz, YRsiz */
+            int x0 = cstr_info->tile_Ox + tileno - (int)floor((float)tileno /
+                     (float)cstr_info->tw) * cstr_info->tw * cstr_info->tile_x;
+            int y0 = cstr_info->tile_Ox + (int)floor((float)tileno /
+                     (float)cstr_info->tw) * cstr_info->tile_y;
+            int x1 = x0 + cstr_info->tile_x;
+            int y1 = y0 + cstr_info->tile_y;
+
+            /* Count the maximum number of precincts */
+            int max_numprec = 0;
+            for (resno = 0; resno < max_numdecompos + 1; resno++) {
+                int numprec = cstr_info->tile[tileno].pw[resno] *
+                              cstr_info->tile[tileno].ph[resno];
+                if (numprec > max_numprec) {
+                    max_numprec = numprec;
+                }
+            }
+
+            fprintf(stream,
+                    "PCRL\npack_nb tileno precno compno resno layno start_pos end_ph_pos end_pos");
+            if (disto_on) {
+                fprintf(stream, " disto");
+            }
+            fprintf(stream, "\n");
+
+            for (precno = 0; precno < max_numprec; precno++) {
+                for (compno = 0; compno < cstr_info->numcomps; compno++) {
+                    for (resno = 0; resno < cstr_info->numdecompos[compno] + 1; resno++) {
+                        int numprec = cstr_info->tile[tileno].pw[resno] *
+                                      cstr_info->tile[tileno].ph[resno];
+                        int pcnx = cstr_info->tile[tileno].pw[resno];
+                        int pcx = (int) pow(2, cstr_info->tile[tileno].pdx[resno] +
+                                            cstr_info->numdecompos[compno] - resno);
+                        int pcy = (int) pow(2, cstr_info->tile[tileno].pdy[resno] +
+                                            cstr_info->numdecompos[compno] - resno);
+                        int precno_x = precno - (int) floor((float)precno / (float)pcnx) * pcnx;
+                        int precno_y = (int) floor((float)precno / (float)pcnx);
+                        if (precno >= numprec) {
+                            continue;
+                        }
+                        for (y = y0; y < y1; y++) {
+                            if (precno_y * pcy == y) {
+                                for (x = x0; x < x1; x++) {
+                                    if (precno_x * pcx == x) {
+                                        for (layno = 0; layno < cstr_info->numlayers; layno++) {
+                                            start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
+                                            end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
+                                            end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
+                                            disto = cstr_info->tile[tileno].packet[pack_nb].disto;
+                                            fprintf(stream, "%4d %6d %6d %6d %5d %7d %9" PRId64 "   %9" PRId64 " %7" PRId64,
+                                                    pack_nb, tileno, precno, compno, resno, layno, start_pos, end_ph_pos, end_pos);
+                                            if (disto_on) {
+                                                fprintf(stream, " %8e", disto);
+                                            }
+                                            fprintf(stream, "\n");
+                                            total_disto += disto;
+                                            pack_nb++;
+                                        }
+                                    }
+                                }/* x = x0..x1 */
+                            }
+                        }  /* y = y0..y1 */
+                    } /* resno */
+                } /* compno */
+            } /* precno */
+        } /* PCRL */
+
+        else {  /* CPRL */
+            /* Count the maximum number of precincts */
+            int max_numprec = 0;
+            for (resno = 0; resno < max_numdecompos + 1; resno++) {
+                int numprec = cstr_info->tile[tileno].pw[resno] *
+                              cstr_info->tile[tileno].ph[resno];
+                if (numprec > max_numprec) {
+                    max_numprec = numprec;
+                }
+            }
+
+            fprintf(stream,
+                    "CPRL\npack_nb tileno compno precno resno layno start_pos end_ph_pos end_pos");
+            if (disto_on) {
+                fprintf(stream, " disto");
+            }
+            fprintf(stream, "\n");
+
+            for (compno = 0; compno < cstr_info->numcomps; compno++) {
+                /* I suppose components have same XRsiz, YRsiz */
+                int x0 = cstr_info->tile_Ox + tileno - (int)floor((float)tileno /
+                         (float)cstr_info->tw) * cstr_info->tw * cstr_info->tile_x;
+                int y0 = cstr_info->tile_Ox + (int)floor((float)tileno /
+                         (float)cstr_info->tw) * cstr_info->tile_y;
+                int x1 = x0 + cstr_info->tile_x;
+                int y1 = y0 + cstr_info->tile_y;
+
+                for (precno = 0; precno < max_numprec; precno++) {
+                    for (resno = 0; resno < cstr_info->numdecompos[compno] + 1; resno++) {
+                        int numprec = cstr_info->tile[tileno].pw[resno] *
+                                      cstr_info->tile[tileno].ph[resno];
+                        int pcnx = cstr_info->tile[tileno].pw[resno];
+                        int pcx = (int) pow(2, cstr_info->tile[tileno].pdx[resno] +
+                                            cstr_info->numdecompos[compno] - resno);
+                        int pcy = (int) pow(2, cstr_info->tile[tileno].pdy[resno] +
+                                            cstr_info->numdecompos[compno] - resno);
+                        int precno_x = precno - (int) floor((float)precno / (float)pcnx) * pcnx;
+                        int precno_y = (int) floor((float)precno / (float)pcnx);
+                        if (precno >= numprec) {
+                            continue;
+                        }
+
+                        for (y = y0; y < y1; y++) {
+                            if (precno_y * pcy == y) {
+                                for (x = x0; x < x1; x++) {
+                                    if (precno_x * pcx == x) {
+                                        for (layno = 0; layno < cstr_info->numlayers; layno++) {
+                                            start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
+                                            end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
+                                            end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
+                                            disto = cstr_info->tile[tileno].packet[pack_nb].disto;
+                                            fprintf(stream, "%4d %6d %6d %6d %5d %7d %9" PRId64 "   %9" PRId64 " %7" PRId64,
+                                                    pack_nb, tileno, compno, precno, resno, layno, start_pos, end_ph_pos, end_pos);
+                                            if (disto_on) {
+                                                fprintf(stream, " %8e", disto);
+                                            }
+                                            fprintf(stream, "\n");
+                                            total_disto += disto;
+                                            pack_nb++;
+                                        }
+                                    }
+                                }/* x = x0..x1 */
+                            }
+                        } /* y = y0..y1 */
+                    } /* resno */
+                } /* precno */
+            } /* compno */
+        } /* CPRL */
+    } /* tileno */
+
+    if (disto_on) {
+        fprintf(stream, "%8e\n", cstr_info->D_max); /* SE max */
+        fprintf(stream, "%.8e\n", total_disto); /* SE totale */
+    }
+    /* UniPG>> */
+    /* print the markers' list */
+    if (cstr_info->marknum) {
+        fprintf(stream, "\nMARKER LIST\n");
+        fprintf(stream, "%d\n", cstr_info->marknum);
+        fprintf(stream, "type\tstart_pos    length\n");
+        for (x = 0; x < cstr_info->marknum; x++) {
+            fprintf(stream, "%X\t%9" PRId64 " %9d\n", cstr_info->marker[x].type,
+                    cstr_info->marker[x].pos, cstr_info->marker[x].len);
+        }
+    }
+    /* <<UniPG */
+    fclose(stream);
+
+    fprintf(stderr, "Generated index file %s\n", index);
+
+    return 0;
 }
index aa8091ab8234f6afe26381c618091c363e6de370..2ef1c6be608a36a3479173cd8388466c95ffd42e 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * Copyright (c) 2006-2007, Parvatha Elangovan
 #include "format_defs.h"
 #include "opj_string.h"
 
-typedef struct dircnt{
+typedef struct dircnt {
     /** Buffer for holding images read from Directory*/
     char *filename_buf;
     /** Pointer to the buffer*/
     char **filename;
-}dircnt_t;
+} dircnt_t;
 
-typedef struct img_folder{
+typedef struct img_folder {
     /** The directory path of the folder containing input images*/
     char *imgdirpath;
     /** Output format*/
@@ -87,342 +87,419 @@ typedef struct img_folder{
     char set_imgdir;
     /** Enable Cod Format for output*/
     char set_out_format;
-}img_fol_t;
+} img_fol_t;
 
-static void encode_help_display(void) {
-    fprintf(stdout,"\nThis is the opj_compress utility from the OpenJPEG project.\n"
+static void encode_help_display(void)
+{
+    fprintf(stdout,
+            "\nThis is the opj_compress utility from the OpenJPEG project.\n"
             "It compresses various image formats with the JPEG 2000 algorithm.\n"
-            "It has been compiled against openjp2 library v%s.\n\n",opj_version());
-
-    fprintf(stdout,"Default encoding options:\n");
-    fprintf(stdout,"-------------------------\n");
-    fprintf(stdout,"\n");
-    fprintf(stdout," * Lossless\n");
-    fprintf(stdout," * 1 tile\n");
-    fprintf(stdout," * RGB->YCC conversion if at least 3 components\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");
-    #ifdef FIXME_INDEX
-    fprintf(stdout," * No index file\n");
-    #endif /* FIXME_INDEX */
-    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");
+            "It has been compiled against openjp2 library v%s.\n\n", opj_version());
+
+    fprintf(stdout, "Default encoding options:\n");
+    fprintf(stdout, "-------------------------\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, " * Lossless\n");
+    fprintf(stdout, " * 1 tile\n");
+    fprintf(stdout, " * RGB->YCC conversion if at least 3 components\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");
+#ifdef FIXME_INDEX
+    fprintf(stdout, " * No index file\n");
+#endif /* FIXME_INDEX */
+    fprintf(stdout, " * No ROI upshifted\n");
+    fprintf(stdout, " * No offset of the origin of the image\n");
+    fprintf(stdout, " * No offset of the origin of the tiles\n");
+    fprintf(stdout, " * Reversible DWT 5-3\n");
     /* UniPG>> */
 #ifdef USE_JPWL
-    fprintf(stdout," * No JPWL protection\n");
+    fprintf(stdout, " * No JPWL protection\n");
 #endif /* USE_JPWL */
     /* <<UniPG */
-    fprintf(stdout,"\n");
-
-    fprintf(stdout,"Note:\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,"Parameters:\n");
-    fprintf(stdout,"-----------\n");
-    fprintf(stdout,"\n");
-    fprintf(stdout,"Required Parameters (except with -h):\n");
-    fprintf(stdout,"One of the two options -ImgDir or -i must be used\n");
-    fprintf(stdout,"\n");
-    fprintf(stdout,"-i <file>\n");
-    fprintf(stdout,"    Input file\n");
-    fprintf(stdout,"    Known extensions are <PBM|PGM|PPM|PNM|PAM|PGX|PNG|BMP|TIF|RAW|RAWL|TGA>\n");
-    fprintf(stdout,"    If used, '-o <file>' must be provided\n");
-    fprintf(stdout,"-o <compressed file>\n");
-    fprintf(stdout,"    Output file (accepted extensions are j2k or jp2).\n");
-    fprintf(stdout,"-ImgDir <dir>\n");
-    fprintf(stdout,"    Image file Directory path (example ../Images) \n");
-    fprintf(stdout,"    When using this option -OutFor must be used\n");
-    fprintf(stdout,"-OutFor <J2K|J2C|JP2>\n");
-    fprintf(stdout,"    Output format for compressed files.\n");
-    fprintf(stdout,"    Required only if -ImgDir is used\n");
-    fprintf(stdout,"-F <width>,<height>,<ncomp>,<bitdepth>,{s,u}@<dx1>x<dy1>:...:<dxn>x<dyn>\n");
-    fprintf(stdout,"    Characteristics of the raw input image\n");
-    fprintf(stdout,"    If subsampling is omitted, 1x1 is assumed for all components\n");
-    fprintf(stdout,"      Example: -F 512,512,3,8,u@1x1:2x2:2x2\n");
-    fprintf(stdout,"               for raw 512x512 image with 4:2:0 subsampling\n");
-    fprintf(stdout,"    Required only if RAW or RAWL input file is provided.\n");
-    fprintf(stdout,"\n");
-    fprintf(stdout,"Optional Parameters:\n");
-    fprintf(stdout,"\n");
-    fprintf(stdout,"-h\n");
-    fprintf(stdout,"    Display the help information.\n");
-    fprintf(stdout,"-r <compression ratio>,<compression ratio>,...\n");
-    fprintf(stdout,"    Different compression ratios for successive layers.\n");
-    fprintf(stdout,"    The rate specified for each quality level is the desired\n");
-    fprintf(stdout,"    compression factor.\n");
-    fprintf(stdout,"    Decreasing ratios required.\n");
-    fprintf(stdout,"      Example: -r 20,10,1 means \n");
-    fprintf(stdout,"            quality layer 1: compress 20x, \n");
-    fprintf(stdout,"            quality layer 2: compress 10x \n");
-    fprintf(stdout,"            quality layer 3: compress lossless\n");
-    fprintf(stdout,"    Options -r and -q cannot be used together.\n");
-    fprintf(stdout,"-q <psnr value>,<psnr value>,<psnr value>,...\n");
-    fprintf(stdout,"    Different psnr for successive layers (-q 30,40,50).\n");
-    fprintf(stdout,"    Increasing PSNR values required.\n");
-    fprintf(stdout,"    Options -r and -q cannot be used together.\n");
-    fprintf(stdout,"-n <number of resolutions>\n");
-    fprintf(stdout,"    Number of resolutions.\n");
-    fprintf(stdout,"    It corresponds to the number of DWT decompositions +1. \n");
-    fprintf(stdout,"    Default: 6.\n");
-    fprintf(stdout,"-b <cblk width>,<cblk height>\n");
-    fprintf(stdout,"    Code-block size. The dimension must respect the constraint \n");
-    fprintf(stdout,"    defined in the JPEG-2000 standard (no dimension smaller than 4 \n");
-    fprintf(stdout,"    or greater than 1024, no code-block with more than 4096 coefficients).\n");
-    fprintf(stdout,"    The maximum value authorized is 64x64. \n");
-    fprintf(stdout,"    Default: 64x64.\n");
-    fprintf(stdout,"-c [<prec width>,<prec height>],[<prec width>,<prec height>],...\n");
-    fprintf(stdout,"    Precinct size. Values specified must be power of 2. \n");
-    fprintf(stdout,"    Multiple records may be supplied, in which case the first record refers\n");
-    fprintf(stdout,"    to the highest resolution level and subsequent records to lower \n");
-    fprintf(stdout,"    resolution levels. The last specified record is right-shifted for each \n");
-    fprintf(stdout,"    remaining lower resolution levels.\n");
-    fprintf(stdout,"    Default: 215x215 at each resolution.\n");
-    fprintf(stdout,"-t <tile width>,<tile height>\n");
-    fprintf(stdout,"    Tile size.\n");
-    fprintf(stdout,"    Default: the dimension of the whole image, thus only one tile.\n");
-    fprintf(stdout,"-p <LRCP|RLCP|RPCL|PCRL|CPRL>\n");
-    fprintf(stdout,"    Progression order.\n");
-    fprintf(stdout,"    Default: LRCP.\n");
-    fprintf(stdout,"-s  <subX,subY>\n");
-    fprintf(stdout,"    Subsampling factor.\n");
-    fprintf(stdout,"    Subsampling bigger than 2 can produce error\n");
-    fprintf(stdout,"    Default: no subsampling.\n");
-    fprintf(stdout,"-POC <progression order change>/<progression order change>/...\n");
-    fprintf(stdout,"    Progression order change.\n");
-    fprintf(stdout,"    The syntax of a progression order change is the following:\n");
-    fprintf(stdout,"    T<tile>=<resStart>,<compStart>,<layerEnd>,<resEnd>,<compEnd>,<progOrder>\n");
-    fprintf(stdout,"      Example: -POC T1=0,0,1,5,3,CPRL/T1=5,0,1,6,3,CPRL\n");
-    fprintf(stdout,"-SOP\n");
-    fprintf(stdout,"    Write SOP marker before each packet.\n");
-    fprintf(stdout,"-EPH\n");
-    fprintf(stdout,"    Write EPH marker after each header packet.\n");
-    fprintf(stdout,"-M <key value>\n");
-    fprintf(stdout,"    Mode switch.\n");
-    fprintf(stdout,"    [1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL)\n");
-    fprintf(stdout,"    8=VSC 16=ERTERM(SEGTERM) 32=SEGMARK(SEGSYM)]\n");
-    fprintf(stdout,"    Indicate multiple modes by adding their values.\n");
-    fprintf(stdout,"      Example: RESTART(4) + RESET(2) + SEGMARK(32) => -M 38\n");
-    fprintf(stdout,"-TP <R|L|C>\n");
-    fprintf(stdout,"    Divide packets of every tile into tile-parts.\n");
-    fprintf(stdout,"    Division is made by grouping Resolutions (R), Layers (L)\n");
-    fprintf(stdout,"    or Components (C).\n");
-    #ifdef FIXME_INDEX
-    fprintf(stdout,"-x  <index file>\n");
-    fprintf(stdout,"    Create an index file.\n");
-    #endif /*FIXME_INDEX*/
-    fprintf(stdout,"-ROI c=<component index>,U=<upshifting value>\n");
-    fprintf(stdout,"    Quantization indices upshifted for a component. \n");
-    fprintf(stdout,"    Warning: This option does not implement the usual ROI (Region of Interest).\n");
-    fprintf(stdout,"    It should be understood as a 'Component of Interest'. It offers the \n");
-    fprintf(stdout,"    possibility to upshift the value of a component during quantization step.\n");
-    fprintf(stdout,"    The value after c= is the component number [0, 1, 2, ...] and the value \n");
-    fprintf(stdout,"    after U= is the value of upshifting. U must be in the range [0, 37].\n");
-    fprintf(stdout,"-d <image offset X,image offset Y>\n");
-    fprintf(stdout,"    Offset of the origin of the image.\n");
-    fprintf(stdout,"-T <tile offset X,tile offset Y>\n");
-    fprintf(stdout,"    Offset of the origin of the tiles.\n");
-    fprintf(stdout,"-I\n");
-    fprintf(stdout,"    Use the irreversible DWT 9-7.\n");
-    fprintf(stdout,"-mct <0|1|2>\n");
-    fprintf(stdout,"    Explicitly specifies if a Multiple Component Transform has to be used.\n");
-    fprintf(stdout,"    0: no MCT ; 1: RGB->YCC conversion ; 2: custom MCT.\n");
-    fprintf(stdout,"    If custom MCT, \"-m\" option has to be used (see hereunder).\n");
-    fprintf(stdout,"    By default, RGB->YCC conversion is used if there are 3 components or more,\n");
-    fprintf(stdout,"    no conversion otherwise.\n");
-    fprintf(stdout,"-m <file>\n");
-    fprintf(stdout,"    Use array-based MCT, values are coma separated, line by line\n");
-    fprintf(stdout,"    No specific separators between lines, no space allowed between values.\n");
-    fprintf(stdout,"    If this option is used, it automatically sets \"-mct\" option to 2.\n");
-    fprintf(stdout,"-cinema2K <24|48>\n");
-    fprintf(stdout,"    Digital Cinema 2K profile compliant codestream.\n");
-    fprintf(stdout,"   Need to specify the frames per second for a 2K resolution.\n");
-    fprintf(stdout,"    Only 24 or 48 fps are currently allowed.\n");
-    fprintf(stdout,"-cinema4K\n");
-    fprintf(stdout,"    Digital Cinema 4K profile compliant codestream.\n");
-    fprintf(stdout,"   Frames per second not required. Default value is 24fps.\n");
-    fprintf(stdout,"-jpip\n");
-    fprintf(stdout,"    Write jpip codestream index box in JP2 output file.\n");
-    fprintf(stdout,"    Currently supports only RPCL order.\n");
-    fprintf(stdout,"-C <comment>\n");
-    fprintf(stdout,"    Add <comment> in the comment marker segment.\n");
+    fprintf(stdout, "\n");
+
+    fprintf(stdout, "Note:\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, "Parameters:\n");
+    fprintf(stdout, "-----------\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "Required Parameters (except with -h):\n");
+    fprintf(stdout, "One of the two options -ImgDir or -i must be used\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-i <file>\n");
+    fprintf(stdout, "    Input file\n");
+    fprintf(stdout,
+            "    Known extensions are <PBM|PGM|PPM|PNM|PAM|PGX|PNG|BMP|TIF|RAW|RAWL|TGA>\n");
+    fprintf(stdout, "    If used, '-o <file>' must be provided\n");
+    fprintf(stdout, "-o <compressed file>\n");
+    fprintf(stdout, "    Output file (accepted extensions are j2k or jp2).\n");
+    fprintf(stdout, "-ImgDir <dir>\n");
+    fprintf(stdout, "    Image file Directory path (example ../Images) \n");
+    fprintf(stdout, "    When using this option -OutFor must be used\n");
+    fprintf(stdout, "-OutFor <J2K|J2C|JP2>\n");
+    fprintf(stdout, "    Output format for compressed files.\n");
+    fprintf(stdout, "    Required only if -ImgDir is used\n");
+    fprintf(stdout,
+            "-F <width>,<height>,<ncomp>,<bitdepth>,{s,u}@<dx1>x<dy1>:...:<dxn>x<dyn>\n");
+    fprintf(stdout, "    Characteristics of the raw input image\n");
+    fprintf(stdout,
+            "    If subsampling is omitted, 1x1 is assumed for all components\n");
+    fprintf(stdout, "      Example: -F 512,512,3,8,u@1x1:2x2:2x2\n");
+    fprintf(stdout,
+            "               for raw 512x512 image with 4:2:0 subsampling\n");
+    fprintf(stdout, "    Required only if RAW or RAWL input file is provided.\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "Optional Parameters:\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-h\n");
+    fprintf(stdout, "    Display the help information.\n");
+    fprintf(stdout, "-r <compression ratio>,<compression ratio>,...\n");
+    fprintf(stdout, "    Different compression ratios for successive layers.\n");
+    fprintf(stdout,
+            "    The rate specified for each quality level is the desired\n");
+    fprintf(stdout, "    compression factor.\n");
+    fprintf(stdout, "    Decreasing ratios required.\n");
+    fprintf(stdout, "      Example: -r 20,10,1 means \n");
+    fprintf(stdout, "            quality layer 1: compress 20x, \n");
+    fprintf(stdout, "            quality layer 2: compress 10x \n");
+    fprintf(stdout, "            quality layer 3: compress lossless\n");
+    fprintf(stdout, "    Options -r and -q cannot be used together.\n");
+    fprintf(stdout, "-q <psnr value>,<psnr value>,<psnr value>,...\n");
+    fprintf(stdout, "    Different psnr for successive layers (-q 30,40,50).\n");
+    fprintf(stdout, "    Increasing PSNR values required.\n");
+    fprintf(stdout, "    Options -r and -q cannot be used together.\n");
+    fprintf(stdout, "-n <number of resolutions>\n");
+    fprintf(stdout, "    Number of resolutions.\n");
+    fprintf(stdout,
+            "    It corresponds to the number of DWT decompositions +1. \n");
+    fprintf(stdout, "    Default: 6.\n");
+    fprintf(stdout, "-b <cblk width>,<cblk height>\n");
+    fprintf(stdout,
+            "    Code-block size. The dimension must respect the constraint \n");
+    fprintf(stdout,
+            "    defined in the JPEG-2000 standard (no dimension smaller than 4 \n");
+    fprintf(stdout,
+            "    or greater than 1024, no code-block with more than 4096 coefficients).\n");
+    fprintf(stdout, "    The maximum value authorized is 64x64. \n");
+    fprintf(stdout, "    Default: 64x64.\n");
+    fprintf(stdout,
+            "-c [<prec width>,<prec height>],[<prec width>,<prec height>],...\n");
+    fprintf(stdout, "    Precinct size. Values specified must be power of 2. \n");
+    fprintf(stdout,
+            "    Multiple records may be supplied, in which case the first record refers\n");
+    fprintf(stdout,
+            "    to the highest resolution level and subsequent records to lower \n");
+    fprintf(stdout,
+            "    resolution levels. The last specified record is right-shifted for each \n");
+    fprintf(stdout, "    remaining lower resolution levels.\n");
+    fprintf(stdout, "    Default: 215x215 at each resolution.\n");
+    fprintf(stdout, "-t <tile width>,<tile height>\n");
+    fprintf(stdout, "    Tile size.\n");
+    fprintf(stdout,
+            "    Default: the dimension of the whole image, thus only one tile.\n");
+    fprintf(stdout, "-p <LRCP|RLCP|RPCL|PCRL|CPRL>\n");
+    fprintf(stdout, "    Progression order.\n");
+    fprintf(stdout, "    Default: LRCP.\n");
+    fprintf(stdout, "-s  <subX,subY>\n");
+    fprintf(stdout, "    Subsampling factor.\n");
+    fprintf(stdout, "    Subsampling bigger than 2 can produce error\n");
+    fprintf(stdout, "    Default: no subsampling.\n");
+    fprintf(stdout,
+            "-POC <progression order change>/<progression order change>/...\n");
+    fprintf(stdout, "    Progression order change.\n");
+    fprintf(stdout,
+            "    The syntax of a progression order change is the following:\n");
+    fprintf(stdout,
+            "    T<tile>=<resStart>,<compStart>,<layerEnd>,<resEnd>,<compEnd>,<progOrder>\n");
+    fprintf(stdout, "      Example: -POC T1=0,0,1,5,3,CPRL/T1=5,0,1,6,3,CPRL\n");
+    fprintf(stdout, "-SOP\n");
+    fprintf(stdout, "    Write SOP marker before each packet.\n");
+    fprintf(stdout, "-EPH\n");
+    fprintf(stdout, "    Write EPH marker after each header packet.\n");
+    fprintf(stdout, "-M <key value>\n");
+    fprintf(stdout, "    Mode switch.\n");
+    fprintf(stdout, "    [1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL)\n");
+    fprintf(stdout, "    8=VSC 16=ERTERM(SEGTERM) 32=SEGMARK(SEGSYM)]\n");
+    fprintf(stdout, "    Indicate multiple modes by adding their values.\n");
+    fprintf(stdout,
+            "      Example: RESTART(4) + RESET(2) + SEGMARK(32) => -M 38\n");
+    fprintf(stdout, "-TP <R|L|C>\n");
+    fprintf(stdout, "    Divide packets of every tile into tile-parts.\n");
+    fprintf(stdout,
+            "    Division is made by grouping Resolutions (R), Layers (L)\n");
+    fprintf(stdout, "    or Components (C).\n");
+#ifdef FIXME_INDEX
+    fprintf(stdout, "-x  <index file>\n");
+    fprintf(stdout, "    Create an index file.\n");
+#endif /*FIXME_INDEX*/
+    fprintf(stdout, "-ROI c=<component index>,U=<upshifting value>\n");
+    fprintf(stdout, "    Quantization indices upshifted for a component. \n");
+    fprintf(stdout,
+            "    Warning: This option does not implement the usual ROI (Region of Interest).\n");
+    fprintf(stdout,
+            "    It should be understood as a 'Component of Interest'. It offers the \n");
+    fprintf(stdout,
+            "    possibility to upshift the value of a component during quantization step.\n");
+    fprintf(stdout,
+            "    The value after c= is the component number [0, 1, 2, ...] and the value \n");
+    fprintf(stdout,
+            "    after U= is the value of upshifting. U must be in the range [0, 37].\n");
+    fprintf(stdout, "-d <image offset X,image offset Y>\n");
+    fprintf(stdout, "    Offset of the origin of the image.\n");
+    fprintf(stdout, "-T <tile offset X,tile offset Y>\n");
+    fprintf(stdout, "    Offset of the origin of the tiles.\n");
+    fprintf(stdout, "-I\n");
+    fprintf(stdout, "    Use the irreversible DWT 9-7.\n");
+    fprintf(stdout, "-mct <0|1|2>\n");
+    fprintf(stdout,
+            "    Explicitly specifies if a Multiple Component Transform has to be used.\n");
+    fprintf(stdout, "    0: no MCT ; 1: RGB->YCC conversion ; 2: custom MCT.\n");
+    fprintf(stdout,
+            "    If custom MCT, \"-m\" option has to be used (see hereunder).\n");
+    fprintf(stdout,
+            "    By default, RGB->YCC conversion is used if there are 3 components or more,\n");
+    fprintf(stdout, "    no conversion otherwise.\n");
+    fprintf(stdout, "-m <file>\n");
+    fprintf(stdout,
+            "    Use array-based MCT, values are coma separated, line by line\n");
+    fprintf(stdout,
+            "    No specific separators between lines, no space allowed between values.\n");
+    fprintf(stdout,
+            "    If this option is used, it automatically sets \"-mct\" option to 2.\n");
+    fprintf(stdout, "-cinema2K <24|48>\n");
+    fprintf(stdout, "    Digital Cinema 2K profile compliant codestream.\n");
+    fprintf(stdout,
+            "  Need to specify the frames per second for a 2K resolution.\n");
+    fprintf(stdout, "    Only 24 or 48 fps are currently allowed.\n");
+    fprintf(stdout, "-cinema4K\n");
+    fprintf(stdout, "    Digital Cinema 4K profile compliant codestream.\n");
+    fprintf(stdout, "  Frames per second not required. Default value is 24fps.\n");
+    fprintf(stdout, "-jpip\n");
+    fprintf(stdout, "    Write jpip codestream index box in JP2 output file.\n");
+    fprintf(stdout, "    Currently supports only RPCL order.\n");
+    fprintf(stdout, "-C <comment>\n");
+    fprintf(stdout, "    Add <comment> in the comment marker segment.\n");
     /* UniPG>> */
 #ifdef USE_JPWL
-    fprintf(stdout,"-W <params>\n");
-    fprintf(stdout,"    Adoption of JPWL (Part 11) capabilities (-W params)\n");
-    fprintf(stdout,"    The <params> field can be written and repeated in any order:\n");
-    fprintf(stdout,"    [h<tilepart><=type>,s<tilepart><=method>,a=<addr>,...\n");
-    fprintf(stdout,"    ...,z=<size>,g=<range>,p<tilepart:pack><=type>]\n");
-    fprintf(stdout,"     h selects the header error protection (EPB): 'type' can be\n");
-    fprintf(stdout,"       [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]\n");
-    fprintf(stdout,"       if 'tilepart' is absent, it is for main and tile headers\n");
-    fprintf(stdout,"       if 'tilepart' is present, it applies from that tile\n");
-    fprintf(stdout,"         onwards, up to the next h<> spec, or to the last tilepart\n");
-    fprintf(stdout,"         in the codestream (max. %d specs)\n", JPWL_MAX_NO_TILESPECS);
-    fprintf(stdout,"     p selects the packet error protection (EEP/UEP with EPBs)\n");
-    fprintf(stdout,"      to be applied to raw data: 'type' can be\n");
-    fprintf(stdout,"       [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]\n");
-    fprintf(stdout,"       if 'tilepart:pack' is absent, it is from tile 0, packet 0\n");
-    fprintf(stdout,"       if 'tilepart:pack' is present, it applies from that tile\n");
-    fprintf(stdout,"         and that packet onwards, up to the next packet spec\n");
-    fprintf(stdout,"         or to the last packet in the last tilepart in the stream\n");
-    fprintf(stdout,"         (max. %d specs)\n", JPWL_MAX_NO_PACKSPECS);
-    fprintf(stdout,"     s enables sensitivity data insertion (ESD): 'method' can be\n");
-    fprintf(stdout,"       [-1=NO ESD 0=RELATIVE ERROR 1=MSE 2=MSE REDUCTION 3=PSNR\n");
-    fprintf(stdout,"        4=PSNR INCREMENT 5=MAXERR 6=TSE 7=RESERVED]\n");
-    fprintf(stdout,"       if 'tilepart' is absent, it is for main header only\n");
-    fprintf(stdout,"       if 'tilepart' is present, it applies from that tile\n");
-    fprintf(stdout,"         onwards, up to the next s<> spec, or to the last tilepart\n");
-    fprintf(stdout,"         in the codestream (max. %d specs)\n", JPWL_MAX_NO_TILESPECS);
-    fprintf(stdout,"     g determines the addressing mode: <range> can be\n");
-    fprintf(stdout,"       [0=PACKET 1=BYTE RANGE 2=PACKET RANGE]\n");
-    fprintf(stdout,"     a determines the size of data addressing: <addr> can be\n");
-    fprintf(stdout,"       2/4 bytes (small/large codestreams). If not set, auto-mode\n");
-    fprintf(stdout,"     z determines the size of sensitivity values: <size> can be\n");
-    fprintf(stdout,"       1/2 bytes, for the transformed pseudo-floating point value\n");
-    fprintf(stdout,"     ex.:\n");
-    fprintf(stdout,"       h,h0=64,h3=16,h5=32,p0=78,p0:24=56,p1,p3:0=0,p3:20=32,s=0,\n");
-    fprintf(stdout,"         s0=6,s3=-1,a=0,g=1,z=1\n");
-    fprintf(stdout,"     means\n");
-    fprintf(stdout,"       predefined EPB in MH, rs(64,32) from TPH 0 to TPH 2,\n");
-    fprintf(stdout,"       CRC-16 in TPH 3 and TPH 4, CRC-32 in remaining TPHs,\n");
-    fprintf(stdout,"       UEP rs(78,32) for packets 0 to 23 of tile 0,\n");
-    fprintf(stdout,"       UEP rs(56,32) for packs. 24 to the last of tilepart 0,\n");
-    fprintf(stdout,"       UEP rs default for packets of tilepart 1,\n");
-    fprintf(stdout,"       no UEP for packets 0 to 19 of tilepart 3,\n");
-    fprintf(stdout,"       UEP CRC-32 for packs. 20 of tilepart 3 to last tilepart,\n");
-    fprintf(stdout,"       relative sensitivity ESD for MH,\n");
-    fprintf(stdout,"       TSE ESD from TPH 0 to TPH 2, byte range with automatic\n");
-    fprintf(stdout,"       size of addresses and 1 byte for each sensitivity value\n");
-    fprintf(stdout,"     ex.:\n");
-    fprintf(stdout,"           h,s,p\n");
-    fprintf(stdout,"     means\n");
-    fprintf(stdout,"       default protection to headers (MH and TPHs) as well as\n");
-    fprintf(stdout,"       data packets, one ESD in MH\n");
-    fprintf(stdout,"     N.B.: use the following recommendations when specifying\n");
-    fprintf(stdout,"           the JPWL parameters list\n");
-    fprintf(stdout,"       - when you use UEP, always pair the 'p' option with 'h'\n");
+    fprintf(stdout, "-W <params>\n");
+    fprintf(stdout, "    Adoption of JPWL (Part 11) capabilities (-W params)\n");
+    fprintf(stdout,
+            "    The <params> field can be written and repeated in any order:\n");
+    fprintf(stdout, "    [h<tilepart><=type>,s<tilepart><=method>,a=<addr>,...\n");
+    fprintf(stdout, "    ...,z=<size>,g=<range>,p<tilepart:pack><=type>]\n");
+    fprintf(stdout,
+            "     h selects the header error protection (EPB): 'type' can be\n");
+    fprintf(stdout,
+            "       [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]\n");
+    fprintf(stdout,
+            "       if 'tilepart' is absent, it is for main and tile headers\n");
+    fprintf(stdout, "       if 'tilepart' is present, it applies from that tile\n");
+    fprintf(stdout,
+            "         onwards, up to the next h<> spec, or to the last tilepart\n");
+    fprintf(stdout, "         in the codestream (max. %d specs)\n",
+            JPWL_MAX_NO_TILESPECS);
+    fprintf(stdout,
+            "     p selects the packet error protection (EEP/UEP with EPBs)\n");
+    fprintf(stdout, "      to be applied to raw data: 'type' can be\n");
+    fprintf(stdout,
+            "       [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]\n");
+    fprintf(stdout,
+            "       if 'tilepart:pack' is absent, it is from tile 0, packet 0\n");
+    fprintf(stdout,
+            "       if 'tilepart:pack' is present, it applies from that tile\n");
+    fprintf(stdout,
+            "         and that packet onwards, up to the next packet spec\n");
+    fprintf(stdout,
+            "         or to the last packet in the last tilepart in the stream\n");
+    fprintf(stdout, "         (max. %d specs)\n", JPWL_MAX_NO_PACKSPECS);
+    fprintf(stdout,
+            "     s enables sensitivity data insertion (ESD): 'method' can be\n");
+    fprintf(stdout,
+            "       [-1=NO ESD 0=RELATIVE ERROR 1=MSE 2=MSE REDUCTION 3=PSNR\n");
+    fprintf(stdout, "        4=PSNR INCREMENT 5=MAXERR 6=TSE 7=RESERVED]\n");
+    fprintf(stdout, "       if 'tilepart' is absent, it is for main header only\n");
+    fprintf(stdout, "       if 'tilepart' is present, it applies from that tile\n");
+    fprintf(stdout,
+            "         onwards, up to the next s<> spec, or to the last tilepart\n");
+    fprintf(stdout, "         in the codestream (max. %d specs)\n",
+            JPWL_MAX_NO_TILESPECS);
+    fprintf(stdout, "     g determines the addressing mode: <range> can be\n");
+    fprintf(stdout, "       [0=PACKET 1=BYTE RANGE 2=PACKET RANGE]\n");
+    fprintf(stdout,
+            "     a determines the size of data addressing: <addr> can be\n");
+    fprintf(stdout,
+            "       2/4 bytes (small/large codestreams). If not set, auto-mode\n");
+    fprintf(stdout,
+            "     z determines the size of sensitivity values: <size> can be\n");
+    fprintf(stdout,
+            "       1/2 bytes, for the transformed pseudo-floating point value\n");
+    fprintf(stdout, "     ex.:\n");
+    fprintf(stdout,
+            "       h,h0=64,h3=16,h5=32,p0=78,p0:24=56,p1,p3:0=0,p3:20=32,s=0,\n");
+    fprintf(stdout, "         s0=6,s3=-1,a=0,g=1,z=1\n");
+    fprintf(stdout, "     means\n");
+    fprintf(stdout,
+            "       predefined EPB in MH, rs(64,32) from TPH 0 to TPH 2,\n");
+    fprintf(stdout,
+            "       CRC-16 in TPH 3 and TPH 4, CRC-32 in remaining TPHs,\n");
+    fprintf(stdout, "       UEP rs(78,32) for packets 0 to 23 of tile 0,\n");
+    fprintf(stdout,
+            "       UEP rs(56,32) for packs. 24 to the last of tilepart 0,\n");
+    fprintf(stdout, "       UEP rs default for packets of tilepart 1,\n");
+    fprintf(stdout, "       no UEP for packets 0 to 19 of tilepart 3,\n");
+    fprintf(stdout,
+            "       UEP CRC-32 for packs. 20 of tilepart 3 to last tilepart,\n");
+    fprintf(stdout, "       relative sensitivity ESD for MH,\n");
+    fprintf(stdout,
+            "       TSE ESD from TPH 0 to TPH 2, byte range with automatic\n");
+    fprintf(stdout,
+            "       size of addresses and 1 byte for each sensitivity value\n");
+    fprintf(stdout, "     ex.:\n");
+    fprintf(stdout, "           h,s,p\n");
+    fprintf(stdout, "     means\n");
+    fprintf(stdout,
+            "       default protection to headers (MH and TPHs) as well as\n");
+    fprintf(stdout, "       data packets, one ESD in MH\n");
+    fprintf(stdout,
+            "     N.B.: use the following recommendations when specifying\n");
+    fprintf(stdout, "           the JPWL parameters list\n");
+    fprintf(stdout,
+            "       - when you use UEP, always pair the 'p' option with 'h'\n");
 #endif /* USE_JPWL */
     /* <<UniPG */
-    fprintf(stdout,"\n");
+    fprintf(stdout, "\n");
 #ifdef FIXME_INDEX
-    fprintf(stdout,"Index structure:\n");
-    fprintf(stdout,"----------------\n");
-    fprintf(stdout,"\n");
-    fprintf(stdout,"Image_height Image_width\n");
-    fprintf(stdout,"progression order\n");
-    fprintf(stdout,"Tiles_size_X Tiles_size_Y\n");
-    fprintf(stdout,"Tiles_nb_X Tiles_nb_Y\n");
-    fprintf(stdout,"Components_nb\n");
-    fprintf(stdout,"Layers_nb\n");
-    fprintf(stdout,"decomposition_levels\n");
-    fprintf(stdout,"[Precincts_size_X_res_Nr Precincts_size_Y_res_Nr]...\n");
-    fprintf(stdout,"   [Precincts_size_X_res_0 Precincts_size_Y_res_0]\n");
-    fprintf(stdout,"Main_header_start_position\n");
-    fprintf(stdout,"Main_header_end_position\n");
-    fprintf(stdout,"Codestream_size\n");
-    fprintf(stdout,"\n");
-    fprintf(stdout,"INFO ON TILES\n");
-    fprintf(stdout,"tileno start_pos end_hd end_tile nbparts disto nbpix disto/nbpix\n");
-    fprintf(stdout,"Tile_0 start_pos end_Theader end_pos NumParts TotalDisto NumPix MaxMSE\n");
-    fprintf(stdout,"Tile_1   ''           ''        ''        ''       ''    ''      ''\n");
-    fprintf(stdout,"...\n");
-    fprintf(stdout,"Tile_Nt   ''           ''        ''        ''       ''    ''     ''\n");
-    fprintf(stdout,"...\n");
-    fprintf(stdout,"TILE 0 DETAILS\n");
-    fprintf(stdout,"part_nb tileno num_packs start_pos end_tph_pos end_pos\n");
-    fprintf(stdout,"...\n");
-    fprintf(stdout,"Progression_string\n");
-    fprintf(stdout,"pack_nb tileno layno resno compno precno start_pos end_ph_pos end_pos disto\n");
-    fprintf(stdout,"Tpacket_0 Tile layer res. comp. prec. start_pos end_pos disto\n");
-    fprintf(stdout,"...\n");
-    fprintf(stdout,"Tpacket_Np ''   ''    ''   ''    ''       ''       ''     ''\n");
-    fprintf(stdout,"MaxDisto\n");
-    fprintf(stdout,"TotalDisto\n\n");
+    fprintf(stdout, "Index structure:\n");
+    fprintf(stdout, "----------------\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "Image_height Image_width\n");
+    fprintf(stdout, "progression order\n");
+    fprintf(stdout, "Tiles_size_X Tiles_size_Y\n");
+    fprintf(stdout, "Tiles_nb_X Tiles_nb_Y\n");
+    fprintf(stdout, "Components_nb\n");
+    fprintf(stdout, "Layers_nb\n");
+    fprintf(stdout, "decomposition_levels\n");
+    fprintf(stdout, "[Precincts_size_X_res_Nr Precincts_size_Y_res_Nr]...\n");
+    fprintf(stdout, "   [Precincts_size_X_res_0 Precincts_size_Y_res_0]\n");
+    fprintf(stdout, "Main_header_start_position\n");
+    fprintf(stdout, "Main_header_end_position\n");
+    fprintf(stdout, "Codestream_size\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "INFO ON TILES\n");
+    fprintf(stdout,
+            "tileno start_pos end_hd end_tile nbparts disto nbpix disto/nbpix\n");
+    fprintf(stdout,
+            "Tile_0 start_pos end_Theader end_pos NumParts TotalDisto NumPix MaxMSE\n");
+    fprintf(stdout,
+            "Tile_1   ''           ''        ''        ''       ''    ''      ''\n");
+    fprintf(stdout, "...\n");
+    fprintf(stdout,
+            "Tile_Nt   ''           ''        ''        ''       ''    ''     ''\n");
+    fprintf(stdout, "...\n");
+    fprintf(stdout, "TILE 0 DETAILS\n");
+    fprintf(stdout, "part_nb tileno num_packs start_pos end_tph_pos end_pos\n");
+    fprintf(stdout, "...\n");
+    fprintf(stdout, "Progression_string\n");
+    fprintf(stdout,
+            "pack_nb tileno layno resno compno precno start_pos end_ph_pos end_pos disto\n");
+    fprintf(stdout,
+            "Tpacket_0 Tile layer res. comp. prec. start_pos end_pos disto\n");
+    fprintf(stdout, "...\n");
+    fprintf(stdout,
+            "Tpacket_Np ''   ''    ''   ''    ''       ''       ''     ''\n");
+    fprintf(stdout, "MaxDisto\n");
+    fprintf(stdout, "TotalDisto\n\n");
 #endif /*FIXME_INDEX*/
 }
 
-static OPJ_PROG_ORDER give_progression(const char progression[4]) {
-    if(strncmp(progression, "LRCP", 4) == 0) {
+static OPJ_PROG_ORDER give_progression(const char progression[4])
+{
+    if (strncmp(progression, "LRCP", 4) == 0) {
         return OPJ_LRCP;
     }
-    if(strncmp(progression, "RLCP", 4) == 0) {
+    if (strncmp(progression, "RLCP", 4) == 0) {
         return OPJ_RLCP;
     }
-    if(strncmp(progression, "RPCL", 4) == 0) {
+    if (strncmp(progression, "RPCL", 4) == 0) {
         return OPJ_RPCL;
     }
-    if(strncmp(progression, "PCRL", 4) == 0) {
+    if (strncmp(progression, "PCRL", 4) == 0) {
         return OPJ_PCRL;
     }
-    if(strncmp(progression, "CPRL", 4) == 0) {
+    if (strncmp(progression, "CPRL", 4) == 0) {
         return OPJ_CPRL;
     }
 
     return OPJ_PROG_UNKNOWN;
 }
 
-static unsigned int get_num_images(char *imgdirpath){
+static unsigned int get_num_images(char *imgdirpath)
+{
     DIR *dir;
     struct dirent* content;
     unsigned int num_images = 0;
 
     /*Reading the input images from given input directory*/
 
-    dir= opendir(imgdirpath);
-    if(!dir){
-        fprintf(stderr,"Could not open Folder %s\n",imgdirpath);
+    dir = opendir(imgdirpath);
+    if (!dir) {
+        fprintf(stderr, "Could not open Folder %s\n", imgdirpath);
         return 0;
     }
 
-    num_images=0;
-    while((content=readdir(dir))!=NULL){
-        if(strcmp(".",content->d_name)==0 || strcmp("..",content->d_name)==0 )
+    num_images = 0;
+    while ((content = readdir(dir)) != NULL) {
+        if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) {
             continue;
+        }
         num_images++;
     }
     closedir(dir);
     return num_images;
 }
 
-static int load_images(dircnt_t *dirptr, char *imgdirpath){
+static int load_images(dircnt_t *dirptr, char *imgdirpath)
+{
     DIR *dir;
     struct dirent* content;
     int i = 0;
 
     /*Reading the input images from given input directory*/
 
-    dir= opendir(imgdirpath);
-    if(!dir){
-        fprintf(stderr,"Could not open Folder %s\n",imgdirpath);
+    dir = opendir(imgdirpath);
+    if (!dir) {
+        fprintf(stderr, "Could not open Folder %s\n", imgdirpath);
         return 1;
-    }else      {
-        fprintf(stderr,"Folder opened successfully\n");
+    } else   {
+        fprintf(stderr, "Folder opened successfully\n");
     }
 
-    while((content=readdir(dir))!=NULL){
-        if(strcmp(".",content->d_name)==0 || strcmp("..",content->d_name)==0 )
+    while ((content = readdir(dir)) != NULL) {
+        if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) {
             continue;
+        }
 
-        strcpy(dirptr->filename[i],content->d_name);
+        strcpy(dirptr->filename[i], content->d_name);
         i++;
     }
-       closedir(dir);
+    closedir(dir);
     return 0;
 }
 
-static int get_file_format(char *filename) {
+static int get_file_format(char *filename)
+{
     unsigned int i;
     static const char *extension[] = {
         "pgx", "pnm", "pgm", "ppm", "pbm", "pam", "bmp", "tif", "raw", "rawl", "tga", "png", "j2k", "jp2", "j2c", "jpc"
@@ -431,45 +508,54 @@ static int get_file_format(char *filename) {
         PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, TIF_DFMT, RAW_DFMT, RAWL_DFMT, TGA_DFMT, PNG_DFMT, J2K_CFMT, JP2_CFMT, J2K_CFMT, J2K_CFMT
     };
     char * ext = strrchr(filename, '.');
-    if (ext == NULL)
+    if (ext == NULL) {
         return -1;
+    }
     ext++;
-    for(i = 0; i < sizeof(format)/sizeof(*format); i++) {
-        if(strcasecmp(ext, extension[i]) == 0) {
+    for (i = 0; i < sizeof(format) / sizeof(*format); i++) {
+        if (strcasecmp(ext, extension[i]) == 0) {
             return format[i];
         }
     }
     return -1;
 }
 
-static char * get_file_name(char *name){
-    char *fname = strtok(name,".");
+static char * get_file_name(char *name)
+{
+    char *fname = strtok(name, ".");
     return fname;
 }
 
-static char get_next_file(int imageno,dircnt_t *dirptr,img_fol_t *img_fol, opj_cparameters_t *parameters){
-    char image_filename[OPJ_PATH_LEN], infilename[OPJ_PATH_LEN],outfilename[OPJ_PATH_LEN],temp_ofname[OPJ_PATH_LEN];
-    char *temp_p, temp1[OPJ_PATH_LEN]="";
+static char get_next_file(int imageno, dircnt_t *dirptr, img_fol_t *img_fol,
+                          opj_cparameters_t *parameters)
+{
+    char image_filename[OPJ_PATH_LEN], infilename[OPJ_PATH_LEN],
+         outfilename[OPJ_PATH_LEN], temp_ofname[OPJ_PATH_LEN];
+    char *temp_p, temp1[OPJ_PATH_LEN] = "";
 
-    strcpy(image_filename,dirptr->filename[imageno]);
-    fprintf(stderr,"File Number %d \"%s\"\n",imageno,image_filename);
+    strcpy(image_filename, dirptr->filename[imageno]);
+    fprintf(stderr, "File Number %d \"%s\"\n", imageno, image_filename);
     parameters->decod_format = get_file_format(image_filename);
-    if (parameters->decod_format == -1)
+    if (parameters->decod_format == -1) {
         return 1;
-    sprintf(infilename,"%s/%s",img_fol->imgdirpath,image_filename);
-    if (opj_strcpy_s(parameters->infile, sizeof(parameters->infile), infilename) != 0) {
+    }
+    sprintf(infilename, "%s/%s", img_fol->imgdirpath, image_filename);
+    if (opj_strcpy_s(parameters->infile, sizeof(parameters->infile),
+                     infilename) != 0) {
         return 1;
     }
-       
+
     /*Set output file*/
-    strcpy(temp_ofname,get_file_name(image_filename));
-    while((temp_p = strtok(NULL,".")) != NULL){
-        strcat(temp_ofname,temp1);
-        sprintf(temp1,".%s",temp_p);
+    strcpy(temp_ofname, get_file_name(image_filename));
+    while ((temp_p = strtok(NULL, ".")) != NULL) {
+        strcat(temp_ofname, temp1);
+        sprintf(temp1, ".%s", temp_p);
     }
-    if(img_fol->set_out_format==1){
-        sprintf(outfilename,"%s/%s.%s",img_fol->imgdirpath,temp_ofname,img_fol->out_format);
-        if (opj_strcpy_s(parameters->outfile, sizeof(parameters->outfile), outfilename) != 0) {
+    if (img_fol->set_out_format == 1) {
+        sprintf(outfilename, "%s/%s.%s", img_fol->imgdirpath, temp_ofname,
+                img_fol->out_format);
+        if (opj_strcpy_s(parameters->outfile, sizeof(parameters->outfile),
+                         outfilename) != 0) {
             return 1;
         }
     }
@@ -478,45 +564,48 @@ static char get_next_file(int imageno,dircnt_t *dirptr,img_fol_t *img_fol, opj_c
 
 /* ------------------------------------------------------------------------------------ */
 
-static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
-                                 img_fol_t *img_fol, raw_cparameters_t *raw_cp, char *indexfilename, size_t indexfilename_size) {
+static int parse_cmdline_encoder(int argc, char **argv,
+                                 opj_cparameters_t *parameters,
+                                 img_fol_t *img_fol, raw_cparameters_t *raw_cp, char *indexfilename,
+                                 size_t indexfilename_size)
+{
     OPJ_UINT32 i, j;
     int totlen, c;
-    opj_option_t long_option[]={
-        {"cinema2K",REQ_ARG, NULL ,'w'},
-        {"cinema4K",NO_ARG, NULL ,'y'},
-        {"ImgDir",REQ_ARG, NULL ,'z'},
-        {"TP",REQ_ARG, NULL ,'u'},
-        {"SOP",NO_ARG, NULL ,'S'},
-        {"EPH",NO_ARG, NULL ,'E'},
-        {"OutFor",REQ_ARG, NULL ,'O'},
-        {"POC",REQ_ARG, NULL ,'P'},
-        {"ROI",REQ_ARG, NULL ,'R'},
-        {"jpip",NO_ARG, NULL, 'J'},
-        {"mct",REQ_ARG, NULL, 'Y'}
+    opj_option_t long_option[] = {
+        {"cinema2K", REQ_ARG, NULL, 'w'},
+        {"cinema4K", NO_ARG, NULL, 'y'},
+        {"ImgDir", REQ_ARG, NULL, 'z'},
+        {"TP", REQ_ARG, NULL, 'u'},
+        {"SOP", NO_ARG, NULL, 'S'},
+        {"EPH", NO_ARG, NULL, 'E'},
+        {"OutFor", REQ_ARG, NULL, 'O'},
+        {"POC", REQ_ARG, NULL, 'P'},
+        {"ROI", REQ_ARG, NULL, 'R'},
+        {"jpip", NO_ARG, NULL, 'J'},
+        {"mct", REQ_ARG, NULL, 'Y'}
     };
 
     /* parse the command line */
     const char optlist[] = "i:o:r:q:n:b:c:t:p:s:SEM:x:R:d:T:If:P:C:F:u:JY:"
-        #ifdef USE_JPWL
-            "W:"
-        #endif /* USE_JPWL */
-            "h";
+#ifdef USE_JPWL
+                           "W:"
+#endif /* USE_JPWL */
+                           "h";
 
-    totlen=sizeof(long_option);
-    img_fol->set_out_format=0;
+    totlen = sizeof(long_option);
+    img_fol->set_out_format = 0;
     raw_cp->rawWidth = 0;
 
-    do{
-        c = opj_getopt_long(argc, argv, optlist,long_option,totlen);
-        if (c == -1)
+    do {
+        c = opj_getopt_long(argc, argv, optlist, long_option, totlen);
+        if (c == -1) {
             break;
+        }
         switch (c) {
-        case 'i':                      /* input file */
-        {
+        case 'i': {         /* input file */
             char *infile = opj_optarg;
             parameters->decod_format = get_file_format(infile);
-            switch(parameters->decod_format) {
+            switch (parameters->decod_format) {
             case PGX_DFMT:
             case PXM_DFMT:
             case BMP_DFMT:
@@ -537,37 +626,37 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
                 return 1;
             }
         }
-            break;
+        break;
 
-            /* ----------------------------------------------------- */
+        /* ----------------------------------------------------- */
 
-        case 'o':                      /* output file */
-        {
+        case 'o': {         /* output file */
             char *outfile = opj_optarg;
             parameters->cod_format = get_file_format(outfile);
-            switch(parameters->cod_format) {
+            switch (parameters->cod_format) {
             case J2K_CFMT:
             case JP2_CFMT:
                 break;
             default:
-                fprintf(stderr, "Unknown output format image %s [only *.j2k, *.j2c or *.jp2]!! \n", outfile);
+                fprintf(stderr,
+                        "Unknown output format image %s [only *.j2k, *.j2c or *.jp2]!! \n", outfile);
                 return 1;
             }
-            if (opj_strcpy_s(parameters->outfile, sizeof(parameters->outfile), outfile) != 0) {
+            if (opj_strcpy_s(parameters->outfile, sizeof(parameters->outfile),
+                             outfile) != 0) {
                 return 1;
             }
         }
-            break;
+        break;
 
-            /* ----------------------------------------------------- */
-        case 'O':                      /* output format */
-        {
+        /* ----------------------------------------------------- */
+        case 'O': {         /* output format */
             char outformat[50];
             char *of = opj_optarg;
-            sprintf(outformat,".%s",of);
+            sprintf(outformat, ".%s", of);
             img_fol->set_out_format = 1;
             parameters->cod_format = get_file_format(outformat);
-            switch(parameters->cod_format) {
+            switch (parameters->cod_format) {
             case J2K_CFMT:
             case JP2_CFMT:
                 img_fol->out_format = opj_optarg;
@@ -577,56 +666,57 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
                 return 1;
             }
         }
-            break;
+        break;
 
 
-            /* ----------------------------------------------------- */
+        /* ----------------------------------------------------- */
 
 
-        case 'r':                      /* rates rates/distorsion */
-        {
+        case 'r': {         /* rates rates/distorsion */
             char *s = opj_optarg;
             parameters->tcp_numlayers = 0;
-            while (sscanf(s, "%f", &parameters->tcp_rates[parameters->tcp_numlayers]) == 1) {
+            while (sscanf(s, "%f", &parameters->tcp_rates[parameters->tcp_numlayers]) ==
+                    1) {
                 parameters->tcp_numlayers++;
                 while (*s && *s != ',') {
                     s++;
                 }
-                if (!*s)
+                if (!*s) {
                     break;
+                }
                 s++;
             }
             parameters->cp_disto_alloc = 1;
         }
-            break;
+        break;
 
-            /* ----------------------------------------------------- */
+        /* ----------------------------------------------------- */
 
 
-        case 'F':                      /* Raw image format parameters */
-        {
+        case 'F': {         /* Raw image format parameters */
             OPJ_BOOL wrong = OPJ_FALSE;
             char *substr1;
             char *substr2;
             char *sep;
             char signo;
-            int width,height,bitdepth,ncomp;
+            int width, height, bitdepth, ncomp;
             OPJ_UINT32 len;
             OPJ_BOOL raw_signed = OPJ_FALSE;
-            substr2 = strchr(opj_optarg,'@');
+            substr2 = strchr(opj_optarg, '@');
             if (substr2 == NULL) {
                 len = (OPJ_UINT32) strlen(opj_optarg);
             } else {
-                len = (OPJ_UINT32) (substr2 - opj_optarg);
+                len = (OPJ_UINT32)(substr2 - opj_optarg);
                 substr2++; /* skip '@' character */
             }
-            substr1 = (char*) malloc((len+1)*sizeof(char));
+            substr1 = (char*) malloc((len + 1) * sizeof(char));
             if (substr1 == NULL) {
                 return 1;
             }
-            memcpy(substr1,opj_optarg,len);
+            memcpy(substr1, opj_optarg, len);
             substr1[len] = '\0';
-            if (sscanf(substr1, "%d,%d,%d,%d,%c", &width, &height, &ncomp, &bitdepth, &signo) == 5) {
+            if (sscanf(substr1, "%d,%d,%d,%d,%c", &width, &height, &ncomp, &bitdepth,
+                       &signo) == 5) {
                 if (signo == 's') {
                     raw_signed = OPJ_TRUE;
                 } else if (signo == 'u') {
@@ -646,18 +736,19 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
                 raw_cp->rawComp = ncomp;
                 raw_cp->rawBitDepth = bitdepth;
                 raw_cp->rawSigned  = raw_signed;
-                raw_cp->rawComps = (raw_comp_cparameters_t*) malloc(((OPJ_UINT32)(ncomp))*sizeof(raw_comp_cparameters_t));
-                               if(raw_cp->rawComps == NULL){
-                                       free(substr1);
-                                       return 1;
-                               }
+                raw_cp->rawComps = (raw_comp_cparameters_t*) malloc(((OPJ_UINT32)(
+                                       ncomp)) * sizeof(raw_comp_cparameters_t));
+                if (raw_cp->rawComps == NULL) {
+                    free(substr1);
+                    return 1;
+                }
                 for (compno = 0; compno < ncomp && !wrong; compno++) {
                     if (substr2 == NULL) {
                         raw_cp->rawComps[compno].dx = lastdx;
                         raw_cp->rawComps[compno].dy = lastdy;
                     } else {
-                        int dx,dy;
-                        sep = strchr(substr2,':');
+                        int dx, dy;
+                        sep = strchr(substr2, ':');
                         if (sep == NULL) {
                             if (sscanf(substr2, "%dx%d", &dx, &dy) == 2) {
                                 lastdx = dx;
@@ -681,57 +772,61 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
             }
             free(substr1);
             if (wrong) {
-                fprintf(stderr,"\nError: invalid raw image parameters\n");
-                fprintf(stderr,"Please use the Format option -F:\n");
-                fprintf(stderr,"-F <width>,<height>,<ncomp>,<bitdepth>,{s,u}@<dx1>x<dy1>:...:<dxn>x<dyn>\n");
-                fprintf(stderr,"If subsampling is omitted, 1x1 is assumed for all components\n");
-                fprintf(stderr,"Example: -i image.raw -o image.j2k -F 512,512,3,8,u@1x1:2x2:2x2\n");
-                fprintf(stderr,"         for raw 512x512 image with 4:2:0 subsampling\n");
-                fprintf(stderr,"Aborting.\n");
+                fprintf(stderr, "\nError: invalid raw image parameters\n");
+                fprintf(stderr, "Please use the Format option -F:\n");
+                fprintf(stderr,
+                        "-F <width>,<height>,<ncomp>,<bitdepth>,{s,u}@<dx1>x<dy1>:...:<dxn>x<dyn>\n");
+                fprintf(stderr,
+                        "If subsampling is omitted, 1x1 is assumed for all components\n");
+                fprintf(stderr,
+                        "Example: -i image.raw -o image.j2k -F 512,512,3,8,u@1x1:2x2:2x2\n");
+                fprintf(stderr, "         for raw 512x512 image with 4:2:0 subsampling\n");
+                fprintf(stderr, "Aborting.\n");
                 return 1;
             }
         }
-            break;
+        break;
 
-            /* ----------------------------------------------------- */
+        /* ----------------------------------------------------- */
 
-        case 'q':                      /* add fixed_quality */
-        {
+        case 'q': {         /* add fixed_quality */
             char *s = opj_optarg;
-            while (sscanf(s, "%f", &parameters->tcp_distoratio[parameters->tcp_numlayers]) == 1) {
+            while (sscanf(s, "%f", &parameters->tcp_distoratio[parameters->tcp_numlayers])
+                    == 1) {
                 parameters->tcp_numlayers++;
                 while (*s && *s != ',') {
                     s++;
                 }
-                if (!*s)
+                if (!*s) {
                     break;
+                }
                 s++;
             }
             parameters->cp_fixed_quality = 1;
         }
-            break;
+        break;
 
-            /* dda */
-            /* ----------------------------------------------------- */
+        /* dda */
+        /* ----------------------------------------------------- */
 
-        case 'f':                      /* mod fixed_quality (before : -q) */
-        {
+        case 'f': {         /* mod fixed_quality (before : -q) */
             int *row = NULL, *col = NULL;
             OPJ_UINT32 numlayers = 0, numresolution = 0, matrix_width = 0;
 
             char *s = opj_optarg;
             sscanf(s, "%u", &numlayers);
             s++;
-            if (numlayers > 9)
+            if (numlayers > 9) {
                 s++;
+            }
 
             parameters->tcp_numlayers = (int)numlayers;
             numresolution = (OPJ_UINT32)parameters->numresolution;
             matrix_width = numresolution * 3;
             parameters->cp_matrice = (int *) malloc(numlayers * matrix_width * sizeof(int));
-                       if(parameters->cp_matrice == NULL){
-                               return 1;
-                       }
+            if (parameters->cp_matrice == NULL) {
+                return 1;
+            }
             s = s + 2;
 
             for (i = 0; i < numlayers; i++) {
@@ -740,48 +835,50 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
                 parameters->tcp_rates[i] = 1;
                 sscanf(s, "%d,", &col[0]);
                 s += 2;
-                if (col[0] > 9)
+                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)
+                    if (col[0] > 9) {
                         s++;
-                    if (col[1] > 9)
+                    }
+                    if (col[1] > 9) {
                         s++;
-                    if (col[2] > 9)
+                    }
+                    if (col[2] > 9) {
                         s++;
+                    }
                 }
-                if (i < numlayers - 1)
+                if (i < numlayers - 1) {
                     s++;
+                }
             }
             parameters->cp_fixed_alloc = 1;
         }
-            break;
+        break;
 
-            /* ----------------------------------------------------- */
+        /* ----------------------------------------------------- */
 
-        case 't':                      /* tiles */
-        {
+        case 't': {         /* tiles */
             sscanf(opj_optarg, "%d,%d", &parameters->cp_tdx, &parameters->cp_tdy);
             parameters->tile_size_on = OPJ_TRUE;
         }
-            break;
+        break;
 
-            /* ----------------------------------------------------- */
+        /* ----------------------------------------------------- */
 
-        case 'n':                      /* resolution */
-        {
+        case 'n': {         /* resolution */
             sscanf(opj_optarg, "%d", &parameters->numresolution);
         }
-            break;
+        break;
 
-            /* ----------------------------------------------------- */
-        case 'c':                      /* precinct dimension */
-        {
+        /* ----------------------------------------------------- */
+        case 'c': {         /* precinct dimension */
             char sep;
             int res_spec = 0;
 
@@ -790,26 +887,24 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
             do {
                 sep = 0;
                 ret = sscanf(s, "[%d,%d]%c", &parameters->prcw_init[res_spec],
-                       &parameters->prch_init[res_spec], &sep);
-                if( !(ret == 2 && sep == 0) && !(ret == 3 && sep == ',') )
-                  {
-                  fprintf(stderr,"\nError: could not parse precinct dimension: '%s' %x\n", s, sep);
-                  fprintf(stderr,"Example: -i lena.raw -o lena.j2k -c [128,128],[128,128]\n");
-                  return 1;
-                  }
+                             &parameters->prch_init[res_spec], &sep);
+                if (!(ret == 2 && sep == 0) && !(ret == 3 && sep == ',')) {
+                    fprintf(stderr, "\nError: could not parse precinct dimension: '%s' %x\n", s,
+                            sep);
+                    fprintf(stderr, "Example: -i lena.raw -o lena.j2k -c [128,128],[128,128]\n");
+                    return 1;
+                }
                 parameters->csty |= 0x01;
                 res_spec++;
                 s = strpbrk(s, "]") + 2;
-            }
-            while (sep == ',');
+            } while (sep == ',');
             parameters->res_spec = res_spec;
         }
-            break;
+        break;
 
-            /* ----------------------------------------------------- */
+        /* ----------------------------------------------------- */
 
-        case 'b':                      /* code-block dimension */
-        {
+        case 'b': {         /* code-block dimension */
             int cblockw_init = 0, cblockh_init = 0;
             sscanf(opj_optarg, "%d,%d", &cblockw_init, &cblockh_init);
             if (cblockw_init * cblockh_init > 4096 || cblockw_init > 1024
@@ -822,12 +917,11 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
             parameters->cblockw_init = cblockw_init;
             parameters->cblockh_init = cblockh_init;
         }
-            break;
+        break;
 
-            /* ----------------------------------------------------- */
+        /* ----------------------------------------------------- */
 
-        case 'x':                      /* creation of index file */
-        {
+        case 'x': {         /* creation of index file */
             if (opj_strcpy_s(indexfilename, indexfilename_size, opj_optarg) != 0) {
                 return 1;
             }
@@ -837,12 +931,11 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
                     "          '-x' option ignored.\n");
             /* << FIXME ADE INDEX */
         }
-            break;
+        break;
 
-            /* ----------------------------------------------------- */
+        /* ----------------------------------------------------- */
 
-        case 'p':                      /* progression order */
-        {
+        case 'p': {         /* progression order */
             char progression[4];
 
             strncpy(progression, opj_optarg, 4);
@@ -853,45 +946,42 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
                 return 1;
             }
         }
-            break;
+        break;
 
-            /* ----------------------------------------------------- */
+        /* ----------------------------------------------------- */
 
-        case 's':                      /* subsampling factor */
-        {
+        case 's': {         /* subsampling factor */
             if (sscanf(opj_optarg, "%d,%d", &parameters->subsampling_dx,
                        &parameters->subsampling_dy) != 2) {
-                fprintf(stderr,        "'-s' sub-sampling argument error !  [-s dx,dy]\n");
+                fprintf(stderr, "'-s' sub-sampling argument error !  [-s dx,dy]\n");
                 return 1;
             }
         }
-            break;
+        break;
 
-            /* ----------------------------------------------------- */
+        /* ----------------------------------------------------- */
 
-        case 'd':                      /* coordonnate of the reference grid */
-        {
+        case 'd': {         /* coordonnate of the reference grid */
             if (sscanf(opj_optarg, "%d,%d", &parameters->image_offset_x0,
                        &parameters->image_offset_y0) != 2) {
-                fprintf(stderr,        "-d 'coordonnate of the reference grid' argument "
+                fprintf(stderr, "-d 'coordonnate of the reference grid' argument "
                         "error !! [-d x0,y0]\n");
                 return 1;
             }
         }
-            break;
+        break;
 
-            /* ----------------------------------------------------- */
+        /* ----------------------------------------------------- */
 
-        case 'h':                      /* display an help description */
+        case 'h':           /* display an help description */
             encode_help_display();
             return 1;
 
-            /* ----------------------------------------------------- */
+        /* ----------------------------------------------------- */
 
-        case 'P':                      /* POC */
-        {
-            int numpocs = 0;           /* number of progression order change (POC) default 0 */
-            opj_poc_t *POC = NULL;     /* POC : used in case of Progression order change */
+        case 'P': {         /* POC */
+            int numpocs = 0;        /* number of progression order change (POC) default 0 */
+            opj_poc_t *POC = NULL;  /* POC : used in case of Progression order change */
 
             char *s = opj_optarg;
             POC = parameters->POC;
@@ -912,157 +1002,147 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
             }
             parameters->numpocs = (OPJ_UINT32)numpocs;
         }
-            break;
+        break;
 
-            /* ------------------------------------------------------ */
+        /* ------------------------------------------------------ */
 
-        case 'S':                      /* SOP marker */
-        {
+        case 'S': {         /* SOP marker */
             parameters->csty |= 0x02;
         }
-            break;
+        break;
 
-            /* ------------------------------------------------------ */
+        /* ------------------------------------------------------ */
 
-        case 'E':                      /* EPH marker */
-        {
+        case 'E': {         /* EPH marker */
             parameters->csty |= 0x04;
         }
-            break;
+        break;
 
-            /* ------------------------------------------------------ */
+        /* ------------------------------------------------------ */
 
-        case 'M':                      /* Mode switch pas tous au point !! */
-        {
+        case 'M': {         /* Mode switch pas tous au point !! */
             int value = 0;
             if (sscanf(opj_optarg, "%d", &value) == 1) {
                 for (i = 0; i <= 5; i++) {
                     int cache = value & (1 << i);
-                    if (cache)
+                    if (cache) {
                         parameters->mode |= (1 << i);
+                    }
                 }
             }
         }
-            break;
+        break;
 
-            /* ------------------------------------------------------ */
+        /* ------------------------------------------------------ */
 
-        case 'R':                      /* ROI */
-        {
+        case 'R': {         /* ROI */
             if (sscanf(opj_optarg, "c=%d,U=%d", &parameters->roi_compno,
                        &parameters->roi_shift) != 2) {
                 fprintf(stderr, "ROI error !! [-ROI c='compno',U='shift']\n");
                 return 1;
             }
         }
-            break;
+        break;
 
-            /* ------------------------------------------------------ */
+        /* ------------------------------------------------------ */
 
-        case 'T':                      /* Tile offset */
-        {
-            if (sscanf(opj_optarg, "%d,%d", &parameters->cp_tx0, &parameters->cp_ty0) != 2) {
+        case 'T': {         /* Tile offset */
+            if (sscanf(opj_optarg, "%d,%d", &parameters->cp_tx0,
+                       &parameters->cp_ty0) != 2) {
                 fprintf(stderr, "-T 'tile offset' argument error !! [-T X0,Y0]");
                 return 1;
             }
         }
-            break;
+        break;
 
-            /* ------------------------------------------------------ */
+        /* ------------------------------------------------------ */
 
-        case 'C':                      /* add a comment */
-        {
+        case 'C': {         /* add a comment */
             parameters->cp_comment = (char*)malloc(strlen(opj_optarg) + 1);
-            if(parameters->cp_comment) {
+            if (parameters->cp_comment) {
                 strcpy(parameters->cp_comment, opj_optarg);
             }
         }
-            break;
+        break;
 
 
-            /* ------------------------------------------------------ */
+        /* ------------------------------------------------------ */
 
-        case 'I':                      /* reversible or not */
-        {
+        case 'I': {         /* reversible or not */
             parameters->irreversible = 1;
         }
-            break;
+        break;
 
-            /* ------------------------------------------------------ */
+        /* ------------------------------------------------------ */
 
-        case 'u':                      /* Tile part generation*/
-        {
+        case 'u': {         /* Tile part generation*/
             parameters->tp_flag = opj_optarg[0];
             parameters->tp_on = 1;
         }
-            break;
+        break;
 
-            /* ------------------------------------------------------ */
+        /* ------------------------------------------------------ */
 
-        case 'z':                      /* Image Directory path */
-        {
+        case 'z': {         /* Image Directory path */
             img_fol->imgdirpath = (char*)malloc(strlen(opj_optarg) + 1);
-                       if(img_fol->imgdirpath == NULL){
-                               return 1;
-                       }
-            strcpy(img_fol->imgdirpath,opj_optarg);
-            img_fol->set_imgdir=1;
+            if (img_fol->imgdirpath == NULL) {
+                return 1;
+            }
+            strcpy(img_fol->imgdirpath, opj_optarg);
+            img_fol->set_imgdir = 1;
         }
-            break;
+        break;
 
-            /* ------------------------------------------------------ */
+        /* ------------------------------------------------------ */
 
-        case 'w':                      /* Digital Cinema 2K profile compliance*/
-        {
-            int fps=0;
-            sscanf(opj_optarg,"%d",&fps);
-            if(fps == 24){
+        case 'w': {         /* Digital Cinema 2K profile compliance*/
+            int fps = 0;
+            sscanf(opj_optarg, "%d", &fps);
+            if (fps == 24) {
                 parameters->rsiz = OPJ_PROFILE_CINEMA_2K;
                 parameters->max_comp_size = OPJ_CINEMA_24_COMP;
                 parameters->max_cs_size = OPJ_CINEMA_24_CS;
-            }else if(fps == 48 ){
+            } else if (fps == 48) {
                 parameters->rsiz = OPJ_PROFILE_CINEMA_2K;
                 parameters->max_comp_size = OPJ_CINEMA_48_COMP;
                 parameters->max_cs_size = OPJ_CINEMA_48_CS;
-            }else {
-                fprintf(stderr,"Incorrect value!! must be 24 or 48\n");
+            } else {
+                fprintf(stderr, "Incorrect value!! must be 24 or 48\n");
                 return 1;
             }
-            fprintf(stdout,"CINEMA 2K profile activated\n"
+            fprintf(stdout, "CINEMA 2K profile activated\n"
                     "Other options specified could be overridden\n");
 
         }
-            break;
+        break;
 
-            /* ------------------------------------------------------ */
+        /* ------------------------------------------------------ */
 
-        case 'y':                      /* Digital Cinema 4K profile compliance*/
-        {
+        case 'y': {         /* Digital Cinema 4K profile compliance*/
             parameters->rsiz = OPJ_PROFILE_CINEMA_4K;
-            fprintf(stdout,"CINEMA 4K profile activated\n"
+            fprintf(stdout, "CINEMA 4K profile activated\n"
                     "Other options specified could be overridden\n");
         }
-            break;
+        break;
 
-            /* ------------------------------------------------------ */
+        /* ------------------------------------------------------ */
 
-        case 'Y':                      /* Shall we do an MCT ? 0:no_mct;1:rgb->ycc;2:custom mct (-m option required)*/
-        {
-            int mct_mode=0;
-            sscanf(opj_optarg,"%d",&mct_mode);
-            if(mct_mode < 0 || mct_mode > 2){
-                fprintf(stderr,"MCT incorrect value!! Current accepted values are 0, 1 or 2.\n");
+        case 'Y': {         /* Shall we do an MCT ? 0:no_mct;1:rgb->ycc;2:custom mct (-m option required)*/
+            int mct_mode = 0;
+            sscanf(opj_optarg, "%d", &mct_mode);
+            if (mct_mode < 0 || mct_mode > 2) {
+                fprintf(stderr,
+                        "MCT incorrect value!! Current accepted values are 0, 1 or 2.\n");
                 return 1;
             }
             parameters->tcp_mct = (char) mct_mode;
         }
-            break;
+        break;
 
-            /* ------------------------------------------------------ */
+        /* ------------------------------------------------------ */
 
 
-        case 'm':                      /* mct input file */
-        {
+        case 'm': {         /* mct input file */
             char *lFilename = opj_optarg;
             char *lMatrix;
             char *lCurrentPtr ;
@@ -1073,15 +1153,15 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
             size_t lStrLen, lStrFread;
 
             /* Open file */
-            FILE * lFile = fopen(lFilename,"r");
+            FILE * lFile = fopen(lFilename, "r");
             if (lFile == NULL) {
                 return 1;
             }
 
             /* Set size of file and read its content*/
-            fseek(lFile,0,SEEK_END);
+            fseek(lFile, 0, SEEK_END);
             lStrLen = (size_t)ftell(lFile);
-            fseek(lFile,0,SEEK_SET);
+            fseek(lFile, 0, SEEK_SET);
             lMatrix = (char *) malloc(lStrLen + 1);
             if (lMatrix == NULL) {
                 fclose(lFile);
@@ -1089,7 +1169,7 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
             }
             lStrFread = fread(lMatrix, 1, lStrLen, lFile);
             fclose(lFile);
-            if( lStrLen != lStrFread ) {
+            if (lStrLen != lStrFread) {
                 free(lMatrix);
                 return 1;
             }
@@ -1098,7 +1178,7 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
             lCurrentPtr = lMatrix;
 
             /* replace ',' by 0 */
-            while (*lCurrentPtr != 0 ) {
+            while (*lCurrentPtr != 0) {
                 if (*lCurrentPtr == ' ') {
                     *lCurrentPtr = 0;
                     ++lNbComp;
@@ -1108,52 +1188,53 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
             ++lNbComp;
             lCurrentPtr = lMatrix;
 
-            lNbComp = (int) (sqrt(4*lNbComp + 1)/2. - 0.5);
+            lNbComp = (int)(sqrt(4 * lNbComp + 1) / 2. - 0.5);
             lMctComp = lNbComp * lNbComp;
             lTotalComp = lMctComp + lNbComp;
             lSpace = (float *) malloc((size_t)lTotalComp * sizeof(float));
-            if(lSpace == NULL) {
+            if (lSpace == NULL) {
                 free(lMatrix);
                 return 1;
             }
             lCurrentDoublePtr = lSpace;
-            for (i2=0;i2<lMctComp;++i2) {
+            for (i2 = 0; i2 < lMctComp; ++i2) {
                 lStrLen = strlen(lCurrentPtr) + 1;
                 *lCurrentDoublePtr++ = (float) atof(lCurrentPtr);
                 lCurrentPtr += lStrLen;
             }
 
             l_int_ptr = (int*) lCurrentDoublePtr;
-            for (i2=0;i2<lNbComp;++i2) {
+            for (i2 = 0; i2 < lNbComp; ++i2) {
                 lStrLen = strlen(lCurrentPtr) + 1;
                 *l_int_ptr++ = atoi(lCurrentPtr);
                 lCurrentPtr += lStrLen;
             }
 
             /* TODO should not be here ! */
-            opj_set_MCT(parameters, lSpace, (int *)(lSpace + lMctComp), (OPJ_UINT32)lNbComp);
+            opj_set_MCT(parameters, lSpace, (int *)(lSpace + lMctComp),
+                        (OPJ_UINT32)lNbComp);
 
             /* Free memory*/
             free(lSpace);
             free(lMatrix);
         }
-            break;
+        break;
 
 
             /* ------------------------------------------------------ */
 
             /* UniPG>> */
 #ifdef USE_JPWL
-            /* ------------------------------------------------------ */
+        /* ------------------------------------------------------ */
 
-        case 'W':                      /* JPWL capabilities switched on */
-        {
+        case 'W': {         /* JPWL capabilities switched on */
             char *token = NULL;
             int hprot, pprot, sens, addr, size, range;
 
             /* we need to enable indexing */
             if (!indexfilename || !*indexfilename) {
-                if (opj_strcpy_s(indexfilename, indexfilename_size, JPWL_PRIVATEINDEX_NAME) != 0) {
+                if (opj_strcpy_s(indexfilename, indexfilename_size,
+                                 JPWL_PRIVATEINDEX_NAME) != 0) {
                     return 1;
                 }
             }
@@ -1162,7 +1243,7 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
 
             /* break the option in comma points and parse the result */
             token = strtok(opj_optarg, ",");
-            while(token != NULL) {
+            while (token != NULL) {
 
                 /* search header error protection method */
                 if (*token == 'h') {
@@ -1171,24 +1252,27 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
 
                     hprot = 1; /* predefined method */
 
-                    if(sscanf(token, "h=%d", &hprot) == 1) {
+                    if (sscanf(token, "h=%d", &hprot) == 1) {
                         /* Main header, specified */
                         if (!((hprot == 0) || (hprot == 1) || (hprot == 16) || (hprot == 32) ||
-                              ((hprot >= 37) && (hprot <= 128)))) {
-                            fprintf(stderr, "ERROR -> invalid main header protection method h = %d\n", hprot);
+                                ((hprot >= 37) && (hprot <= 128)))) {
+                            fprintf(stderr, "ERROR -> invalid main header protection method h = %d\n",
+                                    hprot);
                             return 1;
                         }
                         parameters->jpwl_hprot_MH = hprot;
 
-                    } else if(sscanf(token, "h%d=%d", &tile, &hprot) == 2) {
+                    } else if (sscanf(token, "h%d=%d", &tile, &hprot) == 2) {
                         /* Tile part header, specified */
                         if (!((hprot == 0) || (hprot == 1) || (hprot == 16) || (hprot == 32) ||
-                              ((hprot >= 37) && (hprot <= 128)))) {
-                            fprintf(stderr, "ERROR -> invalid tile part header protection method h = %d\n", hprot);
+                                ((hprot >= 37) && (hprot <= 128)))) {
+                            fprintf(stderr, "ERROR -> invalid tile part header protection method h = %d\n",
+                                    hprot);
                             return 1;
                         }
                         if (tile < 0) {
-                            fprintf(stderr, "ERROR -> invalid tile part number on protection method t = %d\n", tile);
+                            fprintf(stderr,
+                                    "ERROR -> invalid tile part number on protection method t = %d\n", tile);
                             return 1;
                         }
                         if (tilespec < JPWL_MAX_NO_TILESPECS) {
@@ -1196,10 +1280,11 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
                             parameters->jpwl_hprot_TPH[tilespec++] = hprot;
                         }
 
-                    } else if(sscanf(token, "h%d", &tile) == 1) {
+                    } else if (sscanf(token, "h%d", &tile) == 1) {
                         /* Tile part header, unspecified */
                         if (tile < 0) {
-                            fprintf(stderr, "ERROR -> invalid tile part number on protection method t = %d\n", tile);
+                            fprintf(stderr,
+                                    "ERROR -> invalid tile part number on protection method t = %d\n", tile);
                             return 1;
                         }
                         if (tilespec < JPWL_MAX_NO_TILESPECS) {
@@ -1229,8 +1314,9 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
                     if (sscanf(token, "p=%d", &pprot) == 1) {
                         /* Method for all tiles and all packets */
                         if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) ||
-                              ((pprot >= 37) && (pprot <= 128)))) {
-                            fprintf(stderr, "ERROR -> invalid default packet protection method p = %d\n", pprot);
+                                ((pprot >= 37) && (pprot <= 128)))) {
+                            fprintf(stderr, "ERROR -> invalid default packet protection method p = %d\n",
+                                    pprot);
                             return 1;
                         }
                         parameters->jpwl_pprot_tileno[0] = 0;
@@ -1240,12 +1326,13 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
                     } else if (sscanf(token, "p%d=%d", &tile, &pprot) == 2) {
                         /* method specified from that tile on */
                         if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) ||
-                              ((pprot >= 37) && (pprot <= 128)))) {
+                                ((pprot >= 37) && (pprot <= 128)))) {
                             fprintf(stderr, "ERROR -> invalid packet protection method p = %d\n", pprot);
                             return 1;
                         }
                         if (tile < 0) {
-                            fprintf(stderr, "ERROR -> invalid tile part number on protection method p = %d\n", tile);
+                            fprintf(stderr,
+                                    "ERROR -> invalid tile part number on protection method p = %d\n", tile);
                             return 1;
                         }
                         if (packspec < JPWL_MAX_NO_PACKSPECS) {
@@ -1257,16 +1344,18 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
                     } else if (sscanf(token, "p%d:%d=%d", &tile, &pack, &pprot) == 3) {
                         /* method fully specified from that tile and that packet on */
                         if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) ||
-                              ((pprot >= 37) && (pprot <= 128)))) {
+                                ((pprot >= 37) && (pprot <= 128)))) {
                             fprintf(stderr, "ERROR -> invalid packet protection method p = %d\n", pprot);
                             return 1;
                         }
                         if (tile < 0) {
-                            fprintf(stderr, "ERROR -> invalid tile part number on protection method p = %d\n", tile);
+                            fprintf(stderr,
+                                    "ERROR -> invalid tile part number on protection method p = %d\n", tile);
                             return 1;
                         }
                         if (pack < 0) {
-                            fprintf(stderr, "ERROR -> invalid packet number on protection method p = %d\n", pack);
+                            fprintf(stderr, "ERROR -> invalid packet number on protection method p = %d\n",
+                                    pack);
                             return 1;
                         }
                         if (packspec < JPWL_MAX_NO_PACKSPECS) {
@@ -1278,16 +1367,18 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
                     } else if (sscanf(token, "p%d:%d", &tile, &pack) == 2) {
                         /* default method from that tile and that packet on */
                         if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) ||
-                              ((pprot >= 37) && (pprot <= 128)))) {
+                                ((pprot >= 37) && (pprot <= 128)))) {
                             fprintf(stderr, "ERROR -> invalid packet protection method p = %d\n", pprot);
                             return 1;
                         }
                         if (tile < 0) {
-                            fprintf(stderr, "ERROR -> invalid tile part number on protection method p = %d\n", tile);
+                            fprintf(stderr,
+                                    "ERROR -> invalid tile part number on protection method p = %d\n", tile);
                             return 1;
                         }
                         if (pack < 0) {
-                            fprintf(stderr, "ERROR -> invalid packet number on protection method p = %d\n", pack);
+                            fprintf(stderr, "ERROR -> invalid packet number on protection method p = %d\n",
+                                    pack);
                             return 1;
                         }
                         if (packspec < JPWL_MAX_NO_PACKSPECS) {
@@ -1299,7 +1390,8 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
                     } else if (sscanf(token, "p%d", &tile) == 1) {
                         /* default from a tile on */
                         if (tile < 0) {
-                            fprintf(stderr, "ERROR -> invalid tile part number on protection method p = %d\n", tile);
+                            fprintf(stderr,
+                                    "ERROR -> invalid tile part number on protection method p = %d\n", tile);
                             return 1;
                         }
                         if (packspec < JPWL_MAX_NO_PACKSPECS) {
@@ -1329,22 +1421,25 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
 
                     sens = 0; /* predefined: relative error */
 
-                    if(sscanf(token, "s=%d", &sens) == 1) {
+                    if (sscanf(token, "s=%d", &sens) == 1) {
                         /* Main header, specified */
                         if ((sens < -1) || (sens > 7)) {
-                            fprintf(stderr, "ERROR -> invalid main header sensitivity method s = %d\n", sens);
+                            fprintf(stderr, "ERROR -> invalid main header sensitivity method s = %d\n",
+                                    sens);
                             return 1;
                         }
                         parameters->jpwl_sens_MH = sens;
 
-                    } else if(sscanf(token, "s%d=%d", &tile, &sens) == 2) {
+                    } else if (sscanf(token, "s%d=%d", &tile, &sens) == 2) {
                         /* Tile part header, specified */
                         if ((sens < -1) || (sens > 7)) {
-                            fprintf(stderr, "ERROR -> invalid tile part header sensitivity method s = %d\n", sens);
+                            fprintf(stderr, "ERROR -> invalid tile part header sensitivity method s = %d\n",
+                                    sens);
                             return 1;
                         }
                         if (tile < 0) {
-                            fprintf(stderr, "ERROR -> invalid tile part number on sensitivity method t = %d\n", tile);
+                            fprintf(stderr,
+                                    "ERROR -> invalid tile part number on sensitivity method t = %d\n", tile);
                             return 1;
                         }
                         if (tilespec < JPWL_MAX_NO_TILESPECS) {
@@ -1352,10 +1447,11 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
                             parameters->jpwl_sens_TPH[tilespec++] = sens;
                         }
 
-                    } else if(sscanf(token, "s%d", &tile) == 1) {
+                    } else if (sscanf(token, "s%d", &tile) == 1) {
                         /* Tile part header, unspecified */
                         if (tile < 0) {
-                            fprintf(stderr, "ERROR -> invalid tile part number on sensitivity method t = %d\n", tile);
+                            fprintf(stderr,
+                                    "ERROR -> invalid tile part number on sensitivity method t = %d\n", tile);
                             return 1;
                         }
                         if (tilespec < JPWL_MAX_NO_TILESPECS) {
@@ -1381,7 +1477,7 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
 
                     addr = 0; /* predefined: auto */
 
-                    if(sscanf(token, "a=%d", &addr) == 1) {
+                    if (sscanf(token, "a=%d", &addr) == 1) {
                         /* Specified */
                         if ((addr != 0) && (addr != 2) && (addr != 4)) {
                             fprintf(stderr, "ERROR -> invalid addressing size a = %d\n", addr);
@@ -1406,7 +1502,7 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
 
                     size = 1; /* predefined: 1 byte */
 
-                    if(sscanf(token, "z=%d", &size) == 1) {
+                    if (sscanf(token, "z=%d", &size) == 1) {
                         /* Specified */
                         if ((size != 0) && (size != 1) && (size != 2)) {
                             fprintf(stderr, "ERROR -> invalid sensitivity size z = %d\n", size);
@@ -1431,7 +1527,7 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
 
                     range = 0; /* predefined: 0 (packet) */
 
-                    if(sscanf(token, "g=%d", &range) == 1) {
+                    if (sscanf(token, "g=%d", &range) == 1) {
                         /* Specified */
                         if ((range < 0) || (range > 3)) {
                             fprintf(stderr, "ERROR -> invalid sensitivity range method g = %d\n", range);
@@ -1460,76 +1556,81 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
             parameters->jpwl_epc_on = OPJ_TRUE;
 
         }
-            break;
+        break;
 #endif /* USE_JPWL */
-            /* <<UniPG */
-            /* ------------------------------------------------------ */
+        /* <<UniPG */
+        /* ------------------------------------------------------ */
 
-        case 'J':                      /* jpip on */
-        {
+        case 'J': {         /* jpip on */
             parameters->jpip_on = OPJ_TRUE;
         }
-            break;
-            /* ------------------------------------------------------ */
+        break;
+        /* ------------------------------------------------------ */
 
 
         default:
             fprintf(stderr, "[WARNING] An invalid option has been ignored\n");
             break;
         }
-    }while(c != -1);
+    } while (c != -1);
 
-    if(img_fol->set_imgdir == 1){
-        if(!(parameters->infile[0] == 0)){
+    if (img_fol->set_imgdir == 1) {
+        if (!(parameters->infile[0] == 0)) {
             fprintf(stderr, "[ERROR] options -ImgDir and -i cannot be used together !!\n");
             return 1;
         }
-        if(img_fol->set_out_format == 0){
-            fprintf(stderr, "[ERROR] When -ImgDir is used, -OutFor <FORMAT> must be used !!\n");
+        if (img_fol->set_out_format == 0) {
+            fprintf(stderr,
+                    "[ERROR] When -ImgDir is used, -OutFor <FORMAT> must be used !!\n");
             fprintf(stderr, "Only one format allowed! Valid formats are j2k and jp2!!\n");
             return 1;
         }
-        if(!((parameters->outfile[0] == 0))){
+        if (!((parameters->outfile[0] == 0))) {
             fprintf(stderr, "[ERROR] options -ImgDir and -o cannot be used together !!\n");
             fprintf(stderr, "Specify OutputFormat using -OutFor<FORMAT> !!\n");
             return 1;
         }
-    }else{
-        if((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
+    } else {
+        if ((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
             fprintf(stderr, "[ERROR] Required parameters are missing\n"
-                            "Example: %s -i image.pgm -o image.j2k\n",argv[0]);
-            fprintf(stderr, "   Help: %s -h\n",argv[0]);
+                    "Example: %s -i image.pgm -o image.j2k\n", argv[0]);
+            fprintf(stderr, "   Help: %s -h\n", argv[0]);
             return 1;
         }
     }
 
-    if ( (parameters->decod_format == RAW_DFMT && raw_cp->rawWidth == 0)
-         || (parameters->decod_format == RAWL_DFMT && raw_cp->rawWidth == 0)) {
-        fprintf(stderr,"[ERROR] invalid raw image parameters\n");
-        fprintf(stderr,"Please use the Format option -F:\n");
-        fprintf(stderr,"-F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n");
-        fprintf(stderr,"Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n");
-        fprintf(stderr,"Aborting\n");
+    if ((parameters->decod_format == RAW_DFMT && raw_cp->rawWidth == 0)
+            || (parameters->decod_format == RAWL_DFMT && raw_cp->rawWidth == 0)) {
+        fprintf(stderr, "[ERROR] invalid raw image parameters\n");
+        fprintf(stderr, "Please use the Format option -F:\n");
+        fprintf(stderr,
+                "-F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n");
+        fprintf(stderr, "Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n");
+        fprintf(stderr, "Aborting\n");
         return 1;
     }
 
-    if ((parameters->cp_disto_alloc || parameters->cp_fixed_alloc || parameters->cp_fixed_quality)
-            && (!(parameters->cp_disto_alloc ^ parameters->cp_fixed_alloc ^ parameters->cp_fixed_quality))) {
+    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 */
+    }               /* 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_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)) {
+    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);
+                parameters->cp_tx0, parameters->image_offset_x0, parameters->cp_ty0,
+                parameters->image_offset_y0);
         return 1;
     }
 
@@ -1542,10 +1643,13 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
     }
 
     /* If subsampled image is provided, automatically disable MCT */
-    if ( ((parameters->decod_format == RAW_DFMT) || (parameters->decod_format == RAWL_DFMT))
-         && (   ((raw_cp->rawComp > 1 ) && ((raw_cp->rawComps[1].dx > 1) || (raw_cp->rawComps[1].dy > 1)))
-             || ((raw_cp->rawComp > 2 ) && ((raw_cp->rawComps[2].dx > 1) || (raw_cp->rawComps[2].dy > 1)))
-                                               )) {
+    if (((parameters->decod_format == RAW_DFMT) ||
+            (parameters->decod_format == RAWL_DFMT))
+            && (((raw_cp->rawComp > 1) && ((raw_cp->rawComps[1].dx > 1) ||
+                                           (raw_cp->rawComps[1].dy > 1)))
+                || ((raw_cp->rawComp > 2) && ((raw_cp->rawComps[2].dx > 1) ||
+                        (raw_cp->rawComps[2].dy > 1)))
+               )) {
         parameters->tcp_mct = 0;
     }
 
@@ -1558,46 +1662,51 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
 /**
 sample error debug callback expecting no client object
 */
-static void error_callback(const char *msg, void *client_data) {
+static void error_callback(const char *msg, void *client_data)
+{
     (void)client_data;
     fprintf(stdout, "[ERROR] %s", msg);
 }
 /**
 sample warning debug callback expecting no client object
 */
-static void warning_callback(const char *msg, void *client_data) {
+static void warning_callback(const char *msg, void *client_data)
+{
     (void)client_data;
     fprintf(stdout, "[WARNING] %s", msg);
 }
 /**
 sample debug callback expecting no client object
 */
-static void info_callback(const char *msg, void *client_data) {
+static void info_callback(const char *msg, void *client_data)
+{
     (void)client_data;
     fprintf(stdout, "[INFO] %s", msg);
 }
 
-OPJ_FLOAT64 opj_clock(void) {
+OPJ_FLOAT64 opj_clock(void)
+{
 #ifdef _WIN32
-       /* _WIN32: use QueryPerformance (very accurate) */
-    LARGE_INTEGER freq , t ;
+    /* _WIN32: use QueryPerformance (very accurate) */
+    LARGE_INTEGER freq, t ;
     /* freq is the clock speed of the CPU */
     QueryPerformanceFrequency(&freq) ;
-       /* cout << "freq = " << ((double) freq.QuadPart) << endl; */
+    /* cout << "freq = " << ((double) freq.QuadPart) << endl; */
     /* t is the high resolution performance counter (see MSDN) */
-    QueryPerformanceCounter ( & t ) ;
-    return freq.QuadPart ? ( t.QuadPart /(OPJ_FLOAT64) freq.QuadPart ) : 0 ;
+    QueryPerformanceCounter(& t) ;
+    return freq.QuadPart ? (t.QuadPart / (OPJ_FLOAT64) freq.QuadPart) : 0 ;
 #else
-       /* Unix or Linux: use resource usage */
+    /* Unix or Linux: use resource usage */
     struct rusage t;
     OPJ_FLOAT64 procTime;
     /* (1) Get the rusage data structure at this moment (man getrusage) */
-    getrusage(0,&t);
+    getrusage(0, &t);
     /* (2) What is the elapsed time ? - CPU time = User time + System time */
-       /* (2a) Get the seconds */
+    /* (2a) Get the seconds */
     procTime = (OPJ_FLOAT64)(t.ru_utime.tv_sec + t.ru_stime.tv_sec);
     /* (2b) More precisely! Get the microseconds part ! */
-    return ( procTime + (OPJ_FLOAT64)(t.ru_utime.tv_usec + t.ru_stime.tv_usec) * 1e-6 ) ;
+    return (procTime + (OPJ_FLOAT64)(t.ru_utime.tv_usec + t.ru_stime.tv_usec) *
+            1e-6) ;
 #endif
 }
 
@@ -1607,9 +1716,10 @@ OPJ_FLOAT64 opj_clock(void) {
  * OPJ_COMPRESS MAIN
  */
 /* -------------------------------------------------------------------------- */
-int main(int argc, char **argv) {
+int main(int argc, char **argv)
+{
 
-    opj_cparameters_t parameters;      /* compression parameters */
+    opj_cparameters_t parameters;   /* compression parameters */
 
     opj_stream_t *l_stream = 00;
     opj_codec_t* l_codec = 00;
@@ -1617,7 +1727,7 @@ int main(int argc, char **argv) {
     raw_cparameters_t raw_cp;
     OPJ_SIZE_T num_compressed_files = 0;
 
-    char indexfilename[OPJ_PATH_LEN];  /* index file name */
+    char indexfilename[OPJ_PATH_LEN];   /* index file name */
 
     unsigned int i, num_images, imageno;
     img_fol_t img_fol;
@@ -1633,7 +1743,7 @@ int main(int argc, char **argv) {
 
     /* Initialize indexfilename and img_fol */
     *indexfilename = 0;
-    memset(&img_fol,0,sizeof(img_fol_t));
+    memset(&img_fol, 0, sizeof(img_fol_t));
 
     /* raw_cp initialization */
     raw_cp.rawBitDepth = 0;
@@ -1644,48 +1754,51 @@ int main(int argc, char **argv) {
     raw_cp.rawWidth = 0;
 
     /* parse input and get user encoding parameters */
-    parameters.tcp_mct = (char) 255; /* This will be set later according to the input image or the provided option */
-    if(parse_cmdline_encoder(argc, argv, &parameters,&img_fol, &raw_cp, indexfilename, sizeof(indexfilename)) == 1) {
+    parameters.tcp_mct = (char)
+                         255; /* This will be set later according to the input image or the provided option */
+    if (parse_cmdline_encoder(argc, argv, &parameters, &img_fol, &raw_cp,
+                              indexfilename, sizeof(indexfilename)) == 1) {
         goto fails;
     }
 
     /* Read directory if necessary */
-    if(img_fol.set_imgdir==1){
-        num_images=get_num_images(img_fol.imgdirpath);
-        dirptr=(dircnt_t*)malloc(sizeof(dircnt_t));
-        if(dirptr){
-            dirptr->filename_buf = (char*)malloc(num_images*OPJ_PATH_LEN*sizeof(char));        /* Stores at max 10 image file names*/
-            dirptr->filename = (char**) malloc(num_images*sizeof(char*));
-            if(!dirptr->filename_buf){
+    if (img_fol.set_imgdir == 1) {
+        num_images = get_num_images(img_fol.imgdirpath);
+        dirptr = (dircnt_t*)malloc(sizeof(dircnt_t));
+        if (dirptr) {
+            dirptr->filename_buf = (char*)malloc(num_images * OPJ_PATH_LEN * sizeof(
+                    char)); /* Stores at max 10 image file names*/
+            dirptr->filename = (char**) malloc(num_images * sizeof(char*));
+            if (!dirptr->filename_buf) {
                 return 0;
             }
-            for(i=0;i<num_images;i++){
-                dirptr->filename[i] = dirptr->filename_buf + i*OPJ_PATH_LEN;
+            for (i = 0; i < num_images; i++) {
+                dirptr->filename[i] = dirptr->filename_buf + i * OPJ_PATH_LEN;
             }
         }
-        if(load_images(dirptr,img_fol.imgdirpath)==1){
+        if (load_images(dirptr, img_fol.imgdirpath) == 1) {
             return 0;
         }
-        if (num_images==0){
-            fprintf(stdout,"Folder is empty\n");
+        if (num_images == 0) {
+            fprintf(stdout, "Folder is empty\n");
             return 0;
         }
-    }else{
-        num_images=1;
+    } else {
+        num_images = 1;
     }
     /*Encoding image one by one*/
-    for(imageno=0;imageno<num_images;imageno++)        {
+    for (imageno = 0; imageno < num_images; imageno++) {
         image = NULL;
-        fprintf(stderr,"\n");
+        fprintf(stderr, "\n");
 
-        if(img_fol.set_imgdir==1){
-            if (get_next_file((int)imageno, dirptr,&img_fol, &parameters)) {
-                fprintf(stderr,"skipping file...\n");
+        if (img_fol.set_imgdir == 1) {
+            if (get_next_file((int)imageno, dirptr, &img_fol, &parameters)) {
+                fprintf(stderr, "skipping file...\n");
                 continue;
             }
         }
 
-        switch(parameters.decod_format) {
+        switch (parameters.decod_format) {
         case PGX_DFMT:
             break;
         case PXM_DFMT:
@@ -1702,7 +1815,7 @@ int main(int argc, char **argv) {
         case PNG_DFMT:
             break;
         default:
-            fprintf(stderr,"skipping file...\n");
+            fprintf(stderr, "skipping file...\n");
             continue;
         }
 
@@ -1780,23 +1893,24 @@ int main(int argc, char **argv) {
         }
 
         /* Can happen if input file is TIFF or PNG
- * and OPJ_HAVE_LIBTIF or OPJ_HAVE_LIBPNG is undefined
-*/
-        if!image) {
       * and OPJ_HAVE_LIBTIF or OPJ_HAVE_LIBPNG is undefined
+        */
+        if (!image) {
             fprintf(stderr, "Unable to load file: got no image\n");
             return 1;
         }
 
         /* Decide if MCT should be used */
-        if (parameters.tcp_mct == (char) 255) { /* mct mode has not been set in commandline */
+        if (parameters.tcp_mct == (char)
+                255) { /* mct mode has not been set in commandline */
             parameters.tcp_mct = (image->numcomps >= 3) ? 1 : 0;
         } else {            /* mct mode has been set in commandline */
-            if ((parameters.tcp_mct == 1) && (image->numcomps < 3)){
+            if ((parameters.tcp_mct == 1) && (image->numcomps < 3)) {
                 fprintf(stderr, "RGB->YCC conversion cannot be used:\n");
                 fprintf(stderr, "Input image has less than 3 components\n");
                 return 1;
             }
-            if ((parameters.tcp_mct == 2) && (!parameters.mct_data)){
+            if ((parameters.tcp_mct == 2) && (!parameters.mct_data)) {
                 fprintf(stderr, "Custom MCT has been set but no array-based MCT\n");
                 fprintf(stderr, "has been provided. Aborting.\n");
                 return 1;
@@ -1806,15 +1920,13 @@ int main(int argc, char **argv) {
         /* encode the destination image */
         /* ---------------------------- */
 
-        switch(parameters.cod_format) {
-        case J2K_CFMT: /* JPEG-2000 codestream */
-        {
+        switch (parameters.cod_format) {
+        case J2K_CFMT: { /* JPEG-2000 codestream */
             /* Get a decoder handle */
             l_codec = opj_create_compress(OPJ_CODEC_J2K);
             break;
         }
-        case JP2_CFMT: /* JPEG 2000 compressed image data */
-        {
+        case JP2_CFMT: { /* JPEG 2000 compressed image data */
             /* Get a decoder handle */
             l_codec = opj_create_compress(OPJ_CODEC_JP2);
             break;
@@ -1826,11 +1938,11 @@ int main(int argc, char **argv) {
         }
 
         /* catch events using our callbacks and give a local context */
-        opj_set_info_handler(l_codec, info_callback,00);
-        opj_set_warning_handler(l_codec, warning_callback,00);
-        opj_set_error_handler(l_codec, error_callback,00);
+        opj_set_info_handler(l_codec, info_callback, 00);
+        opj_set_warning_handler(l_codec, warning_callback, 00);
+        opj_set_error_handler(l_codec, error_callback, 00);
 
-        if( bUseTiles ) {
+        if (bUseTiles) {
             parameters.cp_tx0 = 0;
             parameters.cp_ty0 = 0;
             parameters.tile_size_on = OPJ_TRUE;
@@ -1845,26 +1957,27 @@ int main(int argc, char **argv) {
         }
 
         /* open a byte stream for writing and allocate memory for all tiles */
-        l_stream = opj_stream_create_default_file_stream(parameters.outfile,OPJ_FALSE);
-        if (! l_stream){
+        l_stream = opj_stream_create_default_file_stream(parameters.outfile, OPJ_FALSE);
+        if (! l_stream) {
             return 1;
         }
 
         /* encode the image */
-        bSuccess = opj_start_compress(l_codec,image,l_stream);
+        bSuccess = opj_start_compress(l_codec, image, l_stream);
         if (!bSuccess)  {
             fprintf(stderr, "failed to encode image: opj_start_compress\n");
         }
-        if( bSuccess && bUseTiles ) {
+        if (bSuccess && bUseTiles) {
             OPJ_BYTE *l_data;
-            OPJ_UINT32 l_data_size = 512*512*3;
-            l_data = (OPJ_BYTE*) calloc( 1,l_data_size);
-            if(l_data == NULL){
-                               goto fails;
-                       }
-            for (i=0;i<l_nb_tiles;++i) {
-                if (! opj_write_tile(l_codec,i,l_data,l_data_size,l_stream)) {
-                    fprintf(stderr, "ERROR -> test_tile_encoder: failed to write the tile %d!\n",i);
+            OPJ_UINT32 l_data_size = 512 * 512 * 3;
+            l_data = (OPJ_BYTE*) calloc(1, l_data_size);
+            if (l_data == NULL) {
+                goto fails;
+            }
+            for (i = 0; i < l_nb_tiles; ++i) {
+                if (! opj_write_tile(l_codec, i, l_data, l_data_size, l_stream)) {
+                    fprintf(stderr, "ERROR -> test_tile_encoder: failed to write the tile %d!\n",
+                            i);
                     opj_stream_destroy(l_stream);
                     opj_destroy_codec(l_codec);
                     opj_image_destroy(image);
@@ -1872,8 +1985,7 @@ int main(int argc, char **argv) {
                 }
             }
             free(l_data);
-        }
-        else {
+        } else {
             bSuccess = bSuccess && opj_encode(l_codec, l_stream);
             if (!bSuccess)  {
                 fprintf(stderr, "failed to encode image: opj_encode\n");
@@ -1889,12 +2001,12 @@ int main(int argc, char **argv) {
             opj_destroy_codec(l_codec);
             opj_image_destroy(image);
             fprintf(stderr, "failed to encode image\n");
-                       remove(parameters.outfile);
+            remove(parameters.outfile);
             return 1;
         }
 
-               num_compressed_files++;
-        fprintf(stdout,"[INFO] Generated outfile %s\n",parameters.outfile);
+        num_compressed_files++;
+        fprintf(stdout, "[INFO] Generated outfile %s\n", parameters.outfile);
         /* close and free the byte stream */
         opj_stream_destroy(l_stream);
 
@@ -1907,26 +2019,45 @@ int main(int argc, char **argv) {
     }
 
     /* free user parameters structure */
-    if(parameters.cp_comment)   free(parameters.cp_comment);
-    if(parameters.cp_matrice)   free(parameters.cp_matrice);
-    if(raw_cp.rawComps) free(raw_cp.rawComps);
-       
+    if (parameters.cp_comment) {
+        free(parameters.cp_comment);
+    }
+    if (parameters.cp_matrice) {
+        free(parameters.cp_matrice);
+    }
+    if (raw_cp.rawComps) {
+        free(raw_cp.rawComps);
+    }
+
     t = opj_clock() - t;
     if (num_compressed_files) {
-                   fprintf(stdout, "encode time: %d ms \n", (int)((t * 1000.0)/(OPJ_FLOAT64)num_compressed_files));
+        fprintf(stdout, "encode time: %d ms \n",
+                (int)((t * 1000.0) / (OPJ_FLOAT64)num_compressed_files));
     }
 
     return 0;
 
 fails:
-       if(parameters.cp_comment)   free(parameters.cp_comment);
-       if(parameters.cp_matrice)   free(parameters.cp_matrice);
-       if(raw_cp.rawComps) free(raw_cp.rawComps);
-       if(img_fol.imgdirpath) free(img_fol.imgdirpath);
-       if(dirptr){
-           if(dirptr->filename_buf) free(dirptr->filename_buf);
-           if(dirptr->filename) free(dirptr->filename);
-           free(dirptr);
-       }
-       return 1;
+    if (parameters.cp_comment) {
+        free(parameters.cp_comment);
+    }
+    if (parameters.cp_matrice) {
+        free(parameters.cp_matrice);
+    }
+    if (raw_cp.rawComps) {
+        free(raw_cp.rawComps);
+    }
+    if (img_fol.imgdirpath) {
+        free(img_fol.imgdirpath);
+    }
+    if (dirptr) {
+        if (dirptr->filename_buf) {
+            free(dirptr->filename_buf);
+        }
+        if (dirptr->filename) {
+            free(dirptr->filename);
+        }
+        free(dirptr);
+    }
+    return 1;
 }
index 83160c3d18e19d0383cc32c22236491e0c635777..397e637080d48e2683cd808afc62363d308a8051 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,11 +8,11 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * Copyright (c) 2006-2007, Parvatha Elangovan
- * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR 
+ * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR
  * Copyright (c) 2012, CS Systemes d'Information, France
  * All rights reserved.
  *
 #include "format_defs.h"
 #include "opj_string.h"
 
-typedef struct dircnt{
-       /** Buffer for holding images read from Directory*/
-       char *filename_buf;
-       /** Pointer to the buffer*/
-       char **filename;
-}dircnt_t;
-
-
-typedef struct img_folder{
-       /** The directory path of the folder containing input images*/
-       char *imgdirpath;
-       /** Output format*/
-       const char *out_format;
-       /** Enable option*/
-       char set_imgdir;
-       /** Enable Cod Format for output*/
-       char set_out_format;
-
-}img_fol_t;
-
-typedef enum opj_prec_mode
-{
-       OPJ_PREC_MODE_CLIP,
-       OPJ_PREC_MODE_SCALE
+typedef struct dircnt {
+    /** Buffer for holding images read from Directory*/
+    char *filename_buf;
+    /** Pointer to the buffer*/
+    char **filename;
+} dircnt_t;
+
+
+typedef struct img_folder {
+    /** The directory path of the folder containing input images*/
+    char *imgdirpath;
+    /** Output format*/
+    const char *out_format;
+    /** Enable option*/
+    char set_imgdir;
+    /** Enable Cod Format for output*/
+    char set_out_format;
+
+} img_fol_t;
+
+typedef enum opj_prec_mode {
+    OPJ_PREC_MODE_CLIP,
+    OPJ_PREC_MODE_SCALE
 } opj_precision_mode;
 
-typedef struct opj_prec
-{
-       OPJ_UINT32         prec;
-       opj_precision_mode mode;
-}opj_precision;
-
-typedef struct opj_decompress_params
-{
-       /** core library parameters */
-       opj_dparameters_t core;
-       
-       /** input file name */
-       char infile[OPJ_PATH_LEN];
-       /** output file name */
-       char outfile[OPJ_PATH_LEN];
-       /** input file format 0: J2K, 1: JP2, 2: JPT */
-       int decod_format;
-       /** output file format 0: PGX, 1: PxM, 2: BMP */
-       int cod_format;
-       /** index file name */
-       char indexfilename[OPJ_PATH_LEN];
-       
-       /** Decoding area left boundary */
-       OPJ_UINT32 DA_x0;
-       /** Decoding area right boundary */
-       OPJ_UINT32 DA_x1;
-       /** Decoding area up boundary */
-       OPJ_UINT32 DA_y0;
-       /** Decoding area bottom boundary */
-       OPJ_UINT32 DA_y1;
-       /** Verbose mode */
-       OPJ_BOOL m_verbose;
-       
-       /** tile number ot the decoded tile*/
-       OPJ_UINT32 tile_index;
-       /** Nb of tile to decode */
-       OPJ_UINT32 nb_tile_to_decode;
-       
-       opj_precision* precision;
-       OPJ_UINT32     nb_precision;
-       
-       /* force output colorspace to RGB */
-       int force_rgb;
-       /* upsample components according to their dx/dy values */
-       int upsample;
-       /* split output components to different files */
-       int split_pnm;
+typedef struct opj_prec {
+    OPJ_UINT32         prec;
+    opj_precision_mode mode;
+} opj_precision;
+
+typedef struct opj_decompress_params {
+    /** core library parameters */
+    opj_dparameters_t core;
+
+    /** input file name */
+    char infile[OPJ_PATH_LEN];
+    /** output file name */
+    char outfile[OPJ_PATH_LEN];
+    /** input file format 0: J2K, 1: JP2, 2: JPT */
+    int decod_format;
+    /** output file format 0: PGX, 1: PxM, 2: BMP */
+    int cod_format;
+    /** index file name */
+    char indexfilename[OPJ_PATH_LEN];
+
+    /** Decoding area left boundary */
+    OPJ_UINT32 DA_x0;
+    /** Decoding area right boundary */
+    OPJ_UINT32 DA_x1;
+    /** Decoding area up boundary */
+    OPJ_UINT32 DA_y0;
+    /** Decoding area bottom boundary */
+    OPJ_UINT32 DA_y1;
+    /** Verbose mode */
+    OPJ_BOOL m_verbose;
+
+    /** tile number ot the decoded tile*/
+    OPJ_UINT32 tile_index;
+    /** Nb of tile to decode */
+    OPJ_UINT32 nb_tile_to_decode;
+
+    opj_precision* precision;
+    OPJ_UINT32     nb_precision;
+
+    /* force output colorspace to RGB */
+    int force_rgb;
+    /* upsample components according to their dx/dy values */
+    int upsample;
+    /* split output components to different files */
+    int split_pnm;
     /** number of threads */
     int num_threads;
-}opj_decompress_parameters;
+} opj_decompress_parameters;
 
 /* -------------------------------------------------------------------------- */
 /* Declarations                                                               */
 int get_num_images(char *imgdirpath);
 int load_images(dircnt_t *dirptr, char *imgdirpath);
 int get_file_format(const char *filename);
-char get_next_file(int imageno,dircnt_t *dirptr,img_fol_t *img_fol, opj_decompress_parameters *parameters);
+char get_next_file(int imageno, dircnt_t *dirptr, img_fol_t *img_fol,
+                   opj_decompress_parameters *parameters);
 static int infile_format(const char *fname);
 
-int parse_cmdline_decoder(int argc, char **argv, opj_decompress_parameters *parameters,img_fol_t *img_fol);
-int parse_DA_values( char* inArg, unsigned int *DA_x0, unsigned int *DA_y0, unsigned int *DA_x1, unsigned int *DA_y1);
+int parse_cmdline_decoder(int argc, char **argv,
+                          opj_decompress_parameters *parameters, img_fol_t *img_fol);
+int parse_DA_values(char* inArg, unsigned int *DA_x0, unsigned int *DA_y0,
+                    unsigned int *DA_x1, unsigned int *DA_y1);
 
 static opj_image_t* convert_gray_to_rgb(opj_image_t* original);
 
 /* -------------------------------------------------------------------------- */
-static void decode_help_display(void) {
-       fprintf(stdout,"\nThis is the opj_decompress utility from the OpenJPEG project.\n"
-                      "It decompresses JPEG 2000 codestreams to various image formats.\n"
-                      "It has been compiled against openjp2 library v%s.\n\n",opj_version());
-
-       fprintf(stdout,"Parameters:\n"
-                      "-----------\n"
-                      "\n"
-                      "  -ImgDir <directory> \n"
-                      "        Image file Directory path \n"
-                      "  -OutFor <PBM|PGM|PPM|PNM|PAM|PGX|PNG|BMP|TIF|RAW|RAWL|TGA>\n"
-                      "    REQUIRED only if -ImgDir is used\n"
-                      "        Output format for decompressed images.\n");
-       fprintf(stdout,"  -i <compressed file>\n"
-                      "    REQUIRED only if an Input image directory is not specified\n"
-                      "    Currently accepts J2K-files, JP2-files and JPT-files. The file type\n"
-                      "    is identified based on its suffix.\n");
-       fprintf(stdout,"  -o <decompressed file>\n"
-                      "    REQUIRED\n"
-                      "    Currently accepts formats specified above (see OutFor option)\n"
-                      "    Binary data is written to the file (not ascii). If a PGX\n"
-                      "    filename is given, there will be as many output files as there are\n"
-                      "    components: an indice starting from 0 will then be appended to the\n"
-                      "    output filename, just before the \"pgx\" extension. If a PGM filename\n"
-                      "    is given and there are more than one component, only the first component\n"
-                      "    will be written to the file.\n");
-       fprintf(stdout,"  -r <reduce factor>\n"
-                      "    Set the number of highest resolution levels to be discarded. The\n"
-                      "    image resolution is effectively divided by 2 to the power of the\n"
-                      "    number of discarded levels. The reduce factor is limited by the\n"
-                      "    smallest total number of decomposition levels among tiles.\n"
-                      "  -l <number of quality layers to decode>\n"
-                      "    Set the maximum number of quality layers to decode. If there are\n"
-                      "    less quality layers than the specified number, all the quality layers\n"
-                      "    are decoded.\n");
-       fprintf(stdout,"  -x  \n"
-                      "    Create an index file *.Idx (-x index_name.Idx) \n"
-                      "  -d <x0,y0,x1,y1>\n"
-                      "    OPTIONAL\n"
-                      "    Decoding area\n"
-                      "    By default all the image is decoded.\n"
-                      "  -t <tile_number>\n"
-                      "    OPTIONAL\n"
-                      "    Set the tile number of the decoded tile. Follow the JPEG2000 convention from left-up to bottom-up\n"
-                      "    By default all tiles are decoded.\n");
-       fprintf(stdout,"  -p <comp 0 precision>[C|S][,<comp 1 precision>[C|S][,...]]\n"
-                      "    OPTIONAL\n"
-                      "    Force the precision (bit depth) of components.\n");
-       fprintf(stdout,"    There shall be at least 1 value. Theres no limit on the number of values (comma separated, last values ignored if too much values).\n"
-                      "    If there are less values than components, the last value is used for remaining components.\n"
-                      "    If 'C' is specified (default), values are clipped.\n"
-                      "    If 'S' is specified, values are scaled.\n"
-                      "    A 0 value can be specified (meaning original bit depth).\n");
-       fprintf(stdout,"  -force-rgb\n"
-                      "    Force output image colorspace to RGB\n"
-                      "  -upsample\n"
-                      "    Downsampled components will be upsampled to image size\n"
-                      "  -split-pnm\n"
-                      "    Split output components to different files when writing to PNM\n");
-       if( opj_has_thread_support() ) {
-         fprintf(stdout,"  -threads <num_threads>\n"
-                                       "    Number of threads to use for decoding.\n");
-       }
-/* UniPG>> */
+static void decode_help_display(void)
+{
+    fprintf(stdout,
+            "\nThis is the opj_decompress utility from the OpenJPEG project.\n"
+            "It decompresses JPEG 2000 codestreams to various image formats.\n"
+            "It has been compiled against openjp2 library v%s.\n\n", opj_version());
+
+    fprintf(stdout, "Parameters:\n"
+            "-----------\n"
+            "\n"
+            "  -ImgDir <directory> \n"
+            "  Image file Directory path \n"
+            "  -OutFor <PBM|PGM|PPM|PNM|PAM|PGX|PNG|BMP|TIF|RAW|RAWL|TGA>\n"
+            "    REQUIRED only if -ImgDir is used\n"
+            "  Output format for decompressed images.\n");
+    fprintf(stdout, "  -i <compressed file>\n"
+            "    REQUIRED only if an Input image directory is not specified\n"
+            "    Currently accepts J2K-files, JP2-files and JPT-files. The file type\n"
+            "    is identified based on its suffix.\n");
+    fprintf(stdout, "  -o <decompressed file>\n"
+            "    REQUIRED\n"
+            "    Currently accepts formats specified above (see OutFor option)\n"
+            "    Binary data is written to the file (not ascii). If a PGX\n"
+            "    filename is given, there will be as many output files as there are\n"
+            "    components: an indice starting from 0 will then be appended to the\n"
+            "    output filename, just before the \"pgx\" extension. If a PGM filename\n"
+            "    is given and there are more than one component, only the first component\n"
+            "    will be written to the file.\n");
+    fprintf(stdout, "  -r <reduce factor>\n"
+            "    Set the number of highest resolution levels to be discarded. The\n"
+            "    image resolution is effectively divided by 2 to the power of the\n"
+            "    number of discarded levels. The reduce factor is limited by the\n"
+            "    smallest total number of decomposition levels among tiles.\n"
+            "  -l <number of quality layers to decode>\n"
+            "    Set the maximum number of quality layers to decode. If there are\n"
+            "    less quality layers than the specified number, all the quality layers\n"
+            "    are decoded.\n");
+    fprintf(stdout, "  -x  \n"
+            "    Create an index file *.Idx (-x index_name.Idx) \n"
+            "  -d <x0,y0,x1,y1>\n"
+            "    OPTIONAL\n"
+            "    Decoding area\n"
+            "    By default all the image is decoded.\n"
+            "  -t <tile_number>\n"
+            "    OPTIONAL\n"
+            "    Set the tile number of the decoded tile. Follow the JPEG2000 convention from left-up to bottom-up\n"
+            "    By default all tiles are decoded.\n");
+    fprintf(stdout, "  -p <comp 0 precision>[C|S][,<comp 1 precision>[C|S][,...]]\n"
+            "    OPTIONAL\n"
+            "    Force the precision (bit depth) of components.\n");
+    fprintf(stdout,
+            "    There shall be at least 1 value. Theres no limit on the number of values (comma separated, last values ignored if too much values).\n"
+            "    If there are less values than components, the last value is used for remaining components.\n"
+            "    If 'C' is specified (default), values are clipped.\n"
+            "    If 'S' is specified, values are scaled.\n"
+            "    A 0 value can be specified (meaning original bit depth).\n");
+    fprintf(stdout, "  -force-rgb\n"
+            "    Force output image colorspace to RGB\n"
+            "  -upsample\n"
+            "    Downsampled components will be upsampled to image size\n"
+            "  -split-pnm\n"
+            "    Split output components to different files when writing to PNM\n");
+    if (opj_has_thread_support()) {
+        fprintf(stdout, "  -threads <num_threads>\n"
+                "    Number of threads to use for decoding.\n");
+    }
+    /* UniPG>> */
 #ifdef USE_JPWL
-       fprintf(stdout,"  -W <options>\n"
-                      "    Activates the JPWL correction capability, if the codestream complies.\n"
-                      "    Options can be a comma separated list of <param=val> tokens:\n"
-                      "    c, c=numcomps\n"
-                      "       numcomps is the number of expected components in the codestream\n"
-                      "       (search of first EPB rely upon this, default is %d)\n", JPWL_EXPECTED_COMPONENTS);
+    fprintf(stdout, "  -W <options>\n"
+            "    Activates the JPWL correction capability, if the codestream complies.\n"
+            "    Options can be a comma separated list of <param=val> tokens:\n"
+            "    c, c=numcomps\n"
+            "       numcomps is the number of expected components in the codestream\n"
+            "       (search of first EPB rely upon this, default is %d)\n",
+            JPWL_EXPECTED_COMPONENTS);
 #endif /* USE_JPWL */
-/* <<UniPG */
-       fprintf(stdout,"\n");
+    /* <<UniPG */
+    fprintf(stdout, "\n");
 }
 
 /* -------------------------------------------------------------------------- */
 
-static OPJ_BOOL parse_precision(const char* option, opj_decompress_parameters* parameters)
+static OPJ_BOOL parse_precision(const char* option,
+                                opj_decompress_parameters* parameters)
 {
-       const char* l_remaining = option;
-       OPJ_BOOL l_result = OPJ_TRUE;
-       
-       /* reset */
-       if (parameters->precision) {
-               free(parameters->precision);
-               parameters->precision = NULL;
-       }
-       parameters->nb_precision = 0U;
-       
-       for(;;)
-       {
-               int prec;
-               char mode;
-               char comma;
-               int count;
-               
-               count = sscanf(l_remaining, "%d%c%c", &prec, &mode, &comma);
-               if (count == 1) {
-                       mode = 'C';
-                       count++;
-               }
-               if ((count == 2) || (mode==',')) {
-                       if (mode==',') {
-                               mode = 'C';
-                       }
-                       comma=',';
-                       count = 3;
-               }
-               if (count == 3) {
-                       if ((prec < 1) || (prec > 32)) {
-                               fprintf(stderr,"Invalid precision %d in precision option %s\n", prec, option);
-                               l_result = OPJ_FALSE;
-                               break;
-                       }
-                       if ((mode != 'C') && (mode != 'S')) {
-                               fprintf(stderr,"Invalid precision mode %c in precision option %s\n", mode, option);
-                               l_result = OPJ_FALSE;
-                               break;
-                       }
-                       if (comma != ',') {
-                               fprintf(stderr,"Invalid character %c in precision option %s\n", comma, option);
-                               l_result = OPJ_FALSE;
-                               break;
-                       }
-                       
-                       if (parameters->precision == NULL) {
-                               /* first one */
-                               parameters->precision = (opj_precision *)malloc(sizeof(opj_precision));
-                               if (parameters->precision == NULL) {
-                                       fprintf(stderr,"Could not allocate memory for precision option\n");
-                                       l_result = OPJ_FALSE;
-                                       break;
-                               }
-                       } else {
-                               OPJ_UINT32 l_new_size = parameters->nb_precision + 1U;
-                               opj_precision* l_new;
-                               
-                               if (l_new_size == 0U) {
-                                       fprintf(stderr,"Could not allocate memory for precision option\n");
-                                       l_result = OPJ_FALSE;
-                                       break;
-                               }
-                               
-                               l_new = (opj_precision *)realloc(parameters->precision, l_new_size * sizeof(opj_precision));
-                               if (l_new == NULL) {
-                                       fprintf(stderr,"Could not allocate memory for precision option\n");
-                                       l_result = OPJ_FALSE;
-                                       break;
-                               }
-                               parameters->precision = l_new;
-                       }
-                       
-                       parameters->precision[parameters->nb_precision].prec = (OPJ_UINT32)prec;
-                       switch (mode) {
-                               case 'C':
-                                       parameters->precision[parameters->nb_precision].mode = OPJ_PREC_MODE_CLIP;
-                                       break;
-                               case 'S':
-                                       parameters->precision[parameters->nb_precision].mode = OPJ_PREC_MODE_SCALE;
-                                       break;
-                               default:
-                                       break;
-                       }
-                       parameters->nb_precision++;
-                       
-                       l_remaining = strchr(l_remaining, ',');
-                       if (l_remaining == NULL) {
-                               break;
-                       }
-                       l_remaining += 1;
-               } else {
-                       fprintf(stderr,"Could not parse precision option %s\n", option);
-                       l_result = OPJ_FALSE;
-                       break;
-               }
-       }
-       
-       return l_result;
+    const char* l_remaining = option;
+    OPJ_BOOL l_result = OPJ_TRUE;
+
+    /* reset */
+    if (parameters->precision) {
+        free(parameters->precision);
+        parameters->precision = NULL;
+    }
+    parameters->nb_precision = 0U;
+
+    for (;;) {
+        int prec;
+        char mode;
+        char comma;
+        int count;
+
+        count = sscanf(l_remaining, "%d%c%c", &prec, &mode, &comma);
+        if (count == 1) {
+            mode = 'C';
+            count++;
+        }
+        if ((count == 2) || (mode == ',')) {
+            if (mode == ',') {
+                mode = 'C';
+            }
+            comma = ',';
+            count = 3;
+        }
+        if (count == 3) {
+            if ((prec < 1) || (prec > 32)) {
+                fprintf(stderr, "Invalid precision %d in precision option %s\n", prec, option);
+                l_result = OPJ_FALSE;
+                break;
+            }
+            if ((mode != 'C') && (mode != 'S')) {
+                fprintf(stderr, "Invalid precision mode %c in precision option %s\n", mode,
+                        option);
+                l_result = OPJ_FALSE;
+                break;
+            }
+            if (comma != ',') {
+                fprintf(stderr, "Invalid character %c in precision option %s\n", comma, option);
+                l_result = OPJ_FALSE;
+                break;
+            }
+
+            if (parameters->precision == NULL) {
+                /* first one */
+                parameters->precision = (opj_precision *)malloc(sizeof(opj_precision));
+                if (parameters->precision == NULL) {
+                    fprintf(stderr, "Could not allocate memory for precision option\n");
+                    l_result = OPJ_FALSE;
+                    break;
+                }
+            } else {
+                OPJ_UINT32 l_new_size = parameters->nb_precision + 1U;
+                opj_precision* l_new;
+
+                if (l_new_size == 0U) {
+                    fprintf(stderr, "Could not allocate memory for precision option\n");
+                    l_result = OPJ_FALSE;
+                    break;
+                }
+
+                l_new = (opj_precision *)realloc(parameters->precision,
+                                                 l_new_size * sizeof(opj_precision));
+                if (l_new == NULL) {
+                    fprintf(stderr, "Could not allocate memory for precision option\n");
+                    l_result = OPJ_FALSE;
+                    break;
+                }
+                parameters->precision = l_new;
+            }
+
+            parameters->precision[parameters->nb_precision].prec = (OPJ_UINT32)prec;
+            switch (mode) {
+            case 'C':
+                parameters->precision[parameters->nb_precision].mode = OPJ_PREC_MODE_CLIP;
+                break;
+            case 'S':
+                parameters->precision[parameters->nb_precision].mode = OPJ_PREC_MODE_SCALE;
+                break;
+            default:
+                break;
+            }
+            parameters->nb_precision++;
+
+            l_remaining = strchr(l_remaining, ',');
+            if (l_remaining == NULL) {
+                break;
+            }
+            l_remaining += 1;
+        } else {
+            fprintf(stderr, "Could not parse precision option %s\n", option);
+            l_result = OPJ_FALSE;
+            break;
+        }
+    }
+
+    return l_result;
 }
 
 /* -------------------------------------------------------------------------- */
 
-int get_num_images(char *imgdirpath){
-       DIR *dir;
-       struct dirent* content; 
-       int num_images = 0;
-
-       /*Reading the input images from given input directory*/
-
-       dir= opendir(imgdirpath);
-       if(!dir){
-               fprintf(stderr,"Could not open Folder %s\n",imgdirpath);
-               return 0;
-       }
-       
-       while((content=readdir(dir))!=NULL){
-               if(strcmp(".",content->d_name)==0 || strcmp("..",content->d_name)==0 )
-                       continue;
-               num_images++;
-       }
-       closedir(dir);
-       return num_images;
+int get_num_images(char *imgdirpath)
+{
+    DIR *dir;
+    struct dirent* content;
+    int num_images = 0;
+
+    /*Reading the input images from given input directory*/
+
+    dir = opendir(imgdirpath);
+    if (!dir) {
+        fprintf(stderr, "Could not open Folder %s\n", imgdirpath);
+        return 0;
+    }
+
+    while ((content = readdir(dir)) != NULL) {
+        if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) {
+            continue;
+        }
+        num_images++;
+    }
+    closedir(dir);
+    return num_images;
 }
 
 /* -------------------------------------------------------------------------- */
-int load_images(dircnt_t *dirptr, char *imgdirpath){
-       DIR *dir;
-       struct dirent* content; 
-       int i = 0;
-
-       /*Reading the input images from given input directory*/
-
-       dir= opendir(imgdirpath);
-       if(!dir){
-               fprintf(stderr,"Could not open Folder %s\n",imgdirpath);
-               return 1;
-       }else   {
-               fprintf(stderr,"Folder opened successfully\n");
-       }
-       
-       while((content=readdir(dir))!=NULL){
-               if(strcmp(".",content->d_name)==0 || strcmp("..",content->d_name)==0 )
-                       continue;
-
-               strcpy(dirptr->filename[i],content->d_name);
-               i++;
-       }
-       closedir(dir);
-       return 0;       
+int load_images(dircnt_t *dirptr, char *imgdirpath)
+{
+    DIR *dir;
+    struct dirent* content;
+    int i = 0;
+
+    /*Reading the input images from given input directory*/
+
+    dir = opendir(imgdirpath);
+    if (!dir) {
+        fprintf(stderr, "Could not open Folder %s\n", imgdirpath);
+        return 1;
+    } else   {
+        fprintf(stderr, "Folder opened successfully\n");
+    }
+
+    while ((content = readdir(dir)) != NULL) {
+        if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) {
+            continue;
+        }
+
+        strcpy(dirptr->filename[i], content->d_name);
+        i++;
+    }
+    closedir(dir);
+    return 0;
 }
 
 /* -------------------------------------------------------------------------- */
-int get_file_format(const char *filename) {
-       unsigned int i;
-       static const char *extension[] = {"pgx", "pnm", "pgm", "ppm", "bmp","tif", "raw", "rawl", "tga", "png", "j2k", "jp2", "jpt", "j2c", "jpc" };
-       static const int format[] = { PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, TIF_DFMT, RAW_DFMT, RAWL_DFMT, TGA_DFMT, PNG_DFMT, J2K_CFMT, JP2_CFMT, JPT_CFMT, J2K_CFMT, J2K_CFMT };
-       const char * ext = strrchr(filename, '.');
-       if (ext == NULL)
-               return -1;
-       ext++;
-       if(*ext) {
-               for(i = 0; i < sizeof(format)/sizeof(*format); i++) {
-                       if(strcasecmp(ext, extension[i]) == 0) {
-                               return format[i];
-                       }
-               }
-       }
-
-       return -1;
+int get_file_format(const char *filename)
+{
+    unsigned int i;
+    static const char *extension[] = {"pgx", "pnm", "pgm", "ppm", "bmp", "tif", "raw", "rawl", "tga", "png", "j2k", "jp2", "jpt", "j2c", "jpc" };
+    static const int format[] = { PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, TIF_DFMT, RAW_DFMT, RAWL_DFMT, TGA_DFMT, PNG_DFMT, J2K_CFMT, JP2_CFMT, JPT_CFMT, J2K_CFMT, J2K_CFMT };
+    const char * ext = strrchr(filename, '.');
+    if (ext == NULL) {
+        return -1;
+    }
+    ext++;
+    if (*ext) {
+        for (i = 0; i < sizeof(format) / sizeof(*format); i++) {
+            if (strcasecmp(ext, extension[i]) == 0) {
+                return format[i];
+            }
+        }
+    }
+
+    return -1;
 }
 
 #ifdef _WIN32
@@ -428,33 +440,41 @@ const char* path_separator = "/";
 #endif
 
 /* -------------------------------------------------------------------------- */
-char get_next_file(int imageno,dircnt_t *dirptr,img_fol_t *img_fol, opj_decompress_parameters *parameters){
-       char image_filename[OPJ_PATH_LEN], infilename[OPJ_PATH_LEN],outfilename[OPJ_PATH_LEN],temp_ofname[OPJ_PATH_LEN];
-       char *temp_p, temp1[OPJ_PATH_LEN]="";
-
-       strcpy(image_filename,dirptr->filename[imageno]);
-       fprintf(stderr,"File Number %d \"%s\"\n",imageno,image_filename);
-       sprintf(infilename, "%s%s%s", img_fol->imgdirpath, path_separator, image_filename);
-       parameters->decod_format = infile_format(infilename);
-       if (parameters->decod_format == -1)
-               return 1;
-       if (opj_strcpy_s(parameters->infile, sizeof(parameters->infile), infilename) != 0) {
-               return 1;
-       }
-
-       /*Set output file*/
-       strcpy(temp_ofname,strtok(image_filename,"."));
-       while((temp_p = strtok(NULL,".")) != NULL){
-               strcat(temp_ofname,temp1);
-               sprintf(temp1,".%s",temp_p);
-       }
-       if(img_fol->set_out_format==1){
-               sprintf(outfilename,"%s/%s.%s",img_fol->imgdirpath,temp_ofname,img_fol->out_format);
-               if (opj_strcpy_s(parameters->outfile, sizeof(parameters->outfile), outfilename) != 0) {
-                       return 1;
-               }
-       }
-       return 0;
+char get_next_file(int imageno, dircnt_t *dirptr, img_fol_t *img_fol,
+                   opj_decompress_parameters *parameters)
+{
+    char image_filename[OPJ_PATH_LEN], infilename[OPJ_PATH_LEN],
+         outfilename[OPJ_PATH_LEN], temp_ofname[OPJ_PATH_LEN];
+    char *temp_p, temp1[OPJ_PATH_LEN] = "";
+
+    strcpy(image_filename, dirptr->filename[imageno]);
+    fprintf(stderr, "File Number %d \"%s\"\n", imageno, image_filename);
+    sprintf(infilename, "%s%s%s", img_fol->imgdirpath, path_separator,
+            image_filename);
+    parameters->decod_format = infile_format(infilename);
+    if (parameters->decod_format == -1) {
+        return 1;
+    }
+    if (opj_strcpy_s(parameters->infile, sizeof(parameters->infile),
+                     infilename) != 0) {
+        return 1;
+    }
+
+    /*Set output file*/
+    strcpy(temp_ofname, strtok(image_filename, "."));
+    while ((temp_p = strtok(NULL, ".")) != NULL) {
+        strcat(temp_ofname, temp1);
+        sprintf(temp1, ".%s", temp_p);
+    }
+    if (img_fol->set_out_format == 1) {
+        sprintf(outfilename, "%s/%s.%s", img_fol->imgdirpath, temp_ofname,
+                img_fol->out_format);
+        if (opj_strcpy_s(parameters->outfile, sizeof(parameters->outfile),
+                         outfilename) != 0) {
+            return 1;
+        }
+    }
+    return 0;
 }
 
 /* -------------------------------------------------------------------------- */
@@ -465,52 +485,55 @@ char get_next_file(int imageno,dircnt_t *dirptr,img_fol_t *img_fol, opj_decompre
 
 static int infile_format(const char *fname)
 {
-       FILE *reader;
-       const char *s, *magic_s;
-       int ext_format, magic_format;
-       unsigned char buf[12];
-       OPJ_SIZE_T l_nb_read;
+    FILE *reader;
+    const char *s, *magic_s;
+    int ext_format, magic_format;
+    unsigned char buf[12];
+    OPJ_SIZE_T l_nb_read;
 
-       reader = fopen(fname, "rb");
+    reader = fopen(fname, "rb");
 
-       if (reader == NULL)
-               return -2;
+    if (reader == NULL) {
+        return -2;
+    }
 
-       memset(buf, 0, 12);
-       l_nb_read = fread(buf, 1, 12, reader);
-       fclose(reader);
-       if (l_nb_read != 12)
-               return -1;
+    memset(buf, 0, 12);
+    l_nb_read = fread(buf, 1, 12, reader);
+    fclose(reader);
+    if (l_nb_read != 12) {
+        return -1;
+    }
 
 
 
-       ext_format = get_file_format(fname);
+    ext_format = get_file_format(fname);
 
-       if (ext_format == JPT_CFMT)
-               return JPT_CFMT;
+    if (ext_format == JPT_CFMT) {
+        return JPT_CFMT;
+    }
 
-       if (memcmp(buf, JP2_RFC3745_MAGIC, 12) == 0 || memcmp(buf, JP2_MAGIC, 4) == 0) {
-               magic_format = JP2_CFMT;
-               magic_s = ".jp2";
-       }
-       else if (memcmp(buf, J2K_CODESTREAM_MAGIC, 4) == 0) {
-               magic_format = J2K_CFMT;
-               magic_s = ".j2k or .jpc or .j2c";
-       }
-       else
-               return -1;
+    if (memcmp(buf, JP2_RFC3745_MAGIC, 12) == 0 || memcmp(buf, JP2_MAGIC, 4) == 0) {
+        magic_format = JP2_CFMT;
+        magic_s = ".jp2";
+    } else if (memcmp(buf, J2K_CODESTREAM_MAGIC, 4) == 0) {
+        magic_format = J2K_CFMT;
+        magic_s = ".j2k or .jpc or .j2c";
+    } else {
+        return -1;
+    }
 
-       if (magic_format == ext_format)
-               return ext_format;
+    if (magic_format == ext_format) {
+        return ext_format;
+    }
 
-       s = fname + strlen(fname) - 4;
+    s = fname + strlen(fname) - 4;
 
-       fputs("\n===========================================\n", stderr);
-       fprintf(stderr, "The extension of this file is incorrect.\n"
-                                       "FOUND %s. SHOULD BE %s\n", s, magic_s);
-       fputs("===========================================\n", stderr);
+    fputs("\n===========================================\n", stderr);
+    fprintf(stderr, "The extension of this file is incorrect.\n"
+            "FOUND %s. SHOULD BE %s\n", s, magic_s);
+    fputs("===========================================\n", stderr);
 
-       return magic_format;
+    return magic_format;
 }
 
 /* -------------------------------------------------------------------------- */
@@ -518,354 +541,350 @@ static int infile_format(const char *fname)
  * Parse the command line
  */
 /* -------------------------------------------------------------------------- */
-int parse_cmdline_decoder(int argc, char **argv, opj_decompress_parameters *parameters,img_fol_t *img_fol) {
-       /* parse the command line */
-       int totlen, c;
-       opj_option_t long_option[]={
-               {"ImgDir",    REQ_ARG, NULL,'y'},
-               {"OutFor",    REQ_ARG, NULL,'O'},
-               {"force-rgb", NO_ARG,  NULL, 1},
-               {"upsample",  NO_ARG,  NULL, 1},
-               {"split-pnm", NO_ARG,  NULL, 1},
-               {"threads",   REQ_ARG, NULL, 'T'}
-       };
-
-       const char optlist[] = "i:o:r:l:x:d:t:p:"
-
-/* UniPG>> */
+int parse_cmdline_decoder(int argc, char **argv,
+                          opj_decompress_parameters *parameters, img_fol_t *img_fol)
+{
+    /* parse the command line */
+    int totlen, c;
+    opj_option_t long_option[] = {
+        {"ImgDir",    REQ_ARG, NULL, 'y'},
+        {"OutFor",    REQ_ARG, NULL, 'O'},
+        {"force-rgb", NO_ARG,  NULL, 1},
+        {"upsample",  NO_ARG,  NULL, 1},
+        {"split-pnm", NO_ARG,  NULL, 1},
+        {"threads",   REQ_ARG, NULL, 'T'}
+    };
+
+    const char optlist[] = "i:o:r:l:x:d:t:p:"
+
+                           /* UniPG>> */
 #ifdef USE_JPWL
-                                       "W:"
+                           "W:"
 #endif /* USE_JPWL */
-/* <<UniPG */
-            "h"                ;
-
-       long_option[2].flag = &(parameters->force_rgb);
-       long_option[3].flag = &(parameters->upsample);
-       long_option[4].flag = &(parameters->split_pnm);
-       totlen=sizeof(long_option);
-       opj_reset_options_reading();
-       img_fol->set_out_format = 0;
-       do {
-               c = opj_getopt_long(argc, argv,optlist,long_option,totlen);
-               if (c == -1)
-                       break;
-               switch (c) {
-                       case 0: /* long opt with flag */
-                               break;
-                       case 'i':                       /* input file */
-                       {
-                               char *infile = opj_optarg;
-                               parameters->decod_format = infile_format(infile);
-                               switch(parameters->decod_format) {
-                                       case J2K_CFMT:
-                                               break;
-                                       case JP2_CFMT:
-                                               break;
-                                       case JPT_CFMT:
-                                               break;
-                                        case -2:
-                                               fprintf(stderr, 
-                                                       "!! infile cannot be read: %s !!\n\n", 
-                                                       infile);
-                                               return 1;
-                                       default:
-                                               fprintf(stderr, 
-                            "[ERROR] Unknown input file format: %s \n"
-                            "        Known file formats are *.j2k, *.jp2, *.jpc or *.jpt\n",
-                                                       infile);
-                                               return 1;
-                               }
-                               if (opj_strcpy_s(parameters->infile, sizeof(parameters->infile), infile) != 0) {
-                                       fprintf(stderr, "[ERROR] Path is too long\n");
-                                       return 1;
-                               }
-                       }
-                       break;
-                               
-                               /* ----------------------------------------------------- */
-
-                       case 'o':                       /* output file */
-                       {
-                               char *outfile = opj_optarg;
-                               parameters->cod_format = get_file_format(outfile);
-                               switch(parameters->cod_format) {
-                                       case PGX_DFMT:
-                                               break;
-                                       case PXM_DFMT:
-                                               break;
-                                       case BMP_DFMT:
-                                               break;
-                                       case TIF_DFMT:
-                                               break;
-                                       case RAW_DFMT:
-                                               break;
-                                       case RAWL_DFMT:
-                                               break;
-                                       case TGA_DFMT:
-                                               break;
-                                       case PNG_DFMT:
-                                               break;
-                                       default:
-                                               fprintf(stderr, "Unknown output format image %s [only *.png, *.pnm, *.pgm, *.ppm, *.pgx, *.bmp, *.tif, *.raw or *.tga]!!\n", outfile);
-                                               return 1;
-                               }
-                               if (opj_strcpy_s(parameters->outfile, sizeof(parameters->outfile), outfile) != 0) {
-                                       fprintf(stderr, "[ERROR] Path is too long\n");
-                                       return 1;
-                               }
-                       }
-                       break;
-                       
-                               /* ----------------------------------------------------- */
-
-                       case 'O':                       /* output format */
-                       {
-                               char outformat[50];
-                               char *of = opj_optarg;
-                               sprintf(outformat,".%s",of);
-                               img_fol->set_out_format = 1;
-                               parameters->cod_format = get_file_format(outformat);
-                               switch(parameters->cod_format) {
-                                       case PGX_DFMT:
-                                               img_fol->out_format = "pgx";
-                                               break;
-                                       case PXM_DFMT:
-                                               img_fol->out_format = "ppm";
-                                               break;
-                                       case BMP_DFMT:
-                                               img_fol->out_format = "bmp";
-                                               break;
-                                       case TIF_DFMT:
-                                               img_fol->out_format = "tif";
-                                               break;
-                                       case RAW_DFMT:
-                                               img_fol->out_format = "raw";
-                                               break;
-                                       case RAWL_DFMT:
-                                               img_fol->out_format = "rawl";
-                                               break;
-                                       case TGA_DFMT:
-                                               img_fol->out_format = "raw";
-                                               break;
-                                       case PNG_DFMT:
-                                               img_fol->out_format = "png";
-                                               break;
-                                       default:
-                                               fprintf(stderr, "Unknown output format image %s [only *.png, *.pnm, *.pgm, *.ppm, *.pgx, *.bmp, *.tif, *.raw or *.tga]!!\n", outformat);
-                                               return 1;
-                                               break;
-                               }
-                       }
-                       break;
-
-                               /* ----------------------------------------------------- */
-
-
-                       case 'r':               /* reduce option */
-                       {
-                               sscanf(opj_optarg, "%u", &(parameters->core.cp_reduce));
-                       }
-                       break;
-                       
-                               /* ----------------------------------------------------- */
-      
-
-                       case 'l':               /* layering option */
-                       {
-                               sscanf(opj_optarg, "%u", &(parameters->core.cp_layer));
-                       }
-                       break;
-                       
-                               /* ----------------------------------------------------- */
-
-                       case 'h':                       /* display an help description */
-                               decode_help_display();
-                               return 1;                               
-
+                           /* <<UniPG */
+                           "h"     ;
+
+    long_option[2].flag = &(parameters->force_rgb);
+    long_option[3].flag = &(parameters->upsample);
+    long_option[4].flag = &(parameters->split_pnm);
+    totlen = sizeof(long_option);
+    opj_reset_options_reading();
+    img_fol->set_out_format = 0;
+    do {
+        c = opj_getopt_long(argc, argv, optlist, long_option, totlen);
+        if (c == -1) {
+            break;
+        }
+        switch (c) {
+        case 0: /* long opt with flag */
+            break;
+        case 'i': {         /* input file */
+            char *infile = opj_optarg;
+            parameters->decod_format = infile_format(infile);
+            switch (parameters->decod_format) {
+            case J2K_CFMT:
+                break;
+            case JP2_CFMT:
+                break;
+            case JPT_CFMT:
+                break;
+            case -2:
+                fprintf(stderr,
+                        "!! infile cannot be read: %s !!\n\n",
+                        infile);
+                return 1;
+            default:
+                fprintf(stderr,
+                        "[ERROR] Unknown input file format: %s \n"
+                        "        Known file formats are *.j2k, *.jp2, *.jpc or *.jpt\n",
+                        infile);
+                return 1;
+            }
+            if (opj_strcpy_s(parameters->infile, sizeof(parameters->infile), infile) != 0) {
+                fprintf(stderr, "[ERROR] Path is too long\n");
+                return 1;
+            }
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'o': {         /* output file */
+            char *outfile = opj_optarg;
+            parameters->cod_format = get_file_format(outfile);
+            switch (parameters->cod_format) {
+            case PGX_DFMT:
+                break;
+            case PXM_DFMT:
+                break;
+            case BMP_DFMT:
+                break;
+            case TIF_DFMT:
+                break;
+            case RAW_DFMT:
+                break;
+            case RAWL_DFMT:
+                break;
+            case TGA_DFMT:
+                break;
+            case PNG_DFMT:
+                break;
+            default:
+                fprintf(stderr,
+                        "Unknown output format image %s [only *.png, *.pnm, *.pgm, *.ppm, *.pgx, *.bmp, *.tif, *.raw or *.tga]!!\n",
+                        outfile);
+                return 1;
+            }
+            if (opj_strcpy_s(parameters->outfile, sizeof(parameters->outfile),
+                             outfile) != 0) {
+                fprintf(stderr, "[ERROR] Path is too long\n");
+                return 1;
+            }
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'O': {         /* output format */
+            char outformat[50];
+            char *of = opj_optarg;
+            sprintf(outformat, ".%s", of);
+            img_fol->set_out_format = 1;
+            parameters->cod_format = get_file_format(outformat);
+            switch (parameters->cod_format) {
+            case PGX_DFMT:
+                img_fol->out_format = "pgx";
+                break;
+            case PXM_DFMT:
+                img_fol->out_format = "ppm";
+                break;
+            case BMP_DFMT:
+                img_fol->out_format = "bmp";
+                break;
+            case TIF_DFMT:
+                img_fol->out_format = "tif";
+                break;
+            case RAW_DFMT:
+                img_fol->out_format = "raw";
+                break;
+            case RAWL_DFMT:
+                img_fol->out_format = "rawl";
+                break;
+            case TGA_DFMT:
+                img_fol->out_format = "raw";
+                break;
+            case PNG_DFMT:
+                img_fol->out_format = "png";
+                break;
+            default:
+                fprintf(stderr,
+                        "Unknown output format image %s [only *.png, *.pnm, *.pgm, *.ppm, *.pgx, *.bmp, *.tif, *.raw or *.tga]!!\n",
+                        outformat);
+                return 1;
+                break;
+            }
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+
+        case 'r': {     /* reduce option */
+            sscanf(opj_optarg, "%u", &(parameters->core.cp_reduce));
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+
+        case 'l': {     /* layering option */
+            sscanf(opj_optarg, "%u", &(parameters->core.cp_layer));
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'h':           /* display an help description */
+            decode_help_display();
+            return 1;
+
+        /* ----------------------------------------------------- */
+
+        case 'y': {         /* Image Directory path */
+            img_fol->imgdirpath = (char*)malloc(strlen(opj_optarg) + 1);
+            if (img_fol->imgdirpath == NULL) {
+                return 1;
+            }
+            strcpy(img_fol->imgdirpath, opj_optarg);
+            img_fol->set_imgdir = 1;
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'd': {         /* Input decode ROI */
+            size_t size_optarg = (size_t)strlen(opj_optarg) + 1U;
+            char *ROI_values = (char*) malloc(size_optarg);
+            if (ROI_values == NULL) {
+                fprintf(stderr, "[ERROR] Couldn't allocate memory\n");
+                return 1;
+            }
+            ROI_values[0] = '\0';
+            memcpy(ROI_values, opj_optarg, size_optarg);
+            /*printf("ROI_values = %s [%d / %d]\n", ROI_values, strlen(ROI_values), size_optarg ); */
+            parse_DA_values(ROI_values, &parameters->DA_x0, &parameters->DA_y0,
+                            &parameters->DA_x1, &parameters->DA_y1);
+
+            free(ROI_values);
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 't': {         /* Input tile index */
+            sscanf(opj_optarg, "%u", &parameters->tile_index);
+            parameters->nb_tile_to_decode = 1;
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'x': {         /* Creation of index file */
+            if (opj_strcpy_s(parameters->indexfilename, sizeof(parameters->indexfilename),
+                             opj_optarg) != 0) {
+                fprintf(stderr, "[ERROR] Path is too long\n");
+                return 1;
+            }
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+        case 'p': { /* Force precision */
+            if (!parse_precision(opj_optarg, parameters)) {
+                return 1;
+            }
+        }
+        break;
             /* ----------------------------------------------------- */
 
-                       case 'y':                       /* Image Directory path */
-                {
-                                       img_fol->imgdirpath = (char*)malloc(strlen(opj_optarg) + 1);
-                                       if(img_fol->imgdirpath == NULL){
-                                               return 1;
-                                       }
-                                       strcpy(img_fol->imgdirpath,opj_optarg);
-                                       img_fol->set_imgdir=1;
-                               }
-                               break;
-
-                               /* ----------------------------------------------------- */
-
-                       case 'd':               /* Input decode ROI */
-                       {
-                               size_t size_optarg = (size_t)strlen(opj_optarg) + 1U;
-                               char *ROI_values = (char*) malloc(size_optarg);
-                               if (ROI_values == NULL) {
-                                       fprintf(stderr, "[ERROR] Couldn't allocate memory\n");
-                                       return 1;
-                               }
-                               ROI_values[0] = '\0';
-                               memcpy(ROI_values, opj_optarg, size_optarg);
-                               /*printf("ROI_values = %s [%d / %d]\n", ROI_values, strlen(ROI_values), size_optarg ); */
-                               parse_DA_values( ROI_values, &parameters->DA_x0, &parameters->DA_y0, &parameters->DA_x1, &parameters->DA_y1);
-
-                               free(ROI_values);
-                       }
-                       break;
-
-                       /* ----------------------------------------------------- */
-
-                       case 't':               /* Input tile index */
-                       {
-                               sscanf(opj_optarg, "%u", &parameters->tile_index);
-                               parameters->nb_tile_to_decode = 1;
-                       }
-                       break;
-
-                               /* ----------------------------------------------------- */                                                             
-
-                       case 'x':                       /* Creation of index file */
-                               {
-                                       if (opj_strcpy_s(parameters->indexfilename, sizeof(parameters->indexfilename), opj_optarg) != 0) {
-                                               fprintf(stderr, "[ERROR] Path is too long\n");
-                                               return 1;
-                                       }
-                               }
-                               break;
-                               
-                               /* ----------------------------------------------------- */
-                       case 'p': /* Force precision */
-                               {
-                                       if (!parse_precision(opj_optarg, parameters))
-                                       {
-                                               return 1;
-                                       }
-                               }
-                               break;
-                               /* ----------------------------------------------------- */
-                               
-                               /* UniPG>> */
+            /* UniPG>> */
 #ifdef USE_JPWL
-                       
-                       case 'W':                       /* activate JPWL correction */
-                       {
-                               char *token = NULL;
-
-                               token = strtok(opj_optarg, ",");
-                               while(token != NULL) {
-
-                                       /* search expected number of components */
-                                       if (*token == 'c') {
-
-                                               static int compno;
-
-                                               compno = JPWL_EXPECTED_COMPONENTS; /* predefined no. of components */
-
-                                               if(sscanf(token, "c=%d", &compno) == 1) {
-                                                       /* Specified */
-                                                       if ((compno < 1) || (compno > 256)) {
-                                                               fprintf(stderr, "ERROR -> invalid number of components c = %d\n", compno);
-                                                               return 1;
-                                                       }
-                                                       parameters->jpwl_exp_comps = compno;
-
-                                               } else if (!strcmp(token, "c")) {
-                                                       /* default */
-                                                       parameters->jpwl_exp_comps = compno; /* auto for default size */
-
-                                               } else {
-                                                       fprintf(stderr, "ERROR -> invalid components specified = %s\n", token);
-                                                       return 1;
-                                               };
-                                       }
-
-                                       /* search maximum number of tiles */
-                                       if (*token == 't') {
-
-                                               static int tileno;
-
-                                               tileno = JPWL_MAXIMUM_TILES; /* maximum no. of tiles */
-
-                                               if(sscanf(token, "t=%d", &tileno) == 1) {
-                                                       /* Specified */
-                                                       if ((tileno < 1) || (tileno > JPWL_MAXIMUM_TILES)) {
-                                                               fprintf(stderr, "ERROR -> invalid number of tiles t = %d\n", tileno);
-                                                               return 1;
-                                                       }
-                                                       parameters->jpwl_max_tiles = tileno;
-
-                                               } else if (!strcmp(token, "t")) {
-                                                       /* default */
-                                                       parameters->jpwl_max_tiles = tileno; /* auto for default size */
-
-                                               } else {
-                                                       fprintf(stderr, "ERROR -> invalid tiles specified = %s\n", token);
-                                                       return 1;
-                                               };
-                                       }
-
-                                       /* next token or bust */
-                                       token = strtok(NULL, ",");
-                               };
-                               parameters->jpwl_correct = OPJ_TRUE;
-                               fprintf(stdout, "JPWL correction capability activated\n");
-                               fprintf(stdout, "- expecting %d components\n", parameters->jpwl_exp_comps);
-                       }
-                       break;  
+
+        case 'W': {         /* activate JPWL correction */
+            char *token = NULL;
+
+            token = strtok(opj_optarg, ",");
+            while (token != NULL) {
+
+                /* search expected number of components */
+                if (*token == 'c') {
+
+                    static int compno;
+
+                    compno = JPWL_EXPECTED_COMPONENTS; /* predefined no. of components */
+
+                    if (sscanf(token, "c=%d", &compno) == 1) {
+                        /* Specified */
+                        if ((compno < 1) || (compno > 256)) {
+                            fprintf(stderr, "ERROR -> invalid number of components c = %d\n", compno);
+                            return 1;
+                        }
+                        parameters->jpwl_exp_comps = compno;
+
+                    } else if (!strcmp(token, "c")) {
+                        /* default */
+                        parameters->jpwl_exp_comps = compno; /* auto for default size */
+
+                    } else {
+                        fprintf(stderr, "ERROR -> invalid components specified = %s\n", token);
+                        return 1;
+                    };
+                }
+
+                /* search maximum number of tiles */
+                if (*token == 't') {
+
+                    static int tileno;
+
+                    tileno = JPWL_MAXIMUM_TILES; /* maximum no. of tiles */
+
+                    if (sscanf(token, "t=%d", &tileno) == 1) {
+                        /* Specified */
+                        if ((tileno < 1) || (tileno > JPWL_MAXIMUM_TILES)) {
+                            fprintf(stderr, "ERROR -> invalid number of tiles t = %d\n", tileno);
+                            return 1;
+                        }
+                        parameters->jpwl_max_tiles = tileno;
+
+                    } else if (!strcmp(token, "t")) {
+                        /* default */
+                        parameters->jpwl_max_tiles = tileno; /* auto for default size */
+
+                    } else {
+                        fprintf(stderr, "ERROR -> invalid tiles specified = %s\n", token);
+                        return 1;
+                    };
+                }
+
+                /* next token or bust */
+                token = strtok(NULL, ",");
+            };
+            parameters->jpwl_correct = OPJ_TRUE;
+            fprintf(stdout, "JPWL correction capability activated\n");
+            fprintf(stdout, "- expecting %d components\n", parameters->jpwl_exp_comps);
+        }
+        break;
 #endif /* USE_JPWL */
-/* <<UniPG */            
-                               
-                               /* ----------------------------------------------------- */
-                       case 'T':  /* Number of threads */
-                               {
-                                       if( strcmp(opj_optarg, "ALL_CPUS") == 0 )
-                                       {
-                                               parameters->num_threads = opj_get_num_cpus();
-                                               if( parameters->num_threads == 1 )
-                                                       parameters->num_threads = 0;
-                                       }
-                                       else
-                                       {
-                                         sscanf(opj_optarg, "%d", &parameters->num_threads);
-                                       }
-                               }
-                               break;
-
-                               /* ----------------------------------------------------- */
-                       
+        /* <<UniPG */
+
+        /* ----------------------------------------------------- */
+        case 'T': { /* Number of threads */
+            if (strcmp(opj_optarg, "ALL_CPUS") == 0) {
+                parameters->num_threads = opj_get_num_cpus();
+                if (parameters->num_threads == 1) {
+                    parameters->num_threads = 0;
+                }
+            } else {
+                sscanf(opj_optarg, "%d", &parameters->num_threads);
+            }
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
         default:
             fprintf(stderr, "[WARNING] An invalid option has been ignored.\n");
             break;
-               }
-       }while(c != -1);
+        }
+    } while (c != -1);
 
-       /* check for possible errors */
-       if(img_fol->set_imgdir==1){
-               if(!(parameters->infile[0]==0)){
+    /* check for possible errors */
+    if (img_fol->set_imgdir == 1) {
+        if (!(parameters->infile[0] == 0)) {
             fprintf(stderr, "[ERROR] options -ImgDir and -i cannot be used together.\n");
-                       return 1;
-               }
-               if(img_fol->set_out_format == 0){
-            fprintf(stderr, "[ERROR] When -ImgDir is used, -OutFor <FORMAT> must be used.\n");
+            return 1;
+        }
+        if (img_fol->set_out_format == 0) {
+            fprintf(stderr,
+                    "[ERROR] When -ImgDir is used, -OutFor <FORMAT> must be used.\n");
             fprintf(stderr, "Only one format allowed.\n"
-                            "Valid format are PGM, PPM, PNM, PGX, BMP, TIF, RAW and TGA.\n");
-                       return 1;
-               }
-               if(!((parameters->outfile[0] == 0))){
+                    "Valid format are PGM, PPM, PNM, PGX, BMP, TIF, RAW and TGA.\n");
+            return 1;
+        }
+        if (!((parameters->outfile[0] == 0))) {
             fprintf(stderr, "[ERROR] options -ImgDir and -o cannot be used together.\n");
-                       return 1;
-               }
-       }else{
-               if((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
+            return 1;
+        }
+    } else {
+        if ((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
             fprintf(stderr, "[ERROR] Required parameters are missing\n"
-                            "Example: %s -i image.j2k -o image.pgm\n",argv[0]);
-            fprintf(stderr, "   Help: %s -h\n",argv[0]);
-                       return 1;
-               }
-       }
+                    "Example: %s -i image.j2k -o image.pgm\n", argv[0]);
+            fprintf(stderr, "   Help: %s -h\n", argv[0]);
+            return 1;
+        }
+    }
 
-       return 0;
+    return 0;
 }
 
 /* -------------------------------------------------------------------------- */
@@ -874,56 +893,60 @@ int parse_cmdline_decoder(int argc, char **argv, opj_decompress_parameters *para
  * separator = ","
  */
 /* -------------------------------------------------------------------------- */
-int parse_DA_values( char* inArg, unsigned int *DA_x0, unsigned int *DA_y0, unsigned int *DA_x1, unsigned int *DA_y1)
+int parse_DA_values(char* inArg, unsigned int *DA_x0, unsigned int *DA_y0,
+                    unsigned int *DA_x1, unsigned int *DA_y1)
 {
-       int it = 0;
-       int values[4];
-       char delims[] = ",";
-       char *result = NULL;
-       result = strtok( inArg, delims );
-
-       while( (result != NULL) && (it < 4 ) ) {
-               values[it] = atoi(result);
-               result = strtok( NULL, delims );
-               it++;
-       }
-
-       if (it != 4) {
-               return EXIT_FAILURE;
-       }
-       else{
-               *DA_x0 = (OPJ_UINT32)values[0]; *DA_y0 = (OPJ_UINT32)values[1];
-               *DA_x1 = (OPJ_UINT32)values[2]; *DA_y1 = (OPJ_UINT32)values[3];
-               return EXIT_SUCCESS;
-       }
+    int it = 0;
+    int values[4];
+    char delims[] = ",";
+    char *result = NULL;
+    result = strtok(inArg, delims);
+
+    while ((result != NULL) && (it < 4)) {
+        values[it] = atoi(result);
+        result = strtok(NULL, delims);
+        it++;
+    }
+
+    if (it != 4) {
+        return EXIT_FAILURE;
+    } else {
+        *DA_x0 = (OPJ_UINT32)values[0];
+        *DA_y0 = (OPJ_UINT32)values[1];
+        *DA_x1 = (OPJ_UINT32)values[2];
+        *DA_y1 = (OPJ_UINT32)values[3];
+        return EXIT_SUCCESS;
+    }
 }
 
-OPJ_FLOAT64 opj_clock(void) {
+OPJ_FLOAT64 opj_clock(void)
+{
 #ifdef _WIN32
-       /* _WIN32: use QueryPerformance (very accurate) */
-    LARGE_INTEGER freq , t ;
+    /* _WIN32: use QueryPerformance (very accurate) */
+    LARGE_INTEGER freq, t ;
     /* freq is the clock speed of the CPU */
     QueryPerformanceFrequency(&freq) ;
-       /* cout << "freq = " << ((double) freq.QuadPart) << endl; */
+    /* cout << "freq = " << ((double) freq.QuadPart) << endl; */
     /* t is the high resolution performance counter (see MSDN) */
-    QueryPerformanceCounter ( & t ) ;
-       return freq.QuadPart ? (t.QuadPart / (OPJ_FLOAT64)freq.QuadPart) : 0;
+    QueryPerformanceCounter(& t) ;
+    return freq.QuadPart ? (t.QuadPart / (OPJ_FLOAT64)freq.QuadPart) : 0;
 #elif defined(__linux)
-       struct timespec ts;
-       clock_gettime(CLOCK_REALTIME, &ts);
-       return( (OPJ_FLOAT64)ts.tv_sec + (OPJ_FLOAT64)ts.tv_nsec * 1e-9 );
+    struct timespec ts;
+    clock_gettime(CLOCK_REALTIME, &ts);
+    return ((OPJ_FLOAT64)ts.tv_sec + (OPJ_FLOAT64)ts.tv_nsec * 1e-9);
 #else
-       /* Unix : use resource usage */
-       /* FIXME: this counts the total CPU time, instead of the user perceived time */
-       struct rusage t;
-       OPJ_FLOAT64 procTime;
-       /* (1) Get the rusage data structure at this moment (man getrusage) */
-       getrusage(0,&t);
-       /* (2) What is the elapsed time ? - CPU time = User time + System time */
-       /* (2a) Get the seconds */
-       procTime = (OPJ_FLOAT64)(t.ru_utime.tv_sec + t.ru_stime.tv_sec);
-       /* (2b) More precisely! Get the microseconds part ! */
-       return ( procTime + (OPJ_FLOAT64)(t.ru_utime.tv_usec + t.ru_stime.tv_usec) * 1e-6 ) ;
+    /* Unix : use resource usage */
+    /* FIXME: this counts the total CPU time, instead of the user perceived time */
+    struct rusage t;
+    OPJ_FLOAT64 procTime;
+    /* (1) Get the rusage data structure at this moment (man getrusage) */
+    getrusage(0, &t);
+    /* (2) What is the elapsed time ? - CPU time = User time + System time */
+    /* (2a) Get the seconds */
+    procTime = (OPJ_FLOAT64)(t.ru_utime.tv_sec + t.ru_stime.tv_sec);
+    /* (2b) More precisely! Get the microseconds part ! */
+    return (procTime + (OPJ_FLOAT64)(t.ru_utime.tv_usec + t.ru_stime.tv_usec) *
+            1e-6) ;
 #endif
 }
 
@@ -932,275 +955,310 @@ OPJ_FLOAT64 opj_clock(void) {
 /**
 sample error callback expecting a FILE* client object
 */
-static void error_callback(const char *msg, void *client_data) {
-       (void)client_data;
-       fprintf(stdout, "[ERROR] %s", msg);
+static void error_callback(const char *msg, void *client_data)
+{
+    (void)client_data;
+    fprintf(stdout, "[ERROR] %s", msg);
 }
 /**
 sample warning callback expecting a FILE* client object
 */
-static void warning_callback(const char *msg, void *client_data) {
-       (void)client_data;
-       fprintf(stdout, "[WARNING] %s", msg);
+static void warning_callback(const char *msg, void *client_data)
+{
+    (void)client_data;
+    fprintf(stdout, "[WARNING] %s", msg);
 }
 /**
 sample debug callback expecting no client object
 */
-static void info_callback(const char *msg, void *client_data) {
-       (void)client_data;
-       fprintf(stdout, "[INFO] %s", msg);
+static void info_callback(const char *msg, void *client_data)
+{
+    (void)client_data;
+    fprintf(stdout, "[INFO] %s", msg);
 }
 
 static void set_default_parameters(opj_decompress_parameters* parameters)
 {
-       if (parameters) {
-               memset(parameters, 0, sizeof(opj_decompress_parameters));
-               
-               /* default decoding parameters (command line specific) */
-               parameters->decod_format = -1;
-               parameters->cod_format = -1;
-               
-               /* default decoding parameters (core) */
-               opj_set_default_decoder_parameters(&(parameters->core));
-       }
+    if (parameters) {
+        memset(parameters, 0, sizeof(opj_decompress_parameters));
+
+        /* default decoding parameters (command line specific) */
+        parameters->decod_format = -1;
+        parameters->cod_format = -1;
+
+        /* default decoding parameters (core) */
+        opj_set_default_decoder_parameters(&(parameters->core));
+    }
 }
 
 static void destroy_parameters(opj_decompress_parameters* parameters)
 {
-       if (parameters) {
-               if (parameters->precision) {
-                       free(parameters->precision);
-                       parameters->precision = NULL;
-               }
-       }
+    if (parameters) {
+        if (parameters->precision) {
+            free(parameters->precision);
+            parameters->precision = NULL;
+        }
+    }
 }
 
 /* -------------------------------------------------------------------------- */
 
 static opj_image_t* convert_gray_to_rgb(opj_image_t* original)
 {
-       OPJ_UINT32 compno;
-       opj_image_t* l_new_image = NULL;
-       opj_image_cmptparm_t* l_new_components = NULL;
-       
-       l_new_components = (opj_image_cmptparm_t*)malloc((original->numcomps + 2U) * sizeof(opj_image_cmptparm_t));
-       if (l_new_components == NULL) {
-               fprintf(stderr, "ERROR -> opj_decompress: failed to allocate memory for RGB image!\n");
-               opj_image_destroy(original);
-               return NULL;
-       }
-       
-       l_new_components[0].bpp  = l_new_components[1].bpp  = l_new_components[2].bpp  = original->comps[0].bpp;
-       l_new_components[0].dx   = l_new_components[1].dx   = l_new_components[2].dx   = original->comps[0].dx;
-       l_new_components[0].dy   = l_new_components[1].dy   = l_new_components[2].dy   = original->comps[0].dy;
-       l_new_components[0].h    = l_new_components[1].h    = l_new_components[2].h    = original->comps[0].h;
-       l_new_components[0].w    = l_new_components[1].w    = l_new_components[2].w    = original->comps[0].w;
-       l_new_components[0].prec = l_new_components[1].prec = l_new_components[2].prec = original->comps[0].prec;
-       l_new_components[0].sgnd = l_new_components[1].sgnd = l_new_components[2].sgnd = original->comps[0].sgnd;
-       l_new_components[0].x0   = l_new_components[1].x0   = l_new_components[2].x0   = original->comps[0].x0;
-       l_new_components[0].y0   = l_new_components[1].y0   = l_new_components[2].y0   = original->comps[0].y0;
-       
-       for(compno = 1U; compno < original->numcomps; ++compno) {
-               l_new_components[compno+2U].bpp  = original->comps[compno].bpp;
-               l_new_components[compno+2U].dx   = original->comps[compno].dx;
-               l_new_components[compno+2U].dy   = original->comps[compno].dy;
-               l_new_components[compno+2U].h    = original->comps[compno].h;
-               l_new_components[compno+2U].w    = original->comps[compno].w;
-               l_new_components[compno+2U].prec = original->comps[compno].prec;
-               l_new_components[compno+2U].sgnd = original->comps[compno].sgnd;
-               l_new_components[compno+2U].x0   = original->comps[compno].x0;
-               l_new_components[compno+2U].y0   = original->comps[compno].y0;
-       }
-       
-       l_new_image = opj_image_create(original->numcomps + 2U, l_new_components, OPJ_CLRSPC_SRGB);
-       free(l_new_components);
-       if (l_new_image == NULL) {
-               fprintf(stderr, "ERROR -> opj_decompress: failed to allocate memory for RGB image!\n");
-               opj_image_destroy(original);
-               return NULL;
-       }
-       
-       l_new_image->x0 = original->x0;
-       l_new_image->x1 = original->x1;
-       l_new_image->y0 = original->y0;
-       l_new_image->y1 = original->y1;
-       
-       l_new_image->comps[0].factor        = l_new_image->comps[1].factor        = l_new_image->comps[2].factor        = original->comps[0].factor;
-       l_new_image->comps[0].alpha         = l_new_image->comps[1].alpha         = l_new_image->comps[2].alpha         = original->comps[0].alpha;
-       l_new_image->comps[0].resno_decoded = l_new_image->comps[1].resno_decoded = l_new_image->comps[2].resno_decoded = original->comps[0].resno_decoded;
-       
-       memcpy(l_new_image->comps[0].data, original->comps[0].data, original->comps[0].w * original->comps[0].h * sizeof(OPJ_INT32));
-       memcpy(l_new_image->comps[1].data, original->comps[0].data, original->comps[0].w * original->comps[0].h * sizeof(OPJ_INT32));
-       memcpy(l_new_image->comps[2].data, original->comps[0].data, original->comps[0].w * original->comps[0].h * sizeof(OPJ_INT32));
-       
-       for(compno = 1U; compno < original->numcomps; ++compno) {
-               l_new_image->comps[compno+2U].factor        = original->comps[compno].factor;
-               l_new_image->comps[compno+2U].alpha         = original->comps[compno].alpha;
-               l_new_image->comps[compno+2U].resno_decoded = original->comps[compno].resno_decoded;
-               memcpy(l_new_image->comps[compno+2U].data, original->comps[compno].data, original->comps[compno].w * original->comps[compno].h * sizeof(OPJ_INT32));
-       }
-       opj_image_destroy(original);
-       return l_new_image;
+    OPJ_UINT32 compno;
+    opj_image_t* l_new_image = NULL;
+    opj_image_cmptparm_t* l_new_components = NULL;
+
+    l_new_components = (opj_image_cmptparm_t*)malloc((original->numcomps + 2U) *
+                       sizeof(opj_image_cmptparm_t));
+    if (l_new_components == NULL) {
+        fprintf(stderr,
+                "ERROR -> opj_decompress: failed to allocate memory for RGB image!\n");
+        opj_image_destroy(original);
+        return NULL;
+    }
+
+    l_new_components[0].bpp  = l_new_components[1].bpp  = l_new_components[2].bpp  =
+                                   original->comps[0].bpp;
+    l_new_components[0].dx   = l_new_components[1].dx   = l_new_components[2].dx   =
+                                   original->comps[0].dx;
+    l_new_components[0].dy   = l_new_components[1].dy   = l_new_components[2].dy   =
+                                   original->comps[0].dy;
+    l_new_components[0].h    = l_new_components[1].h    = l_new_components[2].h    =
+                                   original->comps[0].h;
+    l_new_components[0].w    = l_new_components[1].w    = l_new_components[2].w    =
+                                   original->comps[0].w;
+    l_new_components[0].prec = l_new_components[1].prec = l_new_components[2].prec =
+                                   original->comps[0].prec;
+    l_new_components[0].sgnd = l_new_components[1].sgnd = l_new_components[2].sgnd =
+                                   original->comps[0].sgnd;
+    l_new_components[0].x0   = l_new_components[1].x0   = l_new_components[2].x0   =
+                                   original->comps[0].x0;
+    l_new_components[0].y0   = l_new_components[1].y0   = l_new_components[2].y0   =
+                                   original->comps[0].y0;
+
+    for (compno = 1U; compno < original->numcomps; ++compno) {
+        l_new_components[compno + 2U].bpp  = original->comps[compno].bpp;
+        l_new_components[compno + 2U].dx   = original->comps[compno].dx;
+        l_new_components[compno + 2U].dy   = original->comps[compno].dy;
+        l_new_components[compno + 2U].h    = original->comps[compno].h;
+        l_new_components[compno + 2U].w    = original->comps[compno].w;
+        l_new_components[compno + 2U].prec = original->comps[compno].prec;
+        l_new_components[compno + 2U].sgnd = original->comps[compno].sgnd;
+        l_new_components[compno + 2U].x0   = original->comps[compno].x0;
+        l_new_components[compno + 2U].y0   = original->comps[compno].y0;
+    }
+
+    l_new_image = opj_image_create(original->numcomps + 2U, l_new_components,
+                                   OPJ_CLRSPC_SRGB);
+    free(l_new_components);
+    if (l_new_image == NULL) {
+        fprintf(stderr,
+                "ERROR -> opj_decompress: failed to allocate memory for RGB image!\n");
+        opj_image_destroy(original);
+        return NULL;
+    }
+
+    l_new_image->x0 = original->x0;
+    l_new_image->x1 = original->x1;
+    l_new_image->y0 = original->y0;
+    l_new_image->y1 = original->y1;
+
+    l_new_image->comps[0].factor        = l_new_image->comps[1].factor        =
+            l_new_image->comps[2].factor        = original->comps[0].factor;
+    l_new_image->comps[0].alpha         = l_new_image->comps[1].alpha         =
+            l_new_image->comps[2].alpha         = original->comps[0].alpha;
+    l_new_image->comps[0].resno_decoded = l_new_image->comps[1].resno_decoded =
+            l_new_image->comps[2].resno_decoded = original->comps[0].resno_decoded;
+
+    memcpy(l_new_image->comps[0].data, original->comps[0].data,
+           original->comps[0].w * original->comps[0].h * sizeof(OPJ_INT32));
+    memcpy(l_new_image->comps[1].data, original->comps[0].data,
+           original->comps[0].w * original->comps[0].h * sizeof(OPJ_INT32));
+    memcpy(l_new_image->comps[2].data, original->comps[0].data,
+           original->comps[0].w * original->comps[0].h * sizeof(OPJ_INT32));
+
+    for (compno = 1U; compno < original->numcomps; ++compno) {
+        l_new_image->comps[compno + 2U].factor        = original->comps[compno].factor;
+        l_new_image->comps[compno + 2U].alpha         = original->comps[compno].alpha;
+        l_new_image->comps[compno + 2U].resno_decoded =
+            original->comps[compno].resno_decoded;
+        memcpy(l_new_image->comps[compno + 2U].data, original->comps[compno].data,
+               original->comps[compno].w * original->comps[compno].h * sizeof(OPJ_INT32));
+    }
+    opj_image_destroy(original);
+    return l_new_image;
 }
 
 /* -------------------------------------------------------------------------- */
 
 static opj_image_t* upsample_image_components(opj_image_t* original)
 {
-       opj_image_t* l_new_image = NULL;
-       opj_image_cmptparm_t* l_new_components = NULL;
-       OPJ_BOOL l_upsample_need = OPJ_FALSE;
-       OPJ_UINT32 compno;
-
-       for (compno = 0U; compno < original->numcomps; ++compno) {
-               if (original->comps[compno].factor > 0U) {
-                       fprintf(stderr, "ERROR -> opj_decompress: -upsample not supported with reduction\n");
-                       opj_image_destroy(original);
-                       return NULL;
-               }
-               if ((original->comps[compno].dx > 1U) || (original->comps[compno].dy > 1U)) {
-                       l_upsample_need = OPJ_TRUE;
-                       break;
-               }
-       }
-       if (!l_upsample_need) {
-               return original;
-       }
-       /* Upsample is needed */
-       l_new_components = (opj_image_cmptparm_t*)malloc(original->numcomps * sizeof(opj_image_cmptparm_t));
-       if (l_new_components == NULL) {
-               fprintf(stderr, "ERROR -> opj_decompress: failed to allocate memory for upsampled components!\n");
-               opj_image_destroy(original);
-               return NULL;
-       }
-       
-       for (compno = 0U; compno < original->numcomps; ++compno) {
-               opj_image_cmptparm_t* l_new_cmp = &(l_new_components[compno]);
-               opj_image_comp_t*     l_org_cmp = &(original->comps[compno]);
-               
-               l_new_cmp->bpp  = l_org_cmp->bpp;
-               l_new_cmp->prec = l_org_cmp->prec;
-               l_new_cmp->sgnd = l_org_cmp->sgnd;
-               l_new_cmp->x0   = original->x0;
-               l_new_cmp->y0   = original->y0;
-               l_new_cmp->dx   = 1;
-               l_new_cmp->dy   = 1;
-               l_new_cmp->w    = l_org_cmp->w; /* should be original->x1 - original->x0 for dx==1 */
-               l_new_cmp->h    = l_org_cmp->h; /* should be original->y1 - original->y0 for dy==0 */
-               
-               if (l_org_cmp->dx > 1U) {
-                       l_new_cmp->w = original->x1 - original->x0;
-               }
-               
-               if (l_org_cmp->dy > 1U) {
-                       l_new_cmp->h = original->y1 - original->y0;
-               }
-       }
-       
-       l_new_image = opj_image_create(original->numcomps, l_new_components, original->color_space);
-       free(l_new_components);
-       if (l_new_image == NULL) {
-               fprintf(stderr, "ERROR -> opj_decompress: failed to allocate memory for upsampled components!\n");
-               opj_image_destroy(original);
-               return NULL;
-       }
-       
-       l_new_image->x0 = original->x0;
-       l_new_image->x1 = original->x1;
-       l_new_image->y0 = original->y0;
-       l_new_image->y1 = original->y1;
-       
-       for (compno = 0U; compno < original->numcomps; ++compno) {
-               opj_image_comp_t* l_new_cmp = &(l_new_image->comps[compno]);
-               opj_image_comp_t* l_org_cmp = &(original->comps[compno]);
-               
-               l_new_cmp->factor        = l_org_cmp->factor;
-               l_new_cmp->alpha         = l_org_cmp->alpha;
-               l_new_cmp->resno_decoded = l_org_cmp->resno_decoded;
-               
-               if ((l_org_cmp->dx > 1U) || (l_org_cmp->dy > 1U)) {
-                       const OPJ_INT32* l_src = l_org_cmp->data;
-                       OPJ_INT32*       l_dst = l_new_cmp->data;
-                       OPJ_UINT32 y;
-                       OPJ_UINT32 xoff, yoff;
-                       
-                       /* need to take into account dx & dy */
-                       xoff = l_org_cmp->dx * l_org_cmp->x0 -  original->x0;
-                       yoff = l_org_cmp->dy * l_org_cmp->y0 -  original->y0;
-                       if ((xoff >= l_org_cmp->dx) || (yoff >= l_org_cmp->dy)) {
-                               fprintf(stderr, "ERROR -> opj_decompress: Invalid image/component parameters found when upsampling\n");
-                               opj_image_destroy(original);
-                               opj_image_destroy(l_new_image);
-                               return NULL;
-                       }
-                       
-                       for (y = 0U; y < yoff; ++y) {
-                               memset(l_dst, 0U, l_new_cmp->w * sizeof(OPJ_INT32));
-                               l_dst += l_new_cmp->w;
-                       }
-                       
-                       if(l_new_cmp->h > (l_org_cmp->dy - 1U)) { /* check subtraction overflow for really small images */
-                               for (; y < l_new_cmp->h - (l_org_cmp->dy - 1U); y += l_org_cmp->dy) {
-                                       OPJ_UINT32 x, dy;
-                                       OPJ_UINT32 xorg;
-                                       
-                                       xorg = 0U;
-                                       for (x = 0U; x < xoff; ++x) {
-                                               l_dst[x] = 0;
-                                       }
-                                       if (l_new_cmp->w > (l_org_cmp->dx - 1U)) { /* check subtraction overflow for really small images */
-                                               for (; x < l_new_cmp->w - (l_org_cmp->dx - 1U); x += l_org_cmp->dx, ++xorg) {
-                                                       OPJ_UINT32 dx;
-                                                       for (dx = 0U; dx < l_org_cmp->dx; ++dx) {
-                                                               l_dst[x + dx] = l_src[xorg];
-                                                       }
-                                               }
-                                       }
-                                       for (; x < l_new_cmp->w; ++x) {
-                                               l_dst[x] = l_src[xorg];
-                                       }
-                                       l_dst += l_new_cmp->w;
-                                               
-                                       for (dy = 1U; dy < l_org_cmp->dy; ++dy) {
-                                               memcpy(l_dst, l_dst - l_new_cmp->w, l_new_cmp->w * sizeof(OPJ_INT32));
-                                               l_dst += l_new_cmp->w;
-                                       }
-                                       l_src += l_org_cmp->w;
-                               }
-                       }
-                       if (y < l_new_cmp->h) {
-                               OPJ_UINT32 x;
-                               OPJ_UINT32 xorg;
-                               
-                               xorg = 0U;
-                               for (x = 0U; x < xoff; ++x) {
-                                       l_dst[x] = 0;
-                               }
-                               if (l_new_cmp->w > (l_org_cmp->dx - 1U)) { /* check subtraction overflow for really small images */
-                                       for (; x < l_new_cmp->w - (l_org_cmp->dx - 1U); x += l_org_cmp->dx, ++xorg) {
-                                               OPJ_UINT32 dx;
-                                               for (dx = 0U; dx < l_org_cmp->dx; ++dx) {
-                                                       l_dst[x + dx] = l_src[xorg];
-                                               }
-                                       }
-                               }
-                               for (; x < l_new_cmp->w; ++x) {
-                                       l_dst[x] = l_src[xorg];
-                               }
-                               l_dst += l_new_cmp->w;
-                               ++y;
-                               for (; y < l_new_cmp->h; ++y) {
-                                       memcpy(l_dst, l_dst - l_new_cmp->w, l_new_cmp->w * sizeof(OPJ_INT32));
-                                       l_dst += l_new_cmp->w;
-                               }
-                       }
-               }
-               else {
-                       memcpy(l_new_cmp->data, l_org_cmp->data, l_org_cmp->w * l_org_cmp->h * sizeof(OPJ_INT32));
-               }
-       }
-       opj_image_destroy(original);
-       return l_new_image;
+    opj_image_t* l_new_image = NULL;
+    opj_image_cmptparm_t* l_new_components = NULL;
+    OPJ_BOOL l_upsample_need = OPJ_FALSE;
+    OPJ_UINT32 compno;
+
+    for (compno = 0U; compno < original->numcomps; ++compno) {
+        if (original->comps[compno].factor > 0U) {
+            fprintf(stderr,
+                    "ERROR -> opj_decompress: -upsample not supported with reduction\n");
+            opj_image_destroy(original);
+            return NULL;
+        }
+        if ((original->comps[compno].dx > 1U) || (original->comps[compno].dy > 1U)) {
+            l_upsample_need = OPJ_TRUE;
+            break;
+        }
+    }
+    if (!l_upsample_need) {
+        return original;
+    }
+    /* Upsample is needed */
+    l_new_components = (opj_image_cmptparm_t*)malloc(original->numcomps * sizeof(
+                           opj_image_cmptparm_t));
+    if (l_new_components == NULL) {
+        fprintf(stderr,
+                "ERROR -> opj_decompress: failed to allocate memory for upsampled components!\n");
+        opj_image_destroy(original);
+        return NULL;
+    }
+
+    for (compno = 0U; compno < original->numcomps; ++compno) {
+        opj_image_cmptparm_t* l_new_cmp = &(l_new_components[compno]);
+        opj_image_comp_t*     l_org_cmp = &(original->comps[compno]);
+
+        l_new_cmp->bpp  = l_org_cmp->bpp;
+        l_new_cmp->prec = l_org_cmp->prec;
+        l_new_cmp->sgnd = l_org_cmp->sgnd;
+        l_new_cmp->x0   = original->x0;
+        l_new_cmp->y0   = original->y0;
+        l_new_cmp->dx   = 1;
+        l_new_cmp->dy   = 1;
+        l_new_cmp->w    =
+            l_org_cmp->w; /* should be original->x1 - original->x0 for dx==1 */
+        l_new_cmp->h    =
+            l_org_cmp->h; /* should be original->y1 - original->y0 for dy==0 */
+
+        if (l_org_cmp->dx > 1U) {
+            l_new_cmp->w = original->x1 - original->x0;
+        }
+
+        if (l_org_cmp->dy > 1U) {
+            l_new_cmp->h = original->y1 - original->y0;
+        }
+    }
+
+    l_new_image = opj_image_create(original->numcomps, l_new_components,
+                                   original->color_space);
+    free(l_new_components);
+    if (l_new_image == NULL) {
+        fprintf(stderr,
+                "ERROR -> opj_decompress: failed to allocate memory for upsampled components!\n");
+        opj_image_destroy(original);
+        return NULL;
+    }
+
+    l_new_image->x0 = original->x0;
+    l_new_image->x1 = original->x1;
+    l_new_image->y0 = original->y0;
+    l_new_image->y1 = original->y1;
+
+    for (compno = 0U; compno < original->numcomps; ++compno) {
+        opj_image_comp_t* l_new_cmp = &(l_new_image->comps[compno]);
+        opj_image_comp_t* l_org_cmp = &(original->comps[compno]);
+
+        l_new_cmp->factor        = l_org_cmp->factor;
+        l_new_cmp->alpha         = l_org_cmp->alpha;
+        l_new_cmp->resno_decoded = l_org_cmp->resno_decoded;
+
+        if ((l_org_cmp->dx > 1U) || (l_org_cmp->dy > 1U)) {
+            const OPJ_INT32* l_src = l_org_cmp->data;
+            OPJ_INT32*       l_dst = l_new_cmp->data;
+            OPJ_UINT32 y;
+            OPJ_UINT32 xoff, yoff;
+
+            /* need to take into account dx & dy */
+            xoff = l_org_cmp->dx * l_org_cmp->x0 -  original->x0;
+            yoff = l_org_cmp->dy * l_org_cmp->y0 -  original->y0;
+            if ((xoff >= l_org_cmp->dx) || (yoff >= l_org_cmp->dy)) {
+                fprintf(stderr,
+                        "ERROR -> opj_decompress: Invalid image/component parameters found when upsampling\n");
+                opj_image_destroy(original);
+                opj_image_destroy(l_new_image);
+                return NULL;
+            }
+
+            for (y = 0U; y < yoff; ++y) {
+                memset(l_dst, 0U, l_new_cmp->w * sizeof(OPJ_INT32));
+                l_dst += l_new_cmp->w;
+            }
+
+            if (l_new_cmp->h > (l_org_cmp->dy -
+                                1U)) { /* check subtraction overflow for really small images */
+                for (; y < l_new_cmp->h - (l_org_cmp->dy - 1U); y += l_org_cmp->dy) {
+                    OPJ_UINT32 x, dy;
+                    OPJ_UINT32 xorg;
+
+                    xorg = 0U;
+                    for (x = 0U; x < xoff; ++x) {
+                        l_dst[x] = 0;
+                    }
+                    if (l_new_cmp->w > (l_org_cmp->dx -
+                                        1U)) { /* check subtraction overflow for really small images */
+                        for (; x < l_new_cmp->w - (l_org_cmp->dx - 1U); x += l_org_cmp->dx, ++xorg) {
+                            OPJ_UINT32 dx;
+                            for (dx = 0U; dx < l_org_cmp->dx; ++dx) {
+                                l_dst[x + dx] = l_src[xorg];
+                            }
+                        }
+                    }
+                    for (; x < l_new_cmp->w; ++x) {
+                        l_dst[x] = l_src[xorg];
+                    }
+                    l_dst += l_new_cmp->w;
+
+                    for (dy = 1U; dy < l_org_cmp->dy; ++dy) {
+                        memcpy(l_dst, l_dst - l_new_cmp->w, l_new_cmp->w * sizeof(OPJ_INT32));
+                        l_dst += l_new_cmp->w;
+                    }
+                    l_src += l_org_cmp->w;
+                }
+            }
+            if (y < l_new_cmp->h) {
+                OPJ_UINT32 x;
+                OPJ_UINT32 xorg;
+
+                xorg = 0U;
+                for (x = 0U; x < xoff; ++x) {
+                    l_dst[x] = 0;
+                }
+                if (l_new_cmp->w > (l_org_cmp->dx -
+                                    1U)) { /* check subtraction overflow for really small images */
+                    for (; x < l_new_cmp->w - (l_org_cmp->dx - 1U); x += l_org_cmp->dx, ++xorg) {
+                        OPJ_UINT32 dx;
+                        for (dx = 0U; dx < l_org_cmp->dx; ++dx) {
+                            l_dst[x + dx] = l_src[xorg];
+                        }
+                    }
+                }
+                for (; x < l_new_cmp->w; ++x) {
+                    l_dst[x] = l_src[xorg];
+                }
+                l_dst += l_new_cmp->w;
+                ++y;
+                for (; y < l_new_cmp->h; ++y) {
+                    memcpy(l_dst, l_dst - l_new_cmp->w, l_new_cmp->w * sizeof(OPJ_INT32));
+                    l_dst += l_new_cmp->w;
+                }
+            }
+        } else {
+            memcpy(l_new_cmp->data, l_org_cmp->data,
+                   l_org_cmp->w * l_org_cmp->h * sizeof(OPJ_INT32));
+        }
+    }
+    opj_image_destroy(original);
+    return l_new_image;
 }
 
 /* -------------------------------------------------------------------------- */
@@ -1210,406 +1268,427 @@ static opj_image_t* upsample_image_components(opj_image_t* original)
 /* -------------------------------------------------------------------------- */
 int main(int argc, char **argv)
 {
-       opj_decompress_parameters parameters;                   /* decompression parameters */
-       opj_image_t* image = NULL;
-       opj_stream_t *l_stream = NULL;                          /* Stream */
-       opj_codec_t* l_codec = NULL;                            /* Handle to a decompressor */
-       opj_codestream_index_t* cstr_index = NULL;
-
-       OPJ_INT32 num_images, imageno;
-       img_fol_t img_fol;
-       dircnt_t *dirptr = NULL;
-  int failed = 0;
-  OPJ_FLOAT64 t, tCumulative = 0;
-  OPJ_UINT32 numDecompressedImages = 0;
-
-       /* set decoding parameters to default values */
-       set_default_parameters(&parameters);
-
-       /* Initialize img_fol */
-       memset(&img_fol,0,sizeof(img_fol_t));
-
-       /* parse input and get user encoding parameters */
-       if(parse_cmdline_decoder(argc, argv, &parameters,&img_fol) == 1) {
-               failed = 1; goto fin;
-       }
-
-       /* Initialize reading of directory */
-       if(img_fol.set_imgdir==1){      
-               int it_image;
-               num_images=get_num_images(img_fol.imgdirpath);
-
-               dirptr=(dircnt_t*)malloc(sizeof(dircnt_t));
-               if(!dirptr){
-                       destroy_parameters(&parameters);
-                       return EXIT_FAILURE;
-               }
-               dirptr->filename_buf = (char*)malloc((size_t)num_images*OPJ_PATH_LEN*sizeof(char));     /* Stores at max 10 image file names*/
-               if(!dirptr->filename_buf){
-                       failed = 1; goto fin;
-               }
-                               
-               dirptr->filename = (char**) malloc((size_t)num_images*sizeof(char*));
-
-               if(!dirptr->filename){
-                       failed = 1; goto fin;
-               }
-               for(it_image=0;it_image<num_images;it_image++){
-                       dirptr->filename[it_image] = dirptr->filename_buf + it_image*OPJ_PATH_LEN;
-               }
-               
-               if(load_images(dirptr,img_fol.imgdirpath)==1){
-                       failed = 1; goto fin;
-               }
-               if (num_images==0){
-                       fprintf(stdout,"Folder is empty\n");
-                       failed = 1; goto fin;
-               }
-       }else{
-               num_images=1;
-       }
-
-       /*Decoding image one by one*/
-       for(imageno = 0; imageno < num_images ; imageno++)      {
-
-               fprintf(stderr,"\n");
-
-               if(img_fol.set_imgdir==1){
-                       if (get_next_file(imageno, dirptr,&img_fol, &parameters)) {
-                               fprintf(stderr,"skipping file...\n");
-                               destroy_parameters(&parameters);
-                               continue;
-                       }
-               }
-
-               /* read the input file and put it in memory */
-               /* ---------------------------------------- */
-
-               l_stream = opj_stream_create_default_file_stream(parameters.infile,1);
-               if (!l_stream){
-                       fprintf(stderr, "ERROR -> failed to create the stream from the file %s\n", parameters.infile);
-                       failed = 1; goto fin;
-               }
-
-               /* decode the JPEG2000 stream */
-               /* ---------------------- */
-
-               switch(parameters.decod_format) {
-                       case J2K_CFMT:  /* JPEG-2000 codestream */
-                       {
-                               /* Get a decoder handle */
-                               l_codec = opj_create_decompress(OPJ_CODEC_J2K);
-                               break;
-                       }
-                       case JP2_CFMT:  /* JPEG 2000 compressed image data */
-                       {
-                               /* Get a decoder handle */
-                               l_codec = opj_create_decompress(OPJ_CODEC_JP2);
-                               break;
-                       }
-                       case JPT_CFMT:  /* JPEG 2000, JPIP */
-                       {
-                               /* Get a decoder handle */
-                               l_codec = opj_create_decompress(OPJ_CODEC_JPT);
-                               break;
-                       }
-                       default:
-                               fprintf(stderr, "skipping file..\n");
-                               destroy_parameters(&parameters);
-                               opj_stream_destroy(l_stream);
-                               continue;
-               }
-
-               /* catch events using our callbacks and give a local context */         
-               opj_set_info_handler(l_codec, info_callback,00);
-               opj_set_warning_handler(l_codec, warning_callback,00);
-               opj_set_error_handler(l_codec, error_callback,00);
-
-               t = opj_clock();
-
-               /* Setup the decoder decoding parameters using user parameters */
-               if ( !opj_setup_decoder(l_codec, &(parameters.core)) ){
-                       fprintf(stderr, "ERROR -> opj_decompress: failed to setup the decoder\n");
-                       opj_stream_destroy(l_stream);
-                       opj_destroy_codec(l_codec);
-                       failed = 1; goto fin;
-               }
-               
-               if( parameters.num_threads >= 1 && !opj_codec_set_threads(l_codec, parameters.num_threads) ) {
-                       fprintf(stderr, "ERROR -> opj_decompress: failed to set number of threads\n");
-                       opj_stream_destroy(l_stream);
-                       opj_destroy_codec(l_codec);
-                       failed = 1; goto fin;
-               }
-
-               /* Read the main header of the codestream and if necessary the JP2 boxes*/
-               if(! opj_read_header(l_stream, l_codec, &image)){
-                       fprintf(stderr, "ERROR -> opj_decompress: failed to read the header\n");
-                       opj_stream_destroy(l_stream);
-                       opj_destroy_codec(l_codec);
-                       opj_image_destroy(image);
-                       failed = 1; goto fin;
-               }
-
-               if (!parameters.nb_tile_to_decode) {
-                       /* Optional if you want decode the entire image */
-                       if (!opj_set_decode_area(l_codec, image, (OPJ_INT32)parameters.DA_x0,
-                                       (OPJ_INT32)parameters.DA_y0, (OPJ_INT32)parameters.DA_x1, (OPJ_INT32)parameters.DA_y1)){
-                               fprintf(stderr, "ERROR -> opj_decompress: failed to set the decoded area\n");
-                               opj_stream_destroy(l_stream);
-                               opj_destroy_codec(l_codec);
-                               opj_image_destroy(image);
-                               failed = 1; goto fin;
-                       }
-
-                       /* Get the decoded image */
-                       if (!(opj_decode(l_codec, l_stream, image) && opj_end_decompress(l_codec,       l_stream))) {
-                               fprintf(stderr,"ERROR -> opj_decompress: failed to decode image!\n");
-                               opj_destroy_codec(l_codec);
-                               opj_stream_destroy(l_stream);
-                               opj_image_destroy(image);
-                               failed = 1; goto fin;
-                       }
-               }
-               else {
-
-                       /* It is just here to illustrate how to use the resolution after set parameters */
-                       /*if (!opj_set_decoded_resolution_factor(l_codec, 5)) {
-                               fprintf(stderr, "ERROR -> opj_decompress: failed to set the resolution factor tile!\n");
-                               opj_destroy_codec(l_codec);
-                               opj_stream_destroy(l_stream);
-                               opj_image_destroy(image);
-                               failed = 1; goto fin;
-                       }*/
-
-                       if (!opj_get_decoded_tile(l_codec, l_stream, image, parameters.tile_index)) {
-                               fprintf(stderr, "ERROR -> opj_decompress: failed to decode tile!\n");
-                               opj_destroy_codec(l_codec);
-                               opj_stream_destroy(l_stream);
-                               opj_image_destroy(image);
-                               failed = 1; goto fin;
-                       }
-                       fprintf(stdout, "tile %d is decoded!\n\n", parameters.tile_index);
-               }
-
-               tCumulative += opj_clock() - t;
-               numDecompressedImages++;
-
-               /* Close the byte stream */
-               opj_stream_destroy(l_stream);
-
-               if( image->color_space != OPJ_CLRSPC_SYCC 
-                       && image->numcomps == 3 && image->comps[0].dx == image->comps[0].dy
-                       && image->comps[1].dx != 1 )
-                       image->color_space = OPJ_CLRSPC_SYCC;
-               else if (image->numcomps <= 2)
-                       image->color_space = OPJ_CLRSPC_GRAY;
-
-               if(image->color_space == OPJ_CLRSPC_SYCC){
-                       color_sycc_to_rgb(image);
-               }
-               else if((image->color_space == OPJ_CLRSPC_CMYK) && (parameters.cod_format != TIF_DFMT)){
-                       color_cmyk_to_rgb(image);
-               }
-               else if(image->color_space == OPJ_CLRSPC_EYCC){
-                       color_esycc_to_rgb(image);
-               }
-               
-               if(image->icc_profile_buf) {
+    opj_decompress_parameters parameters;           /* decompression parameters */
+    opj_image_t* image = NULL;
+    opj_stream_t *l_stream = NULL;              /* Stream */
+    opj_codec_t* l_codec = NULL;                /* Handle to a decompressor */
+    opj_codestream_index_t* cstr_index = NULL;
+
+    OPJ_INT32 num_images, imageno;
+    img_fol_t img_fol;
+    dircnt_t *dirptr = NULL;
+    int failed = 0;
+    OPJ_FLOAT64 t, tCumulative = 0;
+    OPJ_UINT32 numDecompressedImages = 0;
+
+    /* set decoding parameters to default values */
+    set_default_parameters(&parameters);
+
+    /* Initialize img_fol */
+    memset(&img_fol, 0, sizeof(img_fol_t));
+
+    /* parse input and get user encoding parameters */
+    if (parse_cmdline_decoder(argc, argv, &parameters, &img_fol) == 1) {
+        failed = 1;
+        goto fin;
+    }
+
+    /* Initialize reading of directory */
+    if (img_fol.set_imgdir == 1) {
+        int it_image;
+        num_images = get_num_images(img_fol.imgdirpath);
+
+        dirptr = (dircnt_t*)malloc(sizeof(dircnt_t));
+        if (!dirptr) {
+            destroy_parameters(&parameters);
+            return EXIT_FAILURE;
+        }
+        dirptr->filename_buf = (char*)malloc((size_t)num_images * OPJ_PATH_LEN * sizeof(
+                char)); /* Stores at max 10 image file names*/
+        if (!dirptr->filename_buf) {
+            failed = 1;
+            goto fin;
+        }
+
+        dirptr->filename = (char**) malloc((size_t)num_images * sizeof(char*));
+
+        if (!dirptr->filename) {
+            failed = 1;
+            goto fin;
+        }
+        for (it_image = 0; it_image < num_images; it_image++) {
+            dirptr->filename[it_image] = dirptr->filename_buf + it_image * OPJ_PATH_LEN;
+        }
+
+        if (load_images(dirptr, img_fol.imgdirpath) == 1) {
+            failed = 1;
+            goto fin;
+        }
+        if (num_images == 0) {
+            fprintf(stdout, "Folder is empty\n");
+            failed = 1;
+            goto fin;
+        }
+    } else {
+        num_images = 1;
+    }
+
+    /*Decoding image one by one*/
+    for (imageno = 0; imageno < num_images ; imageno++)  {
+
+        fprintf(stderr, "\n");
+
+        if (img_fol.set_imgdir == 1) {
+            if (get_next_file(imageno, dirptr, &img_fol, &parameters)) {
+                fprintf(stderr, "skipping file...\n");
+                destroy_parameters(&parameters);
+                continue;
+            }
+        }
+
+        /* read the input file and put it in memory */
+        /* ---------------------------------------- */
+
+        l_stream = opj_stream_create_default_file_stream(parameters.infile, 1);
+        if (!l_stream) {
+            fprintf(stderr, "ERROR -> failed to create the stream from the file %s\n",
+                    parameters.infile);
+            failed = 1;
+            goto fin;
+        }
+
+        /* decode the JPEG2000 stream */
+        /* ---------------------- */
+
+        switch (parameters.decod_format) {
+        case J2K_CFMT: { /* JPEG-2000 codestream */
+            /* Get a decoder handle */
+            l_codec = opj_create_decompress(OPJ_CODEC_J2K);
+            break;
+        }
+        case JP2_CFMT: { /* JPEG 2000 compressed image data */
+            /* Get a decoder handle */
+            l_codec = opj_create_decompress(OPJ_CODEC_JP2);
+            break;
+        }
+        case JPT_CFMT: { /* JPEG 2000, JPIP */
+            /* Get a decoder handle */
+            l_codec = opj_create_decompress(OPJ_CODEC_JPT);
+            break;
+        }
+        default:
+            fprintf(stderr, "skipping file..\n");
+            destroy_parameters(&parameters);
+            opj_stream_destroy(l_stream);
+            continue;
+        }
+
+        /* catch events using our callbacks and give a local context */
+        opj_set_info_handler(l_codec, info_callback, 00);
+        opj_set_warning_handler(l_codec, warning_callback, 00);
+        opj_set_error_handler(l_codec, error_callback, 00);
+
+        t = opj_clock();
+
+        /* Setup the decoder decoding parameters using user parameters */
+        if (!opj_setup_decoder(l_codec, &(parameters.core))) {
+            fprintf(stderr, "ERROR -> opj_decompress: failed to setup the decoder\n");
+            opj_stream_destroy(l_stream);
+            opj_destroy_codec(l_codec);
+            failed = 1;
+            goto fin;
+        }
+
+        if (parameters.num_threads >= 1 &&
+                !opj_codec_set_threads(l_codec, parameters.num_threads)) {
+            fprintf(stderr, "ERROR -> opj_decompress: failed to set number of threads\n");
+            opj_stream_destroy(l_stream);
+            opj_destroy_codec(l_codec);
+            failed = 1;
+            goto fin;
+        }
+
+        /* Read the main header of the codestream and if necessary the JP2 boxes*/
+        if (! opj_read_header(l_stream, l_codec, &image)) {
+            fprintf(stderr, "ERROR -> opj_decompress: failed to read the header\n");
+            opj_stream_destroy(l_stream);
+            opj_destroy_codec(l_codec);
+            opj_image_destroy(image);
+            failed = 1;
+            goto fin;
+        }
+
+        if (!parameters.nb_tile_to_decode) {
+            /* Optional if you want decode the entire image */
+            if (!opj_set_decode_area(l_codec, image, (OPJ_INT32)parameters.DA_x0,
+                                     (OPJ_INT32)parameters.DA_y0, (OPJ_INT32)parameters.DA_x1,
+                                     (OPJ_INT32)parameters.DA_y1)) {
+                fprintf(stderr, "ERROR -> opj_decompress: failed to set the decoded area\n");
+                opj_stream_destroy(l_stream);
+                opj_destroy_codec(l_codec);
+                opj_image_destroy(image);
+                failed = 1;
+                goto fin;
+            }
+
+            /* Get the decoded image */
+            if (!(opj_decode(l_codec, l_stream, image) &&
+                    opj_end_decompress(l_codec,   l_stream))) {
+                fprintf(stderr, "ERROR -> opj_decompress: failed to decode image!\n");
+                opj_destroy_codec(l_codec);
+                opj_stream_destroy(l_stream);
+                opj_image_destroy(image);
+                failed = 1;
+                goto fin;
+            }
+        } else {
+
+            /* It is just here to illustrate how to use the resolution after set parameters */
+            /*if (!opj_set_decoded_resolution_factor(l_codec, 5)) {
+                fprintf(stderr, "ERROR -> opj_decompress: failed to set the resolution factor tile!\n");
+                opj_destroy_codec(l_codec);
+                opj_stream_destroy(l_stream);
+                opj_image_destroy(image);
+                failed = 1; goto fin;
+            }*/
+
+            if (!opj_get_decoded_tile(l_codec, l_stream, image, parameters.tile_index)) {
+                fprintf(stderr, "ERROR -> opj_decompress: failed to decode tile!\n");
+                opj_destroy_codec(l_codec);
+                opj_stream_destroy(l_stream);
+                opj_image_destroy(image);
+                failed = 1;
+                goto fin;
+            }
+            fprintf(stdout, "tile %d is decoded!\n\n", parameters.tile_index);
+        }
+
+        tCumulative += opj_clock() - t;
+        numDecompressedImages++;
+
+        /* Close the byte stream */
+        opj_stream_destroy(l_stream);
+
+        if (image->color_space != OPJ_CLRSPC_SYCC
+                && image->numcomps == 3 && image->comps[0].dx == image->comps[0].dy
+                && image->comps[1].dx != 1) {
+            image->color_space = OPJ_CLRSPC_SYCC;
+        } else if (image->numcomps <= 2) {
+            image->color_space = OPJ_CLRSPC_GRAY;
+        }
+
+        if (image->color_space == OPJ_CLRSPC_SYCC) {
+            color_sycc_to_rgb(image);
+        } else if ((image->color_space == OPJ_CLRSPC_CMYK) &&
+                   (parameters.cod_format != TIF_DFMT)) {
+            color_cmyk_to_rgb(image);
+        } else if (image->color_space == OPJ_CLRSPC_EYCC) {
+            color_esycc_to_rgb(image);
+        }
+
+        if (image->icc_profile_buf) {
 #if defined(OPJ_HAVE_LIBLCMS1) || defined(OPJ_HAVE_LIBLCMS2)
-                       if(image->icc_profile_len)
-                        color_apply_icc_profile(image);
-                       else
-                        color_cielab_to_rgb(image);
+            if (image->icc_profile_len) {
+                color_apply_icc_profile(image);
+            } else {
+                color_cielab_to_rgb(image);
+            }
 #endif
-                       free(image->icc_profile_buf);
-                       image->icc_profile_buf = NULL; image->icc_profile_len = 0;
-               }
-               
-               /* Force output precision */
-               /* ---------------------- */
-               if (parameters.precision != NULL)
-               {
-                       OPJ_UINT32 compno;
-                       for (compno = 0; compno < image->numcomps; ++compno)
-                       {
-                               OPJ_UINT32 precno = compno;
-                               OPJ_UINT32 prec;
-                               
-                               if (precno >= parameters.nb_precision) {
-                                       precno = parameters.nb_precision - 1U;
-                               }
-                               
-                               prec = parameters.precision[precno].prec;
-                               if (prec == 0) {
-                                       prec = image->comps[compno].prec;
-                               }
-                               
-                               switch (parameters.precision[precno].mode) {
-                                       case OPJ_PREC_MODE_CLIP:
-                                               clip_component(&(image->comps[compno]), prec);
-                                               break;
-                                       case OPJ_PREC_MODE_SCALE:
-                                               scale_component(&(image->comps[compno]), prec);
-                                               break;
-                                       default:
-                                               break;
-                               }
-                               
-                       }
-               }
-               
-               /* Upsample components */
-               /* ------------------- */
-               if (parameters.upsample)
-               {
-                       image = upsample_image_components(image);
-                       if (image == NULL) {
-                               fprintf(stderr, "ERROR -> opj_decompress: failed to upsample image components!\n");
-                               opj_destroy_codec(l_codec);
-                               failed = 1; goto fin;
-                       }
-               }
-               
-               /* Force RGB output */
-               /* ---------------- */
-               if (parameters.force_rgb)
-               {
-                       switch (image->color_space) {
-                               case OPJ_CLRSPC_SRGB:
-                                       break;
-                               case OPJ_CLRSPC_GRAY:
-                                       image = convert_gray_to_rgb(image);
-                                       break;
-                               default:
-                                       fprintf(stderr, "ERROR -> opj_decompress: don't know how to convert image to RGB colorspace!\n");
-                                       opj_image_destroy(image);
-                                       image = NULL;
-                                       break;
-                       }
-                       if (image == NULL) {
-                               fprintf(stderr, "ERROR -> opj_decompress: failed to convert to RGB image!\n");
-                               opj_destroy_codec(l_codec);
-                               failed = 1; goto fin;
-                       }
-               }
-
-               /* create output image */
-               /* ------------------- */
-               switch (parameters.cod_format) {
-               case PXM_DFMT:                  /* PNM PGM PPM */
-                       if (imagetopnm(image, parameters.outfile, parameters.split_pnm)) {
-                fprintf(stderr,"[ERROR] Outfile %s not generated\n",parameters.outfile);
-        failed = 1;
-                       }
-                       else {
-                fprintf(stdout,"[INFO] Generated Outfile %s\n",parameters.outfile);
-                       }
-                       break;
-
-               case PGX_DFMT:                  /* PGX */
-                       if(imagetopgx(image, parameters.outfile)){
-                fprintf(stderr,"[ERROR] Outfile %s not generated\n",parameters.outfile);
-        failed = 1;
-                       }
-                       else {
-                fprintf(stdout,"[INFO] Generated Outfile %s\n",parameters.outfile);
-                       }
-                       break;
-
-               case BMP_DFMT:                  /* BMP */
-                       if(imagetobmp(image, parameters.outfile)){
-                fprintf(stderr,"[ERROR] Outfile %s not generated\n",parameters.outfile);
-        failed = 1;
-                       }
-                       else {
-                fprintf(stdout,"[INFO] Generated Outfile %s\n",parameters.outfile);
-                       }
-                       break;
+            free(image->icc_profile_buf);
+            image->icc_profile_buf = NULL;
+            image->icc_profile_len = 0;
+        }
+
+        /* Force output precision */
+        /* ---------------------- */
+        if (parameters.precision != NULL) {
+            OPJ_UINT32 compno;
+            for (compno = 0; compno < image->numcomps; ++compno) {
+                OPJ_UINT32 precno = compno;
+                OPJ_UINT32 prec;
+
+                if (precno >= parameters.nb_precision) {
+                    precno = parameters.nb_precision - 1U;
+                }
+
+                prec = parameters.precision[precno].prec;
+                if (prec == 0) {
+                    prec = image->comps[compno].prec;
+                }
+
+                switch (parameters.precision[precno].mode) {
+                case OPJ_PREC_MODE_CLIP:
+                    clip_component(&(image->comps[compno]), prec);
+                    break;
+                case OPJ_PREC_MODE_SCALE:
+                    scale_component(&(image->comps[compno]), prec);
+                    break;
+                default:
+                    break;
+                }
+
+            }
+        }
+
+        /* Upsample components */
+        /* ------------------- */
+        if (parameters.upsample) {
+            image = upsample_image_components(image);
+            if (image == NULL) {
+                fprintf(stderr,
+                        "ERROR -> opj_decompress: failed to upsample image components!\n");
+                opj_destroy_codec(l_codec);
+                failed = 1;
+                goto fin;
+            }
+        }
+
+        /* Force RGB output */
+        /* ---------------- */
+        if (parameters.force_rgb) {
+            switch (image->color_space) {
+            case OPJ_CLRSPC_SRGB:
+                break;
+            case OPJ_CLRSPC_GRAY:
+                image = convert_gray_to_rgb(image);
+                break;
+            default:
+                fprintf(stderr,
+                        "ERROR -> opj_decompress: don't know how to convert image to RGB colorspace!\n");
+                opj_image_destroy(image);
+                image = NULL;
+                break;
+            }
+            if (image == NULL) {
+                fprintf(stderr, "ERROR -> opj_decompress: failed to convert to RGB image!\n");
+                opj_destroy_codec(l_codec);
+                failed = 1;
+                goto fin;
+            }
+        }
+
+        /* create output image */
+        /* ------------------- */
+        switch (parameters.cod_format) {
+        case PXM_DFMT:          /* PNM PGM PPM */
+            if (imagetopnm(image, parameters.outfile, parameters.split_pnm)) {
+                fprintf(stderr, "[ERROR] Outfile %s not generated\n", parameters.outfile);
+                failed = 1;
+            } else {
+                fprintf(stdout, "[INFO] Generated Outfile %s\n", parameters.outfile);
+            }
+            break;
+
+        case PGX_DFMT:          /* PGX */
+            if (imagetopgx(image, parameters.outfile)) {
+                fprintf(stderr, "[ERROR] Outfile %s not generated\n", parameters.outfile);
+                failed = 1;
+            } else {
+                fprintf(stdout, "[INFO] Generated Outfile %s\n", parameters.outfile);
+            }
+            break;
+
+        case BMP_DFMT:          /* BMP */
+            if (imagetobmp(image, parameters.outfile)) {
+                fprintf(stderr, "[ERROR] Outfile %s not generated\n", parameters.outfile);
+                failed = 1;
+            } else {
+                fprintf(stdout, "[INFO] Generated Outfile %s\n", parameters.outfile);
+            }
+            break;
 #ifdef OPJ_HAVE_LIBTIFF
-               case TIF_DFMT:                  /* TIFF */
-                       if(imagetotif(image, parameters.outfile)){
-                fprintf(stderr,"[ERROR] Outfile %s not generated\n",parameters.outfile);
-        failed = 1;
-                       }
-                       else {
-                fprintf(stdout,"[INFO] Generated Outfile %s\n",parameters.outfile);
-                       }
-                       break;
+        case TIF_DFMT:          /* TIFF */
+            if (imagetotif(image, parameters.outfile)) {
+                fprintf(stderr, "[ERROR] Outfile %s not generated\n", parameters.outfile);
+                failed = 1;
+            } else {
+                fprintf(stdout, "[INFO] Generated Outfile %s\n", parameters.outfile);
+            }
+            break;
 #endif /* OPJ_HAVE_LIBTIFF */
-               case RAW_DFMT:                  /* RAW */
-                       if(imagetoraw(image, parameters.outfile)){
-                fprintf(stderr,"[ERROR] Error generating raw file. Outfile %s not generated\n",parameters.outfile);
-        failed = 1;
-                       }
-                       else {
-                fprintf(stdout,"[INFO] Generated Outfile %s\n",parameters.outfile);
-                       }
-                       break;
-
-               case RAWL_DFMT:                 /* RAWL */
-                       if(imagetorawl(image, parameters.outfile)){
-                fprintf(stderr,"[ERROR] Error generating rawl file. Outfile %s not generated\n",parameters.outfile);
-        failed = 1;
-                       }
-                       else {
-                fprintf(stdout,"[INFO] Generated Outfile %s\n",parameters.outfile);
-                       }
-                       break;
-
-               case TGA_DFMT:                  /* TGA */
-                       if(imagetotga(image, parameters.outfile)){
-                fprintf(stderr,"[ERROR] Error generating tga file. Outfile %s not generated\n",parameters.outfile);
-        failed = 1;
-                       }
-                       else {
-                fprintf(stdout,"[INFO] Generated Outfile %s\n",parameters.outfile);
-                       }
-                       break;
+        case RAW_DFMT:          /* RAW */
+            if (imagetoraw(image, parameters.outfile)) {
+                fprintf(stderr, "[ERROR] Error generating raw file. Outfile %s not generated\n",
+                        parameters.outfile);
+                failed = 1;
+            } else {
+                fprintf(stdout, "[INFO] Generated Outfile %s\n", parameters.outfile);
+            }
+            break;
+
+        case RAWL_DFMT:         /* RAWL */
+            if (imagetorawl(image, parameters.outfile)) {
+                fprintf(stderr,
+                        "[ERROR] Error generating rawl file. Outfile %s not generated\n",
+                        parameters.outfile);
+                failed = 1;
+            } else {
+                fprintf(stdout, "[INFO] Generated Outfile %s\n", parameters.outfile);
+            }
+            break;
+
+        case TGA_DFMT:          /* TGA */
+            if (imagetotga(image, parameters.outfile)) {
+                fprintf(stderr, "[ERROR] Error generating tga file. Outfile %s not generated\n",
+                        parameters.outfile);
+                failed = 1;
+            } else {
+                fprintf(stdout, "[INFO] Generated Outfile %s\n", parameters.outfile);
+            }
+            break;
 #ifdef OPJ_HAVE_LIBPNG
-               case PNG_DFMT:                  /* PNG */
-                       if(imagetopng(image, parameters.outfile)){
-                fprintf(stderr,"[ERROR] Error generating png file. Outfile %s not generated\n",parameters.outfile);
-        failed = 1;
-                       }
-                       else {
-                fprintf(stdout,"[INFO] Generated Outfile %s\n",parameters.outfile);
-                       }
-                       break;
+        case PNG_DFMT:          /* PNG */
+            if (imagetopng(image, parameters.outfile)) {
+                fprintf(stderr, "[ERROR] Error generating png file. Outfile %s not generated\n",
+                        parameters.outfile);
+                failed = 1;
+            } else {
+                fprintf(stdout, "[INFO] Generated Outfile %s\n", parameters.outfile);
+            }
+            break;
 #endif /* OPJ_HAVE_LIBPNG */
-/* Can happen if output file is TIFF or PNG
- * and OPJ_HAVE_LIBTIF or OPJ_HAVE_LIBPNG is undefined
-*/
-                       default:
-                fprintf(stderr,"[ERROR] Outfile %s not generated\n",parameters.outfile);
-        failed = 1;
-               }
+        /* Can happen if output file is TIFF or PNG
        * and OPJ_HAVE_LIBTIF or OPJ_HAVE_LIBPNG is undefined
+        */
+        default:
+            fprintf(stderr, "[ERROR] Outfile %s not generated\n", parameters.outfile);
+            failed = 1;
+        }
 
-               /* free remaining structures */
-               if (l_codec) {
-                       opj_destroy_codec(l_codec);
-               }
+        /* free remaining structures */
+        if (l_codec) {
+            opj_destroy_codec(l_codec);
+        }
 
 
-               /* free image data structure */
-               opj_image_destroy(image);
+        /* free image data structure */
+        opj_image_destroy(image);
 
-               /* destroy the codestream index */
-               opj_destroy_cstr_index(&cstr_index);
+        /* destroy the codestream index */
+        opj_destroy_cstr_index(&cstr_index);
 
-               if(failed) (void)remove(parameters.outfile); /* ignore return value */
-       }
+        if (failed) {
+            (void)remove(parameters.outfile);    /* ignore return value */
+        }
+    }
 fin:
-       destroy_parameters(&parameters);
-       if(failed && img_fol.imgdirpath) free(img_fol.imgdirpath);
-       if(dirptr){
-               if(dirptr->filename) free(dirptr->filename);
-               if(dirptr->filename_buf) free(dirptr->filename_buf);
-               free(dirptr);
-       }
-       if (numDecompressedImages) {
-               fprintf(stdout, "decode time: %d ms\n", (int)( (tCumulative * 1000.0) / (OPJ_FLOAT64)numDecompressedImages));
-       }
-       return failed ? EXIT_FAILURE : EXIT_SUCCESS;
+    destroy_parameters(&parameters);
+    if (failed && img_fol.imgdirpath) {
+        free(img_fol.imgdirpath);
+    }
+    if (dirptr) {
+        if (dirptr->filename) {
+            free(dirptr->filename);
+        }
+        if (dirptr->filename_buf) {
+            free(dirptr->filename_buf);
+        }
+        free(dirptr);
+    }
+    if (numDecompressedImages) {
+        fprintf(stdout, "decode time: %d ms\n",
+                (int)((tCumulative * 1000.0) / (OPJ_FLOAT64)numDecompressedImages));
+    }
+    return failed ? EXIT_FAILURE : EXIT_SUCCESS;
 }
 /*end main()*/
index d62eea14f17f38963a0d583c7d4d066e766f2af2..c286b02a654295b1f5e86c1b03b8d562f9f8dc35 100644 (file)
@@ -1,11 +1,11 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
  * Copyright (c) 2010, Mathieu Malaterre, GDCM
- * Copyright (c) 2011-2012, Centre National d'Etudes Spatiales (CNES), France 
+ * Copyright (c) 2011-2012, Centre National d'Etudes Spatiales (CNES), France
  * Copyright (c) 2012, CS Systemes d'Information, France
  * All rights reserved.
  *
 #include "format_defs.h"
 #include "opj_string.h"
 
-typedef struct dircnt{
-       /** Buffer for holding images read from Directory*/
-       char *filename_buf;
-       /** Pointer to the buffer*/
-       char **filename;
-}dircnt_t;
+typedef struct dircnt {
+    /** Buffer for holding images read from Directory*/
+    char *filename_buf;
+    /** Pointer to the buffer*/
+    char **filename;
+} dircnt_t;
 
 
-typedef struct img_folder{
-       /** The directory path of the folder containing input images*/
-       char *imgdirpath;
-       /** Output format*/
-       const char *out_format;
-       /** Enable option*/
-       char set_imgdir;
-       /** Enable Cod Format for output*/
-       char set_out_format;
+typedef struct img_folder {
+    /** The directory path of the folder containing input images*/
+    char *imgdirpath;
+    /** Output format*/
+    const char *out_format;
+    /** Enable option*/
+    char set_imgdir;
+    /** Enable Cod Format for output*/
+    char set_out_format;
 
-  int flag;
-}img_fol_t;
+    int flag;
+} img_fol_t;
 
 /* -------------------------------------------------------------------------- */
 /* Declarations                                                               */
 static int get_num_images(char *imgdirpath);
 static int load_images(dircnt_t *dirptr, char *imgdirpath);
 static int get_file_format(const char *filename);
-static char get_next_file(int imageno,dircnt_t *dirptr,img_fol_t *img_fol, opj_dparameters_t *parameters);
+static char get_next_file(int imageno, dircnt_t *dirptr, img_fol_t *img_fol,
+                          opj_dparameters_t *parameters);
 static int infile_format(const char *fname);
 
-static int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *parameters,img_fol_t *img_fol);
+static int parse_cmdline_decoder(int argc, char **argv,
+                                 opj_dparameters_t *parameters, img_fol_t *img_fol);
 
 /* -------------------------------------------------------------------------- */
-static void decode_help_display(void) {
-    fprintf(stdout,"\nThis is the opj_dump utility from the OpenJPEG project.\n"
+static void decode_help_display(void)
+{
+    fprintf(stdout, "\nThis is the opj_dump utility from the OpenJPEG project.\n"
             "It dumps JPEG 2000 codestream info to stdout or a given file.\n"
-            "It has been compiled against openjp2 library v%s.\n\n",opj_version());
-
-    fprintf(stdout,"Parameters:\n");
-    fprintf(stdout,"-----------\n");
-    fprintf(stdout,"\n");
-    fprintf(stdout,"  -ImgDir <directory>\n");
-       fprintf(stdout,"        Image file Directory path \n");
-       fprintf(stdout,"  -i <compressed file>\n");
-       fprintf(stdout,"    REQUIRED only if an Input image directory not specified\n");
-       fprintf(stdout,"    Currently accepts J2K-files, JP2-files and JPT-files. The file type\n");
-       fprintf(stdout,"    is identified based on its suffix.\n");
-       fprintf(stdout,"  -o <output file>\n");
-       fprintf(stdout,"    OPTIONAL\n");
-       fprintf(stdout,"    Output file where file info will be dump.\n");
-       fprintf(stdout,"    By default it will be in the stdout.\n");
-    fprintf(stdout,"  -v "); /* FIXME WIP_MSD */
-       fprintf(stdout,"    OPTIONAL\n");
-    fprintf(stdout,"    Enable informative messages\n");
-    fprintf(stdout,"    By default verbose mode is off.\n");
-       fprintf(stdout,"\n");
+            "It has been compiled against openjp2 library v%s.\n\n", opj_version());
+
+    fprintf(stdout, "Parameters:\n");
+    fprintf(stdout, "-----------\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "  -ImgDir <directory>\n");
+    fprintf(stdout, "  Image file Directory path \n");
+    fprintf(stdout, "  -i <compressed file>\n");
+    fprintf(stdout,
+            "    REQUIRED only if an Input image directory not specified\n");
+    fprintf(stdout,
+            "    Currently accepts J2K-files, JP2-files and JPT-files. The file type\n");
+    fprintf(stdout, "    is identified based on its suffix.\n");
+    fprintf(stdout, "  -o <output file>\n");
+    fprintf(stdout, "    OPTIONAL\n");
+    fprintf(stdout, "    Output file where file info will be dump.\n");
+    fprintf(stdout, "    By default it will be in the stdout.\n");
+    fprintf(stdout, "  -v "); /* FIXME WIP_MSD */
+    fprintf(stdout, "    OPTIONAL\n");
+    fprintf(stdout, "    Enable informative messages\n");
+    fprintf(stdout, "    By default verbose mode is off.\n");
+    fprintf(stdout, "\n");
 }
 
 /* -------------------------------------------------------------------------- */
-static int get_num_images(char *imgdirpath){
-       DIR *dir;
-       struct dirent* content; 
-       int num_images = 0;
-
-       /*Reading the input images from given input directory*/
-
-       dir= opendir(imgdirpath);
-       if(!dir){
-               fprintf(stderr,"Could not open Folder %s\n",imgdirpath);
-               return 0;
-       }
-       
-       while((content=readdir(dir))!=NULL){
-               if(strcmp(".",content->d_name)==0 || strcmp("..",content->d_name)==0 )
-                       continue;
-               num_images++;
-       }
-       closedir(dir);
-       return num_images;
+static int get_num_images(char *imgdirpath)
+{
+    DIR *dir;
+    struct dirent* content;
+    int num_images = 0;
+
+    /*Reading the input images from given input directory*/
+
+    dir = opendir(imgdirpath);
+    if (!dir) {
+        fprintf(stderr, "Could not open Folder %s\n", imgdirpath);
+        return 0;
+    }
+
+    while ((content = readdir(dir)) != NULL) {
+        if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) {
+            continue;
+        }
+        num_images++;
+    }
+    closedir(dir);
+    return num_images;
 }
 
 /* -------------------------------------------------------------------------- */
-static int load_images(dircnt_t *dirptr, char *imgdirpath){
-       DIR *dir;
-       struct dirent* content; 
-       int i = 0;
-
-       /*Reading the input images from given input directory*/
-
-       dir= opendir(imgdirpath);
-       if(!dir){
-               fprintf(stderr,"Could not open Folder %s\n",imgdirpath);
-               return 1;
-       }else   {
-               fprintf(stderr,"Folder opened successfully\n");
-       }
-       
-       while((content=readdir(dir))!=NULL){
-               if(strcmp(".",content->d_name)==0 || strcmp("..",content->d_name)==0 )
-                       continue;
-
-               strcpy(dirptr->filename[i],content->d_name);
-               i++;
-       }
-       closedir(dir);
-       return 0;       
+static int load_images(dircnt_t *dirptr, char *imgdirpath)
+{
+    DIR *dir;
+    struct dirent* content;
+    int i = 0;
+
+    /*Reading the input images from given input directory*/
+
+    dir = opendir(imgdirpath);
+    if (!dir) {
+        fprintf(stderr, "Could not open Folder %s\n", imgdirpath);
+        return 1;
+    } else   {
+        fprintf(stderr, "Folder opened successfully\n");
+    }
+
+    while ((content = readdir(dir)) != NULL) {
+        if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) {
+            continue;
+        }
+
+        strcpy(dirptr->filename[i], content->d_name);
+        i++;
+    }
+    closedir(dir);
+    return 0;
 }
 
 /* -------------------------------------------------------------------------- */
-static int get_file_format(const char *filename) {
-       unsigned int i;
-       static const char *extension[] = {"pgx", "pnm", "pgm", "ppm", "bmp","tif", "raw", "tga", "png", "j2k", "jp2", "jpt", "j2c", "jpc"  };
-       static const int format[] = { PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, TIF_DFMT, RAW_DFMT, TGA_DFMT, PNG_DFMT, J2K_CFMT, JP2_CFMT, JPT_CFMT, J2K_CFMT, J2K_CFMT };
-       const char *ext = strrchr(filename, '.');
-       if (ext == NULL)
-               return -1;
-       ext++;
-       if(ext) {
-               for(i = 0; i < sizeof(format)/sizeof(*format); i++) {
-                       if(_strnicmp(ext, extension[i], 3) == 0) {
-                               return format[i];
-                       }
-               }
-       }
-
-       return -1;
+static int get_file_format(const char *filename)
+{
+    unsigned int i;
+    static const char *extension[] = {"pgx", "pnm", "pgm", "ppm", "bmp", "tif", "raw", "tga", "png", "j2k", "jp2", "jpt", "j2c", "jpc"  };
+    static const int format[] = { PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, TIF_DFMT, RAW_DFMT, TGA_DFMT, PNG_DFMT, J2K_CFMT, JP2_CFMT, JPT_CFMT, J2K_CFMT, J2K_CFMT };
+    const char *ext = strrchr(filename, '.');
+    if (ext == NULL) {
+        return -1;
+    }
+    ext++;
+    if (ext) {
+        for (i = 0; i < sizeof(format) / sizeof(*format); i++) {
+            if (_strnicmp(ext, extension[i], 3) == 0) {
+                return format[i];
+            }
+        }
+    }
+
+    return -1;
 }
 
 /* -------------------------------------------------------------------------- */
-static char get_next_file(int imageno,dircnt_t *dirptr,img_fol_t *img_fol, opj_dparameters_t *parameters){
-       char image_filename[OPJ_PATH_LEN], infilename[OPJ_PATH_LEN],outfilename[OPJ_PATH_LEN],temp_ofname[OPJ_PATH_LEN];
-       char *temp_p, temp1[OPJ_PATH_LEN]="";
-
-       strcpy(image_filename,dirptr->filename[imageno]);
-       fprintf(stderr,"File Number %d \"%s\"\n",imageno,image_filename);
-       parameters->decod_format = get_file_format(image_filename);
-       if (parameters->decod_format == -1)
-               return 1;
-       sprintf(infilename,"%s/%s",img_fol->imgdirpath,image_filename);
-       if (opj_strcpy_s(parameters->infile, sizeof(parameters->infile), infilename) != 0) {
-               return 1;
-       }
-
-       /*Set output file*/
-       strcpy(temp_ofname,strtok(image_filename,"."));
-       while((temp_p = strtok(NULL,".")) != NULL){
-               strcat(temp_ofname,temp1);
-               sprintf(temp1,".%s",temp_p);
-       }
-       if(img_fol->set_out_format==1){
-               sprintf(outfilename,"%s/%s.%s",img_fol->imgdirpath,temp_ofname,img_fol->out_format);
-               if (opj_strcpy_s(parameters->outfile, sizeof(parameters->outfile), outfilename) != 0) {
-                       return 1;
-               }
-       }
-       return 0;
+static char get_next_file(int imageno, dircnt_t *dirptr, img_fol_t *img_fol,
+                          opj_dparameters_t *parameters)
+{
+    char image_filename[OPJ_PATH_LEN], infilename[OPJ_PATH_LEN],
+         outfilename[OPJ_PATH_LEN], temp_ofname[OPJ_PATH_LEN];
+    char *temp_p, temp1[OPJ_PATH_LEN] = "";
+
+    strcpy(image_filename, dirptr->filename[imageno]);
+    fprintf(stderr, "File Number %d \"%s\"\n", imageno, image_filename);
+    parameters->decod_format = get_file_format(image_filename);
+    if (parameters->decod_format == -1) {
+        return 1;
+    }
+    sprintf(infilename, "%s/%s", img_fol->imgdirpath, image_filename);
+    if (opj_strcpy_s(parameters->infile, sizeof(parameters->infile),
+                     infilename) != 0) {
+        return 1;
+    }
+
+    /*Set output file*/
+    strcpy(temp_ofname, strtok(image_filename, "."));
+    while ((temp_p = strtok(NULL, ".")) != NULL) {
+        strcat(temp_ofname, temp1);
+        sprintf(temp1, ".%s", temp_p);
+    }
+    if (img_fol->set_out_format == 1) {
+        sprintf(outfilename, "%s/%s.%s", img_fol->imgdirpath, temp_ofname,
+                img_fol->out_format);
+        if (opj_strcpy_s(parameters->outfile, sizeof(parameters->outfile),
+                         outfilename) != 0) {
+            return 1;
+        }
+    }
+    return 0;
 }
 
 /* -------------------------------------------------------------------------- */
@@ -224,172 +242,176 @@ static char get_next_file(int imageno,dircnt_t *dirptr,img_fol_t *img_fol, opj_d
 
 static int infile_format(const char *fname)
 {
-       FILE *reader;
-       const char *s, *magic_s;
-       int ext_format, magic_format;
-       unsigned char buf[12];
-       size_t l_nb_read; 
+    FILE *reader;
+    const char *s, *magic_s;
+    int ext_format, magic_format;
+    unsigned char buf[12];
+    size_t l_nb_read;
 
-       reader = fopen(fname, "rb");
+    reader = fopen(fname, "rb");
 
-       if (reader == NULL)
-               return -1;
+    if (reader == NULL) {
+        return -1;
+    }
 
-       memset(buf, 0, 12);
-       l_nb_read = fread(buf, 1, 12, reader);
-       fclose(reader);
-       if (l_nb_read != 12)
-               return -1;
+    memset(buf, 0, 12);
+    l_nb_read = fread(buf, 1, 12, reader);
+    fclose(reader);
+    if (l_nb_read != 12) {
+        return -1;
+    }
 
 
 
-       ext_format = get_file_format(fname);
+    ext_format = get_file_format(fname);
 
-       if (ext_format == JPT_CFMT)
-               return JPT_CFMT;
+    if (ext_format == JPT_CFMT) {
+        return JPT_CFMT;
+    }
 
-       if (memcmp(buf, JP2_RFC3745_MAGIC, 12) == 0 || memcmp(buf, JP2_MAGIC, 4) == 0) {
-               magic_format = JP2_CFMT;
-               magic_s = ".jp2";
-       }
-       else if (memcmp(buf, J2K_CODESTREAM_MAGIC, 4) == 0) {
-               magic_format = J2K_CFMT;
-               magic_s = ".j2k or .jpc or .j2c";
-       }
-       else
-               return -1;
+    if (memcmp(buf, JP2_RFC3745_MAGIC, 12) == 0 || memcmp(buf, JP2_MAGIC, 4) == 0) {
+        magic_format = JP2_CFMT;
+        magic_s = ".jp2";
+    } else if (memcmp(buf, J2K_CODESTREAM_MAGIC, 4) == 0) {
+        magic_format = J2K_CFMT;
+        magic_s = ".j2k or .jpc or .j2c";
+    } else {
+        return -1;
+    }
 
-       if (magic_format == ext_format)
-               return ext_format;
+    if (magic_format == ext_format) {
+        return ext_format;
+    }
 
-       s = fname + strlen(fname) - 4;
+    s = fname + strlen(fname) - 4;
 
-       fputs("\n===========================================\n", stderr);
-       fprintf(stderr, "The extension of this file is incorrect.\n"
-                                       "FOUND %s. SHOULD BE %s\n", s, magic_s);
-       fputs("===========================================\n", stderr);
+    fputs("\n===========================================\n", stderr);
+    fprintf(stderr, "The extension of this file is incorrect.\n"
+            "FOUND %s. SHOULD BE %s\n", s, magic_s);
+    fputs("===========================================\n", stderr);
 
-       return magic_format;
+    return magic_format;
 }
 /* -------------------------------------------------------------------------- */
 /**
  * Parse the command line
  */
 /* -------------------------------------------------------------------------- */
-static int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *parameters,img_fol_t *img_fol) {
-       int totlen, c;
-       opj_option_t long_option[]={
-        {"ImgDir",REQ_ARG, NULL ,'y'}
-       };
+static int parse_cmdline_decoder(int argc, char **argv,
+                                 opj_dparameters_t *parameters, img_fol_t *img_fol)
+{
+    int totlen, c;
+    opj_option_t long_option[] = {
+        {"ImgDir", REQ_ARG, NULL, 'y'}
+    };
     const char optlist[] = "i:o:f:hv";
 
-       totlen=sizeof(long_option);
-       img_fol->set_out_format = 0;
-       do {
-               c = opj_getopt_long(argc, argv,optlist,long_option,totlen);
-               if (c == -1)
-                       break;
-               switch (c) {
-                       case 'i':                       /* input file */
-                       {
-                               char *infile = opj_optarg;
-                               parameters->decod_format = infile_format(infile);
-                               switch(parameters->decod_format) {
-                                       case J2K_CFMT:
-                                               break;
-                                       case JP2_CFMT:
-                                               break;
-                                       case JPT_CFMT:
-                    break;
-                default:
-                    fprintf(stderr,
-                            "[ERROR] Unknown input file format: %s \n"
-                            "        Known file formats are *.j2k, *.jp2, *.jpc or *.jpt\n",
-                            infile);
-                    return 1;
-                               }
-                               if (opj_strcpy_s(parameters->infile, sizeof(parameters->infile), infile) != 0) {
-                                       fprintf(stderr, "[ERROR] Path is too long\n");
-                                       return 1;
-                               }
-                       }
-                       break;
-
-                               /* ------------------------------------------------------ */
-
-                       case 'o':     /* output file */
-                       {
-                               if (opj_strcpy_s(parameters->outfile, sizeof(parameters->outfile), opj_optarg) != 0) {
-                                       fprintf(stderr, "[ERROR] Path is too long\n");
-                                       return 1;
-                               }
-                       }
-                       break;
-                               
-                               /* ----------------------------------------------------- */
-      case 'f':                        /* flag */
-        img_fol->flag = atoi(opj_optarg);
+    totlen = sizeof(long_option);
+    img_fol->set_out_format = 0;
+    do {
+        c = opj_getopt_long(argc, argv, optlist, long_option, totlen);
+        if (c == -1) {
+            break;
+        }
+        switch (c) {
+        case 'i': {         /* input file */
+            char *infile = opj_optarg;
+            parameters->decod_format = infile_format(infile);
+            switch (parameters->decod_format) {
+            case J2K_CFMT:
+                break;
+            case JP2_CFMT:
+                break;
+            case JPT_CFMT:
+                break;
+            default:
+                fprintf(stderr,
+                        "[ERROR] Unknown input file format: %s \n"
+                        "        Known file formats are *.j2k, *.jp2, *.jpc or *.jpt\n",
+                        infile);
+                return 1;
+            }
+            if (opj_strcpy_s(parameters->infile, sizeof(parameters->infile), infile) != 0) {
+                fprintf(stderr, "[ERROR] Path is too long\n");
+                return 1;
+            }
+        }
+        break;
+
+        /* ------------------------------------------------------ */
+
+        case 'o': {   /* output file */
+            if (opj_strcpy_s(parameters->outfile, sizeof(parameters->outfile),
+                             opj_optarg) != 0) {
+                fprintf(stderr, "[ERROR] Path is too long\n");
+                return 1;
+            }
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+        case 'f':             /* flag */
+            img_fol->flag = atoi(opj_optarg);
+            break;
+        /* ----------------------------------------------------- */
+
+        case 'h':           /* display an help description */
+            decode_help_display();
+            return 1;
+
+        /* ------------------------------------------------------ */
+
+        case 'y': {         /* Image Directory path */
+            img_fol->imgdirpath = (char*)malloc(strlen(opj_optarg) + 1);
+            if (img_fol->imgdirpath == NULL) {
+                return 1;
+            }
+            strcpy(img_fol->imgdirpath, opj_optarg);
+            img_fol->set_imgdir = 1;
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'v': {         /* Verbose mode */
+            parameters->m_verbose = 1;
+        }
         break;
-                               /* ----------------------------------------------------- */
-
-                       case 'h':                       /* display an help description */
-                               decode_help_display();
-                               return 1;                               
-
-                               /* ------------------------------------------------------ */
-
-                       case 'y':                       /* Image Directory path */
-                       {
-                               img_fol->imgdirpath = (char*)malloc(strlen(opj_optarg) + 1);
-                               if(img_fol->imgdirpath == NULL){
-                                       return 1;
-                               }
-                               strcpy(img_fol->imgdirpath,opj_optarg);
-                               img_fol->set_imgdir=1;
-                       }
-                       break;
-
-                       /* ----------------------------------------------------- */
-
-            case 'v':                  /* Verbose mode */
-                       {
-                parameters->m_verbose = 1;
-                       }
-                       break;
-                       
-                               /* ----------------------------------------------------- */
+
+        /* ----------------------------------------------------- */
         default:
             fprintf(stderr, "[WARNING] An invalid option has been ignored.\n");
             break;
         }
-       }while(c != -1);
+    } while (c != -1);
 
-       /* check for possible errors */
-       if(img_fol->set_imgdir==1){
-               if(!(parameters->infile[0]==0)){
+    /* check for possible errors */
+    if (img_fol->set_imgdir == 1) {
+        if (!(parameters->infile[0] == 0)) {
             fprintf(stderr, "[ERROR] options -ImgDir and -i cannot be used together.\n");
-                       return 1;
-               }
-               if(img_fol->set_out_format == 0){
-            fprintf(stderr, "[ERROR] When -ImgDir is used, -OutFor <FORMAT> must be used.\n");
+            return 1;
+        }
+        if (img_fol->set_out_format == 0) {
+            fprintf(stderr,
+                    "[ERROR] When -ImgDir is used, -OutFor <FORMAT> must be used.\n");
             fprintf(stderr, "Only one format allowed.\n"
-                            "Valid format are PGM, PPM, PNM, PGX, BMP, TIF, RAW and TGA.\n");
-                       return 1;
-               }
-               if(!(parameters->outfile[0] == 0)){
+                    "Valid format are PGM, PPM, PNM, PGX, BMP, TIF, RAW and TGA.\n");
+            return 1;
+        }
+        if (!(parameters->outfile[0] == 0)) {
             fprintf(stderr, "[ERROR] options -ImgDir and -o cannot be used together\n");
-                       return 1;
-               }
-       }else{
-               if(parameters->infile[0] == 0) {
+            return 1;
+        }
+    } else {
+        if (parameters->infile[0] == 0) {
             fprintf(stderr, "[ERROR] Required parameter is missing\n");
-                       fprintf(stderr, "Example: %s -i image.j2k\n",argv[0]);
-            fprintf(stderr, "   Help: %s -h\n",argv[0]);
-                       return 1;
-               }
-       }
+            fprintf(stderr, "Example: %s -i image.j2k\n", argv[0]);
+            fprintf(stderr, "   Help: %s -h\n", argv[0]);
+            return 1;
+        }
+    }
 
-       return 0;
+    return 0;
 }
 
 /* -------------------------------------------------------------------------- */
@@ -397,23 +419,26 @@ static int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *param
 /**
 sample error debug callback expecting no client object
 */
-static void error_callback(const char *msg, void *client_data) {
-       (void)client_data;
-       fprintf(stdout, "[ERROR] %s", msg);
+static void error_callback(const char *msg, void *client_data)
+{
+    (void)client_data;
+    fprintf(stdout, "[ERROR] %s", msg);
 }
 /**
 sample warning debug callback expecting no client object
 */
-static void warning_callback(const char *msg, void *client_data) {
-       (void)client_data;
-       fprintf(stdout, "[WARNING] %s", msg);
+static void warning_callback(const char *msg, void *client_data)
+{
+    (void)client_data;
+    fprintf(stdout, "[WARNING] %s", msg);
 }
 /**
 sample debug callback expecting no client object
 */
-static void info_callback(const char *msg, void *client_data) {
-       (void)client_data;
-       fprintf(stdout, "[INFO] %s", msg);
+static void info_callback(const char *msg, void *client_data)
+{
+    (void)client_data;
+    fprintf(stdout, "[INFO] %s", msg);
 }
 
 /* -------------------------------------------------------------------------- */
@@ -423,188 +448,193 @@ static void info_callback(const char *msg, void *client_data) {
 /* -------------------------------------------------------------------------- */
 int main(int argc, char *argv[])
 {
-       FILE *fout = NULL;
-
-       opj_dparameters_t parameters;                   /* Decompression parameters */
-       opj_image_t* image = NULL;                                      /* Image structure */
-       opj_codec_t* l_codec = NULL;                            /* Handle to a decompressor */
-       opj_stream_t *l_stream = NULL;                          /* Stream */
-       opj_codestream_info_v2_t* cstr_info = NULL;
-       opj_codestream_index_t* cstr_index = NULL;
-
-       OPJ_INT32 num_images, imageno;
-       img_fol_t img_fol;
-       dircnt_t *dirptr = NULL;
-
-       /* Set decoding parameters to default values */
-       opj_set_default_decoder_parameters(&parameters);
-
-       /* Initialize img_fol */
-       memset(&img_fol,0,sizeof(img_fol_t));
-  img_fol.flag = OPJ_IMG_INFO | OPJ_J2K_MH_INFO | OPJ_J2K_MH_IND;
-
-       /* Parse input and get user encoding parameters */
-       if(parse_cmdline_decoder(argc, argv, &parameters,&img_fol) == 1) {
-               if(img_fol.imgdirpath) free(img_fol.imgdirpath);
-
-               return EXIT_FAILURE;
-       }
-
-       /* Initialize reading of directory */
-       if(img_fol.set_imgdir==1){      
-               int it_image;
-               num_images=get_num_images(img_fol.imgdirpath);
-
-               dirptr=(dircnt_t*)malloc(sizeof(dircnt_t));
-               if(!dirptr){
-                       return EXIT_FAILURE;
-               }
-               dirptr->filename_buf = (char*)malloc((size_t)num_images*OPJ_PATH_LEN*sizeof(char));     /* Stores at max 10 image file names*/
-               if(!dirptr->filename_buf){
-                       free(dirptr);
-                       return EXIT_FAILURE;
-               }
-               dirptr->filename = (char**) malloc((size_t)num_images*sizeof(char*));
-
-               if(!dirptr->filename){
-                       goto fails;
-               }
-
-               for(it_image=0;it_image<num_images;it_image++){
-                       dirptr->filename[it_image] = dirptr->filename_buf + it_image*OPJ_PATH_LEN;
-               }
-               
-               if(load_images(dirptr,img_fol.imgdirpath)==1){
-                       goto fails;
-               }
-
-               if (num_images==0){
-                       fprintf(stdout,"Folder is empty\n");
-                       goto fails;
-               }
-       }else{
-               num_images=1;
-       }
-
-       /* Try to open for writing the output file if necessary */
-       if (parameters.outfile[0] != 0){
-               fout = fopen(parameters.outfile,"w");
-               if (!fout){
-                       fprintf(stderr, "ERROR -> failed to open %s for writing\n", parameters.outfile);
-                       goto fails;
-               }
-       }
-       else
-               fout = stdout;
-
-       /* Read the header of each image one by one */
-       for(imageno = 0; imageno < num_images ; imageno++){
-
-               fprintf(stderr,"\n");
-
-               if(img_fol.set_imgdir==1){
-                       if (get_next_file(imageno, dirptr,&img_fol, &parameters)) {
-                               fprintf(stderr,"skipping file...\n");
-                               continue;
-                       }
-               }
-
-               /* Read the input file and put it in memory */
-               /* ---------------------------------------- */
-
-               l_stream = opj_stream_create_default_file_stream(parameters.infile,1);
-               if (!l_stream){
-                       fprintf(stderr, "ERROR -> failed to create the stream from the file %s\n",parameters.infile);
-                       goto fails;
-               }
-
-               /* Read the JPEG2000 stream */
-               /* ------------------------ */
-
-               switch(parameters.decod_format) {
-                       case J2K_CFMT:  /* JPEG-2000 codestream */
-                       {
-                               /* Get a decoder handle */
-                               l_codec = opj_create_decompress(OPJ_CODEC_J2K);
-                               break;
-                       }
-                       case JP2_CFMT:  /* JPEG 2000 compressed image data */
-                       {
-                               /* Get a decoder handle */
-                               l_codec = opj_create_decompress(OPJ_CODEC_JP2);
-                               break;
-                       }
-                       case JPT_CFMT:  /* JPEG 2000, JPIP */
-                       {
-                               /* Get a decoder handle */
-                               l_codec = opj_create_decompress(OPJ_CODEC_JPT);
-                               break;
-                       }
-                       default:
-                               fprintf(stderr, "skipping file..\n");
-                               opj_stream_destroy(l_stream);
-                               continue;
-               }
-
-               /* catch events using our callbacks and give a local context */         
-               opj_set_info_handler(l_codec, info_callback,00);
-               opj_set_warning_handler(l_codec, warning_callback,00);
-               opj_set_error_handler(l_codec, error_callback,00);
-
-               /* Setup the decoder decoding parameters using user parameters */
-               if ( !opj_setup_decoder(l_codec, &parameters) ){
-                       fprintf(stderr, "ERROR -> opj_dump: failed to setup the decoder\n");
-                       opj_stream_destroy(l_stream);
-                       opj_destroy_codec(l_codec);
-                       fclose(fout);
-                       goto fails;
-               }
-
-               /* Read the main header of the codestream and if necessary the JP2 boxes*/
-               if(! opj_read_header(l_stream, l_codec, &image)){
-                       fprintf(stderr, "ERROR -> opj_dump: failed to read the header\n");
-                       opj_stream_destroy(l_stream);
-                       opj_destroy_codec(l_codec);
-                       opj_image_destroy(image);
-                       fclose(fout);
-                       goto fails;
-               }
-
-               opj_dump_codec(l_codec, img_fol.flag, fout );
-
-               cstr_info = opj_get_cstr_info(l_codec);
-
-               cstr_index = opj_get_cstr_index(l_codec);
-
-               /* close the byte stream */
-               opj_stream_destroy(l_stream);
-
-               /* free remaining structures */
-               if (l_codec) {
-                       opj_destroy_codec(l_codec);
-               }
-
-               /* destroy the image header */
-               opj_image_destroy(image);
-
-               /* destroy the codestream index */
-               opj_destroy_cstr_index(&cstr_index);
-
-               /* destroy the codestream info */
-               opj_destroy_cstr_info(&cstr_info);
-
-       }
-
-       /* Close the output file */
-       fclose(fout);
-
-  return EXIT_SUCCESS;
+    FILE *fout = NULL;
+
+    opj_dparameters_t parameters;           /* Decompression parameters */
+    opj_image_t* image = NULL;                  /* Image structure */
+    opj_codec_t* l_codec = NULL;                /* Handle to a decompressor */
+    opj_stream_t *l_stream = NULL;              /* Stream */
+    opj_codestream_info_v2_t* cstr_info = NULL;
+    opj_codestream_index_t* cstr_index = NULL;
+
+    OPJ_INT32 num_images, imageno;
+    img_fol_t img_fol;
+    dircnt_t *dirptr = NULL;
+
+    /* Set decoding parameters to default values */
+    opj_set_default_decoder_parameters(&parameters);
+
+    /* Initialize img_fol */
+    memset(&img_fol, 0, sizeof(img_fol_t));
+    img_fol.flag = OPJ_IMG_INFO | OPJ_J2K_MH_INFO | OPJ_J2K_MH_IND;
+
+    /* Parse input and get user encoding parameters */
+    if (parse_cmdline_decoder(argc, argv, &parameters, &img_fol) == 1) {
+        if (img_fol.imgdirpath) {
+            free(img_fol.imgdirpath);
+        }
+
+        return EXIT_FAILURE;
+    }
+
+    /* Initialize reading of directory */
+    if (img_fol.set_imgdir == 1) {
+        int it_image;
+        num_images = get_num_images(img_fol.imgdirpath);
+
+        dirptr = (dircnt_t*)malloc(sizeof(dircnt_t));
+        if (!dirptr) {
+            return EXIT_FAILURE;
+        }
+        dirptr->filename_buf = (char*)malloc((size_t)num_images * OPJ_PATH_LEN * sizeof(
+                char)); /* Stores at max 10 image file names*/
+        if (!dirptr->filename_buf) {
+            free(dirptr);
+            return EXIT_FAILURE;
+        }
+        dirptr->filename = (char**) malloc((size_t)num_images * sizeof(char*));
+
+        if (!dirptr->filename) {
+            goto fails;
+        }
+
+        for (it_image = 0; it_image < num_images; it_image++) {
+            dirptr->filename[it_image] = dirptr->filename_buf + it_image * OPJ_PATH_LEN;
+        }
+
+        if (load_images(dirptr, img_fol.imgdirpath) == 1) {
+            goto fails;
+        }
+
+        if (num_images == 0) {
+            fprintf(stdout, "Folder is empty\n");
+            goto fails;
+        }
+    } else {
+        num_images = 1;
+    }
+
+    /* Try to open for writing the output file if necessary */
+    if (parameters.outfile[0] != 0) {
+        fout = fopen(parameters.outfile, "w");
+        if (!fout) {
+            fprintf(stderr, "ERROR -> failed to open %s for writing\n", parameters.outfile);
+            goto fails;
+        }
+    } else {
+        fout = stdout;
+    }
+
+    /* Read the header of each image one by one */
+    for (imageno = 0; imageno < num_images ; imageno++) {
+
+        fprintf(stderr, "\n");
+
+        if (img_fol.set_imgdir == 1) {
+            if (get_next_file(imageno, dirptr, &img_fol, &parameters)) {
+                fprintf(stderr, "skipping file...\n");
+                continue;
+            }
+        }
+
+        /* Read the input file and put it in memory */
+        /* ---------------------------------------- */
+
+        l_stream = opj_stream_create_default_file_stream(parameters.infile, 1);
+        if (!l_stream) {
+            fprintf(stderr, "ERROR -> failed to create the stream from the file %s\n",
+                    parameters.infile);
+            goto fails;
+        }
+
+        /* Read the JPEG2000 stream */
+        /* ------------------------ */
+
+        switch (parameters.decod_format) {
+        case J2K_CFMT: { /* JPEG-2000 codestream */
+            /* Get a decoder handle */
+            l_codec = opj_create_decompress(OPJ_CODEC_J2K);
+            break;
+        }
+        case JP2_CFMT: { /* JPEG 2000 compressed image data */
+            /* Get a decoder handle */
+            l_codec = opj_create_decompress(OPJ_CODEC_JP2);
+            break;
+        }
+        case JPT_CFMT: { /* JPEG 2000, JPIP */
+            /* Get a decoder handle */
+            l_codec = opj_create_decompress(OPJ_CODEC_JPT);
+            break;
+        }
+        default:
+            fprintf(stderr, "skipping file..\n");
+            opj_stream_destroy(l_stream);
+            continue;
+        }
+
+        /* catch events using our callbacks and give a local context */
+        opj_set_info_handler(l_codec, info_callback, 00);
+        opj_set_warning_handler(l_codec, warning_callback, 00);
+        opj_set_error_handler(l_codec, error_callback, 00);
+
+        /* Setup the decoder decoding parameters using user parameters */
+        if (!opj_setup_decoder(l_codec, &parameters)) {
+            fprintf(stderr, "ERROR -> opj_dump: failed to setup the decoder\n");
+            opj_stream_destroy(l_stream);
+            opj_destroy_codec(l_codec);
+            fclose(fout);
+            goto fails;
+        }
+
+        /* Read the main header of the codestream and if necessary the JP2 boxes*/
+        if (! opj_read_header(l_stream, l_codec, &image)) {
+            fprintf(stderr, "ERROR -> opj_dump: failed to read the header\n");
+            opj_stream_destroy(l_stream);
+            opj_destroy_codec(l_codec);
+            opj_image_destroy(image);
+            fclose(fout);
+            goto fails;
+        }
+
+        opj_dump_codec(l_codec, img_fol.flag, fout);
+
+        cstr_info = opj_get_cstr_info(l_codec);
+
+        cstr_index = opj_get_cstr_index(l_codec);
+
+        /* close the byte stream */
+        opj_stream_destroy(l_stream);
+
+        /* free remaining structures */
+        if (l_codec) {
+            opj_destroy_codec(l_codec);
+        }
+
+        /* destroy the image header */
+        opj_image_destroy(image);
+
+        /* destroy the codestream index */
+        opj_destroy_cstr_index(&cstr_index);
+
+        /* destroy the codestream info */
+        opj_destroy_cstr_info(&cstr_info);
+
+    }
+
+    /* Close the output file */
+    fclose(fout);
+
+    return EXIT_SUCCESS;
 
 fails:
-       if(dirptr){
-               if(dirptr->filename) free(dirptr->filename);
-               if(dirptr->filename_buf) free(dirptr->filename_buf);
-               free(dirptr);
-       }
-       return EXIT_FAILURE;
+    if (dirptr) {
+        if (dirptr->filename) {
+            free(dirptr->filename);
+        }
+        if (dirptr->filename_buf) {
+            free(dirptr->filename_buf);
+        }
+        free(dirptr);
+    }
+    return EXIT_FAILURE;
 }
old mode 100755 (executable)
new mode 100644 (file)
index e50f74a..492b193
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
 
 
 
-void dump_volume(FILE *fd, opj_volume_t * vol) {
-       int compno;
-       fprintf(fd, "volume {\n");
-       fprintf(fd, "  x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d\n", vol->x0, vol->y0, vol->z0,vol->x1, vol->y1,  vol->z1);
-       fprintf(fd, "  numcomps=%d\n", vol->numcomps);
-       for (compno = 0; compno < vol->numcomps; compno++) {
-               opj_volume_comp_t *comp = &vol->comps[compno];
-               fprintf(fd, "  comp %d {\n", compno);
-               fprintf(fd, "    dx=%d, dy=%d, dz=%d\n", comp->dx, comp->dy, comp->dz);
-               fprintf(fd, "    prec=%d\n", comp->prec);
-               fprintf(fd, "    sgnd=%d\n", comp->sgnd);
-               fprintf(fd, "  }\n");
-       }
-       fprintf(fd, "}\n");
+void dump_volume(FILE *fd, opj_volume_t * vol)
+{
+    int compno;
+    fprintf(fd, "volume {\n");
+    fprintf(fd, "  x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d\n", vol->x0, vol->y0,
+            vol->z0, vol->x1, vol->y1,  vol->z1);
+    fprintf(fd, "  numcomps=%d\n", vol->numcomps);
+    for (compno = 0; compno < vol->numcomps; compno++) {
+        opj_volume_comp_t *comp = &vol->comps[compno];
+        fprintf(fd, "  comp %d {\n", compno);
+        fprintf(fd, "    dx=%d, dy=%d, dz=%d\n", comp->dx, comp->dy, comp->dz);
+        fprintf(fd, "    prec=%d\n", comp->prec);
+        fprintf(fd, "    sgnd=%d\n", comp->sgnd);
+        fprintf(fd, "  }\n");
+    }
+    fprintf(fd, "}\n");
 }
 
 /*
@@ -66,12 +68,13 @@ void dump_volume(FILE *fd, opj_volume_t * vol) {
  *
  * log2(a)
  */
-static int int_floorlog2(int a) {
-       int l;
-       for (l = 0; a > 1; l++) {
-               a >>= 1;
-       }
-       return l;
+static int int_floorlog2(int a)
+{
+    int l;
+    for (l = 0; a > 1; l++) {
+        a >>= 1;
+    }
+    return l;
 }
 
 /*
@@ -79,8 +82,9 @@ 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;
+static int int_ceildivpow2(int a, int b)
+{
+    return (a + (1 << b) - 1) >> b;
 }
 
 /*
@@ -88,8 +92,9 @@ 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;
+static int int_ceildiv(int a, int b)
+{
+    return (a + b - 1) / b;
 }
 
 
@@ -102,362 +107,384 @@ PGX IMAGE FORMAT
 
 unsigned char readuchar(FILE * f)
 {
-  unsigned char c1;
-  fread(&c1, 1, 1, f);
-  return c1;
+    unsigned char c1;
+    fread(&c1, 1, 1, f);
+    return c1;
 }
 
 unsigned short readushort(FILE * f, int bigendian)
 {
-  unsigned char c1, c2;
-  fread(&c1, 1, 1, f);
-  fread(&c2, 1, 1, f);
-  if (bigendian)
-    return (c1 << 8) + c2;
-  else
-    return (c2 << 8) + c1;
+    unsigned char c1, c2;
+    fread(&c1, 1, 1, f);
+    fread(&c2, 1, 1, f);
+    if (bigendian) {
+        return (c1 << 8) + c2;
+    } else {
+        return (c2 << 8) + c1;
+    }
 }
 
 unsigned int readuint(FILE * f, int bigendian)
 {
-  unsigned char c1, c2, c3, c4;
-  fread(&c1, 1, 1, f);
-  fread(&c2, 1, 1, f);
-  fread(&c3, 1, 1, f);
-  fread(&c4, 1, 1, f);
-  if (bigendian)
-    return (c1 << 24) + (c2 << 16) + (c3 << 8) + c4;
-  else
-    return (c4 << 24) + (c3 << 16) + (c2 << 8) + c1;
+    unsigned char c1, c2, c3, c4;
+    fread(&c1, 1, 1, f);
+    fread(&c2, 1, 1, f);
+    fread(&c3, 1, 1, f);
+    fread(&c4, 1, 1, f);
+    if (bigendian) {
+        return (c1 << 24) + (c2 << 16) + (c3 << 8) + c4;
+    } else {
+        return (c4 << 24) + (c3 << 16) + (c2 << 8) + c1;
+    }
 }
 /*****************************************/
 static unsigned short ShortSwap(unsigned short v)
 {
-  unsigned char c1, c2;
-  c1 = v & 0xff;
-  c2 = (v >> 8) & 0xff;
-  return (c1 << 8) + c2;
+    unsigned char c1, c2;
+    c1 = v & 0xff;
+    c2 = (v >> 8) & 0xff;
+    return (c1 << 8) + c2;
 }
 
-static unsigned int LongSwap (unsigned int i)
+static unsigned int LongSwap(unsigned int i)
 {
-  unsigned char b1, b2, b3, b4;
-  b1 = i & 255;
-  b2 = ( i >> 8 ) & 255;
-  b3 = ( i>>16 ) & 255;
-  b4 = ( i>>24 ) & 255;
-  return ((int)b1 << 24) + ((int)b2 << 16) + ((int)b3 << 8) + b4;
+    unsigned char b1, b2, b3, b4;
+    b1 = i & 255;
+    b2 = (i >> 8) & 255;
+    b3 = (i >> 16) & 255;
+    b4 = (i >> 24) & 255;
+    return ((int)b1 << 24) + ((int)b2 << 16) + ((int)b3 << 8) + b4;
 }
 /*****************************************/
 
-opj_volume_t* pgxtovolume(char *relpath, opj_cparameters_t *parameters) {
-       
-       FILE *f = NULL;
-       int w, h, prec;
-       unsigned long offset;
-       int i, s, numcomps, maxvalue, sliceno, slicepos, maxslice = 0;
-       
-       OPJ_COLOR_SPACE color_space;
-       opj_volume_cmptparm_t cmptparm; /* maximum of 1 component */
-       opj_volume_t * volume = NULL;
-
-       char endian1,endian2,sign;
-       char signtmp[32];
-       char temp[32];
-       opj_volume_comp_t *comp = NULL;
-
-               DIR *dirp;
+opj_volume_t* pgxtovolume(char *relpath, opj_cparameters_t *parameters)
+{
+
+    FILE *f = NULL;
+    int w, h, prec;
+    unsigned long offset;
+    int i, s, numcomps, maxvalue, sliceno, slicepos, maxslice = 0;
+
+    OPJ_COLOR_SPACE color_space;
+    opj_volume_cmptparm_t cmptparm; /* maximum of 1 component */
+    opj_volume_t * volume = NULL;
+
+    char endian1, endian2, sign;
+    char signtmp[32];
+    char temp[32];
+    opj_volume_comp_t *comp = NULL;
+
+    DIR *dirp;
     struct dirent *direntp;
-       
-       char *tmp = NULL, *tmp2 = NULL,
-               *point = NULL, *pgx = NULL;
-       char tmpdirpath[MAX_PATH];
-       char dirpath[MAX_PATH];
-       char pattern[MAX_PATH];
-       char pgxfiles[MAX_SLICES][MAX_PATH];
-       int pgxslicepos[MAX_SLICES];
-       char tmpno[3];
-       
-       numcomps = 1;
-       color_space = CLRSPC_GRAY;
-       sliceno = 0;
-       maxvalue = 0;
-       memset(pgxfiles, 0, MAX_SLICES * MAX_PATH * sizeof(char));
-       memset(&cmptparm, 0, sizeof(opj_volume_cmptparm_t));
-       
-       /* Separaci�n del caso de un ï¿½nico slice frente al de muchos */
-       if ((tmp = strrchr(relpath,'-')) == NULL){ 
-               /*fprintf(stdout,"[INFO] A volume of only one slice....\n");*/
-               sliceno = 1;
-               maxslice = 1;
-               strcpy(pgxfiles[0],relpath);
-       
-       } else {
-               /*Fetch only the path */
-               strcpy(tmpdirpath,relpath);
-               if ((tmp = strrchr(tmpdirpath,'/')) != NULL){
-                       tmp++; *tmp='\0';
-                       strcpy(dirpath,tmpdirpath);
-               } else {
-                       strcpy(dirpath,"./");
-               }
-
-               /*Fetch the pattern of the volume slices*/
-               if ((tmp = strrchr (relpath,'/')) != NULL) 
-                       tmp++;  
-               else 
-                       tmp = relpath;
-        if ((tmp2 = strrchr(tmp,'-')) != NULL)
-            *tmp2='\0';
-               else{ 
-                       fprintf(stdout, "[ERROR] tmp2 ha dado null. no ha encontrado el * %s %s",tmp,relpath);
-                       return NULL;
-               }
-        strcpy(pattern,tmp);
-
-               dirp = opendir( dirpath );
-               if (dirp == NULL){
-                       fprintf(stdout, "[ERROR] Infile must be a .pgx file or a directory that contain pgx files");
-                       return NULL;
-               }
-
-               /*Read all .pgx files of directory */
-               while ( (direntp = readdir( dirp )) != NULL )
-               {
-                       /* Found a directory, but ignore . and .. */
-                       if(strcmp(".",direntp->d_name) == 0 || strcmp("..",direntp->d_name) == 0)
-                                       continue;
-                       
-                       if( ((pgx = strstr(direntp->d_name,pattern)) != NULL) && ((tmp2 = strstr(direntp->d_name,".pgx")) != NULL) ){
-                       
-                               strcpy(tmp,dirpath);
-                               tmp = strcat(tmp,direntp->d_name);
-                                               
-                               /*Obtenemos el index de la secuencia de slices*/
-                               if ((tmp2 = strpbrk (direntp->d_name, "0123456789")) == NULL) 
-                                       continue;
-                               i = 0;
-                               while (tmp2 != NULL) {                                  
-                                       tmpno[i++] = *tmp2;
-                                       point = tmp2;
-                                       tmp2 = strpbrk (tmp2+1,"0123456789");
-                               }tmpno[i]='\0';
-
-                               /*Comprobamos que no estamos leyendo algo raro como pattern.jp3d*/
-                               if ((point = strpbrk (point,".")) == NULL){
-                                       break;
-                               }
-                               /*Slicepos --> index de slice; Sliceno --> no de slices hasta el momento*/
-                               slicepos = atoi(tmpno);
-                               pgxslicepos[sliceno] = slicepos - 1;
-                               sliceno++;
-                               if (slicepos>maxslice)
-                                       maxslice = slicepos;
-                               
-                               /*Colocamos el slices en su posicion correspondiente*/
-                               strcpy(pgxfiles[slicepos-1],tmp);
-                       }
-               }
-       
-       }/* else if pattern*.pgx */
-
-       if (!sliceno) {
-               fprintf(stdout,"[ERROR] No slices with this pattern founded !! Please check input volume name\n");
-               return NULL;
-       }
-       /*if ( maxslice != sliceno) {
-               fprintf(stdout,"[ERROR] Slices are not sequentially numbered !! Please rename them accordingly\n");
-               return NULL;
-       }*/
-       
-       for (s=0;s<sliceno;s++)
-       {
-                       int pos = maxslice == sliceno ? s: pgxslicepos[s];
-                       f = fopen(pgxfiles[pos], "rb");
-                       if (!f) {
-                               fprintf(stdout, "[ERROR] Failed to open %s for reading !\n", pgxfiles[s]);
-                               return NULL;
-                       }
-                       fprintf(stdout, "[INFO] Loading %s \n",pgxfiles[pos]);
-
-                       fseek(f, 0, SEEK_SET);
-                       fscanf(f, "PG%[ \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') {
-                               cmptparm.bigendian = 1;
-                       } else if (endian2=='M' && endian1=='L') {
-                               cmptparm.bigendian = 0;
-                       } else {
-                               fprintf(stdout, "[ERROR] Bad pgx header, please check input file\n");
-                               return NULL;
-                       }
-
-                       if (s==0){
-                               /* initialize volume component */
-
-                               cmptparm.x0 = parameters->volume_offset_x0;
-                               cmptparm.y0 = parameters->volume_offset_y0;
-                               cmptparm.z0 = parameters->volume_offset_z0;
-                               cmptparm.w = !cmptparm.x0 ? (w - 1) * parameters->subsampling_dx + 1 : cmptparm.x0 + (w - 1) * parameters->subsampling_dx + 1;
-                               cmptparm.h = !cmptparm.y0 ? (h - 1) * parameters->subsampling_dy + 1 : cmptparm.y0 + (h - 1) * parameters->subsampling_dy + 1;
-                               cmptparm.l = !cmptparm.z0 ? (sliceno - 1) * parameters->subsampling_dz + 1 : cmptparm.z0 + (sliceno - 1) * parameters->subsampling_dz + 1;
-                               
-                               if (sign == '-') {
-                                       cmptparm.sgnd = 1;
-                               } else {
-                                       cmptparm.sgnd = 0;
-                               }
-                               cmptparm.prec = prec;
-                               cmptparm.bpp = prec;
-                               cmptparm.dcoffset = parameters->dcoffset;
-                               cmptparm.dx = parameters->subsampling_dx;
-                               cmptparm.dy = parameters->subsampling_dy;
-                               cmptparm.dz = parameters->subsampling_dz;
-                               
-                               /* create the volume */
-                               volume = opj_volume_create(numcomps, &cmptparm, color_space);
-                               if(!volume) {
-                                       fclose(f);
-                                       return NULL;
-                               }
-                               /* set volume offset and reference grid */
-                               volume->x0 = cmptparm.x0;
-                               volume->y0 = cmptparm.y0;
-                               volume->z0 = cmptparm.z0;
-                               volume->x1 = cmptparm.w;
-                               volume->y1 = cmptparm.h;
-                               volume->z1 = cmptparm.l;
-                               
-                               /* set volume data :only one component, that is a volume*/
-                               comp = &volume->comps[0];
-                       
-                       }/*if sliceno==1*/
-                       
-                       offset = w * h * s;
-                       
-                       for (i = 0; i < w * h; i++) {
-                               int v;
-                               if (comp->prec <= 8) {
-                                       if (!comp->sgnd) {
-                                               v = readuchar(f);
-                                       } else {
-                                               v = (char) readuchar(f);
-                                       }
-                               } else if (comp->prec <= 16) {
-                                       if (!comp->sgnd) {
-                                               v = readushort(f, cmptparm.bigendian);
-                                       } else {
-                                               v = (short) readushort(f, cmptparm.bigendian);
-                                       }
-                               } else {
-                                       if (!comp->sgnd) {
-                                               v = readuint(f, cmptparm.bigendian);
-                                       } else {
-                                               v = (int) readuint(f, cmptparm.bigendian);
-                                       }
-                               }                               
-                               if (v > maxvalue)
-                                       maxvalue = v;
-                               comp->data[i + offset] = v;
-                               
-                       }
-                       fclose(f);
-       } /* for s --> sliceno*/
-       comp->bpp = int_floorlog2(maxvalue) + 1;
-       if (sliceno != 1)
-               closedir( dirp );
-       /*dump_volume(stdout, volume);*/
-       return volume;
+
+    char *tmp = NULL, *tmp2 = NULL,
+          *point = NULL, *pgx = NULL;
+    char tmpdirpath[MAX_PATH];
+    char dirpath[MAX_PATH];
+    char pattern[MAX_PATH];
+    char pgxfiles[MAX_SLICES][MAX_PATH];
+    int pgxslicepos[MAX_SLICES];
+    char tmpno[3];
+
+    numcomps = 1;
+    color_space = CLRSPC_GRAY;
+    sliceno = 0;
+    maxvalue = 0;
+    memset(pgxfiles, 0, MAX_SLICES * MAX_PATH * sizeof(char));
+    memset(&cmptparm, 0, sizeof(opj_volume_cmptparm_t));
+
+    /* Separaci�n del caso de un ï¿½nico slice frente al de muchos */
+    if ((tmp = strrchr(relpath, '-')) == NULL) {
+        /*fprintf(stdout,"[INFO] A volume of only one slice....\n");*/
+        sliceno = 1;
+        maxslice = 1;
+        strcpy(pgxfiles[0], relpath);
+
+    } else {
+        /*Fetch only the path */
+        strcpy(tmpdirpath, relpath);
+        if ((tmp = strrchr(tmpdirpath, '/')) != NULL) {
+            tmp++;
+            *tmp = '\0';
+            strcpy(dirpath, tmpdirpath);
+        } else {
+            strcpy(dirpath, "./");
+        }
+
+        /*Fetch the pattern of the volume slices*/
+        if ((tmp = strrchr(relpath, '/')) != NULL) {
+            tmp++;
+        } else {
+            tmp = relpath;
+        }
+        if ((tmp2 = strrchr(tmp, '-')) != NULL) {
+            *tmp2 = '\0';
+        } else {
+            fprintf(stdout, "[ERROR] tmp2 ha dado null. no ha encontrado el * %s %s", tmp,
+                    relpath);
+            return NULL;
+        }
+        strcpy(pattern, tmp);
+
+        dirp = opendir(dirpath);
+        if (dirp == NULL) {
+            fprintf(stdout,
+                    "[ERROR] Infile must be a .pgx file or a directory that contain pgx files");
+            return NULL;
+        }
+
+        /*Read all .pgx files of directory */
+        while ((direntp = readdir(dirp)) != NULL) {
+            /* Found a directory, but ignore . and .. */
+            if (strcmp(".", direntp->d_name) == 0 || strcmp("..", direntp->d_name) == 0) {
+                continue;
+            }
+
+            if (((pgx = strstr(direntp->d_name, pattern)) != NULL) &&
+                    ((tmp2 = strstr(direntp->d_name, ".pgx")) != NULL)) {
+
+                strcpy(tmp, dirpath);
+                tmp = strcat(tmp, direntp->d_name);
+
+                /*Obtenemos el index de la secuencia de slices*/
+                if ((tmp2 = strpbrk(direntp->d_name, "0123456789")) == NULL) {
+                    continue;
+                }
+                i = 0;
+                while (tmp2 != NULL) {
+                    tmpno[i++] = *tmp2;
+                    point = tmp2;
+                    tmp2 = strpbrk(tmp2 + 1, "0123456789");
+                }
+                tmpno[i] = '\0';
+
+                /*Comprobamos que no estamos leyendo algo raro como pattern.jp3d*/
+                if ((point = strpbrk(point, ".")) == NULL) {
+                    break;
+                }
+                /*Slicepos --> index de slice; Sliceno --> no de slices hasta el momento*/
+                slicepos = atoi(tmpno);
+                pgxslicepos[sliceno] = slicepos - 1;
+                sliceno++;
+                if (slicepos > maxslice) {
+                    maxslice = slicepos;
+                }
+
+                /*Colocamos el slices en su posicion correspondiente*/
+                strcpy(pgxfiles[slicepos - 1], tmp);
+            }
+        }
+
+    }/* else if pattern*.pgx */
+
+    if (!sliceno) {
+        fprintf(stdout,
+                "[ERROR] No slices with this pattern founded !! Please check input volume name\n");
+        return NULL;
+    }
+    /*if ( maxslice != sliceno) {
+        fprintf(stdout,"[ERROR] Slices are not sequentially numbered !! Please rename them accordingly\n");
+        return NULL;
+    }*/
+
+    for (s = 0; s < sliceno; s++) {
+        int pos = maxslice == sliceno ? s : pgxslicepos[s];
+        f = fopen(pgxfiles[pos], "rb");
+        if (!f) {
+            fprintf(stdout, "[ERROR] Failed to open %s for reading !\n", pgxfiles[s]);
+            return NULL;
+        }
+        fprintf(stdout, "[INFO] Loading %s \n", pgxfiles[pos]);
+
+        fseek(f, 0, SEEK_SET);
+        fscanf(f, "PG%[ \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') {
+            cmptparm.bigendian = 1;
+        } else if (endian2 == 'M' && endian1 == 'L') {
+            cmptparm.bigendian = 0;
+        } else {
+            fprintf(stdout, "[ERROR] Bad pgx header, please check input file\n");
+            return NULL;
+        }
+
+        if (s == 0) {
+            /* initialize volume component */
+
+            cmptparm.x0 = parameters->volume_offset_x0;
+            cmptparm.y0 = parameters->volume_offset_y0;
+            cmptparm.z0 = parameters->volume_offset_z0;
+            cmptparm.w = !cmptparm.x0 ? (w - 1) * parameters->subsampling_dx + 1 :
+                         cmptparm.x0 + (w - 1) * parameters->subsampling_dx + 1;
+            cmptparm.h = !cmptparm.y0 ? (h - 1) * parameters->subsampling_dy + 1 :
+                         cmptparm.y0 + (h - 1) * parameters->subsampling_dy + 1;
+            cmptparm.l = !cmptparm.z0 ? (sliceno - 1) * parameters->subsampling_dz + 1 :
+                         cmptparm.z0 + (sliceno - 1) * parameters->subsampling_dz + 1;
+
+            if (sign == '-') {
+                cmptparm.sgnd = 1;
+            } else {
+                cmptparm.sgnd = 0;
+            }
+            cmptparm.prec = prec;
+            cmptparm.bpp = prec;
+            cmptparm.dcoffset = parameters->dcoffset;
+            cmptparm.dx = parameters->subsampling_dx;
+            cmptparm.dy = parameters->subsampling_dy;
+            cmptparm.dz = parameters->subsampling_dz;
+
+            /* create the volume */
+            volume = opj_volume_create(numcomps, &cmptparm, color_space);
+            if (!volume) {
+                fclose(f);
+                return NULL;
+            }
+            /* set volume offset and reference grid */
+            volume->x0 = cmptparm.x0;
+            volume->y0 = cmptparm.y0;
+            volume->z0 = cmptparm.z0;
+            volume->x1 = cmptparm.w;
+            volume->y1 = cmptparm.h;
+            volume->z1 = cmptparm.l;
+
+            /* set volume data :only one component, that is a volume*/
+            comp = &volume->comps[0];
+
+        }/*if sliceno==1*/
+
+        offset = w * h * s;
+
+        for (i = 0; i < w * h; i++) {
+            int v;
+            if (comp->prec <= 8) {
+                if (!comp->sgnd) {
+                    v = readuchar(f);
+                } else {
+                    v = (char) readuchar(f);
+                }
+            } else if (comp->prec <= 16) {
+                if (!comp->sgnd) {
+                    v = readushort(f, cmptparm.bigendian);
+                } else {
+                    v = (short) readushort(f, cmptparm.bigendian);
+                }
+            } else {
+                if (!comp->sgnd) {
+                    v = readuint(f, cmptparm.bigendian);
+                } else {
+                    v = (int) readuint(f, cmptparm.bigendian);
+                }
+            }
+            if (v > maxvalue) {
+                maxvalue = v;
+            }
+            comp->data[i + offset] = v;
+
+        }
+        fclose(f);
+    } /* for s --> sliceno*/
+    comp->bpp = int_floorlog2(maxvalue) + 1;
+    if (sliceno != 1) {
+        closedir(dirp);
+    }
+    /*dump_volume(stdout, volume);*/
+    return volume;
 }
 
 
-int volumetopgx(opj_volume_t * volume, char *outfile) {
-       int w, wr, wrr, h, hr, hrr, l, lr, lrr;
-       int i, j, compno, offset, sliceno;
-       FILE *fdest = NULL;
-
-       for (compno = 0; compno < volume->numcomps; compno++) {
-               opj_volume_comp_t *comp = &volume->comps[compno];
-               char name[256];
-               int nbytes = 0;
-               char *tmp = outfile;
-               while (*tmp) {
-                       tmp++;
-               }
-               while (*tmp!='.') {
-                       tmp--;
-               }
-               *tmp='\0';
-               for(sliceno = 0; sliceno < volume->z1 - volume->z0; sliceno++) {
-
-                       if (volume->numcomps > 1) {
-                               sprintf(name, "%s%d-%d.pgx", outfile, sliceno+1, compno);
-                       } else if ((volume->z1 - volume->z0) > 1) {
-                               sprintf(name, "%s%d.pgx", outfile, sliceno+1);
-                       } else {
-                               sprintf(name, "%s.pgx", outfile);
-                       }
-
-                       fdest = fopen(name, "wb");
-                       if (!fdest) {
-                               fprintf(stdout, "[ERROR] Failed to open %s for writing \n", name);
-                               return 1;
-                       }
-
-                       fprintf(stdout,"[INFO] Writing in %s (%s)\n",name,volume->comps[0].bigendian ? "Bigendian" : "Little-endian");
-
-                       w = int_ceildiv(volume->x1 - volume->x0, volume->comps[compno].dx);
-                       wr = volume->comps[compno].w;
-                       wrr = int_ceildivpow2(volume->comps[compno].w, volume->comps[compno].factor[0]);
-                       
-                       h = int_ceildiv(volume->y1 - volume->y0, volume->comps[compno].dy);
-                       hr = volume->comps[compno].h;
-                       hrr = int_ceildivpow2(volume->comps[compno].h, volume->comps[compno].factor[1]);
-                       
-                       l = int_ceildiv(volume->z1 - volume->z0, volume->comps[compno].dz);
-                       lr = volume->comps[compno].l;
-                       lrr = int_ceildivpow2(volume->comps[compno].l, volume->comps[compno].factor[2]);
-
-                       fprintf(fdest, "PG %c%c %c%d %d %d\n", comp->bigendian ? 'M':'L', comp->bigendian ? 'L':'M',comp->sgnd ? '-' : '+', comp->prec, wr, hr);
-                       if (comp->prec <= 8) {
-                               nbytes = 1;
-                       } else if (comp->prec <= 16) {
-                               nbytes = 2;
-                       } else {
-                               nbytes = 4;
-                       }
-
-                       offset = (sliceno / lrr * l) + (sliceno % lrr);
-                       offset = wrr * hrr * offset;
-                       /*fprintf(stdout,"%d %d %d %d\n",offset,wrr*hrr,wrr,w);*/
-                       for (i = 0; i < wrr * hrr; i++) {
-                               int v = volume->comps[0].data[(i / wrr * w) + (i % wrr) + offset];
-                               if (volume->comps[0].bigendian) {
-                                       for (j = nbytes - 1; j >= 0; j--) {
-                        char byte = (char) ((v >> (j * 8)) & 0xff);
+int volumetopgx(opj_volume_t * volume, char *outfile)
+{
+    int w, wr, wrr, h, hr, hrr, l, lr, lrr;
+    int i, j, compno, offset, sliceno;
+    FILE *fdest = NULL;
+
+    for (compno = 0; compno < volume->numcomps; compno++) {
+        opj_volume_comp_t *comp = &volume->comps[compno];
+        char name[256];
+        int nbytes = 0;
+        char *tmp = outfile;
+        while (*tmp) {
+            tmp++;
+        }
+        while (*tmp != '.') {
+            tmp--;
+        }
+        *tmp = '\0';
+        for (sliceno = 0; sliceno < volume->z1 - volume->z0; sliceno++) {
+
+            if (volume->numcomps > 1) {
+                sprintf(name, "%s%d-%d.pgx", outfile, sliceno + 1, compno);
+            } else if ((volume->z1 - volume->z0) > 1) {
+                sprintf(name, "%s%d.pgx", outfile, sliceno + 1);
+            } else {
+                sprintf(name, "%s.pgx", outfile);
+            }
+
+            fdest = fopen(name, "wb");
+            if (!fdest) {
+                fprintf(stdout, "[ERROR] Failed to open %s for writing \n", name);
+                return 1;
+            }
+
+            fprintf(stdout, "[INFO] Writing in %s (%s)\n", name,
+                    volume->comps[0].bigendian ? "Bigendian" : "Little-endian");
+
+            w = int_ceildiv(volume->x1 - volume->x0, volume->comps[compno].dx);
+            wr = volume->comps[compno].w;
+            wrr = int_ceildivpow2(volume->comps[compno].w, volume->comps[compno].factor[0]);
+
+            h = int_ceildiv(volume->y1 - volume->y0, volume->comps[compno].dy);
+            hr = volume->comps[compno].h;
+            hrr = int_ceildivpow2(volume->comps[compno].h, volume->comps[compno].factor[1]);
+
+            l = int_ceildiv(volume->z1 - volume->z0, volume->comps[compno].dz);
+            lr = volume->comps[compno].l;
+            lrr = int_ceildivpow2(volume->comps[compno].l, volume->comps[compno].factor[2]);
+
+            fprintf(fdest, "PG %c%c %c%d %d %d\n", comp->bigendian ? 'M' : 'L',
+                    comp->bigendian ? 'L' : 'M', comp->sgnd ? '-' : '+', comp->prec, wr, hr);
+            if (comp->prec <= 8) {
+                nbytes = 1;
+            } else if (comp->prec <= 16) {
+                nbytes = 2;
+            } else {
+                nbytes = 4;
+            }
+
+            offset = (sliceno / lrr * l) + (sliceno % lrr);
+            offset = wrr * hrr * offset;
+            /*fprintf(stdout,"%d %d %d %d\n",offset,wrr*hrr,wrr,w);*/
+            for (i = 0; i < wrr * hrr; i++) {
+                int v = volume->comps[0].data[(i / wrr * w) + (i % wrr) + offset];
+                if (volume->comps[0].bigendian) {
+                    for (j = nbytes - 1; j >= 0; j--) {
+                        char byte = (char)((v >> (j * 8)) & 0xff);
                         fwrite(&byte, 1, 1, fdest);
-                                       }
-                               } else {
-                                       for (j = 0; j <= nbytes - 1; j++) {
-                        char byte = (char) ((v >> (j * 8)) & 0xff);
-                                               fwrite(&byte, 1, 1, fdest);
-                                       }
-                               }
-                       }
-
-                       fclose(fdest);
-               }/*for sliceno*/
-       }/*for compno*/
-
-       return 0;
+                    }
+                } else {
+                    for (j = 0; j <= nbytes - 1; j++) {
+                        char byte = (char)((v >> (j * 8)) & 0xff);
+                        fwrite(&byte, 1, 1, fdest);
+                    }
+                }
+            }
+
+            fclose(fdest);
+        }/*for sliceno*/
+    }/*for compno*/
+
+    return 0;
 }
 
 /* -->> -->> -->> -->>
@@ -466,537 +493,557 @@ BIN IMAGE FORMAT
 
 <<-- <<-- <<-- <<-- */
 
-opj_volume_t* bintovolume(char *filename, char *fileimg, opj_cparameters_t *parameters) {
-       int subsampling_dx =  parameters->subsampling_dx;
-       int subsampling_dy =  parameters->subsampling_dy;
-       int subsampling_dz =  parameters->subsampling_dz;
-       
-       int i, compno, w, h, l, numcomps = 1;
-       int prec, max = 0;
-
-/*     char temp[32];*/
-       char line[100];
-       int bigendian;
-       
-       FILE *f = NULL;
-       FILE *fimg = NULL;
-       OPJ_COLOR_SPACE color_space;
-       opj_volume_cmptparm_t cmptparm; /* maximum of 1 component */
-       opj_volume_t * volume = NULL;
-       opj_volume_comp_t *comp = NULL;
-
-       bigendian = 0;
-       color_space = CLRSPC_GRAY;
-
-       fimg = fopen(fileimg,"r");
-       if (!fimg) { 
-               fprintf(stdout, "[ERROR] Failed to open %s for reading !!\n", fileimg);
-               return 0;
-       }
-
-       fseek(fimg, 0, SEEK_SET);
-       while (!feof(fimg)) {
-        fgets(line,100,fimg);
-               /*fprintf(stdout,"%s %d \n",line,feof(fimg));*/
-               if (strncmp(line,"Bpp",3) == 0){
-                       sscanf(line,"%*s%*[ \t]%d",&prec);
-               } else if (strncmp(line,"Color",5) == 0){
-                       sscanf(line, "%*s%*[ \t]%d",&color_space);
-               } else if (strncmp(line,"Dim",3) == 0){
-                       sscanf(line, "%*s%*[ \t]%d%*[ \t]%d%*[ \t]%d",&w,&h,&l);
-               }
-       }
-       /*fscanf(fimg, "Bpp%[ \t]%d%[ \t\n]",temp,&prec,temp);*/
-       /*fscanf(fimg, "Color Map%[ \t]%d%[ \n\t]Dimensions%[ \t]%d%[ \t]%d%[ \t]%d%[ \n\t]",temp,&color_space,temp,temp,&w,temp,&h,temp,&l,temp);*/
-       /*fscanf(fimg, "Resolution(mm)%[ \t]%d%[ \t]%d%[ \t]%d%[ \n\t]",temp,&subsampling_dx,temp,&subsampling_dy,temp,&subsampling_dz,temp);*/
-
-       #ifdef VERBOSE
-               fprintf(stdout, "[INFO] %d \t %d %d %d \t %3.2f %2.2f %2.2f \t %d \n",color_space,w,h,l,subsampling_dx,subsampling_dy,subsampling_dz,prec);
-       #endif
-       fclose(fimg);
-       
-       /* initialize volume components */
-       memset(&cmptparm, 0, sizeof(opj_volume_cmptparm_t));
-       
-       cmptparm.prec = prec;
-       cmptparm.bpp = prec;
-       cmptparm.sgnd = 0;
-       cmptparm.bigendian = bigendian;
-       cmptparm.dcoffset = parameters->dcoffset;
-       cmptparm.dx = subsampling_dx;
-       cmptparm.dy = subsampling_dy;
-       cmptparm.dz = subsampling_dz;
-       cmptparm.w = w;
-       cmptparm.h = h;
-       cmptparm.l = l;
-       
-       /* create the volume */
-       volume = opj_volume_create(numcomps, &cmptparm, color_space);
-       if(!volume) {
-               fprintf(stdout,"[ERROR] Unable to create volume");      
-               fclose(f);
-               return NULL;
-       }
-       
-       /* set volume offset and reference grid */
-       volume->x0 = parameters->volume_offset_x0;
-       volume->y0 = parameters->volume_offset_y0;
-       volume->z0 = parameters->volume_offset_z0;
-       volume->x1 = parameters->volume_offset_x0 + (w - 1) *   subsampling_dx + 1;
-       volume->y1 = parameters->volume_offset_y0 + (h - 1) *   subsampling_dy + 1;
-       volume->z1 = parameters->volume_offset_z0 + (l - 1) *   subsampling_dz + 1;
-       
-       /* set volume data */
-       f = fopen(filename, "rb");
-       if (!f) {
-               fprintf(stdout, "[ERROR] Failed to open %s for reading !!\n", filename);
-               return 0;
-       }
-       
-       /* BINARY */
-       for (compno = 0; compno < volume->numcomps; compno++) {
-               int whl = w * h * l;
-               /* set volume data */
-               comp = &volume->comps[compno];
-               
-               /*if (comp->prec <= 8) {
-                       if (!comp->sgnd) {
+opj_volume_t* bintovolume(char *filename, char *fileimg,
+                          opj_cparameters_t *parameters)
+{
+    int subsampling_dx =  parameters->subsampling_dx;
+    int subsampling_dy =  parameters->subsampling_dy;
+    int subsampling_dz =  parameters->subsampling_dz;
+
+    int i, compno, w, h, l, numcomps = 1;
+    int prec, max = 0;
+
+    /*  char temp[32];*/
+    char line[100];
+    int bigendian;
+
+    FILE *f = NULL;
+    FILE *fimg = NULL;
+    OPJ_COLOR_SPACE color_space;
+    opj_volume_cmptparm_t cmptparm; /* maximum of 1 component */
+    opj_volume_t * volume = NULL;
+    opj_volume_comp_t *comp = NULL;
+
+    bigendian = 0;
+    color_space = CLRSPC_GRAY;
+
+    fimg = fopen(fileimg, "r");
+    if (!fimg) {
+        fprintf(stdout, "[ERROR] Failed to open %s for reading !!\n", fileimg);
+        return 0;
+    }
+
+    fseek(fimg, 0, SEEK_SET);
+    while (!feof(fimg)) {
+        fgets(line, 100, fimg);
+        /*fprintf(stdout,"%s %d \n",line,feof(fimg));*/
+        if (strncmp(line, "Bpp", 3) == 0) {
+            sscanf(line, "%*s%*[ \t]%d", &prec);
+        } else if (strncmp(line, "Color", 5) == 0) {
+            sscanf(line, "%*s%*[ \t]%d", &color_space);
+        } else if (strncmp(line, "Dim", 3) == 0) {
+            sscanf(line, "%*s%*[ \t]%d%*[ \t]%d%*[ \t]%d", &w, &h, &l);
+        }
+    }
+    /*fscanf(fimg, "Bpp%[ \t]%d%[ \t\n]",temp,&prec,temp);*/
+    /*fscanf(fimg, "Color Map%[ \t]%d%[ \n\t]Dimensions%[ \t]%d%[ \t]%d%[ \t]%d%[ \n\t]",temp,&color_space,temp,temp,&w,temp,&h,temp,&l,temp);*/
+    /*fscanf(fimg, "Resolution(mm)%[ \t]%d%[ \t]%d%[ \t]%d%[ \n\t]",temp,&subsampling_dx,temp,&subsampling_dy,temp,&subsampling_dz,temp);*/
+
+#ifdef VERBOSE
+    fprintf(stdout, "[INFO] %d \t %d %d %d \t %3.2f %2.2f %2.2f \t %d \n",
+            color_space, w, h, l, subsampling_dx, subsampling_dy, subsampling_dz, prec);
+#endif
+    fclose(fimg);
+
+    /* initialize volume components */
+    memset(&cmptparm, 0, sizeof(opj_volume_cmptparm_t));
+
+    cmptparm.prec = prec;
+    cmptparm.bpp = prec;
+    cmptparm.sgnd = 0;
+    cmptparm.bigendian = bigendian;
+    cmptparm.dcoffset = parameters->dcoffset;
+    cmptparm.dx = subsampling_dx;
+    cmptparm.dy = subsampling_dy;
+    cmptparm.dz = subsampling_dz;
+    cmptparm.w = w;
+    cmptparm.h = h;
+    cmptparm.l = l;
+
+    /* create the volume */
+    volume = opj_volume_create(numcomps, &cmptparm, color_space);
+    if (!volume) {
+        fprintf(stdout, "[ERROR] Unable to create volume");
+        fclose(f);
+        return NULL;
+    }
+
+    /* set volume offset and reference grid */
+    volume->x0 = parameters->volume_offset_x0;
+    volume->y0 = parameters->volume_offset_y0;
+    volume->z0 = parameters->volume_offset_z0;
+    volume->x1 = parameters->volume_offset_x0 + (w - 1) *   subsampling_dx + 1;
+    volume->y1 = parameters->volume_offset_y0 + (h - 1) *   subsampling_dy + 1;
+    volume->z1 = parameters->volume_offset_z0 + (l - 1) *   subsampling_dz + 1;
+
+    /* set volume data */
+    f = fopen(filename, "rb");
+    if (!f) {
+        fprintf(stdout, "[ERROR] Failed to open %s for reading !!\n", filename);
+        return 0;
+    }
+
+    /* BINARY */
+    for (compno = 0; compno < volume->numcomps; compno++) {
+        int whl = w * h * l;
+        /* set volume data */
+        comp = &volume->comps[compno];
+
+        /*if (comp->prec <= 8) {
+            if (!comp->sgnd) {
                 unsigned char *data = (unsigned char *) malloc(whl * sizeof(unsigned char));
-                               fread(data, 1, whl, f);
-                               for (i = 0; i < whl; i++) {
-                                       comp->data[i] = data[i];
-                                       if (comp->data[i] > max)
-                                               max = comp->data[i];
-                               }
-                               free(data);
-                       } else {
-                               char *data = (char *) malloc(whl);
-                               fread(data, 1, whl, f);
-                               for (i = 0; i < whl; i++) {
-                                       comp->data[i] = data[i];
-                                       if (comp->data[i] > max)
-                                               max = comp->data[i];
-                               }
-                               free(data);
-                       }
-               } else if (comp->prec <= 16) {
-                       if (!comp->sgnd) {
+                fread(data, 1, whl, f);
+                for (i = 0; i < whl; i++) {
+                    comp->data[i] = data[i];
+                    if (comp->data[i] > max)
+                        max = comp->data[i];
+                }
+                free(data);
+            } else {
+                char *data = (char *) malloc(whl);
+                fread(data, 1, whl, f);
+                for (i = 0; i < whl; i++) {
+                    comp->data[i] = data[i];
+                    if (comp->data[i] > max)
+                        max = comp->data[i];
+                }
+                free(data);
+            }
+        } else if (comp->prec <= 16) {
+            if (!comp->sgnd) {
                 unsigned short *data = (unsigned short *) malloc(whl * sizeof(unsigned short));
-                               int leido = fread(data, 2, whl, f);
-                               if (!leido)     {
-                                       free(data);     fclose(f);
-                                       return NULL;
-                               }
-                               
-                               for (i = 0; i < whl; i++) {
-                                       if (bigendian)  //(c1 << 8) + c2;
-                                               comp->data[i] = data[i];
-                                       else{                   //(c2 << 8) + c1;
-                                               comp->data[i] = ShortSwap(data[i]);
-                                       }
-                                       if (comp->data[i] > max)
-                                               max = comp->data[i];
-                               }
-                               free(data);
-                       } else {
-                               short *data = (short *) malloc(whl);
-                               int leido = fread(data, 2, whl, f);
-                               if (!leido)     {
-                                       free(data);     fclose(f);
-                                       return NULL;
-                               }
-                               for (i = 0; i < whl; i++) {
-                                       if (bigendian){ //(c1 << 8) + c2;
-                                               comp->data[i] = data[i];
-                                       }else{                  //(c2 << 8) + c1;
-                                               comp->data[i] = (short) ShortSwap((unsigned short) data[i]);
-                                       }
-                                       if (comp->data[i] > max)
-                                               max = comp->data[i];
-                               }
-                               free(data);
-                       }
-               } else {
-                       if (!comp->sgnd) {
+                int leido = fread(data, 2, whl, f);
+                if (!leido) {
+                    free(data); fclose(f);
+                    return NULL;
+                }
+
+                for (i = 0; i < whl; i++) {
+                    if (bigendian)  //(c1 << 8) + c2;
+                        comp->data[i] = data[i];
+                    else{           //(c2 << 8) + c1;
+                        comp->data[i] = ShortSwap(data[i]);
+                    }
+                    if (comp->data[i] > max)
+                        max = comp->data[i];
+                }
+                free(data);
+            } else {
+                short *data = (short *) malloc(whl);
+                int leido = fread(data, 2, whl, f);
+                if (!leido) {
+                    free(data); fclose(f);
+                    return NULL;
+                }
+                for (i = 0; i < whl; i++) {
+                    if (bigendian){ //(c1 << 8) + c2;
+                        comp->data[i] = data[i];
+                    }else{          //(c2 << 8) + c1;
+                        comp->data[i] = (short) ShortSwap((unsigned short) data[i]);
+                    }
+                    if (comp->data[i] > max)
+                        max = comp->data[i];
+                }
+                free(data);
+            }
+        } else {
+            if (!comp->sgnd) {
                 unsigned int *data = (unsigned int *) malloc(whl * sizeof(unsigned int));
-                               int leido = fread(data, 4, whl, f);
-                               if (!leido)     {
-                                       free(data);     fclose(f);
-                                       return NULL;
-                               }                               for (i = 0; i < whl; i++) {
-                                       if (!bigendian)
-                                               comp->data[i] = LongSwap(data[i]);
-                                       else
-                                               comp->data[i] = data[i];
-                                       if (comp->data[i] > max)
-                                               max = comp->data[i];
-                               }
-                               free(data);
-                       } else {
-                               int leido = fread(comp->data, 4, whl, f);
-                               if (!leido)     {
-                                       fclose(f);
-                                       return NULL;
-                               }                               
-                               for (i = 0; i < whl; i++) {
-                                       if (!bigendian) 
-                                               comp->data[i] = (int) LongSwap((unsigned int) comp->data[i]);
-                                       if (comp->data[i] > max)
-                                               max = comp->data[i];
-                               }
-                       }
-               }*/
-               
-               for (i = 0; i < whl; i++) {
-                       int v;
-                       if (comp->prec <= 8) {
-                               if (!comp->sgnd) {
-                                       v = readuchar(f);
-                               } else {
-                                       v = (char) readuchar(f);
-                               }
-                       } else if (comp->prec <= 16) {
-                               if (!comp->sgnd) {
-                                       v = readushort(f, bigendian);
-                               } else {
-                                       v = (short) readushort(f, bigendian);
-                               }
-                       } else {
-                               if (!comp->sgnd) {
-                                       v = readuint(f, bigendian);
-                               } else {
-                                       v = (int) readuint(f, bigendian);
-                               }
-                       }
-                       if (v > max)
-                               max = v;
-                       comp->data[i] = v;
-               }
-               comp->bpp = int_floorlog2(max) + 1;
-       }
-       fclose(f);
-       return volume;
+                int leido = fread(data, 4, whl, f);
+                if (!leido) {
+                    free(data); fclose(f);
+                    return NULL;
+                }               for (i = 0; i < whl; i++) {
+                    if (!bigendian)
+                        comp->data[i] = LongSwap(data[i]);
+                    else
+                        comp->data[i] = data[i];
+                    if (comp->data[i] > max)
+                        max = comp->data[i];
+                }
+                free(data);
+            } else {
+                int leido = fread(comp->data, 4, whl, f);
+                if (!leido) {
+                    fclose(f);
+                    return NULL;
+                }
+                for (i = 0; i < whl; i++) {
+                    if (!bigendian)
+                        comp->data[i] = (int) LongSwap((unsigned int) comp->data[i]);
+                    if (comp->data[i] > max)
+                        max = comp->data[i];
+                }
+            }
+        }*/
+
+        for (i = 0; i < whl; i++) {
+            int v;
+            if (comp->prec <= 8) {
+                if (!comp->sgnd) {
+                    v = readuchar(f);
+                } else {
+                    v = (char) readuchar(f);
+                }
+            } else if (comp->prec <= 16) {
+                if (!comp->sgnd) {
+                    v = readushort(f, bigendian);
+                } else {
+                    v = (short) readushort(f, bigendian);
+                }
+            } else {
+                if (!comp->sgnd) {
+                    v = readuint(f, bigendian);
+                } else {
+                    v = (int) readuint(f, bigendian);
+                }
+            }
+            if (v > max) {
+                max = v;
+            }
+            comp->data[i] = v;
+        }
+        comp->bpp = int_floorlog2(max) + 1;
+    }
+    fclose(f);
+    return volume;
 }
 
-int volumetobin(opj_volume_t * volume, char *outfile) {
-       int w, wr, wrr, h, hr, hrr, l, lr, lrr, max;
-       int i,j, compno, nbytes;
-       int offset, sliceno;
-       FILE *fdest = NULL;
-       FILE *fimgdest = NULL;
-/*     char *imgtemp;*/
-       char name[256];
-
-       for (compno = 0; compno < 1; compno++) { /*Only one component*/
-               
-               fdest = fopen(outfile, "wb");
-               if (!fdest) {
-                       fprintf(stdout, "[ERROR] Failed to open %s for writing\n", outfile);
-                       return 1;
-               }
-        fprintf(stdout,"[INFO] Writing outfile %s (%s) \n",outfile, volume->comps[0].bigendian ? "Bigendian" : "Little-endian");
-
-               w = int_ceildiv(volume->x1 - volume->x0, volume->comps[compno].dx);
-               wr = volume->comps[compno].w;
-               wrr = int_ceildivpow2(volume->comps[compno].w, volume->comps[compno].factor[0]);
-               
-               h = int_ceildiv(volume->y1 - volume->y0, volume->comps[compno].dy);
-               hr = volume->comps[compno].h;
-               hrr = int_ceildivpow2(volume->comps[compno].h, volume->comps[compno].factor[1]);
-               
-               l = int_ceildiv(volume->z1 - volume->z0, volume->comps[compno].dz);
-               lr = volume->comps[compno].l;
-               lrr = int_ceildivpow2(volume->comps[compno].l, volume->comps[compno].factor[2]);
-
-               max = (volume->comps[compno].prec <= 8) ? 255 : (1 << volume->comps[compno].prec) - 1;
-               
-               volume->comps[compno].x0 = int_ceildivpow2(volume->comps[compno].x0 - int_ceildiv(volume->x0, volume->comps[compno].dx), volume->comps[compno].factor[0]);
-               volume->comps[compno].y0 = int_ceildivpow2(volume->comps[compno].y0 - int_ceildiv(volume->y0, volume->comps[compno].dy), volume->comps[compno].factor[1]);
-               volume->comps[compno].z0 = int_ceildivpow2(volume->comps[compno].z0 - int_ceildiv(volume->z0, volume->comps[compno].dz), volume->comps[compno].factor[2]);
-               
-               if (volume->comps[0].prec <= 8) {
-                       nbytes = 1;
-               } else if (volume->comps[0].prec <= 16) {
-                       nbytes = 2;
-               } else {
-                       nbytes = 4;
-               }
-
-               /*fprintf(stdout,"w %d wr %d wrr %d h %d hr %d hrr %d l %d lr %d lrr %d max %d nbytes %d\n Factor %d %d %d",w,wr,wrr,h,hr,hrr,l,lr,lrr,max,nbytes,volume->comps[compno].factor[0],volume->comps[compno].factor[1],volume->comps[compno].factor[2]);*/
-
-               for(sliceno = 0; sliceno < lrr; sliceno++) {
-                       offset = (sliceno / lrr * l) + (sliceno % lrr);
+int volumetobin(opj_volume_t * volume, char *outfile)
+{
+    int w, wr, wrr, h, hr, hrr, l, lr, lrr, max;
+    int i, j, compno, nbytes;
+    int offset, sliceno;
+    FILE *fdest = NULL;
+    FILE *fimgdest = NULL;
+    /*  char *imgtemp;*/
+    char name[256];
+
+    for (compno = 0; compno < 1; compno++) { /*Only one component*/
+
+        fdest = fopen(outfile, "wb");
+        if (!fdest) {
+            fprintf(stdout, "[ERROR] Failed to open %s for writing\n", outfile);
+            return 1;
+        }
+        fprintf(stdout, "[INFO] Writing outfile %s (%s) \n", outfile,
+                volume->comps[0].bigendian ? "Bigendian" : "Little-endian");
+
+        w = int_ceildiv(volume->x1 - volume->x0, volume->comps[compno].dx);
+        wr = volume->comps[compno].w;
+        wrr = int_ceildivpow2(volume->comps[compno].w, volume->comps[compno].factor[0]);
+
+        h = int_ceildiv(volume->y1 - volume->y0, volume->comps[compno].dy);
+        hr = volume->comps[compno].h;
+        hrr = int_ceildivpow2(volume->comps[compno].h, volume->comps[compno].factor[1]);
+
+        l = int_ceildiv(volume->z1 - volume->z0, volume->comps[compno].dz);
+        lr = volume->comps[compno].l;
+        lrr = int_ceildivpow2(volume->comps[compno].l, volume->comps[compno].factor[2]);
+
+        max = (volume->comps[compno].prec <= 8) ? 255 : (1 <<
+                volume->comps[compno].prec) - 1;
+
+        volume->comps[compno].x0 = int_ceildivpow2(volume->comps[compno].x0 -
+                                   int_ceildiv(volume->x0, volume->comps[compno].dx),
+                                   volume->comps[compno].factor[0]);
+        volume->comps[compno].y0 = int_ceildivpow2(volume->comps[compno].y0 -
+                                   int_ceildiv(volume->y0, volume->comps[compno].dy),
+                                   volume->comps[compno].factor[1]);
+        volume->comps[compno].z0 = int_ceildivpow2(volume->comps[compno].z0 -
+                                   int_ceildiv(volume->z0, volume->comps[compno].dz),
+                                   volume->comps[compno].factor[2]);
+
+        if (volume->comps[0].prec <= 8) {
+            nbytes = 1;
+        } else if (volume->comps[0].prec <= 16) {
+            nbytes = 2;
+        } else {
+            nbytes = 4;
+        }
+
+        /*fprintf(stdout,"w %d wr %d wrr %d h %d hr %d hrr %d l %d lr %d lrr %d max %d nbytes %d\n Factor %d %d %d",w,wr,wrr,h,hr,hrr,l,lr,lrr,max,nbytes,volume->comps[compno].factor[0],volume->comps[compno].factor[1],volume->comps[compno].factor[2]);*/
+
+        for (sliceno = 0; sliceno < lrr; sliceno++) {
+            offset = (sliceno / lrr * l) + (sliceno % lrr);
             offset = wrr * hrr * offset;
-                       for (i = 0; i < wrr * hrr; i++) {
-                               int v = volume->comps[0].data[(i / wrr * w) + (i % wrr) + offset];
-                               if (volume->comps[0].bigendian) {
-                                       for (j = nbytes - 1; j >= 0; j--) {
-                        char byte = (char) ((v >> (j * 8)) & 0xff);
+            for (i = 0; i < wrr * hrr; i++) {
+                int v = volume->comps[0].data[(i / wrr * w) + (i % wrr) + offset];
+                if (volume->comps[0].bigendian) {
+                    for (j = nbytes - 1; j >= 0; j--) {
+                        char byte = (char)((v >> (j * 8)) & 0xff);
                         fwrite(&byte, 1, 1, fdest);
-                                       }
-                               } else {
-                                       for (j = 0; j <= nbytes - 1; j++) {
-                        char byte = (char) ((v >> (j * 8)) & 0xff);
-                                               fwrite(&byte, 1, 1, fdest);
-                                       }
-                               }
-                       }
-               }
-       
-       }
-       
-       fclose(fdest);
-
-       sprintf(name,"%s.img",outfile);
-       fimgdest = fopen(name, "w");
-               if (!fimgdest) {
-                       fprintf(stdout, "[ERROR] Failed to open %s for writing\n", name);
-                       return 1;
-               }
-       fprintf(fimgdest, "Bpp\t%d\nColor Map\t2\nDimensions\t%d\t%d\t%d\nResolution(mm)\t%d\t%d\t%d\t\n",
-               volume->comps[0].prec,wrr,hrr,lrr,volume->comps[0].dx,volume->comps[0].dy,volume->comps[0].dz);
-
-       fclose(fimgdest);
-       return 0;
+                    }
+                } else {
+                    for (j = 0; j <= nbytes - 1; j++) {
+                        char byte = (char)((v >> (j * 8)) & 0xff);
+                        fwrite(&byte, 1, 1, fdest);
+                    }
+                }
+            }
+        }
+
+    }
+
+    fclose(fdest);
+
+    sprintf(name, "%s.img", outfile);
+    fimgdest = fopen(name, "w");
+    if (!fimgdest) {
+        fprintf(stdout, "[ERROR] Failed to open %s for writing\n", name);
+        return 1;
+    }
+    fprintf(fimgdest,
+            "Bpp\t%d\nColor Map\t2\nDimensions\t%d\t%d\t%d\nResolution(mm)\t%d\t%d\t%d\t\n",
+            volume->comps[0].prec, wrr, hrr, lrr, volume->comps[0].dx, volume->comps[0].dy,
+            volume->comps[0].dz);
+
+    fclose(fimgdest);
+    return 0;
 }
 /* -->> -->> -->> -->>
 
 IMG IMAGE FORMAT
 
 <<-- <<-- <<-- <<-- */
-opj_volume_t* imgtovolume(char *fileimg, opj_cparameters_t *parameters) {
-       int subsampling_dx =  parameters->subsampling_dx;
-       int subsampling_dy =  parameters->subsampling_dy;
-       int subsampling_dz =  parameters->subsampling_dz;
-       
-       int i, compno, w, h, l, numcomps = 1;
-       int prec, max = 0, min = 0;
-       float dx, dy, dz;
-       char filename[100], tmpdirpath[100], dirpath[100], *tmp;
-       char line[100], datatype[100];
-       int bigendian;
-       
-       FILE *f = NULL;
-       FILE *fimg = NULL;
-       OPJ_COLOR_SPACE color_space;
-       opj_volume_cmptparm_t cmptparm; /* maximum of 1 component */
-       opj_volume_t * volume = NULL;
-       opj_volume_comp_t *comp = NULL;
-
-       bigendian = 0;
-       color_space = CLRSPC_GRAY;
-
-       fimg = fopen(fileimg,"r");
-       if (!fimg) { 
-               fprintf(stderr, "[ERROR] Failed to open %s for reading !!\n", fileimg);
-               return 0;
-       }
-
-       /*Fetch only the path */
-       strcpy(tmpdirpath,fileimg);
-       if ((tmp = strrchr(tmpdirpath,'/')) != NULL){
-               tmp++; *tmp='\0';
-               strcpy(dirpath,tmpdirpath);
-       } else {
-               strcpy(dirpath,"./");
-       }
-
-       fseek(fimg, 0, SEEK_SET);
-       while (!feof(fimg)) {
-        fgets(line,100,fimg);
-               /*fprintf(stdout,"%s %d \n",line,feof(fimg));*/
-               if (strncmp(line,"Image",5) == 0){
-                       sscanf(line,"%*s%*[ \t]%s",datatype);
-               } else if (strncmp(line,"File",4) == 0){
-                       sscanf(line,"%*s %*s%*[ \t]%s",filename);
-                       strcat(dirpath, filename);
-                       strcpy(filename,dirpath);
-               } else if (strncmp(line,"Min",3) == 0){
-                       sscanf(line,"%*s %*s%*[ \t]%d%*[ \t]%d",&min,&max);
-                       prec = int_floorlog2(max - min + 1);
-               } else if (strncmp(line,"Bpp",3) == 0){
-                       sscanf(line,"%*s%*[ \t]%d",&prec);
-               } else if (strncmp(line,"Color",5) == 0){
-                       sscanf(line, "%*s %*s%*[ \t]%d",&color_space);
-               } else if (strncmp(line,"Dim",3) == 0){
-                       sscanf(line, "%*s%*[ \t]%d%*[ \t]%d%*[ \t]%d",&w,&h,&l);
-               } else if (strncmp(line,"Res",3) == 0){
-                       sscanf(line,"%*s%*[ \t]%f%*[ \t]%f%*[ \t]%f",&dx,&dy,&dz);
-               }
-
-       }
-       #ifdef VERBOSE
-               fprintf(stdout, "[INFO] %s %d \t %d %d %d \t %f %f %f \t %d %d %d \n",filename,color_space,w,h,l,dx,dy,dz,max,min,prec);
-       #endif
-       fclose(fimg);
-
-       /* error control */
-       if ( !prec || !w || !h || !l ){
-               fprintf(stderr,"[ERROR] Unable to read IMG file correctly. Found some null values.");   
-               return NULL;
-       }
-
-       /* initialize volume components */
-       memset(&cmptparm, 0, sizeof(opj_volume_cmptparm_t));
-       
-       cmptparm.prec = prec;
-       cmptparm.bpp = prec;
-       cmptparm.sgnd = 0;
-       cmptparm.bigendian = bigendian;
-       cmptparm.dcoffset = parameters->dcoffset;
-       cmptparm.dx = subsampling_dx;
-       cmptparm.dy = subsampling_dy;
-       cmptparm.dz = subsampling_dz;
-       cmptparm.w = w;
-       cmptparm.h = h;
-       cmptparm.l = l;
-       
-       /* create the volume */
-       volume = opj_volume_create(numcomps, &cmptparm, color_space);
-       if(!volume) {
-               fprintf(stdout,"[ERROR] Unable to create volume");      
-               return NULL;
-       }
-       
-       /* set volume offset and reference grid */
-       volume->x0 = parameters->volume_offset_x0;
-       volume->y0 = parameters->volume_offset_y0;
-       volume->z0 = parameters->volume_offset_z0;
-       volume->x1 = parameters->volume_offset_x0 + (w - 1) *   subsampling_dx + 1;
-       volume->y1 = parameters->volume_offset_y0 + (h - 1) *   subsampling_dy + 1;
-       volume->z1 = parameters->volume_offset_z0 + (l - 1) *   subsampling_dz + 1;
-       
-       max = 0;
-       /* set volume data */
-       f = fopen(filename, "rb");
-       if (!f) {
-               fprintf(stderr, "[ERROR] Failed to open %s for reading !!\n", filename);
-               fclose(f);
-               return 0;
-       }
-       
-       /* BINARY */
-       for (compno = 0; compno < volume->numcomps; compno++) {
-               int whl = w * h * l;
-               /* set volume data */
-               comp = &volume->comps[compno];
-               
-               /*if (comp->prec <= 8) {
-                       if (!comp->sgnd) {
+opj_volume_t* imgtovolume(char *fileimg, opj_cparameters_t *parameters)
+{
+    int subsampling_dx =  parameters->subsampling_dx;
+    int subsampling_dy =  parameters->subsampling_dy;
+    int subsampling_dz =  parameters->subsampling_dz;
+
+    int i, compno, w, h, l, numcomps = 1;
+    int prec, max = 0, min = 0;
+    float dx, dy, dz;
+    char filename[100], tmpdirpath[100], dirpath[100], *tmp;
+    char line[100], datatype[100];
+    int bigendian;
+
+    FILE *f = NULL;
+    FILE *fimg = NULL;
+    OPJ_COLOR_SPACE color_space;
+    opj_volume_cmptparm_t cmptparm; /* maximum of 1 component */
+    opj_volume_t * volume = NULL;
+    opj_volume_comp_t *comp = NULL;
+
+    bigendian = 0;
+    color_space = CLRSPC_GRAY;
+
+    fimg = fopen(fileimg, "r");
+    if (!fimg) {
+        fprintf(stderr, "[ERROR] Failed to open %s for reading !!\n", fileimg);
+        return 0;
+    }
+
+    /*Fetch only the path */
+    strcpy(tmpdirpath, fileimg);
+    if ((tmp = strrchr(tmpdirpath, '/')) != NULL) {
+        tmp++;
+        *tmp = '\0';
+        strcpy(dirpath, tmpdirpath);
+    } else {
+        strcpy(dirpath, "./");
+    }
+
+    fseek(fimg, 0, SEEK_SET);
+    while (!feof(fimg)) {
+        fgets(line, 100, fimg);
+        /*fprintf(stdout,"%s %d \n",line,feof(fimg));*/
+        if (strncmp(line, "Image", 5) == 0) {
+            sscanf(line, "%*s%*[ \t]%s", datatype);
+        } else if (strncmp(line, "File", 4) == 0) {
+            sscanf(line, "%*s %*s%*[ \t]%s", filename);
+            strcat(dirpath, filename);
+            strcpy(filename, dirpath);
+        } else if (strncmp(line, "Min", 3) == 0) {
+            sscanf(line, "%*s %*s%*[ \t]%d%*[ \t]%d", &min, &max);
+            prec = int_floorlog2(max - min + 1);
+        } else if (strncmp(line, "Bpp", 3) == 0) {
+            sscanf(line, "%*s%*[ \t]%d", &prec);
+        } else if (strncmp(line, "Color", 5) == 0) {
+            sscanf(line, "%*s %*s%*[ \t]%d", &color_space);
+        } else if (strncmp(line, "Dim", 3) == 0) {
+            sscanf(line, "%*s%*[ \t]%d%*[ \t]%d%*[ \t]%d", &w, &h, &l);
+        } else if (strncmp(line, "Res", 3) == 0) {
+            sscanf(line, "%*s%*[ \t]%f%*[ \t]%f%*[ \t]%f", &dx, &dy, &dz);
+        }
+
+    }
+#ifdef VERBOSE
+    fprintf(stdout, "[INFO] %s %d \t %d %d %d \t %f %f %f \t %d %d %d \n", filename,
+            color_space, w, h, l, dx, dy, dz, max, min, prec);
+#endif
+    fclose(fimg);
+
+    /* error control */
+    if (!prec || !w || !h || !l) {
+        fprintf(stderr,
+                "[ERROR] Unable to read IMG file correctly. Found some null values.");
+        return NULL;
+    }
+
+    /* initialize volume components */
+    memset(&cmptparm, 0, sizeof(opj_volume_cmptparm_t));
+
+    cmptparm.prec = prec;
+    cmptparm.bpp = prec;
+    cmptparm.sgnd = 0;
+    cmptparm.bigendian = bigendian;
+    cmptparm.dcoffset = parameters->dcoffset;
+    cmptparm.dx = subsampling_dx;
+    cmptparm.dy = subsampling_dy;
+    cmptparm.dz = subsampling_dz;
+    cmptparm.w = w;
+    cmptparm.h = h;
+    cmptparm.l = l;
+
+    /* create the volume */
+    volume = opj_volume_create(numcomps, &cmptparm, color_space);
+    if (!volume) {
+        fprintf(stdout, "[ERROR] Unable to create volume");
+        return NULL;
+    }
+
+    /* set volume offset and reference grid */
+    volume->x0 = parameters->volume_offset_x0;
+    volume->y0 = parameters->volume_offset_y0;
+    volume->z0 = parameters->volume_offset_z0;
+    volume->x1 = parameters->volume_offset_x0 + (w - 1) *   subsampling_dx + 1;
+    volume->y1 = parameters->volume_offset_y0 + (h - 1) *   subsampling_dy + 1;
+    volume->z1 = parameters->volume_offset_z0 + (l - 1) *   subsampling_dz + 1;
+
+    max = 0;
+    /* set volume data */
+    f = fopen(filename, "rb");
+    if (!f) {
+        fprintf(stderr, "[ERROR] Failed to open %s for reading !!\n", filename);
+        fclose(f);
+        return 0;
+    }
+
+    /* BINARY */
+    for (compno = 0; compno < volume->numcomps; compno++) {
+        int whl = w * h * l;
+        /* set volume data */
+        comp = &volume->comps[compno];
+
+        /*if (comp->prec <= 8) {
+            if (!comp->sgnd) {
                 unsigned char *data = (unsigned char *) malloc(whl * sizeof(unsigned char));
-                               fread(data, 1, whl, f);
-                               for (i = 0; i < whl; i++) {
-                                       comp->data[i] = data[i];
-                                       if (comp->data[i] > max)
-                                               max = comp->data[i];
-                               }
-                               free(data);
-                       } else {
-                               char *data = (char *) malloc(whl);
-                               fread(data, 1, whl, f);
-                               for (i = 0; i < whl; i++) {
-                                       comp->data[i] = data[i];
-                                       if (comp->data[i] > max)
-                                               max = comp->data[i];
-                               }
-                               free(data);
-                       }
-               } else if (comp->prec <= 16) {
-                       if (!comp->sgnd) {
+                fread(data, 1, whl, f);
+                for (i = 0; i < whl; i++) {
+                    comp->data[i] = data[i];
+                    if (comp->data[i] > max)
+                        max = comp->data[i];
+                }
+                free(data);
+            } else {
+                char *data = (char *) malloc(whl);
+                fread(data, 1, whl, f);
+                for (i = 0; i < whl; i++) {
+                    comp->data[i] = data[i];
+                    if (comp->data[i] > max)
+                        max = comp->data[i];
+                }
+                free(data);
+            }
+        } else if (comp->prec <= 16) {
+            if (!comp->sgnd) {
                 unsigned short *data = (unsigned short *) malloc(whl * sizeof(unsigned short));
-                               int leido = fread(data, 2, whl, f);
-                               if (!leido)     {
-                                       free(data);     fclose(f);
-                                       return NULL;
-                               }
-                               
-                               for (i = 0; i < whl; i++) {
-                                       if (bigendian)  //(c1 << 8) + c2;
-                                               comp->data[i] = data[i];
-                                       else{                   //(c2 << 8) + c1;
-                                               comp->data[i] = ShortSwap(data[i]);
-                                       }
-                                       if (comp->data[i] > max)
-                                               max = comp->data[i];
-                               }
-                               free(data);
-                       } else {
-                               short *data = (short *) malloc(whl);
-                               int leido = fread(data, 2, whl, f);
-                               if (!leido)     {
-                                       free(data);     fclose(f);
-                                       return NULL;
-                               }
-                               for (i = 0; i < whl; i++) {
-                                       if (bigendian){ //(c1 << 8) + c2;
-                                               comp->data[i] = data[i];
-                                       }else{                  //(c2 << 8) + c1;
-                                               comp->data[i] = (short) ShortSwap((unsigned short) data[i]);
-                                       }
-                                       if (comp->data[i] > max)
-                                               max = comp->data[i];
-                               }
-                               free(data);
-                       }
-               } else {
-                       if (!comp->sgnd) {
+                int leido = fread(data, 2, whl, f);
+                if (!leido) {
+                    free(data); fclose(f);
+                    return NULL;
+                }
+
+                for (i = 0; i < whl; i++) {
+                    if (bigendian)  //(c1 << 8) + c2;
+                        comp->data[i] = data[i];
+                    else{           //(c2 << 8) + c1;
+                        comp->data[i] = ShortSwap(data[i]);
+                    }
+                    if (comp->data[i] > max)
+                        max = comp->data[i];
+                }
+                free(data);
+            } else {
+                short *data = (short *) malloc(whl);
+                int leido = fread(data, 2, whl, f);
+                if (!leido) {
+                    free(data); fclose(f);
+                    return NULL;
+                }
+                for (i = 0; i < whl; i++) {
+                    if (bigendian){ //(c1 << 8) + c2;
+                        comp->data[i] = data[i];
+                    }else{          //(c2 << 8) + c1;
+                        comp->data[i] = (short) ShortSwap((unsigned short) data[i]);
+                    }
+                    if (comp->data[i] > max)
+                        max = comp->data[i];
+                }
+                free(data);
+            }
+        } else {
+            if (!comp->sgnd) {
                 unsigned int *data = (unsigned int *) malloc(whl * sizeof(unsigned int));
-                               int leido = fread(data, 4, whl, f);
-                               if (!leido)     {
-                                       free(data);     fclose(f);
-                                       return NULL;
-                               }                               for (i = 0; i < whl; i++) {
-                                       if (!bigendian)
-                                               comp->data[i] = LongSwap(data[i]);
-                                       else
-                                               comp->data[i] = data[i];
-                                       if (comp->data[i] > max)
-                                               max = comp->data[i];
-                               }
-                               free(data);
-                       } else {
-                               int leido = fread(comp->data, 4, whl, f);
-                               if (!leido)     {
-                                       fclose(f);
-                                       return NULL;
-                               }                               
-                               for (i = 0; i < whl; i++) {
-                                       if (!bigendian) 
-                                               comp->data[i] = (int) LongSwap((unsigned int) comp->data[i]);
-                                       if (comp->data[i] > max)
-                                               max = comp->data[i];
-                               }
-                       }
-               }*/
-               
-               for (i = 0; i < whl; i++) {
-                       int v;
-                       if (comp->prec <= 8) {
-                               if (!comp->sgnd) {
-                                       v = readuchar(f);
-                               } else {
-                                       v = (char) readuchar(f);
-                               }
-                       } else if (comp->prec <= 16) {
-                               if (!comp->sgnd) {
-                                       v = readushort(f, bigendian);
-                               } else {
-                                       v = (short) readushort(f, bigendian);
-                               }
-                       } else {
-                               if (!comp->sgnd) {
-                                       v = readuint(f, bigendian);
-                               } else {
-                                       v = (int) readuint(f, bigendian);
-                               }
-                       }
-                       if (v > max)
-                               max = v;
-                       comp->data[i] = v;
-               }
-               comp->bpp = int_floorlog2(max) + 1;
-       }
-       fclose(f);
-       return volume;
+                int leido = fread(data, 4, whl, f);
+                if (!leido) {
+                    free(data); fclose(f);
+                    return NULL;
+                }               for (i = 0; i < whl; i++) {
+                    if (!bigendian)
+                        comp->data[i] = LongSwap(data[i]);
+                    else
+                        comp->data[i] = data[i];
+                    if (comp->data[i] > max)
+                        max = comp->data[i];
+                }
+                free(data);
+            } else {
+                int leido = fread(comp->data, 4, whl, f);
+                if (!leido) {
+                    fclose(f);
+                    return NULL;
+                }
+                for (i = 0; i < whl; i++) {
+                    if (!bigendian)
+                        comp->data[i] = (int) LongSwap((unsigned int) comp->data[i]);
+                    if (comp->data[i] > max)
+                        max = comp->data[i];
+                }
+            }
+        }*/
+
+        for (i = 0; i < whl; i++) {
+            int v;
+            if (comp->prec <= 8) {
+                if (!comp->sgnd) {
+                    v = readuchar(f);
+                } else {
+                    v = (char) readuchar(f);
+                }
+            } else if (comp->prec <= 16) {
+                if (!comp->sgnd) {
+                    v = readushort(f, bigendian);
+                } else {
+                    v = (short) readushort(f, bigendian);
+                }
+            } else {
+                if (!comp->sgnd) {
+                    v = readuint(f, bigendian);
+                } else {
+                    v = (int) readuint(f, bigendian);
+                }
+            }
+            if (v > max) {
+                max = v;
+            }
+            comp->data[i] = v;
+        }
+        comp->bpp = int_floorlog2(max) + 1;
+    }
+    fclose(f);
+    return volume;
 }
 
old mode 100755 (executable)
new mode 100644 (file)
index 69addc9..855b9ae
-/*\r
- * Copyright (c) 1987, 1993, 1994\r
- *     The Regents of the University of California.  All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- *    notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- *    notice, this list of conditions and the following disclaimer in the\r
- *    documentation and/or other materials provided with the distribution.\r
- * 3. All advertising materials mentioning features or use of this software\r
- *    must display the following acknowledgement:\r
- *     This product includes software developed by the University of\r
- *     California, Berkeley and its contributors.\r
- * 4. Neither the name of the University nor the names of its contributors\r
- *    may be used to endorse or promote products derived from this software\r
- *    without specific prior written permission.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\r
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\r
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
- * SUCH DAMAGE.\r
- */\r
-\r
-/* last review : october 29th, 2002 */\r
-\r
-#if defined(LIBC_SCCS) && !defined(lint)\r
-static char sccsid[] = "@(#)getopt.c   8.3 (Berkeley) 4/27/95";\r
-#endif                         /* LIBC_SCCS and not lint */\r
-\r
-#include <stdio.h>\r
-#include <stdlib.h>\r
-#include <string.h>\r
-\r
-int opterr = 1,                        /* if error message should be printed */\r
- optind = 1,                   /* index into parent argv vector */\r
- optopt,                               /* character checked for validity */\r
- optreset;                             /* reset getopt */\r
-char *optarg;                  /* argument associated with option */\r
-\r
-#define        BADCH   (int)'?'\r
-#define        BADARG  (int)':'\r
-#define        EMSG    ""\r
-\r
-/*\r
- * getopt --\r
- *     Parse argc/argv argument vector.\r
- */\r
-int getopt(int nargc, char *const *nargv, const char *ostr) {\r
-       \r
-  #  define __progname nargv[0] /* program name */\r
-       \r
-  static char *place = EMSG;   /* option letter processing */\r
-  char *oli;                                   /* option letter list index */\r
-\r
-  if (optreset || !*place) {   /* update scanning pointer */\r
-    optreset = 0;\r
-    if (optind >= nargc || *(place = nargv[optind]) != '-') {\r
-      place = EMSG;\r
-      return (-1);\r
-    }\r
-    if (place[1] && *++place == '-') { /* found "--" */\r
-      ++optind;\r
-      place = EMSG;\r
-      return (-1);\r
-    }\r
-  }    /* option letter okay? */\r
-  \r
-  if ((optopt = (int) *place++) == (int) ':' || !(oli = strchr(ostr, optopt))) {\r
-    /* if the user didn't specify '-' as an option, assume it means -1. */\r
-    if (optopt == (int) '-')\r
-      return (-1);\r
-    if (!*place)\r
-      ++optind;\r
-    if (opterr && *ostr != ':')\r
-      (void) fprintf(stdout,"[ERROR] %s: illegal option -- %c\n", __progname, optopt);\r
-    return (BADCH);\r
-  }\r
-\r
-  if (*++oli != ':') {         /* don't need argument */\r
-    optarg = NULL;\r
-    if (!*place)\r
-      ++optind;\r
-  } else {                                     /* need an argument */\r
-    if (*place)                                                /* no white space */\r
-      optarg = place;\r
-    else if (nargc <= ++optind) {      /* no arg */\r
-      place = EMSG;\r
-      if (*ostr == ':')\r
-               return (BADARG);\r
-      if (opterr)\r
-               (void) fprintf(stdout, "[ERROR] %s: option requires an argument -- %c\n", __progname, optopt);\r
-      return (BADCH);\r
-    } else                                                     /* white space */\r
-      optarg = nargv[optind];\r
-    place = EMSG;\r
-    ++optind;\r
-  }\r
-  return (optopt);             /* dump back option letter */\r
-}\r
+/*
+ * Copyright (c) 1987, 1993, 1994
+ *  The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *  This product includes software developed by the University of
+ *  California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* last review : october 29th, 2002 */
+
+#if defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "@(#)getopt.c   8.3 (Berkeley) 4/27/95";
+#endif              /* LIBC_SCCS and not lint */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int opterr = 1,         /* if error message should be printed */
+    optind = 1,            /* index into parent argv vector */
+    optopt,                /* character checked for validity */
+    optreset;              /* reset getopt */
+char *optarg;           /* argument associated with option */
+
+#define BADCH   (int)'?'
+#define BADARG  (int)':'
+#define EMSG    ""
+
+/*
+ * getopt --
+ *  Parse argc/argv argument vector.
+ */
+int getopt(int nargc, char *const *nargv, const char *ostr)
+{
+
+#  define __progname nargv[0] /* program name */
+
+    static char *place = EMSG;    /* option letter processing */
+    char *oli;                    /* option letter list index */
+
+    if (optreset || !*place) {    /* update scanning pointer */
+        optreset = 0;
+        if (optind >= nargc || *(place = nargv[optind]) != '-') {
+            place = EMSG;
+            return (-1);
+        }
+        if (place[1] && *++place == '-') {  /* found "--" */
+            ++optind;
+            place = EMSG;
+            return (-1);
+        }
+    } /* option letter okay? */
+
+    if ((optopt = (int) * place++) == (int) ':' || !(oli = strchr(ostr, optopt))) {
+        /* if the user didn't specify '-' as an option, assume it means -1. */
+        if (optopt == (int) '-') {
+            return (-1);
+        }
+        if (!*place) {
+            ++optind;
+        }
+        if (opterr && *ostr != ':') {
+            (void) fprintf(stdout, "[ERROR] %s: illegal option -- %c\n", __progname,
+                           optopt);
+        }
+        return (BADCH);
+    }
+
+    if (*++oli != ':') {      /* don't need argument */
+        optarg = NULL;
+        if (!*place) {
+            ++optind;
+        }
+    } else {                  /* need an argument */
+        if (*place) {                   /* no white space */
+            optarg = place;
+        } else if (nargc <= ++optind) { /* no arg */
+            place = EMSG;
+            if (*ostr == ':') {
+                return (BADARG);
+            }
+            if (opterr) {
+                (void) fprintf(stdout, "[ERROR] %s: option requires an argument -- %c\n",
+                               __progname, optopt);
+            }
+            return (BADCH);
+        } else {                        /* white space */
+            optarg = nargv[optind];
+        }
+        place = EMSG;
+        ++optind;
+    }
+    return (optopt);      /* dump back option letter */
+}
old mode 100755 (executable)
new mode 100644 (file)
index b774e14..2b40da3
-/*\r
- * Copyright (c) 2001-2003, David Janssens\r
- * Copyright (c) 2002-2003, Yannick Verschueren\r
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe\r
- * Copyright (c) 2005, Herve Drolon, FreeImage Team\r
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium\r
- * Copyright (c) 2006, M�nica D�ez Garc�a, Image Processing Laboratory, University of Valladolid, Spain\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- *    notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- *    notice, this list of conditions and the following disclaimer in the\r
- *    documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'\r
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\r
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
- * POSSIBILITY OF SUCH DAMAGE.\r
- */\r
-#include <stdio.h>\r
-#include <string.h>\r
-#include <stdlib.h>\r
-\r
-#include "opj_config.h"\r
-#include "openjp3d.h"\r
-#include "opj_getopt.h"\r
-#include "convert.h"\r
-\r
-#ifdef _WIN32\r
-#include <windows.h>\r
-#else\r
-#define stricmp strcasecmp\r
-#define strnicmp strncasecmp\r
-#endif /* _WIN32 */\r
-\r
-/* ----------------------------------------------------------------------- */\r
-\r
-void encode_help_display() {\r
-       fprintf(stdout,"List of parameters for the JPEG2000 Part 10 encoder:\n");\r
-       fprintf(stdout,"------------\n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"Required Parameters (except with -h):\n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"-i           : source file  (-i source.bin or source*.pgx) \n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"-m           : source characteristics file (-m imgfile.img) \n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"-o           : destination file (-o dest.jp3d) \n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"Optional Parameters:\n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"-h           : display the help information \n ");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"-n           : number of resolutions (-n 3,3,3) \n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"-I           : use the irreversible transforms: ICT + DWT 9-7 (-I) \n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"-C           : coding algorithm (-C 2EB) [2EB, 3EB] \n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"-r           : different compression ratios for successive layers (-r 20,10,5)\n ");\r
-       fprintf(stdout,"                 - The rate specified for each quality level is the desired compression factor.\n");\r
-       fprintf(stdout,"                 - Rate 1 means lossless compression\n");\r
-       fprintf(stdout,"               (options -r and -q cannot be used together)\n ");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"-q           : different psnr for successive layers (-q 30,40,50) \n ");\r
-       fprintf(stdout,"               (options -r and -q cannot be used together)\n ");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"-b           : size of code block (-b 32,32,32) \n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"-c           : size of precinct (-c 128,128,128) \n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"-t           : size of tile (-t 512,512,512) \n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"-p           : progression order (-p LRCP) [LRCP, RLCP, RPCL, PCRL, CPRL] \n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"-s           : subsampling factor (-s 2,2,2) [-s X,Y,Z] \n");\r
-       fprintf(stdout,"                          - Remark: subsampling bigger than 2 can produce error\n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"-SOP         : write SOP marker before each packet \n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"-EPH         : write EPH marker after each header packet \n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"-M           : code-block style (-M 0) [1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL)\n");\r
-       fprintf(stdout,"                 8=VSC 16=PTERM 32=SEGSYM 64=3DCTXT] \n");\r
-       fprintf(stdout,"                 Indicate multiple modes by adding their values. \n");\r
-       fprintf(stdout,"                 ex: RESTART(4) + RESET(2) + SEGMARK(32) = -M 38\n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"-D           : define DC offset (-D 12) \n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"-x           : create an index file *.Idx (-x index_name.Idx) \n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"-ROI         : c=%%d,U=%%d : quantization indices upshifted \n");\r
-       fprintf(stdout,"               for component c=%%d [%%d = 0,1,2]\n");\r
-       fprintf(stdout,"               with a value of U=%%d [0 <= %%d <= 37] (i.e. -ROI:c=0,U=25) \n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"-d           : offset of the origin of the volume (-d 150,300,100) \n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"-l           : offset of the origin of the tiles (-l 100,75,25) \n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"DEFAULT CODING:\n");\r
-       fprintf(stdout,"------------\n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout," * Lossless\n");\r
-       fprintf(stdout," * 1 tile\n");\r
-       fprintf(stdout," * Size of precinct : 2^15 x 2^15 x 2^15 (means 1 precinct)\n");\r
-       fprintf(stdout," * Size of code-block : 64 x 64 x 64\n");\r
-       fprintf(stdout," * Number of resolutions in x, y and z axis: 3\n");\r
-       fprintf(stdout," * No SOP marker in the codestream\n");\r
-       fprintf(stdout," * No EPH marker in the codestream\n");\r
-       fprintf(stdout," * No sub-sampling in x, y or z direction\n");\r
-       fprintf(stdout," * No mode switch activated\n");\r
-       fprintf(stdout," * Progression order: LRCP\n");\r
-       fprintf(stdout," * No index file\n");\r
-       fprintf(stdout," * No ROI upshifted\n");\r
-       fprintf(stdout," * No offset of the origin of the volume\n");\r
-       fprintf(stdout," * No offset of the origin of the tiles\n");\r
-       fprintf(stdout," * Reversible DWT 5-3 on each 2D slice\n");\r
-       fprintf(stdout," * Coding algorithm: 2D-EBCOT \n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"REMARKS:\n");\r
-       fprintf(stdout,"---------\n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"- The markers written to the main_header are : SOC SIZ COD QCD COM.\n");\r
-       fprintf(stdout,"- COD and QCD markers will never appear in the tile_header.\n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"- You need enough disk space memory (twice the original) to encode \n");\r
-       fprintf(stdout,"the volume,i.e. for a 1.5 GB volume you need a minimum of 3GB of disk memory)\n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"- When loading *.pgx files, a relative path to directory is needed for input argument \n");\r
-       fprintf(stdout," followed by the common prefix of the slices and a '*' character representing sequential numeration.\n");\r
-       fprintf(stdout,"( -i relativepath/slices*.pgx )\n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout," - The index file has the structure below:\n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout,"\t      Image_height Image_width Image_depth\n");\r
-       fprintf(stdout,"\t      Progression order: 0 (LRCP)\n");\r
-       fprintf(stdout,"\t      Tiles_size_X Tiles_size_Y Tiles_size_Z\n");\r
-       fprintf(stdout,"\t      Components_nb\n");\r
-       fprintf(stdout,"\t      Layers_nb\n");\r
-       fprintf(stdout,"\t      Decomposition_levels\n");\r
-       fprintf(stdout,"\t      [Precincts_size_X_res_Nr Precincts_size_Y_res_Nr Precincts_size_Z_res_Nr]\n\t  ...\n");\r
-       fprintf(stdout,"\t      [Precincts_size_X_res_0 Precincts_size_Y_res_0 Precincts_size_Z_res_0]\n");\r
-       fprintf(stdout,"\t      Main_header_end_position\n");\r
-       fprintf(stdout,"\t      Codestream_size\n");\r
-       fprintf(stdout,"\t      Tile_0 [start_pos end_header end_pos TotalDisto NumPix MaxMSE]\n");\r
-       fprintf(stdout,"\t      ...\n");\r
-       fprintf(stdout,"\t      Tile_Nt [  ''         ''        ''        ''       ''    ''  ]\n");\r
-       fprintf(stdout,"\t  Tpacket_0 [Tile layer res. comp. prec. start_pos end_pos disto]\n");\r
-       fprintf(stdout,"\t  ...\n");\r
-       fprintf(stdout,"\t  Tpacket_Np [''   ''    ''   ''    ''       ''       ''     '' ]\n");\r
-       fprintf(stdout,"\t  MaxDisto\n");\r
-       fprintf(stdout,"\t  TotalDisto\n\n");\r
-       fprintf(stdout,"\n");\r
-\r
-}\r
-\r
-OPJ_PROG_ORDER give_progression(char progression[4]) {\r
-       if(strncmp(progression, "LRCP", 4) == 0) {\r
-               return LRCP;\r
-       }\r
-       if(strncmp(progression, "RLCP", 4) == 0) {\r
-               return RLCP;\r
-       }\r
-       if(strncmp(progression, "RPCL", 4) == 0) {\r
-               return RPCL;\r
-       }\r
-       if(strncmp(progression, "PCRL", 4) == 0) {\r
-               return PCRL;\r
-       }\r
-       if(strncmp(progression, "CPRL", 4) == 0) {\r
-               return CPRL;\r
-       }\r
-\r
-       return PROG_UNKNOWN;\r
-}\r
-\r
-OPJ_TRANSFORM give_transform(char transform[4]) {\r
-       if(strncmp(transform, "2DWT", 4) == 0) {\r
-               return TRF_2D_DWT;\r
-       }\r
-       if(strncmp(transform, "3DWT", 4) == 0) {\r
-               return TRF_3D_DWT;\r
-       }\r
-       return TRF_UNKNOWN;\r
-}\r
-\r
-OPJ_ENTROPY_CODING give_coding(char coding[3]) {\r
-\r
-       if(strncmp(coding, "2EB", 3) == 0) {\r
-               return ENCOD_2EB;\r
-       }\r
-       if(strncmp(coding, "3EB", 3) == 0) {\r
-               return ENCOD_3EB;\r
-       }\r
-       /*if(strncmp(coding, "2GR", 3) == 0) {\r
-               return ENCOD_2GR;\r
-       }\r
-       if(strncmp(coding, "3GR", 3) == 0) {\r
-               return ENCOD_3GR;\r
-       }*/\r
-\r
-       return ENCOD_UNKNOWN;\r
-}\r
-\r
-int get_file_format(char *filename) {\r
-       int i;\r
-       static const char *extension[] = {"pgx", "bin", "img", "j3d", "jp3d", "j2k"};\r
-       static const int format[] = { PGX_DFMT, BIN_DFMT, IMG_DFMT, J3D_CFMT, J3D_CFMT, J2K_CFMT};\r
-       char * ext = strrchr(filename, '.');\r
-       if (ext) {\r
-               ext++;\r
-        for(i = 0; i < sizeof(format)/sizeof(*format); i++) {\r
-                       if(strnicmp(ext, extension[i], 3) == 0) {\r
-                return format[i];\r
-                       }\r
-               }\r
-       }\r
-\r
-       return -1;\r
-}\r
-\r
-/* ------------------------------------------------------------------------------------ */\r
-\r
-int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters) {\r
-       int i, value;\r
-\r
-       /* parse the command line */\r
-\r
-       while (1) {\r
-               int c = opj_getopt(argc, argv, "i:m:o:r:q:f:t:n:c:b:x:p:s:d:hP:S:E:M:D:R:l:T:C:A:I");\r
-               if (c == -1)\r
-                       break;\r
-               switch (c) {\r
-                       case 'i':                       /* input file */\r
-                       {\r
-                               char *infile = opj_optarg;\r
-                               parameters->decod_format = get_file_format(infile);\r
-                               switch(parameters->decod_format) {\r
-                                       case PGX_DFMT:\r
-                                       case BIN_DFMT:\r
-                                       case IMG_DFMT:\r
-                                               break;\r
-                                       default:\r
-                                               fprintf(stdout, "[ERROR] Unrecognized format for infile : %s [accept only *.pgx or *.bin] !!\n\n", infile);\r
-                                               return 1;\r
-                                               break;\r
-                               }\r
-                               strncpy(parameters->infile, infile, MAX_PATH);\r
-                               fprintf(stdout, "[INFO] Infile: %s \n", parameters->infile);\r
-\r
-                       }\r
-                       break;\r
-                               \r
-                               /* ----------------------------------------------------- */\r
-                       case 'm':                       /* input IMG file */\r
-                       {\r
-                               char *imgfile = opj_optarg;\r
-                               int imgformat = get_file_format(imgfile);\r
-                               switch(imgformat) {\r
-                                       case IMG_DFMT:\r
-                                               break;\r
-                                       default:\r
-                                               fprintf(stdout, "[ERROR] Unrecognized format for imgfile : %s [accept only *.img] !!\n\n", imgfile);\r
-                                               return 1;\r
-                                               break;\r
-                               }\r
-                               strncpy(parameters->imgfile, imgfile, MAX_PATH);\r
-                               fprintf(stdout, "[INFO] Imgfile: %s Format: %d\n", parameters->imgfile, imgformat);\r
-                       }\r
-                       break;\r
-                               \r
-                               /* ----------------------------------------------------- */\r
-                       case 'o':                       /* output file */\r
-                       {\r
-                               char *outfile = opj_optarg;\r
-                               parameters->cod_format = get_file_format(outfile);\r
-                               switch(parameters->cod_format) {\r
-                                       case J3D_CFMT:\r
-                                       case J2K_CFMT:\r
-                                       case LSE_CFMT:\r
-                                               break;\r
-                                       default:\r
-                                               fprintf(stdout, "[ERROR] Unknown output format volume %s [only *.j2k, *.lse3d or *.jp3d]!! \n", outfile);\r
-                                               return 1;\r
-                                               break;\r
-                               }\r
-                               strncpy(parameters->outfile, outfile, MAX_PATH);\r
-                               fprintf(stdout, "[INFO] Outfile: %s \n", parameters->outfile);\r
-                       }\r
-                       break;\r
-\r
-                               /* ----------------------------------------------------- */\r
-                       \r
-                       case 'r':                       /* define compression rates for each layer */\r
-                       {\r
-                               char *s = opj_optarg;\r
-                               while (sscanf(s, "%f", &parameters->tcp_rates[parameters->tcp_numlayers]) == 1) {\r
-                                       parameters->tcp_numlayers++;\r
-                                       while (*s && *s != ',') {\r
-                                               s++;\r
-                                       }\r
-                                       if (!*s)\r
-                                               break;\r
-                                       s++;\r
-                               }\r
-                               parameters->cp_disto_alloc = 1;\r
-                       }\r
-                       break;\r
-                               \r
-                               /* ----------------------------------------------------- */\r
-                       \r
-                       case 'q':                       /* define distorsion (PSNR) for each layer */\r
-                       {\r
-                               char *s = opj_optarg;\r
-                               while (sscanf(s, "%f", &parameters->tcp_distoratio[parameters->tcp_numlayers]) == 1) {\r
-                                       parameters->tcp_numlayers++;\r
-                                       while (*s && *s != ',') {\r
-                                               s++;\r
-                                       }\r
-                                       if (!*s)\r
-                                               break;\r
-                                       s++;\r
-                               }\r
-                               parameters->cp_fixed_quality = 1;\r
-                       }\r
-                       break;\r
-                               \r
-                               /* ----------------------------------------------------- */\r
-\r
-                       case 'f':       \r
-                       {\r
-                               fprintf(stdout, "/---------------------------------------------------\\\n");\r
-                               fprintf(stdout, "|  Fixed layer allocation option not implemented !!  |\n");\r
-                               fprintf(stdout, "\\---------------------------------------------------/\n");\r
-                               /*int *row = NULL, *col = NULL;\r
-                               int numlayers = 0, matrix_width = 0;\r
-\r
-                               char *s = opj_optarg;\r
-                               sscanf(s, "%d", &numlayers);\r
-                               s++;\r
-                               if (numlayers > 9)\r
-                                       s++;\r
-\r
-                               parameters->tcp_numlayers = numlayers;\r
-                               matrix_width = parameters->numresolution[0] + parameters->numresolution[1] + parameters->numresolution[2];\r
-                               parameters->cp_matrice = (int *) malloc(numlayers * matrix_width * sizeof(int));\r
-                               s = s + 2;\r
-\r
-                               for (i = 0; i < numlayers; i++) {\r
-                                       row = &parameters->cp_matrice[i * matrix_width];\r
-                                       col = row;\r
-                                       parameters->tcp_rates[i] = 1;\r
-                                       sscanf(s, "%d,", &col[0]);\r
-                                       s += 2;\r
-                                       if (col[0] > 9)\r
-                                               s++;\r
-                                       col[1] = 0;\r
-                                       col[2] = 0;\r
-                                       for (j = 1; j < matrix_width; j++) {\r
-                                               col += 3; j+=2;\r
-                                               sscanf(s, "%d,%d,%d", &col[0], &col[1], &col[2]);\r
-                                               s += 6;\r
-                                               if (col[0] > 9)\r
-                                                       s++;\r
-                                               if (col[1] > 9)\r
-                                                       s++;\r
-                                               if (col[2] > 9)\r
-                                                       s++;\r
-                                       }\r
-                                       if (i < numlayers - 1)\r
-                                               s++;\r
-                               }\r
-                               parameters->cp_fixed_alloc = 1; */\r
-                       }\r
-                       break;\r
-                               \r
-                               /* ----------------------------------------------------- */\r
-\r
-                       case 't':                       /* tiles */\r
-                       {\r
-                               if (sscanf(opj_optarg, "%d,%d,%d", &parameters->cp_tdx, &parameters->cp_tdy, &parameters->cp_tdz) !=3) {\r
-                                       fprintf(stdout, "[ERROR] '-t' 'dimensions of tiles' argument error !  [-t tdx,tdy,tdz]\n");\r
-                                       return 1;\r
-                               }\r
-                               parameters->tile_size_on = true;\r
-                       }\r
-                       break;\r
-                               \r
-                               /* ----------------------------------------------------- */\r
-                       \r
-                       case 'n':                       /* resolution */\r
-                       {\r
-                               int aux;\r
-                               aux = sscanf(opj_optarg, "%d,%d,%d", &parameters->numresolution[0], &parameters->numresolution[1], &parameters->numresolution[2]);\r
-                               if (aux == 2) \r
-                                       parameters->numresolution[2] = 1;\r
-                               else if (aux == 1) {\r
-                                       parameters->numresolution[1] = parameters->numresolution[0];\r
-                                       parameters->numresolution[2] = 1;\r
-                               }else if (aux == 0){\r
-                                       parameters->numresolution[0] = 1;\r
-                                       parameters->numresolution[1] = 1;\r
-                                       parameters->numresolution[2] = 1;\r
-                               }\r
-                       }\r
-                       break;\r
-                               \r
-                               /* ----------------------------------------------------- */\r
-                       case 'c':                       /* precinct dimension */\r
-                       {\r
-                               char sep;\r
-                               int res_spec = 0;\r
-                               int aux;\r
-                               char *s = opj_optarg;\r
-                               do {\r
-                                       sep = 0;\r
-                                       aux = sscanf(s, "[%d,%d,%d]%c", &parameters->prct_init[0][res_spec], &parameters->prct_init[1][res_spec], &parameters->prct_init[2][res_spec], &sep);\r
-                                       if (sep == ',' && aux != 4) {\r
-                                               fprintf(stdout, "[ERROR] '-c' 'dimensions of precincts' argument error !  [-c [prcx_res0,prcy_res0,prcz_res0],...,[prcx_resN,prcy_resN,prcz_resN]]\n");\r
-                                               return 1;\r
-                                       }\r
-                                       parameters->csty |= 0x01;\r
-                                       res_spec++;\r
-                                       s = strpbrk(s, "]") + 2;\r
-                               }\r
-                               while (sep == ',');\r
-                               parameters->res_spec = res_spec; /* number of precinct size specifications */\r
-                       }\r
-                       break;\r
-                               \r
-                               /* ----------------------------------------------------- */\r
-                       \r
-                       case 'b':                       /* code-block dimension */\r
-                       {\r
-                               int cblockw_init = 0, cblockh_init = 0, cblockl_init = 0;\r
-                               if (sscanf(opj_optarg, "%d,%d,%d", &cblockw_init, &cblockh_init, &cblockl_init) != 3) {\r
-                                       fprintf(stdout, "[ERROR] '-b' 'dimensions of codeblocks' argument error !  [-b cblkx,cblky,cblkz]\n");\r
-                                       return 1;\r
-                               }\r
-                               if (cblockw_init * cblockh_init * cblockl_init > (1<<18) || cblockw_init > 1024 || cblockw_init < 4 || cblockh_init > 1024 || cblockh_init < 4 || cblockl_init > 1024 || cblockl_init < 4) {\r
-                                       fprintf(stdout,"[ERROR] Size of code_block error (option -b) !!\n\nRestriction :\n * width*height*length<=4096\n * 4<=width,height,length<= 1024\n\n");\r
-                                       return 1;\r
-                               }\r
-                               parameters->cblock_init[0] = cblockw_init;\r
-                               parameters->cblock_init[1] = cblockh_init;\r
-                               parameters->cblock_init[2] = cblockl_init;\r
-                       }\r
-                       break;\r
-                               \r
-                               /* ----------------------------------------------------- */\r
-                       \r
-                       case 'x':                       /* creation of index file */\r
-                       {\r
-                               char *index = opj_optarg;\r
-                               strncpy(parameters->index, index, MAX_PATH);\r
-                               parameters->index_on = 1;\r
-                       }\r
-                       break;\r
-                               \r
-                               /* ----------------------------------------------------- */\r
-                       \r
-                       case 'p':                       /* progression order */\r
-                       {\r
-                               char progression[4];\r
-\r
-                               strncpy(progression, opj_optarg, 4);\r
-                               parameters->prog_order = give_progression(progression);\r
-                               if (parameters->prog_order == -1) {\r
-                                       fprintf(stdout, "[ERROR] Unrecognized progression order [LRCP, RLCP, RPCL, PCRL, CPRL] !!\n");\r
-                                       return 1;\r
-                               }\r
-                       }\r
-                       break;\r
-                               \r
-                               /* ----------------------------------------------------- */\r
-                       \r
-                       case 's':                       /* subsampling factor */\r
-                       {\r
-                               if (sscanf(opj_optarg, "%d,%d,%d", &parameters->subsampling_dx, &parameters->subsampling_dy, &parameters->subsampling_dz) != 3) {\r
-                                       fprintf(stdout, "[ERROR] '-s' sub-sampling argument error !  [-s dx,dy,dz]\n");\r
-                                       return 1;\r
-                               }\r
-                       }\r
-                       break;\r
-                               \r
-                               /* ----------------------------------------------------- */\r
-                       \r
-                       case 'd':                       /* coordonnate of the reference grid */\r
-                       {\r
-                               if (sscanf(opj_optarg, "%d,%d,%d", &parameters->volume_offset_x0, &parameters->volume_offset_y0, &parameters->volume_offset_z0) != 3) {\r
-                                       fprintf(stdout, "[ERROR] -d 'coordonnate of the reference grid' argument error !! [-d x0,y0,z0]\n");\r
-                                       return 1;\r
-                               }\r
-                       }\r
-                       break;\r
-                               \r
-                               /* ----------------------------------------------------- */\r
-                       \r
-                       case 'h':                       /* display an help description */\r
-                       {\r
-                               encode_help_display();\r
-                               return 1;\r
-                       }\r
-                       break;\r
-                               \r
-                               /* ----------------------------------------------------- */\r
-\r
-                       case 'P':                       /* POC */\r
-                       {\r
-                               int numpocs = 0;                /* number of progression order change (POC) default 0 */\r
-                               opj_poc_t *POC = NULL;  /* POC : used in case of Progression order change */\r
-\r
-                               char *s = opj_optarg;\r
-                               POC = parameters->POC;\r
-\r
-                               fprintf(stdout, "/----------------------------------\\\n");\r
-                               fprintf(stdout, "|  POC option not fully tested !!  |\n");\r
-                               fprintf(stdout, "\\----------------------------------/\n");\r
-                               \r
-                               while (sscanf(s, "T%d=%d,%d,%d,%d,%d,%s", &POC[numpocs].tile,\r
-                                                                                                               &POC[numpocs].resno0, &POC[numpocs].compno0,\r
-                                                                                                               &POC[numpocs].layno1, &POC[numpocs].resno1,\r
-                                                                                                               &POC[numpocs].compno1, POC[numpocs].progorder) == 7) {\r
-                                       POC[numpocs].prg = give_progression(POC[numpocs].progorder);\r
-                                       /* POC[numpocs].tile; */\r
-                                       numpocs++;\r
-                                       while (*s && *s != '/') {\r
-                                               s++;\r
-                                       }\r
-                                       if (!*s) {\r
-                                               break;\r
-                                       }\r
-                                       s++;\r
-                               }\r
-                               parameters->numpocs = numpocs;\r
-                       }\r
-                       break;\r
-                               \r
-                               /* ------------------------------------------------------ */\r
-                               \r
-                       case 'S':                       /* SOP marker */\r
-                       {\r
-                               parameters->csty |= 0x02;\r
-                       }\r
-                       break;\r
-                               \r
-                               /* ------------------------------------------------------ */\r
-                       \r
-                       case 'E':                       /* EPH marker */\r
-                       {\r
-                               parameters->csty |= 0x04;\r
-                       }\r
-                       break;\r
-                               \r
-                               /* ------------------------------------------------------ */\r
-                       \r
-                       case 'M':                       /* Codification mode switch */\r
-                       {\r
-                               fprintf(stdout, "[INFO] Mode switch option not fully tested !!\n");\r
-                               value = 0;\r
-                               if (sscanf(opj_optarg, "%d", &value) == 1) {\r
-                                       for (i = 0; i <= 6; i++) {\r
-                                               int cache = value & (1 << i);\r
-                                               if (cache)\r
-                                                       parameters->mode |= (1 << i);\r
-                                       }\r
-                               }\r
-                       }\r
-                       break;\r
-                               \r
-                               /* ------------------------------------------------------ */\r
-                       \r
-                       case 'D':                       /* DCO */\r
-                       {\r
-                               if (sscanf(opj_optarg, "%d", &parameters->dcoffset) != 1) {\r
-                                       fprintf(stdout, "[ERROR] DC offset error !! [-D %d]\n",parameters->dcoffset);\r
-                                       return 1;\r
-                               }\r
-                       }\r
-                       break;\r
-                               \r
-                               /* ------------------------------------------------------ */\r
-                       \r
-                       case 'R':                       /* ROI */\r
-                       {\r
-                               if (sscanf(opj_optarg, "OI:c=%d,U=%d", &parameters->roi_compno, &parameters->roi_shift) != 2) {\r
-                                       fprintf(stdout, "[ERROR] ROI error !! [-ROI:c='compno',U='shift']\n");\r
-                                       return 1;\r
-                               }\r
-                       }\r
-                       break;\r
-                               \r
-                               /* ------------------------------------------------------ */\r
-                       \r
-                       case 'l':                       /* Tile offset */\r
-                       {\r
-                               if (sscanf(opj_optarg, "%d,%d,%d", &parameters->cp_tx0, &parameters->cp_ty0, &parameters->cp_tz0) != 3) {\r
-                                       fprintf(stdout, "[ERROR] -l 'tile offset' argument error !! [-l X0,Y0,Z0]");\r
-                                       return 1;\r
-                               }\r
-                       }\r
-                       break;\r
-                               \r
-                               /* ------------------------------------------------------ \r
-                               \r
-                       case 'T':                       // Tranformation of original data (2D-DWT/3D-DWT/3D-RLS/2D-DWT+1D-RLS) \r
-                       {\r
-                               char transform[4];\r
-\r
-                               strncpy(transform, opj_optarg, 4);\r
-                               parameters->transform_format = give_transform(transform);\r
-                               if (parameters->transform_format == -1) {\r
-                                       fprintf(stdout, "[ERROR] -T 'Transform domain' argument error !! [-T 2DWT, 3DWT, 3RLS or 3LSE only]");\r
-                    return 1;\r
-                               }\r
-                       }\r
-                       break;\r
-                               \r
-                                ------------------------------------------------------ */\r
-                       \r
-                       case 'C':                       /* Coding of transformed data */\r
-                       {\r
-                               char coding[3];\r
-\r
-                               strncpy(coding, opj_optarg, 3);\r
-                               parameters->encoding_format = give_coding(coding);\r
-                               if (parameters->encoding_format == -1) {\r
-                                       fprintf(stdout, "[ERROR] -C 'Coding algorithm' argument error !! [-C 2EB, 3EB, 2GR, 3GR or GRI only]");\r
-                    return 1;\r
-                               }\r
-                       }\r
-                       break;\r
-                       \r
-                       /* ------------------------------------------------------ */\r
-                       \r
-                       case 'I':                       /* reversible or not */\r
-                       {\r
-                               parameters->irreversible = 1;\r
-                       }\r
-                       break;\r
-                               \r
-                       default:\r
-                               fprintf(stdout, "[ERROR] This option is not valid \"-%c %s\"\n", c, opj_optarg);\r
-                               return 1;\r
-               }\r
-       }\r
-\r
-       /* check for possible errors */\r
-\r
-       if((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {\r
-               fprintf(stdout, "usage: jp3d_vm_enc -i volume-file -o jp3d-file (+ options)\n");\r
-               return 1;\r
-       }\r
-\r
-       if((parameters->decod_format == BIN_DFMT) && (parameters->imgfile[0] == 0)) {\r
-               fprintf(stdout, "usage: jp3d_vm_enc -i bin-volume-file -m img-file -o jp3d-file (+ options)\n");\r
-               return 1;\r
-       }\r
-\r
-       if((parameters->decod_format != BIN_DFMT) && (parameters->decod_format != PGX_DFMT) && (parameters->decod_format != IMG_DFMT)) {\r
-               fprintf(stdout, "usage: jp3d_vm_enc -i input-volume-file [*.bin,*.pgx,*.img] -o jp3d-file [*.jp3d,*.j2k] (+ options)\n");\r
-               return 1;\r
-       }\r
-       if((parameters->cod_format != J3D_CFMT) && (parameters->cod_format != J2K_CFMT)) {\r
-               fprintf(stdout, "usage: jp3d_vm_enc -i input-volume-file [*.bin,*.pgx,*.img] -o jp3d-file [*.jp3d,*.j2k] (+ options)\n");\r
-               return 1;\r
-       }\r
-\r
-       if((parameters->encoding_format == ENCOD_2GR || parameters->encoding_format == ENCOD_3GR) && parameters->transform_format != TRF_3D_LSE && parameters->transform_format != TRF_3D_RLS) {\r
-               fprintf(stdout, "[ERROR] Entropy coding options -C [2GR,3GR] are only compatible with predictive-based transform algorithms: -T [3RLS,3LSE].\n");\r
-               return 1;\r
-       }\r
-       if (parameters->encoding_format == ENCOD_3EB)\r
-               parameters->mode |= (1 << 6);\r
-\r
-       if ((parameters->mode >> 6) & 1) {\r
-               parameters->encoding_format = ENCOD_3EB;\r
-       }\r
-\r
-       if((parameters->numresolution[2] == 0 || (parameters->numresolution[1] == 0) || (parameters->numresolution[0] == 0))) {\r
-               fprintf(stdout, "[ERROR] -n 'resolution levels' argument error ! Resolutions must be greater than 1 in order to perform DWT.\n");\r
-               return 1;\r
-       }\r
-       if (parameters->numresolution[1] != parameters->numresolution[0]) {\r
-               fprintf(stdout, "[ERROR] -n 'resolution levels' argument error ! Resolutions in X and Y axis must be the same in this implementation.\n");\r
-               return 1;\r
-       }\r
-       \r
-       if (parameters->numresolution[2] > parameters->numresolution[0]) {\r
-               fprintf(stdout, "[ERROR] -n 'resolution levels' argument error ! Resolutions in Z axis must be lower than in X-Y axis.\n");\r
-               return 1;\r
-       }\r
-       \r
-       if (parameters->dcoffset >= 128 && parameters->dcoffset <= -128) {\r
-               fprintf(stdout, "[ERROR] -D 'DC offset' argument error ! Value must be -128<=DCO<=128.\n");\r
-               return 1;\r
-       }\r
-\r
-       if(parameters->numresolution[2] != 1) {\r
-               parameters->transform_format = TRF_3D_DWT;\r
-               /*fprintf(stdout, "[Warning] Resolution level in axial dim > 1 : 3D-DWT will be performed... \n");*/\r
-       } else if (parameters->numresolution[2] == 1) {\r
-               parameters->transform_format = TRF_2D_DWT;\r
-               /*fprintf(stdout, "[Warning] Resolution level in axial dim == 1 : 2D-DWT will be performed... \n");*/\r
-       }\r
-       \r
-       if ((parameters->cod_format == J2K_CFMT) && (parameters->transform_format != TRF_2D_DWT || parameters->encoding_format != ENCOD_2EB)) {\r
-               fprintf(stdout, "[WARNING] Incompatible options -o *.j2k and defined transform or encoding algorithm. Latter will be ignored\n");\r
-               parameters->transform_format = TRF_2D_DWT;\r
-               parameters->encoding_format = ENCOD_2EB;\r
-       }\r
-\r
-       if ((parameters->cp_disto_alloc || parameters->cp_fixed_alloc || parameters->cp_fixed_quality) && (!(parameters->cp_disto_alloc ^ parameters->cp_fixed_quality))) {\r
-               fprintf(stdout, "[ERROR] Options -r and -q cannot be used together !!\n");\r
-               return 1;\r
-       }                               /* mod fixed_quality */\r
-\r
-       /* if no rate entered, lossless by default */\r
-       if (parameters->tcp_numlayers == 0) {\r
-               parameters->tcp_rates[0] = 0.0; /* MOD antonin : losslessbug */\r
-               parameters->tcp_numlayers++;\r
-               parameters->cp_disto_alloc = 1;\r
-       }\r
-\r
-       if((parameters->cp_tx0 > parameters->volume_offset_x0) || (parameters->cp_ty0 > parameters->volume_offset_y0) || (parameters->cp_tz0 > parameters->volume_offset_z0)) {\r
-               fprintf(stdout, "[ERROR] Tile offset dimension is unnappropriate --> TX0(%d)<=IMG_X0(%d) TYO(%d)<=IMG_Y0(%d) TZO(%d)<=IMG_Z0(%d)\n",\r
-                       parameters->cp_tx0, parameters->volume_offset_x0, parameters->cp_ty0, parameters->volume_offset_y0, \r
-                       parameters->cp_tz0, parameters->volume_offset_z0);\r
-               return 1;\r
-       }\r
-\r
-       for (i = 0; i < parameters->numpocs; i++) {\r
-               if (parameters->POC[i].prg == -1) {\r
-                       fprintf(stdout,"[ERROR] Unrecognized progression order in option -P (POC n %d) [LRCP, RLCP, RPCL, PCRL, CPRL] !!\n",i + 1);\r
-               }\r
-       }\r
-       return 0;\r
-}\r
-\r
-/* -------------------------------------------------------------------------- */\r
-\r
-/**\r
-sample error callback expecting a FILE* client object\r
-*/\r
-void error_callback(const char *msg, void *client_data) {\r
-       FILE *stream = (FILE*)client_data;\r
-       fprintf(stream, "[ERROR] %s", msg);\r
-}\r
-/**\r
-sample warning callback expecting a FILE* client object\r
-*/\r
-void warning_callback(const char *msg, void *client_data) {\r
-       FILE *stream = (FILE*)client_data;\r
-       fprintf(stream, "[WARNING] %s", msg);\r
-}\r
-/**\r
-sample debug callback expecting a FILE* client object\r
-*/\r
-void info_callback(const char *msg, void *client_data) {\r
-       FILE *stream = (FILE*)client_data;\r
-       fprintf(stream, "[INFO] %s", msg);\r
-}\r
-\r
-/* -------------------------------------------------------------------------- */\r
-\r
-int main(int argc, char **argv) {\r
-       bool bSuccess;\r
-       bool delete_comment = true;\r
-       opj_cparameters_t parameters;   /* compression parameters */\r
-       opj_event_mgr_t event_mgr;              /* event manager */\r
-       opj_volume_t *volume = NULL;\r
-\r
-       /* \r
-       configure the event callbacks (not required)\r
-       setting of each callback is optionnal \r
-       */\r
-       memset(&event_mgr, 0, sizeof(opj_event_mgr_t));\r
-       event_mgr.error_handler = error_callback;\r
-       event_mgr.warning_handler = warning_callback;\r
-       event_mgr.info_handler = info_callback;\r
-\r
-       /* set encoding parameters to default values */\r
-       opj_set_default_encoder_parameters(&parameters);\r
-\r
-       /* parse input and get user encoding parameters */\r
-       if(parse_cmdline_encoder(argc, argv, &parameters) == 1) {\r
-               return 0;\r
-       }\r
-\r
-       if(parameters.cp_comment == NULL) {\r
-               parameters.cp_comment = "Created by OpenJPEG version JP3D";\r
-               /* no need to delete parameters.cp_comment on exit */\r
-               delete_comment = false;\r
-       }\r
-       \r
-       /* encode the destination volume */\r
-       /* ---------------------------- */\r
-       if (parameters.cod_format == J3D_CFMT || parameters.cod_format == J2K_CFMT)     {\r
-               int codestream_length, pixels, bitsin;\r
-               opj_cio_t *cio = NULL;\r
-               FILE *f = NULL;\r
-               opj_cinfo_t* cinfo = NULL;\r
-               \r
-               /* decode the source volume */\r
-               /* ----------------------- */\r
-               switch (parameters.decod_format) {\r
-                       case PGX_DFMT: \r
-                               fprintf(stdout, "[INFO] Loading pgx file(s)\n");\r
-                               volume = pgxtovolume(parameters.infile, &parameters);\r
-                               if (!volume) {\r
-                                       fprintf(stdout, "[ERROR] Unable to load pgx files\n");\r
-                                       return 1;\r
-                               }\r
-                               break;\r
-                       \r
-                       case BIN_DFMT:\r
-                               fprintf(stdout, "[INFO] Loading bin file\n");\r
-                               volume = bintovolume(parameters.infile, parameters.imgfile, &parameters);\r
-                               if (!volume) {\r
-                                       fprintf(stdout, "[ERROR] Unable to load bin file\n");\r
-                                       return 1;\r
-                               }\r
-                               break;\r
-\r
-                       case IMG_DFMT:\r
-                               fprintf(stdout, "[INFO] Loading img file\n");\r
-                               volume = imgtovolume(parameters.infile, &parameters);\r
-                               if (!volume) {\r
-                                       fprintf(stderr, "[ERROR] Unable to load img file\n");\r
-                                       return 1;\r
-                               }\r
-                               break;\r
-               }\r
-               \r
-               /* get a JP3D or J2K compressor handle */\r
-               if (parameters.cod_format == J3D_CFMT) \r
-            cinfo = opj_create_compress(CODEC_J3D);\r
-               else if (parameters.cod_format == J2K_CFMT) \r
-            cinfo = opj_create_compress(CODEC_J2K);\r
-\r
-               /* catch events using our callbacks and give a local context */\r
-               opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stdout);                   \r
-\r
-               /* setup the encoder parameters using the current volume and using user parameters */\r
-               opj_setup_encoder(cinfo, &parameters, volume);\r
-               \r
-               /* open a byte stream for writing */\r
-               /* allocate memory for all tiles */\r
-               cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0);\r
-\r
-               /* encode the volume */\r
-               /*fprintf(stdout, "[INFO] Encode the volume\n");*/\r
-               bSuccess = opj_encode(cinfo, cio, volume, parameters.index);\r
-               if (!bSuccess) {\r
-                       opj_cio_close(cio);\r
-                       fprintf(stdout, "[ERROR] Failed to encode volume\n");\r
-                       return 1;\r
-               }\r
-               codestream_length = cio_tell(cio);\r
-               pixels =(volume->x1 - volume->x0) * (volume->y1 - volume->y0) * (volume->z1 - volume->z0);\r
-               bitsin = pixels * volume->comps[0].prec;\r
-               fprintf(stdout, "[RESULT] Volume: %d x %d x %d (x %d bpv)\n Codestream: %d B,  Ratio: %5.3f bpv,  (%5.3f : 1) \n", \r
-                       (volume->x1 - volume->x0),(volume->y1 - volume->y0),(volume->z1 - volume->z0),volume->comps[0].prec,\r
-                       codestream_length, ((double)codestream_length * 8.0/(double)pixels), ((double)bitsin/(8.0*(double)codestream_length)));\r
-\r
-               /* write the buffer to disk */\r
-               f = fopen(parameters.outfile, "wb");\r
-               if (!f) {\r
-                       fprintf(stdout, "[ERROR] Failed to open %s for writing\n", parameters.outfile);\r
-                       return 1;\r
-               }\r
-               fwrite(cio->buffer, 1, codestream_length, f);\r
-               fclose(f);\r
-\r
-               /* close and free the byte stream */\r
-               opj_cio_close(cio);\r
-\r
-               /* free remaining compression structures */\r
-               opj_destroy_compress(cinfo);\r
-       } else {\r
-               fprintf(stdout, "[ERROR] Cod_format != JP3d !!! \n");\r
-               return 1;\r
-       }\r
-\r
-       /* free user parameters structure */\r
-       if(delete_comment) {\r
-               if(parameters.cp_comment) free(parameters.cp_comment);\r
-       }\r
-       if(parameters.cp_matrice) free(parameters.cp_matrice);\r
-\r
-       /* free volume data */\r
-       opj_volume_destroy(volume);\r
-       \r
-       return 0;\r
-}\r
+/*
+ * Copyright (c) 2001-2003, David Janssens
+ * Copyright (c) 2002-2003, Yannick Verschueren
+ * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
+ * Copyright (c) 2005, Herve Drolon, FreeImage Team
+ * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
+ * Copyright (c) 2006, M�nica D�ez Garc�a, Image Processing Laboratory, University of Valladolid, Spain
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "opj_config.h"
+#include "openjp3d.h"
+#include "opj_getopt.h"
+#include "convert.h"
+
+#ifdef _WIN32
+#include <windows.h>
+#else
+#define stricmp strcasecmp
+#define strnicmp strncasecmp
+#endif /* _WIN32 */
+
+/* ----------------------------------------------------------------------- */
+
+void encode_help_display()
+{
+    fprintf(stdout, "List of parameters for the JPEG2000 Part 10 encoder:\n");
+    fprintf(stdout, "------------\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "Required Parameters (except with -h):\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-i           : source file  (-i source.bin or source*.pgx) \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-m           : source characteristics file (-m imgfile.img) \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-o           : destination file (-o dest.jp3d) \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "Optional Parameters:\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-h           : display the help information \n ");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-n           : number of resolutions (-n 3,3,3) \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-I           : use the irreversible transforms: ICT + DWT 9-7 (-I) \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-C           : coding algorithm (-C 2EB) [2EB, 3EB] \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-r           : different compression ratios for successive layers (-r 20,10,5)\n ");
+    fprintf(stdout,
+            "           - The rate specified for each quality level is the desired compression factor.\n");
+    fprintf(stdout, "           - Rate 1 means lossless compression\n");
+    fprintf(stdout,
+            "               (options -r and -q cannot be used together)\n ");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-q           : different psnr for successive layers (-q 30,40,50) \n ");
+    fprintf(stdout,
+            "               (options -r and -q cannot be used together)\n ");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-b           : size of code block (-b 32,32,32) \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-c           : size of precinct (-c 128,128,128) \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-t           : size of tile (-t 512,512,512) \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-p           : progression order (-p LRCP) [LRCP, RLCP, RPCL, PCRL, CPRL] \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-s           : subsampling factor (-s 2,2,2) [-s X,Y,Z] \n");
+    fprintf(stdout, "                    - Remark: subsampling bigger than 2 can produce error\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-SOP         : write SOP marker before each packet \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-EPH         : write EPH marker after each header packet \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-M           : code-block style (-M 0) [1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL)\n");
+    fprintf(stdout, "                 8=VSC 16=PTERM 32=SEGSYM 64=3DCTXT] \n");
+    fprintf(stdout,
+            "                 Indicate multiple modes by adding their values. \n");
+    fprintf(stdout,
+            "                 ex: RESTART(4) + RESET(2) + SEGMARK(32) = -M 38\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-D           : define DC offset (-D 12) \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-x           : create an index file *.Idx (-x index_name.Idx) \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-ROI         : c=%%d,U=%%d : quantization indices upshifted \n");
+    fprintf(stdout, "               for component c=%%d [%%d = 0,1,2]\n");
+    fprintf(stdout,
+            "               with a value of U=%%d [0 <= %%d <= 37] (i.e. -ROI:c=0,U=25) \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-d           : offset of the origin of the volume (-d 150,300,100) \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-l           : offset of the origin of the tiles (-l 100,75,25) \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "DEFAULT CODING:\n");
+    fprintf(stdout, "------------\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, " * Lossless\n");
+    fprintf(stdout, " * 1 tile\n");
+    fprintf(stdout,
+            " * Size of precinct : 2^15 x 2^15 x 2^15 (means 1 precinct)\n");
+    fprintf(stdout, " * Size of code-block : 64 x 64 x 64\n");
+    fprintf(stdout, " * Number of resolutions in x, y and z axis: 3\n");
+    fprintf(stdout, " * No SOP marker in the codestream\n");
+    fprintf(stdout, " * No EPH marker in the codestream\n");
+    fprintf(stdout, " * No sub-sampling in x, y or z direction\n");
+    fprintf(stdout, " * No mode switch activated\n");
+    fprintf(stdout, " * Progression order: LRCP\n");
+    fprintf(stdout, " * No index file\n");
+    fprintf(stdout, " * No ROI upshifted\n");
+    fprintf(stdout, " * No offset of the origin of the volume\n");
+    fprintf(stdout, " * No offset of the origin of the tiles\n");
+    fprintf(stdout, " * Reversible DWT 5-3 on each 2D slice\n");
+    fprintf(stdout, " * Coding algorithm: 2D-EBCOT \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "REMARKS:\n");
+    fprintf(stdout, "---------\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "- The markers written to the main_header are : SOC SIZ COD QCD COM.\n");
+    fprintf(stdout,
+            "- COD and QCD markers will never appear in the tile_header.\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "- You need enough disk space memory (twice the original) to encode \n");
+    fprintf(stdout,
+            "the volume,i.e. for a 1.5 GB volume you need a minimum of 3GB of disk memory)\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "- When loading *.pgx files, a relative path to directory is needed for input argument \n");
+    fprintf(stdout,
+            " followed by the common prefix of the slices and a '*' character representing sequential numeration.\n");
+    fprintf(stdout, "( -i relativepath/slices*.pgx )\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, " - The index file has the structure below:\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "\t        Image_height Image_width Image_depth\n");
+    fprintf(stdout, "\t        Progression order: 0 (LRCP)\n");
+    fprintf(stdout, "\t        Tiles_size_X Tiles_size_Y Tiles_size_Z\n");
+    fprintf(stdout, "\t        Components_nb\n");
+    fprintf(stdout, "\t        Layers_nb\n");
+    fprintf(stdout, "\t        Decomposition_levels\n");
+    fprintf(stdout,
+            "\t        [Precincts_size_X_res_Nr Precincts_size_Y_res_Nr Precincts_size_Z_res_Nr]\n\t  ...\n");
+    fprintf(stdout,
+            "\t        [Precincts_size_X_res_0 Precincts_size_Y_res_0 Precincts_size_Z_res_0]\n");
+    fprintf(stdout, "\t        Main_header_end_position\n");
+    fprintf(stdout, "\t        Codestream_size\n");
+    fprintf(stdout,
+            "\t        Tile_0 [start_pos end_header end_pos TotalDisto NumPix MaxMSE]\n");
+    fprintf(stdout, "\t        ...\n");
+    fprintf(stdout,
+            "\t        Tile_Nt [  ''         ''        ''        ''       ''    ''  ]\n");
+    fprintf(stdout,
+            "\t  Tpacket_0 [Tile layer res. comp. prec. start_pos end_pos disto]\n");
+    fprintf(stdout, "\t  ...\n");
+    fprintf(stdout,
+            "\t  Tpacket_Np [''   ''    ''   ''    ''       ''       ''     '' ]\n");
+    fprintf(stdout, "\t  MaxDisto\n");
+    fprintf(stdout, "\t  TotalDisto\n\n");
+    fprintf(stdout, "\n");
+
+}
+
+OPJ_PROG_ORDER give_progression(char progression[4])
+{
+    if (strncmp(progression, "LRCP", 4) == 0) {
+        return LRCP;
+    }
+    if (strncmp(progression, "RLCP", 4) == 0) {
+        return RLCP;
+    }
+    if (strncmp(progression, "RPCL", 4) == 0) {
+        return RPCL;
+    }
+    if (strncmp(progression, "PCRL", 4) == 0) {
+        return PCRL;
+    }
+    if (strncmp(progression, "CPRL", 4) == 0) {
+        return CPRL;
+    }
+
+    return PROG_UNKNOWN;
+}
+
+OPJ_TRANSFORM give_transform(char transform[4])
+{
+    if (strncmp(transform, "2DWT", 4) == 0) {
+        return TRF_2D_DWT;
+    }
+    if (strncmp(transform, "3DWT", 4) == 0) {
+        return TRF_3D_DWT;
+    }
+    return TRF_UNKNOWN;
+}
+
+OPJ_ENTROPY_CODING give_coding(char coding[3])
+{
+
+    if (strncmp(coding, "2EB", 3) == 0) {
+        return ENCOD_2EB;
+    }
+    if (strncmp(coding, "3EB", 3) == 0) {
+        return ENCOD_3EB;
+    }
+    /*if(strncmp(coding, "2GR", 3) == 0) {
+        return ENCOD_2GR;
+    }
+    if(strncmp(coding, "3GR", 3) == 0) {
+        return ENCOD_3GR;
+    }*/
+
+    return ENCOD_UNKNOWN;
+}
+
+int get_file_format(char *filename)
+{
+    int i;
+    static const char *extension[] = {"pgx", "bin", "img", "j3d", "jp3d", "j2k"};
+    static const int format[] = { PGX_DFMT, BIN_DFMT, IMG_DFMT, J3D_CFMT, J3D_CFMT, J2K_CFMT};
+    char * ext = strrchr(filename, '.');
+    if (ext) {
+        ext++;
+        for (i = 0; i < sizeof(format) / sizeof(*format); i++) {
+            if (strnicmp(ext, extension[i], 3) == 0) {
+                return format[i];
+            }
+        }
+    }
+
+    return -1;
+}
+
+/* ------------------------------------------------------------------------------------ */
+
+int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters)
+{
+    int i, value;
+
+    /* parse the command line */
+
+    while (1) {
+        int c = opj_getopt(argc, argv,
+                           "i:m:o:r:q:f:t:n:c:b:x:p:s:d:hP:S:E:M:D:R:l:T:C:A:I");
+        if (c == -1) {
+            break;
+        }
+        switch (c) {
+        case 'i': {         /* input file */
+            char *infile = opj_optarg;
+            parameters->decod_format = get_file_format(infile);
+            switch (parameters->decod_format) {
+            case PGX_DFMT:
+            case BIN_DFMT:
+            case IMG_DFMT:
+                break;
+            default:
+                fprintf(stdout,
+                        "[ERROR] Unrecognized format for infile : %s [accept only *.pgx or *.bin] !!\n\n",
+                        infile);
+                return 1;
+                break;
+            }
+            strncpy(parameters->infile, infile, MAX_PATH);
+            fprintf(stdout, "[INFO] Infile: %s \n", parameters->infile);
+
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+        case 'm': {         /* input IMG file */
+            char *imgfile = opj_optarg;
+            int imgformat = get_file_format(imgfile);
+            switch (imgformat) {
+            case IMG_DFMT:
+                break;
+            default:
+                fprintf(stdout,
+                        "[ERROR] Unrecognized format for imgfile : %s [accept only *.img] !!\n\n",
+                        imgfile);
+                return 1;
+                break;
+            }
+            strncpy(parameters->imgfile, imgfile, MAX_PATH);
+            fprintf(stdout, "[INFO] Imgfile: %s Format: %d\n", parameters->imgfile,
+                    imgformat);
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+        case 'o': {         /* output file */
+            char *outfile = opj_optarg;
+            parameters->cod_format = get_file_format(outfile);
+            switch (parameters->cod_format) {
+            case J3D_CFMT:
+            case J2K_CFMT:
+            case LSE_CFMT:
+                break;
+            default:
+                fprintf(stdout,
+                        "[ERROR] Unknown output format volume %s [only *.j2k, *.lse3d or *.jp3d]!! \n",
+                        outfile);
+                return 1;
+                break;
+            }
+            strncpy(parameters->outfile, outfile, MAX_PATH);
+            fprintf(stdout, "[INFO] Outfile: %s \n", parameters->outfile);
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'r': {         /* define compression rates for each layer */
+            char *s = opj_optarg;
+            while (sscanf(s, "%f", &parameters->tcp_rates[parameters->tcp_numlayers]) ==
+                    1) {
+                parameters->tcp_numlayers++;
+                while (*s && *s != ',') {
+                    s++;
+                }
+                if (!*s) {
+                    break;
+                }
+                s++;
+            }
+            parameters->cp_disto_alloc = 1;
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'q': {         /* define distorsion (PSNR) for each layer */
+            char *s = opj_optarg;
+            while (sscanf(s, "%f", &parameters->tcp_distoratio[parameters->tcp_numlayers])
+                    == 1) {
+                parameters->tcp_numlayers++;
+                while (*s && *s != ',') {
+                    s++;
+                }
+                if (!*s) {
+                    break;
+                }
+                s++;
+            }
+            parameters->cp_fixed_quality = 1;
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'f': {
+            fprintf(stdout, "/---------------------------------------------------\\\n");
+            fprintf(stdout, "|  Fixed layer allocation option not implemented !!  |\n");
+            fprintf(stdout, "\\---------------------------------------------------/\n");
+            /*int *row = NULL, *col = NULL;
+            int numlayers = 0, matrix_width = 0;
+
+            char *s = opj_optarg;
+            sscanf(s, "%d", &numlayers);
+            s++;
+            if (numlayers > 9)
+                s++;
+
+            parameters->tcp_numlayers = numlayers;
+            matrix_width = parameters->numresolution[0] + parameters->numresolution[1] + parameters->numresolution[2];
+            parameters->cp_matrice = (int *) malloc(numlayers * matrix_width * sizeof(int));
+            s = s + 2;
+
+            for (i = 0; i < numlayers; i++) {
+                row = &parameters->cp_matrice[i * matrix_width];
+                col = row;
+                parameters->tcp_rates[i] = 1;
+                sscanf(s, "%d,", &col[0]);
+                s += 2;
+                if (col[0] > 9)
+                    s++;
+                col[1] = 0;
+                col[2] = 0;
+                for (j = 1; j < matrix_width; j++) {
+                    col += 3; j+=2;
+                    sscanf(s, "%d,%d,%d", &col[0], &col[1], &col[2]);
+                    s += 6;
+                    if (col[0] > 9)
+                        s++;
+                    if (col[1] > 9)
+                        s++;
+                    if (col[2] > 9)
+                        s++;
+                }
+                if (i < numlayers - 1)
+                    s++;
+            }
+            parameters->cp_fixed_alloc = 1; */
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 't': {         /* tiles */
+            if (sscanf(opj_optarg, "%d,%d,%d", &parameters->cp_tdx, &parameters->cp_tdy,
+                       &parameters->cp_tdz) != 3) {
+                fprintf(stdout,
+                        "[ERROR] '-t' 'dimensions of tiles' argument error !  [-t tdx,tdy,tdz]\n");
+                return 1;
+            }
+            parameters->tile_size_on = true;
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'n': {         /* resolution */
+            int aux;
+            aux = sscanf(opj_optarg, "%d,%d,%d", &parameters->numresolution[0],
+                         &parameters->numresolution[1], &parameters->numresolution[2]);
+            if (aux == 2) {
+                parameters->numresolution[2] = 1;
+            } else if (aux == 1) {
+                parameters->numresolution[1] = parameters->numresolution[0];
+                parameters->numresolution[2] = 1;
+            } else if (aux == 0) {
+                parameters->numresolution[0] = 1;
+                parameters->numresolution[1] = 1;
+                parameters->numresolution[2] = 1;
+            }
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+        case 'c': {         /* precinct dimension */
+            char sep;
+            int res_spec = 0;
+            int aux;
+            char *s = opj_optarg;
+            do {
+                sep = 0;
+                aux = sscanf(s, "[%d,%d,%d]%c", &parameters->prct_init[0][res_spec],
+                             &parameters->prct_init[1][res_spec], &parameters->prct_init[2][res_spec], &sep);
+                if (sep == ',' && aux != 4) {
+                    fprintf(stdout,
+                            "[ERROR] '-c' 'dimensions of precincts' argument error !  [-c [prcx_res0,prcy_res0,prcz_res0],...,[prcx_resN,prcy_resN,prcz_resN]]\n");
+                    return 1;
+                }
+                parameters->csty |= 0x01;
+                res_spec++;
+                s = strpbrk(s, "]") + 2;
+            } while (sep == ',');
+            parameters->res_spec = res_spec; /* number of precinct size specifications */
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'b': {         /* code-block dimension */
+            int cblockw_init = 0, cblockh_init = 0, cblockl_init = 0;
+            if (sscanf(opj_optarg, "%d,%d,%d", &cblockw_init, &cblockh_init,
+                       &cblockl_init) != 3) {
+                fprintf(stdout,
+                        "[ERROR] '-b' 'dimensions of codeblocks' argument error !  [-b cblkx,cblky,cblkz]\n");
+                return 1;
+            }
+            if (cblockw_init * cblockh_init * cblockl_init > (1 << 18) ||
+                    cblockw_init > 1024 || cblockw_init < 4 || cblockh_init > 1024 ||
+                    cblockh_init < 4 || cblockl_init > 1024 || cblockl_init < 4) {
+                fprintf(stdout,
+                        "[ERROR] Size of code_block error (option -b) !!\n\nRestriction :\n * width*height*length<=4096\n * 4<=width,height,length<= 1024\n\n");
+                return 1;
+            }
+            parameters->cblock_init[0] = cblockw_init;
+            parameters->cblock_init[1] = cblockh_init;
+            parameters->cblock_init[2] = cblockl_init;
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'x': {         /* creation of index file */
+            char *index = opj_optarg;
+            strncpy(parameters->index, index, MAX_PATH);
+            parameters->index_on = 1;
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'p': {         /* progression order */
+            char progression[4];
+
+            strncpy(progression, opj_optarg, 4);
+            parameters->prog_order = give_progression(progression);
+            if (parameters->prog_order == -1) {
+                fprintf(stdout,
+                        "[ERROR] Unrecognized progression order [LRCP, RLCP, RPCL, PCRL, CPRL] !!\n");
+                return 1;
+            }
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 's': {         /* subsampling factor */
+            if (sscanf(opj_optarg, "%d,%d,%d", &parameters->subsampling_dx,
+                       &parameters->subsampling_dy, &parameters->subsampling_dz) != 3) {
+                fprintf(stdout, "[ERROR] '-s' sub-sampling argument error !  [-s dx,dy,dz]\n");
+                return 1;
+            }
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'd': {         /* coordonnate of the reference grid */
+            if (sscanf(opj_optarg, "%d,%d,%d", &parameters->volume_offset_x0,
+                       &parameters->volume_offset_y0, &parameters->volume_offset_z0) != 3) {
+                fprintf(stdout,
+                        "[ERROR] -d 'coordonnate of the reference grid' argument error !! [-d x0,y0,z0]\n");
+                return 1;
+            }
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'h': {         /* display an help description */
+            encode_help_display();
+            return 1;
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'P': {         /* POC */
+            int numpocs = 0;        /* number of progression order change (POC) default 0 */
+            opj_poc_t *POC = NULL;  /* POC : used in case of Progression order change */
+
+            char *s = opj_optarg;
+            POC = parameters->POC;
+
+            fprintf(stdout, "/----------------------------------\\\n");
+            fprintf(stdout, "|  POC option not fully tested !!  |\n");
+            fprintf(stdout, "\\----------------------------------/\n");
+
+            while (sscanf(s, "T%d=%d,%d,%d,%d,%d,%s", &POC[numpocs].tile,
+                          &POC[numpocs].resno0, &POC[numpocs].compno0,
+                          &POC[numpocs].layno1, &POC[numpocs].resno1,
+                          &POC[numpocs].compno1, POC[numpocs].progorder) == 7) {
+                POC[numpocs].prg = give_progression(POC[numpocs].progorder);
+                /* POC[numpocs].tile; */
+                numpocs++;
+                while (*s && *s != '/') {
+                    s++;
+                }
+                if (!*s) {
+                    break;
+                }
+                s++;
+            }
+            parameters->numpocs = numpocs;
+        }
+        break;
+
+        /* ------------------------------------------------------ */
+
+        case 'S': {         /* SOP marker */
+            parameters->csty |= 0x02;
+        }
+        break;
+
+        /* ------------------------------------------------------ */
+
+        case 'E': {         /* EPH marker */
+            parameters->csty |= 0x04;
+        }
+        break;
+
+        /* ------------------------------------------------------ */
+
+        case 'M': {         /* Codification mode switch */
+            fprintf(stdout, "[INFO] Mode switch option not fully tested !!\n");
+            value = 0;
+            if (sscanf(opj_optarg, "%d", &value) == 1) {
+                for (i = 0; i <= 6; i++) {
+                    int cache = value & (1 << i);
+                    if (cache) {
+                        parameters->mode |= (1 << i);
+                    }
+                }
+            }
+        }
+        break;
+
+        /* ------------------------------------------------------ */
+
+        case 'D': {         /* DCO */
+            if (sscanf(opj_optarg, "%d", &parameters->dcoffset) != 1) {
+                fprintf(stdout, "[ERROR] DC offset error !! [-D %d]\n", parameters->dcoffset);
+                return 1;
+            }
+        }
+        break;
+
+        /* ------------------------------------------------------ */
+
+        case 'R': {         /* ROI */
+            if (sscanf(opj_optarg, "OI:c=%d,U=%d", &parameters->roi_compno,
+                       &parameters->roi_shift) != 2) {
+                fprintf(stdout, "[ERROR] ROI error !! [-ROI:c='compno',U='shift']\n");
+                return 1;
+            }
+        }
+        break;
+
+        /* ------------------------------------------------------ */
+
+        case 'l': {         /* Tile offset */
+            if (sscanf(opj_optarg, "%d,%d,%d", &parameters->cp_tx0, &parameters->cp_ty0,
+                       &parameters->cp_tz0) != 3) {
+                fprintf(stdout, "[ERROR] -l 'tile offset' argument error !! [-l X0,Y0,Z0]");
+                return 1;
+            }
+        }
+        break;
+
+        /* ------------------------------------------------------
+
+        case 'T':            // Tranformation of original data (2D-DWT/3D-DWT/3D-RLS/2D-DWT+1D-RLS)
+        {
+        char transform[4];
+
+        strncpy(transform, opj_optarg, 4);
+        parameters->transform_format = give_transform(transform);
+        if (parameters->transform_format == -1) {
+            fprintf(stdout, "[ERROR] -T 'Transform domain' argument error !! [-T 2DWT, 3DWT, 3RLS or 3LSE only]");
+             return 1;
+        }
+        }
+        break;
+
+         ------------------------------------------------------ */
+
+        case 'C': {         /* Coding of transformed data */
+            char coding[3];
+
+            strncpy(coding, opj_optarg, 3);
+            parameters->encoding_format = give_coding(coding);
+            if (parameters->encoding_format == -1) {
+                fprintf(stdout,
+                        "[ERROR] -C 'Coding algorithm' argument error !! [-C 2EB, 3EB, 2GR, 3GR or GRI only]");
+                return 1;
+            }
+        }
+        break;
+
+        /* ------------------------------------------------------ */
+
+        case 'I': {         /* reversible or not */
+            parameters->irreversible = 1;
+        }
+        break;
+
+        default:
+            fprintf(stdout, "[ERROR] This option is not valid \"-%c %s\"\n", c, opj_optarg);
+            return 1;
+        }
+    }
+
+    /* check for possible errors */
+
+    if ((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
+        fprintf(stdout, "usage: jp3d_vm_enc -i volume-file -o jp3d-file (+ options)\n");
+        return 1;
+    }
+
+    if ((parameters->decod_format == BIN_DFMT) && (parameters->imgfile[0] == 0)) {
+        fprintf(stdout,
+                "usage: jp3d_vm_enc -i bin-volume-file -m img-file -o jp3d-file (+ options)\n");
+        return 1;
+    }
+
+    if ((parameters->decod_format != BIN_DFMT) &&
+            (parameters->decod_format != PGX_DFMT) &&
+            (parameters->decod_format != IMG_DFMT)) {
+        fprintf(stdout,
+                "usage: jp3d_vm_enc -i input-volume-file [*.bin,*.pgx,*.img] -o jp3d-file [*.jp3d,*.j2k] (+ options)\n");
+        return 1;
+    }
+    if ((parameters->cod_format != J3D_CFMT) &&
+            (parameters->cod_format != J2K_CFMT)) {
+        fprintf(stdout,
+                "usage: jp3d_vm_enc -i input-volume-file [*.bin,*.pgx,*.img] -o jp3d-file [*.jp3d,*.j2k] (+ options)\n");
+        return 1;
+    }
+
+    if ((parameters->encoding_format == ENCOD_2GR ||
+            parameters->encoding_format == ENCOD_3GR) &&
+            parameters->transform_format != TRF_3D_LSE &&
+            parameters->transform_format != TRF_3D_RLS) {
+        fprintf(stdout,
+                "[ERROR] Entropy coding options -C [2GR,3GR] are only compatible with predictive-based transform algorithms: -T [3RLS,3LSE].\n");
+        return 1;
+    }
+    if (parameters->encoding_format == ENCOD_3EB) {
+        parameters->mode |= (1 << 6);
+    }
+
+    if ((parameters->mode >> 6) & 1) {
+        parameters->encoding_format = ENCOD_3EB;
+    }
+
+    if ((parameters->numresolution[2] == 0 || (parameters->numresolution[1] == 0) ||
+            (parameters->numresolution[0] == 0))) {
+        fprintf(stdout,
+                "[ERROR] -n 'resolution levels' argument error ! Resolutions must be greater than 1 in order to perform DWT.\n");
+        return 1;
+    }
+    if (parameters->numresolution[1] != parameters->numresolution[0]) {
+        fprintf(stdout,
+                "[ERROR] -n 'resolution levels' argument error ! Resolutions in X and Y axis must be the same in this implementation.\n");
+        return 1;
+    }
+
+    if (parameters->numresolution[2] > parameters->numresolution[0]) {
+        fprintf(stdout,
+                "[ERROR] -n 'resolution levels' argument error ! Resolutions in Z axis must be lower than in X-Y axis.\n");
+        return 1;
+    }
+
+    if (parameters->dcoffset >= 128 && parameters->dcoffset <= -128) {
+        fprintf(stdout,
+                "[ERROR] -D 'DC offset' argument error ! Value must be -128<=DCO<=128.\n");
+        return 1;
+    }
+
+    if (parameters->numresolution[2] != 1) {
+        parameters->transform_format = TRF_3D_DWT;
+        /*fprintf(stdout, "[Warning] Resolution level in axial dim > 1 : 3D-DWT will be performed... \n");*/
+    } else if (parameters->numresolution[2] == 1) {
+        parameters->transform_format = TRF_2D_DWT;
+        /*fprintf(stdout, "[Warning] Resolution level in axial dim == 1 : 2D-DWT will be performed... \n");*/
+    }
+
+    if ((parameters->cod_format == J2K_CFMT) &&
+            (parameters->transform_format != TRF_2D_DWT ||
+             parameters->encoding_format != ENCOD_2EB)) {
+        fprintf(stdout,
+                "[WARNING] Incompatible options -o *.j2k and defined transform or encoding algorithm. Latter will be ignored\n");
+        parameters->transform_format = TRF_2D_DWT;
+        parameters->encoding_format = ENCOD_2EB;
+    }
+
+    if ((parameters->cp_disto_alloc || parameters->cp_fixed_alloc ||
+            parameters->cp_fixed_quality) &&
+            (!(parameters->cp_disto_alloc ^ parameters->cp_fixed_quality))) {
+        fprintf(stdout, "[ERROR] Options -r and -q cannot be used together !!\n");
+        return 1;
+    }               /* mod fixed_quality */
+
+    /* if no rate entered, lossless by default */
+    if (parameters->tcp_numlayers == 0) {
+        parameters->tcp_rates[0] = 0.0; /* MOD antonin : losslessbug */
+        parameters->tcp_numlayers++;
+        parameters->cp_disto_alloc = 1;
+    }
+
+    if ((parameters->cp_tx0 > parameters->volume_offset_x0) ||
+            (parameters->cp_ty0 > parameters->volume_offset_y0) ||
+            (parameters->cp_tz0 > parameters->volume_offset_z0)) {
+        fprintf(stdout,
+                "[ERROR] Tile offset dimension is unnappropriate --> TX0(%d)<=IMG_X0(%d) TYO(%d)<=IMG_Y0(%d) TZO(%d)<=IMG_Z0(%d)\n",
+                parameters->cp_tx0, parameters->volume_offset_x0, parameters->cp_ty0,
+                parameters->volume_offset_y0,
+                parameters->cp_tz0, parameters->volume_offset_z0);
+        return 1;
+    }
+
+    for (i = 0; i < parameters->numpocs; i++) {
+        if (parameters->POC[i].prg == -1) {
+            fprintf(stdout,
+                    "[ERROR] Unrecognized progression order in option -P (POC n %d) [LRCP, RLCP, RPCL, PCRL, CPRL] !!\n",
+                    i + 1);
+        }
+    }
+    return 0;
+}
+
+/* -------------------------------------------------------------------------- */
+
+/**
+sample error callback expecting a FILE* client object
+*/
+void error_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[ERROR] %s", msg);
+}
+/**
+sample warning callback expecting a FILE* client object
+*/
+void warning_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[WARNING] %s", msg);
+}
+/**
+sample debug callback expecting a FILE* client object
+*/
+void info_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[INFO] %s", msg);
+}
+
+/* -------------------------------------------------------------------------- */
+
+int main(int argc, char **argv)
+{
+    bool bSuccess;
+    bool delete_comment = true;
+    opj_cparameters_t parameters;   /* compression parameters */
+    opj_event_mgr_t event_mgr;      /* event manager */
+    opj_volume_t *volume = NULL;
+
+    /*
+    configure the event callbacks (not required)
+    setting of each callback is 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 JP3D";
+        /* no need to delete parameters.cp_comment on exit */
+        delete_comment = false;
+    }
+
+    /* encode the destination volume */
+    /* ---------------------------- */
+    if (parameters.cod_format == J3D_CFMT || parameters.cod_format == J2K_CFMT) {
+        int codestream_length, pixels, bitsin;
+        opj_cio_t *cio = NULL;
+        FILE *f = NULL;
+        opj_cinfo_t* cinfo = NULL;
+
+        /* decode the source volume */
+        /* ----------------------- */
+        switch (parameters.decod_format) {
+        case PGX_DFMT:
+            fprintf(stdout, "[INFO] Loading pgx file(s)\n");
+            volume = pgxtovolume(parameters.infile, &parameters);
+            if (!volume) {
+                fprintf(stdout, "[ERROR] Unable to load pgx files\n");
+                return 1;
+            }
+            break;
+
+        case BIN_DFMT:
+            fprintf(stdout, "[INFO] Loading bin file\n");
+            volume = bintovolume(parameters.infile, parameters.imgfile, &parameters);
+            if (!volume) {
+                fprintf(stdout, "[ERROR] Unable to load bin file\n");
+                return 1;
+            }
+            break;
+
+        case IMG_DFMT:
+            fprintf(stdout, "[INFO] Loading img file\n");
+            volume = imgtovolume(parameters.infile, &parameters);
+            if (!volume) {
+                fprintf(stderr, "[ERROR] Unable to load img file\n");
+                return 1;
+            }
+            break;
+        }
+
+        /* get a JP3D or J2K compressor handle */
+        if (parameters.cod_format == J3D_CFMT) {
+            cinfo = opj_create_compress(CODEC_J3D);
+        } else if (parameters.cod_format == J2K_CFMT) {
+            cinfo = opj_create_compress(CODEC_J2K);
+        }
+
+        /* catch events using our callbacks and give a local context */
+        opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stdout);
+
+        /* setup the encoder parameters using the current volume and using user parameters */
+        opj_setup_encoder(cinfo, &parameters, volume);
+
+        /* open a byte stream for writing */
+        /* allocate memory for all tiles */
+        cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0);
+
+        /* encode the volume */
+        /*fprintf(stdout, "[INFO] Encode the volume\n");*/
+        bSuccess = opj_encode(cinfo, cio, volume, parameters.index);
+        if (!bSuccess) {
+            opj_cio_close(cio);
+            fprintf(stdout, "[ERROR] Failed to encode volume\n");
+            return 1;
+        }
+        codestream_length = cio_tell(cio);
+        pixels = (volume->x1 - volume->x0) * (volume->y1 - volume->y0) *
+                 (volume->z1 - volume->z0);
+        bitsin = pixels * volume->comps[0].prec;
+        fprintf(stdout,
+                "[RESULT] Volume: %d x %d x %d (x %d bpv)\n Codestream: %d B,  Ratio: %5.3f bpv,  (%5.3f : 1) \n",
+                (volume->x1 - volume->x0), (volume->y1 - volume->y0), (volume->z1 - volume->z0),
+                volume->comps[0].prec,
+                codestream_length, ((double)codestream_length * 8.0 / (double)pixels),
+                ((double)bitsin / (8.0 * (double)codestream_length)));
+
+        /* write the buffer to disk */
+        f = fopen(parameters.outfile, "wb");
+        if (!f) {
+            fprintf(stdout, "[ERROR] Failed to open %s for writing\n", parameters.outfile);
+            return 1;
+        }
+        fwrite(cio->buffer, 1, codestream_length, f);
+        fclose(f);
+
+        /* close and free the byte stream */
+        opj_cio_close(cio);
+
+        /* free remaining compression structures */
+        opj_destroy_compress(cinfo);
+    } else {
+        fprintf(stdout, "[ERROR] Cod_format != JP3d !!! \n");
+        return 1;
+    }
+
+    /* free user parameters structure */
+    if (delete_comment) {
+        if (parameters.cp_comment) {
+            free(parameters.cp_comment);
+        }
+    }
+    if (parameters.cp_matrice) {
+        free(parameters.cp_matrice);
+    }
+
+    /* free volume data */
+    opj_volume_destroy(volume);
+
+    return 0;
+}
old mode 100755 (executable)
new mode 100644 (file)
index c2cdb32..08d6ced
-/*\r
- * Copyright (c) 2001-2003, David Janssens\r
- * Copyright (c) 2002-2003, Yannick Verschueren\r
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe\r
- * Copyright (c) 2005, Herve Drolon, FreeImage Team\r
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium\r
- * Copyright (c) 2006, M�nica D�ez Garc�a, Image Processing Laboratory, University of Valladolid, Spain\r
- * All rights reserved.\r
- *\r
- * Redistribution and use in source and binary forms, with or without\r
- * modification, are permitted provided that the following conditions\r
- * are met:\r
- * 1. Redistributions of source code must retain the above copyright\r
- *    notice, this list of conditions and the following disclaimer.\r
- * 2. Redistributions in binary form must reproduce the above copyright\r
- *    notice, this list of conditions and the following disclaimer in the\r
- *    documentation and/or other materials provided with the distribution.\r
- *\r
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'\r
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\r
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
- * POSSIBILITY OF SUCH DAMAGE.\r
- */\r
-#include <stdio.h>\r
-#include <string.h>\r
-#include <stdlib.h>\r
-#include <math.h>\r
-\r
-#include "opj_config.h"\r
-#include "openjp3d.h"\r
-#include "opj_getopt.h"\r
-#include "convert.h"\r
-\r
-#ifdef _WIN32\r
-#include <windows.h>\r
-#else\r
-#define stricmp strcasecmp\r
-#define strnicmp strncasecmp\r
-#endif /* _WIN32 */\r
-\r
-/* ----------------------------------------------------------------------- */\r
-static double calc_PSNR(opj_volume_t *original, opj_volume_t *decoded)\r
-{\r
-       int max, i, k, compno = 0, size;\r
-       double sum, total = 0;\r
-       int global = 1;\r
-    \r
-       max = (original->comps[compno].prec <= 8) ? 255 : (1 << original->comps[compno].prec) - 1;\r
-       if (global) {\r
-               size = (original->x1 - original->x0) * (original->y1 - original->y0) * (original->z1 - original->z0);\r
-\r
-               for (compno = 0; compno < original->numcomps; compno++) {\r
-                       for(sum = 0, i = 0; i < size; ++i) {\r
-                               if ((decoded->comps[compno].data[i] < 0) || (decoded->comps[compno].data[i] > max))\r
-                                       fprintf(stdout,"[WARNING] Data out of range during PSNR computing...\n");\r
-                               else\r
-                                       sum += (original->comps[compno].data[i] - decoded->comps[compno].data[i]) * (original->comps[compno].data[i] - decoded->comps[compno].data[i]);        \r
-                       }\r
-               }\r
-               sum /= size;\r
-               total = ((sum==0.0) ? 0.0 : 10 * log10(max * max / sum));\r
-       } else {\r
-               size = (original->x1 - original->x0) * (original->y1 - original->y0);\r
-\r
-               for (k = 0; k < original->z1 - original->z0; k++) {\r
-                       int offset = k * size;\r
-                       for (sum = 0, compno = 0; compno < original->numcomps; compno++) {\r
-                               for(i = 0; i < size; ++i) {\r
-                                       if ((decoded->comps[compno].data[i + offset] < 0) || (decoded->comps[compno].data[i + offset] > max))\r
-                                               fprintf(stdout,"[WARNING] Data out of range during PSNR computing...\n");\r
-                                       else\r
-                                               sum += (original->comps[compno].data[i + offset] - decoded->comps[compno].data[i + offset]) * (original->comps[compno].data[i + offset] - decoded->comps[compno].data[i + offset]);        \r
-                               }\r
-                       }\r
-                       sum /= size;\r
-                       total = total + ((sum==0.0) ? 0.0 : 10 * log10(max * max / sum));\r
-               }\r
-\r
-       }\r
-       if(total == 0) /* perfect reconstruction, PSNR should return infinity */\r
-               return -1.0;\r
-       \r
-       return total;\r
-       /*return 20 * log10((max - 1) / sqrt(sum));*/\r
-}\r
-\r
-static double calc_SSIM(opj_volume_t *original, opj_volume_t *decoded)\r
-{\r
-       int max, i, compno = 0, size, sizeM;\r
-       double sum;\r
-       double mux = 0.0, muy = 0.0, sigmax = 0.0, sigmay = 0.0,\r
-               sigmaxy = 0.0/*, structx = 0.0, structy = 0.0*/;\r
-       double lcomp,ccomp,scomp;\r
-       double C1,C2,C3;\r
-\r
-       max = (original->comps[compno].prec <= 8) ? 255 : (1 << original->comps[compno].prec) - 1;\r
-       size = (original->x1 - original->x0) * (original->y1 - original->y0) * (original->z1 - original->z0);\r
-\r
-       /*MSSIM*/\r
-\r
-/*     sizeM = size / (original->z1 - original->z0);*/\r
-\r
-       sizeM = size;   \r
-       for(sum = 0, i = 0; i < sizeM; ++i) {\r
-               /* First, the luminance of each signal is compared.*/\r
-               mux += original->comps[compno].data[i];\r
-               muy += decoded->comps[compno].data[i];\r
-       }\r
-       mux /= sizeM;\r
-       muy /= sizeM;\r
-       \r
-       /*We use the standard deviation (the square root of variance) as an estimate of the signal contrast.*/\r
-    for(sum = 0, i = 0; i < sizeM; ++i) {\r
-               /* First, the luminance of each signal is compared.*/\r
-               sigmax += (original->comps[compno].data[i] - mux) * (original->comps[compno].data[i] - mux);\r
-               sigmay += (decoded->comps[compno].data[i] - muy) * (decoded->comps[compno].data[i] - muy);\r
-               sigmaxy += (original->comps[compno].data[i] - mux) * (decoded->comps[compno].data[i] - muy);\r
-       }\r
-       sigmax /= sizeM - 1;\r
-       sigmay /= sizeM - 1;\r
-       sigmaxy /= sizeM - 1;\r
-       \r
-       sigmax = sqrt(sigmax);\r
-       sigmay = sqrt(sigmay);\r
-       sigmaxy = sqrt(sigmaxy);\r
-\r
-       /*Third, the signal is normalized (divided) by its own standard deviation, */\r
-       /*so that the two signals being compared have unit standard deviation.*/\r
-\r
-       /*Luminance comparison*/\r
-       C1 = (0.01 * max) * (0.01 * max);\r
-       lcomp = ((2 * mux * muy) + C1)/((mux*mux) + (muy*mux) + C1);\r
-       /*Constrast comparison*/\r
-       C2 = (0.03 * max) * (0.03 * max);\r
-       ccomp = ((2 * sigmax * sigmay) + C2)/((sigmax*sigmax) + (sigmay*sigmay) + C2);\r
-       /*Structure comparison*/\r
-       C3 = C2 / 2;\r
-       scomp = (sigmaxy + C3) / (sigmax * sigmay + C3);\r
-       /*Similarity measure*/\r
-\r
-       sum = lcomp * ccomp * scomp;\r
-       return sum;\r
-}\r
-\r
-void decode_help_display() {\r
-       fprintf(stdout,"HELP\n----\n\n");\r
-       fprintf(stdout,"- the -h option displays this help information on screen\n\n");\r
-\r
-       fprintf(stdout,"List of parameters for the JPEG 2000 encoder:\n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout," Required arguments \n");\r
-       fprintf(stdout," ---------------------------- \n");\r
-       fprintf(stdout,"  -i <compressed file> ( *.jp3d, *.j3d )\n");\r
-       fprintf(stdout,"    Currently accepts J3D-files. The file type is identified based on its suffix.\n");\r
-       fprintf(stdout,"  -o <decompressed file> ( *.pgx, *.bin )\n");\r
-       fprintf(stdout,"    Currently accepts PGX-files and BIN-files. Binary data is written to the file (not ascii). \n");\r
-       fprintf(stdout,"    If a PGX filename is given, there will be as many output files as slices; \n");\r
-       fprintf(stdout,"    an indice starting from 0 will then be appended to the output filename,\n");\r
-       fprintf(stdout,"    just before the \"pgx\" extension.\n");\r
-       fprintf(stdout,"  -m <characteristics file> ( *.img ) \n");\r
-       fprintf(stdout,"    Required only for BIN-files. Ascii data of volume characteristics is written. \n");\r
-       fprintf(stdout,"\n");\r
-       fprintf(stdout," Optional  \n");\r
-       fprintf(stdout," ---------------------------- \n");\r
-       fprintf(stdout,"  -h \n ");\r
-       fprintf(stdout,"    Display the help information\n");\r
-       fprintf(stdout,"  -r <RFx,RFy,RFz>\n");\r
-       fprintf(stdout,"    Set the number of highest resolution levels to be discarded on each dimension. \n");\r
-       fprintf(stdout,"    The volume resolution is effectively divided by 2 to the power of the\n");\r
-       fprintf(stdout,"    number of discarded levels. The reduce factor is limited by the\n");\r
-       fprintf(stdout,"    smallest total number of decomposition levels among tiles.\n");\r
-       fprintf(stdout,"  -l <number of quality layers to decode>\n");\r
-       fprintf(stdout,"    Set the maximum number of quality layers to decode. If there are\n");\r
-       fprintf(stdout,"    less quality layers than the specified number, all the quality layers\n");\r
-       fprintf(stdout,"    are decoded. \n");\r
-       fprintf(stdout,"  -O original-file \n");\r
-    fprintf(stdout,"    This option offers the possibility to compute some quality results  \n");\r
-       fprintf(stdout,"    for the decompressed volume, like the PSNR value achieved or the global SSIM value.  \n");\r
-       fprintf(stdout,"    Needs the original file in order to compare with the new one.\n");\r
-    fprintf(stdout,"    NOTE: Only valid when -r option is 0,0,0 (both original and decompressed volumes have same resolutions) \n");\r
-    fprintf(stdout,"    NOTE: If original file is .BIN file, the volume characteristics file shall be defined with the -m option. \n");\r
-       fprintf(stdout,"    (i.e. -O original-BIN-file -m original-IMG-file) \n");\r
-       fprintf(stdout,"  -BE \n");\r
-       fprintf(stdout,"    Define that the recovered volume data will be saved with big endian byte order.\n");\r
-       fprintf(stdout,"    By default, little endian byte order is used.\n");\r
-       fprintf(stdout,"\n");\r
-}\r
-\r
-/* -------------------------------------------------------------------------- */\r
-\r
-int get_file_format(char *filename) {\r
-       int i;\r
-       static const char *extension[] = {"pgx", "bin", "j3d", "jp3d", "j2k", "img"};\r
-       static const int format[] = { PGX_DFMT, BIN_DFMT, J3D_CFMT, J3D_CFMT, J2K_CFMT, IMG_DFMT};\r
-       char * ext = strrchr(filename, '.');\r
-       if(ext) {\r
-               ext++;\r
-               for(i = 0; i < sizeof(format) / sizeof(format[0]); i++) {\r
-                       if(strnicmp(ext, extension[i], 3) == 0) {\r
-                               return format[i];\r
-                       }\r
-               }\r
-       }\r
-\r
-       return -1;\r
-}\r
-\r
-/* -------------------------------------------------------------------------- */\r
-\r
-int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *parameters) {\r
-       /* parse the command line */\r
-\r
-       while (1) {\r
-               int c = opj_getopt(argc, argv, "i:o:O:r:l:B:m:h");\r
-               if (c == -1)                      \r
-                       break;\r
-               switch (c) {\r
-                       case 'i':                       /* input file */\r
-                       {\r
-                               char *infile = opj_optarg;\r
-                               parameters->decod_format = get_file_format(infile);\r
-                               switch(parameters->decod_format) {\r
-                                       case J3D_CFMT:\r
-                                       case J2K_CFMT:\r
-                                               break;\r
-                                       default:\r
-                                               fprintf(stdout, "[ERROR] Unknown format for infile %s [only *.j3d]!! \n", infile);\r
-                                               return 1;\r
-                                               break;\r
-                               }\r
-                               strncpy(parameters->infile, infile, MAX_PATH);\r
-                               fprintf(stdout, "[INFO] Infile: %s \n", parameters->infile);\r
-\r
-                       }\r
-                       break;\r
-\r
-                       case 'm':                       /* img file */\r
-                       {\r
-                               char *imgfile = opj_optarg;\r
-                               int imgformat = get_file_format(imgfile);\r
-                               switch(imgformat) {\r
-                                       case IMG_DFMT:\r
-                                               break;\r
-                                       default:\r
-                                               fprintf(stdout, "[ERROR] Unrecognized format for imgfile : %s [accept only *.img] !!\n\n", imgfile);\r
-                                               return 1;\r
-                                               break;\r
-                               }\r
-                               strncpy(parameters->imgfile, imgfile, MAX_PATH);\r
-                               fprintf(stdout, "[INFO] Imgfile: %s Format: %d\n", parameters->imgfile, imgformat);\r
-                       }\r
-                       break;\r
-                               \r
-                               /* ----------------------------------------------------- */\r
-\r
-                       case 'o':                       /* output file */\r
-                       {\r
-                               char *outfile = opj_optarg;\r
-                               parameters->cod_format = get_file_format(outfile);\r
-                               switch(parameters->cod_format) {\r
-                                       case PGX_DFMT:\r
-                                       case BIN_DFMT:\r
-                                               break;\r
-                                       default:\r
-                                               fprintf(stdout, "[ERROR] Unrecognized format for outfile : %s [accept only *.pgx or *.bin] !!\n\n", outfile);\r
-                                               return 1;\r
-                                               break;\r
-                               }\r
-                               strncpy(parameters->outfile, outfile, MAX_PATH);\r
-                               fprintf(stdout, "[INFO] Outfile: %s \n", parameters->outfile);\r
-\r
-                       }\r
-                       break;\r
-                       \r
-                               /* ----------------------------------------------------- */\r
-\r
-                       case 'O':               /* Original image for PSNR computing */\r
-                       {\r
-                               char *original = opj_optarg;\r
-                               parameters->orig_format = get_file_format(original);\r
-                               switch(parameters->orig_format) {\r
-                                       case PGX_DFMT:\r
-                                       case BIN_DFMT:\r
-                                               break;\r
-                                       default:\r
-                                               fprintf(stdout, "[ERROR] Unrecognized format for original file : %s [accept only *.pgx or *.bin] !!\n\n", original);\r
-                                               return 1;\r
-                                               break;\r
-                               }\r
-                               strncpy(parameters->original, original, MAX_PATH);\r
-                               fprintf(stdout, "[INFO] Original file: %s \n", parameters->original);\r
-                       }\r
-                       break;\r
-\r
-                               /* ----------------------------------------------------- */\r
-           \r
-                       case 'r':               /* reduce option */\r
-                       {\r
-                               /*sscanf(opj_optarg, "%d, %d, %d", &parameters->cp_reduce[0], &parameters->cp_reduce[1], &parameters->cp_reduce[2]);*/\r
-                               int aux;\r
-                               aux = sscanf(opj_optarg, "%d,%d,%d", &parameters->cp_reduce[0], &parameters->cp_reduce[1], &parameters->cp_reduce[2]);\r
-                               if (aux == 2) \r
-                                       parameters->cp_reduce[2] = 0;\r
-                               else if (aux == 1) {\r
-                                       parameters->cp_reduce[1] = parameters->cp_reduce[0];\r
-                                       parameters->cp_reduce[2] = 0;\r
-                               }else if (aux == 0){\r
-                                       parameters->cp_reduce[0] = 0;\r
-                                       parameters->cp_reduce[1] = 0;\r
-                                       parameters->cp_reduce[2] = 0;\r
-                               }\r
-                       }\r
-                       break;\r
-                       \r
-                               /* ----------------------------------------------------- */\r
-\r
-                       case 'l':               /* layering option */\r
-                       {\r
-                               sscanf(opj_optarg, "%d", &parameters->cp_layer);\r
-                       }\r
-                       break;\r
-\r
-                               /* ----------------------------------------------------- */\r
-\r
-                       case 'B':               /* BIGENDIAN vs. LITTLEENDIAN */\r
-                       {\r
-                               parameters->bigendian = 1;\r
-                       }\r
-                       break;\r
-                       \r
-                               /* ----------------------------------------------------- */\r
-\r
-                       case 'L':               /* BIGENDIAN vs. LITTLEENDIAN */\r
-                       {\r
-                               parameters->decod_format = LSE_CFMT;\r
-                       }\r
-                       break;\r
-                       \r
-                       /* ----------------------------------------------------- */\r
-                       \r
-                       case 'h':                       /* display an help description */\r
-                       {\r
-                               decode_help_display();\r
-                               return 1;\r
-                       }\r
-                       break;\r
-            \r
-                               /* ----------------------------------------------------- */\r
-                       \r
-                       default:\r
-                               fprintf(stdout,"[WARNING] This option is not valid \"-%c %s\"\n",c, opj_optarg);\r
-                               break;\r
-               }\r
-       }\r
-\r
-       /* check for possible errors */\r
-\r
-       if((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {\r
-               fprintf(stdout,"[ERROR] At least one required argument is missing\n Check jp3d_to_volume -help for usage information\n");\r
-               return 1;\r
-       }\r
-\r
-       return 0;\r
-}\r
-\r
-/* -------------------------------------------------------------------------- */\r
-\r
-/**\r
-sample error callback expecting a FILE* client object\r
-*/\r
-void error_callback(const char *msg, void *client_data) {\r
-       FILE *stream = (FILE*)client_data;\r
-       fprintf(stream, "[ERROR] %s", msg);\r
-}\r
-/**\r
-sample warning callback expecting a FILE* client object\r
-*/\r
-void warning_callback(const char *msg, void *client_data) {\r
-       FILE *stream = (FILE*)client_data;\r
-       fprintf(stream, "[WARNING] %s", msg);\r
-}\r
-/**\r
-sample debug callback expecting no client object\r
-*/\r
-void info_callback(const char *msg, void *client_data) {\r
-       fprintf(stdout, "[INFO] %s", msg);\r
-}\r
-\r
-/* -------------------------------------------------------------------------- */\r
-\r
-int main(int argc, char **argv) {\r
-\r
-       opj_dparameters_t parameters;   /* decompression parameters */\r
-       opj_event_mgr_t event_mgr;              /* event manager */\r
-       opj_volume_t *volume = NULL;\r
-\r
-       opj_volume_t *original = NULL;\r
-       opj_cparameters_t cparameters;  /* original parameters */\r
-\r
-       FILE *fsrc = NULL;\r
-       unsigned char *src = NULL; \r
-       int file_length;\r
-       int decodeok;\r
-       double psnr, ssim;\r
-\r
-       opj_dinfo_t* dinfo = NULL;      /* handle to a decompressor */\r
-       opj_cio_t *cio = NULL;\r
-\r
-       /* configure the event callbacks (not required) */\r
-       memset(&event_mgr, 0, sizeof(opj_event_mgr_t));\r
-       event_mgr.error_handler = error_callback;\r
-       event_mgr.warning_handler = warning_callback;\r
-       event_mgr.info_handler = info_callback;\r
-\r
-       /* set decoding parameters to default values */\r
-       opj_set_default_decoder_parameters(&parameters);\r
-\r
-    /* parse input and get user decoding parameters */\r
-       strcpy(parameters.original,"NULL");\r
-       strcpy(parameters.imgfile,"NULL");\r
-       if(parse_cmdline_decoder(argc, argv, &parameters) == 1) {\r
-               return 0;\r
-       }\r
-       \r
-       /* read the input file and put it in memory */\r
-       /* ---------------------------------------- */\r
-       fprintf(stdout, "[INFO] Loading %s file \n",parameters.decod_format==J3D_CFMT ? ".jp3d" : ".j2k");\r
-       fsrc = fopen(parameters.infile, "rb");\r
-       if (!fsrc) {\r
-               fprintf(stdout, "[ERROR] Failed to open %s for reading\n", parameters.infile);\r
-               return 1;\r
-       }  \r
-       fseek(fsrc, 0, SEEK_END);\r
-       file_length = ftell(fsrc);\r
-       fseek(fsrc, 0, SEEK_SET);\r
-       src = (unsigned char *) malloc(file_length);\r
-       fread(src, 1, file_length, fsrc);\r
-       fclose(fsrc);\r
-       \r
-       /* decode the code-stream */\r
-       /* ---------------------- */\r
-       if (parameters.decod_format == J3D_CFMT || parameters.decod_format == J2K_CFMT) {               \r
-               /* get a JP3D or J2K decoder handle */\r
-               if (parameters.decod_format == J3D_CFMT) \r
-                       dinfo = opj_create_decompress(CODEC_J3D);\r
-               else if (parameters.decod_format == J2K_CFMT) \r
-                       dinfo = opj_create_decompress(CODEC_J2K);\r
-\r
-               /* catch events using our callbacks and give a local context */\r
-               opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);                   \r
-\r
-               /* setup the decoder decoding parameters using user parameters */\r
-               opj_setup_decoder(dinfo, &parameters);\r
-\r
-               /* open a byte stream */\r
-               cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);\r
-\r
-               /* decode the stream and fill the volume structure */\r
-               volume = opj_decode(dinfo, cio);\r
-               if(!volume) {\r
-                       fprintf(stdout, "[ERROR] jp3d_to_volume: failed to decode volume!\n");                          \r
-                       opj_destroy_decompress(dinfo);\r
-                       opj_cio_close(cio);\r
-                       return 1;\r
-               }       \r
-\r
-               /* close the byte stream */\r
-               opj_cio_close(cio);\r
-       }\r
-  \r
-       /* free the memory containing the code-stream */\r
-       free(src);\r
-       src = NULL;\r
-\r
-       /* create output volume */\r
-       /* ------------------- */\r
-\r
-       switch (parameters.cod_format) {\r
-               case PGX_DFMT:                  /* PGX */\r
-                       decodeok = volumetopgx(volume, parameters.outfile);\r
-                       if (decodeok)\r
-                               fprintf(stdout,"[ERROR] Unable to write decoded volume into pgx files\n");\r
-                       break;\r
-               \r
-               case BIN_DFMT:                  /* BMP */\r
-                       decodeok = volumetobin(volume, parameters.outfile);\r
-                       if (decodeok)\r
-                               fprintf(stdout,"[ERROR] Unable to write decoded volume into pgx files\n");\r
-                       break;\r
-       }\r
-       switch (parameters.orig_format) {\r
-               case PGX_DFMT:                  /* PGX */\r
-                       if (strcmp("NULL",parameters.original) != 0){\r
-                               fprintf(stdout,"Loading original file %s \n",parameters.original);\r
-                               cparameters.subsampling_dx = 1; cparameters.subsampling_dy = 1; cparameters.subsampling_dz = 1;\r
-                               cparameters.volume_offset_x0 = 0;cparameters.volume_offset_y0 = 0;cparameters.volume_offset_z0 = 0;\r
-                               original = pgxtovolume(parameters.original,&cparameters);\r
-                       }\r
-                       break;\r
-               \r
-               case BIN_DFMT:                  /* BMP */\r
-                       if (strcmp("NULL",parameters.original) != 0 && strcmp("NULL",parameters.imgfile) != 0){\r
-                               fprintf(stdout,"Loading original file %s %s\n",parameters.original,parameters.imgfile);\r
-                               cparameters.subsampling_dx = 1; cparameters.subsampling_dy = 1; cparameters.subsampling_dz = 1;\r
-                               cparameters.volume_offset_x0 = 0;cparameters.volume_offset_y0 = 0;cparameters.volume_offset_z0 = 0;\r
-                               original = bintovolume(parameters.original,parameters.imgfile,&cparameters);\r
-                       }\r
-                       break;\r
-       }\r
-\r
-       fprintf(stdout, "[RESULT] Volume: %d x %d x %d (x %d bpv)\n ", \r
-                        (volume->comps[0].w >> volume->comps[0].factor[0]),\r
-                        (volume->comps[0].h >> volume->comps[0].factor[1]),\r
-                        (volume->comps[0].l >> volume->comps[0].factor[2]),\r
-        volume->comps[0].prec);\r
-\r
-       if(original){\r
-               psnr = calc_PSNR(original,volume);\r
-               ssim = calc_SSIM(original,volume);\r
-               if (psnr < 0.0)\r
-                       fprintf(stdout, "  PSNR: Inf , SSMI %f -- Perfect reconstruction!\n",ssim);\r
-               else\r
-                       fprintf(stdout, "  PSNR: %f , SSIM %f \n",psnr,ssim);\r
-       }\r
-       /* free remaining structures */\r
-       if(dinfo) {\r
-               opj_destroy_decompress(dinfo);\r
-       }\r
-\r
-       /* free volume data structure */\r
-       opj_volume_destroy(volume);\r
-   \r
-       return 0;\r
-}\r
-\r
+/*
+ * Copyright (c) 2001-2003, David Janssens
+ * Copyright (c) 2002-2003, Yannick Verschueren
+ * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
+ * Copyright (c) 2005, Herve Drolon, FreeImage Team
+ * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
+ * Copyright (c) 2006, M�nica D�ez Garc�a, Image Processing Laboratory, University of Valladolid, Spain
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include "opj_config.h"
+#include "openjp3d.h"
+#include "opj_getopt.h"
+#include "convert.h"
+
+#ifdef _WIN32
+#include <windows.h>
+#else
+#define stricmp strcasecmp
+#define strnicmp strncasecmp
+#endif /* _WIN32 */
+
+/* ----------------------------------------------------------------------- */
+static double calc_PSNR(opj_volume_t *original, opj_volume_t *decoded)
+{
+    int max, i, k, compno = 0, size;
+    double sum, total = 0;
+    int global = 1;
+
+    max = (original->comps[compno].prec <= 8) ? 255 : (1 <<
+            original->comps[compno].prec) - 1;
+    if (global) {
+        size = (original->x1 - original->x0) * (original->y1 - original->y0) *
+               (original->z1 - original->z0);
+
+        for (compno = 0; compno < original->numcomps; compno++) {
+            for (sum = 0, i = 0; i < size; ++i) {
+                if ((decoded->comps[compno].data[i] < 0) ||
+                        (decoded->comps[compno].data[i] > max)) {
+                    fprintf(stdout, "[WARNING] Data out of range during PSNR computing...\n");
+                } else {
+                    sum += (original->comps[compno].data[i] - decoded->comps[compno].data[i]) *
+                           (original->comps[compno].data[i] - decoded->comps[compno].data[i]);
+                }
+            }
+        }
+        sum /= size;
+        total = ((sum == 0.0) ? 0.0 : 10 * log10(max * max / sum));
+    } else {
+        size = (original->x1 - original->x0) * (original->y1 - original->y0);
+
+        for (k = 0; k < original->z1 - original->z0; k++) {
+            int offset = k * size;
+            for (sum = 0, compno = 0; compno < original->numcomps; compno++) {
+                for (i = 0; i < size; ++i) {
+                    if ((decoded->comps[compno].data[i + offset] < 0) ||
+                            (decoded->comps[compno].data[i + offset] > max)) {
+                        fprintf(stdout, "[WARNING] Data out of range during PSNR computing...\n");
+                    } else {
+                        sum += (original->comps[compno].data[i + offset] - decoded->comps[compno].data[i
+                                + offset]) * (original->comps[compno].data[i + offset] -
+                                              decoded->comps[compno].data[i + offset]);
+                    }
+                }
+            }
+            sum /= size;
+            total = total + ((sum == 0.0) ? 0.0 : 10 * log10(max * max / sum));
+        }
+
+    }
+    if (total == 0) { /* perfect reconstruction, PSNR should return infinity */
+        return -1.0;
+    }
+
+    return total;
+    /*return 20 * log10((max - 1) / sqrt(sum));*/
+}
+
+static double calc_SSIM(opj_volume_t *original, opj_volume_t *decoded)
+{
+    int max, i, compno = 0, size, sizeM;
+    double sum;
+    double mux = 0.0, muy = 0.0, sigmax = 0.0, sigmay = 0.0,
+           sigmaxy = 0.0/*, structx = 0.0, structy = 0.0*/;
+    double lcomp, ccomp, scomp;
+    double C1, C2, C3;
+
+    max = (original->comps[compno].prec <= 8) ? 255 : (1 <<
+            original->comps[compno].prec) - 1;
+    size = (original->x1 - original->x0) * (original->y1 - original->y0) *
+           (original->z1 - original->z0);
+
+    /*MSSIM*/
+
+    /*  sizeM = size / (original->z1 - original->z0);*/
+
+    sizeM = size;
+    for (sum = 0, i = 0; i < sizeM; ++i) {
+        /* First, the luminance of each signal is compared.*/
+        mux += original->comps[compno].data[i];
+        muy += decoded->comps[compno].data[i];
+    }
+    mux /= sizeM;
+    muy /= sizeM;
+
+    /*We use the standard deviation (the square root of variance) as an estimate of the signal contrast.*/
+    for (sum = 0, i = 0; i < sizeM; ++i) {
+        /* First, the luminance of each signal is compared.*/
+        sigmax += (original->comps[compno].data[i] - mux) *
+                  (original->comps[compno].data[i] - mux);
+        sigmay += (decoded->comps[compno].data[i] - muy) *
+                  (decoded->comps[compno].data[i] - muy);
+        sigmaxy += (original->comps[compno].data[i] - mux) *
+                   (decoded->comps[compno].data[i] - muy);
+    }
+    sigmax /= sizeM - 1;
+    sigmay /= sizeM - 1;
+    sigmaxy /= sizeM - 1;
+
+    sigmax = sqrt(sigmax);
+    sigmay = sqrt(sigmay);
+    sigmaxy = sqrt(sigmaxy);
+
+    /*Third, the signal is normalized (divided) by its own standard deviation, */
+    /*so that the two signals being compared have unit standard deviation.*/
+
+    /*Luminance comparison*/
+    C1 = (0.01 * max) * (0.01 * max);
+    lcomp = ((2 * mux * muy) + C1) / ((mux * mux) + (muy * mux) + C1);
+    /*Constrast comparison*/
+    C2 = (0.03 * max) * (0.03 * max);
+    ccomp = ((2 * sigmax * sigmay) + C2) / ((sigmax * sigmax) +
+                                            (sigmay * sigmay) + C2);
+    /*Structure comparison*/
+    C3 = C2 / 2;
+    scomp = (sigmaxy + C3) / (sigmax * sigmay + C3);
+    /*Similarity measure*/
+
+    sum = lcomp * ccomp * scomp;
+    return sum;
+}
+
+void decode_help_display()
+{
+    fprintf(stdout, "HELP\n----\n\n");
+    fprintf(stdout, "- the -h option displays this help information on screen\n\n");
+
+    fprintf(stdout, "List of parameters for the JPEG 2000 encoder:\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, " Required arguments \n");
+    fprintf(stdout, " ---------------------------- \n");
+    fprintf(stdout, "  -i <compressed file> ( *.jp3d, *.j3d )\n");
+    fprintf(stdout,
+            "    Currently accepts J3D-files. The file type is identified based on its suffix.\n");
+    fprintf(stdout, "  -o <decompressed file> ( *.pgx, *.bin )\n");
+    fprintf(stdout,
+            "    Currently accepts PGX-files and BIN-files. Binary data is written to the file (not ascii). \n");
+    fprintf(stdout,
+            "    If a PGX filename is given, there will be as many output files as slices; \n");
+    fprintf(stdout,
+            "    an indice starting from 0 will then be appended to the output filename,\n");
+    fprintf(stdout, "    just before the \"pgx\" extension.\n");
+    fprintf(stdout, "  -m <characteristics file> ( *.img ) \n");
+    fprintf(stdout,
+            "    Required only for BIN-files. Ascii data of volume characteristics is written. \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, " Optional  \n");
+    fprintf(stdout, " ---------------------------- \n");
+    fprintf(stdout, "  -h \n ");
+    fprintf(stdout, "    Display the help information\n");
+    fprintf(stdout, "  -r <RFx,RFy,RFz>\n");
+    fprintf(stdout,
+            "    Set the number of highest resolution levels to be discarded on each dimension. \n");
+    fprintf(stdout,
+            "    The volume resolution is effectively divided by 2 to the power of the\n");
+    fprintf(stdout,
+            "    number of discarded levels. The reduce factor is limited by the\n");
+    fprintf(stdout,
+            "    smallest total number of decomposition levels among tiles.\n");
+    fprintf(stdout, "  -l <number of quality layers to decode>\n");
+    fprintf(stdout,
+            "    Set the maximum number of quality layers to decode. If there are\n");
+    fprintf(stdout,
+            "    less quality layers than the specified number, all the quality layers\n");
+    fprintf(stdout, "    are decoded. \n");
+    fprintf(stdout, "  -O original-file \n");
+    fprintf(stdout,
+            "    This option offers the possibility to compute some quality results  \n");
+    fprintf(stdout,
+            "    for the decompressed volume, like the PSNR value achieved or the global SSIM value.  \n");
+    fprintf(stdout,
+            "    Needs the original file in order to compare with the new one.\n");
+    fprintf(stdout,
+            "    NOTE: Only valid when -r option is 0,0,0 (both original and decompressed volumes have same resolutions) \n");
+    fprintf(stdout,
+            "    NOTE: If original file is .BIN file, the volume characteristics file shall be defined with the -m option. \n");
+    fprintf(stdout, "    (i.e. -O original-BIN-file -m original-IMG-file) \n");
+    fprintf(stdout, "  -BE \n");
+    fprintf(stdout,
+            "    Define that the recovered volume data will be saved with big endian byte order.\n");
+    fprintf(stdout, "    By default, little endian byte order is used.\n");
+    fprintf(stdout, "\n");
+}
+
+/* -------------------------------------------------------------------------- */
+
+int get_file_format(char *filename)
+{
+    int i;
+    static const char *extension[] = {"pgx", "bin", "j3d", "jp3d", "j2k", "img"};
+    static const int format[] = { PGX_DFMT, BIN_DFMT, J3D_CFMT, J3D_CFMT, J2K_CFMT, IMG_DFMT};
+    char * ext = strrchr(filename, '.');
+    if (ext) {
+        ext++;
+        for (i = 0; i < sizeof(format) / sizeof(format[0]); i++) {
+            if (strnicmp(ext, extension[i], 3) == 0) {
+                return format[i];
+            }
+        }
+    }
+
+    return -1;
+}
+
+/* -------------------------------------------------------------------------- */
+
+int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *parameters)
+{
+    /* parse the command line */
+
+    while (1) {
+        int c = opj_getopt(argc, argv, "i:o:O:r:l:B:m:h");
+        if (c == -1) {
+            break;
+        }
+        switch (c) {
+        case 'i': {         /* input file */
+            char *infile = opj_optarg;
+            parameters->decod_format = get_file_format(infile);
+            switch (parameters->decod_format) {
+            case J3D_CFMT:
+            case J2K_CFMT:
+                break;
+            default:
+                fprintf(stdout, "[ERROR] Unknown format for infile %s [only *.j3d]!! \n",
+                        infile);
+                return 1;
+                break;
+            }
+            strncpy(parameters->infile, infile, MAX_PATH);
+            fprintf(stdout, "[INFO] Infile: %s \n", parameters->infile);
+
+        }
+        break;
+
+        case 'm': {         /* img file */
+            char *imgfile = opj_optarg;
+            int imgformat = get_file_format(imgfile);
+            switch (imgformat) {
+            case IMG_DFMT:
+                break;
+            default:
+                fprintf(stdout,
+                        "[ERROR] Unrecognized format for imgfile : %s [accept only *.img] !!\n\n",
+                        imgfile);
+                return 1;
+                break;
+            }
+            strncpy(parameters->imgfile, imgfile, MAX_PATH);
+            fprintf(stdout, "[INFO] Imgfile: %s Format: %d\n", parameters->imgfile,
+                    imgformat);
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'o': {         /* output file */
+            char *outfile = opj_optarg;
+            parameters->cod_format = get_file_format(outfile);
+            switch (parameters->cod_format) {
+            case PGX_DFMT:
+            case BIN_DFMT:
+                break;
+            default:
+                fprintf(stdout,
+                        "[ERROR] Unrecognized format for outfile : %s [accept only *.pgx or *.bin] !!\n\n",
+                        outfile);
+                return 1;
+                break;
+            }
+            strncpy(parameters->outfile, outfile, MAX_PATH);
+            fprintf(stdout, "[INFO] Outfile: %s \n", parameters->outfile);
+
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'O': {     /* Original image for PSNR computing */
+            char *original = opj_optarg;
+            parameters->orig_format = get_file_format(original);
+            switch (parameters->orig_format) {
+            case PGX_DFMT:
+            case BIN_DFMT:
+                break;
+            default:
+                fprintf(stdout,
+                        "[ERROR] Unrecognized format for original file : %s [accept only *.pgx or *.bin] !!\n\n",
+                        original);
+                return 1;
+                break;
+            }
+            strncpy(parameters->original, original, MAX_PATH);
+            fprintf(stdout, "[INFO] Original file: %s \n", parameters->original);
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'r': {     /* reduce option */
+            /*sscanf(opj_optarg, "%d, %d, %d", &parameters->cp_reduce[0], &parameters->cp_reduce[1], &parameters->cp_reduce[2]);*/
+            int aux;
+            aux = sscanf(opj_optarg, "%d,%d,%d", &parameters->cp_reduce[0],
+                         &parameters->cp_reduce[1], &parameters->cp_reduce[2]);
+            if (aux == 2) {
+                parameters->cp_reduce[2] = 0;
+            } else if (aux == 1) {
+                parameters->cp_reduce[1] = parameters->cp_reduce[0];
+                parameters->cp_reduce[2] = 0;
+            } else if (aux == 0) {
+                parameters->cp_reduce[0] = 0;
+                parameters->cp_reduce[1] = 0;
+                parameters->cp_reduce[2] = 0;
+            }
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'l': {     /* layering option */
+            sscanf(opj_optarg, "%d", &parameters->cp_layer);
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'B': {     /* BIGENDIAN vs. LITTLEENDIAN */
+            parameters->bigendian = 1;
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'L': {     /* BIGENDIAN vs. LITTLEENDIAN */
+            parameters->decod_format = LSE_CFMT;
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'h': {         /* display an help description */
+            decode_help_display();
+            return 1;
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        default:
+            fprintf(stdout, "[WARNING] This option is not valid \"-%c %s\"\n", c,
+                    opj_optarg);
+            break;
+        }
+    }
+
+    /* check for possible errors */
+
+    if ((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
+        fprintf(stdout,
+                "[ERROR] At least one required argument is missing\n Check jp3d_to_volume -help for usage information\n");
+        return 1;
+    }
+
+    return 0;
+}
+
+/* -------------------------------------------------------------------------- */
+
+/**
+sample error callback expecting a FILE* client object
+*/
+void error_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[ERROR] %s", msg);
+}
+/**
+sample warning callback expecting a FILE* client object
+*/
+void warning_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[WARNING] %s", msg);
+}
+/**
+sample debug callback expecting no client object
+*/
+void info_callback(const char *msg, void *client_data)
+{
+    fprintf(stdout, "[INFO] %s", msg);
+}
+
+/* -------------------------------------------------------------------------- */
+
+int main(int argc, char **argv)
+{
+
+    opj_dparameters_t parameters;   /* decompression parameters */
+    opj_event_mgr_t event_mgr;      /* event manager */
+    opj_volume_t *volume = NULL;
+
+    opj_volume_t *original = NULL;
+    opj_cparameters_t cparameters;  /* original parameters */
+
+    FILE *fsrc = NULL;
+    unsigned char *src = NULL;
+    int file_length;
+    int decodeok;
+    double psnr, ssim;
+
+    opj_dinfo_t* dinfo = NULL;  /* handle to a decompressor */
+    opj_cio_t *cio = NULL;
+
+    /* configure the event callbacks (not required) */
+    memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
+    event_mgr.error_handler = error_callback;
+    event_mgr.warning_handler = warning_callback;
+    event_mgr.info_handler = info_callback;
+
+    /* set decoding parameters to default values */
+    opj_set_default_decoder_parameters(&parameters);
+
+    /* parse input and get user decoding parameters */
+    strcpy(parameters.original, "NULL");
+    strcpy(parameters.imgfile, "NULL");
+    if (parse_cmdline_decoder(argc, argv, &parameters) == 1) {
+        return 0;
+    }
+
+    /* read the input file and put it in memory */
+    /* ---------------------------------------- */
+    fprintf(stdout, "[INFO] Loading %s file \n",
+            parameters.decod_format == J3D_CFMT ? ".jp3d" : ".j2k");
+    fsrc = fopen(parameters.infile, "rb");
+    if (!fsrc) {
+        fprintf(stdout, "[ERROR] Failed to open %s for reading\n", parameters.infile);
+        return 1;
+    }
+    fseek(fsrc, 0, SEEK_END);
+    file_length = ftell(fsrc);
+    fseek(fsrc, 0, SEEK_SET);
+    src = (unsigned char *) malloc(file_length);
+    fread(src, 1, file_length, fsrc);
+    fclose(fsrc);
+
+    /* decode the code-stream */
+    /* ---------------------- */
+    if (parameters.decod_format == J3D_CFMT ||
+            parameters.decod_format == J2K_CFMT) {
+        /* get a JP3D or J2K decoder handle */
+        if (parameters.decod_format == J3D_CFMT) {
+            dinfo = opj_create_decompress(CODEC_J3D);
+        } else if (parameters.decod_format == J2K_CFMT) {
+            dinfo = opj_create_decompress(CODEC_J2K);
+        }
+
+        /* catch events using our callbacks and give a local context */
+        opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
+
+        /* setup the decoder decoding parameters using user parameters */
+        opj_setup_decoder(dinfo, &parameters);
+
+        /* open a byte stream */
+        cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
+
+        /* decode the stream and fill the volume structure */
+        volume = opj_decode(dinfo, cio);
+        if (!volume) {
+            fprintf(stdout, "[ERROR] jp3d_to_volume: failed to decode volume!\n");
+            opj_destroy_decompress(dinfo);
+            opj_cio_close(cio);
+            return 1;
+        }
+
+        /* close the byte stream */
+        opj_cio_close(cio);
+    }
+
+    /* free the memory containing the code-stream */
+    free(src);
+    src = NULL;
+
+    /* create output volume */
+    /* ------------------- */
+
+    switch (parameters.cod_format) {
+    case PGX_DFMT:          /* PGX */
+        decodeok = volumetopgx(volume, parameters.outfile);
+        if (decodeok) {
+            fprintf(stdout, "[ERROR] Unable to write decoded volume into pgx files\n");
+        }
+        break;
+
+    case BIN_DFMT:          /* BMP */
+        decodeok = volumetobin(volume, parameters.outfile);
+        if (decodeok) {
+            fprintf(stdout, "[ERROR] Unable to write decoded volume into pgx files\n");
+        }
+        break;
+    }
+    switch (parameters.orig_format) {
+    case PGX_DFMT:          /* PGX */
+        if (strcmp("NULL", parameters.original) != 0) {
+            fprintf(stdout, "Loading original file %s \n", parameters.original);
+            cparameters.subsampling_dx = 1;
+            cparameters.subsampling_dy = 1;
+            cparameters.subsampling_dz = 1;
+            cparameters.volume_offset_x0 = 0;
+            cparameters.volume_offset_y0 = 0;
+            cparameters.volume_offset_z0 = 0;
+            original = pgxtovolume(parameters.original, &cparameters);
+        }
+        break;
+
+    case BIN_DFMT:          /* BMP */
+        if (strcmp("NULL", parameters.original) != 0 &&
+                strcmp("NULL", parameters.imgfile) != 0) {
+            fprintf(stdout, "Loading original file %s %s\n", parameters.original,
+                    parameters.imgfile);
+            cparameters.subsampling_dx = 1;
+            cparameters.subsampling_dy = 1;
+            cparameters.subsampling_dz = 1;
+            cparameters.volume_offset_x0 = 0;
+            cparameters.volume_offset_y0 = 0;
+            cparameters.volume_offset_z0 = 0;
+            original = bintovolume(parameters.original, parameters.imgfile, &cparameters);
+        }
+        break;
+    }
+
+    fprintf(stdout, "[RESULT] Volume: %d x %d x %d (x %d bpv)\n ",
+            (volume->comps[0].w >> volume->comps[0].factor[0]),
+            (volume->comps[0].h >> volume->comps[0].factor[1]),
+            (volume->comps[0].l >> volume->comps[0].factor[2]),
+            volume->comps[0].prec);
+
+    if (original) {
+        psnr = calc_PSNR(original, volume);
+        ssim = calc_SSIM(original, volume);
+        if (psnr < 0.0) {
+            fprintf(stdout, "  PSNR: Inf , SSMI %f -- Perfect reconstruction!\n", ssim);
+        } else {
+            fprintf(stdout, "  PSNR: %f , SSIM %f \n", psnr, ssim);
+        }
+    }
+    /* free remaining structures */
+    if (dinfo) {
+        opj_destroy_decompress(dinfo);
+    }
+
+    /* free volume data structure */
+    opj_volume_destroy(volume);
+
+    return 0;
+}
+
index f0b7fc13bbcdbf69a5fd94041ecca485a4860e0e..8a42b9821d5a642f302df54741d7562ee2ebcad6 100644 (file)
@@ -42,7 +42,7 @@
  *     quit\n
  *  Be sure all image viewers are closed.\n
  *  Cache file in JPT format is stored in the working directly before it quites.
- *  
+ *
  */
 
 #include <stdio.h>
 WSADATA initialisation_win32;
 #endif
 
-int main(int argc, char *argv[]){
-  
-  dec_server_record_t *server_record;
-  client_t client;
-  int port = 50000;
-  int erreur;
-  (void)erreur;
+int main(int argc, char *argv[])
+{
+
+    dec_server_record_t *server_record;
+    client_t client;
+    int port = 50000;
+    int erreur;
+    (void)erreur;
 
-  if( argc > 1)
-    port = atoi( argv[1]);
+    if (argc > 1) {
+        port = atoi(argv[1]);
+    }
 
 #ifdef _WIN32
-  erreur = WSAStartup(MAKEWORD(2,2),&initialisation_win32);
-  if( erreur!=0)
-    fprintf( stderr, "Erreur initialisation Winsock error : %d %d\n",erreur,WSAGetLastError());
-  else
-    printf( "Initialisation Winsock\n");
+    erreur = WSAStartup(MAKEWORD(2, 2), &initialisation_win32);
+    if (erreur != 0) {
+        fprintf(stderr, "Erreur initialisation Winsock error : %d %d\n", erreur,
+                WSAGetLastError());
+    } else {
+        printf("Initialisation Winsock\n");
+    }
 #endif /*_WIN32*/
-  
-  server_record = init_dec_server( port);
-  
-  while(( client = accept_connection( server_record)) != -1 )
-    if(!handle_clientreq( client, server_record))
-      break;
-  
-  terminate_dec_server( &server_record);
+
+    server_record = init_dec_server(port);
+
+    while ((client = accept_connection(server_record)) != -1)
+        if (!handle_clientreq(client, server_record)) {
+            break;
+        }
+
+    terminate_dec_server(&server_record);
 
 #ifdef _WIN32
-  if( WSACleanup() != 0){
-    printf("\nError in WSACleanup : %d %d",erreur,WSAGetLastError());
-  }else{
-    printf("\nWSACleanup OK\n");
-  }
+    if (WSACleanup() != 0) {
+        printf("\nError in WSACleanup : %d %d", erreur, WSAGetLastError());
+    } else {
+        printf("\nWSACleanup OK\n");
+    }
 #endif
 
-  return 0;
+    return 0;
 }
index 626fc5d1c7c2395c37a2c85c2a595ff4904f6b05..22fdd05b0c231d925602a7b5104b2acd0e3e7c15 100644 (file)
@@ -36,7 +36,7 @@
  *   -# Input/output image file in JP2 format, this JP2 file is being modified
  *   -# Input XML file with metadata contents\n
  *   % ./addXMLinJP2 image.jp2 metadata.xml\n
- *  
+ *
  *  Currently, this program does not parse XML file, and the XML file contents is directly embedded as a XML Box.\n
  *  The following is an example of XML file contents specifying Region Of Interests with target names.\n
  *  <xmlbox>\n
@@ -60,7 +60,7 @@
  * @param[in] filename file name string
  * @return             file descriptor
  */
-FILE * open_jp2file( const char filename[]);
+FILE * open_jp2file(const char filename[]);
 
 
 /**
@@ -70,115 +70,118 @@ FILE * open_jp2file( const char filename[]);
  * @param[out] fsize    file byte size
  * @return              pointer to the xml file content buffer
  */
-char * read_xmlfile( const char filename[], long *fsize);
+char * read_xmlfile(const char filename[], long *fsize);
 
 int main(int argc, char *argv[])
 {
-  FILE *fp;
-  char *xmldata, type[]="xml ";
-  long fsize, boxsize;
-
-  if( argc<3){
-    fprintf( stderr, "USAGE: %s modifing.jp2 adding.xml\n", argv[0] );
-    return -1;
-  }
-
-  fp = open_jp2file( argv[1]);
-  if( !fp)
-    return -1;
-  
-  xmldata = read_xmlfile( argv[2], &fsize);
-  if( fsize < 0 ) return -1;
-  boxsize = fsize + 8;
-
-  fputc( (boxsize>>24)&0xff, fp);
-  fputc( (boxsize>>16)&0xff, fp);
-  fputc( (boxsize>>8)&0xff, fp);
-  fputc( boxsize&0xff, fp);
-  fwrite( type, 4, 1, fp);
-  fwrite( xmldata, (size_t)fsize, 1, fp);
-  
-  free( xmldata);
-  fclose(fp);
-  
-  return 0;
+    FILE *fp;
+    char *xmldata, type[] = "xml ";
+    long fsize, boxsize;
+
+    if (argc < 3) {
+        fprintf(stderr, "USAGE: %s modifing.jp2 adding.xml\n", argv[0]);
+        return -1;
+    }
+
+    fp = open_jp2file(argv[1]);
+    if (!fp) {
+        return -1;
+    }
+
+    xmldata = read_xmlfile(argv[2], &fsize);
+    if (fsize < 0) {
+        return -1;
+    }
+    boxsize = fsize + 8;
+
+    fputc((boxsize >> 24) & 0xff, fp);
+    fputc((boxsize >> 16) & 0xff, fp);
+    fputc((boxsize >> 8) & 0xff, fp);
+    fputc(boxsize & 0xff, fp);
+    fwrite(type, 4, 1, fp);
+    fwrite(xmldata, (size_t)fsize, 1, fp);
+
+    free(xmldata);
+    fclose(fp);
+
+    return 0;
 }
 
-FILE * open_jp2file( const char filename[])
+FILE * open_jp2file(const char filename[])
 {
-  FILE *fp;
-  char *data;
-  
-  if( !(fp = fopen( filename, "a+b"))){
-    fprintf( stderr, "Original JP2 %s not found\n", filename);
-    return NULL;
-  }
-  /* Check resource is a JP family file. */
-  if( fseek( fp, 0, SEEK_SET)==-1){
-    fclose(fp);
-    fprintf( stderr, "Original JP2 %s broken (fseek error)\n", filename);
-    return NULL;
-  }
-  
-  data = (char *)malloc( 12); /* size of header */
-  if( fread( data, 12, 1, fp) != 1){
-    free( data);
-    fclose(fp);
-    fprintf( stderr, "Original JP2 %s broken (read error)\n", filename);
-    return NULL;
-  }
-    
-  if( *data || *(data + 1) || *(data + 2) ||
-      *(data + 3) != 12 || strncmp (data + 4, "jP  \r\n\x87\n", 8)){
-    free( data);
-    fclose(fp);
-    fprintf( stderr, "No JPEG 2000 Signature box in target %s\n", filename);
-    return NULL;
-  }
-  free( data);
-  return fp;
+    FILE *fp;
+    char *data;
+
+    if (!(fp = fopen(filename, "a+b"))) {
+        fprintf(stderr, "Original JP2 %s not found\n", filename);
+        return NULL;
+    }
+    /* Check resource is a JP family file. */
+    if (fseek(fp, 0, SEEK_SET) == -1) {
+        fclose(fp);
+        fprintf(stderr, "Original JP2 %s broken (fseek error)\n", filename);
+        return NULL;
+    }
+
+    data = (char *)malloc(12);  /* size of header */
+    if (fread(data, 12, 1, fp) != 1) {
+        free(data);
+        fclose(fp);
+        fprintf(stderr, "Original JP2 %s broken (read error)\n", filename);
+        return NULL;
+    }
+
+    if (*data || *(data + 1) || *(data + 2) ||
+            *(data + 3) != 12 || strncmp(data + 4, "jP  \r\n\x87\n", 8)) {
+        free(data);
+        fclose(fp);
+        fprintf(stderr, "No JPEG 2000 Signature box in target %s\n", filename);
+        return NULL;
+    }
+    free(data);
+    return fp;
 }
 
-char * read_xmlfile( const char filename[], long *fsize)
+char * read_xmlfile(const char filename[], long *fsize)
 {
-  FILE *fp;
-  char *data;
-  
-  /*  fprintf( stderr, "open %s\n", filename);*/
-  if(!(fp = fopen( filename, "r"))){
-    fprintf( stderr, "XML file %s not found\n", filename);
-    return NULL;
-  }
-
-  if( fseek( fp, 0, SEEK_END) == -1){
-    fprintf( stderr, "XML file %s broken (seek error)\n", filename);
-    fclose( fp);
-    return NULL;
-  }
-    
-  if( (*fsize = ftell( fp)) == -1){
-    fprintf( stderr, "XML file %s broken (seek error)\n", filename);
-    fclose( fp);
-    return NULL;
-  }
-  assert( *fsize >= 0 );
-
-  if( fseek( fp, 0, SEEK_SET) == -1){
-    fprintf( stderr, "XML file %s broken (seek error)\n", filename);
-    fclose( fp);
-    return NULL;
-  }
-
-  data = (char *)malloc( (size_t)*fsize);
-  
-  if( fread( data, (size_t)*fsize, 1, fp) != 1){
-    fprintf( stderr, "XML file %s broken (read error)\n", filename);
-    free( data);
-    fclose(fp);
-    return NULL;
-  }
+    FILE *fp;
+    char *data;
+
+    /*  fprintf( stderr, "open %s\n", filename);*/
+    if (!(fp = fopen(filename, "r"))) {
+        fprintf(stderr, "XML file %s not found\n", filename);
+        return NULL;
+    }
+
+    if (fseek(fp, 0, SEEK_END) == -1) {
+        fprintf(stderr, "XML file %s broken (seek error)\n", filename);
+        fclose(fp);
+        return NULL;
+    }
+
+    if ((*fsize = ftell(fp)) == -1) {
+        fprintf(stderr, "XML file %s broken (seek error)\n", filename);
+        fclose(fp);
+        return NULL;
+    }
+    assert(*fsize >= 0);
+
+    if (fseek(fp, 0, SEEK_SET) == -1) {
+        fprintf(stderr, "XML file %s broken (seek error)\n", filename);
+        fclose(fp);
+        return NULL;
+    }
+
+    data = (char *)malloc((size_t) * fsize);
+
+    if (fread(data, (size_t)*fsize, 1, fp) != 1) {
+        fprintf(stderr, "XML file %s broken (read error)\n", filename);
+        free(data);
+        fclose(fp);
+        return NULL;
+    }
 
-  fclose( fp);
+    fclose(fp);
 
-  return data;
+    return data;
 }
index 1b4fc1c6e84be7e323fc4e0367ab97129a32090c..f86ec4a633ce882f9cff52c9223d511002ca1f5e 100644 (file)
 int
 main(int argc, char *argv[])
 {
-  int fd;
-  index_t *jp2idx;
-  if( argc < 2 ) return 1;
-  
-  if( (fd = open( argv[1], O_RDONLY)) == -1){
-    fprintf( stderr, "Error: Target %s not found\n", argv[1]);
-    return -1;
-  }
+    int fd;
+    index_t *jp2idx;
+    if (argc < 2) {
+        return 1;
+    }
 
-  if( !(jp2idx = get_index_from_JP2file( fd))){
-    fprintf( stderr, "JP2 file broken\n");
-    return -1;
-  }
-  
-  output_index( jp2idx);
-  destroy_index( &jp2idx);
-  close(fd);
+    if ((fd = open(argv[1], O_RDONLY)) == -1) {
+        fprintf(stderr, "Error: Target %s not found\n", argv[1]);
+        return -1;
+    }
 
-  return 0;
+    if (!(jp2idx = get_index_from_JP2file(fd))) {
+        fprintf(stderr, "JP2 file broken\n");
+        return -1;
+    }
+
+    output_index(jp2idx);
+    destroy_index(&jp2idx);
+    close(fd);
+
+    return 0;
 } /* main */
index 19570af564713ebb0738b2cec4480151d4452d1f..6cd2604d6fdc81177773fc47f6fa423bfb12a939 100644 (file)
  */
 static int jpip_to_jp2(char *argv[])
 {
-  jpip_dec_param_t *dec;
-    
-  dec = init_jpipdecoder( OPJ_TRUE);
-  
-  if(!( fread_jpip( argv[1], dec)))
-    return 1;
-  
-  decode_jpip( dec);
-  
-  if(!(fwrite_jp2k( argv[2], dec)))
-    return 1;
+    jpip_dec_param_t *dec;
+
+    dec = init_jpipdecoder(OPJ_TRUE);
 
-  /* output_log( OPJ_TRUE, OPJ_FALSE, OPJ_TRUE, dec); */
+    if (!(fread_jpip(argv[1], dec))) {
+        return 1;
+    }
+
+    decode_jpip(dec);
 
-  destroy_jpipdecoder( &dec);
+    if (!(fwrite_jp2k(argv[2], dec))) {
+        return 1;
+    }
 
-  return 0;
+    /* output_log( OPJ_TRUE, OPJ_FALSE, OPJ_TRUE, dec); */
+
+    destroy_jpipdecoder(&dec);
+
+    return 0;
 }
 
 /*! \file
@@ -76,49 +78,48 @@ static int jpip_to_jp2(char *argv[])
  */
 static int jpip_to_j2k(char *argv[])
 {
-  jpip_dec_param_t *dec;
-  
-  dec = init_jpipdecoder( OPJ_FALSE);
-  
-  if(!( fread_jpip( argv[1], dec)))
-    return 1;
-  
-  decode_jpip( dec);
-  
-  if(!(fwrite_jp2k( argv[2], dec)))
-    return 1;
-  
-  /*  output_log( OPJ_TRUE, OPJ_FALSE, OPJ_FALSE, dec); */
-  
-  destroy_jpipdecoder( &dec);
+    jpip_dec_param_t *dec;
+
+    dec = init_jpipdecoder(OPJ_FALSE);
 
-  return 0;
+    if (!(fread_jpip(argv[1], dec))) {
+        return 1;
+    }
+
+    decode_jpip(dec);
+
+    if (!(fwrite_jp2k(argv[2], dec))) {
+        return 1;
+    }
+
+    /*  output_log( OPJ_TRUE, OPJ_FALSE, OPJ_FALSE, dec); */
+
+    destroy_jpipdecoder(&dec);
+
+    return 0;
 }
 
-int main(int argc,char *argv[])
+int main(int argc, char *argv[])
 {
-  char *ext;
-  if( argc < 3){
-    fprintf( stderr, "Too few arguments:\n");
-    fprintf( stderr, " - input  jpt or jpp file\n");
-    fprintf( stderr, " - output j2k file\n");
-    return 1;
-  }
-  
-  ext = strrchr( argv[2], '.' );
-  if( ext )
-    {
-    /* strcasecmp ? */
-    if( strcmp(ext, ".jp2" ) == 0 )
-      {
-      return jpip_to_jp2(argv);
-      }
-    if( strcmp(ext, ".j2k" ) == 0 )
-      {
-      return jpip_to_j2k(argv);
-      }
+    char *ext;
+    if (argc < 3) {
+        fprintf(stderr, "Too few arguments:\n");
+        fprintf(stderr, " - input  jpt or jpp file\n");
+        fprintf(stderr, " - output j2k file\n");
+        return 1;
     }
 
-  fprintf( stderr, "Invalid file extension for output file: %s\n", argv[2]);
-  return 1;
+    ext = strrchr(argv[2], '.');
+    if (ext) {
+        /* strcasecmp ? */
+        if (strcmp(ext, ".jp2") == 0) {
+            return jpip_to_jp2(argv);
+        }
+        if (strcmp(ext, ".j2k") == 0) {
+            return jpip_to_j2k(argv);
+        }
+    }
+
+    fprintf(stderr, "Invalid file extension for output file: %s\n", argv[2]);
+    return 1;
 }
index ec91e9c2296137c4bb25275460f9c4e90c01e77b..ad0b16a9d19a71d1c2a301a9dccbb29ad92a4c07 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
  * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara 
+ * Copyright (c) 2010-2011, Kaori Hagihara
  * Copyright (c) 2011,      Lucian Corlaciu, GSoC
  * All rights reserved.
  *
@@ -41,7 +41,7 @@
  *
  *  Note: JP2 files are stored in the working directory of opj_server\n
  *  Check README for the JP2 Encoding\n
- *  
+ *
  *  We tested this software with a virtual server running on the same Linux machine as the clients.
  */
 
@@ -60,69 +60,72 @@ WSADATA initialisation_win32;
 #endif /*_WIN32*/
 
 int main(void)
-{ 
-  server_record_t *server_record;
+{
+    server_record_t *server_record;
 #ifdef SERVER
-  char *query_string;
+    char *query_string;
 #endif
 
 #ifdef _WIN32
-  int erreur = WSAStartup(MAKEWORD(2,2),&initialisation_win32);
-  if( erreur!=0)
-    fprintf( stderr, "Erreur initialisation Winsock error : %d %d\n",erreur,WSAGetLastError());
-  else
-    fprintf( stderr, "Initialisation Winsock\n");
+    int erreur = WSAStartup(MAKEWORD(2, 2), &initialisation_win32);
+    if (erreur != 0) {
+        fprintf(stderr, "Erreur initialisation Winsock error : %d %d\n", erreur,
+                WSAGetLastError());
+    } else {
+        fprintf(stderr, "Initialisation Winsock\n");
+    }
 #endif /*_WIN32*/
 
-  server_record = init_JPIPserver( 60000, 0);
+    server_record = init_JPIPserver(60000, 0);
 
 #ifdef SERVER
-  while(FCGI_Accept() >= 0)
+    while (FCGI_Accept() >= 0)
 #else
 
-  char query_string[128];
-  while( fgets( query_string, 128, stdin) && query_string[0]!='\n')
+    char query_string[128];
+    while (fgets(query_string, 128, stdin) && query_string[0] != '\n')
 #endif
     {
-      QR_t *qr;
-      OPJ_BOOL parse_status;
+        QR_t *qr;
+        OPJ_BOOL parse_status;
 
-#ifdef SERVER     
-      query_string = getenv("QUERY_STRING");    
+#ifdef SERVER
+        query_string = getenv("QUERY_STRING");
 #endif /*SERVER*/
 
-      if( strcmp( query_string, QUIT_SIGNAL) == 0)
-       break;
-      
-      qr = parse_querystring( query_string);
-      
-      parse_status = process_JPIPrequest( server_record, qr);
-      
+        if (strcmp(query_string, QUIT_SIGNAL) == 0) {
+            break;
+        }
+
+        qr = parse_querystring(query_string);
+
+        parse_status = process_JPIPrequest(server_record, qr);
+
 #ifndef SERVER
-      local_log( OPJ_TRUE, OPJ_TRUE, parse_status, OPJ_FALSE, qr, server_record);
+        local_log(OPJ_TRUE, OPJ_TRUE, parse_status, OPJ_FALSE, qr, server_record);
 #endif
-            
-      if( parse_status)
-       send_responsedata( server_record, qr);
-      else{
-       fprintf( FCGI_stderr, "Error: JPIP request failed\n");
-       fprintf( FCGI_stdout, "\r\n");
-      }
-      
-      end_QRprocess( server_record, &qr);
+
+        if (parse_status) {
+            send_responsedata(server_record, qr);
+        } else {
+            fprintf(FCGI_stderr, "Error: JPIP request failed\n");
+            fprintf(FCGI_stdout, "\r\n");
+        }
+
+        end_QRprocess(server_record, &qr);
     }
-  
-  fprintf( FCGI_stderr, "JPIP server terminated by a client request\n");
 
-  terminate_JPIPserver( &server_record);
+    fprintf(FCGI_stderr, "JPIP server terminated by a client request\n");
+
+    terminate_JPIPserver(&server_record);
 
 #ifdef _WIN32
-  if( WSACleanup() != 0){
-    fprintf( stderr, "\nError in WSACleanup : %d %d",erreur,WSAGetLastError());
-  }else{
-    fprintf( stderr, "\nWSACleanup OK\n");
-  }
+    if (WSACleanup() != 0) {
+        fprintf(stderr, "\nError in WSACleanup : %d %d", erreur, WSAGetLastError());
+    } else {
+        fprintf(stderr, "\nWSACleanup OK\n");
+    }
 #endif
 
-  return 0;
+    return 0;
 }
index 9db7e955cb74447fbce3e00fe3e5fedbea7314e3..245ae28e9218df75837aa8ebbe05c24454fc44bc 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * Copyright (c) 2006-2007, Parvatha Elangovan
  *
  * log2(a)
  */
-static int int_floorlog2(int a) {
-       int l;
-       for (l = 0; a > 1; l++) {
-               a >>= 1;
-       }
-       return l;
+static int int_floorlog2(int a)
+{
+    int l;
+    for (l = 0; a > 1; l++) {
+        a >>= 1;
+    }
+    return l;
 }
 
 /* -->> -->> -->> -->>
@@ -75,8 +76,7 @@ static int int_floorlog2(int a) {
 
 #ifdef INFORMATION_ONLY
 /* TGA header definition. */
-struct tga_header
-{                           
+struct tga_header {
     unsigned char   id_length;              /* Image id field length    */
     unsigned char   colour_map_type;        /* Colour map type          */
     unsigned char   image_type;             /* Image type               */
@@ -98,411 +98,444 @@ struct tga_header
 };
 #endif /* INFORMATION_ONLY */
 
-static unsigned short get_ushort(unsigned short val) {
+static unsigned short get_ushort(unsigned short val)
+{
 
 #ifdef OPJ_BIG_ENDIAN
-       return( ((val & 0xff) << 8) + (val >> 8) );
+    return (((val & 0xff) << 8) + (val >> 8));
 #else
-    return( val );
+    return (val);
 #endif
 
 }
 
 #define TGA_HEADER_SIZE 18
 
-static int tga_readheader(FILE *fp, unsigned int *bits_per_pixel, 
-       unsigned int *width, unsigned int *height, int *flip_image)
+static int tga_readheader(FILE *fp, unsigned int *bits_per_pixel,
+                          unsigned int *width, unsigned int *height, int *flip_image)
 {
-       int palette_size;
-       unsigned char *tga ;
-       unsigned char id_len, cmap_type, image_type;
-       unsigned char pixel_depth, image_desc;
-       unsigned short cmap_index, cmap_len, cmap_entry_size;
-       unsigned short x_origin, y_origin, image_w, image_h;
-
-       if (!bits_per_pixel || !width || !height || !flip_image)
-               return 0;
-       tga = (unsigned char*)malloc(18);
-
-       if ( fread(tga, TGA_HEADER_SIZE, 1, fp) != 1 )
-       {
-               fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-           return 0 ;
-       }
-       id_len = (unsigned char)tga[0];
-       cmap_type = (unsigned char)tga[1];
-       image_type = (unsigned char)tga[2];
-       cmap_index = get_ushort(*(unsigned short*)(&tga[3]));
-       cmap_len = get_ushort(*(unsigned short*)(&tga[5]));
-       cmap_entry_size = (unsigned char)tga[7];
-
-
-       x_origin = get_ushort(*(unsigned short*)(&tga[8]));
-       y_origin = get_ushort(*(unsigned short*)(&tga[10]));
-       image_w = get_ushort(*(unsigned short*)(&tga[12]));
-       image_h = get_ushort(*(unsigned short*)(&tga[14]));
-       pixel_depth = (unsigned char)tga[16];
-       image_desc  = (unsigned char)tga[17];
-
-       free(tga);
-
-       *bits_per_pixel = (unsigned int)pixel_depth;
-       *width  = (unsigned int)image_w;
-       *height = (unsigned int)image_h;
-
-       /* Ignore tga identifier, if present ... */
-       if (id_len)
-       {
-               unsigned char *id = (unsigned char *) malloc(id_len);
-               if ( !fread(id, id_len, 1, fp) )
-               {
-                       fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-                       free(id);
-                   return 0 ;
-               }
-               free(id);  
-       }
-
-       /* Test for compressed formats ... not yet supported ...
-       // Note :-  9 - RLE encoded palettized.
-       //                 10 - RLE encoded RGB. */
-       if (image_type > 8)
-       {
-               fprintf(stderr, "Sorry, compressed tga files are not currently supported.\n");
-               return 0 ;
-       }
-
-       *flip_image = !(image_desc & 32);
-
-       /* Palettized formats are not yet supported, skip over the palette, if present ... */
-       palette_size = cmap_len * (cmap_entry_size/8);
-       
-       if (palette_size>0)
-       {
-               fprintf(stderr, "File contains a palette - not yet supported.");
-               fseek(fp, palette_size, SEEK_CUR);
-       }
-       return 1;
+    int palette_size;
+    unsigned char *tga ;
+    unsigned char id_len, cmap_type, image_type;
+    unsigned char pixel_depth, image_desc;
+    unsigned short cmap_index, cmap_len, cmap_entry_size;
+    unsigned short x_origin, y_origin, image_w, image_h;
+
+    if (!bits_per_pixel || !width || !height || !flip_image) {
+        return 0;
+    }
+    tga = (unsigned char*)malloc(18);
+
+    if (fread(tga, TGA_HEADER_SIZE, 1, fp) != 1) {
+        fprintf(stderr,
+                "\nError: fread return a number of element different from the expected.\n");
+        return 0 ;
+    }
+    id_len = (unsigned char)tga[0];
+    cmap_type = (unsigned char)tga[1];
+    image_type = (unsigned char)tga[2];
+    cmap_index = get_ushort(*(unsigned short*)(&tga[3]));
+    cmap_len = get_ushort(*(unsigned short*)(&tga[5]));
+    cmap_entry_size = (unsigned char)tga[7];
+
+
+    x_origin = get_ushort(*(unsigned short*)(&tga[8]));
+    y_origin = get_ushort(*(unsigned short*)(&tga[10]));
+    image_w = get_ushort(*(unsigned short*)(&tga[12]));
+    image_h = get_ushort(*(unsigned short*)(&tga[14]));
+    pixel_depth = (unsigned char)tga[16];
+    image_desc  = (unsigned char)tga[17];
+
+    free(tga);
+
+    *bits_per_pixel = (unsigned int)pixel_depth;
+    *width  = (unsigned int)image_w;
+    *height = (unsigned int)image_h;
+
+    /* Ignore tga identifier, if present ... */
+    if (id_len) {
+        unsigned char *id = (unsigned char *) malloc(id_len);
+        if (!fread(id, id_len, 1, fp)) {
+            fprintf(stderr,
+                    "\nError: fread return a number of element different from the expected.\n");
+            free(id);
+            return 0 ;
+        }
+        free(id);
+    }
+
+    /* Test for compressed formats ... not yet supported ...
+    // Note :-  9 - RLE encoded palettized.
+    //         10 - RLE encoded RGB. */
+    if (image_type > 8) {
+        fprintf(stderr, "Sorry, compressed tga files are not currently supported.\n");
+        return 0 ;
+    }
+
+    *flip_image = !(image_desc & 32);
+
+    /* Palettized formats are not yet supported, skip over the palette, if present ... */
+    palette_size = cmap_len * (cmap_entry_size / 8);
+
+    if (palette_size > 0) {
+        fprintf(stderr, "File contains a palette - not yet supported.");
+        fseek(fp, palette_size, SEEK_CUR);
+    }
+    return 1;
 }
 
 #ifdef OPJ_BIG_ENDIAN
 
 static inline uint16_t swap16(uint16_t x)
 {
-    return(((x & 0x00ffU) << 8) | ((x & 0xff00U) >> 8));
+    return (((x & 0x00ffU) << 8) | ((x & 0xff00U) >> 8));
 }
 
 #endif
 
-static int tga_writeheader(FILE *fp, int bits_per_pixel, int width, int height, 
-       opj_bool flip_image)
+static int tga_writeheader(FILE *fp, int bits_per_pixel, int width, int height,
+                           opj_bool flip_image)
 {
-       unsigned short image_w, image_h, us0;
-       unsigned char uc0, image_type;
-       unsigned char pixel_depth, image_desc;
+    unsigned short image_w, image_h, us0;
+    unsigned char uc0, image_type;
+    unsigned char pixel_depth, image_desc;
 
-       if (!bits_per_pixel || !width || !height)
-               return 0;
+    if (!bits_per_pixel || !width || !height) {
+        return 0;
+    }
 
-       pixel_depth = 0;
+    pixel_depth = 0;
 
-       if ( bits_per_pixel < 256 )
-               pixel_depth = (unsigned char)bits_per_pixel;
-       else{
-               fprintf(stderr,"ERROR: Wrong bits per pixel inside tga_header");
-               return 0;
-       }
-       uc0 = 0;
+    if (bits_per_pixel < 256) {
+        pixel_depth = (unsigned char)bits_per_pixel;
+    } else {
+        fprintf(stderr, "ERROR: Wrong bits per pixel inside tga_header");
+        return 0;
+    }
+    uc0 = 0;
 
-       if(fwrite(&uc0, 1, 1, fp) != 1) goto fails; /* id_length */
-       if(fwrite(&uc0, 1, 1, fp) != 1) goto fails; /* colour_map_type */
+    if (fwrite(&uc0, 1, 1, fp) != 1) {
+        goto fails;    /* id_length */
+    }
+    if (fwrite(&uc0, 1, 1, fp) != 1) {
+        goto fails;    /* colour_map_type */
+    }
 
-       image_type = 2; /* Uncompressed. */
-       if(fwrite(&image_type, 1, 1, fp) != 1) goto fails;
+    image_type = 2; /* Uncompressed. */
+    if (fwrite(&image_type, 1, 1, fp) != 1) {
+        goto fails;
+    }
 
-       us0 = 0;
-       if(fwrite(&us0, 2, 1, fp) != 1) goto fails; /* colour_map_index */
-       if(fwrite(&us0, 2, 1, fp) != 1) goto fails; /* colour_map_length */
-       if(fwrite(&uc0, 1, 1, fp) != 1) goto fails; /* colour_map_entry_size */
+    us0 = 0;
+    if (fwrite(&us0, 2, 1, fp) != 1) {
+        goto fails;    /* colour_map_index */
+    }
+    if (fwrite(&us0, 2, 1, fp) != 1) {
+        goto fails;    /* colour_map_length */
+    }
+    if (fwrite(&uc0, 1, 1, fp) != 1) {
+        goto fails;    /* colour_map_entry_size */
+    }
 
-       if(fwrite(&us0, 2, 1, fp) != 1) goto fails; /* x_origin */
-       if(fwrite(&us0, 2, 1, fp) != 1) goto fails; /* y_origin */
+    if (fwrite(&us0, 2, 1, fp) != 1) {
+        goto fails;    /* x_origin */
+    }
+    if (fwrite(&us0, 2, 1, fp) != 1) {
+        goto fails;    /* y_origin */
+    }
 
-       image_w = (unsigned short)width;
-       image_h = (unsigned short) height;
+    image_w = (unsigned short)width;
+    image_h = (unsigned short) height;
 
 #ifndef OPJ_BIG_ENDIAN
-       if(fwrite(&image_w, 2, 1, fp) != 1) goto fails;
-       if(fwrite(&image_h, 2, 1, fp) != 1) goto fails;
+    if (fwrite(&image_w, 2, 1, fp) != 1) {
+        goto fails;
+    }
+    if (fwrite(&image_h, 2, 1, fp) != 1) {
+        goto fails;
+    }
 #else
-       image_w = swap16(image_w);
-       image_h = swap16(image_h);
-       if(fwrite(&image_w, 2, 1, fp) != 1) goto fails;
-       if(fwrite(&image_h, 2, 1, fp) != 1) goto fails;
+    image_w = swap16(image_w);
+    image_h = swap16(image_h);
+    if (fwrite(&image_w, 2, 1, fp) != 1) {
+        goto fails;
+    }
+    if (fwrite(&image_h, 2, 1, fp) != 1) {
+        goto fails;
+    }
 #endif
 
-       if(fwrite(&pixel_depth, 1, 1, fp) != 1) goto fails;
+    if (fwrite(&pixel_depth, 1, 1, fp) != 1) {
+        goto fails;
+    }
 
-       image_desc = 8; /* 8 bits per component. */
+    image_desc = 8; /* 8 bits per component. */
 
-       if (flip_image)
-               image_desc |= 32;
-       if(fwrite(&image_desc, 1, 1, fp) != 1) goto fails;
+    if (flip_image) {
+        image_desc |= 32;
+    }
+    if (fwrite(&image_desc, 1, 1, fp) != 1) {
+        goto fails;
+    }
 
-       return 1;
+    return 1;
 
 fails:
-       fputs("\nwrite_tgaheader: write ERROR\n", stderr);
-       return 0;
+    fputs("\nwrite_tgaheader: write ERROR\n", stderr);
+    return 0;
 }
 
-opj_image_t* tgatoimage(const char *filename, opj_cparameters_t *parameters) {
-       FILE *f;
-       opj_image_t *image;
-       unsigned int image_width, image_height, pixel_bit_depth;
-       unsigned int x, y;
-       int flip_image=0;
-       opj_image_cmptparm_t cmptparm[4];       /* maximum 4 components */
-       int numcomps;
-       OPJ_COLOR_SPACE color_space;
-       opj_bool mono ;
-       opj_bool save_alpha;
-       int subsampling_dx, subsampling_dy;
-       int i;  
-
-       f = fopen(filename, "rb");
-       if (!f) {
-               fprintf(stderr, "Failed to open %s for reading !!\n", filename);
-               return 0;
-       }
-
-       if (!tga_readheader(f, &pixel_bit_depth, &image_width, &image_height, &flip_image))
-               return NULL;
-
-       /* We currently only support 24 & 32 bit tga's ... */
-       if (!((pixel_bit_depth == 24) || (pixel_bit_depth == 32)))
-               return NULL;
-
-       /* initialize image components */   
-       memset(&cmptparm[0], 0, 4 * sizeof(opj_image_cmptparm_t));
-
-       mono = (pixel_bit_depth == 8) || (pixel_bit_depth == 16);  /* Mono with & without alpha. */
-       save_alpha = (pixel_bit_depth == 16) || (pixel_bit_depth == 32); /* Mono with alpha, or RGB with alpha */
-
-       if (mono) {
-               color_space = CLRSPC_GRAY;
-               numcomps = save_alpha ? 2 : 1;
-       }       
-       else {
-               numcomps = save_alpha ? 4 : 3;
-               color_space = CLRSPC_SRGB;
-       }
-
-       subsampling_dx = parameters->subsampling_dx;
-       subsampling_dy = parameters->subsampling_dy;
-
-       for (i = 0; i < numcomps; i++) {
-               cmptparm[i].prec = 8;
-               cmptparm[i].bpp = 8;
-               cmptparm[i].sgnd = 0;
-               cmptparm[i].dx = subsampling_dx;
-               cmptparm[i].dy = subsampling_dy;
-               cmptparm[i].w = image_width;
-               cmptparm[i].h = image_height;
-       }
-
-       /* create the image */
-       image = opj_image_create(numcomps, &cmptparm[0], color_space);
-
-       if (!image)
-               return NULL;
-
-       /* set image offset and reference grid */
-       image->x0 = parameters->image_offset_x0;
-       image->y0 = parameters->image_offset_y0;
-       image->x1 =     !image->x0 ? (image_width - 1) * subsampling_dx + 1 : image->x0 + (image_width - 1) * subsampling_dx + 1;
-       image->y1 =     !image->y0 ? (image_height - 1) * subsampling_dy + 1 : image->y0 + (image_height - 1) * subsampling_dy + 1;
-
-       /* set image data */
-       for (y=0; y < image_height; y++) 
-       {
-               int index;
-
-               if (flip_image)
-                       index = (image_height-y-1)*image_width;
-               else
-                       index = y*image_width;
-
-               if (numcomps==3)
-               {
-                       for (x=0;x<image_width;x++) 
-                       {
-                               unsigned char r,g,b;
-
-                               if( !fread(&b, 1, 1, f) )
-                               {
-                                       fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-                                       opj_image_destroy(image);
-                                   return NULL;
-                               }
-                               if ( !fread(&g, 1, 1, f) )
-                               {
-                                       fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-                                       opj_image_destroy(image);
-                                   return NULL;
-                               }
-                               if ( !fread(&r, 1, 1, f) )
-                               {
-                                       fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-                                       opj_image_destroy(image);
-                                   return NULL;
-                               }
-
-                               image->comps[0].data[index]=r;
-                               image->comps[1].data[index]=g;
-                               image->comps[2].data[index]=b;
-                               index++;
-                       }
-               }
-               else if (numcomps==4)
-               {
-                       for (x=0;x<image_width;x++) 
-                       {
-                               unsigned char r,g,b,a;
-                               if ( !fread(&b, 1, 1, f) )
-                               {
-                                       fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-                                       opj_image_destroy(image);
-                                   return NULL;
-                               }
-                               if ( !fread(&g, 1, 1, f) )
-                               {
-                                       fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-                                       opj_image_destroy(image);
-                                   return NULL;
-                               }
-                               if ( !fread(&r, 1, 1, f) )
-                               {
-                                       fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-                                       opj_image_destroy(image);
-                                   return NULL;
-                               }
-                               if ( !fread(&a, 1, 1, f) )
-                               {
-                                       fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-                                       opj_image_destroy(image);
-                                   return NULL;
-                               }
-
-                               image->comps[0].data[index]=r;
-                               image->comps[1].data[index]=g;
-                               image->comps[2].data[index]=b;
-                               image->comps[3].data[index]=a;
-                               index++;
-                       }
-               }
-               else {
-                       fprintf(stderr, "Currently unsupported bit depth : %s\n", filename);
-               }
-       }       
-       return image;
+opj_image_t* tgatoimage(const char *filename, opj_cparameters_t *parameters)
+{
+    FILE *f;
+    opj_image_t *image;
+    unsigned int image_width, image_height, pixel_bit_depth;
+    unsigned int x, y;
+    int flip_image = 0;
+    opj_image_cmptparm_t cmptparm[4];   /* maximum 4 components */
+    int numcomps;
+    OPJ_COLOR_SPACE color_space;
+    opj_bool mono ;
+    opj_bool save_alpha;
+    int subsampling_dx, subsampling_dy;
+    int i;
+
+    f = fopen(filename, "rb");
+    if (!f) {
+        fprintf(stderr, "Failed to open %s for reading !!\n", filename);
+        return 0;
+    }
+
+    if (!tga_readheader(f, &pixel_bit_depth, &image_width, &image_height,
+                        &flip_image)) {
+        return NULL;
+    }
+
+    /* We currently only support 24 & 32 bit tga's ... */
+    if (!((pixel_bit_depth == 24) || (pixel_bit_depth == 32))) {
+        return NULL;
+    }
+
+    /* initialize image components */
+    memset(&cmptparm[0], 0, 4 * sizeof(opj_image_cmptparm_t));
+
+    mono = (pixel_bit_depth == 8) ||
+           (pixel_bit_depth == 16);  /* Mono with & without alpha. */
+    save_alpha = (pixel_bit_depth == 16) ||
+                 (pixel_bit_depth == 32); /* Mono with alpha, or RGB with alpha */
+
+    if (mono) {
+        color_space = CLRSPC_GRAY;
+        numcomps = save_alpha ? 2 : 1;
+    } else {
+        numcomps = save_alpha ? 4 : 3;
+        color_space = CLRSPC_SRGB;
+    }
+
+    subsampling_dx = parameters->subsampling_dx;
+    subsampling_dy = parameters->subsampling_dy;
+
+    for (i = 0; i < numcomps; i++) {
+        cmptparm[i].prec = 8;
+        cmptparm[i].bpp = 8;
+        cmptparm[i].sgnd = 0;
+        cmptparm[i].dx = subsampling_dx;
+        cmptparm[i].dy = subsampling_dy;
+        cmptparm[i].w = image_width;
+        cmptparm[i].h = image_height;
+    }
+
+    /* create the image */
+    image = opj_image_create(numcomps, &cmptparm[0], color_space);
+
+    if (!image) {
+        return NULL;
+    }
+
+    /* set image offset and reference grid */
+    image->x0 = parameters->image_offset_x0;
+    image->y0 = parameters->image_offset_y0;
+    image->x1 = !image->x0 ? (image_width - 1) * subsampling_dx + 1 : image->x0 +
+                (image_width - 1) * subsampling_dx + 1;
+    image->y1 = !image->y0 ? (image_height - 1) * subsampling_dy + 1 : image->y0 +
+                (image_height - 1) * subsampling_dy + 1;
+
+    /* set image data */
+    for (y = 0; y < image_height; y++) {
+        int index;
+
+        if (flip_image) {
+            index = (image_height - y - 1) * image_width;
+        } else {
+            index = y * image_width;
+        }
+
+        if (numcomps == 3) {
+            for (x = 0; x < image_width; x++) {
+                unsigned char r, g, b;
+
+                if (!fread(&b, 1, 1, f)) {
+                    fprintf(stderr,
+                            "\nError: fread return a number of element different from the expected.\n");
+                    opj_image_destroy(image);
+                    return NULL;
+                }
+                if (!fread(&g, 1, 1, f)) {
+                    fprintf(stderr,
+                            "\nError: fread return a number of element different from the expected.\n");
+                    opj_image_destroy(image);
+                    return NULL;
+                }
+                if (!fread(&r, 1, 1, f)) {
+                    fprintf(stderr,
+                            "\nError: fread return a number of element different from the expected.\n");
+                    opj_image_destroy(image);
+                    return NULL;
+                }
+
+                image->comps[0].data[index] = r;
+                image->comps[1].data[index] = g;
+                image->comps[2].data[index] = b;
+                index++;
+            }
+        } else if (numcomps == 4) {
+            for (x = 0; x < image_width; x++) {
+                unsigned char r, g, b, a;
+                if (!fread(&b, 1, 1, f)) {
+                    fprintf(stderr,
+                            "\nError: fread return a number of element different from the expected.\n");
+                    opj_image_destroy(image);
+                    return NULL;
+                }
+                if (!fread(&g, 1, 1, f)) {
+                    fprintf(stderr,
+                            "\nError: fread return a number of element different from the expected.\n");
+                    opj_image_destroy(image);
+                    return NULL;
+                }
+                if (!fread(&r, 1, 1, f)) {
+                    fprintf(stderr,
+                            "\nError: fread return a number of element different from the expected.\n");
+                    opj_image_destroy(image);
+                    return NULL;
+                }
+                if (!fread(&a, 1, 1, f)) {
+                    fprintf(stderr,
+                            "\nError: fread return a number of element different from the expected.\n");
+                    opj_image_destroy(image);
+                    return NULL;
+                }
+
+                image->comps[0].data[index] = r;
+                image->comps[1].data[index] = g;
+                image->comps[2].data[index] = b;
+                image->comps[3].data[index] = a;
+                index++;
+            }
+        } else {
+            fprintf(stderr, "Currently unsupported bit depth : %s\n", filename);
+        }
+    }
+    return image;
 }
 
-int imagetotga(opj_image_t * image, const char *outfile) {
-       int width, height, bpp, x, y;
-       opj_bool write_alpha;
-       int i, adjustR, adjustG, adjustB;
-       unsigned int alpha_channel;
-       float r,g,b,a;
-       unsigned char value;
-       float scale;
-       FILE *fdest;
-  size_t res;
-
-       fdest = fopen(outfile, "wb");
-       if (!fdest) {
-               fprintf(stderr, "ERROR -> failed to open %s for writing\n", outfile);
-               return 1;
-       }
-
-       for (i = 0; i < image->numcomps-1; i++) {
-               if ((image->comps[0].dx != image->comps[i+1].dx) 
-                       ||(image->comps[0].dy != image->comps[i+1].dy) 
-                       ||(image->comps[0].prec != image->comps[i+1].prec))     {
-      fprintf(stderr, "Unable to create a tga file with such J2K image charateristics.");
-      return 1;
-   }
-       }
-
-       width = image->comps[0].w;
-       height = image->comps[0].h; 
-
-       /* Mono with alpha, or RGB with alpha. */
-       write_alpha = (image->numcomps==2) || (image->numcomps==4);   
-
-       /* Write TGA header  */
-       bpp = write_alpha ? 32 : 24;
-       if (!tga_writeheader(fdest, bpp, width , height, OPJ_TRUE))
-               return 1;
-
-       alpha_channel = image->numcomps-1; 
-
-       scale = 255.0f / (float)((1<<image->comps[0].prec)-1);
-
-       adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
-       adjustG = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
-       adjustB = (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
-
-       for (y=0; y < height; y++) {
-               unsigned int index=y*width;
-
-               for (x=0; x < width; x++, index++)      {
-                       r = (float)(image->comps[0].data[index] + adjustR);
-
-                       if (image->numcomps>2) {
-                               g = (float)(image->comps[1].data[index] + adjustG);
-                               b = (float)(image->comps[2].data[index] + adjustB);
-                       }
-                       else  {/* Greyscale ... */
-                               g = r;
-                               b = r;
-                       }
-
-                       /* TGA format writes BGR ... */
-                       value = (unsigned char)(b*scale);
-                       res = fwrite(&value,1,1,fdest);
-      if( res < 1 ) {
-        fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
-        return 1;
-      }
+int imagetotga(opj_image_t * image, const char *outfile)
+{
+    int width, height, bpp, x, y;
+    opj_bool write_alpha;
+    int i, adjustR, adjustG, adjustB;
+    unsigned int alpha_channel;
+    float r, g, b, a;
+    unsigned char value;
+    float scale;
+    FILE *fdest;
+    size_t res;
 
-                       value = (unsigned char)(g*scale);
-                       res = fwrite(&value,1,1,fdest);
-      if( res < 1 ) {
-        fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
+    fdest = fopen(outfile, "wb");
+    if (!fdest) {
+        fprintf(stderr, "ERROR -> failed to open %s for writing\n", outfile);
         return 1;
-      }
+    }
+
+    for (i = 0; i < image->numcomps - 1; i++) {
+        if ((image->comps[0].dx != image->comps[i + 1].dx)
+                || (image->comps[0].dy != image->comps[i + 1].dy)
+                || (image->comps[0].prec != image->comps[i + 1].prec)) {
+            fprintf(stderr,
+                    "Unable to create a tga file with such J2K image charateristics.");
+            return 1;
+        }
+    }
+
+    width = image->comps[0].w;
+    height = image->comps[0].h;
+
+    /* Mono with alpha, or RGB with alpha. */
+    write_alpha = (image->numcomps == 2) || (image->numcomps == 4);
 
-                       value = (unsigned char)(r*scale);
-                       res = fwrite(&value,1,1,fdest);
-      if( res < 1 ) {
-        fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
+    /* Write TGA header  */
+    bpp = write_alpha ? 32 : 24;
+    if (!tga_writeheader(fdest, bpp, width, height, OPJ_TRUE)) {
         return 1;
-      }
+    }
+
+    alpha_channel = image->numcomps - 1;
+
+    scale = 255.0f / (float)((1 << image->comps[0].prec) - 1);
+
+    adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
+    adjustG = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
+    adjustB = (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
+
+    for (y = 0; y < height; y++) {
+        unsigned int index = y * width;
+
+        for (x = 0; x < width; x++, index++)  {
+            r = (float)(image->comps[0].data[index] + adjustR);
+
+            if (image->numcomps > 2) {
+                g = (float)(image->comps[1].data[index] + adjustG);
+                b = (float)(image->comps[2].data[index] + adjustB);
+            } else  { /* Greyscale ... */
+                g = r;
+                b = r;
+            }
+
+            /* TGA format writes BGR ... */
+            value = (unsigned char)(b * scale);
+            res = fwrite(&value, 1, 1, fdest);
+            if (res < 1) {
+                fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
+                return 1;
+            }
+
+            value = (unsigned char)(g * scale);
+            res = fwrite(&value, 1, 1, fdest);
+            if (res < 1) {
+                fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
+                return 1;
+            }
+
+            value = (unsigned char)(r * scale);
+            res = fwrite(&value, 1, 1, fdest);
+            if (res < 1) {
+                fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
+                return 1;
+            }
 
-                       if (write_alpha) {
-                               a = (float)(image->comps[alpha_channel].data[index]);
-                               value = (unsigned char)(a*scale);
-                               res = fwrite(&value,1,1,fdest);
-        if( res < 1 ) {
-          fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
-          return 1;
+            if (write_alpha) {
+                a = (float)(image->comps[alpha_channel].data[index]);
+                value = (unsigned char)(a * scale);
+                res = fwrite(&value, 1, 1, fdest);
+                if (res < 1) {
+                    fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
+                    return 1;
+                }
+            }
         }
-                       }
-               }
-       }
+    }
 
-       return 0;
+    return 0;
 }
 
 /* -->> -->> -->> -->>
@@ -518,686 +551,701 @@ typedef unsigned short int WORD;
 typedef unsigned int DWORD;
 
 typedef struct {
-  WORD bfType;                 /* 'BM' for Bitmap (19776) */
-  DWORD bfSize;                        /* Size of the file        */
-  WORD bfReserved1;            /* Reserved : 0            */
-  WORD bfReserved2;            /* Reserved : 0            */
-  DWORD bfOffBits;             /* Offset                  */
+    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(const char *filename, opj_cparameters_t *parameters) 
+opj_image_t* bmptoimage(const char *filename, opj_cparameters_t *parameters)
 {
-       int subsampling_dx = parameters->subsampling_dx;
-       int subsampling_dy = parameters->subsampling_dy;
-
-       int i, numcomps, w, h;
-       OPJ_COLOR_SPACE color_space;
-       opj_image_cmptparm_t cmptparm[3];       /* maximum of 3 components */
-       opj_image_t * image = NULL;
-
-       FILE *IN;
-       BITMAPFILEHEADER_t File_h;
-       BITMAPINFOHEADER_t Info_h;
-       unsigned char *RGB;
-       unsigned char *table_R, *table_G, *table_B;
-       unsigned int j, PAD = 0;
-
-       int x, y, index;
-       int gray_scale = 1;
-       int has_color;
-       DWORD W, H;
-  
-       IN = fopen(filename, "rb");
-       if (!IN) 
-   {
-       fprintf(stderr, "Failed to open %s for reading !!\n", filename);
-       return NULL;
-   }
-       
-       File_h.bfType = getc(IN);
-       File_h.bfType = (getc(IN) << 8) + File_h.bfType;
-       
-       if (File_h.bfType != 19778) 
-   {
-       fprintf(stderr,"Error, not a BMP file!\n");
-       fclose(IN);
-       return NULL;
-   }
-               /* FILE HEADER */
-               /* ------------- */
-       File_h.bfSize = getc(IN);
-       File_h.bfSize = (getc(IN) << 8) + File_h.bfSize;
-       File_h.bfSize = (getc(IN) << 16) + File_h.bfSize;
-       File_h.bfSize = (getc(IN) << 24) + File_h.bfSize;
-
-       File_h.bfReserved1 = getc(IN);
-       File_h.bfReserved1 = (getc(IN) << 8) + File_h.bfReserved1;
-
-       File_h.bfReserved2 = getc(IN);
-       File_h.bfReserved2 = (getc(IN) << 8) + File_h.bfReserved2;
-
-       File_h.bfOffBits = getc(IN);
-       File_h.bfOffBits = (getc(IN) << 8) + File_h.bfOffBits;
-       File_h.bfOffBits = (getc(IN) << 16) + File_h.bfOffBits;
-       File_h.bfOffBits = (getc(IN) << 24) + File_h.bfOffBits;
-
-               /* INFO HEADER */
-               /* ------------- */
-
-       Info_h.biSize = getc(IN);
-       Info_h.biSize = (getc(IN) << 8) + Info_h.biSize;
-       Info_h.biSize = (getc(IN) << 16) + Info_h.biSize;
-       Info_h.biSize = (getc(IN) << 24) + Info_h.biSize;
-
-       if(Info_h.biSize != 40)
-   {
-       fprintf(stderr,"Error, unknown BMP header size %d\n", Info_h.biSize);
-       fclose(IN);
-       return NULL;
-   }
-       Info_h.biWidth = getc(IN);
-       Info_h.biWidth = (getc(IN) << 8) + Info_h.biWidth;
-       Info_h.biWidth = (getc(IN) << 16) + Info_h.biWidth;
-       Info_h.biWidth = (getc(IN) << 24) + Info_h.biWidth;
-       w = Info_h.biWidth;
-
-       Info_h.biHeight = getc(IN);
-       Info_h.biHeight = (getc(IN) << 8) + Info_h.biHeight;
-       Info_h.biHeight = (getc(IN) << 16) + Info_h.biHeight;
-       Info_h.biHeight = (getc(IN) << 24) + Info_h.biHeight;
-       h = Info_h.biHeight;
-
-       Info_h.biPlanes = getc(IN);
-       Info_h.biPlanes = (getc(IN) << 8) + Info_h.biPlanes;
-
-       Info_h.biBitCount = getc(IN);
-       Info_h.biBitCount = (getc(IN) << 8) + Info_h.biBitCount;
-
-       Info_h.biCompression = getc(IN);
-       Info_h.biCompression = (getc(IN) << 8) + Info_h.biCompression;
-       Info_h.biCompression = (getc(IN) << 16) + Info_h.biCompression;
-       Info_h.biCompression = (getc(IN) << 24) + Info_h.biCompression;
-
-       Info_h.biSizeImage = getc(IN);
-       Info_h.biSizeImage = (getc(IN) << 8) + Info_h.biSizeImage;
-       Info_h.biSizeImage = (getc(IN) << 16) + Info_h.biSizeImage;
-       Info_h.biSizeImage = (getc(IN) << 24) + Info_h.biSizeImage;
-
-       Info_h.biXpelsPerMeter = getc(IN);
-       Info_h.biXpelsPerMeter = (getc(IN) << 8) + Info_h.biXpelsPerMeter;
-       Info_h.biXpelsPerMeter = (getc(IN) << 16) + Info_h.biXpelsPerMeter;
-       Info_h.biXpelsPerMeter = (getc(IN) << 24) + Info_h.biXpelsPerMeter;
-
-       Info_h.biYpelsPerMeter = getc(IN);
-       Info_h.biYpelsPerMeter = (getc(IN) << 8) + Info_h.biYpelsPerMeter;
-       Info_h.biYpelsPerMeter = (getc(IN) << 16) + Info_h.biYpelsPerMeter;
-       Info_h.biYpelsPerMeter = (getc(IN) << 24) + Info_h.biYpelsPerMeter;
-
-       Info_h.biClrUsed = getc(IN);
-       Info_h.biClrUsed = (getc(IN) << 8) + Info_h.biClrUsed;
-       Info_h.biClrUsed = (getc(IN) << 16) + Info_h.biClrUsed;
-       Info_h.biClrUsed = (getc(IN) << 24) + Info_h.biClrUsed;
-
-       Info_h.biClrImportant = getc(IN);
-       Info_h.biClrImportant = (getc(IN) << 8) + Info_h.biClrImportant;
-       Info_h.biClrImportant = (getc(IN) << 16) + Info_h.biClrImportant;
-       Info_h.biClrImportant = (getc(IN) << 24) + Info_h.biClrImportant;
-
-               /* Read the data and store them in the OUT file */
-
-       if (Info_h.biBitCount == 24) 
-   {
-       numcomps = 3;
-       color_space = CLRSPC_SRGB;
-       /* initialize image components */
-       memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t));
-       for(i = 0; i < numcomps; i++) 
-  {
-       cmptparm[i].prec = 8;
-       cmptparm[i].bpp = 8;
-       cmptparm[i].sgnd = 0;
-       cmptparm[i].dx = subsampling_dx;
-       cmptparm[i].dy = subsampling_dy;
-       cmptparm[i].w = w;
-       cmptparm[i].h = h;
-  }
-       /* create the image */
-       image = opj_image_create(numcomps, &cmptparm[0], color_space);
-       if(!image) 
-  {
-       fclose(IN);
-       return NULL;
-  }
-
-       /* set image offset and reference grid */
-       image->x0 = parameters->image_offset_x0;
-       image->y0 = parameters->image_offset_y0;
-       image->x1 =     !image->x0 ? (w - 1) * subsampling_dx + 1 : image->x0 + (w - 1) * subsampling_dx + 1;
-       image->y1 =     !image->y0 ? (h - 1) * subsampling_dy + 1 : image->y0 + (h - 1) * subsampling_dy + 1;
-
-       /* set image data */
-
-       /* Place the cursor at the beginning of the image information */
-       fseek(IN, 0, SEEK_SET);
-       fseek(IN, File_h.bfOffBits, SEEK_SET);
-                       
-       W = Info_h.biWidth;
-       H = Info_h.biHeight;
-
-       /* PAD = 4 - (3 * W) % 4; */
-       /* PAD = (PAD == 4) ? 0 : PAD; */
-       PAD = (3 * W) % 4 ? 4 - (3 * W) % 4 : 0;
-                       
-       RGB = (unsigned char *) 
-        malloc((3 * W + PAD) * H * sizeof(unsigned char));
-                       
-       if ( fread(RGB, sizeof(unsigned char), (3 * W + PAD) * H, IN) != (3 * W + PAD) * H )
-       {
-               free(RGB);
-               opj_image_destroy(image);
-               fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-           return NULL;
-       }
-                       
-       index = 0;
-
-       for(y = 0; y < (int)H; y++) 
-  {
-       unsigned char *scanline = RGB + (3 * W + PAD) * (H - 1 - y);
-       for(x = 0; x < (int)W; x++) 
- {
-       unsigned char *pixel = &scanline[3 * x];
-       image->comps[0].data[index] = pixel[2]; /* R */
-       image->comps[1].data[index] = pixel[1]; /* G */
-       image->comps[2].data[index] = pixel[0]; /* B */
-       index++;
- }
-  }
-       free(RGB);
-   }/* if (Info_h.biBitCount == 24) */ 
-       else 
-       if (Info_h.biBitCount == 8 && Info_h.biCompression == 0)/*RGB */
-   {
-       if(Info_h.biClrUsed == 0) Info_h.biClrUsed = 256;
-       else
-       if(Info_h.biClrUsed > 256) Info_h.biClrUsed = 256;
-
-       table_R = (unsigned char *) malloc(256 * sizeof(unsigned char));
-       table_G = (unsigned char *) malloc(256 * sizeof(unsigned char));
-       table_B = (unsigned char *) malloc(256 * sizeof(unsigned char));
-               
-       has_color = 0;  
-       for (j = 0; j < Info_h.biClrUsed; j++) 
-  {
-       table_B[j] = (unsigned char)getc(IN);
-       table_G[j] = (unsigned char)getc(IN);
-       table_R[j] = (unsigned char)getc(IN);
-       getc(IN);
-       has_color += 
-        !(table_R[j] == table_G[j] && table_R[j] == table_B[j]);
-  }
-       if(has_color) gray_scale = 0;
-                  
-       /* Place the cursor at the beginning of the image information */
-       fseek(IN, 0, SEEK_SET);
-       fseek(IN, File_h.bfOffBits, SEEK_SET);
-                       
-       W = Info_h.biWidth;
-       H = Info_h.biHeight;
-       if (Info_h.biWidth % 2)
-        W++;
-                       
-       numcomps = gray_scale ? 1 : 3;
-       color_space = gray_scale ? CLRSPC_GRAY : CLRSPC_SRGB;
-               /* initialize image components */
-       memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t));
-       for(i = 0; i < numcomps; i++) 
-  {
-       cmptparm[i].prec = 8;
-       cmptparm[i].bpp = 8;
-       cmptparm[i].sgnd = 0;
-       cmptparm[i].dx = subsampling_dx;
-       cmptparm[i].dy = subsampling_dy;
-       cmptparm[i].w = w;
-       cmptparm[i].h = h;
-  }
-       /* create the image */
-       image = opj_image_create(numcomps, &cmptparm[0], color_space);
-       if(!image) 
-  {
-       fclose(IN);
-       free(table_R); free(table_G); free(table_B);
-       return NULL;
-  }
-
-       /* set image offset and reference grid */
-       image->x0 = parameters->image_offset_x0;
-       image->y0 = parameters->image_offset_y0;
-       image->x1 =     !image->x0 ? (w - 1) * subsampling_dx + 1 : image->x0 + (w - 1) * subsampling_dx + 1;
-       image->y1 =     !image->y0 ? (h - 1) * subsampling_dy + 1 : image->y0 + (h - 1) * subsampling_dy + 1;
-
-       /* set image data */
-
-       RGB = (unsigned char *) malloc(W * H * sizeof(unsigned char));
-                       
-       if ( fread(RGB, sizeof(unsigned char), W * H, IN) != W * H )
-       {
-               free(table_R);
-               free(table_G);
-               free(table_B);
-               free(RGB);
-               opj_image_destroy(image);
-               fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-           return NULL;
-       }
-       if (gray_scale) 
-  {
-       index = 0;
-       for (j = 0; j < W * H; j++) 
- {
-               if ((j % W < W - 1 && Info_h.biWidth % 2) || !(Info_h.biWidth % 2)) 
-          {
-               image->comps[0].data[index] = 
-                table_R[RGB[W * H - ((j) / (W) + 1) * W + (j) % (W)]];
-               index++;
-          }
- }
-
-  } 
-       else 
-  {
-       index = 0;
-       for (j = 0; j < W * H; j++) 
- {
-               if ((j % W < W - 1 && Info_h.biWidth % 2) 
-               || !(Info_h.biWidth % 2)) 
-          {
-               unsigned char pixel_index = 
-                RGB[W * H - ((j) / (W) + 1) * W + (j) % (W)];
-               image->comps[0].data[index] = table_R[pixel_index];
-               image->comps[1].data[index] = table_G[pixel_index];
-               image->comps[2].data[index] = table_B[pixel_index];
-               index++;
-          }
- }
-  }
-       free(RGB);
-       free(table_R);
-       free(table_G);
-       free(table_B);
-   }/* RGB8 */ 
-       else 
-       if (Info_h.biBitCount == 8 && Info_h.biCompression == 1)/*RLE8*/
-       {
-               unsigned char *pix, *beyond;
-               int *gray, *red, *green, *blue;
-               unsigned int x, y, max;
-               int i, c, c1;
-               unsigned char uc;
-
-               if (Info_h.biClrUsed == 0)
-                       Info_h.biClrUsed = 256;
-               else if (Info_h.biClrUsed > 256)
-                       Info_h.biClrUsed = 256;
-
-               table_R = (unsigned char *) malloc(256 * sizeof(unsigned char));
-               table_G = (unsigned char *) malloc(256 * sizeof(unsigned char));
-               table_B = (unsigned char *) malloc(256 * sizeof(unsigned char));
-
-               has_color = 0;
-               for (j = 0; j < Info_h.biClrUsed; j++)
-               {
-                       table_B[j] = (unsigned char)getc(IN);
-                       table_G[j] = (unsigned char)getc(IN);
-                       table_R[j] = (unsigned char)getc(IN);
-                       getc(IN);
-                       has_color += !(table_R[j] == table_G[j] && table_R[j] == table_B[j]);
-               }
-
-               if (has_color)
-                       gray_scale = 0;
-
-               numcomps = gray_scale ? 1 : 3;
-               color_space = gray_scale ? CLRSPC_GRAY : CLRSPC_SRGB;
-               /* initialize image components */
-               memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t));
-               for (i = 0; i < numcomps; i++)
-               {
-                       cmptparm[i].prec = 8;
-                       cmptparm[i].bpp = 8;
-                       cmptparm[i].sgnd = 0;
-                       cmptparm[i].dx = subsampling_dx;
-                       cmptparm[i].dy = subsampling_dy;
-                       cmptparm[i].w = w;
-                       cmptparm[i].h = h;
-               }
-               /* create the image */
-               image = opj_image_create(numcomps, &cmptparm[0], color_space);
-               if (!image)
-               {
-                       fclose(IN);
-                       free(table_R);
-                       free(table_G);
-                       free(table_B);
-                       return NULL;
-               }
-
-               /* set image offset and reference grid */
-               image->x0 = parameters->image_offset_x0;
-               image->y0 = parameters->image_offset_y0;
-               image->x1 = !image->x0 ? (w - 1) * subsampling_dx + 1 : image->x0 + (w
-                               - 1) * subsampling_dx + 1;
-               image->y1 = !image->y0 ? (h - 1) * subsampling_dy + 1 : image->y0 + (h
-                               - 1) * subsampling_dy + 1;
-
-               /* set image data */
-
-               /* Place the cursor at the beginning of the image information */
-               fseek(IN, 0, SEEK_SET);
-               fseek(IN, File_h.bfOffBits, SEEK_SET);
-
-               W = Info_h.biWidth;
-               H = Info_h.biHeight;
-               RGB = (unsigned char *) calloc(1, W * H * sizeof(unsigned char));
-               beyond = RGB + W * H;
-               pix = beyond - W;
-               x = y = 0;
-
-               while (y < H)
-               {
-                       c = getc(IN);
-
-                       if (c)
-                       {
-                               c1 = getc(IN);
-
-                               for (i = 0; i < c && x < W && pix < beyond; i++, x++, pix++)
-                                       *pix = (unsigned char)c1;
-                       }
-                       else
-                       {
-                               c = getc(IN);
-
-                               if (c == 0x00) /* EOL */
-                               {
-                                       x = 0;
-                                       ++y;
-                                       pix = RGB + x + (H - y - 1) * W;
-                               }
-                               else if (c == 0x01) /* EOP */
-                                       break;
-                               else if (c == 0x02) /* MOVE by dxdy */
-                               {
-                                       c = getc(IN);
-                                       x += c;
-                                       c = getc(IN);
-                                       y += c;
-                                       pix = RGB + (H - y - 1) * W + x;
-                               }
-                               else /* 03 .. 255 */
-                               {
-                                       i = 0;
-                                       for (; i < c && x < W && pix < beyond; i++, x++, pix++)
-                                       {
-                                               c1 = getc(IN);
-                                               *pix = (unsigned char)c1;
-                                       }
-                                       if (c & 1) /* skip padding byte */
-                                               getc(IN);
-                               }
-                       }
-               }/* while() */
-
-               if (gray_scale)
-               {
-                       gray = image->comps[0].data;
-                       pix = RGB;
-                       max = W * H;
-
-                       while (max--)
-                       {
-                               uc = *pix++;
-
-                               *gray++ = table_R[uc];
-                       }
-               }
-               else
-               {
-                       /*int *red, *green, *blue;*/
-
-                       red = image->comps[0].data;
-                       green = image->comps[1].data;
-                       blue = image->comps[2].data;
-                       pix = RGB;
-                       max = W * H;
-
-                       while (max--)
-                       {
-                               uc = *pix++;
-
-                               *red++ = table_R[uc];
-                               *green++ = table_G[uc];
-                               *blue++ = table_B[uc];
-                       }
-               }
-               free(RGB);
-               free(table_R);
-               free(table_G);
-               free(table_B);
-       }/* RLE8 */
-       else 
-   {
-       fprintf(stderr, 
-       "Other system than 24 bits/pixels or 8 bits (no RLE coding) "
-               "is not yet implemented [%d]\n", Info_h.biBitCount);
-   }
-       fclose(IN);
-       return image;
+    int subsampling_dx = parameters->subsampling_dx;
+    int subsampling_dy = parameters->subsampling_dy;
+
+    int i, numcomps, w, h;
+    OPJ_COLOR_SPACE color_space;
+    opj_image_cmptparm_t cmptparm[3];   /* maximum of 3 components */
+    opj_image_t * image = NULL;
+
+    FILE *IN;
+    BITMAPFILEHEADER_t File_h;
+    BITMAPINFOHEADER_t Info_h;
+    unsigned char *RGB;
+    unsigned char *table_R, *table_G, *table_B;
+    unsigned int j, PAD = 0;
+
+    int x, y, index;
+    int gray_scale = 1;
+    int has_color;
+    DWORD W, H;
+
+    IN = fopen(filename, "rb");
+    if (!IN) {
+        fprintf(stderr, "Failed to open %s for reading !!\n", filename);
+        return NULL;
+    }
+
+    File_h.bfType = getc(IN);
+    File_h.bfType = (getc(IN) << 8) + File_h.bfType;
+
+    if (File_h.bfType != 19778) {
+        fprintf(stderr, "Error, not a BMP file!\n");
+        fclose(IN);
+        return NULL;
+    }
+    /* FILE HEADER */
+    /* ------------- */
+    File_h.bfSize = getc(IN);
+    File_h.bfSize = (getc(IN) << 8) + File_h.bfSize;
+    File_h.bfSize = (getc(IN) << 16) + File_h.bfSize;
+    File_h.bfSize = (getc(IN) << 24) + File_h.bfSize;
+
+    File_h.bfReserved1 = getc(IN);
+    File_h.bfReserved1 = (getc(IN) << 8) + File_h.bfReserved1;
+
+    File_h.bfReserved2 = getc(IN);
+    File_h.bfReserved2 = (getc(IN) << 8) + File_h.bfReserved2;
+
+    File_h.bfOffBits = getc(IN);
+    File_h.bfOffBits = (getc(IN) << 8) + File_h.bfOffBits;
+    File_h.bfOffBits = (getc(IN) << 16) + File_h.bfOffBits;
+    File_h.bfOffBits = (getc(IN) << 24) + File_h.bfOffBits;
+
+    /* INFO HEADER */
+    /* ------------- */
+
+    Info_h.biSize = getc(IN);
+    Info_h.biSize = (getc(IN) << 8) + Info_h.biSize;
+    Info_h.biSize = (getc(IN) << 16) + Info_h.biSize;
+    Info_h.biSize = (getc(IN) << 24) + Info_h.biSize;
+
+    if (Info_h.biSize != 40) {
+        fprintf(stderr, "Error, unknown BMP header size %d\n", Info_h.biSize);
+        fclose(IN);
+        return NULL;
+    }
+    Info_h.biWidth = getc(IN);
+    Info_h.biWidth = (getc(IN) << 8) + Info_h.biWidth;
+    Info_h.biWidth = (getc(IN) << 16) + Info_h.biWidth;
+    Info_h.biWidth = (getc(IN) << 24) + Info_h.biWidth;
+    w = Info_h.biWidth;
+
+    Info_h.biHeight = getc(IN);
+    Info_h.biHeight = (getc(IN) << 8) + Info_h.biHeight;
+    Info_h.biHeight = (getc(IN) << 16) + Info_h.biHeight;
+    Info_h.biHeight = (getc(IN) << 24) + Info_h.biHeight;
+    h = Info_h.biHeight;
+
+    Info_h.biPlanes = getc(IN);
+    Info_h.biPlanes = (getc(IN) << 8) + Info_h.biPlanes;
+
+    Info_h.biBitCount = getc(IN);
+    Info_h.biBitCount = (getc(IN) << 8) + Info_h.biBitCount;
+
+    Info_h.biCompression = getc(IN);
+    Info_h.biCompression = (getc(IN) << 8) + Info_h.biCompression;
+    Info_h.biCompression = (getc(IN) << 16) + Info_h.biCompression;
+    Info_h.biCompression = (getc(IN) << 24) + Info_h.biCompression;
+
+    Info_h.biSizeImage = getc(IN);
+    Info_h.biSizeImage = (getc(IN) << 8) + Info_h.biSizeImage;
+    Info_h.biSizeImage = (getc(IN) << 16) + Info_h.biSizeImage;
+    Info_h.biSizeImage = (getc(IN) << 24) + Info_h.biSizeImage;
+
+    Info_h.biXpelsPerMeter = getc(IN);
+    Info_h.biXpelsPerMeter = (getc(IN) << 8) + Info_h.biXpelsPerMeter;
+    Info_h.biXpelsPerMeter = (getc(IN) << 16) + Info_h.biXpelsPerMeter;
+    Info_h.biXpelsPerMeter = (getc(IN) << 24) + Info_h.biXpelsPerMeter;
+
+    Info_h.biYpelsPerMeter = getc(IN);
+    Info_h.biYpelsPerMeter = (getc(IN) << 8) + Info_h.biYpelsPerMeter;
+    Info_h.biYpelsPerMeter = (getc(IN) << 16) + Info_h.biYpelsPerMeter;
+    Info_h.biYpelsPerMeter = (getc(IN) << 24) + Info_h.biYpelsPerMeter;
+
+    Info_h.biClrUsed = getc(IN);
+    Info_h.biClrUsed = (getc(IN) << 8) + Info_h.biClrUsed;
+    Info_h.biClrUsed = (getc(IN) << 16) + Info_h.biClrUsed;
+    Info_h.biClrUsed = (getc(IN) << 24) + Info_h.biClrUsed;
+
+    Info_h.biClrImportant = getc(IN);
+    Info_h.biClrImportant = (getc(IN) << 8) + Info_h.biClrImportant;
+    Info_h.biClrImportant = (getc(IN) << 16) + Info_h.biClrImportant;
+    Info_h.biClrImportant = (getc(IN) << 24) + Info_h.biClrImportant;
+
+    /* Read the data and store them in the OUT file */
+
+    if (Info_h.biBitCount == 24) {
+        numcomps = 3;
+        color_space = CLRSPC_SRGB;
+        /* initialize image components */
+        memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t));
+        for (i = 0; i < numcomps; i++) {
+            cmptparm[i].prec = 8;
+            cmptparm[i].bpp = 8;
+            cmptparm[i].sgnd = 0;
+            cmptparm[i].dx = subsampling_dx;
+            cmptparm[i].dy = subsampling_dy;
+            cmptparm[i].w = w;
+            cmptparm[i].h = h;
+        }
+        /* create the image */
+        image = opj_image_create(numcomps, &cmptparm[0], color_space);
+        if (!image) {
+            fclose(IN);
+            return NULL;
+        }
+
+        /* set image offset and reference grid */
+        image->x0 = parameters->image_offset_x0;
+        image->y0 = parameters->image_offset_y0;
+        image->x1 = !image->x0 ? (w - 1) * subsampling_dx + 1 : image->x0 +
+                    (w - 1) * subsampling_dx + 1;
+        image->y1 = !image->y0 ? (h - 1) * subsampling_dy + 1 : image->y0 +
+                    (h - 1) * subsampling_dy + 1;
+
+        /* set image data */
+
+        /* Place the cursor at the beginning of the image information */
+        fseek(IN, 0, SEEK_SET);
+        fseek(IN, File_h.bfOffBits, SEEK_SET);
+
+        W = Info_h.biWidth;
+        H = Info_h.biHeight;
+
+        /* PAD = 4 - (3 * W) % 4; */
+        /* PAD = (PAD == 4) ? 0 : PAD; */
+        PAD = (3 * W) % 4 ? 4 - (3 * W) % 4 : 0;
+
+        RGB = (unsigned char *)
+              malloc((3 * W + PAD) * H * sizeof(unsigned char));
+
+        if (fread(RGB, sizeof(unsigned char), (3 * W + PAD) * H,
+                  IN) != (3 * W + PAD) * H) {
+            free(RGB);
+            opj_image_destroy(image);
+            fprintf(stderr,
+                    "\nError: fread return a number of element different from the expected.\n");
+            return NULL;
+        }
+
+        index = 0;
+
+        for (y = 0; y < (int)H; y++) {
+            unsigned char *scanline = RGB + (3 * W + PAD) * (H - 1 - y);
+            for (x = 0; x < (int)W; x++) {
+                unsigned char *pixel = &scanline[3 * x];
+                image->comps[0].data[index] = pixel[2]; /* R */
+                image->comps[1].data[index] = pixel[1]; /* G */
+                image->comps[2].data[index] = pixel[0]; /* B */
+                index++;
+            }
+        }
+        free(RGB);
+    }/* if (Info_h.biBitCount == 24) */
+    else if (Info_h.biBitCount == 8 && Info_h.biCompression == 0) { /*RGB */
+        if (Info_h.biClrUsed == 0) {
+            Info_h.biClrUsed = 256;
+        } else if (Info_h.biClrUsed > 256) {
+            Info_h.biClrUsed = 256;
+        }
+
+        table_R = (unsigned char *) malloc(256 * sizeof(unsigned char));
+        table_G = (unsigned char *) malloc(256 * sizeof(unsigned char));
+        table_B = (unsigned char *) malloc(256 * sizeof(unsigned char));
+
+        has_color = 0;
+        for (j = 0; j < Info_h.biClrUsed; j++) {
+            table_B[j] = (unsigned char)getc(IN);
+            table_G[j] = (unsigned char)getc(IN);
+            table_R[j] = (unsigned char)getc(IN);
+            getc(IN);
+            has_color +=
+                !(table_R[j] == table_G[j] && table_R[j] == table_B[j]);
+        }
+        if (has_color) {
+            gray_scale = 0;
+        }
+
+        /* Place the cursor at the beginning of the image information */
+        fseek(IN, 0, SEEK_SET);
+        fseek(IN, File_h.bfOffBits, SEEK_SET);
+
+        W = Info_h.biWidth;
+        H = Info_h.biHeight;
+        if (Info_h.biWidth % 2) {
+            W++;
+        }
+
+        numcomps = gray_scale ? 1 : 3;
+        color_space = gray_scale ? CLRSPC_GRAY : CLRSPC_SRGB;
+        /* initialize image components */
+        memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t));
+        for (i = 0; i < numcomps; i++) {
+            cmptparm[i].prec = 8;
+            cmptparm[i].bpp = 8;
+            cmptparm[i].sgnd = 0;
+            cmptparm[i].dx = subsampling_dx;
+            cmptparm[i].dy = subsampling_dy;
+            cmptparm[i].w = w;
+            cmptparm[i].h = h;
+        }
+        /* create the image */
+        image = opj_image_create(numcomps, &cmptparm[0], color_space);
+        if (!image) {
+            fclose(IN);
+            free(table_R);
+            free(table_G);
+            free(table_B);
+            return NULL;
+        }
+
+        /* set image offset and reference grid */
+        image->x0 = parameters->image_offset_x0;
+        image->y0 = parameters->image_offset_y0;
+        image->x1 = !image->x0 ? (w - 1) * subsampling_dx + 1 : image->x0 +
+                    (w - 1) * subsampling_dx + 1;
+        image->y1 = !image->y0 ? (h - 1) * subsampling_dy + 1 : image->y0 +
+                    (h - 1) * subsampling_dy + 1;
+
+        /* set image data */
+
+        RGB = (unsigned char *) malloc(W * H * sizeof(unsigned char));
+
+        if (fread(RGB, sizeof(unsigned char), W * H, IN) != W * H) {
+            free(table_R);
+            free(table_G);
+            free(table_B);
+            free(RGB);
+            opj_image_destroy(image);
+            fprintf(stderr,
+                    "\nError: fread return a number of element different from the expected.\n");
+            return NULL;
+        }
+        if (gray_scale) {
+            index = 0;
+            for (j = 0; j < W * H; j++) {
+                if ((j % W < W - 1 && Info_h.biWidth % 2) || !(Info_h.biWidth % 2)) {
+                    image->comps[0].data[index] =
+                        table_R[RGB[W * H - ((j) / (W) + 1) * W + (j) % (W)]];
+                    index++;
+                }
+            }
+
+        } else {
+            index = 0;
+            for (j = 0; j < W * H; j++) {
+                if ((j % W < W - 1 && Info_h.biWidth % 2)
+                        || !(Info_h.biWidth % 2)) {
+                    unsigned char pixel_index =
+                        RGB[W * H - ((j) / (W) + 1) * W + (j) % (W)];
+                    image->comps[0].data[index] = table_R[pixel_index];
+                    image->comps[1].data[index] = table_G[pixel_index];
+                    image->comps[2].data[index] = table_B[pixel_index];
+                    index++;
+                }
+            }
+        }
+        free(RGB);
+        free(table_R);
+        free(table_G);
+        free(table_B);
+    }/* RGB8 */
+    else if (Info_h.biBitCount == 8 && Info_h.biCompression == 1) { /*RLE8*/
+        unsigned char *pix, *beyond;
+        int *gray, *red, *green, *blue;
+        unsigned int x, y, max;
+        int i, c, c1;
+        unsigned char uc;
+
+        if (Info_h.biClrUsed == 0) {
+            Info_h.biClrUsed = 256;
+        } else if (Info_h.biClrUsed > 256) {
+            Info_h.biClrUsed = 256;
+        }
+
+        table_R = (unsigned char *) malloc(256 * sizeof(unsigned char));
+        table_G = (unsigned char *) malloc(256 * sizeof(unsigned char));
+        table_B = (unsigned char *) malloc(256 * sizeof(unsigned char));
+
+        has_color = 0;
+        for (j = 0; j < Info_h.biClrUsed; j++) {
+            table_B[j] = (unsigned char)getc(IN);
+            table_G[j] = (unsigned char)getc(IN);
+            table_R[j] = (unsigned char)getc(IN);
+            getc(IN);
+            has_color += !(table_R[j] == table_G[j] && table_R[j] == table_B[j]);
+        }
+
+        if (has_color) {
+            gray_scale = 0;
+        }
+
+        numcomps = gray_scale ? 1 : 3;
+        color_space = gray_scale ? CLRSPC_GRAY : CLRSPC_SRGB;
+        /* initialize image components */
+        memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t));
+        for (i = 0; i < numcomps; i++) {
+            cmptparm[i].prec = 8;
+            cmptparm[i].bpp = 8;
+            cmptparm[i].sgnd = 0;
+            cmptparm[i].dx = subsampling_dx;
+            cmptparm[i].dy = subsampling_dy;
+            cmptparm[i].w = w;
+            cmptparm[i].h = h;
+        }
+        /* create the image */
+        image = opj_image_create(numcomps, &cmptparm[0], color_space);
+        if (!image) {
+            fclose(IN);
+            free(table_R);
+            free(table_G);
+            free(table_B);
+            return NULL;
+        }
+
+        /* set image offset and reference grid */
+        image->x0 = parameters->image_offset_x0;
+        image->y0 = parameters->image_offset_y0;
+        image->x1 = !image->x0 ? (w - 1) * subsampling_dx + 1 : image->x0 + (w
+                    - 1) * subsampling_dx + 1;
+        image->y1 = !image->y0 ? (h - 1) * subsampling_dy + 1 : image->y0 + (h
+                    - 1) * subsampling_dy + 1;
+
+        /* set image data */
+
+        /* Place the cursor at the beginning of the image information */
+        fseek(IN, 0, SEEK_SET);
+        fseek(IN, File_h.bfOffBits, SEEK_SET);
+
+        W = Info_h.biWidth;
+        H = Info_h.biHeight;
+        RGB = (unsigned char *) calloc(1, W * H * sizeof(unsigned char));
+        beyond = RGB + W * H;
+        pix = beyond - W;
+        x = y = 0;
+
+        while (y < H) {
+            c = getc(IN);
+
+            if (c) {
+                c1 = getc(IN);
+
+                for (i = 0; i < c && x < W && pix < beyond; i++, x++, pix++) {
+                    *pix = (unsigned char)c1;
+                }
+            } else {
+                c = getc(IN);
+
+                if (c == 0x00) { /* EOL */
+                    x = 0;
+                    ++y;
+                    pix = RGB + x + (H - y - 1) * W;
+                } else if (c == 0x01) { /* EOP */
+                    break;
+                } else if (c == 0x02) { /* MOVE by dxdy */
+                    c = getc(IN);
+                    x += c;
+                    c = getc(IN);
+                    y += c;
+                    pix = RGB + (H - y - 1) * W + x;
+                } else { /* 03 .. 255 */
+                    i = 0;
+                    for (; i < c && x < W && pix < beyond; i++, x++, pix++) {
+                        c1 = getc(IN);
+                        *pix = (unsigned char)c1;
+                    }
+                    if (c & 1) { /* skip padding byte */
+                        getc(IN);
+                    }
+                }
+            }
+        }/* while() */
+
+        if (gray_scale) {
+            gray = image->comps[0].data;
+            pix = RGB;
+            max = W * H;
+
+            while (max--) {
+                uc = *pix++;
+
+                *gray++ = table_R[uc];
+            }
+        } else {
+            /*int *red, *green, *blue;*/
+
+            red = image->comps[0].data;
+            green = image->comps[1].data;
+            blue = image->comps[2].data;
+            pix = RGB;
+            max = W * H;
+
+            while (max--) {
+                uc = *pix++;
+
+                *red++ = table_R[uc];
+                *green++ = table_G[uc];
+                *blue++ = table_B[uc];
+            }
+        }
+        free(RGB);
+        free(table_R);
+        free(table_G);
+        free(table_B);
+    }/* RLE8 */
+    else {
+        fprintf(stderr,
+                "Other system than 24 bits/pixels or 8 bits (no RLE coding) "
+                "is not yet implemented [%d]\n", Info_h.biBitCount);
+    }
+    fclose(IN);
+    return image;
 }
 
-int imagetobmp(opj_image_t * image, const char *outfile) {
-       int w, h;
-       int i, pad;
-       FILE *fdest = NULL;
-       int adjustR, adjustG, adjustB;
+int imagetobmp(opj_image_t * image, const char *outfile)
+{
+    int w, h;
+    int i, pad;
+    FILE *fdest = NULL;
+    int adjustR, adjustG, adjustB;
 
-  if (image->comps[0].prec < 8) {
-    fprintf(stderr, "Unsupported precision: %d\n", image->comps[0].prec);
-    return 1;
-  }
-       if (image->numcomps >= 3 && image->comps[0].dx == image->comps[1].dx
-               && image->comps[1].dx == image->comps[2].dx
-               && image->comps[0].dy == image->comps[1].dy
-               && image->comps[1].dy == image->comps[2].dy
-               && image->comps[0].prec == image->comps[1].prec
-               && image->comps[1].prec == image->comps[2].prec) {
-               
-               /* -->> -->> -->> -->>    
-               24 bits color       
-               <<-- <<-- <<-- <<-- */
-           
-               fdest = fopen(outfile, "wb");
-               if (!fdest) {
-                       fprintf(stderr, "ERROR -> failed to open %s for writing\n", outfile);
-                       return 1;
-               }
-           
-               w = image->comps[0].w;      
-               h = image->comps[0].h;
-           
-               fprintf(fdest, "BM");
-           
-               /* FILE HEADER */
-               /* ------------- */
-               fprintf(fdest, "%c%c%c%c",
-                       (unsigned char) (h * w * 3 + 3 * h * (w % 2) + 54) & 0xff,
-                       (unsigned char) ((h * w * 3 + 3 * h * (w % 2) + 54)     >> 8) & 0xff,
-                       (unsigned char) ((h * w * 3 + 3 * h * (w % 2) + 54)     >> 16) & 0xff,
-                       (unsigned char) ((h * w * 3 + 3 * h * (w % 2) + 54)     >> 24) & 0xff);
-               fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
-               fprintf(fdest, "%c%c%c%c", (54) & 0xff, ((54) >> 8) & 0xff,((54) >> 16) & 0xff, ((54) >> 24) & 0xff);
-           
-               /* INFO HEADER   */
-               /* ------------- */
-               fprintf(fdest, "%c%c%c%c", (40) & 0xff, ((40) >> 8) & 0xff,     ((40) >> 16) & 0xff, ((40) >> 24) & 0xff);
-               fprintf(fdest, "%c%c%c%c", (unsigned char) ((w) & 0xff),
-                       (unsigned char) ((w) >> 8) & 0xff,
-                       (unsigned char) ((w) >> 16) & 0xff,
-                       (unsigned char) ((w) >> 24) & 0xff);
-               fprintf(fdest, "%c%c%c%c", (unsigned char) ((h) & 0xff),
-                       (unsigned char) ((h) >> 8) & 0xff,
-                       (unsigned char) ((h) >> 16) & 0xff,
-                       (unsigned char) ((h) >> 24) & 0xff);
-               fprintf(fdest, "%c%c", (1) & 0xff, ((1) >> 8) & 0xff);
-               fprintf(fdest, "%c%c", (24) & 0xff, ((24) >> 8) & 0xff);
-               fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
-               fprintf(fdest, "%c%c%c%c", (unsigned char) (3 * h * w + 3 * h * (w % 2)) & 0xff,
-                       (unsigned char) ((h * w * 3 + 3 * h * (w % 2)) >> 8) & 0xff,
-                       (unsigned char) ((h * w * 3 + 3 * h * (w % 2)) >> 16) & 0xff,
-                       (unsigned char) ((h * w * 3 + 3 * h * (w % 2)) >> 24) & 0xff);
-               fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff, ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
-               fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff, ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
-               fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
-               fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
-           
-               if (image->comps[0].prec > 8) {
-                       adjustR = image->comps[0].prec - 8;
-                       printf("BMP CONVERSION: Truncating component 0 from %d bits to 8 bits\n", image->comps[0].prec);
-               }
-               else 
-                       adjustR = 0;
-               if (image->comps[1].prec > 8) {
-                       adjustG = image->comps[1].prec - 8;
-                       printf("BMP CONVERSION: Truncating component 1 from %d bits to 8 bits\n", image->comps[1].prec);
-               }
-               else 
-                       adjustG = 0;
-               if (image->comps[2].prec > 8) {
-                       adjustB = image->comps[2].prec - 8;
-                       printf("BMP CONVERSION: Truncating component 2 from %d bits to 8 bits\n", image->comps[2].prec);
-               }
-               else 
-                       adjustB = 0;
-
-               for (i = 0; i < w * h; i++) {
-                       unsigned char rc, gc, bc;
-                       int r, g, b;
-                                                       
-                       r = image->comps[0].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
-                       r += (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
-                       r = ((r >> adjustR)+((r >> (adjustR-1))%2));
-                       if(r > 255) r = 255; else if(r < 0) r = 0;
-                       rc = (unsigned char)r;
-
-                       g = image->comps[1].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
-                       g += (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
-                       g = ((g >> adjustG)+((g >> (adjustG-1))%2));
-                       if(g > 255) g = 255; else if(g < 0) g = 0;
-                       gc = (unsigned char)g;
-
-                       b = image->comps[2].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
-                       b += (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
-                       b = ((b >> adjustB)+((b >> (adjustB-1))%2));
-                       if(b > 255) b = 255; else if(b < 0) b = 0;
-                       bc = (unsigned char)b;
-
-                       fprintf(fdest, "%c%c%c", bc, gc, rc);
-                       
-                       if ((i + 1) % w == 0) {
-                               for (pad = (3 * w) % 4 ? 4 - (3 * w) % 4 : 0; pad > 0; pad--)   /* ADD */
-                                       fprintf(fdest, "%c", 0);
-                       }
-               }
-               fclose(fdest);
-       } else {                        /* Gray-scale */
-
-               /* -->> -->> -->> -->>
-               8 bits non code (Gray scale)
-               <<-- <<-- <<-- <<-- */
-
-               fdest = fopen(outfile, "wb");
-               w = image->comps[0].w;      
-               h = image->comps[0].h;
-           
-               fprintf(fdest, "BM");
-           
-               /* FILE HEADER */
-               /* ------------- */
-               fprintf(fdest, "%c%c%c%c", (unsigned char) (h * w + 54 + 1024 + h * (w % 2)) & 0xff,
-                       (unsigned char) ((h * w + 54 + 1024 + h * (w % 2)) >> 8) & 0xff,
-                       (unsigned char) ((h * w + 54 + 1024 + h * (w % 2)) >> 16) & 0xff,
-                       (unsigned char) ((h * w + 54 + 1024 + w * (w % 2)) >> 24) & 0xff);
-               fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
-               fprintf(fdest, "%c%c%c%c", (54 + 1024) & 0xff, ((54 + 1024) >> 8) & 0xff, 
-                       ((54 + 1024) >> 16) & 0xff,
-                       ((54 + 1024) >> 24) & 0xff);
-           
-               /* INFO HEADER */
-               /* ------------- */
-               fprintf(fdest, "%c%c%c%c", (40) & 0xff, ((40) >> 8) & 0xff,     ((40) >> 16) & 0xff, ((40) >> 24) & 0xff);
-               fprintf(fdest, "%c%c%c%c", (unsigned char) ((w) & 0xff),
-                       (unsigned char) ((w) >> 8) & 0xff,
-                       (unsigned char) ((w) >> 16) & 0xff,
-                       (unsigned char) ((w) >> 24) & 0xff);
-               fprintf(fdest, "%c%c%c%c", (unsigned char) ((h) & 0xff),
-                       (unsigned char) ((h) >> 8) & 0xff,
-                       (unsigned char) ((h) >> 16) & 0xff,
-                       (unsigned char) ((h) >> 24) & 0xff);
-               fprintf(fdest, "%c%c", (1) & 0xff, ((1) >> 8) & 0xff);
-               fprintf(fdest, "%c%c", (8) & 0xff, ((8) >> 8) & 0xff);
-               fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
-               fprintf(fdest, "%c%c%c%c", (unsigned char) (h * w + h * (w % 2)) & 0xff,
-                       (unsigned char) ((h * w + h * (w % 2)) >> 8) &  0xff,
-                       (unsigned char) ((h * w + h * (w % 2)) >> 16) & 0xff,
-                       (unsigned char) ((h * w + h * (w % 2)) >> 24) & 0xff);
-               fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff, ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
-               fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff, ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
-               fprintf(fdest, "%c%c%c%c", (256) & 0xff, ((256) >> 8) & 0xff, ((256) >> 16) & 0xff, ((256) >> 24) & 0xff);
-               fprintf(fdest, "%c%c%c%c", (256) & 0xff, ((256) >> 8) & 0xff, ((256) >> 16) & 0xff, ((256) >> 24) & 0xff);
-
-               if (image->comps[0].prec > 8) {
-                       adjustR = image->comps[0].prec - 8;
-                       printf("BMP CONVERSION: Truncating component 0 from %d bits to 8 bits\n", image->comps[0].prec);
-               }else 
-                       adjustR = 0;
-
-               for (i = 0; i < 256; i++) {
-                       fprintf(fdest, "%c%c%c%c", i, i, i, 0);
-               }
-
-               for (i = 0; i < w * h; i++) {
-                       int r;
-                       
-                       r = image->comps[0].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
-                       r += (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
-                       r = ((r >> adjustR)+((r >> (adjustR-1))%2));
-                       if(r > 255) r = 255; else if(r < 0) r = 0;
-
-                       fprintf(fdest, "%c", (unsigned char)r);
-
-                       if ((i + 1) % w == 0) {
-                               for (pad = w % 4 ? 4 - w % 4 : 0; pad > 0; pad--)       /* ADD */
-                                       fprintf(fdest, "%c", 0);
-                       }
-               }
-               fclose(fdest);
-       }
-
-       return 0;
+    if (image->comps[0].prec < 8) {
+        fprintf(stderr, "Unsupported precision: %d\n", image->comps[0].prec);
+        return 1;
+    }
+    if (image->numcomps >= 3 && image->comps[0].dx == image->comps[1].dx
+            && image->comps[1].dx == image->comps[2].dx
+            && image->comps[0].dy == image->comps[1].dy
+            && image->comps[1].dy == image->comps[2].dy
+            && image->comps[0].prec == image->comps[1].prec
+            && image->comps[1].prec == image->comps[2].prec) {
+
+        /* -->> -->> -->> -->>
+        24 bits color
+        <<-- <<-- <<-- <<-- */
+
+        fdest = fopen(outfile, "wb");
+        if (!fdest) {
+            fprintf(stderr, "ERROR -> failed to open %s for writing\n", outfile);
+            return 1;
+        }
+
+        w = image->comps[0].w;
+        h = image->comps[0].h;
+
+        fprintf(fdest, "BM");
+
+        /* FILE HEADER */
+        /* ------------- */
+        fprintf(fdest, "%c%c%c%c",
+                (unsigned char)(h * w * 3 + 3 * h * (w % 2) + 54) & 0xff,
+                (unsigned char)((h * w * 3 + 3 * h * (w % 2) + 54) >> 8) & 0xff,
+                (unsigned char)((h * w * 3 + 3 * h * (w % 2) + 54) >> 16) & 0xff,
+                (unsigned char)((h * w * 3 + 3 * h * (w % 2) + 54) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
+                ((0) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (54) & 0xff, ((54) >> 8) & 0xff, ((54) >> 16) & 0xff,
+                ((54) >> 24) & 0xff);
+
+        /* INFO HEADER   */
+        /* ------------- */
+        fprintf(fdest, "%c%c%c%c", (40) & 0xff, ((40) >> 8) & 0xff, ((40) >> 16) & 0xff,
+                ((40) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (unsigned char)((w) & 0xff),
+                (unsigned char)((w) >> 8) & 0xff,
+                (unsigned char)((w) >> 16) & 0xff,
+                (unsigned char)((w) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (unsigned char)((h) & 0xff),
+                (unsigned char)((h) >> 8) & 0xff,
+                (unsigned char)((h) >> 16) & 0xff,
+                (unsigned char)((h) >> 24) & 0xff);
+        fprintf(fdest, "%c%c", (1) & 0xff, ((1) >> 8) & 0xff);
+        fprintf(fdest, "%c%c", (24) & 0xff, ((24) >> 8) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
+                ((0) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (unsigned char)(3 * h * w + 3 * h * (w % 2)) & 0xff,
+                (unsigned char)((h * w * 3 + 3 * h * (w % 2)) >> 8) & 0xff,
+                (unsigned char)((h * w * 3 + 3 * h * (w % 2)) >> 16) & 0xff,
+                (unsigned char)((h * w * 3 + 3 * h * (w % 2)) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
+                ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
+                ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
+                ((0) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
+                ((0) >> 24) & 0xff);
+
+        if (image->comps[0].prec > 8) {
+            adjustR = image->comps[0].prec - 8;
+            printf("BMP CONVERSION: Truncating component 0 from %d bits to 8 bits\n",
+                   image->comps[0].prec);
+        } else {
+            adjustR = 0;
+        }
+        if (image->comps[1].prec > 8) {
+            adjustG = image->comps[1].prec - 8;
+            printf("BMP CONVERSION: Truncating component 1 from %d bits to 8 bits\n",
+                   image->comps[1].prec);
+        } else {
+            adjustG = 0;
+        }
+        if (image->comps[2].prec > 8) {
+            adjustB = image->comps[2].prec - 8;
+            printf("BMP CONVERSION: Truncating component 2 from %d bits to 8 bits\n",
+                   image->comps[2].prec);
+        } else {
+            adjustB = 0;
+        }
+
+        for (i = 0; i < w * h; i++) {
+            unsigned char rc, gc, bc;
+            int r, g, b;
+
+            r = image->comps[0].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
+            r += (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
+            r = ((r >> adjustR) + ((r >> (adjustR - 1)) % 2));
+            if (r > 255) {
+                r = 255;
+            } else if (r < 0) {
+                r = 0;
+            }
+            rc = (unsigned char)r;
+
+            g = image->comps[1].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
+            g += (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
+            g = ((g >> adjustG) + ((g >> (adjustG - 1)) % 2));
+            if (g > 255) {
+                g = 255;
+            } else if (g < 0) {
+                g = 0;
+            }
+            gc = (unsigned char)g;
+
+            b = image->comps[2].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
+            b += (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
+            b = ((b >> adjustB) + ((b >> (adjustB - 1)) % 2));
+            if (b > 255) {
+                b = 255;
+            } else if (b < 0) {
+                b = 0;
+            }
+            bc = (unsigned char)b;
+
+            fprintf(fdest, "%c%c%c", bc, gc, rc);
+
+            if ((i + 1) % w == 0) {
+                for (pad = (3 * w) % 4 ? 4 - (3 * w) % 4 : 0; pad > 0; pad--) { /* ADD */
+                    fprintf(fdest, "%c", 0);
+                }
+            }
+        }
+        fclose(fdest);
+    } else {            /* Gray-scale */
+
+        /* -->> -->> -->> -->>
+        8 bits non code (Gray scale)
+        <<-- <<-- <<-- <<-- */
+
+        fdest = fopen(outfile, "wb");
+        w = image->comps[0].w;
+        h = image->comps[0].h;
+
+        fprintf(fdest, "BM");
+
+        /* FILE HEADER */
+        /* ------------- */
+        fprintf(fdest, "%c%c%c%c",
+                (unsigned char)(h * w + 54 + 1024 + h * (w % 2)) & 0xff,
+                (unsigned char)((h * w + 54 + 1024 + h * (w % 2)) >> 8) & 0xff,
+                (unsigned char)((h * w + 54 + 1024 + h * (w % 2)) >> 16) & 0xff,
+                (unsigned char)((h * w + 54 + 1024 + w * (w % 2)) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
+                ((0) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (54 + 1024) & 0xff, ((54 + 1024) >> 8) & 0xff,
+                ((54 + 1024) >> 16) & 0xff,
+                ((54 + 1024) >> 24) & 0xff);
+
+        /* INFO HEADER */
+        /* ------------- */
+        fprintf(fdest, "%c%c%c%c", (40) & 0xff, ((40) >> 8) & 0xff, ((40) >> 16) & 0xff,
+                ((40) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (unsigned char)((w) & 0xff),
+                (unsigned char)((w) >> 8) & 0xff,
+                (unsigned char)((w) >> 16) & 0xff,
+                (unsigned char)((w) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (unsigned char)((h) & 0xff),
+                (unsigned char)((h) >> 8) & 0xff,
+                (unsigned char)((h) >> 16) & 0xff,
+                (unsigned char)((h) >> 24) & 0xff);
+        fprintf(fdest, "%c%c", (1) & 0xff, ((1) >> 8) & 0xff);
+        fprintf(fdest, "%c%c", (8) & 0xff, ((8) >> 8) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff, ((0) >> 16) & 0xff,
+                ((0) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (unsigned char)(h * w + h * (w % 2)) & 0xff,
+                (unsigned char)((h * w + h * (w % 2)) >> 8) &  0xff,
+                (unsigned char)((h * w + h * (w % 2)) >> 16) & 0xff,
+                (unsigned char)((h * w + h * (w % 2)) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
+                ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
+                ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (256) & 0xff, ((256) >> 8) & 0xff,
+                ((256) >> 16) & 0xff, ((256) >> 24) & 0xff);
+        fprintf(fdest, "%c%c%c%c", (256) & 0xff, ((256) >> 8) & 0xff,
+                ((256) >> 16) & 0xff, ((256) >> 24) & 0xff);
+
+        if (image->comps[0].prec > 8) {
+            adjustR = image->comps[0].prec - 8;
+            printf("BMP CONVERSION: Truncating component 0 from %d bits to 8 bits\n",
+                   image->comps[0].prec);
+        } else {
+            adjustR = 0;
+        }
+
+        for (i = 0; i < 256; i++) {
+            fprintf(fdest, "%c%c%c%c", i, i, i, 0);
+        }
+
+        for (i = 0; i < w * h; i++) {
+            int r;
+
+            r = image->comps[0].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];
+            r += (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
+            r = ((r >> adjustR) + ((r >> (adjustR - 1)) % 2));
+            if (r > 255) {
+                r = 255;
+            } else if (r < 0) {
+                r = 0;
+            }
+
+            fprintf(fdest, "%c", (unsigned char)r);
+
+            if ((i + 1) % w == 0) {
+                for (pad = w % 4 ? 4 - w % 4 : 0; pad > 0; pad--) { /* ADD */
+                    fprintf(fdest, "%c", 0);
+                }
+            }
+        }
+        fclose(fdest);
+    }
+
+    return 0;
 }
 
 /* -->> -->> -->> -->>
@@ -1209,263 +1257,280 @@ PGX IMAGE FORMAT
 
 static unsigned char readuchar(FILE * f)
 {
-  unsigned char c1;
-  if ( !fread(&c1, 1, 1, f) )
-  {
-         fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-         return 0;
-  }
-  return c1;
+    unsigned char c1;
+    if (!fread(&c1, 1, 1, f)) {
+        fprintf(stderr,
+                "\nError: fread return a number of element different from the expected.\n");
+        return 0;
+    }
+    return c1;
 }
 
 static unsigned short readushort(FILE * f, int bigendian)
 {
-  unsigned char c1, c2;
-  if ( !fread(&c1, 1, 1, f) )
-  {
-         fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-         return 0;
-  }
-  if ( !fread(&c2, 1, 1, f) )
-  {
-         fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-         return 0;
-  }
-  if (bigendian)
-    return (c1 << 8) + c2;
-  else
-    return (c2 << 8) + c1;
+    unsigned char c1, c2;
+    if (!fread(&c1, 1, 1, f)) {
+        fprintf(stderr,
+                "\nError: fread return a number of element different from the expected.\n");
+        return 0;
+    }
+    if (!fread(&c2, 1, 1, f)) {
+        fprintf(stderr,
+                "\nError: fread return a number of element different from the expected.\n");
+        return 0;
+    }
+    if (bigendian) {
+        return (c1 << 8) + c2;
+    } else {
+        return (c2 << 8) + c1;
+    }
 }
 
 static unsigned int readuint(FILE * f, int bigendian)
 {
-  unsigned char c1, c2, c3, c4;
-  if ( !fread(&c1, 1, 1, f) )
-  {
-         fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-         return 0;
-  }
-  if ( !fread(&c2, 1, 1, f) )
-  {
-         fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-         return 0;
-  }
-  if ( !fread(&c3, 1, 1, f) )
-  {
-         fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-         return 0;
-  }
-  if ( !fread(&c4, 1, 1, f) )
-  {
-         fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-         return 0;
-  }
-  if (bigendian)
-    return (c1 << 24) + (c2 << 16) + (c3 << 8) + c4;
-  else
-    return (c4 << 24) + (c3 << 16) + (c2 << 8) + c1;
+    unsigned char c1, c2, c3, c4;
+    if (!fread(&c1, 1, 1, f)) {
+        fprintf(stderr,
+                "\nError: fread return a number of element different from the expected.\n");
+        return 0;
+    }
+    if (!fread(&c2, 1, 1, f)) {
+        fprintf(stderr,
+                "\nError: fread return a number of element different from the expected.\n");
+        return 0;
+    }
+    if (!fread(&c3, 1, 1, f)) {
+        fprintf(stderr,
+                "\nError: fread return a number of element different from the expected.\n");
+        return 0;
+    }
+    if (!fread(&c4, 1, 1, f)) {
+        fprintf(stderr,
+                "\nError: fread return a number of element different from the expected.\n");
+        return 0;
+    }
+    if (bigendian) {
+        return (c1 << 24) + (c2 << 16) + (c3 << 8) + c4;
+    } else {
+        return (c4 << 24) + (c3 << 16) + (c2 << 8) + c1;
+    }
 }
 
-opj_image_t* pgxtoimage(const char *filename, opj_cparameters_t *parameters) {
-       FILE *f = NULL;
-       int w, h, prec;
-       int i, numcomps, max;
-       OPJ_COLOR_SPACE color_space;
-       opj_image_cmptparm_t cmptparm;  /* maximum of 1 component  */
-       opj_image_t * image = NULL;
-       int adjustS, ushift, dshift, force8;
-
-       char endian1,endian2,sign;
-       char signtmp[32];
-
-       char temp[32];
-       int bigendian;
-       opj_image_comp_t *comp = NULL;
-
-       numcomps = 1;
-       color_space = CLRSPC_GRAY;
-
-       memset(&cmptparm, 0, sizeof(opj_image_cmptparm_t));
-
-       max = 0;
-
-       f = fopen(filename, "rb");
-       if (!f) {
-         fprintf(stderr, "Failed to open %s for reading !\n", filename);
-         return NULL;
-       }
-
-       fseek(f, 0, SEEK_SET);
-       if( fscanf(f, "PG%[ \t]%c%c%[ \t+-]%d%[ \t]%d%[ \t]%d",temp,&endian1,&endian2,signtmp,&prec,temp,&w,temp,&h) != 9){
-               fprintf(stderr, "ERROR: Failed to read the right number of element from the fscanf() function!\n");
-               return NULL;
-       }
-
-       i=0;
-       sign='+';               
-       while (signtmp[i]!='\0') {
-               if (signtmp[i]=='-') sign='-';
-               i++;
-       }
-       
-       fgetc(f);
-       if (endian1=='M' && endian2=='L') {
-               bigendian = 1;
-       } else if (endian2=='M' && endian1=='L') {
-               bigendian = 0;
-       } else {
-               fprintf(stderr, "Bad pgx header, please check input file\n");
-               return NULL;
-       }
-
-       /* initialize image component */
-
-       cmptparm.x0 = parameters->image_offset_x0;
-       cmptparm.y0 = parameters->image_offset_y0;
-       cmptparm.w = !cmptparm.x0 ? (w - 1) * parameters->subsampling_dx + 1 : cmptparm.x0 + (w - 1) * parameters->subsampling_dx + 1;
-       cmptparm.h = !cmptparm.y0 ? (h - 1) * parameters->subsampling_dy + 1 : cmptparm.y0 + (h - 1) * parameters->subsampling_dy + 1;
-       
-       if (sign == '-') {
-               cmptparm.sgnd = 1;
-       } else {
-               cmptparm.sgnd = 0;
-       }
-       if(prec < 8)
-   {
-       force8 = 1;
-       ushift = 8 - prec; dshift = prec - ushift;
-       if(cmptparm.sgnd) adjustS = (1<<(prec - 1)); else adjustS = 0;
-       cmptparm.sgnd = 0;
-       prec = 8;
-   }
-       else ushift = dshift = force8 = adjustS = 0;
-
-       cmptparm.prec = prec;
-       cmptparm.bpp = prec;
-       cmptparm.dx = parameters->subsampling_dx;
-       cmptparm.dy = parameters->subsampling_dy;
-       
-       /* create the image */
-       image = opj_image_create(numcomps, &cmptparm, color_space);
-       if(!image) {
-               fclose(f);
-               return NULL;
-       }
-       /* set image offset and reference grid */
-       image->x0 = cmptparm.x0;
-       image->y0 = cmptparm.x0;
-       image->x1 = cmptparm.w;
-       image->y1 = cmptparm.h;
-
-       /* set image data */
-
-       comp = &image->comps[0];
-
-       for (i = 0; i < w * h; i++) {
-               int v;
-               if(force8)
-          {
-               v = readuchar(f) + adjustS;
-               v = (v<<ushift) + (v>>dshift);
-               comp->data[i] = (unsigned char)v;
-
-               if(v > max) max = v;
-
-               continue;
-          }
-               if (comp->prec == 8) {
-                       if (!comp->sgnd) {
-                               v = readuchar(f);
-                       } else {
-                               v = (char) readuchar(f);
-                       }
-               } else if (comp->prec <= 16) {
-                       if (!comp->sgnd) {
-                               v = readushort(f, bigendian);
-                       } else {
-                               v = (short) readushort(f, bigendian);
-                       }
-               } else {
-                       if (!comp->sgnd) {
-                               v = readuint(f, bigendian);
-                       } else {
-                               v = (int) readuint(f, bigendian);
-                       }
-               }
-               if (v > max)
-                       max = v;
-               comp->data[i] = v;
-       }
-       fclose(f);
-       comp->bpp = int_floorlog2(max) + 1;
-
-       return image;
+opj_image_t* pgxtoimage(const char *filename, opj_cparameters_t *parameters)
+{
+    FILE *f = NULL;
+    int w, h, prec;
+    int i, numcomps, max;
+    OPJ_COLOR_SPACE color_space;
+    opj_image_cmptparm_t cmptparm;  /* maximum of 1 component  */
+    opj_image_t * image = NULL;
+    int adjustS, ushift, dshift, force8;
+
+    char endian1, endian2, sign;
+    char signtmp[32];
+
+    char temp[32];
+    int bigendian;
+    opj_image_comp_t *comp = NULL;
+
+    numcomps = 1;
+    color_space = CLRSPC_GRAY;
+
+    memset(&cmptparm, 0, sizeof(opj_image_cmptparm_t));
+
+    max = 0;
+
+    f = fopen(filename, "rb");
+    if (!f) {
+        fprintf(stderr, "Failed to open %s for reading !\n", filename);
+        return NULL;
+    }
+
+    fseek(f, 0, SEEK_SET);
+    if (fscanf(f, "PG%[ \t]%c%c%[ \t+-]%d%[ \t]%d%[ \t]%d", temp, &endian1,
+               &endian2, signtmp, &prec, temp, &w, temp, &h) != 9) {
+        fprintf(stderr,
+                "ERROR: Failed to read the right number of element from the fscanf() function!\n");
+        return NULL;
+    }
+
+    i = 0;
+    sign = '+';
+    while (signtmp[i] != '\0') {
+        if (signtmp[i] == '-') {
+            sign = '-';
+        }
+        i++;
+    }
+
+    fgetc(f);
+    if (endian1 == 'M' && endian2 == 'L') {
+        bigendian = 1;
+    } else if (endian2 == 'M' && endian1 == 'L') {
+        bigendian = 0;
+    } else {
+        fprintf(stderr, "Bad pgx header, please check input file\n");
+        return NULL;
+    }
+
+    /* initialize image component */
+
+    cmptparm.x0 = parameters->image_offset_x0;
+    cmptparm.y0 = parameters->image_offset_y0;
+    cmptparm.w = !cmptparm.x0 ? (w - 1) * parameters->subsampling_dx + 1 :
+                 cmptparm.x0 + (w - 1) * parameters->subsampling_dx + 1;
+    cmptparm.h = !cmptparm.y0 ? (h - 1) * parameters->subsampling_dy + 1 :
+                 cmptparm.y0 + (h - 1) * parameters->subsampling_dy + 1;
+
+    if (sign == '-') {
+        cmptparm.sgnd = 1;
+    } else {
+        cmptparm.sgnd = 0;
+    }
+    if (prec < 8) {
+        force8 = 1;
+        ushift = 8 - prec;
+        dshift = prec - ushift;
+        if (cmptparm.sgnd) {
+            adjustS = (1 << (prec - 1));
+        } else {
+            adjustS = 0;
+        }
+        cmptparm.sgnd = 0;
+        prec = 8;
+    } else {
+        ushift = dshift = force8 = adjustS = 0;
+    }
+
+    cmptparm.prec = prec;
+    cmptparm.bpp = prec;
+    cmptparm.dx = parameters->subsampling_dx;
+    cmptparm.dy = parameters->subsampling_dy;
+
+    /* create the image */
+    image = opj_image_create(numcomps, &cmptparm, color_space);
+    if (!image) {
+        fclose(f);
+        return NULL;
+    }
+    /* set image offset and reference grid */
+    image->x0 = cmptparm.x0;
+    image->y0 = cmptparm.x0;
+    image->x1 = cmptparm.w;
+    image->y1 = cmptparm.h;
+
+    /* set image data */
+
+    comp = &image->comps[0];
+
+    for (i = 0; i < w * h; i++) {
+        int v;
+        if (force8) {
+            v = readuchar(f) + adjustS;
+            v = (v << ushift) + (v >> dshift);
+            comp->data[i] = (unsigned char)v;
+
+            if (v > max) {
+                max = v;
+            }
+
+            continue;
+        }
+        if (comp->prec == 8) {
+            if (!comp->sgnd) {
+                v = readuchar(f);
+            } else {
+                v = (char) readuchar(f);
+            }
+        } else if (comp->prec <= 16) {
+            if (!comp->sgnd) {
+                v = readushort(f, bigendian);
+            } else {
+                v = (short) readushort(f, bigendian);
+            }
+        } else {
+            if (!comp->sgnd) {
+                v = readuint(f, bigendian);
+            } else {
+                v = (int) readuint(f, bigendian);
+            }
+        }
+        if (v > max) {
+            max = v;
+        }
+        comp->data[i] = v;
+    }
+    fclose(f);
+    comp->bpp = int_floorlog2(max) + 1;
+
+    return image;
 }
 
-int imagetopgx(opj_image_t * image, const char *outfile) {
-       int w, h;
-       int i, j, compno;
-       FILE *fdest = NULL;
+int imagetopgx(opj_image_t * image, const char *outfile)
+{
+    int w, h;
+    int i, j, compno;
+    FILE *fdest = NULL;
+
+    for (compno = 0; compno < image->numcomps; compno++) {
+        opj_image_comp_t *comp = &image->comps[compno];
+        char bname[256]; /* buffer for name */
+        char *name = bname; /* pointer */
+        int nbytes = 0;
+        size_t res;
+        const size_t olen = strlen(outfile);
+        const size_t dotpos = olen - 4;
+        const size_t total = dotpos + 1 + 1 + 4; /* '-' + '[1-3]' + '.pgx' */
+        if (outfile[dotpos] != '.') {
+            /* `pgx` was recognized but there is no dot at expected position */
+            fprintf(stderr, "ERROR -> Impossible happen.");
+            return 1;
+        }
+        if (total > 256) {
+            name = (char*)malloc(total + 1);
+        }
+        strncpy(name, outfile, dotpos);
+        /*if (image->numcomps > 1) {*/
+        sprintf(name + dotpos, "_%d.pgx", compno);
+        /*} else {
+            strcpy(name+dotpos, ".pgx");
+        }*/
+        fdest = fopen(name, "wb");
+        if (!fdest) {
+            fprintf(stderr, "ERROR -> failed to open %s for writing\n", name);
+            return 1;
+        }
+        /* don't need name anymore */
+        if (total > 256) {
+            free(name);
+        }
+
+        w = image->comps[compno].w;
+        h = image->comps[compno].h;
 
-       for (compno = 0; compno < image->numcomps; compno++) {
-               opj_image_comp_t *comp = &image->comps[compno];
-               char bname[256]; /* buffer for name */
-    char *name = bname; /* pointer */
-    int nbytes = 0;
-    size_t res;
-    const size_t olen = strlen(outfile);
-    const size_t dotpos = olen - 4;
-    const size_t total = dotpos + 1 + 1 + 4; /* '-' + '[1-3]' + '.pgx' */
-    if( outfile[dotpos] != '.' ) {
-      /* `pgx` was recognized but there is no dot at expected position */
-      fprintf(stderr, "ERROR -> Impossible happen." );
-      return 1;
-      }
-    if( total > 256 ) {
-      name = (char*)malloc(total+1);
-      }
-    strncpy(name, outfile, dotpos);
-               /*if (image->numcomps > 1) {*/
-                       sprintf(name+dotpos, "_%d.pgx", compno);
-               /*} else {
-                       strcpy(name+dotpos, ".pgx");
-               }*/
-               fdest = fopen(name, "wb");
-               if (!fdest) {
-                       fprintf(stderr, "ERROR -> failed to open %s for writing\n", name);
-                       return 1;
-               }
-    /* don't need name anymore */
-    if( total > 256 ) {
-      free(name);
-      }
-
-               w = image->comps[compno].w;
-               h = image->comps[compno].h;
-           
-               fprintf(fdest, "PG ML %c %d %d %d\n", comp->sgnd ? '-' : '+', comp->prec, w, h);
-               if (comp->prec <= 8) {
-                       nbytes = 1;
-               } else if (comp->prec <= 16) {
-                       nbytes = 2;
-               } else {
-                       nbytes = 4;
-               }
-               for (i = 0; i < w * h; i++) {
-                       int v = image->comps[compno].data[i];
-                       for (j = nbytes - 1; j >= 0; j--) {
-                               char byte = (char) (v >> (j * 8));
-                               res = fwrite(&byte, 1, 1, fdest);
-        if( res < 1 ) {
-          fprintf(stderr, "failed to write 1 byte for %s\n", name);
-          return 1;
-        }
-                       }
-               }
-               fclose(fdest);
-       }
-
-       return 0;
+        fprintf(fdest, "PG ML %c %d %d %d\n", comp->sgnd ? '-' : '+', comp->prec, w, h);
+        if (comp->prec <= 8) {
+            nbytes = 1;
+        } else if (comp->prec <= 16) {
+            nbytes = 2;
+        } else {
+            nbytes = 4;
+        }
+        for (i = 0; i < w * h; i++) {
+            int v = image->comps[compno].data[i];
+            for (j = nbytes - 1; j >= 0; j--) {
+                char byte = (char)(v >> (j * 8));
+                res = fwrite(&byte, 1, 1, fdest);
+                if (res < 1) {
+                    fprintf(stderr, "failed to write 1 byte for %s\n", name);
+                    return 1;
+                }
+            }
+        }
+        fclose(fdest);
+    }
+
+    return 0;
 }
 
 /* -->> -->> -->> -->>
@@ -1474,8 +1539,7 @@ PNM IMAGE FORMAT
 
 <<-- <<-- <<-- <<-- */
 
-struct pnm_header
-{
+struct pnm_header {
     int width, height, maxval, depth, format;
     char rgb, rgba, gray, graya, bw;
     char ok;
@@ -1483,12 +1547,16 @@ struct pnm_header
 
 static char *skip_white(char *s)
 {
-    while(*s)
-   {
-    if(*s == '\n' || *s == '\r') return NULL;
-    if(isspace(*s)) { ++s; continue; }
-    return s;
-   }
+    while (*s) {
+        if (*s == '\n' || *s == '\r') {
+            return NULL;
+        }
+        if (isspace(*s)) {
+            ++s;
+            continue;
+        }
+        return s;
+    }
     return NULL;
 }
 
@@ -1497,18 +1565,25 @@ static char *skip_int(char *start, int *out_n)
     char *s;
     char c;
 
-    *out_n = 0; s = start;
+    *out_n = 0;
+    s = start;
 
     s = skip_white(start);
-    if(s == NULL) return NULL;
+    if (s == NULL) {
+        return NULL;
+    }
     start = s;
 
-    while(*s)
-   {
-    if( !isdigit(*s)) break;
-    ++s;
-   }
-    c = *s; *s = 0; *out_n = atoi(start); *s = c;
+    while (*s) {
+        if (!isdigit(*s)) {
+            break;
+        }
+        ++s;
+    }
+    c = *s;
+    *s = 0;
+    *out_n = atoi(start);
+    *s = c;
     return s;
 }
 
@@ -1518,15 +1593,22 @@ static char *skip_idf(char *start, char out_idf[256])
     char c;
 
     s = skip_white(start);
-    if(s == NULL) return NULL;
+    if (s == NULL) {
+        return NULL;
+    }
     start = s;
 
-    while(*s)
-   {
-    if(isalpha(*s) || *s == '_') { ++s; continue; }
-    break;
-   }
-    c = *s; *s = 0; strncpy(out_idf, start, 255); *s = c;
+    while (*s) {
+        if (isalpha(*s) || *s == '_') {
+            ++s;
+            continue;
+        }
+        break;
+    }
+    c = *s;
+    *s = 0;
+    strncpy(out_idf, start, 255);
+    *s = c;
     return s;
 }
 
@@ -1537,199 +1619,247 @@ static void read_pnm_header(FILE *reader, struct pnm_header *ph)
     char idf[256], type[256];
     char line[256];
 
-    if (fgets(line, 250, reader) == NULL)
-    {
-       fprintf(stderr,"\nWARNING: fgets return a NULL value");
-       return;
+    if (fgets(line, 250, reader) == NULL) {
+        fprintf(stderr, "\nWARNING: fgets return a NULL value");
+        return;
+    }
+
+    if (line[0] != 'P') {
+        fprintf(stderr, "read_pnm_header:PNM:magic P missing\n");
+        return;
+    }
+    format = atoi(line + 1);
+    if (format < 1 || format > 7) {
+        fprintf(stderr, "read_pnm_header:magic format %d invalid\n", format);
+        return;
+    }
+    ph->format = format;
+    ttype = end = have_wh = 0;
+
+    while (fgets(line, 250, reader)) {
+        if (*line == '#') {
+            continue;
+        }
+
+        s = line;
+
+        if (format == 7) {
+            s = skip_idf(s, idf);
+
+            if (s == NULL || *s == 0) {
+                return;
+            }
+
+            if (strcmp(idf, "ENDHDR") == 0) {
+                end = 1;
+                break;
+            }
+            if (strcmp(idf, "WIDTH") == 0) {
+                s = skip_int(s, &ph->width);
+                if (s == NULL || *s == 0) {
+                    return;
+                }
+
+                continue;
+            }
+            if (strcmp(idf, "HEIGHT") == 0) {
+                s = skip_int(s, &ph->height);
+                if (s == NULL || *s == 0) {
+                    return;
+                }
+
+                continue;
+            }
+            if (strcmp(idf, "DEPTH") == 0) {
+                s = skip_int(s, &ph->depth);
+                if (s == NULL || *s == 0) {
+                    return;
+                }
+
+                continue;
+            }
+            if (strcmp(idf, "MAXVAL") == 0) {
+                s = skip_int(s, &ph->maxval);
+                if (s == NULL || *s == 0) {
+                    return;
+                }
+
+                continue;
+            }
+            if (strcmp(idf, "TUPLTYPE") == 0) {
+                s = skip_idf(s, type);
+                if (s == NULL || *s == 0) {
+                    return;
+                }
+
+                if (strcmp(type, "BLACKANDWHITE") == 0) {
+                    ph->bw = 1;
+                    ttype = 1;
+                    continue;
+                }
+                if (strcmp(type, "GRAYSCALE") == 0) {
+                    ph->gray = 1;
+                    ttype = 1;
+                    continue;
+                }
+                if (strcmp(type, "GRAYSCALE_ALPHA") == 0) {
+                    ph->graya = 1;
+                    ttype = 1;
+                    continue;
+                }
+                if (strcmp(type, "RGB") == 0) {
+                    ph->rgb = 1;
+                    ttype = 1;
+                    continue;
+                }
+                if (strcmp(type, "RGB_ALPHA") == 0) {
+                    ph->rgba = 1;
+                    ttype = 1;
+                    continue;
+                }
+                fprintf(stderr, "read_pnm_header:unknown P7 TUPLTYPE %s\n", type);
+                return;
+            }
+            fprintf(stderr, "read_pnm_header:unknown P7 idf %s\n", idf);
+            return;
+        } /* if(format == 7) */
+
+        if (!have_wh) {
+            s = skip_int(s, &ph->width);
+
+            s = skip_int(s, &ph->height);
+
+            have_wh = 1;
+
+            if (format == 1 || format == 4) {
+                break;
+            }
+
+            continue;
+        }
+        if (format == 2 || format == 3 || format == 5 || format == 6) {
+            /* P2, P3, P5, P6: */
+            s = skip_int(s, &ph->maxval);
+
+            if (ph->maxval > 65535) {
+                return;
+            }
+        }
+        break;
+    }/* while(fgets( ) */
+    if (format == 2 || format == 3 || format > 4) {
+        if (ph->maxval < 1 || ph->maxval > 65535) {
+            return;
+        }
+    }
+    if (ph->width < 1 || ph->height < 1) {
+        return;
     }
 
-    if(line[0] != 'P')
-   {
-    fprintf(stderr,"read_pnm_header:PNM:magic P missing\n"); return;
-   }
-    format = atoi(line + 1);
-    if(format < 1 || format > 7)
-   {
-    fprintf(stderr,"read_pnm_header:magic format %d invalid\n", format);
-    return;
-   }
-    ph->format = format;
-    ttype = end = have_wh = 0;
+    if (format == 7) {
+        if (!end) {
+            fprintf(stderr, "read_pnm_header:P7 without ENDHDR\n");
+            return;
+        }
+        if (ph->depth < 1 || ph->depth > 4) {
+            return;
+        }
 
-    while(fgets(line, 250, reader))
-   {
-    if(*line == '#') continue;
-
-    s = line;
-
-    if(format == 7)
-  {
-    s = skip_idf(s, idf);
-
-    if(s == NULL || *s == 0) return;
-
-    if(strcmp(idf, "ENDHDR") == 0)
- {
-    end = 1; break;
- }
-    if(strcmp(idf, "WIDTH") == 0)
- {
-    s = skip_int(s, &ph->width);
-    if(s == NULL || *s == 0) return;
-
-    continue;
- }
-    if(strcmp(idf, "HEIGHT") == 0)
- {
-    s = skip_int(s, &ph->height);
-    if(s == NULL || *s == 0) return;
-
-    continue;
- }
-    if(strcmp(idf, "DEPTH") == 0)
- {
-    s = skip_int(s, &ph->depth);
-    if(s == NULL || *s == 0) return;
-
-    continue;
- }
-    if(strcmp(idf, "MAXVAL") == 0)
- {
-    s = skip_int(s, &ph->maxval);
-    if(s == NULL || *s == 0) return;
-
-    continue;
- }
-    if(strcmp(idf, "TUPLTYPE") == 0)
- {
-    s = skip_idf(s, type);
-    if(s == NULL || *s == 0) return;
-
-        if(strcmp(type, "BLACKANDWHITE") == 0)
-       {
-        ph->bw = 1; ttype = 1; continue;
-       }
-        if(strcmp(type, "GRAYSCALE") == 0)
-       {
-        ph->gray = 1; ttype = 1; continue;
-       }
-        if(strcmp(type, "GRAYSCALE_ALPHA") == 0)
-       {
-        ph->graya = 1; ttype = 1; continue;
-       }
-        if(strcmp(type, "RGB") == 0)
-       {
-        ph->rgb = 1; ttype = 1; continue;
-       }
-        if(strcmp(type, "RGB_ALPHA") == 0)
-       {
-        ph->rgba = 1; ttype = 1; continue;
-       }
-    fprintf(stderr,"read_pnm_header:unknown P7 TUPLTYPE %s\n",type);
-    return;
- }
-    fprintf(stderr,"read_pnm_header:unknown P7 idf %s\n",idf);
-    return;
-  } /* if(format == 7) */
-
-    if( !have_wh)
-  {
-    s = skip_int(s, &ph->width);
-
-    s = skip_int(s, &ph->height);
-
-    have_wh = 1;
-
-    if(format == 1 || format == 4) break;
-
-    continue;
-  }
-    if(format == 2 || format == 3 || format == 5 || format == 6)
-  {
-/* P2, P3, P5, P6: */
-    s = skip_int(s, &ph->maxval);
-
-    if(ph->maxval > 65535) return;
-  }
-    break;
-   }/* while(fgets( ) */
-    if(format == 2 || format == 3 || format > 4)
-   {
-    if(ph->maxval < 1 || ph->maxval > 65535) return;
-   }
-    if(ph->width < 1 || ph->height < 1) return;
-
-    if(format == 7)
-   {
-    if(!end)
-  {
-    fprintf(stderr,"read_pnm_header:P7 without ENDHDR\n"); return;
-  }
-    if(ph->depth < 1 || ph->depth > 4) return;
-
-    if(ph->width && ph->height && ph->depth & ph->maxval && ttype)
-     ph->ok = 1;
-   }
-    else
-   {
-    if(format != 1 && format != 4)
-  {
-    if(ph->width && ph->height && ph->maxval) ph->ok = 1;
-  }
-    else
-  {
-    if(ph->width && ph->height) ph->ok = 1;
-    ph->maxval = 255;
-  }
-   }
+        if (ph->width && ph->height && ph->depth & ph->maxval && ttype) {
+            ph->ok = 1;
+        }
+    } else {
+        if (format != 1 && format != 4) {
+            if (ph->width && ph->height && ph->maxval) {
+                ph->ok = 1;
+            }
+        } else {
+            if (ph->width && ph->height) {
+                ph->ok = 1;
+            }
+            ph->maxval = 255;
+        }
+    }
 }
 
 static int has_prec(int val)
 {
-    if(val < 2) return 1;
-    if(val < 4) return 2;
-    if(val < 8) return 3;
-    if(val < 16) return 4;
-    if(val < 32) return 5;
-    if(val < 64) return 6;
-    if(val < 128) return 7;
-    if(val < 256) return 8;
-    if(val < 512) return 9;
-    if(val < 1024) return 10;
-    if(val < 2048) return 11;
-    if(val < 4096) return 12;
-    if(val < 8192) return 13;
-    if(val < 16384) return 14;
-    if(val < 32768) return 15;
+    if (val < 2) {
+        return 1;
+    }
+    if (val < 4) {
+        return 2;
+    }
+    if (val < 8) {
+        return 3;
+    }
+    if (val < 16) {
+        return 4;
+    }
+    if (val < 32) {
+        return 5;
+    }
+    if (val < 64) {
+        return 6;
+    }
+    if (val < 128) {
+        return 7;
+    }
+    if (val < 256) {
+        return 8;
+    }
+    if (val < 512) {
+        return 9;
+    }
+    if (val < 1024) {
+        return 10;
+    }
+    if (val < 2048) {
+        return 11;
+    }
+    if (val < 4096) {
+        return 12;
+    }
+    if (val < 8192) {
+        return 13;
+    }
+    if (val < 16384) {
+        return 14;
+    }
+    if (val < 32768) {
+        return 15;
+    }
     return 16;
 }
 
-opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters) {
-       int subsampling_dx = parameters->subsampling_dx;
-       int subsampling_dy = parameters->subsampling_dy;
-
-       FILE *fp = NULL;
-       int i, compno, numcomps, w, h, prec, format;
-       OPJ_COLOR_SPACE color_space;
-       opj_image_cmptparm_t cmptparm[4]; /* RGBA: max. 4 components */
-       opj_image_t * image = NULL;
-       struct pnm_header header_info;
-       
-       if((fp = fopen(filename, "rb")) == NULL)
-   {
-       fprintf(stderr, "pnmtoimage:Failed to open %s for reading!\n",filename);
-       return NULL;
-   }
-       memset(&header_info, 0, sizeof(struct pnm_header));
+opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters)
+{
+    int subsampling_dx = parameters->subsampling_dx;
+    int subsampling_dy = parameters->subsampling_dy;
+
+    FILE *fp = NULL;
+    int i, compno, numcomps, w, h, prec, format;
+    OPJ_COLOR_SPACE color_space;
+    opj_image_cmptparm_t cmptparm[4]; /* RGBA: max. 4 components */
+    opj_image_t * image = NULL;
+    struct pnm_header header_info;
+
+    if ((fp = fopen(filename, "rb")) == NULL) {
+        fprintf(stderr, "pnmtoimage:Failed to open %s for reading!\n", filename);
+        return NULL;
+    }
+    memset(&header_info, 0, sizeof(struct pnm_header));
 
-       read_pnm_header(fp, &header_info);
+    read_pnm_header(fp, &header_info);
 
-       if(!header_info.ok) { fclose(fp); return NULL; }
+    if (!header_info.ok) {
+        fclose(fp);
+        return NULL;
+    }
 
-       format = header_info.format;
+    format = header_info.format;
 
-    switch(format)
-   {
+    switch (format) {
     case 1: /* ascii bitmap */
     case 4: /* raw bitmap */
         numcomps = 1;
@@ -1747,18 +1877,23 @@ opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters) {
 
     case 7: /* arbitrary map */
         numcomps = header_info.depth;
-               break;
+        break;
 
-    default: fclose(fp); return NULL;
-   }
-    if(numcomps < 3)
-     color_space = CLRSPC_GRAY;/* GRAY, GRAYA */
-    else
-     color_space = CLRSPC_SRGB;/* RGB, RGBA */
+    default:
+        fclose(fp);
+        return NULL;
+    }
+    if (numcomps < 3) {
+        color_space = CLRSPC_GRAY;    /* GRAY, GRAYA */
+    } else {
+        color_space = CLRSPC_SRGB;    /* RGB, RGBA */
+    }
 
     prec = has_prec(header_info.maxval);
 
-       if(prec < 8) prec = 8;
+    if (prec < 8) {
+        prec = 8;
+    }
 
     w = header_info.width;
     h = header_info.height;
@@ -1767,685 +1902,711 @@ opj_image_t* pnmtoimage(const char *filename, opj_cparameters_t *parameters) {
 
     memset(&cmptparm[0], 0, numcomps * sizeof(opj_image_cmptparm_t));
 
-    for(i = 0; i < numcomps; i++)
-   {
-    cmptparm[i].prec = prec;
-    cmptparm[i].bpp = prec;
-    cmptparm[i].sgnd = 0;
-    cmptparm[i].dx = subsampling_dx;
-    cmptparm[i].dy = subsampling_dy;
-    cmptparm[i].w = w;
-    cmptparm[i].h = h;
-   }
+    for (i = 0; i < numcomps; i++) {
+        cmptparm[i].prec = prec;
+        cmptparm[i].bpp = prec;
+        cmptparm[i].sgnd = 0;
+        cmptparm[i].dx = subsampling_dx;
+        cmptparm[i].dy = subsampling_dy;
+        cmptparm[i].w = w;
+        cmptparm[i].h = h;
+    }
     image = opj_image_create(numcomps, &cmptparm[0], color_space);
 
-    if(!image) { fclose(fp); return NULL; }
-
-/* set image offset and reference grid */
-       image->x0 = parameters->image_offset_x0;
-       image->y0 = parameters->image_offset_y0;
-       image->x1 = parameters->image_offset_x0 + (w - 1) *     subsampling_dx + 1;
-       image->y1 = parameters->image_offset_y0 + (h - 1) *     subsampling_dy + 1;
-
-    if((format == 2) || (format == 3)) /* ascii pixmap */
-   {
-    unsigned int index;
-
-    for (i = 0; i < w * h; i++)
-  {
-    for(compno = 0; compno < numcomps; compno++)
- {
-       index = 0;
-    if (fscanf(fp, "%u", &index) != 1)
-       fprintf(stderr, "\nWARNING: fscanf return a number of element different from the expected.\n");
-
-    image->comps[compno].data[i] = (index * 255)/header_info.maxval;
- }
-  }
-   }
-    else
-    if((format == 5)
-    || (format == 6)
-    ||((format == 7)
-        && (   header_info.gray || header_info.graya
-            || header_info.rgb || header_info.rgba)))/* binary pixmap */
-   {
-    unsigned char c0, c1, one;
-
-    one = (prec < 9); 
-
-    for (i = 0; i < w * h; i++)
-  {
-    for(compno = 0; compno < numcomps; compno++)
- {
-         if ( !fread(&c0, 1, 1, fp) )
-                 fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-        if(one)
-       {
-        image->comps[compno].data[i] = c0;
-       }
-        else
-       {
-         if ( !fread(&c1, 1, 1, fp) )
-                 fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-/* netpbm: */
-               image->comps[compno].data[i] = ((c0<<8) | c1);
-       }
- }
-  }
-   }
-    else
-    if(format == 1) /* ascii bitmap */
-   {
-    for (i = 0; i < w * h; i++)
-  {
-    unsigned int index;
-
-    if ( fscanf(fp, "%u", &index) != 1)
-       fprintf(stderr, "\nWARNING: fscanf return a number of element different from the expected.\n");
-
-    image->comps[0].data[i] = (index?0:255);
-  }
-   }
-    else
-    if(format == 4)
-   {
-    int x, y, bit;
-    unsigned char uc;
+    if (!image) {
+        fclose(fp);
+        return NULL;
+    }
+
+    /* set image offset and reference grid */
+    image->x0 = parameters->image_offset_x0;
+    image->y0 = parameters->image_offset_y0;
+    image->x1 = parameters->image_offset_x0 + (w - 1) * subsampling_dx + 1;
+    image->y1 = parameters->image_offset_y0 + (h - 1) * subsampling_dy + 1;
 
-    i = 0;
-    for(y = 0; y < h; ++y)
-  {
-    bit = -1; uc = 0;
-
-    for(x = 0; x < w; ++x)
- {
-        if(bit == -1)
-       {
-        bit = 7;
-        uc = (unsigned char)getc(fp);
-       }
-    image->comps[0].data[i] = (((uc>>bit) & 1)?0:255);
-    --bit; ++i;
- }
-  }
-   }
-       else
-       if((format == 7 && header_info.bw)) /*MONO*/
-   {
-       unsigned char uc;
-
-       for(i = 0; i < w * h; ++i)
-  {
-         if ( !fread(&uc, 1, 1, fp) )
-                 fprintf(stderr, "\nError: fread return a number of element different from the expected.\n");
-       image->comps[0].data[i] = (uc & 1)?0:255;
-  }
-   }
+    if ((format == 2) || (format == 3)) { /* ascii pixmap */
+        unsigned int index;
+
+        for (i = 0; i < w * h; i++) {
+            for (compno = 0; compno < numcomps; compno++) {
+                index = 0;
+                if (fscanf(fp, "%u", &index) != 1) {
+                    fprintf(stderr,
+                            "\nWARNING: fscanf return a number of element different from the expected.\n");
+                }
+
+                image->comps[compno].data[i] = (index * 255) / header_info.maxval;
+            }
+        }
+    } else if ((format == 5)
+               || (format == 6)
+               || ((format == 7)
+                   && (header_info.gray || header_info.graya
+                       || header_info.rgb || header_info.rgba))) { /* binary pixmap */
+        unsigned char c0, c1, one;
+
+        one = (prec < 9);
+
+        for (i = 0; i < w * h; i++) {
+            for (compno = 0; compno < numcomps; compno++) {
+                if (!fread(&c0, 1, 1, fp)) {
+                    fprintf(stderr,
+                            "\nError: fread return a number of element different from the expected.\n");
+                }
+                if (one) {
+                    image->comps[compno].data[i] = c0;
+                } else {
+                    if (!fread(&c1, 1, 1, fp)) {
+                        fprintf(stderr,
+                                "\nError: fread return a number of element different from the expected.\n");
+                    }
+                    /* netpbm: */
+                    image->comps[compno].data[i] = ((c0 << 8) | c1);
+                }
+            }
+        }
+    } else if (format == 1) { /* ascii bitmap */
+        for (i = 0; i < w * h; i++) {
+            unsigned int index;
+
+            if (fscanf(fp, "%u", &index) != 1) {
+                fprintf(stderr,
+                        "\nWARNING: fscanf return a number of element different from the expected.\n");
+            }
+
+            image->comps[0].data[i] = (index ? 0 : 255);
+        }
+    } else if (format == 4) {
+        int x, y, bit;
+        unsigned char uc;
+
+        i = 0;
+        for (y = 0; y < h; ++y) {
+            bit = -1;
+            uc = 0;
+
+            for (x = 0; x < w; ++x) {
+                if (bit == -1) {
+                    bit = 7;
+                    uc = (unsigned char)getc(fp);
+                }
+                image->comps[0].data[i] = (((uc >> bit) & 1) ? 0 : 255);
+                --bit;
+                ++i;
+            }
+        }
+    } else if ((format == 7 && header_info.bw)) { /*MONO*/
+        unsigned char uc;
+
+        for (i = 0; i < w * h; ++i) {
+            if (!fread(&uc, 1, 1, fp)) {
+                fprintf(stderr,
+                        "\nError: fread return a number of element different from the expected.\n");
+            }
+            image->comps[0].data[i] = (uc & 1) ? 0 : 255;
+        }
+    }
     fclose(fp);
 
     return image;
 }/* pnmtoimage() */
 
-int imagetopnm(opj_image_t * image, const char *outfile) 
+int imagetopnm(opj_image_t * image, const char *outfile)
 {
-       int *red, *green, *blue, *alpha;
-       int wr, hr, max;
-       int i, compno, ncomp;
-       int adjustR, adjustG, adjustB, adjustA;
-       int fails, two, want_gray, has_alpha, triple;
-       int prec, v;
-       FILE *fdest = NULL;
-       const char *tmp = outfile;
-       char *destname;
-  alpha = NULL;
-    if((prec = image->comps[0].prec) > 16)
-   {
-       fprintf(stderr,"%s:%d:imagetopnm\n\tprecision %d is larger than 16"
-       "\n\t: refused.\n",__FILE__,__LINE__,prec);
-       return 1;
-   }
-    two = has_alpha = 0; fails = 1;
-       ncomp = image->numcomps;
-
-       while (*tmp) ++tmp; tmp -= 2; 
-       want_gray = (*tmp == 'g' || *tmp == 'G'); 
-       ncomp = image->numcomps;
-
-       if(want_gray) ncomp = 1;
-
-       if (ncomp == 2 /* GRAYA */
-       || (ncomp > 2 /* RGB, RGBA */
-               && image->comps[0].dx == image->comps[1].dx
-               && image->comps[1].dx == image->comps[2].dx
-               && image->comps[0].dy == image->comps[1].dy
-               && image->comps[1].dy == image->comps[2].dy
-               && image->comps[0].prec == image->comps[1].prec
-               && image->comps[1].prec == image->comps[2].prec
-          ))
-   {
-       fdest = fopen(outfile, "wb");
-
-       if (!fdest) 
-  {
-       fprintf(stderr, "ERROR -> failed to open %s for writing\n", outfile);
-       return fails;
-  }
-       two = (prec > 8);
-       triple = (ncomp > 2);
-       wr = image->comps[0].w; hr = image->comps[0].h;
-       max = (1<<prec) - 1; has_alpha = (ncomp == 4 || ncomp == 2);
-
-    red = image->comps[0].data;
-
-       if(triple)
-  {
-    green = image->comps[1].data;
-    blue = image->comps[2].data;
-  }
-       else green = blue = NULL;
-       
-       if(has_alpha)
-  {
-       const char *tt = (triple?"RGB_ALPHA":"GRAYSCALE_ALPHA");
-
-       fprintf(fdest, "P7\n# OpenJPEG-%s\nWIDTH %d\nHEIGHT %d\nDEPTH %d\n"
-               "MAXVAL %d\nTUPLTYPE %s\nENDHDR\n", opj_version(),
-               wr, hr, ncomp, max, tt);
-       alpha = image->comps[ncomp - 1].data;
-       adjustA = (image->comps[ncomp - 1].sgnd ?
-        1 << (image->comps[ncomp - 1].prec - 1) : 0);
-  }
-       else
-  {
-       fprintf(fdest, "P6\n# OpenJPEG-%s\n%d %d\n%d\n", 
-               opj_version(), wr, hr, max);
-       adjustA = 0;
-  }
-    adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
+    int *red, *green, *blue, *alpha;
+    int wr, hr, max;
+    int i, compno, ncomp;
+    int adjustR, adjustG, adjustB, adjustA;
+    int fails, two, want_gray, has_alpha, triple;
+    int prec, v;
+    FILE *fdest = NULL;
+    const char *tmp = outfile;
+    char *destname;
+    alpha = NULL;
+    if ((prec = image->comps[0].prec) > 16) {
+        fprintf(stderr, "%s:%d:imagetopnm\n\tprecision %d is larger than 16"
+                "\n\t: refused.\n", __FILE__, __LINE__, prec);
+        return 1;
+    }
+    two = has_alpha = 0;
+    fails = 1;
+    ncomp = image->numcomps;
 
-       if(triple)
-  {
-    adjustG = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
-    adjustB = (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
-  }
-       else adjustG = adjustB = 0;
-
-    for(i = 0; i < wr * hr; ++i)
-  {
-       if(two)
- {
-       v = *red + adjustR; ++red;
-/* netpbm: */
-       fprintf(fdest, "%c%c",(unsigned char)(v>>8), (unsigned char)v);
-
-               if(triple)
-          {
-               v = *green + adjustG; ++green;
-/* netpbm: */
-               fprintf(fdest, "%c%c",(unsigned char)(v>>8), (unsigned char)v);
-
-               v =  *blue + adjustB; ++blue;
-/* netpbm: */
-               fprintf(fdest, "%c%c",(unsigned char)(v>>8), (unsigned char)v);
-
-          }/* if(triple) */
-
-        if(has_alpha)
-       {
-        v = *alpha + adjustA; ++alpha;
-/* netpbm: */
-               fprintf(fdest, "%c%c",(unsigned char)(v>>8), (unsigned char)v);
-       }
-        continue;
-
- }     /* if(two) */
-
-/* prec <= 8: */
-
-       fprintf(fdest, "%c", (unsigned char)*red++);
-       if(triple)
-        fprintf(fdest, "%c%c",(unsigned char)*green++, (unsigned char)*blue++);
-
-       if(has_alpha)
-        fprintf(fdest, "%c", (unsigned char)*alpha++);
-
-  }    /* for(i */
-
-       fclose(fdest); return 0;
-   }
-
-/* YUV or MONO: */
-
-       if (image->numcomps > ncomp) 
-   {
-       fprintf(stderr,"WARNING -> [PGM file] Only the first component\n");
-       fprintf(stderr,"           is written to the file\n");
-   }
-       destname = (char*)malloc(strlen(outfile) + 8);
-
-       for (compno = 0; compno < ncomp; compno++) 
-   {
-       if (ncomp > 1) 
-        sprintf(destname, "%d.%s", compno, outfile);
-       else
-        sprintf(destname, "%s", outfile);
-
-       fdest = fopen(destname, "wb");
-       if (!fdest) 
-  {
-       fprintf(stderr, "ERROR -> failed to open %s for writing\n", destname);
-       free(destname);
-       return 1;
-  }
-       wr = image->comps[compno].w; hr = image->comps[compno].h;
-       prec = image->comps[compno].prec;
-       max = (1<<prec) - 1;
-
-       fprintf(fdest, "P5\n#OpenJPEG-%s\n%d %d\n%d\n", 
-               opj_version(), wr, hr, max);
-
-       red = image->comps[compno].data;
-       adjustR = 
-       (image->comps[compno].sgnd ? 1 << (image->comps[compno].prec - 1) : 0);
-
-    if(prec > 8)
-  {
-       for (i = 0; i < wr * hr; i++) 
- {
-       v = *red + adjustR; ++red;
-/* netpbm: */
-       fprintf(fdest, "%c%c",(unsigned char)(v>>8), (unsigned char)v);
-
-        if(has_alpha)
-      {
-        v = *alpha++;
-/* netpbm: */
-               fprintf(fdest, "%c%c",(unsigned char)(v>>8), (unsigned char)v);
-      }
- }/* for(i */
-  }
-       else /* prec <= 8 */
-  {
-       for(i = 0; i < wr * hr; ++i)
- {
-        fprintf(fdest, "%c", (unsigned char)(*red + adjustR)); ++red;
- }
-  }
-       fclose(fdest);
-   } /* for (compno */
-       free(destname);
-
-       return 0;
+    while (*tmp) {
+        ++tmp;
+    }
+    tmp -= 2;
+    want_gray = (*tmp == 'g' || *tmp == 'G');
+    ncomp = image->numcomps;
+
+    if (want_gray) {
+        ncomp = 1;
+    }
+
+    if (ncomp == 2 /* GRAYA */
+            || (ncomp > 2 /* RGB, RGBA */
+                && image->comps[0].dx == image->comps[1].dx
+                && image->comps[1].dx == image->comps[2].dx
+                && image->comps[0].dy == image->comps[1].dy
+                && image->comps[1].dy == image->comps[2].dy
+                && image->comps[0].prec == image->comps[1].prec
+                && image->comps[1].prec == image->comps[2].prec
+               )) {
+        fdest = fopen(outfile, "wb");
+
+        if (!fdest) {
+            fprintf(stderr, "ERROR -> failed to open %s for writing\n", outfile);
+            return fails;
+        }
+        two = (prec > 8);
+        triple = (ncomp > 2);
+        wr = image->comps[0].w;
+        hr = image->comps[0].h;
+        max = (1 << prec) - 1;
+        has_alpha = (ncomp == 4 || ncomp == 2);
+
+        red = image->comps[0].data;
+
+        if (triple) {
+            green = image->comps[1].data;
+            blue = image->comps[2].data;
+        } else {
+            green = blue = NULL;
+        }
+
+        if (has_alpha) {
+            const char *tt = (triple ? "RGB_ALPHA" : "GRAYSCALE_ALPHA");
+
+            fprintf(fdest, "P7\n# OpenJPEG-%s\nWIDTH %d\nHEIGHT %d\nDEPTH %d\n"
+                    "MAXVAL %d\nTUPLTYPE %s\nENDHDR\n", opj_version(),
+                    wr, hr, ncomp, max, tt);
+            alpha = image->comps[ncomp - 1].data;
+            adjustA = (image->comps[ncomp - 1].sgnd ?
+                       1 << (image->comps[ncomp - 1].prec - 1) : 0);
+        } else {
+            fprintf(fdest, "P6\n# OpenJPEG-%s\n%d %d\n%d\n",
+                    opj_version(), wr, hr, max);
+            adjustA = 0;
+        }
+        adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
+
+        if (triple) {
+            adjustG = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
+            adjustB = (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
+        } else {
+            adjustG = adjustB = 0;
+        }
+
+        for (i = 0; i < wr * hr; ++i) {
+            if (two) {
+                v = *red + adjustR;
+                ++red;
+                /* netpbm: */
+                fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
+
+                if (triple) {
+                    v = *green + adjustG;
+                    ++green;
+                    /* netpbm: */
+                    fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
+
+                    v =  *blue + adjustB;
+                    ++blue;
+                    /* netpbm: */
+                    fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
+
+                }/* if(triple) */
+
+                if (has_alpha) {
+                    v = *alpha + adjustA;
+                    ++alpha;
+                    /* netpbm: */
+                    fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
+                }
+                continue;
+
+            }  /* if(two) */
+
+            /* prec <= 8: */
+
+            fprintf(fdest, "%c", (unsigned char)*red++);
+            if (triple) {
+                fprintf(fdest, "%c%c", (unsigned char)*green++, (unsigned char)*blue++);
+            }
+
+            if (has_alpha) {
+                fprintf(fdest, "%c", (unsigned char)*alpha++);
+            }
+
+        } /* for(i */
+
+        fclose(fdest);
+        return 0;
+    }
+
+    /* YUV or MONO: */
+
+    if (image->numcomps > ncomp) {
+        fprintf(stderr, "WARNING -> [PGM file] Only the first component\n");
+        fprintf(stderr, "           is written to the file\n");
+    }
+    destname = (char*)malloc(strlen(outfile) + 8);
+
+    for (compno = 0; compno < ncomp; compno++) {
+        if (ncomp > 1) {
+            sprintf(destname, "%d.%s", compno, outfile);
+        } else {
+            sprintf(destname, "%s", outfile);
+        }
+
+        fdest = fopen(destname, "wb");
+        if (!fdest) {
+            fprintf(stderr, "ERROR -> failed to open %s for writing\n", destname);
+            free(destname);
+            return 1;
+        }
+        wr = image->comps[compno].w;
+        hr = image->comps[compno].h;
+        prec = image->comps[compno].prec;
+        max = (1 << prec) - 1;
+
+        fprintf(fdest, "P5\n#OpenJPEG-%s\n%d %d\n%d\n",
+                opj_version(), wr, hr, max);
+
+        red = image->comps[compno].data;
+        adjustR =
+            (image->comps[compno].sgnd ? 1 << (image->comps[compno].prec - 1) : 0);
+
+        if (prec > 8) {
+            for (i = 0; i < wr * hr; i++) {
+                v = *red + adjustR;
+                ++red;
+                /* netpbm: */
+                fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
+
+                if (has_alpha) {
+                    v = *alpha++;
+                    /* netpbm: */
+                    fprintf(fdest, "%c%c", (unsigned char)(v >> 8), (unsigned char)v);
+                }
+            }/* for(i */
+        } else { /* prec <= 8 */
+            for (i = 0; i < wr * hr; ++i) {
+                fprintf(fdest, "%c", (unsigned char)(*red + adjustR));
+                ++red;
+            }
+        }
+        fclose(fdest);
+    } /* for (compno */
+    free(destname);
+
+    return 0;
 }/* imagetopnm() */
 
 #ifdef OPJ_HAVE_LIBTIFF
 /* -->> -->> -->> -->>
 
-       TIFF IMAGE FORMAT
+    TIFF IMAGE FORMAT
 
  <<-- <<-- <<-- <<-- */
 
-int imagetotif(opj_image_t * image, const char *outfile) 
+int imagetotif(opj_image_t * image, const char *outfile)
 {
-       int width, height, imgsize;
-       int bps,index,adjust, sgnd;
-       int ushift, dshift, has_alpha, force16;
-       TIFF *tif;
-       tdata_t buf;
-       tstrip_t strip;
-       tsize_t strip_size;
-
-       ushift = dshift = force16 = has_alpha = 0;
-       bps = image->comps[0].prec;
-
-       if(bps > 8 && bps < 16)
-   {
-       ushift = 16 - bps; dshift = bps - ushift;
-       bps = 16; force16 = 1;
-   }
-
-       if(bps != 8 && bps != 16)
-   {
-       fprintf(stderr,"imagetotif: Bits=%d, Only 8 and 16 bits implemented\n",
-        bps);
-       fprintf(stderr,"\tAborting\n");
-       return 1;
-   }
-       tif = TIFFOpen(outfile, "wb");
-
-       if (!tif) 
-   {
-       fprintf(stderr, "imagetotif:failed to open %s for writing\n", outfile);
-       return 1;
-   }
-       sgnd = image->comps[0].sgnd;
-       adjust = sgnd ? 1 << (image->comps[0].prec - 1) : 0;
-
-       if(image->numcomps >= 3 
-       && image->comps[0].dx == image->comps[1].dx
-       && image->comps[1].dx == image->comps[2].dx
-       && image->comps[0].dy == image->comps[1].dy
-       && image->comps[1].dy == image->comps[2].dy
-       && image->comps[0].prec == image->comps[1].prec
-       && image->comps[1].prec == image->comps[2].prec) 
-   {
-       has_alpha = (image->numcomps == 4);
-
-       width   = image->comps[0].w;
-       height  = image->comps[0].h;
-       imgsize = width * height ;
-       TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width);
-       TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height);
-       TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 3 + has_alpha);
-       TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bps);
-       TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
-       TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
-       TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB);
-       TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1);
-       strip_size = TIFFStripSize(tif);
-       buf = _TIFFmalloc(strip_size);
-       index=0;
-
-       for(strip = 0; strip < TIFFNumberOfStrips(tif); strip++) 
-  {
-       unsigned char *dat8;
-       tsize_t i, ssize, last_i = 0;
-  int step, restx;
-       ssize = TIFFStripSize(tif);
-       dat8 = (unsigned char*)buf;
-
-       if(bps == 8)
- {
-       step = 3 + has_alpha;
-       restx = step - 1;
-
-               for(i=0; i < ssize - restx; i += step) 
-          {    
-               int r, g, b, a = 0;
-
-               if(index < imgsize)
-         {
-               r = image->comps[0].data[index];
-               g = image->comps[1].data[index];
-               b = image->comps[2].data[index];
-               if(has_alpha) a = image->comps[3].data[index];
-
-               if(sgnd)
-        {
-               r += adjust;
-               g += adjust;
-               b += adjust;
-               if(has_alpha) a += adjust;
-        }
-               dat8[i+0] = r ;
-               dat8[i+1] = g ;
-               dat8[i+2] = b ;
-               if(has_alpha) dat8[i+3] = a;
-
-               index++;
-               last_i = i + step;
-         }
-               else
-                break;
-          }/*for(i = 0;)*/
-
-               if(last_i < ssize)
-          {
-               for(i = last_i; i < ssize; i += step) 
-         { 
-               int r, g, b, a = 0;
-
-               if(index < imgsize)
-        {
-               r = image->comps[0].data[index];
-               g = image->comps[1].data[index];
-               b = image->comps[2].data[index];
-               if(has_alpha) a = image->comps[3].data[index];
-
-               if(sgnd)
-       {
-               r += adjust;
-               g += adjust;
-               b += adjust;
-               if(has_alpha) a += adjust;
-       }
-               dat8[i+0] = r ;
-               if(i+1 < ssize) dat8[i+1] = g ;  else break;
-               if(i+2 < ssize) dat8[i+2] = b ;  else break;
-               if(has_alpha)
-       {
-               if(i+3 < ssize) dat8[i+3] = a ;  else break;
-       }
-               index++;
-        }
-               else
-                break;
-         }/*for(i)*/
-          }/*if(last_i < ssize)*/
-
- }     /*if(bps == 8)*/
-       else 
-       if(bps == 16)
- {
-       step = 6 + has_alpha + has_alpha;
-       restx = step - 1;
-
-               for(i = 0; i < ssize - restx ; i += step) 
-          {  
-               int r, g, b, a = 0;
-
-               if(index < imgsize)
-         {
-               r = image->comps[0].data[index];
-               g = image->comps[1].data[index];
-               b = image->comps[2].data[index];
-               if(has_alpha) a = image->comps[3].data[index];
-
-               if(sgnd)
-        {
-               r += adjust;
-               g += adjust;
-               b += adjust;
-               if(has_alpha) a += adjust;
-        }
-               if(force16) 
-        { 
-               r = (r<<ushift) + (r>>dshift); 
-               g = (g<<ushift) + (g>>dshift); 
-               b = (b<<ushift) + (b>>dshift); 
-               if(has_alpha) a = (a<<ushift) + (a>>dshift);
-        }
-               dat8[i+0] =  r;/*LSB*/
-               dat8[i+1] = (r >> 8);/*MSB*/
-               dat8[i+2] =  g;
-               dat8[i+3] = (g >> 8);
-               dat8[i+4] =  b;
-               dat8[i+5] = (b >> 8);
-               if(has_alpha) 
-        { 
-               dat8[i+6] =  a; 
-               dat8[i+7] = (a >> 8); 
-        }
-               index++;
-               last_i = i + step;
-         }
-               else
-                break;
-          }/*for(i = 0;)*/
-
-               if(last_i < ssize)
-          {
-               for(i = last_i ; i < ssize ; i += step) 
-         {    
-               int r, g, b, a = 0;
-
-               if(index < imgsize)
-        {
-               r = image->comps[0].data[index];
-               g = image->comps[1].data[index];
-               b = image->comps[2].data[index];
-               if(has_alpha) a = image->comps[3].data[index];
-
-               if(sgnd)
-       {
-               r += adjust;
-               g += adjust;
-               b += adjust;
-               if(has_alpha) a += adjust;
-       }
-           if(force16)
-       {
-           r = (r<<ushift) + (r>>dshift);
-           g = (g<<ushift) + (g>>dshift);
-           b = (b<<ushift) + (b>>dshift);
-           if(has_alpha) a = (a<<ushift) + (a>>dshift);
-       }
-               dat8[i+0] =  r;/*LSB*/
-               if(i+1 < ssize) dat8[i+1] = (r >> 8);else break;/*MSB*/
-               if(i+2 < ssize) dat8[i+2] =  g;      else break;
-               if(i+3 < ssize) dat8[i+3] = (g >> 8);else break;
-               if(i+4 < ssize) dat8[i+4] =  b;      else break;
-               if(i+5 < ssize) dat8[i+5] = (b >> 8);else break;
-
-               if(has_alpha)
-       {
-               if(i+6 < ssize) dat8[i+6] = a; else break;
-               if(i+7 < ssize) dat8[i+7] = (a >> 8); else break;
-       }
-               index++;
-        }
-               else
-                break;
-         }/*for(i)*/
-          }/*if(last_i < ssize)*/
-
- }/*if(bps == 16)*/
-       (void)TIFFWriteEncodedStrip(tif, strip, (void*)buf, strip_size);
-  }/*for(strip = 0; )*/
-
-       _TIFFfree((void*)buf);
-       TIFFClose(tif);
-
-       return 0;
-   }/*RGB(A)*/
-
-       if(image->numcomps == 1 /* GRAY */
-       || (   image->numcomps == 2 /* GRAY_ALPHA */
-               && image->comps[0].dx == image->comps[1].dx
-               && image->comps[0].dy == image->comps[1].dy
-               && image->comps[0].prec == image->comps[1].prec))
-   {
-       int step;
-
-       has_alpha = (image->numcomps == 2);
-
-       width   = image->comps[0].w;
-       height  = image->comps[0].h;
-       imgsize = width * height;
-
-/* Set tags */
-       TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width);
-       TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height);
-       TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1 + has_alpha);
-       TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bps);
-       TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
-       TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
-       TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);
-       TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1);
-
-/* Get a buffer for the data */
-       strip_size = TIFFStripSize(tif);
-       buf = _TIFFmalloc(strip_size);
-       index = 0;
-
-       for(strip = 0; strip < TIFFNumberOfStrips(tif); strip++) 
-  {
-       unsigned char *dat8;
-       tsize_t i, ssize = TIFFStripSize(tif);
-       dat8 = (unsigned char*)buf;
-
-       if(bps == 8)
- {
-       step = 1 + has_alpha;
-
-               for(i=0; i < ssize; i += step) 
-          { 
-               if(index < imgsize)
-         {
-               int r, a = 0;
-
-               r = image->comps[0].data[index];
-               if(has_alpha) a = image->comps[1].data[index];
-
-               if(sgnd)
-        {
-               r += adjust;
-               if(has_alpha) a += adjust;
-        }
-               dat8[i+0] = r;
-               if(has_alpha) dat8[i+1] = a;
-               index++;
-        }
-               else
-                break;
-         }/*for(i )*/
- }/*if(bps == 8*/
-       else 
-       if(bps == 16)
- {
-       step = 2 + has_alpha + has_alpha;
-
-               for(i=0; i < ssize; i += step) 
-          {
-               if(index < imgsize)
-         {
-               int r, a = 0;
-
-               r = image->comps[0].data[index];
-               if(has_alpha) a = image->comps[1].data[index];
-
-               if(sgnd)
-        {
-               r += adjust;
-               if(has_alpha) a += adjust;
-        }
-               if(force16)
-        {
-               r = (r<<ushift) + (r>>dshift);
-               if(has_alpha) a = (a<<ushift) + (a>>dshift);
-        }
-               dat8[i+0] = r;/*LSB*/
-               dat8[i+1] = r >> 8;/*MSB*/
-               if(has_alpha)
-        {
-               dat8[i+2] = a;
-               dat8[i+3] = a >> 8;
-        }
-               index++;
-         }/*if(index < imgsize)*/
-               else
-                break;
-          }/*for(i )*/
- }
-       (void)TIFFWriteEncodedStrip(tif, strip, (void*)buf, strip_size);
-  }/*for(strip*/
-
-       _TIFFfree(buf);
-       TIFFClose(tif);
-
-       return 0;
-   }
-
-       TIFFClose(tif);
-
-       fprintf(stderr,"imagetotif: Bad color format.\n"
-        "\tOnly RGB(A) and GRAY(A) has been implemented\n");
-       fprintf(stderr,"\tFOUND: numcomps(%d)\n\tAborting\n",
-        image->numcomps);
-
-       return 1;
+    int width, height, imgsize;
+    int bps, index, adjust, sgnd;
+    int ushift, dshift, has_alpha, force16;
+    TIFF *tif;
+    tdata_t buf;
+    tstrip_t strip;
+    tsize_t strip_size;
+
+    ushift = dshift = force16 = has_alpha = 0;
+    bps = image->comps[0].prec;
+
+    if (bps > 8 && bps < 16) {
+        ushift = 16 - bps;
+        dshift = bps - ushift;
+        bps = 16;
+        force16 = 1;
+    }
+
+    if (bps != 8 && bps != 16) {
+        fprintf(stderr, "imagetotif: Bits=%d, Only 8 and 16 bits implemented\n",
+                bps);
+        fprintf(stderr, "\tAborting\n");
+        return 1;
+    }
+    tif = TIFFOpen(outfile, "wb");
+
+    if (!tif) {
+        fprintf(stderr, "imagetotif:failed to open %s for writing\n", outfile);
+        return 1;
+    }
+    sgnd = image->comps[0].sgnd;
+    adjust = sgnd ? 1 << (image->comps[0].prec - 1) : 0;
+
+    if (image->numcomps >= 3
+            && image->comps[0].dx == image->comps[1].dx
+            && image->comps[1].dx == image->comps[2].dx
+            && image->comps[0].dy == image->comps[1].dy
+            && image->comps[1].dy == image->comps[2].dy
+            && image->comps[0].prec == image->comps[1].prec
+            && image->comps[1].prec == image->comps[2].prec) {
+        has_alpha = (image->numcomps == 4);
+
+        width   = image->comps[0].w;
+        height  = image->comps[0].h;
+        imgsize = width * height ;
+
+        TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width);
+        TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height);
+        TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 3 + has_alpha);
+        TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bps);
+        TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
+        TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
+        TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB);
+        TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1);
+        strip_size = TIFFStripSize(tif);
+        buf = _TIFFmalloc(strip_size);
+        index = 0;
+
+        for (strip = 0; strip < TIFFNumberOfStrips(tif); strip++) {
+            unsigned char *dat8;
+            tsize_t i, ssize, last_i = 0;
+            int step, restx;
+            ssize = TIFFStripSize(tif);
+            dat8 = (unsigned char*)buf;
+
+            if (bps == 8) {
+                step = 3 + has_alpha;
+                restx = step - 1;
+
+                for (i = 0; i < ssize - restx; i += step) {
+                    int r, g, b, a = 0;
+
+                    if (index < imgsize) {
+                        r = image->comps[0].data[index];
+                        g = image->comps[1].data[index];
+                        b = image->comps[2].data[index];
+                        if (has_alpha) {
+                            a = image->comps[3].data[index];
+                        }
+
+                        if (sgnd) {
+                            r += adjust;
+                            g += adjust;
+                            b += adjust;
+                            if (has_alpha) {
+                                a += adjust;
+                            }
+                        }
+                        dat8[i + 0] = r ;
+                        dat8[i + 1] = g ;
+                        dat8[i + 2] = b ;
+                        if (has_alpha) {
+                            dat8[i + 3] = a;
+                        }
+
+                        index++;
+                        last_i = i + step;
+                    } else {
+                        break;
+                    }
+                }/*for(i = 0;)*/
+
+                if (last_i < ssize) {
+                    for (i = last_i; i < ssize; i += step) {
+                        int r, g, b, a = 0;
+
+                        if (index < imgsize) {
+                            r = image->comps[0].data[index];
+                            g = image->comps[1].data[index];
+                            b = image->comps[2].data[index];
+                            if (has_alpha) {
+                                a = image->comps[3].data[index];
+                            }
+
+                            if (sgnd) {
+                                r += adjust;
+                                g += adjust;
+                                b += adjust;
+                                if (has_alpha) {
+                                    a += adjust;
+                                }
+                            }
+                            dat8[i + 0] = r ;
+                            if (i + 1 < ssize) {
+                                dat8[i + 1] = g ;
+                            }  else {
+                                break;
+                            }
+                            if (i + 2 < ssize) {
+                                dat8[i + 2] = b ;
+                            }  else {
+                                break;
+                            }
+                            if (has_alpha) {
+                                if (i + 3 < ssize) {
+                                    dat8[i + 3] = a ;
+                                }  else {
+                                    break;
+                                }
+                            }
+                            index++;
+                        } else {
+                            break;
+                        }
+                    }/*for(i)*/
+                }/*if(last_i < ssize)*/
+
+            }  /*if(bps == 8)*/
+            else if (bps == 16) {
+                step = 6 + has_alpha + has_alpha;
+                restx = step - 1;
+
+                for (i = 0; i < ssize - restx ; i += step) {
+                    int r, g, b, a = 0;
+
+                    if (index < imgsize) {
+                        r = image->comps[0].data[index];
+                        g = image->comps[1].data[index];
+                        b = image->comps[2].data[index];
+                        if (has_alpha) {
+                            a = image->comps[3].data[index];
+                        }
+
+                        if (sgnd) {
+                            r += adjust;
+                            g += adjust;
+                            b += adjust;
+                            if (has_alpha) {
+                                a += adjust;
+                            }
+                        }
+                        if (force16) {
+                            r = (r << ushift) + (r >> dshift);
+                            g = (g << ushift) + (g >> dshift);
+                            b = (b << ushift) + (b >> dshift);
+                            if (has_alpha) {
+                                a = (a << ushift) + (a >> dshift);
+                            }
+                        }
+                        dat8[i + 0] =  r; /*LSB*/
+                        dat8[i + 1] = (r >> 8); /*MSB*/
+                        dat8[i + 2] =  g;
+                        dat8[i + 3] = (g >> 8);
+                        dat8[i + 4] =  b;
+                        dat8[i + 5] = (b >> 8);
+                        if (has_alpha) {
+                            dat8[i + 6] =  a;
+                            dat8[i + 7] = (a >> 8);
+                        }
+                        index++;
+                        last_i = i + step;
+                    } else {
+                        break;
+                    }
+                }/*for(i = 0;)*/
+
+                if (last_i < ssize) {
+                    for (i = last_i ; i < ssize ; i += step) {
+                        int r, g, b, a = 0;
+
+                        if (index < imgsize) {
+                            r = image->comps[0].data[index];
+                            g = image->comps[1].data[index];
+                            b = image->comps[2].data[index];
+                            if (has_alpha) {
+                                a = image->comps[3].data[index];
+                            }
+
+                            if (sgnd) {
+                                r += adjust;
+                                g += adjust;
+                                b += adjust;
+                                if (has_alpha) {
+                                    a += adjust;
+                                }
+                            }
+                            if (force16) {
+                                r = (r << ushift) + (r >> dshift);
+                                g = (g << ushift) + (g >> dshift);
+                                b = (b << ushift) + (b >> dshift);
+                                if (has_alpha) {
+                                    a = (a << ushift) + (a >> dshift);
+                                }
+                            }
+                            dat8[i + 0] =  r; /*LSB*/
+                            if (i + 1 < ssize) {
+                                dat8[i + 1] = (r >> 8);
+                            } else {
+                                break;    /*MSB*/
+                            }
+                            if (i + 2 < ssize) {
+                                dat8[i + 2] =  g;
+                            }      else {
+                                break;
+                            }
+                            if (i + 3 < ssize) {
+                                dat8[i + 3] = (g >> 8);
+                            } else {
+                                break;
+                            }
+                            if (i + 4 < ssize) {
+                                dat8[i + 4] =  b;
+                            }      else {
+                                break;
+                            }
+                            if (i + 5 < ssize) {
+                                dat8[i + 5] = (b >> 8);
+                            } else {
+                                break;
+                            }
+
+                            if (has_alpha) {
+                                if (i + 6 < ssize) {
+                                    dat8[i + 6] = a;
+                                } else {
+                                    break;
+                                }
+                                if (i + 7 < ssize) {
+                                    dat8[i + 7] = (a >> 8);
+                                } else {
+                                    break;
+                                }
+                            }
+                            index++;
+                        } else {
+                            break;
+                        }
+                    }/*for(i)*/
+                }/*if(last_i < ssize)*/
+
+            }/*if(bps == 16)*/
+            (void)TIFFWriteEncodedStrip(tif, strip, (void*)buf, strip_size);
+        }/*for(strip = 0; )*/
+
+        _TIFFfree((void*)buf);
+        TIFFClose(tif);
+
+        return 0;
+    }/*RGB(A)*/
+
+    if (image->numcomps == 1 /* GRAY */
+            || (image->numcomps == 2    /* GRAY_ALPHA */
+                && image->comps[0].dx == image->comps[1].dx
+                && image->comps[0].dy == image->comps[1].dy
+                && image->comps[0].prec == image->comps[1].prec)) {
+        int step;
+
+        has_alpha = (image->numcomps == 2);
+
+        width   = image->comps[0].w;
+        height  = image->comps[0].h;
+        imgsize = width * height;
+
+        /* Set tags */
+        TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width);
+        TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height);
+        TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1 + has_alpha);
+        TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, bps);
+        TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
+        TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
+        TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);
+        TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1);
+
+        /* Get a buffer for the data */
+        strip_size = TIFFStripSize(tif);
+        buf = _TIFFmalloc(strip_size);
+        index = 0;
+
+        for (strip = 0; strip < TIFFNumberOfStrips(tif); strip++) {
+            unsigned char *dat8;
+            tsize_t i, ssize = TIFFStripSize(tif);
+            dat8 = (unsigned char*)buf;
+
+            if (bps == 8) {
+                step = 1 + has_alpha;
+
+                for (i = 0; i < ssize; i += step) {
+                    if (index < imgsize) {
+                        int r, a = 0;
+
+                        r = image->comps[0].data[index];
+                        if (has_alpha) {
+                            a = image->comps[1].data[index];
+                        }
+
+                        if (sgnd) {
+                            r += adjust;
+                            if (has_alpha) {
+                                a += adjust;
+                            }
+                        }
+                        dat8[i + 0] = r;
+                        if (has_alpha) {
+                            dat8[i + 1] = a;
+                        }
+                        index++;
+                    } else {
+                        break;
+                    }
+                }/*for(i )*/
+            }/*if(bps == 8*/
+            else if (bps == 16) {
+                step = 2 + has_alpha + has_alpha;
+
+                for (i = 0; i < ssize; i += step) {
+                    if (index < imgsize) {
+                        int r, a = 0;
+
+                        r = image->comps[0].data[index];
+                        if (has_alpha) {
+                            a = image->comps[1].data[index];
+                        }
+
+                        if (sgnd) {
+                            r += adjust;
+                            if (has_alpha) {
+                                a += adjust;
+                            }
+                        }
+                        if (force16) {
+                            r = (r << ushift) + (r >> dshift);
+                            if (has_alpha) {
+                                a = (a << ushift) + (a >> dshift);
+                            }
+                        }
+                        dat8[i + 0] = r; /*LSB*/
+                        dat8[i + 1] = r >> 8; /*MSB*/
+                        if (has_alpha) {
+                            dat8[i + 2] = a;
+                            dat8[i + 3] = a >> 8;
+                        }
+                        index++;
+                    }/*if(index < imgsize)*/
+                    else {
+                        break;
+                    }
+                }/*for(i )*/
+            }
+            (void)TIFFWriteEncodedStrip(tif, strip, (void*)buf, strip_size);
+        }/*for(strip*/
+
+        _TIFFfree(buf);
+        TIFFClose(tif);
+
+        return 0;
+    }
+
+    TIFFClose(tif);
+
+    fprintf(stderr, "imagetotif: Bad color format.\n"
+            "\tOnly RGB(A) and GRAY(A) has been implemented\n");
+    fprintf(stderr, "\tFOUND: numcomps(%d)\n\tAborting\n",
+            image->numcomps);
+
+    return 1;
 }/* imagetotif() */
 
 /*
@@ -2454,335 +2615,311 @@ int imagetotif(opj_image_t * image, const char *outfile)
 */
 opj_image_t* tiftoimage(const char *filename, opj_cparameters_t *parameters)
 {
-       int subsampling_dx = parameters->subsampling_dx;
-       int subsampling_dy = parameters->subsampling_dy;
-       TIFF *tif;
-       tdata_t buf;
-       tstrip_t strip;
-       tsize_t strip_size;
-       int j, numcomps, w, h,index;
-       OPJ_COLOR_SPACE color_space;
-       opj_image_cmptparm_t cmptparm[4]; /* RGBA */
-       opj_image_t *image = NULL;
-       int imgsize = 0;
-       int has_alpha = 0;
-       unsigned short tiBps, tiPhoto, tiSf, tiSpp, tiPC;
-       unsigned int tiWidth, tiHeight;
-
-       tif = TIFFOpen(filename, "r");
-
-       if(!tif) 
-   {
-       fprintf(stderr, "tiftoimage:Failed to open %s for reading\n", filename);
-       return 0;
-   }
-       tiBps = tiPhoto = tiSf = tiSpp = tiPC = 0;
-       tiWidth = tiHeight = 0;
-
-       TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &tiWidth);
-       TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &tiHeight);
-       TIFFGetField(tif, TIFFTAG_BITSPERSAMPLE, &tiBps);
-       TIFFGetField(tif, TIFFTAG_SAMPLEFORMAT, &tiSf);
-       TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &tiSpp);
-       TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &tiPhoto);
-       TIFFGetField(tif, TIFFTAG_PLANARCONFIG, &tiPC);
-       w= tiWidth;
-       h= tiHeight;
-
-   {
-       unsigned short b = tiBps, p = tiPhoto;
-
-       if(tiBps != 8 && tiBps != 16 && tiBps != 12) b = 0;
-       if(tiPhoto != 1 && tiPhoto != 2) p = 0;
-
-    if( !b || !p)
-  {
-       if( !b)
-     fprintf(stderr,"imagetotif: Bits=%d, Only 8 and 16 bits"
-      " implemented\n",tiBps);
-       else
-       if( !p)
-     fprintf(stderr,"tiftoimage: Bad color format %d.\n\tOnly RGB(A)"
-      " and GRAY(A) has been implemented\n",(int) tiPhoto);
-
-    fprintf(stderr,"\tAborting\n");
-       TIFFClose(tif);
+    int subsampling_dx = parameters->subsampling_dx;
+    int subsampling_dy = parameters->subsampling_dy;
+    TIFF *tif;
+    tdata_t buf;
+    tstrip_t strip;
+    tsize_t strip_size;
+    int j, numcomps, w, h, index;
+    OPJ_COLOR_SPACE color_space;
+    opj_image_cmptparm_t cmptparm[4]; /* RGBA */
+    opj_image_t *image = NULL;
+    int imgsize = 0;
+    int has_alpha = 0;
+    unsigned short tiBps, tiPhoto, tiSf, tiSpp, tiPC;
+    unsigned int tiWidth, tiHeight;
+
+    tif = TIFFOpen(filename, "r");
+
+    if (!tif) {
+        fprintf(stderr, "tiftoimage:Failed to open %s for reading\n", filename);
+        return 0;
+    }
+    tiBps = tiPhoto = tiSf = tiSpp = tiPC = 0;
+    tiWidth = tiHeight = 0;
+
+    TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &tiWidth);
+    TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &tiHeight);
+    TIFFGetField(tif, TIFFTAG_BITSPERSAMPLE, &tiBps);
+    TIFFGetField(tif, TIFFTAG_SAMPLEFORMAT, &tiSf);
+    TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &tiSpp);
+    TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &tiPhoto);
+    TIFFGetField(tif, TIFFTAG_PLANARCONFIG, &tiPC);
+    w = tiWidth;
+    h = tiHeight;
 
-    return NULL;
-  }
-   }
-   {/* From: tiff-4.0.x/libtiff/tif_getimage.c : */
-       uint16* sampleinfo;
-       uint16 extrasamples;
-
-       TIFFGetFieldDefaulted(tif, TIFFTAG_EXTRASAMPLES,
-        &extrasamples, &sampleinfo);
-
-       if(extrasamples >= 1)
-  {
-       switch(sampleinfo[0]) 
- {
-       case EXTRASAMPLE_UNSPECIFIED: 
-/* Workaround for some images without correct info about alpha channel
-*/
-               if(tiSpp > 3)
-                has_alpha = 1;
-               break;
-
-       case EXTRASAMPLE_ASSOCALPHA: /* data pre-multiplied */
-       case EXTRASAMPLE_UNASSALPHA: /* data not pre-multiplied */
-               has_alpha = 1;
-               break;
- }
-  }
-       else /* extrasamples == 0 */
-        if(tiSpp == 4 || tiSpp == 2) has_alpha = 1;
-   }
-
-/* initialize image components
-*/ 
-       memset(&cmptparm[0], 0, 4 * sizeof(opj_image_cmptparm_t));
-
-       if(tiPhoto == PHOTOMETRIC_RGB) /* RGB(A) */
-   {
-       numcomps = 3 + has_alpha;
-       color_space = CLRSPC_SRGB;
-
-       for(j = 0; j < numcomps; j++) 
-  {
-       if(parameters->cp_cinema) 
- {
-       cmptparm[j].prec = 12;
-       cmptparm[j].bpp = 12;
- }
-       else
- {
-       cmptparm[j].prec = tiBps;
-       cmptparm[j].bpp = tiBps;
- }
-       cmptparm[j].dx = subsampling_dx;
-       cmptparm[j].dy = subsampling_dy;
-       cmptparm[j].w = w;
-       cmptparm[j].h = h;
-  }
-
-       image = opj_image_create(numcomps, &cmptparm[0], color_space);
-
-       if(!image) 
-  {
-       TIFFClose(tif);
-       return NULL;
-  }
-/* set image offset and reference grid 
-*/
-       image->x0 = parameters->image_offset_x0;
-       image->y0 = parameters->image_offset_y0;
-       image->x1 =     !image->x0 ? (w - 1) * subsampling_dx + 1 :
-               image->x0 + (w - 1) * subsampling_dx + 1;
-       image->y1 =     !image->y0 ? (h - 1) * subsampling_dy + 1 :
-               image->y0 + (h - 1) * subsampling_dy + 1;
-
-       buf = _TIFFmalloc(TIFFStripSize(tif));
-
-       strip_size=TIFFStripSize(tif);
-       index = 0;
-       imgsize = image->comps[0].w * image->comps[0].h ;
-/* Read the Image components
-*/
-       for(strip = 0; strip < TIFFNumberOfStrips(tif); strip++) 
-  {
-       unsigned char *dat8;
-       int step;
-       tsize_t i, ssize;
-       ssize = TIFFReadEncodedStrip(tif, strip, buf, strip_size);
-       dat8 = (unsigned char*)buf;
-
-       if(tiBps == 16)
- {
-       step = 6 + has_alpha + has_alpha;
-
-               for(i = 0; i < ssize; i += step) 
-          {
-               if(index < imgsize)
-         {
-               image->comps[0].data[index] = ( dat8[i+1] << 8 ) | dat8[i+0]; /* R */
-               image->comps[1].data[index] = ( dat8[i+3] << 8 ) | dat8[i+2]; /* G */
-               image->comps[2].data[index] = ( dat8[i+5] << 8 ) | dat8[i+4]; /* B */
-               if(has_alpha)
-                image->comps[3].data[index] = ( dat8[i+7] << 8 ) | dat8[i+6];
-
-               if(parameters->cp_cinema)
-        {
-/* Rounding 16 to 12 bits
-*/
-               image->comps[0].data[index] = 
-                       (image->comps[0].data[index] + 0x08) >> 4 ;
-               image->comps[1].data[index] = 
-                       (image->comps[1].data[index] + 0x08) >> 4 ;
-               image->comps[2].data[index] = 
-                       (image->comps[2].data[index] + 0x08) >> 4 ;
-               if(has_alpha)
-                image->comps[3].data[index] =
-                       (image->comps[3].data[index] + 0x08) >> 4 ;
-        }
-               index++;
-         }
-               else
-                break;
-          }/*for(i = 0)*/
- }/*if(tiBps == 16)*/
-       else 
-       if(tiBps == 8)
- {
-       step = 3 + has_alpha;
-
-               for(i = 0; i < ssize; i += step) 
-          {
-               if(index < imgsize)
-         {
-               image->comps[0].data[index] = dat8[i+0];/* R */
-               image->comps[1].data[index] = dat8[i+1];/* G */
-               image->comps[2].data[index] = dat8[i+2];/* B */
-               if(has_alpha)
-                image->comps[3].data[index] = dat8[i+3];
-
-               if(parameters->cp_cinema)
-        {
-/* Rounding 8 to 12 bits
-*/
-               image->comps[0].data[index] = image->comps[0].data[index] << 4 ;
-               image->comps[1].data[index] = image->comps[1].data[index] << 4 ;
-               image->comps[2].data[index] = image->comps[2].data[index] << 4 ;
-               if(has_alpha)
-                image->comps[3].data[index] = image->comps[3].data[index] << 4 ;
-        }
-               index++;
-         }/*if(index*/
-               else
-                break;
-          }/*for(i )*/
- }/*if( tiBps == 8)*/
-       else
-       if(tiBps == 12)/* CINEMA file */
- {
-       step = 9;
-
-               for(i = 0; i < ssize; i += step) 
-          {
-               if((index < imgsize)&(index+1 < imgsize))
-         {
-               image->comps[0].data[index]   = ( dat8[i+0]<<4 )        |(dat8[i+1]>>4);
-               image->comps[1].data[index]   = ((dat8[i+1]& 0x0f)<< 8) | dat8[i+2];
-
-               image->comps[2].data[index]   = ( dat8[i+3]<<4)         |(dat8[i+4]>>4);
-               image->comps[0].data[index+1] = ((dat8[i+4]& 0x0f)<< 8) | dat8[i+5];
-
-               image->comps[1].data[index+1] = ( dat8[i+6] <<4)        |(dat8[i+7]>>4);
-               image->comps[2].data[index+1] = ((dat8[i+7]& 0x0f)<< 8) | dat8[i+8];
-
-               index += 2;
-         }
-               else
-                break;
-          }/*for(i )*/
- }
-  }/*for(strip = 0; )*/
-
-       _TIFFfree(buf);
-       TIFFClose(tif);
-
-       return image;
-   }/*RGB(A)*/
-
-       if(tiPhoto == PHOTOMETRIC_MINISBLACK) /* GRAY(A) */
-   {
-       numcomps = 1 + has_alpha;
-       color_space = CLRSPC_GRAY;
-
-       for(j = 0; j < numcomps; ++j)
-  {
-       cmptparm[j].prec = tiBps;
-       cmptparm[j].bpp = tiBps;
-       cmptparm[j].dx = subsampling_dx;
-       cmptparm[j].dy = subsampling_dy;
-       cmptparm[j].w = w;
-       cmptparm[j].h = h;
-  }
-       image = opj_image_create(numcomps, &cmptparm[0], color_space);
-
-       if(!image) 
-  {
-       TIFFClose(tif);
-       return NULL;
-  }
-/* set image offset and reference grid 
-*/
-       image->x0 = parameters->image_offset_x0;
-       image->y0 = parameters->image_offset_y0;
-       image->x1 =     !image->x0 ? (w - 1) * subsampling_dx + 1 :
-               image->x0 + (w - 1) * subsampling_dx + 1;
-       image->y1 =     !image->y0 ? (h - 1) * subsampling_dy + 1 :
-               image->y0 + (h - 1) * subsampling_dy + 1;
-
-       buf = _TIFFmalloc(TIFFStripSize(tif));
-
-       strip_size = TIFFStripSize(tif);
-       index = 0;
-       imgsize = image->comps[0].w * image->comps[0].h ;
-/* Read the Image components
-*/
-       for(strip = 0; strip < TIFFNumberOfStrips(tif); strip++) 
-  {
-       unsigned char *dat8;
-       tsize_t i, ssize;
-       int step;
-
-       ssize = TIFFReadEncodedStrip(tif, strip, buf, strip_size);
-       dat8 = (unsigned char*)buf;
-
-               if(tiBps == 16)
-          {
-               step = 2 + has_alpha + has_alpha;
-
-               for(i = 0; i < ssize; i += step) 
-         {
-               if(index < imgsize)
-        {
-               image->comps[0].data[index] = ( dat8[i+1] << 8 ) | dat8[i+0];
-               if(has_alpha)
-                image->comps[1].data[index] = ( dat8[i+3] << 8 ) | dat8[i+2];
-               index++;
-        }
-               else
-                break;
-         }/*for(i )*/
-          }
-               else 
-               if(tiBps == 8)
-          {
-               step = 1 + has_alpha;
-
-               for(i = 0; i < ssize; i += step) 
-         {
-               if(index < imgsize)
-        {
-               image->comps[0].data[index] = dat8[i+0];
-               if(has_alpha)
-                image->comps[1].data[index] = dat8[i+1];
-               index++;
-        }
-               else
-                break;
-         }/*for(i )*/
-          }
-  }/*for(strip = 0;*/
-
-       _TIFFfree(buf);
-       TIFFClose(tif);
-
-   }/*GRAY(A)*/
-
-       return image;
+    {
+        unsigned short b = tiBps, p = tiPhoto;
+
+        if (tiBps != 8 && tiBps != 16 && tiBps != 12) {
+            b = 0;
+        }
+        if (tiPhoto != 1 && tiPhoto != 2) {
+            p = 0;
+        }
+
+        if (!b || !p) {
+            if (!b)
+                fprintf(stderr, "imagetotif: Bits=%d, Only 8 and 16 bits"
+                        " implemented\n", tiBps);
+            else if (!p)
+                fprintf(stderr, "tiftoimage: Bad color format %d.\n\tOnly RGB(A)"
+                        " and GRAY(A) has been implemented\n", (int) tiPhoto);
+
+            fprintf(stderr, "\tAborting\n");
+            TIFFClose(tif);
+
+            return NULL;
+        }
+    }
+    {/* From: tiff-4.0.x/libtiff/tif_getimage.c : */
+        uint16* sampleinfo;
+        uint16 extrasamples;
+
+        TIFFGetFieldDefaulted(tif, TIFFTAG_EXTRASAMPLES,
+                              &extrasamples, &sampleinfo);
+
+        if (extrasamples >= 1) {
+            switch (sampleinfo[0]) {
+            case EXTRASAMPLE_UNSPECIFIED:
+                /* Workaround for some images without correct info about alpha channel
+                */
+                if (tiSpp > 3) {
+                    has_alpha = 1;
+                }
+                break;
+
+            case EXTRASAMPLE_ASSOCALPHA: /* data pre-multiplied */
+            case EXTRASAMPLE_UNASSALPHA: /* data not pre-multiplied */
+                has_alpha = 1;
+                break;
+            }
+        } else /* extrasamples == 0 */
+            if (tiSpp == 4 || tiSpp == 2) {
+                has_alpha = 1;
+            }
+    }
+
+    /* initialize image components
+    */
+    memset(&cmptparm[0], 0, 4 * sizeof(opj_image_cmptparm_t));
+
+    if (tiPhoto == PHOTOMETRIC_RGB) { /* RGB(A) */
+        numcomps = 3 + has_alpha;
+        color_space = CLRSPC_SRGB;
+
+        for (j = 0; j < numcomps; j++) {
+            if (parameters->cp_cinema) {
+                cmptparm[j].prec = 12;
+                cmptparm[j].bpp = 12;
+            } else {
+                cmptparm[j].prec = tiBps;
+                cmptparm[j].bpp = tiBps;
+            }
+            cmptparm[j].dx = subsampling_dx;
+            cmptparm[j].dy = subsampling_dy;
+            cmptparm[j].w = w;
+            cmptparm[j].h = h;
+        }
+
+        image = opj_image_create(numcomps, &cmptparm[0], color_space);
+
+        if (!image) {
+            TIFFClose(tif);
+            return NULL;
+        }
+        /* set image offset and reference grid
+        */
+        image->x0 = parameters->image_offset_x0;
+        image->y0 = parameters->image_offset_y0;
+        image->x1 = !image->x0 ? (w - 1) * subsampling_dx + 1 :
+                    image->x0 + (w - 1) * subsampling_dx + 1;
+        image->y1 = !image->y0 ? (h - 1) * subsampling_dy + 1 :
+                    image->y0 + (h - 1) * subsampling_dy + 1;
+
+        buf = _TIFFmalloc(TIFFStripSize(tif));
+
+        strip_size = TIFFStripSize(tif);
+        index = 0;
+        imgsize = image->comps[0].w * image->comps[0].h ;
+        /* Read the Image components
+        */
+        for (strip = 0; strip < TIFFNumberOfStrips(tif); strip++) {
+            unsigned char *dat8;
+            int step;
+            tsize_t i, ssize;
+            ssize = TIFFReadEncodedStrip(tif, strip, buf, strip_size);
+            dat8 = (unsigned char*)buf;
+
+            if (tiBps == 16) {
+                step = 6 + has_alpha + has_alpha;
+
+                for (i = 0; i < ssize; i += step) {
+                    if (index < imgsize) {
+                        image->comps[0].data[index] = (dat8[i + 1] << 8) | dat8[i + 0]; /* R */
+                        image->comps[1].data[index] = (dat8[i + 3] << 8) | dat8[i + 2]; /* G */
+                        image->comps[2].data[index] = (dat8[i + 5] << 8) | dat8[i + 4]; /* B */
+                        if (has_alpha) {
+                            image->comps[3].data[index] = (dat8[i + 7] << 8) | dat8[i + 6];
+                        }
+
+                        if (parameters->cp_cinema) {
+                            /* Rounding 16 to 12 bits
+                            */
+                            image->comps[0].data[index] =
+                                (image->comps[0].data[index] + 0x08) >> 4 ;
+                            image->comps[1].data[index] =
+                                (image->comps[1].data[index] + 0x08) >> 4 ;
+                            image->comps[2].data[index] =
+                                (image->comps[2].data[index] + 0x08) >> 4 ;
+                            if (has_alpha)
+                                image->comps[3].data[index] =
+                                    (image->comps[3].data[index] + 0x08) >> 4 ;
+                        }
+                        index++;
+                    } else {
+                        break;
+                    }
+                }/*for(i = 0)*/
+            }/*if(tiBps == 16)*/
+            else if (tiBps == 8) {
+                step = 3 + has_alpha;
+
+                for (i = 0; i < ssize; i += step) {
+                    if (index < imgsize) {
+                        image->comps[0].data[index] = dat8[i + 0]; /* R */
+                        image->comps[1].data[index] = dat8[i + 1]; /* G */
+                        image->comps[2].data[index] = dat8[i + 2]; /* B */
+                        if (has_alpha) {
+                            image->comps[3].data[index] = dat8[i + 3];
+                        }
+
+                        if (parameters->cp_cinema) {
+                            /* Rounding 8 to 12 bits
+                            */
+                            image->comps[0].data[index] = image->comps[0].data[index] << 4 ;
+                            image->comps[1].data[index] = image->comps[1].data[index] << 4 ;
+                            image->comps[2].data[index] = image->comps[2].data[index] << 4 ;
+                            if (has_alpha) {
+                                image->comps[3].data[index] = image->comps[3].data[index] << 4 ;
+                            }
+                        }
+                        index++;
+                    }/*if(index*/
+                    else {
+                        break;
+                    }
+                }/*for(i )*/
+            }/*if( tiBps == 8)*/
+            else if (tiBps == 12) { /* CINEMA file */
+                step = 9;
+
+                for (i = 0; i < ssize; i += step) {
+                    if ((index < imgsize) & (index + 1 < imgsize)) {
+                        image->comps[0].data[index]   = (dat8[i + 0] << 4)        | (dat8[i + 1] >> 4);
+                        image->comps[1].data[index]   = ((dat8[i + 1] & 0x0f) << 8) | dat8[i + 2];
+
+                        image->comps[2].data[index]   = (dat8[i + 3] << 4)         | (dat8[i + 4] >> 4);
+                        image->comps[0].data[index + 1] = ((dat8[i + 4] & 0x0f) << 8) | dat8[i + 5];
+
+                        image->comps[1].data[index + 1] = (dat8[i + 6] << 4)        |
+                                                          (dat8[i + 7] >> 4);
+                        image->comps[2].data[index + 1] = ((dat8[i + 7] & 0x0f) << 8) | dat8[i + 8];
+
+                        index += 2;
+                    } else {
+                        break;
+                    }
+                }/*for(i )*/
+            }
+        }/*for(strip = 0; )*/
+
+        _TIFFfree(buf);
+        TIFFClose(tif);
+
+        return image;
+    }/*RGB(A)*/
+
+    if (tiPhoto == PHOTOMETRIC_MINISBLACK) { /* GRAY(A) */
+        numcomps = 1 + has_alpha;
+        color_space = CLRSPC_GRAY;
+
+        for (j = 0; j < numcomps; ++j) {
+            cmptparm[j].prec = tiBps;
+            cmptparm[j].bpp = tiBps;
+            cmptparm[j].dx = subsampling_dx;
+            cmptparm[j].dy = subsampling_dy;
+            cmptparm[j].w = w;
+            cmptparm[j].h = h;
+        }
+        image = opj_image_create(numcomps, &cmptparm[0], color_space);
+
+        if (!image) {
+            TIFFClose(tif);
+            return NULL;
+        }
+        /* set image offset and reference grid
+        */
+        image->x0 = parameters->image_offset_x0;
+        image->y0 = parameters->image_offset_y0;
+        image->x1 = !image->x0 ? (w - 1) * subsampling_dx + 1 :
+                    image->x0 + (w - 1) * subsampling_dx + 1;
+        image->y1 = !image->y0 ? (h - 1) * subsampling_dy + 1 :
+                    image->y0 + (h - 1) * subsampling_dy + 1;
+
+        buf = _TIFFmalloc(TIFFStripSize(tif));
+
+        strip_size = TIFFStripSize(tif);
+        index = 0;
+        imgsize = image->comps[0].w * image->comps[0].h ;
+        /* Read the Image components
+        */
+        for (strip = 0; strip < TIFFNumberOfStrips(tif); strip++) {
+            unsigned char *dat8;
+            tsize_t i, ssize;
+            int step;
+
+            ssize = TIFFReadEncodedStrip(tif, strip, buf, strip_size);
+            dat8 = (unsigned char*)buf;
+
+            if (tiBps == 16) {
+                step = 2 + has_alpha + has_alpha;
+
+                for (i = 0; i < ssize; i += step) {
+                    if (index < imgsize) {
+                        image->comps[0].data[index] = (dat8[i + 1] << 8) | dat8[i + 0];
+                        if (has_alpha) {
+                            image->comps[1].data[index] = (dat8[i + 3] << 8) | dat8[i + 2];
+                        }
+                        index++;
+                    } else {
+                        break;
+                    }
+                }/*for(i )*/
+            } else if (tiBps == 8) {
+                step = 1 + has_alpha;
+
+                for (i = 0; i < ssize; i += step) {
+                    if (index < imgsize) {
+                        image->comps[0].data[index] = dat8[i + 0];
+                        if (has_alpha) {
+                            image->comps[1].data[index] = dat8[i + 1];
+                        }
+                        index++;
+                    } else {
+                        break;
+                    }
+                }/*for(i )*/
+            }
+        }/*for(strip = 0;*/
+
+        _TIFFfree(buf);
+        TIFFClose(tif);
+
+    }/*GRAY(A)*/
+
+    return image;
 
 }/* tiftoimage() */
 
@@ -2790,250 +2927,238 @@ opj_image_t* tiftoimage(const char *filename, opj_cparameters_t *parameters)
 
 /* -->> -->> -->> -->>
 
-       RAW IMAGE FORMAT
+    RAW IMAGE FORMAT
 
  <<-- <<-- <<-- <<-- */
 
-opj_image_t* rawtoimage(const char *filename, opj_cparameters_t *parameters, raw_cparameters_t *raw_cp) {
-       int subsampling_dx = parameters->subsampling_dx;
-       int subsampling_dy = parameters->subsampling_dy;
-
-       FILE *f = NULL;
-       int i, compno, numcomps, w, h;
-       OPJ_COLOR_SPACE color_space;
-       opj_image_cmptparm_t *cmptparm; 
-       opj_image_t * image = NULL;
-       unsigned short ch;
-       
-       if((! (raw_cp->rawWidth & raw_cp->rawHeight & raw_cp->rawComp & raw_cp->rawBitDepth)) == 0)
-       {
-               fprintf(stderr,"\nError: invalid raw image parameters\n");
-               fprintf(stderr,"Please use the Format option -F:\n");
-               fprintf(stderr,"-F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n");
-               fprintf(stderr,"Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n");
-               fprintf(stderr,"Aborting\n");
-               return NULL;
-       }
-
-       f = fopen(filename, "rb");
-       if (!f) {
-               fprintf(stderr, "Failed to open %s for reading !!\n", filename);
-               fprintf(stderr,"Aborting\n");
-               return NULL;
-       }
-       numcomps = raw_cp->rawComp;
-       color_space = CLRSPC_SRGB;
-       w = raw_cp->rawWidth;
-       h = raw_cp->rawHeight;
-       cmptparm = (opj_image_cmptparm_t*) malloc(numcomps * sizeof(opj_image_cmptparm_t));
-       
-       /* initialize image components */       
-       memset(&cmptparm[0], 0, numcomps * sizeof(opj_image_cmptparm_t));
-       for(i = 0; i < numcomps; i++) {         
-               cmptparm[i].prec = raw_cp->rawBitDepth;
-               cmptparm[i].bpp = raw_cp->rawBitDepth;
-               cmptparm[i].sgnd = raw_cp->rawSigned;
-               cmptparm[i].dx = subsampling_dx;
-               cmptparm[i].dy = subsampling_dy;
-               cmptparm[i].w = w;
-               cmptparm[i].h = h;
-       }
-       /* create the image */
-       image = opj_image_create(numcomps, &cmptparm[0], color_space);
-       if(!image) {
-               fclose(f);
-               return NULL;
-       }
-       /* set image offset and reference grid */
-       image->x0 = parameters->image_offset_x0;
-       image->y0 = parameters->image_offset_y0;
-       image->x1 = parameters->image_offset_x0 + (w - 1) *     subsampling_dx + 1;
-       image->y1 = parameters->image_offset_y0 + (h - 1) *     subsampling_dy + 1;
-
-       if(raw_cp->rawBitDepth <= 8)
-       {
-               unsigned char value = 0;
-               for(compno = 0; compno < numcomps; compno++) {
-                       for (i = 0; i < w * h; i++) {
-                               if (!fread(&value, 1, 1, f)) {
-                                       fprintf(stderr,"Error reading raw file. End of file probably reached.\n");
-                                       fclose(f);
-                                       return NULL;
-                               }
-                               image->comps[compno].data[i] = raw_cp->rawSigned?(char)value:value;
-                       }
-               }
-       }
-       else if(raw_cp->rawBitDepth <= 16)
-       {
-               unsigned short value;
-               for(compno = 0; compno < numcomps; compno++) {
-                       for (i = 0; i < w * h; i++) {
-                               unsigned char temp;
-                               if (!fread(&temp, 1, 1, f)) {
-                                       fprintf(stderr,"Error reading raw file. End of file probably reached.\n");
-                                       fclose(f);
-                                       return NULL;
-                               }
-                               value = temp << 8;
-                               if (!fread(&temp, 1, 1, f)) {
-                                       fprintf(stderr,"Error reading raw file. End of file probably reached.\n");
-                                       fclose(f);
-                                       return NULL;
-                               }
-                               value += temp;
-                               image->comps[compno].data[i] = raw_cp->rawSigned?(short)value:value;
-                       }
-               }
-       }
-       else {
-               fprintf(stderr,"OpenJPEG cannot encode raw components with bit depth higher than 16 bits.\n");
-               fclose(f);
-               return NULL;
-       }
-
-       if (fread(&ch, 1, 1, f)) {
-               fprintf(stderr,"Warning. End of raw file not reached... processing anyway\n");
-       }
-       fclose(f);
-
-       return image;
+opj_image_t* rawtoimage(const char *filename, opj_cparameters_t *parameters,
+                        raw_cparameters_t *raw_cp)
+{
+    int subsampling_dx = parameters->subsampling_dx;
+    int subsampling_dy = parameters->subsampling_dy;
+
+    FILE *f = NULL;
+    int i, compno, numcomps, w, h;
+    OPJ_COLOR_SPACE color_space;
+    opj_image_cmptparm_t *cmptparm;
+    opj_image_t * image = NULL;
+    unsigned short ch;
+
+    if ((!(raw_cp->rawWidth & raw_cp->rawHeight & raw_cp->rawComp &
+            raw_cp->rawBitDepth)) == 0) {
+        fprintf(stderr, "\nError: invalid raw image parameters\n");
+        fprintf(stderr, "Please use the Format option -F:\n");
+        fprintf(stderr,
+                "-F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n");
+        fprintf(stderr, "Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n");
+        fprintf(stderr, "Aborting\n");
+        return NULL;
+    }
+
+    f = fopen(filename, "rb");
+    if (!f) {
+        fprintf(stderr, "Failed to open %s for reading !!\n", filename);
+        fprintf(stderr, "Aborting\n");
+        return NULL;
+    }
+    numcomps = raw_cp->rawComp;
+    color_space = CLRSPC_SRGB;
+    w = raw_cp->rawWidth;
+    h = raw_cp->rawHeight;
+    cmptparm = (opj_image_cmptparm_t*) malloc(numcomps * sizeof(
+                   opj_image_cmptparm_t));
+
+    /* initialize image components */
+    memset(&cmptparm[0], 0, numcomps * sizeof(opj_image_cmptparm_t));
+    for (i = 0; i < numcomps; i++) {
+        cmptparm[i].prec = raw_cp->rawBitDepth;
+        cmptparm[i].bpp = raw_cp->rawBitDepth;
+        cmptparm[i].sgnd = raw_cp->rawSigned;
+        cmptparm[i].dx = subsampling_dx;
+        cmptparm[i].dy = subsampling_dy;
+        cmptparm[i].w = w;
+        cmptparm[i].h = h;
+    }
+    /* create the image */
+    image = opj_image_create(numcomps, &cmptparm[0], color_space);
+    if (!image) {
+        fclose(f);
+        return NULL;
+    }
+    /* set image offset and reference grid */
+    image->x0 = parameters->image_offset_x0;
+    image->y0 = parameters->image_offset_y0;
+    image->x1 = parameters->image_offset_x0 + (w - 1) * subsampling_dx + 1;
+    image->y1 = parameters->image_offset_y0 + (h - 1) * subsampling_dy + 1;
+
+    if (raw_cp->rawBitDepth <= 8) {
+        unsigned char value = 0;
+        for (compno = 0; compno < numcomps; compno++) {
+            for (i = 0; i < w * h; i++) {
+                if (!fread(&value, 1, 1, f)) {
+                    fprintf(stderr, "Error reading raw file. End of file probably reached.\n");
+                    fclose(f);
+                    return NULL;
+                }
+                image->comps[compno].data[i] = raw_cp->rawSigned ? (char)value : value;
+            }
+        }
+    } else if (raw_cp->rawBitDepth <= 16) {
+        unsigned short value;
+        for (compno = 0; compno < numcomps; compno++) {
+            for (i = 0; i < w * h; i++) {
+                unsigned char temp;
+                if (!fread(&temp, 1, 1, f)) {
+                    fprintf(stderr, "Error reading raw file. End of file probably reached.\n");
+                    fclose(f);
+                    return NULL;
+                }
+                value = temp << 8;
+                if (!fread(&temp, 1, 1, f)) {
+                    fprintf(stderr, "Error reading raw file. End of file probably reached.\n");
+                    fclose(f);
+                    return NULL;
+                }
+                value += temp;
+                image->comps[compno].data[i] = raw_cp->rawSigned ? (short)value : value;
+            }
+        }
+    } else {
+        fprintf(stderr,
+                "OpenJPEG cannot encode raw components with bit depth higher than 16 bits.\n");
+        fclose(f);
+        return NULL;
+    }
+
+    if (fread(&ch, 1, 1, f)) {
+        fprintf(stderr, "Warning. End of raw file not reached... processing anyway\n");
+    }
+    fclose(f);
+
+    return image;
 }
 
 int imagetoraw(opj_image_t * image, const char *outfile)
 {
-       FILE *rawFile = NULL;
-  size_t res;
-       int compno;
-       int w, h;
-       int line, row;
-       int *ptr;
-
-       if((image->numcomps * image->x1 * image->y1) == 0)
-       {
-               fprintf(stderr,"\nError: invalid raw image parameters\n");
-               return 1;
-       }
-
-       rawFile = fopen(outfile, "wb");
-       if (!rawFile) {
-               fprintf(stderr, "Failed to open %s for writing !!\n", outfile);
-               return 1;
-       }
-
-       fprintf(stdout,"Raw image characteristics: %d components\n", image->numcomps);
-
-       for(compno = 0; compno < image->numcomps; compno++)
-       {
-               fprintf(stdout,"Component %d characteristics: %dx%dx%d %s\n", compno, image->comps[compno].w,
-                       image->comps[compno].h, image->comps[compno].prec, image->comps[compno].sgnd==1 ? "signed": "unsigned");
-
-               w = image->comps[compno].w;
-               h = image->comps[compno].h;
-
-               if(image->comps[compno].prec <= 8)
-               {
-                       if(image->comps[compno].sgnd == 1)
-                       {
-                               signed char curr;
-                               int mask = (1 << image->comps[compno].prec) - 1;
-                               ptr = image->comps[compno].data;
-                               for (line = 0; line < h; line++) {
-                                       for(row = 0; row < w; row++)    {                               
-                                               curr = (signed char) (*ptr & mask);
-                                               res = fwrite(&curr, sizeof(signed char), 1, rawFile);
-            if( res < 1 ) {
-              fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
-              return 1;
-            }
-                                               ptr++;
-                                       }
-                               }
-                       }
-                       else if(image->comps[compno].sgnd == 0)
-                       {
-                               unsigned char curr;
-                               int mask = (1 << image->comps[compno].prec) - 1;
-                               ptr = image->comps[compno].data;
-                               for (line = 0; line < h; line++) {
-                                       for(row = 0; row < w; row++)    {       
-                                               curr = (unsigned char) (*ptr & mask);
-                                               res = fwrite(&curr, sizeof(unsigned char), 1, rawFile);
-            if( res < 1 ) {
-              fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
-              return 1;
-            }
-                                               ptr++;
-                                       }
-                               }
-                       }
-               }
-               else if(image->comps[compno].prec <= 16)
-               {
-                       if(image->comps[compno].sgnd == 1)
-                       {
-                               signed short int curr;
-                               int mask = (1 << image->comps[compno].prec) - 1;
-                               ptr = image->comps[compno].data;
-                               for (line = 0; line < h; line++) {
-                                       for(row = 0; row < w; row++)    {                                       
-                                               unsigned char temp;
-                                               curr = (signed short int) (*ptr & mask);
-                                               temp = (unsigned char) (curr >> 8);
-                                               res = fwrite(&temp, 1, 1, rawFile);
-            if( res < 1 ) {
-              fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
-              return 1;
-            }
-                                               temp = (unsigned char) curr;
-                                               res = fwrite(&temp, 1, 1, rawFile);
-            if( res < 1 ) {
-              fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
-              return 1;
-            }
-                                               ptr++;
-                                       }
-                               }
-                       }
-                       else if(image->comps[compno].sgnd == 0)
-                       {
-                               unsigned short int curr;
-                               int mask = (1 << image->comps[compno].prec) - 1;
-                               ptr = image->comps[compno].data;
-                               for (line = 0; line < h; line++) {
-                                       for(row = 0; row < w; row++)    {                               
-                                               unsigned char temp;
-                                               curr = (unsigned short int) (*ptr & mask);
-                                               temp = (unsigned char) (curr >> 8);
-                                               res = fwrite(&temp, 1, 1, rawFile);
-            if( res < 1 ) {
-              fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
-              return 1;
+    FILE *rawFile = NULL;
+    size_t res;
+    int compno;
+    int w, h;
+    int line, row;
+    int *ptr;
+
+    if ((image->numcomps * image->x1 * image->y1) == 0) {
+        fprintf(stderr, "\nError: invalid raw image parameters\n");
+        return 1;
+    }
+
+    rawFile = fopen(outfile, "wb");
+    if (!rawFile) {
+        fprintf(stderr, "Failed to open %s for writing !!\n", outfile);
+        return 1;
+    }
+
+    fprintf(stdout, "Raw image characteristics: %d components\n", image->numcomps);
+
+    for (compno = 0; compno < image->numcomps; compno++) {
+        fprintf(stdout, "Component %d characteristics: %dx%dx%d %s\n", compno,
+                image->comps[compno].w,
+                image->comps[compno].h, image->comps[compno].prec,
+                image->comps[compno].sgnd == 1 ? "signed" : "unsigned");
+
+        w = image->comps[compno].w;
+        h = image->comps[compno].h;
+
+        if (image->comps[compno].prec <= 8) {
+            if (image->comps[compno].sgnd == 1) {
+                signed char curr;
+                int mask = (1 << image->comps[compno].prec) - 1;
+                ptr = image->comps[compno].data;
+                for (line = 0; line < h; line++) {
+                    for (row = 0; row < w; row++)    {
+                        curr = (signed char)(*ptr & mask);
+                        res = fwrite(&curr, sizeof(signed char), 1, rawFile);
+                        if (res < 1) {
+                            fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
+                            return 1;
+                        }
+                        ptr++;
+                    }
+                }
+            } else if (image->comps[compno].sgnd == 0) {
+                unsigned char curr;
+                int mask = (1 << image->comps[compno].prec) - 1;
+                ptr = image->comps[compno].data;
+                for (line = 0; line < h; line++) {
+                    for (row = 0; row < w; row++)    {
+                        curr = (unsigned char)(*ptr & mask);
+                        res = fwrite(&curr, sizeof(unsigned char), 1, rawFile);
+                        if (res < 1) {
+                            fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
+                            return 1;
+                        }
+                        ptr++;
+                    }
+                }
             }
-                                               temp = (unsigned char) curr;
-                                               res = fwrite(&temp, 1, 1, rawFile);
-            if( res < 1 ) {
-              fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
-              return 1;
+        } else if (image->comps[compno].prec <= 16) {
+            if (image->comps[compno].sgnd == 1) {
+                signed short int curr;
+                int mask = (1 << image->comps[compno].prec) - 1;
+                ptr = image->comps[compno].data;
+                for (line = 0; line < h; line++) {
+                    for (row = 0; row < w; row++)    {
+                        unsigned char temp;
+                        curr = (signed short int)(*ptr & mask);
+                        temp = (unsigned char)(curr >> 8);
+                        res = fwrite(&temp, 1, 1, rawFile);
+                        if (res < 1) {
+                            fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
+                            return 1;
+                        }
+                        temp = (unsigned char) curr;
+                        res = fwrite(&temp, 1, 1, rawFile);
+                        if (res < 1) {
+                            fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
+                            return 1;
+                        }
+                        ptr++;
+                    }
+                }
+            } else if (image->comps[compno].sgnd == 0) {
+                unsigned short int curr;
+                int mask = (1 << image->comps[compno].prec) - 1;
+                ptr = image->comps[compno].data;
+                for (line = 0; line < h; line++) {
+                    for (row = 0; row < w; row++)    {
+                        unsigned char temp;
+                        curr = (unsigned short int)(*ptr & mask);
+                        temp = (unsigned char)(curr >> 8);
+                        res = fwrite(&temp, 1, 1, rawFile);
+                        if (res < 1) {
+                            fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
+                            return 1;
+                        }
+                        temp = (unsigned char) curr;
+                        res = fwrite(&temp, 1, 1, rawFile);
+                        if (res < 1) {
+                            fprintf(stderr, "failed to write 1 byte for %s\n", outfile);
+                            return 1;
+                        }
+                        ptr++;
+                    }
+                }
             }
-                                               ptr++;
-                                       }
-                               }
-                       }
-               }
-               else if (image->comps[compno].prec <= 32)
-               {
-                       fprintf(stderr,"More than 16 bits per component no handled yet\n");
-                       return 1;
-               }
-               else
-               {
-                       fprintf(stderr,"Error: invalid precision: %d\n", image->comps[compno].prec);
-                       return 1;
-               }
-       }
-       fclose(rawFile);
-       return 0;
+        } else if (image->comps[compno].prec <= 32) {
+            fprintf(stderr, "More than 16 bits per component no handled yet\n");
+            return 1;
+        } else {
+            fprintf(stderr, "Error: invalid precision: %d\n", image->comps[compno].prec);
+            return 1;
+        }
+    }
+    fclose(rawFile);
+    return 0;
 }
 
 #ifdef OPJ_HAVE_LIBPNG
@@ -3044,529 +3169,576 @@ int imagetoraw(opj_image_t * image, const char *outfile)
 
 opj_image_t *pngtoimage(const char *read_idf, opj_cparameters_t * params)
 {
-       png_structp  png;
-       png_infop    info;
-       double gamma, display_exponent;
-       int bit_depth, interlace_type,compression_type, filter_type;
-       int unit;
-       png_uint_32 resx, resy;
-       unsigned int i, j;
-       png_uint_32  width, height;
-       int color_type, has_alpha, is16;
-       unsigned char *s;
-       FILE *reader;
-       unsigned char **rows;
-/* j2k: */
-       opj_image_t *image;
-       opj_image_cmptparm_t cmptparm[4];
-       int sub_dx, sub_dy;
-       unsigned int nr_comp;
-       int *r, *g, *b, *a;
-       unsigned char sigbuf[8];
-
-       if((reader = fopen(read_idf, "rb")) == NULL)
-   {
-       fprintf(stderr,"pngtoimage: can not open %s\n",read_idf);
-       return NULL;
-   }
-       image = NULL; png = NULL; rows = NULL;
-
-       if(fread(sigbuf, 1, MAGIC_SIZE, reader) != MAGIC_SIZE
-       || memcmp(sigbuf, PNG_MAGIC, MAGIC_SIZE) != 0)
-   {
-       fprintf(stderr,"pngtoimage: %s is no valid PNG file\n",read_idf);
-       goto fin;
-   }
-/* libpng-VERSION/example.c: 
- * PC : screen_gamma = 2.2;
- * Mac: screen_gamma = 1.7 or 1.0;
-*/
-       display_exponent = 2.2;
+    png_structp  png;
+    png_infop    info;
+    double gamma, display_exponent;
+    int bit_depth, interlace_type, compression_type, filter_type;
+    int unit;
+    png_uint_32 resx, resy;
+    unsigned int i, j;
+    png_uint_32  width, height;
+    int color_type, has_alpha, is16;
+    unsigned char *s;
+    FILE *reader;
+    unsigned char **rows;
+    /* j2k: */
+    opj_image_t *image;
+    opj_image_cmptparm_t cmptparm[4];
+    int sub_dx, sub_dy;
+    unsigned int nr_comp;
+    int *r, *g, *b, *a;
+    unsigned char sigbuf[8];
+
+    if ((reader = fopen(read_idf, "rb")) == NULL) {
+        fprintf(stderr, "pngtoimage: can not open %s\n", read_idf);
+        return NULL;
+    }
+    image = NULL;
+    png = NULL;
+    rows = NULL;
+
+    if (fread(sigbuf, 1, MAGIC_SIZE, reader) != MAGIC_SIZE
+            || memcmp(sigbuf, PNG_MAGIC, MAGIC_SIZE) != 0) {
+        fprintf(stderr, "pngtoimage: %s is no valid PNG file\n", read_idf);
+        goto fin;
+    }
+    /* libpng-VERSION/example.c:
    * PC : screen_gamma = 2.2;
    * Mac: screen_gamma = 1.7 or 1.0;
+    */
+    display_exponent = 2.2;
 
-       if((png = png_create_read_struct(PNG_LIBPNG_VER_STRING,
-                                   NULL, NULL, NULL)) == NULL)
-         goto fin;
-       if((info = png_create_info_struct(png)) == NULL)
-         goto fin;
+    if ((png = png_create_read_struct(PNG_LIBPNG_VER_STRING,
+                                      NULL, NULL, NULL)) == NULL) {
+        goto fin;
+    }
+    if ((info = png_create_info_struct(png)) == NULL) {
+        goto fin;
+    }
 
-       if(setjmp(png_jmpbuf(png)))
-         goto fin;
+    if (setjmp(png_jmpbuf(png))) {
+        goto fin;
+    }
 
-       png_init_io(png, reader);
-       png_set_sig_bytes(png, MAGIC_SIZE);
+    png_init_io(png, reader);
+    png_set_sig_bytes(png, MAGIC_SIZE);
 
-       png_read_info(png, info);
+    png_read_info(png, info);
 
-       if(png_get_IHDR(png, info, &width, &height,
-               &bit_depth, &color_type, &interlace_type, 
-               &compression_type, &filter_type) == 0)
-        goto fin;
+    if (png_get_IHDR(png, info, &width, &height,
+                     &bit_depth, &color_type, &interlace_type,
+                     &compression_type, &filter_type) == 0) {
+        goto fin;
+    }
 
-/* png_set_expand():
- * expand paletted images to RGB, expand grayscale images of
- * less than 8-bit depth to 8-bit depth, and expand tRNS chunks
- * to alpha channels.
-*/
-       if(color_type == PNG_COLOR_TYPE_PALETTE)
-         png_set_expand(png);
-       else
-       if(color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8)
-         png_set_expand(png);
+    /* png_set_expand():
    * expand paletted images to RGB, expand grayscale images of
    * less than 8-bit depth to 8-bit depth, and expand tRNS chunks
    * to alpha channels.
+    */
+    if (color_type == PNG_COLOR_TYPE_PALETTE) {
+        png_set_expand(png);
+    } else if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) {
+        png_set_expand(png);
+    }
 
-       if(png_get_valid(png, info, PNG_INFO_tRNS))
-         png_set_expand(png);
+    if (png_get_valid(png, info, PNG_INFO_tRNS)) {
+        png_set_expand(png);
+    }
 
-       is16 = (bit_depth == 16);
+    is16 = (bit_depth == 16);
 
-/* GRAY => RGB; GRAY_ALPHA => RGBA
-*/
-       if(color_type == PNG_COLOR_TYPE_GRAY
-       || color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
-   {
-       png_set_gray_to_rgb(png);
-       color_type = 
-        (color_type == PNG_COLOR_TYPE_GRAY? PNG_COLOR_TYPE_RGB:
-               PNG_COLOR_TYPE_RGB_ALPHA);
-   }
-       if( !png_get_gAMA(png, info, &gamma))
-         gamma = 0.45455;
+    /* GRAY => RGB; GRAY_ALPHA => RGBA
+    */
+    if (color_type == PNG_COLOR_TYPE_GRAY
+            || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
+        png_set_gray_to_rgb(png);
+        color_type =
+            (color_type == PNG_COLOR_TYPE_GRAY ? PNG_COLOR_TYPE_RGB :
+             PNG_COLOR_TYPE_RGB_ALPHA);
+    }
+    if (!png_get_gAMA(png, info, &gamma)) {
+        gamma = 0.45455;
+    }
 
-       png_set_gamma(png, display_exponent, gamma);
+    png_set_gamma(png, display_exponent, gamma);
 
-       png_read_update_info(png, info);
+    png_read_update_info(png, info);
 
-       png_get_pHYs(png, info, &resx, &resy, &unit);
+    png_get_pHYs(png, info, &resx, &resy, &unit);
 
-       color_type = png_get_color_type(png, info);
+    color_type = png_get_color_type(png, info);
 
-       has_alpha = (color_type == PNG_COLOR_TYPE_RGB_ALPHA);
+    has_alpha = (color_type == PNG_COLOR_TYPE_RGB_ALPHA);
 
-       nr_comp = 3 + has_alpha;
+    nr_comp = 3 + has_alpha;
 
-       bit_depth = png_get_bit_depth(png, info);
+    bit_depth = png_get_bit_depth(png, info);
 
-       rows = (unsigned char**)calloc(height+1, sizeof(unsigned char*));
-       for(i = 0; i < height; ++i)
-        rows[i] = (unsigned char*)malloc(png_get_rowbytes(png,info));
+    rows = (unsigned char**)calloc(height + 1, sizeof(unsigned char*));
+    for (i = 0; i < height; ++i) {
+        rows[i] = (unsigned char*)malloc(png_get_rowbytes(png, info));
+    }
 
-       png_read_image(png, rows);
+    png_read_image(png, rows);
 
-       memset(&cmptparm, 0, 4 * sizeof(opj_image_cmptparm_t));
+    memset(&cmptparm, 0, 4 * sizeof(opj_image_cmptparm_t));
 
-       sub_dx = params->subsampling_dx; sub_dy = params->subsampling_dy;
+    sub_dx = params->subsampling_dx;
+    sub_dy = params->subsampling_dy;
 
-       for(i = 0; i < nr_comp; ++i)
-   {
-       cmptparm[i].prec = bit_depth;
-/* bits_per_pixel: 8 or 16 */
-       cmptparm[i].bpp = bit_depth;
-       cmptparm[i].sgnd = 0;
-       cmptparm[i].dx = sub_dx;
-       cmptparm[i].dy = sub_dy;
-       cmptparm[i].w = width;
-       cmptparm[i].h = height;
-   }
+    for (i = 0; i < nr_comp; ++i) {
+        cmptparm[i].prec = bit_depth;
+        /* bits_per_pixel: 8 or 16 */
+        cmptparm[i].bpp = bit_depth;
+        cmptparm[i].sgnd = 0;
+        cmptparm[i].dx = sub_dx;
+        cmptparm[i].dy = sub_dy;
+        cmptparm[i].w = width;
+        cmptparm[i].h = height;
+    }
 
-       image = opj_image_create(nr_comp, &cmptparm[0], CLRSPC_SRGB);
+    image = opj_image_create(nr_comp, &cmptparm[0], CLRSPC_SRGB);
 
-       if(image == NULL) goto fin;
+    if (image == NULL) {
+        goto fin;
+    }
 
     image->x0 = params->image_offset_x0;
     image->y0 = params->image_offset_y0;
     image->x1 = image->x0 + (width  - 1) * sub_dx + 1 + image->x0;
     image->y1 = image->y0 + (height - 1) * sub_dy + 1 + image->y0;
 
-       r = image->comps[0].data;
-       g = image->comps[1].data;
-       b = image->comps[2].data;
-       a = image->comps[3].data;
-
-       for(i = 0; i < height; ++i)
-   {
-       s = rows[i];
-
-       for(j = 0; j < width; ++j)
-  {
-       if(is16)
- {
-       *r++ = s[0]<<8|s[1]; s += 2;
-
-       *g++ = s[0]<<8|s[1]; s += 2;
-       
-       *b++ = s[0]<<8|s[1]; s += 2;
-       
-       if(has_alpha) { *a++ = s[0]<<8|s[1]; s += 2; }
-
-       continue;
- }
-       *r++ = *s++; *g++ = *s++; *b++ = *s++;
-
-       if(has_alpha) *a++ = *s++;
-  }
-   }
+    r = image->comps[0].data;
+    g = image->comps[1].data;
+    b = image->comps[2].data;
+    a = image->comps[3].data;
+
+    for (i = 0; i < height; ++i) {
+        s = rows[i];
+
+        for (j = 0; j < width; ++j) {
+            if (is16) {
+                *r++ = s[0] << 8 | s[1];
+                s += 2;
+
+                *g++ = s[0] << 8 | s[1];
+                s += 2;
+
+                *b++ = s[0] << 8 | s[1];
+                s += 2;
+
+                if (has_alpha) {
+                    *a++ = s[0] << 8 | s[1];
+                    s += 2;
+                }
+
+                continue;
+            }
+            *r++ = *s++;
+            *g++ = *s++;
+            *b++ = *s++;
+
+            if (has_alpha) {
+                *a++ = *s++;
+            }
+        }
+    }
 fin:
-       if(rows)
-   {
-       for(i = 0; i < height; ++i)
-        free(rows[i]);
-       free(rows);
-   }
-       if(png)
-         png_destroy_read_struct(&png, &info, NULL);
+    if (rows) {
+        for (i = 0; i < height; ++i) {
+            free(rows[i]);
+        }
+        free(rows);
+    }
+    if (png) {
+        png_destroy_read_struct(&png, &info, NULL);
+    }
 
-       fclose(reader);
+    fclose(reader);
 
-       return image;
+    return image;
 
 }/* pngtoimage() */
 
 int imagetopng(opj_image_t * image, const char *write_idf)
 {
-       FILE *writer;
-       png_structp png;
-       png_infop info;
-       int *red, *green, *blue, *alpha;
-       unsigned char *row_buf, *d;
-       int has_alpha, width, height, nr_comp, color_type;
-       int adjustR, adjustG, adjustB, adjustA, x, y, fails;
-       int prec, ushift, dshift, is16, force16, force8;
-       unsigned short mask = 0xffff;
-       png_color_8 sig_bit;
-
-       is16 = force16 = force8 = ushift = dshift = 0; fails = 1;
-       prec = image->comps[0].prec;
-       nr_comp = image->numcomps;
-
-       if(prec > 8 && prec < 16)
-   {
-       ushift = 16 - prec; dshift = prec - ushift;
-       prec = 16; force16 = 1;
-   }
-       else
-       if(prec < 8 && nr_comp > 1)/* GRAY_ALPHA, RGB, RGB_ALPHA */
-   {
-       ushift = 8 - prec; dshift = 8 - ushift;
-       prec = 8; force8 = 1;
-   }
-
-       if(prec != 1 && prec != 2 && prec != 4 && prec != 8 && prec != 16)
-   {
-       fprintf(stderr,"imagetopng: can not create %s"
-        "\n\twrong bit_depth %d\n", write_idf, prec);
-       return fails;
-   }
-       writer = fopen(write_idf, "wb");
-
-       if(writer == NULL) return fails;
-
-       info = NULL; has_alpha = 0;
-
-/* Create and initialize the png_struct with the desired error handler
- * functions.  If you want to use the default stderr and longjump method,
- * you can supply NULL for the last three parameters.  We also check that
- * the library version is compatible with the one used at compile time,
- * in case we are using dynamically linked libraries.  REQUIRED.
-*/
-       png = png_create_write_struct(PNG_LIBPNG_VER_STRING,
-               NULL, NULL, NULL);
-/*png_voidp user_error_ptr, user_error_fn, user_warning_fn); */
+    FILE *writer;
+    png_structp png;
+    png_infop info;
+    int *red, *green, *blue, *alpha;
+    unsigned char *row_buf, *d;
+    int has_alpha, width, height, nr_comp, color_type;
+    int adjustR, adjustG, adjustB, adjustA, x, y, fails;
+    int prec, ushift, dshift, is16, force16, force8;
+    unsigned short mask = 0xffff;
+    png_color_8 sig_bit;
+
+    is16 = force16 = force8 = ushift = dshift = 0;
+    fails = 1;
+    prec = image->comps[0].prec;
+    nr_comp = image->numcomps;
+
+    if (prec > 8 && prec < 16) {
+        ushift = 16 - prec;
+        dshift = prec - ushift;
+        prec = 16;
+        force16 = 1;
+    } else if (prec < 8 && nr_comp > 1) { /* GRAY_ALPHA, RGB, RGB_ALPHA */
+        ushift = 8 - prec;
+        dshift = 8 - ushift;
+        prec = 8;
+        force8 = 1;
+    }
 
-       if(png == NULL) goto fin;
+    if (prec != 1 && prec != 2 && prec != 4 && prec != 8 && prec != 16) {
+        fprintf(stderr, "imagetopng: can not create %s"
+                "\n\twrong bit_depth %d\n", write_idf, prec);
+        return fails;
+    }
+    writer = fopen(write_idf, "wb");
 
-/* Allocate/initialize the image information data.  REQUIRED 
-*/
-       info = png_create_info_struct(png);
+    if (writer == NULL) {
+        return fails;
+    }
 
-       if(info == NULL) goto fin;
+    info = NULL;
+    has_alpha = 0;
 
-/* Set error handling.  REQUIRED if you are not supplying your own
- * error handling functions in the png_create_write_struct() call.
-*/
-       if(setjmp(png_jmpbuf(png))) goto fin;
+    /* Create and initialize the png_struct with the desired error handler
+     * functions.  If you want to use the default stderr and longjump method,
+     * you can supply NULL for the last three parameters.  We also check that
+     * the library version is compatible with the one used at compile time,
+     * in case we are using dynamically linked libraries.  REQUIRED.
+    */
+    png = png_create_write_struct(PNG_LIBPNG_VER_STRING,
+                                  NULL, NULL, NULL);
+    /*png_voidp user_error_ptr, user_error_fn, user_warning_fn); */
 
-/* I/O initialization functions is REQUIRED 
-*/
-       png_init_io(png, writer);
-
-/* Set the image information here.  Width and height are up to 2^31,
- * bit_depth is one of 1, 2, 4, 8, or 16, but valid values also depend on
- * the color_type selected. color_type is one of PNG_COLOR_TYPE_GRAY,
- * PNG_COLOR_TYPE_GRAY_ALPHA, PNG_COLOR_TYPE_PALETTE, PNG_COLOR_TYPE_RGB,
- * or PNG_COLOR_TYPE_RGB_ALPHA.  interlace is either PNG_INTERLACE_NONE or
- * PNG_INTERLACE_ADAM7, and the compression_type and filter_type MUST
- * currently be PNG_COMPRESSION_TYPE_BASE and PNG_FILTER_TYPE_BASE. 
- * REQUIRED
- *
- * ERRORS:
- *
- * color_type == PNG_COLOR_TYPE_PALETTE && bit_depth > 8
- * color_type == PNG_COLOR_TYPE_RGB && bit_depth < 8
- * color_type == PNG_COLOR_TYPE_GRAY_ALPHA && bit_depth < 8
- * color_type == PNG_COLOR_TYPE_RGB_ALPHA) && bit_depth < 8
- * 
-*/
-       png_set_compression_level(png, Z_BEST_COMPRESSION);
-
-       if(prec == 16) mask = 0xffff;
-       else
-       if(prec == 8) mask = 0x00ff;
-       else
-       if(prec == 4) mask = 0x000f;
-       else
-       if(prec == 2) mask = 0x0003;
-       else
-       if(prec == 1) mask = 0x0001;
-
-       if(nr_comp >= 3
-    && image->comps[0].dx == image->comps[1].dx
-    && image->comps[1].dx == image->comps[2].dx
-    && image->comps[0].dy == image->comps[1].dy
-    && image->comps[1].dy == image->comps[2].dy
-    && image->comps[0].prec == image->comps[1].prec
-    && image->comps[1].prec == image->comps[2].prec)
-   {
-       int v;
-
-    has_alpha = (nr_comp > 3); 
-
-       is16 = (prec == 16);
-       
-    width = image->comps[0].w;
-    height = image->comps[0].h;
+    if (png == NULL) {
+        goto fin;
+    }
 
-       red = image->comps[0].data;
-       green = image->comps[1].data;
-       blue = image->comps[2].data;
-
-    sig_bit.red = sig_bit.green = sig_bit.blue = prec;
-
-       if(has_alpha) 
-  {
-       sig_bit.alpha = prec;
-       alpha = image->comps[3].data; 
-       color_type = PNG_COLOR_TYPE_RGB_ALPHA;
-       adjustA = (image->comps[3].sgnd ? 1 << (image->comps[3].prec - 1) : 0);
-  }
-       else 
-  {
-       sig_bit.alpha = 0; alpha = NULL;
-       color_type = PNG_COLOR_TYPE_RGB;
-       adjustA = 0;
-  }
-       png_set_sBIT(png, info, &sig_bit);
-
-       png_set_IHDR(png, info, width, height, prec, 
-        color_type,
-        PNG_INTERLACE_NONE,
-        PNG_COMPRESSION_TYPE_BASE,  PNG_FILTER_TYPE_BASE);
-/*=============================*/
-       png_write_info(png, info);
-/*=============================*/
-       if(prec < 8)
-  {
-       png_set_packing(png);
-  }
-    adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
-    adjustG = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
-    adjustB = (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
+    /* Allocate/initialize the image information data.  REQUIRED
+    */
+    info = png_create_info_struct(png);
+
+    if (info == NULL) {
+        goto fin;
+    }
+
+    /* Set error handling.  REQUIRED if you are not supplying your own
+     * error handling functions in the png_create_write_struct() call.
+    */
+    if (setjmp(png_jmpbuf(png))) {
+        goto fin;
+    }
 
-       row_buf = (unsigned char*)malloc(width * nr_comp * 2);
+    /* I/O initialization functions is REQUIRED
+    */
+    png_init_io(png, writer);
+
+    /* Set the image information here.  Width and height are up to 2^31,
+     * bit_depth is one of 1, 2, 4, 8, or 16, but valid values also depend on
+     * the color_type selected. color_type is one of PNG_COLOR_TYPE_GRAY,
+     * PNG_COLOR_TYPE_GRAY_ALPHA, PNG_COLOR_TYPE_PALETTE, PNG_COLOR_TYPE_RGB,
+     * or PNG_COLOR_TYPE_RGB_ALPHA.  interlace is either PNG_INTERLACE_NONE or
+     * PNG_INTERLACE_ADAM7, and the compression_type and filter_type MUST
+     * currently be PNG_COMPRESSION_TYPE_BASE and PNG_FILTER_TYPE_BASE.
+     * REQUIRED
+     *
+     * ERRORS:
+     *
+     * color_type == PNG_COLOR_TYPE_PALETTE && bit_depth > 8
+     * color_type == PNG_COLOR_TYPE_RGB && bit_depth < 8
+     * color_type == PNG_COLOR_TYPE_GRAY_ALPHA && bit_depth < 8
+     * color_type == PNG_COLOR_TYPE_RGB_ALPHA) && bit_depth < 8
+     *
+    */
+    png_set_compression_level(png, Z_BEST_COMPRESSION);
+
+    if (prec == 16) {
+        mask = 0xffff;
+    } else if (prec == 8) {
+        mask = 0x00ff;
+    } else if (prec == 4) {
+        mask = 0x000f;
+    } else if (prec == 2) {
+        mask = 0x0003;
+    } else if (prec == 1) {
+        mask = 0x0001;
+    }
+
+    if (nr_comp >= 3
+            && image->comps[0].dx == image->comps[1].dx
+            && image->comps[1].dx == image->comps[2].dx
+            && image->comps[0].dy == image->comps[1].dy
+            && image->comps[1].dy == image->comps[2].dy
+            && image->comps[0].prec == image->comps[1].prec
+            && image->comps[1].prec == image->comps[2].prec) {
+        int v;
+
+        has_alpha = (nr_comp > 3);
+
+        is16 = (prec == 16);
+
+        width = image->comps[0].w;
+        height = image->comps[0].h;
+
+        red = image->comps[0].data;
+        green = image->comps[1].data;
+        blue = image->comps[2].data;
+
+        sig_bit.red = sig_bit.green = sig_bit.blue = prec;
+
+        if (has_alpha) {
+            sig_bit.alpha = prec;
+            alpha = image->comps[3].data;
+            color_type = PNG_COLOR_TYPE_RGB_ALPHA;
+            adjustA = (image->comps[3].sgnd ? 1 << (image->comps[3].prec - 1) : 0);
+        } else {
+            sig_bit.alpha = 0;
+            alpha = NULL;
+            color_type = PNG_COLOR_TYPE_RGB;
+            adjustA = 0;
+        }
+        png_set_sBIT(png, info, &sig_bit);
+
+        png_set_IHDR(png, info, width, height, prec,
+                     color_type,
+                     PNG_INTERLACE_NONE,
+                     PNG_COMPRESSION_TYPE_BASE,  PNG_FILTER_TYPE_BASE);
+        /*=============================*/
+        png_write_info(png, info);
+        /*=============================*/
+        if (prec < 8) {
+            png_set_packing(png);
+        }
+        adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
+        adjustG = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
+        adjustB = (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
 
-       for(y = 0; y < height; ++y)
-  {
-       d = row_buf;
+        row_buf = (unsigned char*)malloc(width * nr_comp * 2);
 
-       for(x = 0; x < width; ++x)
- {
-               if(is16)
-          {
-               v = *red + adjustR; ++red;
-               
-               if(force16) { v = (v<<ushift) + (v>>dshift); }
+        for (y = 0; y < height; ++y) {
+            d = row_buf;
 
-               *d++ = (unsigned char)(v>>8); *d++ = (unsigned char)v;
+            for (x = 0; x < width; ++x) {
+                if (is16) {
+                    v = *red + adjustR;
+                    ++red;
 
-               v = *green + adjustG; ++green;
-               
-               if(force16) { v = (v<<ushift) + (v>>dshift); }
+                    if (force16) {
+                        v = (v << ushift) + (v >> dshift);
+                    }
 
-               *d++ = (unsigned char)(v>>8); *d++ = (unsigned char)v;
+                    *d++ = (unsigned char)(v >> 8);
+                    *d++ = (unsigned char)v;
 
-               v =  *blue + adjustB; ++blue;
-               
-               if(force16) { v = (v<<ushift) + (v>>dshift); }
+                    v = *green + adjustG;
+                    ++green;
 
-               *d++ = (unsigned char)(v>>8); *d++ = (unsigned char)v;
+                    if (force16) {
+                        v = (v << ushift) + (v >> dshift);
+                    }
 
-               if(has_alpha)
-         {
-               v = *alpha + adjustA; ++alpha;
-               
-               if(force16) { v = (v<<ushift) + (v>>dshift); }
+                    *d++ = (unsigned char)(v >> 8);
+                    *d++ = (unsigned char)v;
 
-               *d++ = (unsigned char)(v>>8); *d++ = (unsigned char)v;
-         }
-               continue;
-          }/* if(is16) */
+                    v =  *blue + adjustB;
+                    ++blue;
 
-               v = *red + adjustR; ++red;
+                    if (force16) {
+                        v = (v << ushift) + (v >> dshift);
+                    }
 
-               if(force8) { v = (v<<ushift) + (v>>dshift); }
+                    *d++ = (unsigned char)(v >> 8);
+                    *d++ = (unsigned char)v;
 
-               *d++ = (unsigned char)(v & mask);
+                    if (has_alpha) {
+                        v = *alpha + adjustA;
+                        ++alpha;
 
-               v = *green + adjustG; ++green;
+                        if (force16) {
+                            v = (v << ushift) + (v >> dshift);
+                        }
 
-               if(force8) { v = (v<<ushift) + (v>>dshift); }
+                        *d++ = (unsigned char)(v >> 8);
+                        *d++ = (unsigned char)v;
+                    }
+                    continue;
+                }/* if(is16) */
 
-               *d++ = (unsigned char)(v & mask);
+                v = *red + adjustR;
+                ++red;
 
-               v = *blue + adjustB; ++blue;
+                if (force8) {
+                    v = (v << ushift) + (v >> dshift);
+                }
 
-               if(force8) { v = (v<<ushift) + (v>>dshift); }
+                *d++ = (unsigned char)(v & mask);
 
-               *d++ = (unsigned char)(v & mask);
+                v = *green + adjustG;
+                ++green;
 
-               if(has_alpha)
-          {
-               v = *alpha + adjustA; ++alpha;
+                if (force8) {
+                    v = (v << ushift) + (v >> dshift);
+                }
 
-               if(force8) { v = (v<<ushift) + (v>>dshift); }
+                *d++ = (unsigned char)(v & mask);
 
-               *d++ = (unsigned char)(v & mask);
-          }
- }     /* for(x) */
+                v = *blue + adjustB;
+                ++blue;
 
-       png_write_row(png, row_buf);
+                if (force8) {
+                    v = (v << ushift) + (v >> dshift);
+                }
 
-  }    /* for(y) */
-       free(row_buf);
+                *d++ = (unsigned char)(v & mask);
 
-   }/* nr_comp >= 3 */
-       else
-       if(nr_comp == 1 /* GRAY */
-       || (   nr_comp == 2 /* GRAY_ALPHA */
-               && image->comps[0].dx == image->comps[1].dx
-               && image->comps[0].dy == image->comps[1].dy
-               && image->comps[0].prec == image->comps[1].prec))
-   {
-       int v;
+                if (has_alpha) {
+                    v = *alpha + adjustA;
+                    ++alpha;
 
-       red = image->comps[0].data;
+                    if (force8) {
+                        v = (v << ushift) + (v >> dshift);
+                    }
 
-    sig_bit.gray = prec;
-    sig_bit.red = sig_bit.green = sig_bit.blue = sig_bit.alpha = 0;
-       alpha = NULL; adjustA = 0;
-       color_type = PNG_COLOR_TYPE_GRAY;
+                    *d++ = (unsigned char)(v & mask);
+                }
+            }  /* for(x) */
 
-    if(nr_comp == 2) 
-  { 
-       has_alpha = 1; sig_bit.alpha = prec;
-       alpha = image->comps[1].data;
-       color_type = PNG_COLOR_TYPE_GRAY_ALPHA;
-       adjustA = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
-  }
-    width = image->comps[0].w;
-    height = image->comps[0].h;
+            png_write_row(png, row_buf);
 
-       png_set_IHDR(png, info, width, height, sig_bit.gray,
-     color_type,
-     PNG_INTERLACE_NONE,
-     PNG_COMPRESSION_TYPE_BASE,  PNG_FILTER_TYPE_BASE);
+        } /* for(y) */
+        free(row_buf);
 
-       png_set_sBIT(png, info, &sig_bit);
-/*=============================*/
-       png_write_info(png, info);
-/*=============================*/
-       adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
+    }/* nr_comp >= 3 */
+    else if (nr_comp == 1 /* GRAY */
+             || (nr_comp == 2    /* GRAY_ALPHA */
+                 && image->comps[0].dx == image->comps[1].dx
+                 && image->comps[0].dy == image->comps[1].dy
+                 && image->comps[0].prec == image->comps[1].prec)) {
+        int v;
 
-       if(prec < 8)
-  {
-       png_set_packing(png);
-  }
+        red = image->comps[0].data;
 
-       if(prec > 8)
-  {
-       row_buf = (unsigned char*)
-        malloc(width * nr_comp * sizeof(unsigned short));
+        sig_bit.gray = prec;
+        sig_bit.red = sig_bit.green = sig_bit.blue = sig_bit.alpha = 0;
+        alpha = NULL;
+        adjustA = 0;
+        color_type = PNG_COLOR_TYPE_GRAY;
 
-       for(y = 0; y < height; ++y)
- {
-       d = row_buf;
+        if (nr_comp == 2) {
+            has_alpha = 1;
+            sig_bit.alpha = prec;
+            alpha = image->comps[1].data;
+            color_type = PNG_COLOR_TYPE_GRAY_ALPHA;
+            adjustA = (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
+        }
+        width = image->comps[0].w;
+        height = image->comps[0].h;
+
+        png_set_IHDR(png, info, width, height, sig_bit.gray,
+                     color_type,
+                     PNG_INTERLACE_NONE,
+                     PNG_COMPRESSION_TYPE_BASE,  PNG_FILTER_TYPE_BASE);
+
+        png_set_sBIT(png, info, &sig_bit);
+        /*=============================*/
+        png_write_info(png, info);
+        /*=============================*/
+        adjustR = (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
+
+        if (prec < 8) {
+            png_set_packing(png);
+        }
+
+        if (prec > 8) {
+            row_buf = (unsigned char*)
+                      malloc(width * nr_comp * sizeof(unsigned short));
+
+            for (y = 0; y < height; ++y) {
+                d = row_buf;
 
-               for(x = 0; x < width; ++x)
-          {
-               v = *red + adjustR; ++red;
+                for (x = 0; x < width; ++x) {
+                    v = *red + adjustR;
+                    ++red;
 
-               if(force16) { v = (v<<ushift) + (v>>dshift); }
+                    if (force16) {
+                        v = (v << ushift) + (v >> dshift);
+                    }
 
-               *d++ = (unsigned char)(v>>8); *d++ = (unsigned char)v;
+                    *d++ = (unsigned char)(v >> 8);
+                    *d++ = (unsigned char)v;
 
-               if(has_alpha)
-         {
-               v = *alpha++;
+                    if (has_alpha) {
+                        v = *alpha++;
 
-               if(force16) { v = (v<<ushift) + (v>>dshift); }
+                        if (force16) {
+                            v = (v << ushift) + (v >> dshift);
+                        }
 
-               *d++ = (unsigned char)(v>>8); *d++ = (unsigned char)v;
-         }
-          }/* for(x) */
-       png_write_row(png, row_buf);
+                        *d++ = (unsigned char)(v >> 8);
+                        *d++ = (unsigned char)v;
+                    }
+                }/* for(x) */
+                png_write_row(png, row_buf);
 
- }     /* for(y) */
-       free(row_buf);
-  }
-       else /* prec <= 8 */
-  {
-       row_buf = (unsigned char*)calloc(width, nr_comp * 2);
+            }  /* for(y) */
+            free(row_buf);
+        } else { /* prec <= 8 */
+            row_buf = (unsigned char*)calloc(width, nr_comp * 2);
 
-       for(y = 0; y < height; ++y)
- {
-       d = row_buf;
+            for (y = 0; y < height; ++y) {
+                d = row_buf;
 
-               for(x = 0; x < width; ++x)
-          {
-               v = *red + adjustR; ++red;
+                for (x = 0; x < width; ++x) {
+                    v = *red + adjustR;
+                    ++red;
 
-               if(force8) { v = (v<<ushift) + (v>>dshift); }
+                    if (force8) {
+                        v = (v << ushift) + (v >> dshift);
+                    }
 
-               *d++ = (unsigned char)(v & mask);
+                    *d++ = (unsigned char)(v & mask);
 
-               if(has_alpha)
-         {
-               v = *alpha + adjustA; ++alpha;
+                    if (has_alpha) {
+                        v = *alpha + adjustA;
+                        ++alpha;
 
-               if(force8) { v = (v<<ushift) + (v>>dshift); }
+                        if (force8) {
+                            v = (v << ushift) + (v >> dshift);
+                        }
 
-               *d++ = (unsigned char)(v & mask);
-         }
-          }/* for(x) */
+                        *d++ = (unsigned char)(v & mask);
+                    }
+                }/* for(x) */
 
-       png_write_row(png, row_buf);
+                png_write_row(png, row_buf);
 
- }     /* for(y) */
-       free(row_buf);
-  }
-   }
-       else
-   {
-       fprintf(stderr,"imagetopng: can not create %s\n",write_idf);
-       goto fin;
-   }
-       png_write_end(png, info);
+            }  /* for(y) */
+            free(row_buf);
+        }
+    } else {
+        fprintf(stderr, "imagetopng: can not create %s\n", write_idf);
+        goto fin;
+    }
+    png_write_end(png, info);
 
-       fails = 0;
+    fails = 0;
 
 fin:
 
-       if(png)
-   {
-    png_destroy_write_struct(&png, &info);
-   }
-       fclose(writer);
+    if (png) {
+        png_destroy_write_struct(&png, &info);
+    }
+    fclose(writer);
 
-       if(fails) remove(write_idf);
+    if (fails) {
+        remove(write_idf);
+    }
 
-       return fails;
+    return fails;
 }/* imagetopng() */
 #endif /* OPJ_HAVE_LIBPNG */
index 173e1633d7a671fd95d9f12b08051b3969877972..6c6c8fc02680a04321c268d6cb5c448961b658fe 100644 (file)
@@ -1,12 +1,12 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
  * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
  * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
 
 /**
 Write a structured index to a file
-@param cstr_info Codestream information 
+@param cstr_info Codestream information
 @param index Index filename
 @return Returns 0 if successful, returns 1 otherwise
 */
-int write_index_file(opj_codestream_info_t *cstr_info, char *index) {
-       int tileno, compno, layno, resno, precno, pack_nb, x, y;
-       FILE *stream = NULL;
-       double total_disto = 0;
-/* UniPG>> */
-       int tilepartno;
-       char disto_on, numpix_on;
+int write_index_file(opj_codestream_info_t *cstr_info, char *index)
+{
+    int tileno, compno, layno, resno, precno, pack_nb, x, y;
+    FILE *stream = NULL;
+    double total_disto = 0;
+    /* UniPG>> */
+    int tilepartno;
+    char disto_on, numpix_on;
 
 #ifdef USE_JPWL
-       if (!strcmp(index, JPWL_PRIVATEINDEX_NAME))
-               return 0;
+    if (!strcmp(index, JPWL_PRIVATEINDEX_NAME)) {
+        return 0;
+    }
 #endif /* USE_JPWL */
-/* <<UniPG */
-
-       if (!cstr_info)         
-               return 1;
-
-       stream = fopen(index, "w");
-       if (!stream) {
-               fprintf(stderr, "failed to open index file [%s] for writing\n", index);
-               return 1;
-       }
-       
-       if (cstr_info->tile[0].distotile)
-               disto_on = 1;
-       else 
-               disto_on = 0;
-
-       if (cstr_info->tile[0].numpix)
-               numpix_on = 1;
-       else 
-               numpix_on = 0;
-
-       fprintf(stream, "%d %d\n", cstr_info->image_w, cstr_info->image_h);
-       fprintf(stream, "%d\n", cstr_info->prog);
-       fprintf(stream, "%d %d\n", cstr_info->tile_x, cstr_info->tile_y);
-       fprintf(stream, "%d %d\n", cstr_info->tw, cstr_info->th);
-       fprintf(stream, "%d\n", cstr_info->numcomps);
-       fprintf(stream, "%d\n", cstr_info->numlayers);
-       fprintf(stream, "%d\n", cstr_info->numdecompos[0]); /* based on component 0 */
-
-       for (resno = cstr_info->numdecompos[0]; resno >= 0; resno--) {
-               fprintf(stream, "[%d,%d] ", 
-                       (1 << cstr_info->tile[0].pdx[resno]), (1 << cstr_info->tile[0].pdx[resno]));    /* based on tile 0 and component 0 */
-       }
-
-       fprintf(stream, "\n");
-/* UniPG>> */
-       fprintf(stream, "%d\n", cstr_info->main_head_start);
-/* <<UniPG */
-       fprintf(stream, "%d\n", cstr_info->main_head_end);
-       fprintf(stream, "%d\n", cstr_info->codestream_size);
-       
-       fprintf(stream, "\nINFO ON TILES\n");
-       fprintf(stream, "tileno start_pos  end_hd  end_tile   nbparts");
-       if (disto_on)
-               fprintf(stream,"         disto");
-       if (numpix_on)
-               fprintf(stream,"     nbpix");
-       if (disto_on && numpix_on)
-               fprintf(stream,"  disto/nbpix");
-       fprintf(stream, "\n");
-
-       for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) {
-               fprintf(stream, "%4d %9d %9d %9d %9d", 
-                       cstr_info->tile[tileno].tileno,
-                       cstr_info->tile[tileno].start_pos,
-                       cstr_info->tile[tileno].end_header,
-                       cstr_info->tile[tileno].end_pos,
-                       cstr_info->tile[tileno].num_tps);
-               if (disto_on)
-                       fprintf(stream," %9e", cstr_info->tile[tileno].distotile);
-               if (numpix_on)
-                       fprintf(stream," %9d", cstr_info->tile[tileno].numpix);
-               if (disto_on && numpix_on)
-                       fprintf(stream," %9e", cstr_info->tile[tileno].distotile / cstr_info->tile[tileno].numpix);
-               fprintf(stream, "\n");
-       }
-               
-       for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) {
-               int start_pos, end_ph_pos, end_pos;
-               double disto = 0;
-               int max_numdecompos = 0;
-               pack_nb = 0;
-
-               for (compno = 0; compno < cstr_info->numcomps; compno++) {
-                       if (max_numdecompos < cstr_info->numdecompos[compno])
-                               max_numdecompos = cstr_info->numdecompos[compno];
-               }       
-
-               fprintf(stream, "\nTILE %d DETAILS\n", tileno); 
-               fprintf(stream, "part_nb tileno  start_pack num_packs  start_pos end_tph_pos   end_pos\n");
-               for (tilepartno = 0; tilepartno < cstr_info->tile[tileno].num_tps; tilepartno++)
-                       fprintf(stream, "%4d %9d   %9d %9d  %9d %11d %9d\n",
-                               tilepartno, tileno,
-                               cstr_info->tile[tileno].tp[tilepartno].tp_start_pack,
-                               cstr_info->tile[tileno].tp[tilepartno].tp_numpacks,
-                               cstr_info->tile[tileno].tp[tilepartno].tp_start_pos,
-                               cstr_info->tile[tileno].tp[tilepartno].tp_end_header,
-                               cstr_info->tile[tileno].tp[tilepartno].tp_end_pos
-                               );
-
-               if (cstr_info->prog == LRCP) {  /* LRCP */
-                       fprintf(stream, "LRCP\npack_nb tileno layno resno compno precno start_pos end_ph_pos end_pos");
-                       if (disto_on)
-                               fprintf(stream, " disto");
-                       fprintf(stream,"\n");
-
-                       for (layno = 0; layno < cstr_info->numlayers; layno++) {
-                               for (resno = 0; resno < max_numdecompos + 1; resno++) {
-                                       for (compno = 0; compno < cstr_info->numcomps; compno++) {
-                                               int prec_max;
-                                               if (resno > cstr_info->numdecompos[compno])
-                                                       break;
-                                               prec_max = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];
-                                               for (precno = 0; precno < prec_max; precno++) {
-                                                       start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
-                                                       end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
-                                                       end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
-                                                       disto = cstr_info->tile[tileno].packet[pack_nb].disto;
-                                                       fprintf(stream, "%4d %6d %7d %5d %6d  %6d    %6d     %6d %7d",
-                                                               pack_nb, tileno, layno, resno, compno, precno, start_pos, end_ph_pos, end_pos);
-                                                       if (disto_on)
-                                                               fprintf(stream, " %8e", disto);
-                                                       fprintf(stream, "\n");
-                                                       total_disto += disto;
-                                                       pack_nb++;
-                                               }
-                                       }
-                               }
-                       }
-               } /* LRCP */
-
-               else if (cstr_info->prog == RLCP) {     /* RLCP */                      
-                       fprintf(stream, "RLCP\npack_nb tileno resno layno compno precno start_pos end_ph_pos end_pos\n");
-                       if (disto_on)
-                               fprintf(stream, " disto");
-                       fprintf(stream,"\n");
-
-                       for (resno = 0; resno < max_numdecompos + 1; resno++) {
-                               for (layno = 0; layno < cstr_info->numlayers; layno++) {
-                                       for (compno = 0; compno < cstr_info->numcomps; compno++) {
-                                               int prec_max; 
-                                               if (resno > cstr_info->numdecompos[compno])
-                                                       break;
-                                               prec_max = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];
-                                               for (precno = 0; precno < prec_max; precno++) {
-                                                       start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
-                                                       end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
-                                                       end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
-                                                       disto = cstr_info->tile[tileno].packet[pack_nb].disto;
-                                                       fprintf(stream, "%4d %6d %5d %7d %6d %6d %9d   %9d %7d",
-                                                               pack_nb, tileno, resno, layno, compno, precno, start_pos, end_ph_pos, end_pos);
-                                                       if (disto_on)
-                                                               fprintf(stream, " %8e", disto);
-                                                       fprintf(stream, "\n");
-                                                       total_disto += disto;
-                                                       pack_nb++;
-                                               }
-                                       }
-                               }
-                       }
-               } /* RLCP */
-
-               else if (cstr_info->prog == RPCL) {     /* RPCL */
-
-                       fprintf(stream, "RPCL\npack_nb tileno resno precno compno layno start_pos end_ph_pos end_pos"); 
-                       if (disto_on)
-                               fprintf(stream, " disto");
-                       fprintf(stream,"\n");
-
-                       for (resno = 0; resno < max_numdecompos + 1; resno++) {
-                               int numprec = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];
-                               for (precno = 0; precno < numprec; precno++) {                                                          
-                                       /* I suppose components have same XRsiz, YRsiz */
-                                       int x0 = cstr_info->tile_Ox + tileno - (int)floor((float)tileno/(float)cstr_info->tw ) * cstr_info->tw * cstr_info->tile_x;
-                                       int y0 = cstr_info->tile_Ox + (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tile_y;
-                                       int x1 = x0 + cstr_info->tile_x;
-                                       int y1 = y0 + cstr_info->tile_y;
-                                       for (compno = 0; compno < cstr_info->numcomps; compno++) {                                      
-                                               int pcnx = cstr_info->tile[tileno].pw[resno];
-                                               int pcx = (int) pow( 2, cstr_info->tile[tileno].pdx[resno] + cstr_info->numdecompos[compno] - resno );
-                                               int pcy = (int) pow( 2, cstr_info->tile[tileno].pdy[resno] + cstr_info->numdecompos[compno] - resno );
-                                               int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx;
-                                               int precno_y = (int) floor( (float)precno/(float)pcnx );
-                                               if (resno > cstr_info->numdecompos[compno])
-                                                       break;
-                                               for(y = y0; y < y1; y++) {                                                      
-                                                       if (precno_y*pcy == y ) {
-                                                               for (x = x0; x < x1; x++) {                                                                     
-                                                                       if (precno_x*pcx == x ) {
-                                                                               for (layno = 0; layno < cstr_info->numlayers; layno++) {
-                                                                                       start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
-                                                                                       end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
-                                                                                       end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
-                                                                                       disto = cstr_info->tile[tileno].packet[pack_nb].disto;
-                                                                                       fprintf(stream, "%4d %6d %5d %6d %6d %7d %9d   %9d %7d",
-                                                                                               pack_nb, tileno, resno, precno, compno, layno, start_pos, end_ph_pos, end_pos); 
-                                                                                       if (disto_on)
-                                                                                               fprintf(stream, " %8e", disto);
-                                                                                       fprintf(stream, "\n");
-                                                                                       total_disto += disto;
-                                                                                       pack_nb++; 
-                                                                               }
-                                                                       }
-                                                               }/* x = x0..x1 */
-                                                       } 
-                                               }  /* y = y0..y1 */
-                                       } /* precno */
-                               } /* compno */
-                       } /* resno */
-               } /* RPCL */
-
-               else if (cstr_info->prog == PCRL) {     /* PCRL */
-                       /* I suppose components have same XRsiz, YRsiz */
-                       int x0 = cstr_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tw * cstr_info->tile_x;
-                       int y0 = cstr_info->tile_Ox + (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tile_y;
-                       int x1 = x0 + cstr_info->tile_x;
-                       int y1 = y0 + cstr_info->tile_y;
-
-                       /* Count the maximum number of precincts */
-                       int max_numprec = 0;
-                       for (resno = 0; resno < max_numdecompos + 1; resno++) {
-                               int numprec = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];
-                               if (numprec > max_numprec)
-                                       max_numprec = numprec;
-                       }
-
-                       fprintf(stream, "PCRL\npack_nb tileno precno compno resno layno start_pos end_ph_pos end_pos"); 
-                       if (disto_on)
-                               fprintf(stream, " disto");
-                       fprintf(stream,"\n");
-
-                       for (precno = 0; precno < max_numprec; precno++) {
-                               for (compno = 0; compno < cstr_info->numcomps; compno++) {
-                                       for (resno = 0; resno < cstr_info->numdecompos[compno] + 1; resno++) {
-                                               int numprec = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];
-                                               int pcnx = cstr_info->tile[tileno].pw[resno];
-                                               int pcx = (int) pow( 2, cstr_info->tile[tileno].pdx[resno] + cstr_info->numdecompos[compno] - resno );
-                                               int pcy = (int) pow( 2, cstr_info->tile[tileno].pdy[resno] + cstr_info->numdecompos[compno] - resno );
-                                               int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx;
-                                               int precno_y = (int) floor( (float)precno/(float)pcnx );
-                                               if (precno >= numprec)
-                                                       continue;
-                                               for(y = y0; y < y1; y++) {                                                      
-                                                       if (precno_y*pcy == y ) {
-                                                               for (x = x0; x < x1; x++) {                                                                     
-                                                                       if (precno_x*pcx == x ) {
-                                                                               for (layno = 0; layno < cstr_info->numlayers; layno++) {
-                                                                                       start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
-                                                                                       end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
-                                                                                       end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
-                                                                                       disto = cstr_info->tile[tileno].packet[pack_nb].disto;
-                                                                                       fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d   %9d %7d",
-                                                                                               pack_nb, tileno, precno, compno, resno, layno, start_pos, end_ph_pos, end_pos); 
-                                                                                       if (disto_on)
-                                                                                               fprintf(stream, " %8e", disto);
-                                                                                       fprintf(stream, "\n");
-                                                                                       total_disto += disto;
-                                                                                       pack_nb++; 
-                                                                               }
-                                                                       }
-                                                               }/* x = x0..x1 */
-                                                       } 
-                                               }  /* y = y0..y1 */
-                                       } /* resno */
-                               } /* compno */
-                       } /* precno */
-               } /* PCRL */
-
-               else {  /* CPRL */
-                       /* Count the maximum number of precincts */
-                       int max_numprec = 0;
-                       for (resno = 0; resno < max_numdecompos + 1; resno++) {
-                               int numprec = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];
-                               if (numprec > max_numprec)
-                                       max_numprec = numprec;
-                       }
-
-                       fprintf(stream, "CPRL\npack_nb tileno compno precno resno layno start_pos end_ph_pos end_pos"); 
-                       if (disto_on)
-                               fprintf(stream, " disto");
-                       fprintf(stream,"\n");
-
-                       for (compno = 0; compno < cstr_info->numcomps; compno++) {
-                               /* I suppose components have same XRsiz, YRsiz */
-                               int x0 = cstr_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tw * cstr_info->tile_x;
-                               int y0 = cstr_info->tile_Ox + (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tile_y;
-                               int x1 = x0 + cstr_info->tile_x;
-                               int y1 = y0 + cstr_info->tile_y;
-
-                               for (precno = 0; precno < max_numprec; precno++) {
-                                       for (resno = 0; resno < cstr_info->numdecompos[compno] + 1; resno++) {
-                                               int numprec = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];
-                                               int pcnx = cstr_info->tile[tileno].pw[resno];
-                                               int pcx = (int) pow( 2, cstr_info->tile[tileno].pdx[resno] + cstr_info->numdecompos[compno] - resno );
-                                               int pcy = (int) pow( 2, cstr_info->tile[tileno].pdy[resno] + cstr_info->numdecompos[compno] - resno );
-                                               int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx;
-                                               int precno_y = (int) floor( (float)precno/(float)pcnx );
-                                               if (precno >= numprec)
-                                                       continue;
-
-                                               for(y = y0; y < y1; y++) {
-                                                       if (precno_y*pcy == y ) {
-                                                               for (x = x0; x < x1; x++) {
-                                                                       if (precno_x*pcx == x ) {
-                                                                               for (layno = 0; layno < cstr_info->numlayers; layno++) {
-                                                                                       start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
-                                                                                       end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
-                                                                                       end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
-                                                                                       disto = cstr_info->tile[tileno].packet[pack_nb].disto;
-                                                                                       fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d   %9d %7d",
-                                                                                               pack_nb, tileno, compno, precno, resno, layno, start_pos, end_ph_pos, end_pos); 
-                                                                                       if (disto_on)
-                                                                                               fprintf(stream, " %8e", disto);
-                                                                                       fprintf(stream, "\n");
-                                                                                       total_disto += disto;
-                                                                                       pack_nb++; 
-                                                                               }
-                                                                       }
-                                                               }/* x = x0..x1 */
-                                                       }
-                                               } /* y = y0..y1 */
-                                       } /* resno */
-                               } /* precno */
-                       } /* compno */
-               } /* CPRL */   
-       } /* tileno */
-       
-       if (disto_on) {
-               fprintf(stream, "%8e\n", cstr_info->D_max); /* SE max */        
-               fprintf(stream, "%.8e\n", total_disto); /* SE totale */
-       }
-/* UniPG>> */
-       /* print the markers' list */
-       if (cstr_info->marknum) {
-               fprintf(stream, "\nMARKER LIST\n");
-               fprintf(stream, "%d\n", cstr_info->marknum);
-               fprintf(stream, "type\tstart_pos    length\n");
-               for (x = 0; x < cstr_info->marknum; x++)
-                       fprintf(stream, "%X\t%9d %9d\n", cstr_info->marker[x].type, cstr_info->marker[x].pos, cstr_info->marker[x].len);
-       }
-/* <<UniPG */
-       fclose(stream);
-
-       fprintf(stderr,"Generated index file %s\n", index);
-
-       return 0;
+    /* <<UniPG */
+
+    if (!cstr_info) {
+        return 1;
+    }
+
+    stream = fopen(index, "w");
+    if (!stream) {
+        fprintf(stderr, "failed to open index file [%s] for writing\n", index);
+        return 1;
+    }
+
+    if (cstr_info->tile[0].distotile) {
+        disto_on = 1;
+    } else {
+        disto_on = 0;
+    }
+
+    if (cstr_info->tile[0].numpix) {
+        numpix_on = 1;
+    } else {
+        numpix_on = 0;
+    }
+
+    fprintf(stream, "%d %d\n", cstr_info->image_w, cstr_info->image_h);
+    fprintf(stream, "%d\n", cstr_info->prog);
+    fprintf(stream, "%d %d\n", cstr_info->tile_x, cstr_info->tile_y);
+    fprintf(stream, "%d %d\n", cstr_info->tw, cstr_info->th);
+    fprintf(stream, "%d\n", cstr_info->numcomps);
+    fprintf(stream, "%d\n", cstr_info->numlayers);
+    fprintf(stream, "%d\n", cstr_info->numdecompos[0]); /* based on component 0 */
+
+    for (resno = cstr_info->numdecompos[0]; resno >= 0; resno--) {
+        fprintf(stream, "[%d,%d] ",
+                (1 << cstr_info->tile[0].pdx[resno]),
+                (1 << cstr_info->tile[0].pdx[resno]));    /* based on tile 0 and component 0 */
+    }
+
+    fprintf(stream, "\n");
+    /* UniPG>> */
+    fprintf(stream, "%d\n", cstr_info->main_head_start);
+    /* <<UniPG */
+    fprintf(stream, "%d\n", cstr_info->main_head_end);
+    fprintf(stream, "%d\n", cstr_info->codestream_size);
+
+    fprintf(stream, "\nINFO ON TILES\n");
+    fprintf(stream, "tileno start_pos  end_hd  end_tile   nbparts");
+    if (disto_on) {
+        fprintf(stream, "         disto");
+    }
+    if (numpix_on) {
+        fprintf(stream, "     nbpix");
+    }
+    if (disto_on && numpix_on) {
+        fprintf(stream, "  disto/nbpix");
+    }
+    fprintf(stream, "\n");
+
+    for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) {
+        fprintf(stream, "%4d %9d %9d %9d %9d",
+                cstr_info->tile[tileno].tileno,
+                cstr_info->tile[tileno].start_pos,
+                cstr_info->tile[tileno].end_header,
+                cstr_info->tile[tileno].end_pos,
+                cstr_info->tile[tileno].num_tps);
+        if (disto_on) {
+            fprintf(stream, " %9e", cstr_info->tile[tileno].distotile);
+        }
+        if (numpix_on) {
+            fprintf(stream, " %9d", cstr_info->tile[tileno].numpix);
+        }
+        if (disto_on && numpix_on) {
+            fprintf(stream, " %9e", cstr_info->tile[tileno].distotile /
+                    cstr_info->tile[tileno].numpix);
+        }
+        fprintf(stream, "\n");
+    }
+
+    for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) {
+        int start_pos, end_ph_pos, end_pos;
+        double disto = 0;
+        int max_numdecompos = 0;
+        pack_nb = 0;
+
+        for (compno = 0; compno < cstr_info->numcomps; compno++) {
+            if (max_numdecompos < cstr_info->numdecompos[compno]) {
+                max_numdecompos = cstr_info->numdecompos[compno];
+            }
+        }
+
+        fprintf(stream, "\nTILE %d DETAILS\n", tileno);
+        fprintf(stream,
+                "part_nb tileno  start_pack num_packs  start_pos end_tph_pos   end_pos\n");
+        for (tilepartno = 0; tilepartno < cstr_info->tile[tileno].num_tps; tilepartno++)
+            fprintf(stream, "%4d %9d   %9d %9d  %9d %11d %9d\n",
+                    tilepartno, tileno,
+                    cstr_info->tile[tileno].tp[tilepartno].tp_start_pack,
+                    cstr_info->tile[tileno].tp[tilepartno].tp_numpacks,
+                    cstr_info->tile[tileno].tp[tilepartno].tp_start_pos,
+                    cstr_info->tile[tileno].tp[tilepartno].tp_end_header,
+                    cstr_info->tile[tileno].tp[tilepartno].tp_end_pos
+                   );
+
+        if (cstr_info->prog == LRCP) {  /* LRCP */
+            fprintf(stream,
+                    "LRCP\npack_nb tileno layno resno compno precno start_pos end_ph_pos end_pos");
+            if (disto_on) {
+                fprintf(stream, " disto");
+            }
+            fprintf(stream, "\n");
+
+            for (layno = 0; layno < cstr_info->numlayers; layno++) {
+                for (resno = 0; resno < max_numdecompos + 1; resno++) {
+                    for (compno = 0; compno < cstr_info->numcomps; compno++) {
+                        int prec_max;
+                        if (resno > cstr_info->numdecompos[compno]) {
+                            break;
+                        }
+                        prec_max = cstr_info->tile[tileno].pw[resno] *
+                                   cstr_info->tile[tileno].ph[resno];
+                        for (precno = 0; precno < prec_max; precno++) {
+                            start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
+                            end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
+                            end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
+                            disto = cstr_info->tile[tileno].packet[pack_nb].disto;
+                            fprintf(stream, "%4d %6d %7d %5d %6d  %6d    %6d     %6d %7d",
+                                    pack_nb, tileno, layno, resno, compno, precno, start_pos, end_ph_pos, end_pos);
+                            if (disto_on) {
+                                fprintf(stream, " %8e", disto);
+                            }
+                            fprintf(stream, "\n");
+                            total_disto += disto;
+                            pack_nb++;
+                        }
+                    }
+                }
+            }
+        } /* LRCP */
+
+        else if (cstr_info->prog == RLCP) { /* RLCP */
+            fprintf(stream,
+                    "RLCP\npack_nb tileno resno layno compno precno start_pos end_ph_pos end_pos\n");
+            if (disto_on) {
+                fprintf(stream, " disto");
+            }
+            fprintf(stream, "\n");
+
+            for (resno = 0; resno < max_numdecompos + 1; resno++) {
+                for (layno = 0; layno < cstr_info->numlayers; layno++) {
+                    for (compno = 0; compno < cstr_info->numcomps; compno++) {
+                        int prec_max;
+                        if (resno > cstr_info->numdecompos[compno]) {
+                            break;
+                        }
+                        prec_max = cstr_info->tile[tileno].pw[resno] *
+                                   cstr_info->tile[tileno].ph[resno];
+                        for (precno = 0; precno < prec_max; precno++) {
+                            start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
+                            end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
+                            end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
+                            disto = cstr_info->tile[tileno].packet[pack_nb].disto;
+                            fprintf(stream, "%4d %6d %5d %7d %6d %6d %9d   %9d %7d",
+                                    pack_nb, tileno, resno, layno, compno, precno, start_pos, end_ph_pos, end_pos);
+                            if (disto_on) {
+                                fprintf(stream, " %8e", disto);
+                            }
+                            fprintf(stream, "\n");
+                            total_disto += disto;
+                            pack_nb++;
+                        }
+                    }
+                }
+            }
+        } /* RLCP */
+
+        else if (cstr_info->prog == RPCL) { /* RPCL */
+
+            fprintf(stream,
+                    "RPCL\npack_nb tileno resno precno compno layno start_pos end_ph_pos end_pos");
+            if (disto_on) {
+                fprintf(stream, " disto");
+            }
+            fprintf(stream, "\n");
+
+            for (resno = 0; resno < max_numdecompos + 1; resno++) {
+                int numprec = cstr_info->tile[tileno].pw[resno] *
+                              cstr_info->tile[tileno].ph[resno];
+                for (precno = 0; precno < numprec; precno++) {
+                    /* I suppose components have same XRsiz, YRsiz */
+                    int x0 = cstr_info->tile_Ox + tileno - (int)floor((float)tileno /
+                             (float)cstr_info->tw) * cstr_info->tw * cstr_info->tile_x;
+                    int y0 = cstr_info->tile_Ox + (int)floor((float)tileno /
+                             (float)cstr_info->tw) * cstr_info->tile_y;
+                    int x1 = x0 + cstr_info->tile_x;
+                    int y1 = y0 + cstr_info->tile_y;
+                    for (compno = 0; compno < cstr_info->numcomps; compno++) {
+                        int pcnx = cstr_info->tile[tileno].pw[resno];
+                        int pcx = (int) pow(2, cstr_info->tile[tileno].pdx[resno] +
+                                            cstr_info->numdecompos[compno] - resno);
+                        int pcy = (int) pow(2, cstr_info->tile[tileno].pdy[resno] +
+                                            cstr_info->numdecompos[compno] - resno);
+                        int precno_x = precno - (int) floor((float)precno / (float)pcnx) * pcnx;
+                        int precno_y = (int) floor((float)precno / (float)pcnx);
+                        if (resno > cstr_info->numdecompos[compno]) {
+                            break;
+                        }
+                        for (y = y0; y < y1; y++) {
+                            if (precno_y * pcy == y) {
+                                for (x = x0; x < x1; x++) {
+                                    if (precno_x * pcx == x) {
+                                        for (layno = 0; layno < cstr_info->numlayers; layno++) {
+                                            start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
+                                            end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
+                                            end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
+                                            disto = cstr_info->tile[tileno].packet[pack_nb].disto;
+                                            fprintf(stream, "%4d %6d %5d %6d %6d %7d %9d   %9d %7d",
+                                                    pack_nb, tileno, resno, precno, compno, layno, start_pos, end_ph_pos, end_pos);
+                                            if (disto_on) {
+                                                fprintf(stream, " %8e", disto);
+                                            }
+                                            fprintf(stream, "\n");
+                                            total_disto += disto;
+                                            pack_nb++;
+                                        }
+                                    }
+                                }/* x = x0..x1 */
+                            }
+                        }  /* y = y0..y1 */
+                    } /* precno */
+                } /* compno */
+            } /* resno */
+        } /* RPCL */
+
+        else if (cstr_info->prog == PCRL) { /* PCRL */
+            /* I suppose components have same XRsiz, YRsiz */
+            int x0 = cstr_info->tile_Ox + tileno - (int)floor((float)tileno /
+                     (float)cstr_info->tw) * cstr_info->tw * cstr_info->tile_x;
+            int y0 = cstr_info->tile_Ox + (int)floor((float)tileno /
+                     (float)cstr_info->tw) * cstr_info->tile_y;
+            int x1 = x0 + cstr_info->tile_x;
+            int y1 = y0 + cstr_info->tile_y;
+
+            /* Count the maximum number of precincts */
+            int max_numprec = 0;
+            for (resno = 0; resno < max_numdecompos + 1; resno++) {
+                int numprec = cstr_info->tile[tileno].pw[resno] *
+                              cstr_info->tile[tileno].ph[resno];
+                if (numprec > max_numprec) {
+                    max_numprec = numprec;
+                }
+            }
+
+            fprintf(stream,
+                    "PCRL\npack_nb tileno precno compno resno layno start_pos end_ph_pos end_pos");
+            if (disto_on) {
+                fprintf(stream, " disto");
+            }
+            fprintf(stream, "\n");
+
+            for (precno = 0; precno < max_numprec; precno++) {
+                for (compno = 0; compno < cstr_info->numcomps; compno++) {
+                    for (resno = 0; resno < cstr_info->numdecompos[compno] + 1; resno++) {
+                        int numprec = cstr_info->tile[tileno].pw[resno] *
+                                      cstr_info->tile[tileno].ph[resno];
+                        int pcnx = cstr_info->tile[tileno].pw[resno];
+                        int pcx = (int) pow(2, cstr_info->tile[tileno].pdx[resno] +
+                                            cstr_info->numdecompos[compno] - resno);
+                        int pcy = (int) pow(2, cstr_info->tile[tileno].pdy[resno] +
+                                            cstr_info->numdecompos[compno] - resno);
+                        int precno_x = precno - (int) floor((float)precno / (float)pcnx) * pcnx;
+                        int precno_y = (int) floor((float)precno / (float)pcnx);
+                        if (precno >= numprec) {
+                            continue;
+                        }
+                        for (y = y0; y < y1; y++) {
+                            if (precno_y * pcy == y) {
+                                for (x = x0; x < x1; x++) {
+                                    if (precno_x * pcx == x) {
+                                        for (layno = 0; layno < cstr_info->numlayers; layno++) {
+                                            start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
+                                            end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
+                                            end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
+                                            disto = cstr_info->tile[tileno].packet[pack_nb].disto;
+                                            fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d   %9d %7d",
+                                                    pack_nb, tileno, precno, compno, resno, layno, start_pos, end_ph_pos, end_pos);
+                                            if (disto_on) {
+                                                fprintf(stream, " %8e", disto);
+                                            }
+                                            fprintf(stream, "\n");
+                                            total_disto += disto;
+                                            pack_nb++;
+                                        }
+                                    }
+                                }/* x = x0..x1 */
+                            }
+                        }  /* y = y0..y1 */
+                    } /* resno */
+                } /* compno */
+            } /* precno */
+        } /* PCRL */
+
+        else {  /* CPRL */
+            /* Count the maximum number of precincts */
+            int max_numprec = 0;
+            for (resno = 0; resno < max_numdecompos + 1; resno++) {
+                int numprec = cstr_info->tile[tileno].pw[resno] *
+                              cstr_info->tile[tileno].ph[resno];
+                if (numprec > max_numprec) {
+                    max_numprec = numprec;
+                }
+            }
+
+            fprintf(stream,
+                    "CPRL\npack_nb tileno compno precno resno layno start_pos end_ph_pos end_pos");
+            if (disto_on) {
+                fprintf(stream, " disto");
+            }
+            fprintf(stream, "\n");
+
+            for (compno = 0; compno < cstr_info->numcomps; compno++) {
+                /* I suppose components have same XRsiz, YRsiz */
+                int x0 = cstr_info->tile_Ox + tileno - (int)floor((float)tileno /
+                         (float)cstr_info->tw) * cstr_info->tw * cstr_info->tile_x;
+                int y0 = cstr_info->tile_Ox + (int)floor((float)tileno /
+                         (float)cstr_info->tw) * cstr_info->tile_y;
+                int x1 = x0 + cstr_info->tile_x;
+                int y1 = y0 + cstr_info->tile_y;
+
+                for (precno = 0; precno < max_numprec; precno++) {
+                    for (resno = 0; resno < cstr_info->numdecompos[compno] + 1; resno++) {
+                        int numprec = cstr_info->tile[tileno].pw[resno] *
+                                      cstr_info->tile[tileno].ph[resno];
+                        int pcnx = cstr_info->tile[tileno].pw[resno];
+                        int pcx = (int) pow(2, cstr_info->tile[tileno].pdx[resno] +
+                                            cstr_info->numdecompos[compno] - resno);
+                        int pcy = (int) pow(2, cstr_info->tile[tileno].pdy[resno] +
+                                            cstr_info->numdecompos[compno] - resno);
+                        int precno_x = precno - (int) floor((float)precno / (float)pcnx) * pcnx;
+                        int precno_y = (int) floor((float)precno / (float)pcnx);
+                        if (precno >= numprec) {
+                            continue;
+                        }
+
+                        for (y = y0; y < y1; y++) {
+                            if (precno_y * pcy == y) {
+                                for (x = x0; x < x1; x++) {
+                                    if (precno_x * pcx == x) {
+                                        for (layno = 0; layno < cstr_info->numlayers; layno++) {
+                                            start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
+                                            end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
+                                            end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
+                                            disto = cstr_info->tile[tileno].packet[pack_nb].disto;
+                                            fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d   %9d %7d",
+                                                    pack_nb, tileno, compno, precno, resno, layno, start_pos, end_ph_pos, end_pos);
+                                            if (disto_on) {
+                                                fprintf(stream, " %8e", disto);
+                                            }
+                                            fprintf(stream, "\n");
+                                            total_disto += disto;
+                                            pack_nb++;
+                                        }
+                                    }
+                                }/* x = x0..x1 */
+                            }
+                        } /* y = y0..y1 */
+                    } /* resno */
+                } /* precno */
+            } /* compno */
+        } /* CPRL */
+    } /* tileno */
+
+    if (disto_on) {
+        fprintf(stream, "%8e\n", cstr_info->D_max); /* SE max */
+        fprintf(stream, "%.8e\n", total_disto); /* SE totale */
+    }
+    /* UniPG>> */
+    /* print the markers' list */
+    if (cstr_info->marknum) {
+        fprintf(stream, "\nMARKER LIST\n");
+        fprintf(stream, "%d\n", cstr_info->marknum);
+        fprintf(stream, "type\tstart_pos    length\n");
+        for (x = 0; x < cstr_info->marknum; x++) {
+            fprintf(stream, "%X\t%9d %9d\n", cstr_info->marker[x].type,
+                    cstr_info->marker[x].pos, cstr_info->marker[x].len);
+        }
+    }
+    /* <<UniPG */
+    fclose(stream);
+
+    fprintf(stderr, "Generated index file %s\n", index);
+
+    return 0;
 }
index 7410486e8510aee441661ea70bee7083100fa9ec..7f215fc50e9e871e8f1d078331e372bb7ccf4e2f 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * Copyright (c) 2006-2007, Parvatha Elangovan
 
 #include "format_defs.h"
 
-#define CINEMA_24_CS 1302083   /*Codestream length for 24fps*/
-#define CINEMA_48_CS 651041            /*Codestream length for 48fps*/
-#define COMP_24_CS 1041666             /*Maximum size per color component for 2K & 4K @ 24fps*/
-#define COMP_48_CS 520833              /*Maximum size per color component for 2K @ 48fps*/
-
-typedef struct dircnt{
-       /** Buffer for holding images read from Directory*/
-       char *filename_buf;
-       /** Pointer to the buffer*/
-       char **filename;
-}dircnt_t;
-
-typedef struct img_folder{
-       /** The directory path of the folder containing input images*/
-       char *imgdirpath;
-       /** Output format*/
-       char *out_format;
-       /** Enable option*/
-       char set_imgdir;
-       /** Enable Cod Format for output*/
-       char set_out_format;
-       /** User specified rate stored in case of cinema option*/
-       float *rates;
-}img_fol_t;
-
-static void encode_help_display(void) {
-       fprintf(stdout,"HELP for opj_jpwl_compress\n----\n\n");
-       fprintf(stdout,"- the -h option displays this help information on screen\n\n");
-
-/* UniPG>> */
-       fprintf(stdout,"List of parameters for the JPEG 2000 "
+#define CINEMA_24_CS 1302083    /*Codestream length for 24fps*/
+#define CINEMA_48_CS 651041     /*Codestream length for 48fps*/
+#define COMP_24_CS 1041666      /*Maximum size per color component for 2K & 4K @ 24fps*/
+#define COMP_48_CS 520833       /*Maximum size per color component for 2K @ 48fps*/
+
+typedef struct dircnt {
+    /** Buffer for holding images read from Directory*/
+    char *filename_buf;
+    /** Pointer to the buffer*/
+    char **filename;
+} dircnt_t;
+
+typedef struct img_folder {
+    /** The directory path of the folder containing input images*/
+    char *imgdirpath;
+    /** Output format*/
+    char *out_format;
+    /** Enable option*/
+    char set_imgdir;
+    /** Enable Cod Format for output*/
+    char set_out_format;
+    /** User specified rate stored in case of cinema option*/
+    float *rates;
+} img_fol_t;
+
+static void encode_help_display(void)
+{
+    fprintf(stdout, "HELP for opj_jpwl_compress\n----\n\n");
+    fprintf(stdout, "- the -h option displays this help information on screen\n\n");
+
+    /* UniPG>> */
+    fprintf(stdout, "List of parameters for the JPEG 2000 "
 #ifdef USE_JPWL
-               "+ JPWL "
+            "+ JPWL "
 #endif /* USE_JPWL */
-               "encoder:\n");
-/* <<UniPG */
-       fprintf(stdout,"\n");
-       fprintf(stdout,"REMARKS:\n");
-       fprintf(stdout,"---------\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"The markers written to the main_header are : SOC SIZ COD QCD COM.\n");
-       fprintf(stdout,"COD and QCD never appear in the tile_header.\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"By default:\n");
-       fprintf(stdout,"------------\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout," * Lossless\n");
-       fprintf(stdout," * 1 tile\n");
-       fprintf(stdout," * Size of precinct : 2^15 x 2^15 (means 1 precinct)\n");
-       fprintf(stdout," * Size of code-block : 64 x 64\n");
-       fprintf(stdout," * Number of resolutions: 6\n");
-       fprintf(stdout," * No SOP marker in the codestream\n");
-       fprintf(stdout," * No EPH marker in the codestream\n");
-       fprintf(stdout," * No sub-sampling in x or y direction\n");
-       fprintf(stdout," * No mode switch activated\n");
-       fprintf(stdout," * Progression order: LRCP\n");
-       fprintf(stdout," * No index file\n");
-       fprintf(stdout," * No ROI upshifted\n");
-       fprintf(stdout," * No offset of the origin of the image\n");
-       fprintf(stdout," * No offset of the origin of the tiles\n");
-       fprintf(stdout," * Reversible DWT 5-3\n");
-/* UniPG>> */
+            "encoder:\n");
+    /* <<UniPG */
+    fprintf(stdout, "\n");
+    fprintf(stdout, "REMARKS:\n");
+    fprintf(stdout, "---------\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "The markers written to the main_header are : SOC SIZ COD QCD COM.\n");
+    fprintf(stdout, "COD and QCD never appear in the tile_header.\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "By default:\n");
+    fprintf(stdout, "------------\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, " * Lossless\n");
+    fprintf(stdout, " * 1 tile\n");
+    fprintf(stdout, " * Size of precinct : 2^15 x 2^15 (means 1 precinct)\n");
+    fprintf(stdout, " * Size of code-block : 64 x 64\n");
+    fprintf(stdout, " * Number of resolutions: 6\n");
+    fprintf(stdout, " * No SOP marker in the codestream\n");
+    fprintf(stdout, " * No EPH marker in the codestream\n");
+    fprintf(stdout, " * No sub-sampling in x or y direction\n");
+    fprintf(stdout, " * No mode switch activated\n");
+    fprintf(stdout, " * Progression order: LRCP\n");
+    fprintf(stdout, " * No index file\n");
+    fprintf(stdout, " * No ROI upshifted\n");
+    fprintf(stdout, " * No offset of the origin of the image\n");
+    fprintf(stdout, " * No offset of the origin of the tiles\n");
+    fprintf(stdout, " * Reversible DWT 5-3\n");
+    /* UniPG>> */
 #ifdef USE_JPWL
-       fprintf(stdout," * No JPWL protection\n");
+    fprintf(stdout, " * No JPWL protection\n");
 #endif /* USE_JPWL */
-/* <<UniPG */
-       fprintf(stdout,"\n");
-       fprintf(stdout,"Parameters:\n");
-       fprintf(stdout,"------------\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"Required Parameters (except with -h):\n");
-       fprintf(stdout,"One of the two options -ImgDir or -i must be used\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-ImgDir      : Image file Directory path (example ../Images) \n");
-       fprintf(stdout,"    When using this option -OutFor must be used\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-OutFor \n");
-       fprintf(stdout,"    REQUIRED only if -ImgDir is used\n");
-       fprintf(stdout,"          Need to specify only format without filename <BMP>  \n");
-       fprintf(stdout,"    Currently accepts PBM, PGM, PPM, PNM, PAM, PGX, PNG, BMP, TIF, RAW and TGA formats\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-i           : source file  (-i source.pnm also *pbm, *.pgm, *.ppm, *.pam, *.pgx, *png, *.bmp, *.tif, *.raw, *.tga) \n");
-       fprintf(stdout,"    When using this option -o must be used\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-o           : destination file (-o dest.j2k or .jp2) \n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"Optional Parameters:\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-h           : display the help information \n ");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-cinema2K    : Digital Cinema 2K profile compliant codestream for 2K resolution.(-cinema2k 24 or 48) \n");
-  fprintf(stdout,"       Need to specify the frames per second for a 2K resolution. Only 24 or 48 fps is allowed\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-cinema4K    : Digital Cinema 4K profile compliant codestream for 4K resolution \n");
-       fprintf(stdout,"          Frames per second not required. Default value is 24fps\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-r           : different compression ratios for successive layers (-r 20,10,5)\n ");
-       fprintf(stdout,"                 - The rate specified for each quality level is the desired \n");
-       fprintf(stdout,"                   compression factor.\n");
-       fprintf(stdout,"                   Example: -r 20,10,1 means quality 1: compress 20x, \n");
-       fprintf(stdout,"                     quality 2: compress 10x and quality 3: compress lossless\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"               (options -r and -q cannot be used together)\n ");
-       fprintf(stdout,"\n");
-
-       fprintf(stdout,"-q           : different psnr for successive layers (-q 30,40,50) \n ");
-
-       fprintf(stdout,"               (options -r and -q cannot be used together)\n ");
-
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-n           : number of resolutions (-n 3) \n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-b           : size of code block (-b 32,32) \n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-c           : size of precinct (-c 128,128) \n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-t           : size of tile (-t 512,512) \n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-p           : progression order (-p LRCP) [LRCP, RLCP, RPCL, PCRL, CPRL] \n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-s           : subsampling factor (-s 2,2) [-s X,Y] \n");
-       fprintf(stdout,"             Remark: subsampling bigger than 2 can produce error\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-POC         : Progression order change (-POC T1=0,0,1,5,3,CPRL/T1=5,0,1,6,3,CPRL) \n");
-       fprintf(stdout,"      Example: T1=0,0,1,5,3,CPRL \n");
-       fprintf(stdout,"                         : Ttilenumber=Resolution num start,Component num start,Layer num end,Resolution num end,Component num end,Progression order\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-SOP         : write SOP marker before each packet \n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-EPH         : write EPH marker after each header packet \n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-M           : mode switch (-M 3) [1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL)\n");
-       fprintf(stdout,"                 8=VSC 16=ERTERM(SEGTERM) 32=SEGMARK(SEGSYM)] \n");
-       fprintf(stdout,"                 Indicate multiple modes by adding their values. \n");
-       fprintf(stdout,"                 ex: RESTART(4) + RESET(2) + SEGMARK(32) = -M 38\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-TP          : divide packets of every tile into tile-parts (-TP R) [R, L, C]\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-x           : create an index file *.Idx (-x index_name.Idx) \n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-ROI         : c=%%d,U=%%d : quantization indices upshifted \n");
-       fprintf(stdout,"               for component c=%%d [%%d = 0,1,2]\n");
-       fprintf(stdout,"               with a value of U=%%d [0 <= %%d <= 37] (i.e. -ROI c=0,U=25) \n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-d           : offset of the origin of the image (-d 150,300) \n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-T           : offset of the origin of the tiles (-T 100,75) \n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-I           : use the irreversible DWT 9-7 (-I) \n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-F           : characteristics of the raw input image\n");
-       fprintf(stdout,"               -F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n");
-       fprintf(stdout,"               Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"-jpip        : write jpip codestream index box in JP2 output file\n");
-       fprintf(stdout,"               NOTICE: currently supports only RPCL order\n");
-       fprintf(stdout,"\n");
-/* UniPG>> */
+    /* <<UniPG */
+    fprintf(stdout, "\n");
+    fprintf(stdout, "Parameters:\n");
+    fprintf(stdout, "------------\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "Required Parameters (except with -h):\n");
+    fprintf(stdout, "One of the two options -ImgDir or -i must be used\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-ImgDir      : Image file Directory path (example ../Images) \n");
+    fprintf(stdout, "    When using this option -OutFor must be used\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-OutFor \n");
+    fprintf(stdout, "    REQUIRED only if -ImgDir is used\n");
+    fprintf(stdout, "    Need to specify only format without filename <BMP>  \n");
+    fprintf(stdout,
+            "    Currently accepts PBM, PGM, PPM, PNM, PAM, PGX, PNG, BMP, TIF, RAW and TGA formats\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-i           : source file  (-i source.pnm also *pbm, *.pgm, *.ppm, *.pam, *.pgx, *png, *.bmp, *.tif, *.raw, *.tga) \n");
+    fprintf(stdout, "    When using this option -o must be used\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-o           : destination file (-o dest.j2k or .jp2) \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "Optional Parameters:\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-h           : display the help information \n ");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-cinema2K    : Digital Cinema 2K profile compliant codestream for 2K resolution.(-cinema2k 24 or 48) \n");
+    fprintf(stdout,
+            "    Need to specify the frames per second for a 2K resolution. Only 24 or 48 fps is allowed\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-cinema4K    : Digital Cinema 4K profile compliant codestream for 4K resolution \n");
+    fprintf(stdout, "    Frames per second not required. Default value is 24fps\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-r           : different compression ratios for successive layers (-r 20,10,5)\n ");
+    fprintf(stdout,
+            "           - The rate specified for each quality level is the desired \n");
+    fprintf(stdout, "             compression factor.\n");
+    fprintf(stdout, "             Example: -r 20,10,1 means quality 1: compress 20x, \n");
+    fprintf(stdout,
+            "               quality 2: compress 10x and quality 3: compress lossless\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "               (options -r and -q cannot be used together)\n ");
+    fprintf(stdout, "\n");
+
+    fprintf(stdout,
+            "-q           : different psnr for successive layers (-q 30,40,50) \n ");
+
+    fprintf(stdout,
+            "               (options -r and -q cannot be used together)\n ");
+
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-n           : number of resolutions (-n 3) \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-b           : size of code block (-b 32,32) \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-c           : size of precinct (-c 128,128) \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-t           : size of tile (-t 512,512) \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-p           : progression order (-p LRCP) [LRCP, RLCP, RPCL, PCRL, CPRL] \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-s           : subsampling factor (-s 2,2) [-s X,Y] \n");
+    fprintf(stdout, "       Remark: subsampling bigger than 2 can produce error\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-POC         : Progression order change (-POC T1=0,0,1,5,3,CPRL/T1=5,0,1,6,3,CPRL) \n");
+    fprintf(stdout, "      Example: T1=0,0,1,5,3,CPRL \n");
+    fprintf(stdout,
+            "                   : Ttilenumber=Resolution num start,Component num start,Layer num end,Resolution num end,Component num end,Progression order\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-SOP         : write SOP marker before each packet \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-EPH         : write EPH marker after each header packet \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-M           : mode switch (-M 3) [1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL)\n");
+    fprintf(stdout,
+            "                 8=VSC 16=ERTERM(SEGTERM) 32=SEGMARK(SEGSYM)] \n");
+    fprintf(stdout,
+            "                 Indicate multiple modes by adding their values. \n");
+    fprintf(stdout,
+            "                 ex: RESTART(4) + RESET(2) + SEGMARK(32) = -M 38\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-TP          : divide packets of every tile into tile-parts (-TP R) [R, L, C]\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-x           : create an index file *.Idx (-x index_name.Idx) \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-ROI         : c=%%d,U=%%d : quantization indices upshifted \n");
+    fprintf(stdout, "               for component c=%%d [%%d = 0,1,2]\n");
+    fprintf(stdout,
+            "               with a value of U=%%d [0 <= %%d <= 37] (i.e. -ROI c=0,U=25) \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-d           : offset of the origin of the image (-d 150,300) \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-T           : offset of the origin of the tiles (-T 100,75) \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-I           : use the irreversible DWT 9-7 (-I) \n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "-F           : characteristics of the raw input image\n");
+    fprintf(stdout,
+            "               -F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n");
+    fprintf(stdout,
+            "               Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "-jpip        : write jpip codestream index box in JP2 output file\n");
+    fprintf(stdout, "               NOTICE: currently supports only RPCL order\n");
+    fprintf(stdout, "\n");
+    /* UniPG>> */
 #ifdef USE_JPWL
-       fprintf(stdout,"-W           : adoption of JPWL (Part 11) capabilities (-W params)\n");
-       fprintf(stdout,"               The parameters can be written and repeated in any order:\n");
-       fprintf(stdout,"               [h<tilepart><=type>,s<tilepart><=method>,a=<addr>,...\n");
-       fprintf(stdout,"                ...,z=<size>,g=<range>,p<tilepart:pack><=type>]\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"                 h selects the header error protection (EPB): 'type' can be\n");
-       fprintf(stdout,"                   [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]\n");
-       fprintf(stdout,"                   if 'tilepart' is absent, it is for main and tile headers\n");
-       fprintf(stdout,"                   if 'tilepart' is present, it applies from that tile\n");
-       fprintf(stdout,"                     onwards, up to the next h<> spec, or to the last tilepart\n");
-       fprintf(stdout,"                     in the codestream (max. %d specs)\n", JPWL_MAX_NO_TILESPECS);
-       fprintf(stdout,"\n");
-       fprintf(stdout,"                 p selects the packet error protection (EEP/UEP with EPBs)\n");
-       fprintf(stdout,"                  to be applied to raw data: 'type' can be\n");
-       fprintf(stdout,"                   [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]\n");
-       fprintf(stdout,"                   if 'tilepart:pack' is absent, it is from tile 0, packet 0\n");
-       fprintf(stdout,"                   if 'tilepart:pack' is present, it applies from that tile\n");
-       fprintf(stdout,"                     and that packet onwards, up to the next packet spec\n");
-       fprintf(stdout,"                     or to the last packet in the last tilepart in the stream\n");
-       fprintf(stdout,"                     (max. %d specs)\n", JPWL_MAX_NO_PACKSPECS);
-       fprintf(stdout,"\n");
-       fprintf(stdout,"                 s enables sensitivity data insertion (ESD): 'method' can be\n");
-       fprintf(stdout,"                   [-1=NO ESD 0=RELATIVE ERROR 1=MSE 2=MSE REDUCTION 3=PSNR\n");
-       fprintf(stdout,"                    4=PSNR INCREMENT 5=MAXERR 6=TSE 7=RESERVED]\n");
-       fprintf(stdout,"                   if 'tilepart' is absent, it is for main header only\n");
-       fprintf(stdout,"                   if 'tilepart' is present, it applies from that tile\n");
-       fprintf(stdout,"                     onwards, up to the next s<> spec, or to the last tilepart\n");
-       fprintf(stdout,"                     in the codestream (max. %d specs)\n", JPWL_MAX_NO_TILESPECS);
-       fprintf(stdout,"\n");
-       fprintf(stdout,"                 g determines the addressing mode: <range> can be\n");
-       fprintf(stdout,"                   [0=PACKET 1=BYTE RANGE 2=PACKET RANGE]\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"                 a determines the size of data addressing: <addr> can be\n");
-       fprintf(stdout,"                   2/4 bytes (small/large codestreams). If not set, auto-mode\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"                 z determines the size of sensitivity values: <size> can be\n");
-       fprintf(stdout,"                   1/2 bytes, for the transformed pseudo-floating point value\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"                 ex.:\n");
-       fprintf(stdout,"                   h,h0=64,h3=16,h5=32,p0=78,p0:24=56,p1,p3:0=0,p3:20=32,s=0,\n");
-       fprintf(stdout,"                     s0=6,s3=-1,a=0,g=1,z=1\n");
-       fprintf(stdout,"                 means\n");
-       fprintf(stdout,"                   predefined EPB in MH, rs(64,32) from TPH 0 to TPH 2,\n");
-       fprintf(stdout,"                   CRC-16 in TPH 3 and TPH 4, CRC-32 in remaining TPHs,\n");
-       fprintf(stdout,"                   UEP rs(78,32) for packets 0 to 23 of tile 0,\n");
-       fprintf(stdout,"                   UEP rs(56,32) for packs. 24 to the last of tilepart 0,\n");
-       fprintf(stdout,"                   UEP rs default for packets of tilepart 1,\n");
-       fprintf(stdout,"                   no UEP for packets 0 to 19 of tilepart 3,\n");
-       fprintf(stdout,"                   UEP CRC-32 for packs. 20 of tilepart 3 to last tilepart,\n");
-       fprintf(stdout,"                   relative sensitivity ESD for MH,\n");
-       fprintf(stdout,"                   TSE ESD from TPH 0 to TPH 2, byte range with automatic\n");
-       fprintf(stdout,"                   size of addresses and 1 byte for each sensitivity value\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"                 ex.:\n");
-       fprintf(stdout,"                       h,s,p\n");
-       fprintf(stdout,"                 means\n");
-       fprintf(stdout,"                   default protection to headers (MH and TPHs) as well as\n");
-       fprintf(stdout,"                   data packets, one ESD in MH\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"                 N.B.: use the following recommendations when specifying\n");
-       fprintf(stdout,"                       the JPWL parameters list\n");
-       fprintf(stdout,"                   - when you use UEP, always pair the 'p' option with 'h'\n");
-       fprintf(stdout,"                 \n");
+    fprintf(stdout,
+            "-W           : adoption of JPWL (Part 11) capabilities (-W params)\n");
+    fprintf(stdout,
+            "               The parameters can be written and repeated in any order:\n");
+    fprintf(stdout,
+            "               [h<tilepart><=type>,s<tilepart><=method>,a=<addr>,...\n");
+    fprintf(stdout,
+            "                ...,z=<size>,g=<range>,p<tilepart:pack><=type>]\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "                 h selects the header error protection (EPB): 'type' can be\n");
+    fprintf(stdout,
+            "                   [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]\n");
+    fprintf(stdout,
+            "                   if 'tilepart' is absent, it is for main and tile headers\n");
+    fprintf(stdout,
+            "                   if 'tilepart' is present, it applies from that tile\n");
+    fprintf(stdout,
+            "                     onwards, up to the next h<> spec, or to the last tilepart\n");
+    fprintf(stdout, "                     in the codestream (max. %d specs)\n",
+            JPWL_MAX_NO_TILESPECS);
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "                 p selects the packet error protection (EEP/UEP with EPBs)\n");
+    fprintf(stdout, "                  to be applied to raw data: 'type' can be\n");
+    fprintf(stdout,
+            "                   [0=none 1,absent=predefined 16=CRC-16 32=CRC-32 37-128=RS]\n");
+    fprintf(stdout,
+            "                   if 'tilepart:pack' is absent, it is from tile 0, packet 0\n");
+    fprintf(stdout,
+            "                   if 'tilepart:pack' is present, it applies from that tile\n");
+    fprintf(stdout,
+            "                     and that packet onwards, up to the next packet spec\n");
+    fprintf(stdout,
+            "                     or to the last packet in the last tilepart in the stream\n");
+    fprintf(stdout, "                     (max. %d specs)\n",
+            JPWL_MAX_NO_PACKSPECS);
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "                 s enables sensitivity data insertion (ESD): 'method' can be\n");
+    fprintf(stdout,
+            "                   [-1=NO ESD 0=RELATIVE ERROR 1=MSE 2=MSE REDUCTION 3=PSNR\n");
+    fprintf(stdout,
+            "                    4=PSNR INCREMENT 5=MAXERR 6=TSE 7=RESERVED]\n");
+    fprintf(stdout,
+            "                   if 'tilepart' is absent, it is for main header only\n");
+    fprintf(stdout,
+            "                   if 'tilepart' is present, it applies from that tile\n");
+    fprintf(stdout,
+            "                     onwards, up to the next s<> spec, or to the last tilepart\n");
+    fprintf(stdout, "                     in the codestream (max. %d specs)\n",
+            JPWL_MAX_NO_TILESPECS);
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "                 g determines the addressing mode: <range> can be\n");
+    fprintf(stdout, "                   [0=PACKET 1=BYTE RANGE 2=PACKET RANGE]\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "                 a determines the size of data addressing: <addr> can be\n");
+    fprintf(stdout,
+            "                   2/4 bytes (small/large codestreams). If not set, auto-mode\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "                 z determines the size of sensitivity values: <size> can be\n");
+    fprintf(stdout,
+            "                   1/2 bytes, for the transformed pseudo-floating point value\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "                 ex.:\n");
+    fprintf(stdout,
+            "                   h,h0=64,h3=16,h5=32,p0=78,p0:24=56,p1,p3:0=0,p3:20=32,s=0,\n");
+    fprintf(stdout, "                     s0=6,s3=-1,a=0,g=1,z=1\n");
+    fprintf(stdout, "                 means\n");
+    fprintf(stdout,
+            "                   predefined EPB in MH, rs(64,32) from TPH 0 to TPH 2,\n");
+    fprintf(stdout,
+            "                   CRC-16 in TPH 3 and TPH 4, CRC-32 in remaining TPHs,\n");
+    fprintf(stdout,
+            "                   UEP rs(78,32) for packets 0 to 23 of tile 0,\n");
+    fprintf(stdout,
+            "                   UEP rs(56,32) for packs. 24 to the last of tilepart 0,\n");
+    fprintf(stdout,
+            "                   UEP rs default for packets of tilepart 1,\n");
+    fprintf(stdout,
+            "                   no UEP for packets 0 to 19 of tilepart 3,\n");
+    fprintf(stdout,
+            "                   UEP CRC-32 for packs. 20 of tilepart 3 to last tilepart,\n");
+    fprintf(stdout, "                   relative sensitivity ESD for MH,\n");
+    fprintf(stdout,
+            "                   TSE ESD from TPH 0 to TPH 2, byte range with automatic\n");
+    fprintf(stdout,
+            "                   size of addresses and 1 byte for each sensitivity value\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "                 ex.:\n");
+    fprintf(stdout, "                       h,s,p\n");
+    fprintf(stdout, "                 means\n");
+    fprintf(stdout,
+            "                   default protection to headers (MH and TPHs) as well as\n");
+    fprintf(stdout, "                   data packets, one ESD in MH\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "                 N.B.: use the following recommendations when specifying\n");
+    fprintf(stdout, "                       the JPWL parameters list\n");
+    fprintf(stdout,
+            "                   - when you use UEP, always pair the 'p' option with 'h'\n");
+    fprintf(stdout, "                 \n");
 #endif /* USE_JPWL */
-/* <<UniPG */
-       fprintf(stdout,"IMPORTANT:\n");
-       fprintf(stdout,"-----------\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"The index file has the structure below:\n");
-       fprintf(stdout,"---------------------------------------\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"Image_height Image_width\n");
-       fprintf(stdout,"progression order\n");
-       fprintf(stdout,"Tiles_size_X Tiles_size_Y\n");
-       fprintf(stdout,"Tiles_nb_X Tiles_nb_Y\n");
-       fprintf(stdout,"Components_nb\n");
-       fprintf(stdout,"Layers_nb\n");
-       fprintf(stdout,"decomposition_levels\n");
-       fprintf(stdout,"[Precincts_size_X_res_Nr Precincts_size_Y_res_Nr]...\n");
-       fprintf(stdout,"   [Precincts_size_X_res_0 Precincts_size_Y_res_0]\n");
-       fprintf(stdout,"Main_header_start_position\n");
-       fprintf(stdout,"Main_header_end_position\n");
-       fprintf(stdout,"Codestream_size\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"INFO ON TILES\n");
-       fprintf(stdout,"tileno start_pos end_hd end_tile nbparts disto nbpix disto/nbpix\n");
-       fprintf(stdout,"Tile_0 start_pos end_Theader end_pos NumParts TotalDisto NumPix MaxMSE\n");
-       fprintf(stdout,"Tile_1   ''           ''        ''        ''       ''    ''      ''\n");
-       fprintf(stdout,"...\n");
-       fprintf(stdout,"Tile_Nt   ''           ''        ''        ''       ''    ''     ''\n");
-       fprintf(stdout,"...\n");
-       fprintf(stdout,"TILE 0 DETAILS\n");
-       fprintf(stdout,"part_nb tileno num_packs start_pos end_tph_pos end_pos\n");
-       fprintf(stdout,"...\n");
-       fprintf(stdout,"Progression_string\n");
-       fprintf(stdout,"pack_nb tileno layno resno compno precno start_pos end_ph_pos end_pos disto\n");
-       fprintf(stdout,"Tpacket_0 Tile layer res. comp. prec. start_pos end_pos disto\n");
-       fprintf(stdout,"...\n");
-       fprintf(stdout,"Tpacket_Np ''   ''    ''   ''    ''       ''       ''     ''\n");
-
-       fprintf(stdout,"MaxDisto\n");
-
-       fprintf(stdout,"TotalDisto\n\n");
+    /* <<UniPG */
+    fprintf(stdout, "IMPORTANT:\n");
+    fprintf(stdout, "-----------\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "The index file has the structure below:\n");
+    fprintf(stdout, "---------------------------------------\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "Image_height Image_width\n");
+    fprintf(stdout, "progression order\n");
+    fprintf(stdout, "Tiles_size_X Tiles_size_Y\n");
+    fprintf(stdout, "Tiles_nb_X Tiles_nb_Y\n");
+    fprintf(stdout, "Components_nb\n");
+    fprintf(stdout, "Layers_nb\n");
+    fprintf(stdout, "decomposition_levels\n");
+    fprintf(stdout, "[Precincts_size_X_res_Nr Precincts_size_Y_res_Nr]...\n");
+    fprintf(stdout, "   [Precincts_size_X_res_0 Precincts_size_Y_res_0]\n");
+    fprintf(stdout, "Main_header_start_position\n");
+    fprintf(stdout, "Main_header_end_position\n");
+    fprintf(stdout, "Codestream_size\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "INFO ON TILES\n");
+    fprintf(stdout,
+            "tileno start_pos end_hd end_tile nbparts disto nbpix disto/nbpix\n");
+    fprintf(stdout,
+            "Tile_0 start_pos end_Theader end_pos NumParts TotalDisto NumPix MaxMSE\n");
+    fprintf(stdout,
+            "Tile_1   ''           ''        ''        ''       ''    ''      ''\n");
+    fprintf(stdout, "...\n");
+    fprintf(stdout,
+            "Tile_Nt   ''           ''        ''        ''       ''    ''     ''\n");
+    fprintf(stdout, "...\n");
+    fprintf(stdout, "TILE 0 DETAILS\n");
+    fprintf(stdout, "part_nb tileno num_packs start_pos end_tph_pos end_pos\n");
+    fprintf(stdout, "...\n");
+    fprintf(stdout, "Progression_string\n");
+    fprintf(stdout,
+            "pack_nb tileno layno resno compno precno start_pos end_ph_pos end_pos disto\n");
+    fprintf(stdout,
+            "Tpacket_0 Tile layer res. comp. prec. start_pos end_pos disto\n");
+    fprintf(stdout, "...\n");
+    fprintf(stdout,
+            "Tpacket_Np ''   ''    ''   ''    ''       ''       ''     ''\n");
+
+    fprintf(stdout, "MaxDisto\n");
+
+    fprintf(stdout, "TotalDisto\n\n");
 }
 
-static OPJ_PROG_ORDER give_progression(const char progression[4]) {
-       if(strncmp(progression, "LRCP", 4) == 0) {
-               return LRCP;
-       }
-       if(strncmp(progression, "RLCP", 4) == 0) {
-               return RLCP;
-       }
-       if(strncmp(progression, "RPCL", 4) == 0) {
-               return RPCL;
-       }
-       if(strncmp(progression, "PCRL", 4) == 0) {
-               return PCRL;
-       }
-       if(strncmp(progression, "CPRL", 4) == 0) {
-               return CPRL;
-       }
-
-       return PROG_UNKNOWN;
+static OPJ_PROG_ORDER give_progression(const char progression[4])
+{
+    if (strncmp(progression, "LRCP", 4) == 0) {
+        return LRCP;
+    }
+    if (strncmp(progression, "RLCP", 4) == 0) {
+        return RLCP;
+    }
+    if (strncmp(progression, "RPCL", 4) == 0) {
+        return RPCL;
+    }
+    if (strncmp(progression, "PCRL", 4) == 0) {
+        return PCRL;
+    }
+    if (strncmp(progression, "CPRL", 4) == 0) {
+        return CPRL;
+    }
+
+    return PROG_UNKNOWN;
 }
 
-static unsigned int get_num_images(char *imgdirpath){
-       DIR *dir;
-       struct dirent* content;
-       unsigned int num_images = 0;
-
-       /*Reading the input images from given input directory*/
-
-       dir= opendir(imgdirpath);
-       if(!dir){
-               fprintf(stderr,"Could not open Folder %s\n",imgdirpath);
-               return 0;
-       }
-
-       num_images=0;
-       while((content=readdir(dir))!=NULL){
-               if(strcmp(".",content->d_name)==0 || strcmp("..",content->d_name)==0 )
-                       continue;
-               num_images++;
-       }
-       return num_images;
+static unsigned int get_num_images(char *imgdirpath)
+{
+    DIR *dir;
+    struct dirent* content;
+    unsigned int num_images = 0;
+
+    /*Reading the input images from given input directory*/
+
+    dir = opendir(imgdirpath);
+    if (!dir) {
+        fprintf(stderr, "Could not open Folder %s\n", imgdirpath);
+        return 0;
+    }
+
+    num_images = 0;
+    while ((content = readdir(dir)) != NULL) {
+        if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) {
+            continue;
+        }
+        num_images++;
+    }
+    return num_images;
 }
 
-static int load_images(dircnt_t *dirptr, char *imgdirpath){
-       DIR *dir;
-       struct dirent* content;
-       int i = 0;
-
-       /*Reading the input images from given input directory*/
-
-       dir= opendir(imgdirpath);
-       if(!dir){
-               fprintf(stderr,"Could not open Folder %s\n",imgdirpath);
-               return 1;
-       }else   {
-               fprintf(stderr,"Folder opened successfully\n");
-       }
-
-       while((content=readdir(dir))!=NULL){
-               if(strcmp(".",content->d_name)==0 || strcmp("..",content->d_name)==0 )
-                       continue;
-
-               strcpy(dirptr->filename[i],content->d_name);
-               i++;
-       }
-       return 0;
+static int load_images(dircnt_t *dirptr, char *imgdirpath)
+{
+    DIR *dir;
+    struct dirent* content;
+    int i = 0;
+
+    /*Reading the input images from given input directory*/
+
+    dir = opendir(imgdirpath);
+    if (!dir) {
+        fprintf(stderr, "Could not open Folder %s\n", imgdirpath);
+        return 1;
+    } else   {
+        fprintf(stderr, "Folder opened successfully\n");
+    }
+
+    while ((content = readdir(dir)) != NULL) {
+        if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) {
+            continue;
+        }
+
+        strcpy(dirptr->filename[i], content->d_name);
+        i++;
+    }
+    return 0;
 }
 
-static int get_file_format(char *filename) {
-       unsigned int i;
-       static const char *extension[] = {
-    "pgx", "pnm", "pgm", "ppm", "pbm", "pam", "bmp", "tif", "raw", "tga", "png", "j2k", "jp2", "j2c", "jpc"
+static int get_file_format(char *filename)
+{
+    unsigned int i;
+    static const char *extension[] = {
+        "pgx", "pnm", "pgm", "ppm", "pbm", "pam", "bmp", "tif", "raw", "tga", "png", "j2k", "jp2", "j2c", "jpc"
     };
-       static const int format[] = {
-    PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, TIF_DFMT, RAW_DFMT, TGA_DFMT, PNG_DFMT, J2K_CFMT, JP2_CFMT, J2K_CFMT, J2K_CFMT
+    static const int format[] = {
+        PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, TIF_DFMT, RAW_DFMT, TGA_DFMT, PNG_DFMT, J2K_CFMT, JP2_CFMT, J2K_CFMT, J2K_CFMT
     };
-       char * ext = strrchr(filename, '.');
-       if (ext == NULL)
-               return -1;
-       ext++;
-       for(i = 0; i < sizeof(format)/sizeof(*format); i++) {
-               if(strcasecmp(ext, extension[i]) == 0) {
-                       return format[i];
-               }
-       }
-       return -1;
+    char * ext = strrchr(filename, '.');
+    if (ext == NULL) {
+        return -1;
+    }
+    ext++;
+    for (i = 0; i < sizeof(format) / sizeof(*format); i++) {
+        if (strcasecmp(ext, extension[i]) == 0) {
+            return format[i];
+        }
+    }
+    return -1;
 }
 
-static char * get_file_name(char *name){
-       char *fname;
-       fname= (char*)malloc(OPJ_PATH_LEN*sizeof(char));
-       fname= strtok(name,".");
-       return fname;
+static char * get_file_name(char *name)
+{
+    char *fname;
+    fname = (char*)malloc(OPJ_PATH_LEN * sizeof(char));
+    fname = strtok(name, ".");
+    return fname;
 }
 
-static char get_next_file(int imageno,dircnt_t *dirptr,img_fol_t *img_fol, opj_cparameters_t *parameters){
-       char image_filename[OPJ_PATH_LEN], infilename[OPJ_PATH_LEN],outfilename[OPJ_PATH_LEN],temp_ofname[OPJ_PATH_LEN];
-  char *temp_p, temp1[OPJ_PATH_LEN]="";
-
-       strcpy(image_filename,dirptr->filename[imageno]);
-       fprintf(stderr,"File Number %d \"%s\"\n",imageno,image_filename);
-       parameters->decod_format = get_file_format(image_filename);
-       if (parameters->decod_format == -1)
-               return 1;
-       sprintf(infilename,"%s/%s",img_fol->imgdirpath,image_filename);
-       strncpy(parameters->infile, infilename, sizeof(infilename));
-
-       /*Set output file*/
-       strcpy(temp_ofname,get_file_name(image_filename));
-       while((temp_p = strtok(NULL,".")) != NULL){
-               strcat(temp_ofname,temp1);
-               sprintf(temp1,".%s",temp_p);
-       }
-       if(img_fol->set_out_format==1){
-               sprintf(outfilename,"%s/%s.%s",img_fol->imgdirpath,temp_ofname,img_fol->out_format);
-               strncpy(parameters->outfile, outfilename, sizeof(outfilename));
-       }
- return 0;
+static char get_next_file(int imageno, dircnt_t *dirptr, img_fol_t *img_fol,
+                          opj_cparameters_t *parameters)
+{
+    char image_filename[OPJ_PATH_LEN], infilename[OPJ_PATH_LEN],
+         outfilename[OPJ_PATH_LEN], temp_ofname[OPJ_PATH_LEN];
+    char *temp_p, temp1[OPJ_PATH_LEN] = "";
+
+    strcpy(image_filename, dirptr->filename[imageno]);
+    fprintf(stderr, "File Number %d \"%s\"\n", imageno, image_filename);
+    parameters->decod_format = get_file_format(image_filename);
+    if (parameters->decod_format == -1) {
+        return 1;
+    }
+    sprintf(infilename, "%s/%s", img_fol->imgdirpath, image_filename);
+    strncpy(parameters->infile, infilename, sizeof(infilename));
+
+    /*Set output file*/
+    strcpy(temp_ofname, get_file_name(image_filename));
+    while ((temp_p = strtok(NULL, ".")) != NULL) {
+        strcat(temp_ofname, temp1);
+        sprintf(temp1, ".%s", temp_p);
+    }
+    if (img_fol->set_out_format == 1) {
+        sprintf(outfilename, "%s/%s.%s", img_fol->imgdirpath, temp_ofname,
+                img_fol->out_format);
+        strncpy(parameters->outfile, outfilename, sizeof(outfilename));
+    }
+    return 0;
 }
 
-static int initialise_4K_poc(opj_poc_t *POC, int numres){
-       POC[0].tile  = 1;
-       POC[0].resno0  = 0;
-       POC[0].compno0 = 0;
-       POC[0].layno1  = 1;
-       POC[0].resno1  = numres-1;
-       POC[0].compno1 = 3;
-       POC[0].prg1 = CPRL;
-       POC[1].tile  = 1;
-       POC[1].resno0  = numres-1;
-       POC[1].compno0 = 0;
-       POC[1].layno1  = 1;
-       POC[1].resno1  = numres;
-       POC[1].compno1 = 3;
-       POC[1].prg1 = CPRL;
-       return 2;
+static int initialise_4K_poc(opj_poc_t *POC, int numres)
+{
+    POC[0].tile  = 1;
+    POC[0].resno0  = 0;
+    POC[0].compno0 = 0;
+    POC[0].layno1  = 1;
+    POC[0].resno1  = numres - 1;
+    POC[0].compno1 = 3;
+    POC[0].prg1 = CPRL;
+    POC[1].tile  = 1;
+    POC[1].resno0  = numres - 1;
+    POC[1].compno0 = 0;
+    POC[1].layno1  = 1;
+    POC[1].resno1  = numres;
+    POC[1].compno1 = 3;
+    POC[1].prg1 = CPRL;
+    return 2;
 }
 
-static void cinema_parameters(opj_cparameters_t *parameters){
-       parameters->tile_size_on = OPJ_FALSE;
-       parameters->cp_tdx=1;
-       parameters->cp_tdy=1;
+static void cinema_parameters(opj_cparameters_t *parameters)
+{
+    parameters->tile_size_on = OPJ_FALSE;
+    parameters->cp_tdx = 1;
+    parameters->cp_tdy = 1;
 
-       /*Tile part*/
-       parameters->tp_flag = 'C';
-       parameters->tp_on = 1;
+    /*Tile part*/
+    parameters->tp_flag = 'C';
+    parameters->tp_on = 1;
 
-       /*Tile and Image shall be at (0,0)*/
-       parameters->cp_tx0 = 0;
-       parameters->cp_ty0 = 0;
-       parameters->image_offset_x0 = 0;
-       parameters->image_offset_y0 = 0;
+    /*Tile and Image shall be at (0,0)*/
+    parameters->cp_tx0 = 0;
+    parameters->cp_ty0 = 0;
+    parameters->image_offset_x0 = 0;
+    parameters->image_offset_y0 = 0;
 
-       /*Codeblock size= 32*32*/
-       parameters->cblockw_init = 32;
-       parameters->cblockh_init = 32;
-       parameters->csty |= 0x01;
+    /*Codeblock size= 32*32*/
+    parameters->cblockw_init = 32;
+    parameters->cblockh_init = 32;
+    parameters->csty |= 0x01;
 
-       /*The progression order shall be CPRL*/
-       parameters->prog_order = CPRL;
+    /*The progression order shall be CPRL*/
+    parameters->prog_order = CPRL;
 
-       /* No ROI */
-       parameters->roi_compno = -1;
+    /* No ROI */
+    parameters->roi_compno = -1;
 
-       parameters->subsampling_dx = 1;         parameters->subsampling_dy = 1;
+    parameters->subsampling_dx = 1;
+    parameters->subsampling_dy = 1;
 
-       /* 9-7 transform */
-       parameters->irreversible = 1;
+    /* 9-7 transform */
+    parameters->irreversible = 1;
 
 }
 
-static void cinema_setup_encoder(opj_cparameters_t *parameters,opj_image_t *image, img_fol_t *img_fol){
-       int i;
-       float temp_rate;
-
-       switch (parameters->cp_cinema){
-       case CINEMA2K_24:
-       case CINEMA2K_48:
-               if(parameters->numresolution > 6){
-                       parameters->numresolution = 6;
-               }
-               if (!((image->comps[0].w == 2048) | (image->comps[0].h == 1080))){
-                       fprintf(stdout,"Image coordinates %d x %d is not 2K compliant.\nJPEG Digital Cinema Profile-3 "
-                               "(2K profile) compliance requires that at least one of coordinates match 2048 x 1080\n",
-                               image->comps[0].w,image->comps[0].h);
-                       parameters->cp_rsiz = STD_RSIZ;
-               }
-       break;
-
-       case CINEMA4K_24:
-               if(parameters->numresolution < 1){
-                               parameters->numresolution = 1;
-                       }else if(parameters->numresolution > 7){
-                               parameters->numresolution = 7;
-                       }
-               if (!((image->comps[0].w == 4096) | (image->comps[0].h == 2160))){
-                       fprintf(stdout,"Image coordinates %d x %d is not 4K compliant.\nJPEG Digital Cinema Profile-4"
-                               "(4K profile) compliance requires that at least one of coordinates match 4096 x 2160\n",
-                               image->comps[0].w,image->comps[0].h);
-                       parameters->cp_rsiz = STD_RSIZ;
-               }
-               parameters->numpocs = initialise_4K_poc(parameters->POC,parameters->numresolution);
-               break;
-       default :
-               break;
-       }
-
-       switch (parameters->cp_cinema){
-               case CINEMA2K_24:
-               case CINEMA4K_24:
-                       for(i=0 ; i<parameters->tcp_numlayers ; i++){
-                               temp_rate = 0 ;
-                               if (img_fol->rates[i]== 0){
-                                       parameters->tcp_rates[0]= ((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec))/
-                                       (CINEMA_24_CS * 8 * image->comps[0].dx * image->comps[0].dy);
-                               }else{
-                                       temp_rate =((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec))/
-                                               (img_fol->rates[i] * 8 * image->comps[0].dx * image->comps[0].dy);
-                                       if (temp_rate > CINEMA_24_CS ){
-                                               parameters->tcp_rates[i]= ((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec))/
-                                               (CINEMA_24_CS * 8 * image->comps[0].dx * image->comps[0].dy);
-                                       }else{
-                                               parameters->tcp_rates[i]= img_fol->rates[i];
-                                       }
-                               }
-                       }
-                       parameters->max_comp_size = COMP_24_CS;
-                       break;
-
-               case CINEMA2K_48:
-                       for(i=0 ; i<parameters->tcp_numlayers ; i++){
-                               temp_rate = 0 ;
-                               if (img_fol->rates[i]== 0){
-                                       parameters->tcp_rates[0]= ((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec))/
-                                       (CINEMA_48_CS * 8 * image->comps[0].dx * image->comps[0].dy);
-                               }else{
-                                       temp_rate =((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec))/
-                                               (img_fol->rates[i] * 8 * image->comps[0].dx * image->comps[0].dy);
-                                       if (temp_rate > CINEMA_48_CS ){
-                                               parameters->tcp_rates[0]= ((float) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec))/
-                                               (CINEMA_48_CS * 8 * image->comps[0].dx * image->comps[0].dy);
-                                       }else{
-                                               parameters->tcp_rates[i]= img_fol->rates[i];
-                                       }
-                               }
-                       }
-                       parameters->max_comp_size = COMP_48_CS;
-                       break;
-               default:
-                       break;
-       }
-       parameters->cp_disto_alloc = 1;
+static void cinema_setup_encoder(opj_cparameters_t *parameters,
+                                 opj_image_t *image, img_fol_t *img_fol)
+{
+    int i;
+    float temp_rate;
+
+    switch (parameters->cp_cinema) {
+    case CINEMA2K_24:
+    case CINEMA2K_48:
+        if (parameters->numresolution > 6) {
+            parameters->numresolution = 6;
+        }
+        if (!((image->comps[0].w == 2048) | (image->comps[0].h == 1080))) {
+            fprintf(stdout,
+                    "Image coordinates %d x %d is not 2K compliant.\nJPEG Digital Cinema Profile-3 "
+                    "(2K profile) compliance requires that at least one of coordinates match 2048 x 1080\n",
+                    image->comps[0].w, image->comps[0].h);
+            parameters->cp_rsiz = STD_RSIZ;
+        }
+        break;
+
+    case CINEMA4K_24:
+        if (parameters->numresolution < 1) {
+            parameters->numresolution = 1;
+        } else if (parameters->numresolution > 7) {
+            parameters->numresolution = 7;
+        }
+        if (!((image->comps[0].w == 4096) | (image->comps[0].h == 2160))) {
+            fprintf(stdout,
+                    "Image coordinates %d x %d is not 4K compliant.\nJPEG Digital Cinema Profile-4"
+                    "(4K profile) compliance requires that at least one of coordinates match 4096 x 2160\n",
+                    image->comps[0].w, image->comps[0].h);
+            parameters->cp_rsiz = STD_RSIZ;
+        }
+        parameters->numpocs = initialise_4K_poc(parameters->POC,
+                                                parameters->numresolution);
+        break;
+    default :
+        break;
+    }
+
+    switch (parameters->cp_cinema) {
+    case CINEMA2K_24:
+    case CINEMA4K_24:
+        for (i = 0 ; i < parameters->tcp_numlayers ; i++) {
+            temp_rate = 0 ;
+            if (img_fol->rates[i] == 0) {
+                parameters->tcp_rates[0] = ((float)(image->numcomps * image->comps[0].w *
+                                                    image->comps[0].h * image->comps[0].prec)) /
+                                           (CINEMA_24_CS * 8 * image->comps[0].dx * image->comps[0].dy);
+            } else {
+                temp_rate = ((float)(image->numcomps * image->comps[0].w * image->comps[0].h *
+                                     image->comps[0].prec)) /
+                            (img_fol->rates[i] * 8 * image->comps[0].dx * image->comps[0].dy);
+                if (temp_rate > CINEMA_24_CS) {
+                    parameters->tcp_rates[i] = ((float)(image->numcomps * image->comps[0].w *
+                                                        image->comps[0].h * image->comps[0].prec)) /
+                                               (CINEMA_24_CS * 8 * image->comps[0].dx * image->comps[0].dy);
+                } else {
+                    parameters->tcp_rates[i] = img_fol->rates[i];
+                }
+            }
+        }
+        parameters->max_comp_size = COMP_24_CS;
+        break;
+
+    case CINEMA2K_48:
+        for (i = 0 ; i < parameters->tcp_numlayers ; i++) {
+            temp_rate = 0 ;
+            if (img_fol->rates[i] == 0) {
+                parameters->tcp_rates[0] = ((float)(image->numcomps * image->comps[0].w *
+                                                    image->comps[0].h * image->comps[0].prec)) /
+                                           (CINEMA_48_CS * 8 * image->comps[0].dx * image->comps[0].dy);
+            } else {
+                temp_rate = ((float)(image->numcomps * image->comps[0].w * image->comps[0].h *
+                                     image->comps[0].prec)) /
+                            (img_fol->rates[i] * 8 * image->comps[0].dx * image->comps[0].dy);
+                if (temp_rate > CINEMA_48_CS) {
+                    parameters->tcp_rates[0] = ((float)(image->numcomps * image->comps[0].w *
+                                                        image->comps[0].h * image->comps[0].prec)) /
+                                               (CINEMA_48_CS * 8 * image->comps[0].dx * image->comps[0].dy);
+                } else {
+                    parameters->tcp_rates[i] = img_fol->rates[i];
+                }
+            }
+        }
+        parameters->max_comp_size = COMP_48_CS;
+        break;
+    default:
+        break;
+    }
+    parameters->cp_disto_alloc = 1;
 }
 
 /* ------------------------------------------------------------------------------------ */
 
-static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *parameters,
-                                                                                                       img_fol_t *img_fol, raw_cparameters_t *raw_cp, char *indexfilename) {
-       int i, j, totlen, c;
-       opj_option_t long_option[]={
-               {"cinema2K",REQ_ARG, NULL ,'w'},
-               {"cinema4K",NO_ARG, NULL ,'y'},
-               {"ImgDir",REQ_ARG, NULL ,'z'},
-               {"TP",REQ_ARG, NULL ,'u'},
-               {"SOP",NO_ARG, NULL ,'S'},
-               {"EPH",NO_ARG, NULL ,'E'},
-               {"OutFor",REQ_ARG, NULL ,'O'},
-               {"POC",REQ_ARG, NULL ,'P'},
-               {"ROI",REQ_ARG, NULL ,'R'},
-               {"jpip",NO_ARG, NULL, 'J'}
-       };
-
-       /* parse the command line */
-       const char optlist[] = "i:o:r:q:n:b:c:t:p:s:SEM:x:R:d:T:If:P:C:F:u:J"
+static int parse_cmdline_encoder(int argc, char **argv,
+                                 opj_cparameters_t *parameters,
+                                 img_fol_t *img_fol, raw_cparameters_t *raw_cp, char *indexfilename)
+{
+    int i, j, totlen, c;
+    opj_option_t long_option[] = {
+        {"cinema2K", REQ_ARG, NULL, 'w'},
+        {"cinema4K", NO_ARG, NULL, 'y'},
+        {"ImgDir", REQ_ARG, NULL, 'z'},
+        {"TP", REQ_ARG, NULL, 'u'},
+        {"SOP", NO_ARG, NULL, 'S'},
+        {"EPH", NO_ARG, NULL, 'E'},
+        {"OutFor", REQ_ARG, NULL, 'O'},
+        {"POC", REQ_ARG, NULL, 'P'},
+        {"ROI", REQ_ARG, NULL, 'R'},
+        {"jpip", NO_ARG, NULL, 'J'}
+    };
+
+    /* parse the command line */
+    const char optlist[] = "i:o:r:q:n:b:c:t:p:s:SEM:x:R:d:T:If:P:C:F:u:J"
 #ifdef USE_JPWL
-               "W:"
+                           "W:"
 #endif /* USE_JPWL */
-               "h";
-
-       totlen=sizeof(long_option);
-       img_fol->set_out_format=0;
-       raw_cp->rawWidth = 0;
-
-       do{
-               c = opj_getopt_long(argc, argv, optlist,long_option,totlen);
-               if (c == -1)
-                       break;
-               switch (c) {
-                       case 'i':                       /* input file */
-                       {
-                               char *infile = opj_optarg;
-                               parameters->decod_format = get_file_format(infile);
-                               switch(parameters->decod_format) {
-                                       case PGX_DFMT:
-                                       case PXM_DFMT:
-                                       case BMP_DFMT:
-                                       case TIF_DFMT:
-                                       case RAW_DFMT:
-                                       case TGA_DFMT:
-                                       case PNG_DFMT:
-                                               break;
-                                       default:
-                                               fprintf(stderr,
-                                                       "!! Unrecognized format for infile : %s "
-              "[accept only *.pnm, *.pgm, *.ppm, *.pgx, *png, *.bmp, *.tif, *.raw or *.tga] !!\n\n",
-                                                       infile);
-                                               return 1;
-                               }
-                               strncpy(parameters->infile, infile, sizeof(parameters->infile)-1);
-                       }
-                       break;
-
-                               /* ----------------------------------------------------- */
-
-                       case 'o':                       /* output file */
-                       {
-                               char *outfile = opj_optarg;
-                               parameters->cod_format = get_file_format(outfile);
-                               switch(parameters->cod_format) {
-                                       case J2K_CFMT:
-                                       case JP2_CFMT:
-                                               break;
-                                       default:
-                                               fprintf(stderr, "Unknown output format image %s [only *.j2k, *.j2c or *.jp2]!! \n", outfile);
-                                               return 1;
-                               }
-                               strncpy(parameters->outfile, outfile, sizeof(parameters->outfile)-1);
-                       }
-                       break;
-
-                               /* ----------------------------------------------------- */
-                       case 'O':                       /* output format */
-                               {
-                                       char outformat[50];
-                                       char *of = opj_optarg;
-                                       sprintf(outformat,".%s",of);
-                                       img_fol->set_out_format = 1;
-                                       parameters->cod_format = get_file_format(outformat);
-                                       switch(parameters->cod_format) {
-                                               case J2K_CFMT:
-                                               case JP2_CFMT:
-                                                       img_fol->out_format = opj_optarg;
-                                                       break;
-                                               default:
-                                                       fprintf(stderr, "Unknown output format image [only j2k, j2c, jp2]!! \n");
-                                                       return 1;
-                                       }
-                               }
-                               break;
-
-
-                               /* ----------------------------------------------------- */
-
-
-                       case 'r':                       /* rates rates/distorsion */
-                       {
-                               char *s = opj_optarg;
-                               parameters->tcp_numlayers = 0;
-                               while (sscanf(s, "%f", &parameters->tcp_rates[parameters->tcp_numlayers]) == 1) {
-                                       parameters->tcp_numlayers++;
-                                       while (*s && *s != ',') {
-                                               s++;
-                                       }
-                                       if (!*s)
-                                               break;
-                                       s++;
-                               }
-                               parameters->cp_disto_alloc = 1;
-                       }
-                       break;
-
-                               /* ----------------------------------------------------- */
-
-
-                       case 'F':                       /* Raw image format parameters */
-                       {
-                               char signo;
-                               char *s = opj_optarg;
-                               if (sscanf(s, "%d,%d,%d,%d,%c", &raw_cp->rawWidth, &raw_cp->rawHeight, &raw_cp->rawComp, &raw_cp->rawBitDepth, &signo) == 5) {
-                                       if (signo == 's') {
-                                               raw_cp->rawSigned = OPJ_TRUE;
-                                               fprintf(stdout,"\nRaw file parameters: %d,%d,%d,%d Signed\n", raw_cp->rawWidth, raw_cp->rawHeight, raw_cp->rawComp, raw_cp->rawBitDepth);
-                                       }
-                                       else if (signo == 'u') {
-                                               raw_cp->rawSigned = OPJ_FALSE;
-                                               fprintf(stdout,"\nRaw file parameters: %d,%d,%d,%d Unsigned\n", raw_cp->rawWidth, raw_cp->rawHeight, raw_cp->rawComp, raw_cp->rawBitDepth);
-                                       }
-                                       else {
-                                               fprintf(stderr,"\nError: invalid raw image parameters: Unknown sign of raw file\n");
-                                               fprintf(stderr,"Please use the Format option -F:\n");
-                                               fprintf(stderr,"-F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n");
-                                               fprintf(stderr,"Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n");
-                                               fprintf(stderr,"Aborting\n");
-                                       }
-                               }
-                               else {
-                                       fprintf(stderr,"\nError: invalid raw image parameters\n");
-                                       fprintf(stderr,"Please use the Format option -F:\n");
-                                       fprintf(stderr,"-F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n");
-                                               fprintf(stderr,"Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n");
-                                       fprintf(stderr,"Aborting\n");
-                                       return 1;
-                               }
-                       }
-                       break;
-
-                               /* ----------------------------------------------------- */
-
-                       case 'q':                       /* add fixed_quality */
-                       {
-                               char *s = opj_optarg;
-                               while (sscanf(s, "%f", &parameters->tcp_distoratio[parameters->tcp_numlayers]) == 1) {
-                                       parameters->tcp_numlayers++;
-                                       while (*s && *s != ',') {
-                                               s++;
-                                       }
-                                       if (!*s)
-                                               break;
-                                       s++;
-                               }
-                               parameters->cp_fixed_quality = 1;
-                       }
-                       break;
-
-                               /* dda */
-                               /* ----------------------------------------------------- */
-
-                       case 'f':                       /* mod fixed_quality (before : -q) */
-                       {
-                               int *row = NULL, *col = NULL;
-                               int numlayers = 0, numresolution = 0, matrix_width = 0;
-
-                               char *s = opj_optarg;
-                               sscanf(s, "%d", &numlayers);
-                               s++;
-                               if (numlayers > 9)
-                                       s++;
-
-                               parameters->tcp_numlayers = numlayers;
-                               numresolution = parameters->numresolution;
-                               matrix_width = numresolution * 3;
-                               parameters->cp_matrice = (int *) malloc(numlayers * matrix_width * sizeof(int));
-                               s = s + 2;
-
-                               for (i = 0; i < numlayers; i++) {
-                                       row = &parameters->cp_matrice[i * matrix_width];
-                                       col = row;
-                                       parameters->tcp_rates[i] = 1;
-                                       sscanf(s, "%d,", &col[0]);
-                                       s += 2;
-                                       if (col[0] > 9)
-                                               s++;
-                                       col[1] = 0;
-                                       col[2] = 0;
-                                       for (j = 1; j < numresolution; j++) {
-                                               col += 3;
-                                               sscanf(s, "%d,%d,%d", &col[0], &col[1], &col[2]);
-                                               s += 6;
-                                               if (col[0] > 9)
-                                                       s++;
-                                               if (col[1] > 9)
-                                                       s++;
-                                               if (col[2] > 9)
-                                                       s++;
-                                       }
-                                       if (i < numlayers - 1)
-                                               s++;
-                               }
-                               parameters->cp_fixed_alloc = 1;
-                       }
-                       break;
-
-                               /* ----------------------------------------------------- */
-
-                       case 't':                       /* tiles */
-                       {
-                               sscanf(opj_optarg, "%d,%d", &parameters->cp_tdx, &parameters->cp_tdy);
-                               parameters->tile_size_on = OPJ_TRUE;
-                       }
-                       break;
-
-                               /* ----------------------------------------------------- */
-
-                       case 'n':                       /* resolution */
-                       {
-                               sscanf(opj_optarg, "%d", &parameters->numresolution);
-                       }
-                       break;
-
-                               /* ----------------------------------------------------- */
-                       case 'c':                       /* precinct dimension */
-                       {
-                               char sep;
-                               int res_spec = 0;
-
-                               char *s = opj_optarg;
-                               do {
-                                       sep = 0;
-                                       sscanf(s, "[%d,%d]%c", &parameters->prcw_init[res_spec],
-                                 &parameters->prch_init[res_spec], &sep);
-                                       parameters->csty |= 0x01;
-                                       res_spec++;
-                                       s = strpbrk(s, "]") + 2;
-                               }
-                               while (sep == ',');
-                               parameters->res_spec = res_spec;
-                       }
-                       break;
-
-                               /* ----------------------------------------------------- */
-
-                       case 'b':                       /* code-block dimension */
-                       {
-                               int cblockw_init = 0, cblockh_init = 0;
-                               sscanf(opj_optarg, "%d,%d", &cblockw_init, &cblockh_init);
-                               if (cblockw_init * 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 = opj_optarg;
-                               strncpy(indexfilename, index, OPJ_PATH_LEN);
-                       }
-                       break;
-
-                               /* ----------------------------------------------------- */
-
-                       case 'p':                       /* progression order */
-                       {
-                               char progression[4];
-
-                               strncpy(progression, opj_optarg, 4);
-                               parameters->prog_order = give_progression(progression);
-                               if (parameters->prog_order == -1) {
-                                       fprintf(stderr, "Unrecognized progression order "
-            "[LRCP, RLCP, RPCL, PCRL, CPRL] !!\n");
-                                       return 1;
-                               }
-                       }
-                       break;
-
-                               /* ----------------------------------------------------- */
-
-                       case 's':                       /* subsampling factor */
-                       {
-                               if (sscanf(opj_optarg, "%d,%d", &parameters->subsampling_dx,
-                                    &parameters->subsampling_dy) != 2) {
-                                       fprintf(stderr, "'-s' sub-sampling argument error !  [-s dx,dy]\n");
-                                       return 1;
-                               }
-                       }
-                       break;
-
-                               /* ----------------------------------------------------- */
-
-                       case 'd':                       /* coordonnate of the reference grid */
-                       {
-                               if (sscanf(opj_optarg, "%d,%d", &parameters->image_offset_x0,
-                                    &parameters->image_offset_y0) != 2) {
-                                       fprintf(stderr, "-d 'coordonnate of the reference grid' argument "
-            "error !! [-d x0,y0]\n");
-                                       return 1;
-                               }
-                       }
-                       break;
-
-                               /* ----------------------------------------------------- */
-
-                       case 'h':                       /* display an help description */
-                               encode_help_display();
-                               return 1;
-
-                               /* ----------------------------------------------------- */
-
-                       case 'P':                       /* POC */
-                       {
-                               int numpocs = 0;                /* number of progression order change (POC) default 0 */
-                               opj_poc_t *POC = NULL;  /* POC : used in case of Progression order change */
-
-                               char *s = opj_optarg;
-                               POC = parameters->POC;
-
-                               while (sscanf(s, "T%d=%d,%d,%d,%d,%d,%4s", &POC[numpocs].tile,
-                                       &POC[numpocs].resno0, &POC[numpocs].compno0,
-                                       &POC[numpocs].layno1, &POC[numpocs].resno1,
-                                       &POC[numpocs].compno1, POC[numpocs].progorder) == 7) {
-                                       POC[numpocs].prg1 = give_progression(POC[numpocs].progorder);
-                                       numpocs++;
-                                       while (*s && *s != '/') {
-                                               s++;
-                                       }
-                                       if (!*s) {
-                                               break;
-                                       }
-                                       s++;
-                               }
-                               parameters->numpocs = numpocs;
-                       }
-                       break;
-
-                               /* ------------------------------------------------------ */
-
-                       case 'S':                       /* SOP marker */
-                       {
-                               parameters->csty |= 0x02;
-                       }
-                       break;
-
-                               /* ------------------------------------------------------ */
-
-                       case 'E':                       /* EPH marker */
-                       {
-                               parameters->csty |= 0x04;
-                       }
-                       break;
-
-                               /* ------------------------------------------------------ */
-
-                       case 'M':                       /* Mode switch pas tous au point !! */
-                       {
-                               int value = 0;
-                               if (sscanf(opj_optarg, "%d", &value) == 1) {
-                                       for (i = 0; i <= 5; i++) {
-                                               int cache = value & (1 << i);
-                                               if (cache)
-                                                       parameters->mode |= (1 << i);
-                                       }
-                               }
-                       }
-                       break;
-
-                               /* ------------------------------------------------------ */
-
-                       case 'R':                       /* ROI */
-                       {
-                               if (sscanf(opj_optarg, "c=%d,U=%d", &parameters->roi_compno,
-                                           &parameters->roi_shift) != 2) {
-                                       fprintf(stderr, "ROI error !! [-ROI c='compno',U='shift']\n");
-                                       return 1;
-                               }
-                       }
-                       break;
-
-                               /* ------------------------------------------------------ */
-
-                       case 'T':                       /* Tile offset */
-                       {
-                               if (sscanf(opj_optarg, "%d,%d", &parameters->cp_tx0, &parameters->cp_ty0) != 2) {
-                                       fprintf(stderr, "-T 'tile offset' argument error !! [-T X0,Y0]");
-                                       return 1;
-                               }
-                       }
-                       break;
-
-                               /* ------------------------------------------------------ */
-
-                       case 'C':                       /* add a comment */
-                       {
-                               parameters->cp_comment = (char*)malloc(strlen(opj_optarg) + 1);
-                               if(parameters->cp_comment) {
-                                       strcpy(parameters->cp_comment, opj_optarg);
-                               }
-                       }
-                       break;
-
-
-                               /* ------------------------------------------------------ */
-
-                       case 'I':                       /* reversible or not */
-                       {
-                               parameters->irreversible = 1;
-                       }
-                       break;
-
-                       /* ------------------------------------------------------ */
-
-                       case 'u':                       /* Tile part generation*/
-                       {
-                               parameters->tp_flag = opj_optarg[0];
-                               parameters->tp_on = 1;
-                       }
-                       break;
-
-                               /* ------------------------------------------------------ */
-
-                       case 'z':                       /* Image Directory path */
-                       {
-                               img_fol->imgdirpath = (char*)malloc(strlen(opj_optarg) + 1);
-                               strcpy(img_fol->imgdirpath,opj_optarg);
-                               img_fol->set_imgdir=1;
-                       }
-                       break;
-
-                               /* ------------------------------------------------------ */
-
-                       case 'w':                       /* Digital Cinema 2K profile compliance*/
-                       {
-                               int fps=0;
-                               sscanf(opj_optarg,"%d",&fps);
-                               if(fps == 24){
-                                       parameters->cp_cinema = CINEMA2K_24;
-                               }else if(fps == 48 ){
-                                       parameters->cp_cinema = CINEMA2K_48;
-                               }else {
-                                       fprintf(stderr,"Incorrect value!! must be 24 or 48\n");
-                                       return 1;
-                               }
-                               fprintf(stdout,"CINEMA 2K compliant codestream\n");
-                               parameters->cp_rsiz = CINEMA2K;
-
-                       }
-                       break;
-
-                               /* ------------------------------------------------------ */
-
-                       case 'y':                       /* Digital Cinema 4K profile compliance*/
-                       {
-                               parameters->cp_cinema = CINEMA4K_24;
-                               fprintf(stdout,"CINEMA 4K compliant codestream\n");
-                               parameters->cp_rsiz = CINEMA4K;
-                       }
-                       break;
-
-                               /* ------------------------------------------------------ */
-
-/* UniPG>> */
+                           "h";
+
+    totlen = sizeof(long_option);
+    img_fol->set_out_format = 0;
+    raw_cp->rawWidth = 0;
+
+    do {
+        c = opj_getopt_long(argc, argv, optlist, long_option, totlen);
+        if (c == -1) {
+            break;
+        }
+        switch (c) {
+        case 'i': {         /* input file */
+            char *infile = opj_optarg;
+            parameters->decod_format = get_file_format(infile);
+            switch (parameters->decod_format) {
+            case PGX_DFMT:
+            case PXM_DFMT:
+            case BMP_DFMT:
+            case TIF_DFMT:
+            case RAW_DFMT:
+            case TGA_DFMT:
+            case PNG_DFMT:
+                break;
+            default:
+                fprintf(stderr,
+                        "!! Unrecognized format for infile : %s "
+                        "[accept only *.pnm, *.pgm, *.ppm, *.pgx, *png, *.bmp, *.tif, *.raw or *.tga] !!\n\n",
+                        infile);
+                return 1;
+            }
+            strncpy(parameters->infile, infile, sizeof(parameters->infile) - 1);
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'o': {         /* output file */
+            char *outfile = opj_optarg;
+            parameters->cod_format = get_file_format(outfile);
+            switch (parameters->cod_format) {
+            case J2K_CFMT:
+            case JP2_CFMT:
+                break;
+            default:
+                fprintf(stderr,
+                        "Unknown output format image %s [only *.j2k, *.j2c or *.jp2]!! \n", outfile);
+                return 1;
+            }
+            strncpy(parameters->outfile, outfile, sizeof(parameters->outfile) - 1);
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+        case 'O': {         /* output format */
+            char outformat[50];
+            char *of = opj_optarg;
+            sprintf(outformat, ".%s", of);
+            img_fol->set_out_format = 1;
+            parameters->cod_format = get_file_format(outformat);
+            switch (parameters->cod_format) {
+            case J2K_CFMT:
+            case JP2_CFMT:
+                img_fol->out_format = opj_optarg;
+                break;
+            default:
+                fprintf(stderr, "Unknown output format image [only j2k, j2c, jp2]!! \n");
+                return 1;
+            }
+        }
+        break;
+
+
+        /* ----------------------------------------------------- */
+
+
+        case 'r': {         /* rates rates/distorsion */
+            char *s = opj_optarg;
+            parameters->tcp_numlayers = 0;
+            while (sscanf(s, "%f", &parameters->tcp_rates[parameters->tcp_numlayers]) ==
+                    1) {
+                parameters->tcp_numlayers++;
+                while (*s && *s != ',') {
+                    s++;
+                }
+                if (!*s) {
+                    break;
+                }
+                s++;
+            }
+            parameters->cp_disto_alloc = 1;
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+
+        case 'F': {         /* Raw image format parameters */
+            char signo;
+            char *s = opj_optarg;
+            if (sscanf(s, "%d,%d,%d,%d,%c", &raw_cp->rawWidth, &raw_cp->rawHeight,
+                       &raw_cp->rawComp, &raw_cp->rawBitDepth, &signo) == 5) {
+                if (signo == 's') {
+                    raw_cp->rawSigned = OPJ_TRUE;
+                    fprintf(stdout, "\nRaw file parameters: %d,%d,%d,%d Signed\n", raw_cp->rawWidth,
+                            raw_cp->rawHeight, raw_cp->rawComp, raw_cp->rawBitDepth);
+                } else if (signo == 'u') {
+                    raw_cp->rawSigned = OPJ_FALSE;
+                    fprintf(stdout, "\nRaw file parameters: %d,%d,%d,%d Unsigned\n",
+                            raw_cp->rawWidth, raw_cp->rawHeight, raw_cp->rawComp, raw_cp->rawBitDepth);
+                } else {
+                    fprintf(stderr,
+                            "\nError: invalid raw image parameters: Unknown sign of raw file\n");
+                    fprintf(stderr, "Please use the Format option -F:\n");
+                    fprintf(stderr,
+                            "-F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n");
+                    fprintf(stderr, "Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n");
+                    fprintf(stderr, "Aborting\n");
+                }
+            } else {
+                fprintf(stderr, "\nError: invalid raw image parameters\n");
+                fprintf(stderr, "Please use the Format option -F:\n");
+                fprintf(stderr,
+                        "-F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n");
+                fprintf(stderr, "Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n");
+                fprintf(stderr, "Aborting\n");
+                return 1;
+            }
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'q': {         /* add fixed_quality */
+            char *s = opj_optarg;
+            while (sscanf(s, "%f", &parameters->tcp_distoratio[parameters->tcp_numlayers])
+                    == 1) {
+                parameters->tcp_numlayers++;
+                while (*s && *s != ',') {
+                    s++;
+                }
+                if (!*s) {
+                    break;
+                }
+                s++;
+            }
+            parameters->cp_fixed_quality = 1;
+        }
+        break;
+
+        /* dda */
+        /* ----------------------------------------------------- */
+
+        case 'f': {         /* mod fixed_quality (before : -q) */
+            int *row = NULL, *col = NULL;
+            int numlayers = 0, numresolution = 0, matrix_width = 0;
+
+            char *s = opj_optarg;
+            sscanf(s, "%d", &numlayers);
+            s++;
+            if (numlayers > 9) {
+                s++;
+            }
+
+            parameters->tcp_numlayers = numlayers;
+            numresolution = parameters->numresolution;
+            matrix_width = numresolution * 3;
+            parameters->cp_matrice = (int *) malloc(numlayers * matrix_width * sizeof(int));
+            s = s + 2;
+
+            for (i = 0; i < numlayers; i++) {
+                row = &parameters->cp_matrice[i * matrix_width];
+                col = row;
+                parameters->tcp_rates[i] = 1;
+                sscanf(s, "%d,", &col[0]);
+                s += 2;
+                if (col[0] > 9) {
+                    s++;
+                }
+                col[1] = 0;
+                col[2] = 0;
+                for (j = 1; j < numresolution; j++) {
+                    col += 3;
+                    sscanf(s, "%d,%d,%d", &col[0], &col[1], &col[2]);
+                    s += 6;
+                    if (col[0] > 9) {
+                        s++;
+                    }
+                    if (col[1] > 9) {
+                        s++;
+                    }
+                    if (col[2] > 9) {
+                        s++;
+                    }
+                }
+                if (i < numlayers - 1) {
+                    s++;
+                }
+            }
+            parameters->cp_fixed_alloc = 1;
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 't': {         /* tiles */
+            sscanf(opj_optarg, "%d,%d", &parameters->cp_tdx, &parameters->cp_tdy);
+            parameters->tile_size_on = OPJ_TRUE;
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'n': {         /* resolution */
+            sscanf(opj_optarg, "%d", &parameters->numresolution);
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+        case 'c': {         /* precinct dimension */
+            char sep;
+            int res_spec = 0;
+
+            char *s = opj_optarg;
+            do {
+                sep = 0;
+                sscanf(s, "[%d,%d]%c", &parameters->prcw_init[res_spec],
+                       &parameters->prch_init[res_spec], &sep);
+                parameters->csty |= 0x01;
+                res_spec++;
+                s = strpbrk(s, "]") + 2;
+            } while (sep == ',');
+            parameters->res_spec = res_spec;
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'b': {         /* code-block dimension */
+            int cblockw_init = 0, cblockh_init = 0;
+            sscanf(opj_optarg, "%d,%d", &cblockw_init, &cblockh_init);
+            if (cblockw_init * 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 = opj_optarg;
+            strncpy(indexfilename, index, OPJ_PATH_LEN);
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'p': {         /* progression order */
+            char progression[4];
+
+            strncpy(progression, opj_optarg, 4);
+            parameters->prog_order = give_progression(progression);
+            if (parameters->prog_order == -1) {
+                fprintf(stderr, "Unrecognized progression order "
+                        "[LRCP, RLCP, RPCL, PCRL, CPRL] !!\n");
+                return 1;
+            }
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 's': {         /* subsampling factor */
+            if (sscanf(opj_optarg, "%d,%d", &parameters->subsampling_dx,
+                       &parameters->subsampling_dy) != 2) {
+                fprintf(stderr, "'-s' sub-sampling argument error !  [-s dx,dy]\n");
+                return 1;
+            }
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'd': {         /* coordonnate of the reference grid */
+            if (sscanf(opj_optarg, "%d,%d", &parameters->image_offset_x0,
+                       &parameters->image_offset_y0) != 2) {
+                fprintf(stderr, "-d 'coordonnate of the reference grid' argument "
+                        "error !! [-d x0,y0]\n");
+                return 1;
+            }
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'h':           /* display an help description */
+            encode_help_display();
+            return 1;
+
+        /* ----------------------------------------------------- */
+
+        case 'P': {         /* POC */
+            int numpocs = 0;        /* number of progression order change (POC) default 0 */
+            opj_poc_t *POC = NULL;  /* POC : used in case of Progression order change */
+
+            char *s = opj_optarg;
+            POC = parameters->POC;
+
+            while (sscanf(s, "T%d=%d,%d,%d,%d,%d,%4s", &POC[numpocs].tile,
+                          &POC[numpocs].resno0, &POC[numpocs].compno0,
+                          &POC[numpocs].layno1, &POC[numpocs].resno1,
+                          &POC[numpocs].compno1, POC[numpocs].progorder) == 7) {
+                POC[numpocs].prg1 = give_progression(POC[numpocs].progorder);
+                numpocs++;
+                while (*s && *s != '/') {
+                    s++;
+                }
+                if (!*s) {
+                    break;
+                }
+                s++;
+            }
+            parameters->numpocs = numpocs;
+        }
+        break;
+
+        /* ------------------------------------------------------ */
+
+        case 'S': {         /* SOP marker */
+            parameters->csty |= 0x02;
+        }
+        break;
+
+        /* ------------------------------------------------------ */
+
+        case 'E': {         /* EPH marker */
+            parameters->csty |= 0x04;
+        }
+        break;
+
+        /* ------------------------------------------------------ */
+
+        case 'M': {         /* Mode switch pas tous au point !! */
+            int value = 0;
+            if (sscanf(opj_optarg, "%d", &value) == 1) {
+                for (i = 0; i <= 5; i++) {
+                    int cache = value & (1 << i);
+                    if (cache) {
+                        parameters->mode |= (1 << i);
+                    }
+                }
+            }
+        }
+        break;
+
+        /* ------------------------------------------------------ */
+
+        case 'R': {         /* ROI */
+            if (sscanf(opj_optarg, "c=%d,U=%d", &parameters->roi_compno,
+                       &parameters->roi_shift) != 2) {
+                fprintf(stderr, "ROI error !! [-ROI c='compno',U='shift']\n");
+                return 1;
+            }
+        }
+        break;
+
+        /* ------------------------------------------------------ */
+
+        case 'T': {         /* Tile offset */
+            if (sscanf(opj_optarg, "%d,%d", &parameters->cp_tx0,
+                       &parameters->cp_ty0) != 2) {
+                fprintf(stderr, "-T 'tile offset' argument error !! [-T X0,Y0]");
+                return 1;
+            }
+        }
+        break;
+
+        /* ------------------------------------------------------ */
+
+        case 'C': {         /* add a comment */
+            parameters->cp_comment = (char*)malloc(strlen(opj_optarg) + 1);
+            if (parameters->cp_comment) {
+                strcpy(parameters->cp_comment, opj_optarg);
+            }
+        }
+        break;
+
+
+        /* ------------------------------------------------------ */
+
+        case 'I': {         /* reversible or not */
+            parameters->irreversible = 1;
+        }
+        break;
+
+        /* ------------------------------------------------------ */
+
+        case 'u': {         /* Tile part generation*/
+            parameters->tp_flag = opj_optarg[0];
+            parameters->tp_on = 1;
+        }
+        break;
+
+        /* ------------------------------------------------------ */
+
+        case 'z': {         /* Image Directory path */
+            img_fol->imgdirpath = (char*)malloc(strlen(opj_optarg) + 1);
+            strcpy(img_fol->imgdirpath, opj_optarg);
+            img_fol->set_imgdir = 1;
+        }
+        break;
+
+        /* ------------------------------------------------------ */
+
+        case 'w': {         /* Digital Cinema 2K profile compliance*/
+            int fps = 0;
+            sscanf(opj_optarg, "%d", &fps);
+            if (fps == 24) {
+                parameters->cp_cinema = CINEMA2K_24;
+            } else if (fps == 48) {
+                parameters->cp_cinema = CINEMA2K_48;
+            } else {
+                fprintf(stderr, "Incorrect value!! must be 24 or 48\n");
+                return 1;
+            }
+            fprintf(stdout, "CINEMA 2K compliant codestream\n");
+            parameters->cp_rsiz = CINEMA2K;
+
+        }
+        break;
+
+        /* ------------------------------------------------------ */
+
+        case 'y': {         /* Digital Cinema 4K profile compliance*/
+            parameters->cp_cinema = CINEMA4K_24;
+            fprintf(stdout, "CINEMA 4K compliant codestream\n");
+            parameters->cp_rsiz = CINEMA4K;
+        }
+        break;
+
+            /* ------------------------------------------------------ */
+
+            /* UniPG>> */
 #ifdef USE_JPWL
-                               /* ------------------------------------------------------ */
-
-                       case 'W':                       /* JPWL capabilities switched on */
-                       {
-                               char *token = NULL;
-                               int hprot, pprot, sens, addr, size, range;
-
-                               /* we need to enable indexing */
-                               if (!indexfilename || !*indexfilename) {
-                                       strncpy(indexfilename, JPWL_PRIVATEINDEX_NAME, OPJ_PATH_LEN);
-                               }
-
-                               /* search for different protection methods */
-
-                               /* break the option in comma points and parse the result */
-                               token = strtok(opj_optarg, ",");
-                               while(token != NULL) {
-
-                                       /* search header error protection method */
-                                       if (*token == 'h') {
-
-                                               static int tile = 0, tilespec = 0, lasttileno = 0;
-
-                                               hprot = 1; /* predefined method */
-
-                                               if(sscanf(token, "h=%d", &hprot) == 1) {
-                                                       /* Main header, specified */
-                                                       if (!((hprot == 0) || (hprot == 1) || (hprot == 16) || (hprot == 32) ||
-                                                               ((hprot >= 37) && (hprot <= 128)))) {
-                                                               fprintf(stderr, "ERROR -> invalid main header protection method h = %d\n", hprot);
-                                                               return 1;
-                                                       }
-                                                       parameters->jpwl_hprot_MH = hprot;
-
-                                               } else if(sscanf(token, "h%d=%d", &tile, &hprot) == 2) {
-                                                       /* Tile part header, specified */
-                                                       if (!((hprot == 0) || (hprot == 1) || (hprot == 16) || (hprot == 32) ||
-                                                               ((hprot >= 37) && (hprot <= 128)))) {
-                                                               fprintf(stderr, "ERROR -> invalid tile part header protection method h = %d\n", hprot);
-                                                               return 1;
-                                                       }
-                                                       if (tile < 0) {
-                                                               fprintf(stderr, "ERROR -> invalid tile part number on protection method t = %d\n", tile);
-                                                               return 1;
-                                                       }
-                                                       if (tilespec < JPWL_MAX_NO_TILESPECS) {
-                                                               parameters->jpwl_hprot_TPH_tileno[tilespec] = lasttileno = tile;
-                                                               parameters->jpwl_hprot_TPH[tilespec++] = hprot;
-                                                       }
-
-                                               } else if(sscanf(token, "h%d", &tile) == 1) {
-                                                       /* Tile part header, unspecified */
-                                                       if (tile < 0) {
-                                                               fprintf(stderr, "ERROR -> invalid tile part number on protection method t = %d\n", tile);
-                                                               return 1;
-                                                       }
-                                                       if (tilespec < JPWL_MAX_NO_TILESPECS) {
-                                                               parameters->jpwl_hprot_TPH_tileno[tilespec] = lasttileno = tile;
-                                                               parameters->jpwl_hprot_TPH[tilespec++] = hprot;
-                                                       }
-
-
-                                               } else if (!strcmp(token, "h")) {
-                                                       /* Main header, unspecified */
-                                                       parameters->jpwl_hprot_MH = hprot;
-
-                                               } else {
-                                                       fprintf(stderr, "ERROR -> invalid protection method selection = %s\n", token);
-                                                       return 1;
-                                               };
-
-                                       }
-
-                                       /* search packet error protection method */
-                                       if (*token == 'p') {
-
-                                               static int pack = 0, tile = 0, packspec = 0;
-
-                                               pprot = 1; /* predefined method */
-
-                                               if (sscanf(token, "p=%d", &pprot) == 1) {
-                                                       /* Method for all tiles and all packets */
-                                                       if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) ||
-                                                               ((pprot >= 37) && (pprot <= 128)))) {
-                                                               fprintf(stderr, "ERROR -> invalid default packet protection method p = %d\n", pprot);
-                                                               return 1;
-                                                       }
-                                                       parameters->jpwl_pprot_tileno[0] = 0;
-                                                       parameters->jpwl_pprot_packno[0] = 0;
-                                                       parameters->jpwl_pprot[0] = pprot;
-
-                                               } else if (sscanf(token, "p%d=%d", &tile, &pprot) == 2) {
-                                                       /* method specified from that tile on */
-                                                       if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) ||
-                                                               ((pprot >= 37) && (pprot <= 128)))) {
-                                                               fprintf(stderr, "ERROR -> invalid packet protection method p = %d\n", pprot);
-                                                               return 1;
-                                                       }
-                                                       if (tile < 0) {
-                                                               fprintf(stderr, "ERROR -> invalid tile part number on protection method p = %d\n", tile);
-                                                               return 1;
-                                                       }
-                                                       if (packspec < JPWL_MAX_NO_PACKSPECS) {
-                                                               parameters->jpwl_pprot_tileno[packspec] = tile;
-                                                               parameters->jpwl_pprot_packno[packspec] = 0;
-                                                               parameters->jpwl_pprot[packspec++] = pprot;
-                                                       }
-
-                                               } else if (sscanf(token, "p%d:%d=%d", &tile, &pack, &pprot) == 3) {
-                                                       /* method fully specified from that tile and that packet on */
-                                                       if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) ||
-                                                               ((pprot >= 37) && (pprot <= 128)))) {
-                                                               fprintf(stderr, "ERROR -> invalid packet protection method p = %d\n", pprot);
-                                                               return 1;
-                                                       }
-                                                       if (tile < 0) {
-                                                               fprintf(stderr, "ERROR -> invalid tile part number on protection method p = %d\n", tile);
-                                                               return 1;
-                                                       }
-                                                       if (pack < 0) {
-                                                               fprintf(stderr, "ERROR -> invalid packet number on protection method p = %d\n", pack);
-                                                               return 1;
-                                                       }
-                                                       if (packspec < JPWL_MAX_NO_PACKSPECS) {
-                                                               parameters->jpwl_pprot_tileno[packspec] = tile;
-                                                               parameters->jpwl_pprot_packno[packspec] = pack;
-                                                               parameters->jpwl_pprot[packspec++] = pprot;
-                                                       }
-
-                                               } else if (sscanf(token, "p%d:%d", &tile, &pack) == 2) {
-                                                       /* default method from that tile and that packet on */
-                                                       if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) ||
-                                                               ((pprot >= 37) && (pprot <= 128)))) {
-                                                               fprintf(stderr, "ERROR -> invalid packet protection method p = %d\n", pprot);
-                                                               return 1;
-                                                       }
-                                                       if (tile < 0) {
-                                                               fprintf(stderr, "ERROR -> invalid tile part number on protection method p = %d\n", tile);
-                                                               return 1;
-                                                       }
-                                                       if (pack < 0) {
-                                                               fprintf(stderr, "ERROR -> invalid packet number on protection method p = %d\n", pack);
-                                                               return 1;
-                                                       }
-                                                       if (packspec < JPWL_MAX_NO_PACKSPECS) {
-                                                               parameters->jpwl_pprot_tileno[packspec] = tile;
-                                                               parameters->jpwl_pprot_packno[packspec] = pack;
-                                                               parameters->jpwl_pprot[packspec++] = pprot;
-                                                       }
-
-                                               } else if (sscanf(token, "p%d", &tile) == 1) {
-                                                       /* default from a tile on */
-                                                       if (tile < 0) {
-                                                               fprintf(stderr, "ERROR -> invalid tile part number on protection method p = %d\n", tile);
-                                                               return 1;
-                                                       }
-                                                       if (packspec < JPWL_MAX_NO_PACKSPECS) {
-                                                               parameters->jpwl_pprot_tileno[packspec] = tile;
-                                                               parameters->jpwl_pprot_packno[packspec] = 0;
-                                                               parameters->jpwl_pprot[packspec++] = pprot;
-                                                       }
-
-
-                                               } else if (!strcmp(token, "p")) {
-                                                       /* all default */
-                                                       parameters->jpwl_pprot_tileno[0] = 0;
-                                                       parameters->jpwl_pprot_packno[0] = 0;
-                                                       parameters->jpwl_pprot[0] = pprot;
-
-                                               } else {
-                                                       fprintf(stderr, "ERROR -> invalid protection method selection = %s\n", token);
-                                                       return 1;
-                                               };
-
-                                       }
-
-                                       /* search sensitivity method */
-                                       if (*token == 's') {
-
-                                               static int tile = 0, tilespec = 0, lasttileno = 0;
-
-                                               sens = 0; /* predefined: relative error */
-
-                                               if(sscanf(token, "s=%d", &sens) == 1) {
-                                                       /* Main header, specified */
-                                                       if ((sens < -1) || (sens > 7)) {
-                                                               fprintf(stderr, "ERROR -> invalid main header sensitivity method s = %d\n", sens);
-                                                               return 1;
-                                                       }
-                                                       parameters->jpwl_sens_MH = sens;
-
-                                               } else if(sscanf(token, "s%d=%d", &tile, &sens) == 2) {
-                                                       /* Tile part header, specified */
-                                                       if ((sens < -1) || (sens > 7)) {
-                                                               fprintf(stderr, "ERROR -> invalid tile part header sensitivity method s = %d\n", sens);
-                                                               return 1;
-                                                       }
-                                                       if (tile < 0) {
-                                                               fprintf(stderr, "ERROR -> invalid tile part number on sensitivity method t = %d\n", tile);
-                                                               return 1;
-                                                       }
-                                                       if (tilespec < JPWL_MAX_NO_TILESPECS) {
-                                                               parameters->jpwl_sens_TPH_tileno[tilespec] = lasttileno = tile;
-                                                               parameters->jpwl_sens_TPH[tilespec++] = sens;
-                                                       }
-
-                                               } else if(sscanf(token, "s%d", &tile) == 1) {
-                                                       /* Tile part header, unspecified */
-                                                       if (tile < 0) {
-                                                               fprintf(stderr, "ERROR -> invalid tile part number on sensitivity method t = %d\n", tile);
-                                                               return 1;
-                                                       }
-                                                       if (tilespec < JPWL_MAX_NO_TILESPECS) {
-                                                               parameters->jpwl_sens_TPH_tileno[tilespec] = lasttileno = tile;
-                                                               parameters->jpwl_sens_TPH[tilespec++] = hprot;
-                                                       }
-
-                                               } else if (!strcmp(token, "s")) {
-                                                       /* Main header, unspecified */
-                                                       parameters->jpwl_sens_MH = sens;
-
-                                               } else {
-                                                       fprintf(stderr, "ERROR -> invalid sensitivity method selection = %s\n", token);
-                                                       return 1;
-                                               };
-
-                                               parameters->jpwl_sens_size = 2; /* 2 bytes for default size */
-                                       }
-
-                                       /* search addressing size */
-                                       if (*token == 'a') {
-
-
-                                               addr = 0; /* predefined: auto */
-
-                                               if(sscanf(token, "a=%d", &addr) == 1) {
-                                                       /* Specified */
-                                                       if ((addr != 0) && (addr != 2) && (addr != 4)) {
-                                                               fprintf(stderr, "ERROR -> invalid addressing size a = %d\n", addr);
-                                                               return 1;
-                                                       }
-                                                       parameters->jpwl_sens_addr = addr;
-
-                                               } else if (!strcmp(token, "a")) {
-                                                       /* default */
-                                                       parameters->jpwl_sens_addr = addr; /* auto for default size */
-
-                                               } else {
-                                                       fprintf(stderr, "ERROR -> invalid addressing selection = %s\n", token);
-                                                       return 1;
-                                               };
-
-                                       }
-
-                                       /* search sensitivity size */
-                                       if (*token == 'z') {
-
-
-                                               size = 1; /* predefined: 1 byte */
-
-                                               if(sscanf(token, "z=%d", &size) == 1) {
-                                                       /* Specified */
-                                                       if ((size != 0) && (size != 1) && (size != 2)) {
-                                                               fprintf(stderr, "ERROR -> invalid sensitivity size z = %d\n", size);
-                                                               return 1;
-                                                       }
-                                                       parameters->jpwl_sens_size = size;
-
-                                               } else if (!strcmp(token, "a")) {
-                                                       /* default */
-                                                       parameters->jpwl_sens_size = size; /* 1 for default size */
-
-                                               } else {
-                                                       fprintf(stderr, "ERROR -> invalid size selection = %s\n", token);
-                                                       return 1;
-                                               };
-
-                                       }
-
-                                       /* search range method */
-                                       if (*token == 'g') {
-
-
-                                               range = 0; /* predefined: 0 (packet) */
-
-                                               if(sscanf(token, "g=%d", &range) == 1) {
-                                                       /* Specified */
-                                                       if ((range < 0) || (range > 3)) {
-                                                               fprintf(stderr, "ERROR -> invalid sensitivity range method g = %d\n", range);
-                                                               return 1;
-                                                       }
-                                                       parameters->jpwl_sens_range = range;
-
-                                               } else if (!strcmp(token, "g")) {
-                                                       /* default */
-                                                       parameters->jpwl_sens_range = range;
+        /* ------------------------------------------------------ */
+
+        case 'W': {         /* JPWL capabilities switched on */
+            char *token = NULL;
+            int hprot, pprot, sens, addr, size, range;
+
+            /* we need to enable indexing */
+            if (!indexfilename || !*indexfilename) {
+                strncpy(indexfilename, JPWL_PRIVATEINDEX_NAME, OPJ_PATH_LEN);
+            }
+
+            /* search for different protection methods */
+
+            /* break the option in comma points and parse the result */
+            token = strtok(opj_optarg, ",");
+            while (token != NULL) {
+
+                /* search header error protection method */
+                if (*token == 'h') {
+
+                    static int tile = 0, tilespec = 0, lasttileno = 0;
+
+                    hprot = 1; /* predefined method */
+
+                    if (sscanf(token, "h=%d", &hprot) == 1) {
+                        /* Main header, specified */
+                        if (!((hprot == 0) || (hprot == 1) || (hprot == 16) || (hprot == 32) ||
+                                ((hprot >= 37) && (hprot <= 128)))) {
+                            fprintf(stderr, "ERROR -> invalid main header protection method h = %d\n",
+                                    hprot);
+                            return 1;
+                        }
+                        parameters->jpwl_hprot_MH = hprot;
+
+                    } else if (sscanf(token, "h%d=%d", &tile, &hprot) == 2) {
+                        /* Tile part header, specified */
+                        if (!((hprot == 0) || (hprot == 1) || (hprot == 16) || (hprot == 32) ||
+                                ((hprot >= 37) && (hprot <= 128)))) {
+                            fprintf(stderr, "ERROR -> invalid tile part header protection method h = %d\n",
+                                    hprot);
+                            return 1;
+                        }
+                        if (tile < 0) {
+                            fprintf(stderr,
+                                    "ERROR -> invalid tile part number on protection method t = %d\n", tile);
+                            return 1;
+                        }
+                        if (tilespec < JPWL_MAX_NO_TILESPECS) {
+                            parameters->jpwl_hprot_TPH_tileno[tilespec] = lasttileno = tile;
+                            parameters->jpwl_hprot_TPH[tilespec++] = hprot;
+                        }
+
+                    } else if (sscanf(token, "h%d", &tile) == 1) {
+                        /* Tile part header, unspecified */
+                        if (tile < 0) {
+                            fprintf(stderr,
+                                    "ERROR -> invalid tile part number on protection method t = %d\n", tile);
+                            return 1;
+                        }
+                        if (tilespec < JPWL_MAX_NO_TILESPECS) {
+                            parameters->jpwl_hprot_TPH_tileno[tilespec] = lasttileno = tile;
+                            parameters->jpwl_hprot_TPH[tilespec++] = hprot;
+                        }
+
+
+                    } else if (!strcmp(token, "h")) {
+                        /* Main header, unspecified */
+                        parameters->jpwl_hprot_MH = hprot;
+
+                    } else {
+                        fprintf(stderr, "ERROR -> invalid protection method selection = %s\n", token);
+                        return 1;
+                    };
+
+                }
+
+                /* search packet error protection method */
+                if (*token == 'p') {
+
+                    static int pack = 0, tile = 0, packspec = 0;
+
+                    pprot = 1; /* predefined method */
+
+                    if (sscanf(token, "p=%d", &pprot) == 1) {
+                        /* Method for all tiles and all packets */
+                        if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) ||
+                                ((pprot >= 37) && (pprot <= 128)))) {
+                            fprintf(stderr, "ERROR -> invalid default packet protection method p = %d\n",
+                                    pprot);
+                            return 1;
+                        }
+                        parameters->jpwl_pprot_tileno[0] = 0;
+                        parameters->jpwl_pprot_packno[0] = 0;
+                        parameters->jpwl_pprot[0] = pprot;
+
+                    } else if (sscanf(token, "p%d=%d", &tile, &pprot) == 2) {
+                        /* method specified from that tile on */
+                        if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) ||
+                                ((pprot >= 37) && (pprot <= 128)))) {
+                            fprintf(stderr, "ERROR -> invalid packet protection method p = %d\n", pprot);
+                            return 1;
+                        }
+                        if (tile < 0) {
+                            fprintf(stderr,
+                                    "ERROR -> invalid tile part number on protection method p = %d\n", tile);
+                            return 1;
+                        }
+                        if (packspec < JPWL_MAX_NO_PACKSPECS) {
+                            parameters->jpwl_pprot_tileno[packspec] = tile;
+                            parameters->jpwl_pprot_packno[packspec] = 0;
+                            parameters->jpwl_pprot[packspec++] = pprot;
+                        }
+
+                    } else if (sscanf(token, "p%d:%d=%d", &tile, &pack, &pprot) == 3) {
+                        /* method fully specified from that tile and that packet on */
+                        if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) ||
+                                ((pprot >= 37) && (pprot <= 128)))) {
+                            fprintf(stderr, "ERROR -> invalid packet protection method p = %d\n", pprot);
+                            return 1;
+                        }
+                        if (tile < 0) {
+                            fprintf(stderr,
+                                    "ERROR -> invalid tile part number on protection method p = %d\n", tile);
+                            return 1;
+                        }
+                        if (pack < 0) {
+                            fprintf(stderr, "ERROR -> invalid packet number on protection method p = %d\n",
+                                    pack);
+                            return 1;
+                        }
+                        if (packspec < JPWL_MAX_NO_PACKSPECS) {
+                            parameters->jpwl_pprot_tileno[packspec] = tile;
+                            parameters->jpwl_pprot_packno[packspec] = pack;
+                            parameters->jpwl_pprot[packspec++] = pprot;
+                        }
+
+                    } else if (sscanf(token, "p%d:%d", &tile, &pack) == 2) {
+                        /* default method from that tile and that packet on */
+                        if (!((pprot == 0) || (pprot == 1) || (pprot == 16) || (pprot == 32) ||
+                                ((pprot >= 37) && (pprot <= 128)))) {
+                            fprintf(stderr, "ERROR -> invalid packet protection method p = %d\n", pprot);
+                            return 1;
+                        }
+                        if (tile < 0) {
+                            fprintf(stderr,
+                                    "ERROR -> invalid tile part number on protection method p = %d\n", tile);
+                            return 1;
+                        }
+                        if (pack < 0) {
+                            fprintf(stderr, "ERROR -> invalid packet number on protection method p = %d\n",
+                                    pack);
+                            return 1;
+                        }
+                        if (packspec < JPWL_MAX_NO_PACKSPECS) {
+                            parameters->jpwl_pprot_tileno[packspec] = tile;
+                            parameters->jpwl_pprot_packno[packspec] = pack;
+                            parameters->jpwl_pprot[packspec++] = pprot;
+                        }
+
+                    } else if (sscanf(token, "p%d", &tile) == 1) {
+                        /* default from a tile on */
+                        if (tile < 0) {
+                            fprintf(stderr,
+                                    "ERROR -> invalid tile part number on protection method p = %d\n", tile);
+                            return 1;
+                        }
+                        if (packspec < JPWL_MAX_NO_PACKSPECS) {
+                            parameters->jpwl_pprot_tileno[packspec] = tile;
+                            parameters->jpwl_pprot_packno[packspec] = 0;
+                            parameters->jpwl_pprot[packspec++] = pprot;
+                        }
+
+
+                    } else if (!strcmp(token, "p")) {
+                        /* all default */
+                        parameters->jpwl_pprot_tileno[0] = 0;
+                        parameters->jpwl_pprot_packno[0] = 0;
+                        parameters->jpwl_pprot[0] = pprot;
+
+                    } else {
+                        fprintf(stderr, "ERROR -> invalid protection method selection = %s\n", token);
+                        return 1;
+                    };
+
+                }
+
+                /* search sensitivity method */
+                if (*token == 's') {
+
+                    static int tile = 0, tilespec = 0, lasttileno = 0;
+
+                    sens = 0; /* predefined: relative error */
+
+                    if (sscanf(token, "s=%d", &sens) == 1) {
+                        /* Main header, specified */
+                        if ((sens < -1) || (sens > 7)) {
+                            fprintf(stderr, "ERROR -> invalid main header sensitivity method s = %d\n",
+                                    sens);
+                            return 1;
+                        }
+                        parameters->jpwl_sens_MH = sens;
+
+                    } else if (sscanf(token, "s%d=%d", &tile, &sens) == 2) {
+                        /* Tile part header, specified */
+                        if ((sens < -1) || (sens > 7)) {
+                            fprintf(stderr, "ERROR -> invalid tile part header sensitivity method s = %d\n",
+                                    sens);
+                            return 1;
+                        }
+                        if (tile < 0) {
+                            fprintf(stderr,
+                                    "ERROR -> invalid tile part number on sensitivity method t = %d\n", tile);
+                            return 1;
+                        }
+                        if (tilespec < JPWL_MAX_NO_TILESPECS) {
+                            parameters->jpwl_sens_TPH_tileno[tilespec] = lasttileno = tile;
+                            parameters->jpwl_sens_TPH[tilespec++] = sens;
+                        }
+
+                    } else if (sscanf(token, "s%d", &tile) == 1) {
+                        /* Tile part header, unspecified */
+                        if (tile < 0) {
+                            fprintf(stderr,
+                                    "ERROR -> invalid tile part number on sensitivity method t = %d\n", tile);
+                            return 1;
+                        }
+                        if (tilespec < JPWL_MAX_NO_TILESPECS) {
+                            parameters->jpwl_sens_TPH_tileno[tilespec] = lasttileno = tile;
+                            parameters->jpwl_sens_TPH[tilespec++] = hprot;
+                        }
+
+                    } else if (!strcmp(token, "s")) {
+                        /* Main header, unspecified */
+                        parameters->jpwl_sens_MH = sens;
+
+                    } else {
+                        fprintf(stderr, "ERROR -> invalid sensitivity method selection = %s\n", token);
+                        return 1;
+                    };
+
+                    parameters->jpwl_sens_size = 2; /* 2 bytes for default size */
+                }
+
+                /* search addressing size */
+                if (*token == 'a') {
+
+
+                    addr = 0; /* predefined: auto */
+
+                    if (sscanf(token, "a=%d", &addr) == 1) {
+                        /* Specified */
+                        if ((addr != 0) && (addr != 2) && (addr != 4)) {
+                            fprintf(stderr, "ERROR -> invalid addressing size a = %d\n", addr);
+                            return 1;
+                        }
+                        parameters->jpwl_sens_addr = addr;
+
+                    } else if (!strcmp(token, "a")) {
+                        /* default */
+                        parameters->jpwl_sens_addr = addr; /* auto for default size */
+
+                    } else {
+                        fprintf(stderr, "ERROR -> invalid addressing selection = %s\n", token);
+                        return 1;
+                    };
+
+                }
+
+                /* search sensitivity size */
+                if (*token == 'z') {
+
+
+                    size = 1; /* predefined: 1 byte */
+
+                    if (sscanf(token, "z=%d", &size) == 1) {
+                        /* Specified */
+                        if ((size != 0) && (size != 1) && (size != 2)) {
+                            fprintf(stderr, "ERROR -> invalid sensitivity size z = %d\n", size);
+                            return 1;
+                        }
+                        parameters->jpwl_sens_size = size;
+
+                    } else if (!strcmp(token, "a")) {
+                        /* default */
+                        parameters->jpwl_sens_size = size; /* 1 for default size */
+
+                    } else {
+                        fprintf(stderr, "ERROR -> invalid size selection = %s\n", token);
+                        return 1;
+                    };
+
+                }
+
+                /* search range method */
+                if (*token == 'g') {
+
+
+                    range = 0; /* predefined: 0 (packet) */
+
+                    if (sscanf(token, "g=%d", &range) == 1) {
+                        /* Specified */
+                        if ((range < 0) || (range > 3)) {
+                            fprintf(stderr, "ERROR -> invalid sensitivity range method g = %d\n", range);
+                            return 1;
+                        }
+                        parameters->jpwl_sens_range = range;
+
+                    } else if (!strcmp(token, "g")) {
+                        /* default */
+                        parameters->jpwl_sens_range = range;
 
-                                               } else {
-                                                       fprintf(stderr, "ERROR -> invalid range selection = %s\n", token);
-                                                       return 1;
-                                               };
+                    } else {
+                        fprintf(stderr, "ERROR -> invalid range selection = %s\n", token);
+                        return 1;
+                    };
 
-                                       }
+                }
 
-                                       /* next token or bust */
-                                       token = strtok(NULL, ",");
-                               };
+                /* next token or bust */
+                token = strtok(NULL, ",");
+            };
 
 
-                               /* some info */
-                               fprintf(stdout, "Info: JPWL capabilities enabled\n");
-                               parameters->jpwl_epc_on = OPJ_TRUE;
+            /* some info */
+            fprintf(stdout, "Info: JPWL capabilities enabled\n");
+            parameters->jpwl_epc_on = OPJ_TRUE;
 
-                       }
-                       break;
+        }
+        break;
 #endif /* USE_JPWL */
-/* <<UniPG */
-/* ------------------------------------------------------ */
-                       
-                       case 'J':                       /* jpip on */
-                       {
-                         /*parameters->jpip_on = OPJ_TRUE;*/
-                       }
-                       break;
-                               /* ------------------------------------------------------ */
-
-
-                       default:
-                               fprintf(stderr, "ERROR -> Command line not valid\n");
-                               return 1;
-               }
-       }while(c != -1);
-
-       /* check for possible errors */
-       if (parameters->cp_cinema){
-               if(parameters->tcp_numlayers > 1){
-                       parameters->cp_rsiz = STD_RSIZ;
-       fprintf(stdout,"Warning: DC profiles do not allow more than one quality layer. The codestream created will not be compliant with the DC profile\n");
-               }
-       }
-       if(img_fol->set_imgdir == 1){
-               if(!(parameters->infile[0] == 0)){
-                       fprintf(stderr, "Error: options -ImgDir and -i cannot be used together !!\n");
-                       return 1;
-               }
-               if(img_fol->set_out_format == 0){
-                       fprintf(stderr, "Error: When -ImgDir is used, -OutFor <FORMAT> must be used !!\n");
-                       fprintf(stderr, "Only one format allowed! Valid formats are j2k and jp2!!\n");
-                       return 1;
-               }
-               if(!((parameters->outfile[0] == 0))){
-                       fprintf(stderr, "Error: options -ImgDir and -o cannot be used together !!\n");
-                       fprintf(stderr, "Specify OutputFormat using -OutFor<FORMAT> !!\n");
-                       return 1;
-               }
-       }else{
-               if((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
-                       fprintf(stderr, "Example: %s -i image.ppm  -o image.j2k\n",argv[0]);
-                       fprintf(stderr, "    Try: %s -h\n",argv[0]);
-                       return 1;
-               }
-       }
-
-       if (parameters->decod_format == RAW_DFMT && raw_cp->rawWidth == 0) {
-                       fprintf(stderr,"\nError: invalid raw image parameters\n");
-                       fprintf(stderr,"Please use the Format option -F:\n");
-                       fprintf(stderr,"-F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n");
-                                               fprintf(stderr,"Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n");
-                       fprintf(stderr,"Aborting\n");
-                       return 1;
-       }
-
-       if ((parameters->cp_disto_alloc || parameters->cp_fixed_alloc || parameters->cp_fixed_quality)
-               && (!(parameters->cp_disto_alloc ^ parameters->cp_fixed_alloc ^ parameters->cp_fixed_quality))) {
-               fprintf(stderr, "Error: options -r -q and -f cannot be used together !!\n");
-               return 1;
-       }                               /* mod fixed_quality */
-
-       /* if no rate entered, lossless by default */
-       if (parameters->tcp_numlayers == 0) {
-               parameters->tcp_rates[0] = 0;   /* MOD antonin : losslessbug */
-               parameters->tcp_numlayers++;
-               parameters->cp_disto_alloc = 1;
-       }
-
-       if((parameters->cp_tx0 > parameters->image_offset_x0) || (parameters->cp_ty0 > parameters->image_offset_y0)) {
-               fprintf(stderr,
-                       "Error: Tile offset dimension is unnappropriate --> TX0(%d)<=IMG_X0(%d) TYO(%d)<=IMG_Y0(%d) \n",
-                       parameters->cp_tx0, parameters->image_offset_x0, parameters->cp_ty0, parameters->image_offset_y0);
-               return 1;
-       }
-
-       for (i = 0; i < parameters->numpocs; i++) {
-               if (parameters->POC[i].prg == -1) {
-                       fprintf(stderr,
-                               "Unrecognized progression order in option -P (POC n %d) [LRCP, RLCP, RPCL, PCRL, CPRL] !!\n",
-                               i + 1);
-               }
-       }
-
-       return 0;
+        /* <<UniPG */
+        /* ------------------------------------------------------ */
+
+        case 'J': {         /* jpip on */
+            /*parameters->jpip_on = OPJ_TRUE;*/
+        }
+        break;
+        /* ------------------------------------------------------ */
+
+
+        default:
+            fprintf(stderr, "ERROR -> Command line not valid\n");
+            return 1;
+        }
+    } while (c != -1);
+
+    /* check for possible errors */
+    if (parameters->cp_cinema) {
+        if (parameters->tcp_numlayers > 1) {
+            parameters->cp_rsiz = STD_RSIZ;
+            fprintf(stdout,
+                    "Warning: DC profiles do not allow more than one quality layer. The codestream created will not be compliant with the DC profile\n");
+        }
+    }
+    if (img_fol->set_imgdir == 1) {
+        if (!(parameters->infile[0] == 0)) {
+            fprintf(stderr, "Error: options -ImgDir and -i cannot be used together !!\n");
+            return 1;
+        }
+        if (img_fol->set_out_format == 0) {
+            fprintf(stderr,
+                    "Error: When -ImgDir is used, -OutFor <FORMAT> must be used !!\n");
+            fprintf(stderr, "Only one format allowed! Valid formats are j2k and jp2!!\n");
+            return 1;
+        }
+        if (!((parameters->outfile[0] == 0))) {
+            fprintf(stderr, "Error: options -ImgDir and -o cannot be used together !!\n");
+            fprintf(stderr, "Specify OutputFormat using -OutFor<FORMAT> !!\n");
+            return 1;
+        }
+    } else {
+        if ((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
+            fprintf(stderr, "Example: %s -i image.ppm  -o image.j2k\n", argv[0]);
+            fprintf(stderr, "    Try: %s -h\n", argv[0]);
+            return 1;
+        }
+    }
+
+    if (parameters->decod_format == RAW_DFMT && raw_cp->rawWidth == 0) {
+        fprintf(stderr, "\nError: invalid raw image parameters\n");
+        fprintf(stderr, "Please use the Format option -F:\n");
+        fprintf(stderr,
+                "-F rawWidth,rawHeight,rawComp,rawBitDepth,s/u (Signed/Unsigned)\n");
+        fprintf(stderr, "Example: -i lena.raw -o lena.j2k -F 512,512,3,8,u\n");
+        fprintf(stderr, "Aborting\n");
+        return 1;
+    }
+
+    if ((parameters->cp_disto_alloc || parameters->cp_fixed_alloc ||
+            parameters->cp_fixed_quality)
+            && (!(parameters->cp_disto_alloc ^ parameters->cp_fixed_alloc ^
+                  parameters->cp_fixed_quality))) {
+        fprintf(stderr, "Error: options -r -q and -f cannot be used together !!\n");
+        return 1;
+    }               /* mod fixed_quality */
+
+    /* if no rate entered, lossless by default */
+    if (parameters->tcp_numlayers == 0) {
+        parameters->tcp_rates[0] = 0;   /* MOD antonin : losslessbug */
+        parameters->tcp_numlayers++;
+        parameters->cp_disto_alloc = 1;
+    }
+
+    if ((parameters->cp_tx0 > parameters->image_offset_x0) ||
+            (parameters->cp_ty0 > parameters->image_offset_y0)) {
+        fprintf(stderr,
+                "Error: Tile offset dimension is unnappropriate --> TX0(%d)<=IMG_X0(%d) TYO(%d)<=IMG_Y0(%d) \n",
+                parameters->cp_tx0, parameters->image_offset_x0, parameters->cp_ty0,
+                parameters->image_offset_y0);
+        return 1;
+    }
+
+    for (i = 0; i < parameters->numpocs; i++) {
+        if (parameters->POC[i].prg == -1) {
+            fprintf(stderr,
+                    "Unrecognized progression order in option -P (POC n %d) [LRCP, RLCP, RPCL, PCRL, CPRL] !!\n",
+                    i + 1);
+        }
+    }
+
+    return 0;
 }
 
 /* -------------------------------------------------------------------------- */
@@ -1472,348 +1589,363 @@ static int parse_cmdline_encoder(int argc, char **argv, opj_cparameters_t *param
 /**
 sample error callback expecting a FILE* client object
 */
-static void error_callback(const char *msg, void *client_data) {
-       FILE *stream = (FILE*)client_data;
-       fprintf(stream, "[ERROR] %s", msg);
+static void error_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[ERROR] %s", msg);
 }
 /**
 sample warning callback expecting a FILE* client object
 */
-static void warning_callback(const char *msg, void *client_data) {
-       FILE *stream = (FILE*)client_data;
-       fprintf(stream, "[WARNING] %s", msg);
+static void warning_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[WARNING] %s", msg);
 }
 /**
 sample debug callback expecting a FILE* client object
 */
-static void info_callback(const char *msg, void *client_data) {
-       FILE *stream = (FILE*)client_data;
-       fprintf(stream, "[INFO] %s", msg);
+static void info_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[INFO] %s", msg);
 }
 
 /* -------------------------------------------------------------------------- */
 
-int main(int argc, char **argv) {
-       opj_bool bSuccess;
-       opj_cparameters_t parameters;   /* compression parameters */
-       img_fol_t img_fol;
-       opj_event_mgr_t event_mgr;              /* event manager */
-       opj_image_t *image = NULL;
-       int i,num_images;
-       int imageno;
-       dircnt_t *dirptr = NULL;
-       raw_cparameters_t raw_cp;
-       opj_codestream_info_t cstr_info;                /* Codestream information structure */
-       char indexfilename[OPJ_PATH_LEN];       /* index file name */
-
-       /*
-       configure the event callbacks (not required)
-       setting of each callback is 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);
-
-       /* Initialize indexfilename and img_fol */
-       *indexfilename = 0;
-       memset(&img_fol,0,sizeof(img_fol_t));
-
-       /* parse input and get user encoding parameters */
-       if(parse_cmdline_encoder(argc, argv, &parameters,&img_fol, &raw_cp, indexfilename) == 1) {
-               return 1;
-       }
-
-       if (parameters.cp_cinema){
-               img_fol.rates = (float*)malloc(parameters.tcp_numlayers * sizeof(float));
-               for(i=0; i< parameters.tcp_numlayers; i++){
-                       img_fol.rates[i] = parameters.tcp_rates[i];
-               }
-               cinema_parameters(&parameters);
-       }
-
-       /* Create comment for codestream */
-       if(parameters.cp_comment == NULL) {
-    const char comment[] = "Created by OpenJPEG version ";
-               const size_t clen = strlen(comment);
-    const char *version = opj_version();
-/* UniPG>> */
+int main(int argc, char **argv)
+{
+    opj_bool bSuccess;
+    opj_cparameters_t parameters;   /* compression parameters */
+    img_fol_t img_fol;
+    opj_event_mgr_t event_mgr;      /* event manager */
+    opj_image_t *image = NULL;
+    int i, num_images;
+    int imageno;
+    dircnt_t *dirptr = NULL;
+    raw_cparameters_t raw_cp;
+    opj_codestream_info_t cstr_info;        /* Codestream information structure */
+    char indexfilename[OPJ_PATH_LEN];   /* index file name */
+
+    /*
+    configure the event callbacks (not required)
+    setting of each callback is 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);
+
+    /* Initialize indexfilename and img_fol */
+    *indexfilename = 0;
+    memset(&img_fol, 0, sizeof(img_fol_t));
+
+    /* parse input and get user encoding parameters */
+    if (parse_cmdline_encoder(argc, argv, &parameters, &img_fol, &raw_cp,
+                              indexfilename) == 1) {
+        return 1;
+    }
+
+    if (parameters.cp_cinema) {
+        img_fol.rates = (float*)malloc(parameters.tcp_numlayers * sizeof(float));
+        for (i = 0; i < parameters.tcp_numlayers; i++) {
+            img_fol.rates[i] = parameters.tcp_rates[i];
+        }
+        cinema_parameters(&parameters);
+    }
+
+    /* Create comment for codestream */
+    if (parameters.cp_comment == NULL) {
+        const char comment[] = "Created by OpenJPEG version ";
+        const size_t clen = strlen(comment);
+        const char *version = opj_version();
+        /* UniPG>> */
 #ifdef USE_JPWL
-               parameters.cp_comment = (char*)malloc(clen+strlen(version)+11);
-               sprintf(parameters.cp_comment,"%s%s with JPWL", comment, version);
+        parameters.cp_comment = (char*)malloc(clen + strlen(version) + 11);
+        sprintf(parameters.cp_comment, "%s%s with JPWL", comment, version);
 #else
-               parameters.cp_comment = (char*)malloc(clen+strlen(version)+1);
-               sprintf(parameters.cp_comment,"%s%s", comment, version);
+        parameters.cp_comment = (char*)malloc(clen + strlen(version) + 1);
+        sprintf(parameters.cp_comment, "%s%s", comment, version);
 #endif
-/* <<UniPG */
-       }
-
-       /* Read directory if necessary */
-       if(img_fol.set_imgdir==1){
-               num_images=get_num_images(img_fol.imgdirpath);
-               dirptr=(dircnt_t*)malloc(sizeof(dircnt_t));
-               if(dirptr){
-                       dirptr->filename_buf = (char*)malloc(num_images*OPJ_PATH_LEN*sizeof(char));     /* Stores at max 10 image file names*/
-                       dirptr->filename = (char**) malloc(num_images*sizeof(char*));
-                       if(!dirptr->filename_buf){
-                               return 0;
-                       }
-                       for(i=0;i<num_images;i++){
-                               dirptr->filename[i] = dirptr->filename_buf + i*OPJ_PATH_LEN;
-                       }
-               }
-               if(load_images(dirptr,img_fol.imgdirpath)==1){
-                       return 0;
-               }
-               if (num_images==0){
-                       fprintf(stdout,"Folder is empty\n");
-                       return 0;
-               }
-       }else{
-               num_images=1;
-       }
-       /*Encoding image one by one*/
-       for(imageno=0;imageno<num_images;imageno++)     {
-               image = NULL;
-               fprintf(stderr,"\n");
-
-               if(img_fol.set_imgdir==1){
-                       if (get_next_file(imageno, dirptr,&img_fol, &parameters)) {
-                               fprintf(stderr,"skipping file...\n");
-                               continue;
-                       }
-               }
-               switch(parameters.decod_format) {
-                       case PGX_DFMT:
-                               break;
-                       case PXM_DFMT:
-                               break;
-                       case BMP_DFMT:
-                               break;
-                       case TIF_DFMT:
-                               break;
-                       case RAW_DFMT:
-                               break;
-                       case TGA_DFMT:
-                               break;
-                       case PNG_DFMT:
-                               break;
-                       default:
-                               fprintf(stderr,"skipping file...\n");
-                               continue;
-               }
-
-                       /* decode the source image */
-                       /* ----------------------- */
-
-                       switch (parameters.decod_format) {
-                               case PGX_DFMT:
-                                       image = pgxtoimage(parameters.infile, &parameters);
-                                       if (!image) {
-                                               fprintf(stderr, "Unable to load pgx file\n");
-                                               return 1;
-                                       }
-                                       break;
-
-                               case PXM_DFMT:
-                                       image = pnmtoimage(parameters.infile, &parameters);
-                                       if (!image) {
-                                               fprintf(stderr, "Unable to load pnm file\n");
-                                               return 1;
-                                       }
-                                       break;
-
-                               case BMP_DFMT:
-                                       image = bmptoimage(parameters.infile, &parameters);
-                                       if (!image) {
-                                               fprintf(stderr, "Unable to load bmp file\n");
-                                               return 1;
-                                       }
-                                       break;
+        /* <<UniPG */
+    }
+
+    /* Read directory if necessary */
+    if (img_fol.set_imgdir == 1) {
+        num_images = get_num_images(img_fol.imgdirpath);
+        dirptr = (dircnt_t*)malloc(sizeof(dircnt_t));
+        if (dirptr) {
+            dirptr->filename_buf = (char*)malloc(num_images * OPJ_PATH_LEN * sizeof(
+                    char)); /* Stores at max 10 image file names*/
+            dirptr->filename = (char**) malloc(num_images * sizeof(char*));
+            if (!dirptr->filename_buf) {
+                return 0;
+            }
+            for (i = 0; i < num_images; i++) {
+                dirptr->filename[i] = dirptr->filename_buf + i * OPJ_PATH_LEN;
+            }
+        }
+        if (load_images(dirptr, img_fol.imgdirpath) == 1) {
+            return 0;
+        }
+        if (num_images == 0) {
+            fprintf(stdout, "Folder is empty\n");
+            return 0;
+        }
+    } else {
+        num_images = 1;
+    }
+    /*Encoding image one by one*/
+    for (imageno = 0; imageno < num_images; imageno++) {
+        image = NULL;
+        fprintf(stderr, "\n");
+
+        if (img_fol.set_imgdir == 1) {
+            if (get_next_file(imageno, dirptr, &img_fol, &parameters)) {
+                fprintf(stderr, "skipping file...\n");
+                continue;
+            }
+        }
+        switch (parameters.decod_format) {
+        case PGX_DFMT:
+            break;
+        case PXM_DFMT:
+            break;
+        case BMP_DFMT:
+            break;
+        case TIF_DFMT:
+            break;
+        case RAW_DFMT:
+            break;
+        case TGA_DFMT:
+            break;
+        case PNG_DFMT:
+            break;
+        default:
+            fprintf(stderr, "skipping file...\n");
+            continue;
+        }
+
+        /* decode the source image */
+        /* ----------------------- */
+
+        switch (parameters.decod_format) {
+        case PGX_DFMT:
+            image = pgxtoimage(parameters.infile, &parameters);
+            if (!image) {
+                fprintf(stderr, "Unable to load pgx file\n");
+                return 1;
+            }
+            break;
+
+        case PXM_DFMT:
+            image = pnmtoimage(parameters.infile, &parameters);
+            if (!image) {
+                fprintf(stderr, "Unable to load pnm file\n");
+                return 1;
+            }
+            break;
+
+        case BMP_DFMT:
+            image = bmptoimage(parameters.infile, &parameters);
+            if (!image) {
+                fprintf(stderr, "Unable to load bmp file\n");
+                return 1;
+            }
+            break;
 #ifdef OPJ_HAVE_LIBTIFF
-                               case TIF_DFMT:
-                                       image = tiftoimage(parameters.infile, &parameters);
-                                       if (!image) {
-                                               fprintf(stderr, "Unable to load tiff file\n");
-                                               return 1;
-                                       }
-                               break;
+        case TIF_DFMT:
+            image = tiftoimage(parameters.infile, &parameters);
+            if (!image) {
+                fprintf(stderr, "Unable to load tiff file\n");
+                return 1;
+            }
+            break;
 #endif /* OPJ_HAVE_LIBTIFF */
-                               case RAW_DFMT:
-                                       image = rawtoimage(parameters.infile, &parameters, &raw_cp);
-                                       if (!image) {
-                                               fprintf(stderr, "Unable to load raw file\n");
-                                               return 1;
-                                       }
-                               break;
-
-                               case TGA_DFMT:
-                                       image = tgatoimage(parameters.infile, &parameters);
-                                       if (!image) {
-                                               fprintf(stderr, "Unable to load tga file\n");
-                                               return 1;
-                                       }
-                               break;
+        case RAW_DFMT:
+            image = rawtoimage(parameters.infile, &parameters, &raw_cp);
+            if (!image) {
+                fprintf(stderr, "Unable to load raw file\n");
+                return 1;
+            }
+            break;
+
+        case TGA_DFMT:
+            image = tgatoimage(parameters.infile, &parameters);
+            if (!image) {
+                fprintf(stderr, "Unable to load tga file\n");
+                return 1;
+            }
+            break;
 #ifdef OPJ_HAVE_LIBPNG
-                               case PNG_DFMT:
-                                       image = pngtoimage(parameters.infile, &parameters);
-                                       if (!image) {
-                                               fprintf(stderr, "Unable to load png file\n");
-                                               return 1;
-                                       }
-                                       break;
+        case PNG_DFMT:
+            image = pngtoimage(parameters.infile, &parameters);
+            if (!image) {
+                fprintf(stderr, "Unable to load png file\n");
+                return 1;
+            }
+            break;
 #endif /* OPJ_HAVE_LIBPNG */
-               }
-/* Can happen if input file is TIFF or PNG 
- * and OPJ_HAVE_LIBTIF or OPJ_HAVE_LIBPNG is undefined
-*/
-                       if( !image)
-                  {
-                       fprintf(stderr, "Unable to load file: got no image\n");
-                       return 1;
-                  }
-                       /* Decide if MCT should be used */
-                       parameters.tcp_mct = image->numcomps == 3 ? 1 : 0;
-
-                       if(parameters.cp_cinema){
-                               cinema_setup_encoder(&parameters,image,&img_fol);
-                       }
-
-                       /* encode the destination image */
-                       /* ---------------------------- */
-
-                       if (parameters.cod_format == J2K_CFMT) {        /* J2K format output */
-                               int codestream_length;
-        size_t res;
-                               opj_cio_t *cio = NULL;
-                               FILE *f = NULL;
-
-                               /* get a J2K compressor handle */
-                               opj_cinfo_t* cinfo = opj_create_compress(CODEC_J2K);
-
-                               /* catch events using our callbacks and give a local context */
-                               opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr);
-
-                               /* setup the encoder parameters using the current image and user parameters */
-                               opj_setup_encoder(cinfo, &parameters, image);
-
-                               /* open a byte stream for writing */
-                               /* allocate memory for all tiles */
-                               cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0);
-
-                               /* encode the image */
-                               if (*indexfilename)                                     /* If need to extract codestream information*/
-                                 bSuccess = opj_encode_with_info(cinfo, cio, image, &cstr_info);
-                               else
-                                       bSuccess = opj_encode(cinfo, cio, image, NULL);
-                               if (!bSuccess) {
-                                       opj_cio_close(cio);
-                                       fprintf(stderr, "failed to encode image\n");
-                                       return 1;
-                               }
-                               codestream_length = cio_tell(cio);
-
-                               /* write the buffer to disk */
-                               f = fopen(parameters.outfile, "wb");
-                               if (!f) {
-                                       fprintf(stderr, "failed to open %s for writing\n", parameters.outfile);
-                                       return 1;
-                               }
-                               res = fwrite(cio->buffer, 1, codestream_length, f);
-        if( res < (size_t)codestream_length ) { /* FIXME */
-                                       fprintf(stderr, "failed to write %d (%s)\n", codestream_length, parameters.outfile);
-                                       return 1;
-         }
-                               fclose(f);
-
-                               fprintf(stderr,"Generated outfile %s\n",parameters.outfile);
-                               /* close and free the byte stream */
-                               opj_cio_close(cio);
-
-                               /* Write the index to disk */
-                               if (*indexfilename) {
-                                       bSuccess = write_index_file(&cstr_info, indexfilename);
-                                       if (bSuccess) {
-                                               fprintf(stderr, "Failed to output index file into [%s]\n", indexfilename);
-                                       }
-                               }
-
-                               /* free remaining compression structures */
-                               opj_destroy_compress(cinfo);
-                               if (*indexfilename)
-                                       opj_destroy_cstr_info(&cstr_info);
-                       } else {                        /* JP2 format output */
-                               int codestream_length;
-        size_t res;
-                               opj_cio_t *cio = NULL;
-                               FILE *f = NULL;
-                               opj_cinfo_t *cinfo = NULL;
-
-                               /* get a JP2 compressor handle */                               
-                               cinfo = opj_create_compress(CODEC_JP2);
-
-                               /* catch events using our callbacks and give a local context */
-                               opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr);
-
-                               /* setup the encoder parameters using the current image and using user parameters */
-                               opj_setup_encoder(cinfo, &parameters, image);
-
-                               /* open a byte stream for writing */
-                               /* allocate memory for all tiles */
-                               cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0);
-
-                               /* encode the image */
-                               if (*indexfilename /*|| parameters.jpip_on*/) /* If need to extract codestream information*/
-                                 bSuccess = opj_encode_with_info(cinfo, cio, image, &cstr_info);
-                               else
-                                       bSuccess = opj_encode(cinfo, cio, image, NULL);
-                               if (!bSuccess) {
-                                       opj_cio_close(cio);
-                                       fprintf(stderr, "failed to encode image\n");
-                                       return 1;
-                               }
-                               codestream_length = cio_tell(cio);
-
-                               /* write the buffer to disk */
-                               f = fopen(parameters.outfile, "wb");
-                               if (!f) {
-                                       fprintf(stderr, "failed to open %s for writing\n", parameters.outfile);
-                                       return 1;
-                               }
-                               res = fwrite(cio->buffer, 1, codestream_length, f);
-        if( res < (size_t)codestream_length ) { /* FIXME */
-                                       fprintf(stderr, "failed to write %d (%s)\n", codestream_length, parameters.outfile);
-                                       return 1;
-         }
-                               fclose(f);
-                               fprintf(stderr,"Generated outfile %s\n",parameters.outfile);
-                               /* close and free the byte stream */
-                               opj_cio_close(cio);
-
-                               /* Write the index to disk */
-                               if (*indexfilename) {
-                                       bSuccess = write_index_file(&cstr_info, indexfilename);
-                                       if (bSuccess) {
-                                               fprintf(stderr, "Failed to output index file\n");
-                                       }
-                               }
-
-                               /* free remaining compression structures */
-                               opj_destroy_compress(cinfo);
-                               if (*indexfilename)
-                                       opj_destroy_cstr_info(&cstr_info);
-                       }
-
-                       /* free image data */
-                       opj_image_destroy(image);
-       }
-
-       /* free user parameters structure */
-  if(parameters.cp_comment) free(parameters.cp_comment);
-       if(parameters.cp_matrice) free(parameters.cp_matrice);
-
-       return 0;
+        }
+        /* Can happen if input file is TIFF or PNG
+         * and OPJ_HAVE_LIBTIF or OPJ_HAVE_LIBPNG is undefined
+        */
+        if (!image) {
+            fprintf(stderr, "Unable to load file: got no image\n");
+            return 1;
+        }
+        /* Decide if MCT should be used */
+        parameters.tcp_mct = image->numcomps == 3 ? 1 : 0;
+
+        if (parameters.cp_cinema) {
+            cinema_setup_encoder(&parameters, image, &img_fol);
+        }
+
+        /* encode the destination image */
+        /* ---------------------------- */
+
+        if (parameters.cod_format == J2K_CFMT) {    /* J2K format output */
+            int codestream_length;
+            size_t res;
+            opj_cio_t *cio = NULL;
+            FILE *f = NULL;
+
+            /* get a J2K compressor handle */
+            opj_cinfo_t* cinfo = opj_create_compress(CODEC_J2K);
+
+            /* catch events using our callbacks and give a local context */
+            opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr);
+
+            /* setup the encoder parameters using the current image and user parameters */
+            opj_setup_encoder(cinfo, &parameters, image);
+
+            /* open a byte stream for writing */
+            /* allocate memory for all tiles */
+            cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0);
+
+            /* encode the image */
+            if (*indexfilename) {               /* If need to extract codestream information*/
+                bSuccess = opj_encode_with_info(cinfo, cio, image, &cstr_info);
+            } else {
+                bSuccess = opj_encode(cinfo, cio, image, NULL);
+            }
+            if (!bSuccess) {
+                opj_cio_close(cio);
+                fprintf(stderr, "failed to encode image\n");
+                return 1;
+            }
+            codestream_length = cio_tell(cio);
+
+            /* write the buffer to disk */
+            f = fopen(parameters.outfile, "wb");
+            if (!f) {
+                fprintf(stderr, "failed to open %s for writing\n", parameters.outfile);
+                return 1;
+            }
+            res = fwrite(cio->buffer, 1, codestream_length, f);
+            if (res < (size_t)codestream_length) {  /* FIXME */
+                fprintf(stderr, "failed to write %d (%s)\n", codestream_length,
+                        parameters.outfile);
+                return 1;
+            }
+            fclose(f);
+
+            fprintf(stderr, "Generated outfile %s\n", parameters.outfile);
+            /* close and free the byte stream */
+            opj_cio_close(cio);
+
+            /* Write the index to disk */
+            if (*indexfilename) {
+                bSuccess = write_index_file(&cstr_info, indexfilename);
+                if (bSuccess) {
+                    fprintf(stderr, "Failed to output index file into [%s]\n", indexfilename);
+                }
+            }
+
+            /* free remaining compression structures */
+            opj_destroy_compress(cinfo);
+            if (*indexfilename) {
+                opj_destroy_cstr_info(&cstr_info);
+            }
+        } else {            /* JP2 format output */
+            int codestream_length;
+            size_t res;
+            opj_cio_t *cio = NULL;
+            FILE *f = NULL;
+            opj_cinfo_t *cinfo = NULL;
+
+            /* get a JP2 compressor handle */
+            cinfo = opj_create_compress(CODEC_JP2);
+
+            /* catch events using our callbacks and give a local context */
+            opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr);
+
+            /* setup the encoder parameters using the current image and using user parameters */
+            opj_setup_encoder(cinfo, &parameters, image);
+
+            /* open a byte stream for writing */
+            /* allocate memory for all tiles */
+            cio = opj_cio_open((opj_common_ptr)cinfo, NULL, 0);
+
+            /* encode the image */
+            if (*indexfilename /*|| parameters.jpip_on*/) { /* If need to extract codestream information*/
+                bSuccess = opj_encode_with_info(cinfo, cio, image, &cstr_info);
+            } else {
+                bSuccess = opj_encode(cinfo, cio, image, NULL);
+            }
+            if (!bSuccess) {
+                opj_cio_close(cio);
+                fprintf(stderr, "failed to encode image\n");
+                return 1;
+            }
+            codestream_length = cio_tell(cio);
+
+            /* write the buffer to disk */
+            f = fopen(parameters.outfile, "wb");
+            if (!f) {
+                fprintf(stderr, "failed to open %s for writing\n", parameters.outfile);
+                return 1;
+            }
+            res = fwrite(cio->buffer, 1, codestream_length, f);
+            if (res < (size_t)codestream_length) {  /* FIXME */
+                fprintf(stderr, "failed to write %d (%s)\n", codestream_length,
+                        parameters.outfile);
+                return 1;
+            }
+            fclose(f);
+            fprintf(stderr, "Generated outfile %s\n", parameters.outfile);
+            /* close and free the byte stream */
+            opj_cio_close(cio);
+
+            /* Write the index to disk */
+            if (*indexfilename) {
+                bSuccess = write_index_file(&cstr_info, indexfilename);
+                if (bSuccess) {
+                    fprintf(stderr, "Failed to output index file\n");
+                }
+            }
+
+            /* free remaining compression structures */
+            opj_destroy_compress(cinfo);
+            if (*indexfilename) {
+                opj_destroy_cstr_info(&cstr_info);
+            }
+        }
+
+        /* free image data */
+        opj_image_destroy(image);
+    }
+
+    /* free user parameters structure */
+    if (parameters.cp_comment) {
+        free(parameters.cp_comment);
+    }
+    if (parameters.cp_matrice) {
+        free(parameters.cp_matrice);
+    }
+
+    return 0;
 }
index 3e4ca23d14cdaf67e7ea38fb24bc3238659060cb..ffe84e54e4c4c3322325845e03a7900e0cdb7a37 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * Copyright (c) 2006-2007, Parvatha Elangovan
 
 #include "format_defs.h"
 
-typedef struct dircnt{
-       /** Buffer for holding images read from Directory*/
-       char *filename_buf;
-       /** Pointer to the buffer*/
-       char **filename;
-}dircnt_t;
-
-
-typedef struct img_folder{
-       /** The directory path of the folder containing input images*/
-       char *imgdirpath;
-       /** Output format*/
-       const char *out_format;
-       /** Enable option*/
-       char set_imgdir;
-       /** Enable Cod Format for output*/
-       char set_out_format;
-
-}img_fol_t;
-
-void decode_help_display(void) {
-       fprintf(stdout,"HELP for j2k_to_image\n----\n\n");
-       fprintf(stdout,"- the -h option displays this help information on screen\n\n");
-
-/* UniPG>> */
-       fprintf(stdout,"List of parameters for the JPEG 2000 "
+typedef struct dircnt {
+    /** Buffer for holding images read from Directory*/
+    char *filename_buf;
+    /** Pointer to the buffer*/
+    char **filename;
+} dircnt_t;
+
+
+typedef struct img_folder {
+    /** The directory path of the folder containing input images*/
+    char *imgdirpath;
+    /** Output format*/
+    const char *out_format;
+    /** Enable option*/
+    char set_imgdir;
+    /** Enable Cod Format for output*/
+    char set_out_format;
+
+} img_fol_t;
+
+void decode_help_display(void)
+{
+    fprintf(stdout, "HELP for j2k_to_image\n----\n\n");
+    fprintf(stdout, "- the -h option displays this help information on screen\n\n");
+
+    /* UniPG>> */
+    fprintf(stdout, "List of parameters for the JPEG 2000 "
 #ifdef USE_JPWL
-               "+ JPWL "
+            "+ JPWL "
 #endif /* USE_JPWL */
-               "decoder:\n");
-/* <<UniPG */
-       fprintf(stdout,"\n");
-       fprintf(stdout,"\n");
-       fprintf(stdout,"  -ImgDir \n");
-       fprintf(stdout,"        Image file Directory path \n");
-       fprintf(stdout,"  -OutFor \n");
-       fprintf(stdout,"    REQUIRED only if -ImgDir is used\n");
-       fprintf(stdout,"          Need to specify only format without filename <BMP>  \n");
-       fprintf(stdout,"    Currently accepts PGM, PPM, PNM, PGX, PNG, BMP, TIF, RAW and TGA formats\n");
-       fprintf(stdout,"  -i <compressed file>\n");
-       fprintf(stdout,"    REQUIRED only if an Input image directory not specified\n");
-       fprintf(stdout,"    Currently accepts J2K-files, JP2-files and JPT-files. The file type\n");
-       fprintf(stdout,"    is identified based on its suffix.\n");
-       fprintf(stdout,"  -o <decompressed file>\n");
-       fprintf(stdout,"    REQUIRED\n");
-       fprintf(stdout,"    Currently accepts PGM, PPM, PNM, PGX, PNG, BMP, TIF, RAW and TGA files\n");
-       fprintf(stdout,"    Binary data is written to the file (not ascii). If a PGX\n");
-       fprintf(stdout,"    filename is given, there will be as many output files as there are\n");
-       fprintf(stdout,"    components: an indice starting from 0 will then be appended to the\n");
-       fprintf(stdout,"    output filename, just before the \"pgx\" extension. If a PGM filename\n");
-       fprintf(stdout,"    is given and there are more than one component, only the first component\n");
-       fprintf(stdout,"    will be written to the file.\n");
-       fprintf(stdout,"  -r <reduce factor>\n");
-       fprintf(stdout,"    Set the number of highest resolution levels to be discarded. The\n");
-       fprintf(stdout,"    image resolution is effectively divided by 2 to the power of the\n");
-       fprintf(stdout,"    number of discarded levels. The reduce factor is limited by the\n");
-       fprintf(stdout,"    smallest total number of decomposition levels among tiles.\n");
-       fprintf(stdout,"  -l <number of quality layers to decode>\n");
-       fprintf(stdout,"    Set the maximum number of quality layers to decode. If there are\n");
-       fprintf(stdout,"    less quality layers than the specified number, all the quality layers\n");
-       fprintf(stdout,"    are decoded.\n");
-       fprintf(stdout,"  -x  \n"); 
-       fprintf(stdout,"    Create an index file *.Idx (-x index_name.Idx) \n");
-       fprintf(stdout,"\n");
-/* UniPG>> */
+            "decoder:\n");
+    /* <<UniPG */
+    fprintf(stdout, "\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "  -ImgDir \n");
+    fprintf(stdout, "  Image file Directory path \n");
+    fprintf(stdout, "  -OutFor \n");
+    fprintf(stdout, "    REQUIRED only if -ImgDir is used\n");
+    fprintf(stdout, "    Need to specify only format without filename <BMP>  \n");
+    fprintf(stdout,
+            "    Currently accepts PGM, PPM, PNM, PGX, PNG, BMP, TIF, RAW and TGA formats\n");
+    fprintf(stdout, "  -i <compressed file>\n");
+    fprintf(stdout,
+            "    REQUIRED only if an Input image directory not specified\n");
+    fprintf(stdout,
+            "    Currently accepts J2K-files, JP2-files and JPT-files. The file type\n");
+    fprintf(stdout, "    is identified based on its suffix.\n");
+    fprintf(stdout, "  -o <decompressed file>\n");
+    fprintf(stdout, "    REQUIRED\n");
+    fprintf(stdout,
+            "    Currently accepts PGM, PPM, PNM, PGX, PNG, BMP, TIF, RAW and TGA files\n");
+    fprintf(stdout,
+            "    Binary data is written to the file (not ascii). If a PGX\n");
+    fprintf(stdout,
+            "    filename is given, there will be as many output files as there are\n");
+    fprintf(stdout,
+            "    components: an indice starting from 0 will then be appended to the\n");
+    fprintf(stdout,
+            "    output filename, just before the \"pgx\" extension. If a PGM filename\n");
+    fprintf(stdout,
+            "    is given and there are more than one component, only the first component\n");
+    fprintf(stdout, "    will be written to the file.\n");
+    fprintf(stdout, "  -r <reduce factor>\n");
+    fprintf(stdout,
+            "    Set the number of highest resolution levels to be discarded. The\n");
+    fprintf(stdout,
+            "    image resolution is effectively divided by 2 to the power of the\n");
+    fprintf(stdout,
+            "    number of discarded levels. The reduce factor is limited by the\n");
+    fprintf(stdout,
+            "    smallest total number of decomposition levels among tiles.\n");
+    fprintf(stdout, "  -l <number of quality layers to decode>\n");
+    fprintf(stdout,
+            "    Set the maximum number of quality layers to decode. If there are\n");
+    fprintf(stdout,
+            "    less quality layers than the specified number, all the quality layers\n");
+    fprintf(stdout, "    are decoded.\n");
+    fprintf(stdout, "  -x  \n");
+    fprintf(stdout, "    Create an index file *.Idx (-x index_name.Idx) \n");
+    fprintf(stdout, "\n");
+    /* UniPG>> */
 #ifdef USE_JPWL
-       fprintf(stdout,"  -W <options>\n");
-       fprintf(stdout,"    Activates the JPWL correction capability, if the codestream complies.\n");
-       fprintf(stdout,"    Options can be a comma separated list of <param=val> tokens:\n");
-       fprintf(stdout,"    c, c=numcomps\n");
-       fprintf(stdout,"       numcomps is the number of expected components in the codestream\n");
-       fprintf(stdout,"       (search of first EPB rely upon this, default is %d)\n", JPWL_EXPECTED_COMPONENTS);
+    fprintf(stdout, "  -W <options>\n");
+    fprintf(stdout,
+            "    Activates the JPWL correction capability, if the codestream complies.\n");
+    fprintf(stdout,
+            "    Options can be a comma separated list of <param=val> tokens:\n");
+    fprintf(stdout, "    c, c=numcomps\n");
+    fprintf(stdout,
+            "       numcomps is the number of expected components in the codestream\n");
+    fprintf(stdout, "       (search of first EPB rely upon this, default is %d)\n",
+            JPWL_EXPECTED_COMPONENTS);
 #endif /* USE_JPWL */
-/* <<UniPG */
-       fprintf(stdout,"\n");
+    /* <<UniPG */
+    fprintf(stdout, "\n");
 }
 
 /* -------------------------------------------------------------------------- */
 
-int get_num_images(char *imgdirpath){
-       DIR *dir;
-       struct dirent* content; 
-       int num_images = 0;
-
-       /*Reading the input images from given input directory*/
-
-       dir= opendir(imgdirpath);
-       if(!dir){
-               fprintf(stderr,"Could not open Folder %s\n",imgdirpath);
-               return 0;
-       }
-       
-       while((content=readdir(dir))!=NULL){
-               if(strcmp(".",content->d_name)==0 || strcmp("..",content->d_name)==0 )
-                       continue;
-               num_images++;
-       }
-       return num_images;
+int get_num_images(char *imgdirpath)
+{
+    DIR *dir;
+    struct dirent* content;
+    int num_images = 0;
+
+    /*Reading the input images from given input directory*/
+
+    dir = opendir(imgdirpath);
+    if (!dir) {
+        fprintf(stderr, "Could not open Folder %s\n", imgdirpath);
+        return 0;
+    }
+
+    while ((content = readdir(dir)) != NULL) {
+        if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) {
+            continue;
+        }
+        num_images++;
+    }
+    return num_images;
 }
 
-int load_images(dircnt_t *dirptr, char *imgdirpath){
-       DIR *dir;
-       struct dirent* content; 
-       int i = 0;
-
-       /*Reading the input images from given input directory*/
-
-       dir= opendir(imgdirpath);
-       if(!dir){
-               fprintf(stderr,"Could not open Folder %s\n",imgdirpath);
-               return 1;
-       }else   {
-               fprintf(stderr,"Folder opened successfully\n");
-       }
-       
-       while((content=readdir(dir))!=NULL){
-               if(strcmp(".",content->d_name)==0 || strcmp("..",content->d_name)==0 )
-                       continue;
-
-               strcpy(dirptr->filename[i],content->d_name);
-               i++;
-       }
-       return 0;       
+int load_images(dircnt_t *dirptr, char *imgdirpath)
+{
+    DIR *dir;
+    struct dirent* content;
+    int i = 0;
+
+    /*Reading the input images from given input directory*/
+
+    dir = opendir(imgdirpath);
+    if (!dir) {
+        fprintf(stderr, "Could not open Folder %s\n", imgdirpath);
+        return 1;
+    } else   {
+        fprintf(stderr, "Folder opened successfully\n");
+    }
+
+    while ((content = readdir(dir)) != NULL) {
+        if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) {
+            continue;
+        }
+
+        strcpy(dirptr->filename[i], content->d_name);
+        i++;
+    }
+    return 0;
 }
 
-int get_file_format(char *filename) {
-       unsigned int i;
-       static const char *extension[] = {"pgx", "pnm", "pgm", "ppm", "bmp","tif", "raw", "tga", "png", "j2k", "jp2", "jpt", "j2c", "jpc" };
-       static const int format[] = { PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, TIF_DFMT, RAW_DFMT, TGA_DFMT, PNG_DFMT, J2K_CFMT, JP2_CFMT, JPT_CFMT, J2K_CFMT, J2K_CFMT };
-       char * ext = strrchr(filename, '.');
-       if (ext == NULL)
-               return -1;
-       ext++;
-       if(ext) {
-               for(i = 0; i < sizeof(format)/sizeof(*format); i++) {
-                       if(_strnicmp(ext, extension[i], 3) == 0) {
-                               return format[i];
-                       }
-               }
-       }
-
-       return -1;
+int get_file_format(char *filename)
+{
+    unsigned int i;
+    static const char *extension[] = {"pgx", "pnm", "pgm", "ppm", "bmp", "tif", "raw", "tga", "png", "j2k", "jp2", "jpt", "j2c", "jpc" };
+    static const int format[] = { PGX_DFMT, PXM_DFMT, PXM_DFMT, PXM_DFMT, BMP_DFMT, TIF_DFMT, RAW_DFMT, TGA_DFMT, PNG_DFMT, J2K_CFMT, JP2_CFMT, JPT_CFMT, J2K_CFMT, J2K_CFMT };
+    char * ext = strrchr(filename, '.');
+    if (ext == NULL) {
+        return -1;
+    }
+    ext++;
+    if (ext) {
+        for (i = 0; i < sizeof(format) / sizeof(*format); i++) {
+            if (_strnicmp(ext, extension[i], 3) == 0) {
+                return format[i];
+            }
+        }
+    }
+
+    return -1;
 }
 
-char get_next_file(int imageno,dircnt_t *dirptr,img_fol_t *img_fol, opj_dparameters_t *parameters){
-       char image_filename[OPJ_PATH_LEN], infilename[OPJ_PATH_LEN],outfilename[OPJ_PATH_LEN],temp_ofname[OPJ_PATH_LEN];
-       char *temp_p, temp1[OPJ_PATH_LEN]="";
-
-       strcpy(image_filename,dirptr->filename[imageno]);
-       fprintf(stderr,"File Number %d \"%s\"\n",imageno,image_filename);
-       parameters->decod_format = get_file_format(image_filename);
-       if (parameters->decod_format == -1)
-               return 1;
-       sprintf(infilename,"%s/%s",img_fol->imgdirpath,image_filename);
-       strncpy(parameters->infile, infilename, sizeof(infilename));
-
-       /*Set output file*/
-       strcpy(temp_ofname,strtok(image_filename,"."));
-       while((temp_p = strtok(NULL,".")) != NULL){
-               strcat(temp_ofname,temp1);
-               sprintf(temp1,".%s",temp_p);
-       }
-       if(img_fol->set_out_format==1){
-               sprintf(outfilename,"%s/%s.%s",img_fol->imgdirpath,temp_ofname,img_fol->out_format);
-               strncpy(parameters->outfile, outfilename, sizeof(outfilename));
-       }
-       return 0;
+char get_next_file(int imageno, dircnt_t *dirptr, img_fol_t *img_fol,
+                   opj_dparameters_t *parameters)
+{
+    char image_filename[OPJ_PATH_LEN], infilename[OPJ_PATH_LEN],
+         outfilename[OPJ_PATH_LEN], temp_ofname[OPJ_PATH_LEN];
+    char *temp_p, temp1[OPJ_PATH_LEN] = "";
+
+    strcpy(image_filename, dirptr->filename[imageno]);
+    fprintf(stderr, "File Number %d \"%s\"\n", imageno, image_filename);
+    parameters->decod_format = get_file_format(image_filename);
+    if (parameters->decod_format == -1) {
+        return 1;
+    }
+    sprintf(infilename, "%s/%s", img_fol->imgdirpath, image_filename);
+    strncpy(parameters->infile, infilename, sizeof(infilename));
+
+    /*Set output file*/
+    strcpy(temp_ofname, strtok(image_filename, "."));
+    while ((temp_p = strtok(NULL, ".")) != NULL) {
+        strcat(temp_ofname, temp1);
+        sprintf(temp1, ".%s", temp_p);
+    }
+    if (img_fol->set_out_format == 1) {
+        sprintf(outfilename, "%s/%s.%s", img_fol->imgdirpath, temp_ofname,
+                img_fol->out_format);
+        strncpy(parameters->outfile, outfilename, sizeof(outfilename));
+    }
+    return 0;
 }
 
 /* -------------------------------------------------------------------------- */
-int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *parameters,img_fol_t *img_fol, char *indexfilename) {
-       /* parse the command line */
-       int totlen, c;
-       opj_option_t long_option[]={
-               {"ImgDir",REQ_ARG, NULL ,'y'},
-               {"OutFor",REQ_ARG, NULL ,'O'},
-       };
-
-       const char optlist[] = "i:o:r:l:x:"
-
-/* UniPG>> */
+int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *parameters,
+                          img_fol_t *img_fol, char *indexfilename)
+{
+    /* parse the command line */
+    int totlen, c;
+    opj_option_t long_option[] = {
+        {"ImgDir", REQ_ARG, NULL, 'y'},
+        {"OutFor", REQ_ARG, NULL, 'O'},
+    };
+
+    const char optlist[] = "i:o:r:l:x:"
+
+                           /* UniPG>> */
 #ifdef USE_JPWL
-                                       "W:"
+                           "W:"
 #endif /* USE_JPWL */
-/* <<UniPG */
-                       "h"             ;
-       totlen=sizeof(long_option);
-       img_fol->set_out_format = 0;
-       do {
-               c = opj_getopt_long(argc, argv,optlist,long_option,totlen);
-               if (c == -1)
-                       break;
-               switch (c) {
-                       case 'i':                       /* input file */
-                       {
-                               char *infile = opj_optarg;
-                               parameters->decod_format = get_file_format(infile);
-                               switch(parameters->decod_format) {
-                                       case J2K_CFMT:
-                                       case JP2_CFMT:
-                                       case JPT_CFMT:
-                                               break;
-                                       default:
-                                               fprintf(stderr, 
-                                                       "!! Unrecognized format for infile : %s [accept only *.j2k, *.jp2, *.jpc or *.jpt] !!\n\n", 
-                                                       infile);
-                                               return 1;
-                               }
-                               strncpy(parameters->infile, infile, sizeof(parameters->infile)-1);
-                       }
-                       break;
-                               
-                               /* ----------------------------------------------------- */
-
-                       case 'o':                       /* output file */
-                       {
-                               char *outfile = opj_optarg;
-                               parameters->cod_format = get_file_format(outfile);
-                               switch(parameters->cod_format) {
-                                       case PGX_DFMT:
-                                       case PXM_DFMT:
-                                       case BMP_DFMT:
-                                       case TIF_DFMT:
-                                       case RAW_DFMT:
-                                       case TGA_DFMT:
-                                       case PNG_DFMT:
-                                               break;
-                                       default:
-                                               fprintf(stderr, "Unknown output format image %s [only *.pnm, *.pgm, *.ppm, *.pgx, *.bmp, *.tif, *.raw or *.tga]!! \n", outfile);
-                                               return 1;
-                               }
-                               strncpy(parameters->outfile, outfile, sizeof(parameters->outfile)-1);
-                       }
-                       break;
-                       
-                               /* ----------------------------------------------------- */
-
-                       case 'O':                       /* output format */
-                       {
-                               char outformat[50];
-                               char *of = opj_optarg;
-                               sprintf(outformat,".%s",of);
-                               img_fol->set_out_format = 1;
-                               parameters->cod_format = get_file_format(outformat);
-                               switch(parameters->cod_format) {
-                                       case PGX_DFMT:
-                                               img_fol->out_format = "pgx";
-                                               break;
-                                       case PXM_DFMT:
-                                               img_fol->out_format = "ppm";
-                                               break;
-                                       case BMP_DFMT:
-                                               img_fol->out_format = "bmp";
-                                               break;
-                                       case TIF_DFMT:
-                                               img_fol->out_format = "tif";
-                                               break;
-                                       case RAW_DFMT:
-                                               img_fol->out_format = "raw";
-                                               break;
-                                       case TGA_DFMT:
-                                               img_fol->out_format = "raw";
-                                               break;
-                                       case PNG_DFMT:
-                                               img_fol->out_format = "png";
-                                               break;
-                                       default:
-                                               fprintf(stderr, "Unknown output format image %s [only *.pnm, *.pgm, *.ppm, *.pgx, *.bmp, *.tif, *.raw or *.tga]!! \n", outformat);
-                                               return 1;
-                                               break;
-                               }
-                       }
-                       break;
-
-                               /* ----------------------------------------------------- */
-
-
-                       case 'r':               /* reduce option */
-                       {
-                               sscanf(opj_optarg, "%d", &parameters->cp_reduce);
-                       }
-                       break;
-                       
-                               /* ----------------------------------------------------- */
-      
-
-                       case 'l':               /* layering option */
-                       {
-                               sscanf(opj_optarg, "%d", &parameters->cp_layer);
-                       }
-                       break;
-                       
-                               /* ----------------------------------------------------- */
-
-                       case 'h':                       /* display an help description */
-                               decode_help_display();
-                               return 1;                               
-
-                               /* ------------------------------------------------------ */
-
-                       case 'y':                       /* Image Directory path */
-                               {
-                                       img_fol->imgdirpath = (char*)malloc(strlen(opj_optarg) + 1);
-                                       strcpy(img_fol->imgdirpath,opj_optarg);
-                                       img_fol->set_imgdir=1;
-                               }
-                               break;
-                               /* ----------------------------------------------------- */                                                             
-                       case 'x':                       /* Creation of index file */
-                               {
-                                       char *index = opj_optarg;
-                                       strncpy(indexfilename, index, OPJ_PATH_LEN);
-                               }
-                               break;
-                               /* ----------------------------------------------------- */
-                               /* UniPG>> */
+                           /* <<UniPG */
+                           "h"     ;
+    totlen = sizeof(long_option);
+    img_fol->set_out_format = 0;
+    do {
+        c = opj_getopt_long(argc, argv, optlist, long_option, totlen);
+        if (c == -1) {
+            break;
+        }
+        switch (c) {
+        case 'i': {         /* input file */
+            char *infile = opj_optarg;
+            parameters->decod_format = get_file_format(infile);
+            switch (parameters->decod_format) {
+            case J2K_CFMT:
+            case JP2_CFMT:
+            case JPT_CFMT:
+                break;
+            default:
+                fprintf(stderr,
+                        "!! Unrecognized format for infile : %s [accept only *.j2k, *.jp2, *.jpc or *.jpt] !!\n\n",
+                        infile);
+                return 1;
+            }
+            strncpy(parameters->infile, infile, sizeof(parameters->infile) - 1);
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'o': {         /* output file */
+            char *outfile = opj_optarg;
+            parameters->cod_format = get_file_format(outfile);
+            switch (parameters->cod_format) {
+            case PGX_DFMT:
+            case PXM_DFMT:
+            case BMP_DFMT:
+            case TIF_DFMT:
+            case RAW_DFMT:
+            case TGA_DFMT:
+            case PNG_DFMT:
+                break;
+            default:
+                fprintf(stderr,
+                        "Unknown output format image %s [only *.pnm, *.pgm, *.ppm, *.pgx, *.bmp, *.tif, *.raw or *.tga]!! \n",
+                        outfile);
+                return 1;
+            }
+            strncpy(parameters->outfile, outfile, sizeof(parameters->outfile) - 1);
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'O': {         /* output format */
+            char outformat[50];
+            char *of = opj_optarg;
+            sprintf(outformat, ".%s", of);
+            img_fol->set_out_format = 1;
+            parameters->cod_format = get_file_format(outformat);
+            switch (parameters->cod_format) {
+            case PGX_DFMT:
+                img_fol->out_format = "pgx";
+                break;
+            case PXM_DFMT:
+                img_fol->out_format = "ppm";
+                break;
+            case BMP_DFMT:
+                img_fol->out_format = "bmp";
+                break;
+            case TIF_DFMT:
+                img_fol->out_format = "tif";
+                break;
+            case RAW_DFMT:
+                img_fol->out_format = "raw";
+                break;
+            case TGA_DFMT:
+                img_fol->out_format = "raw";
+                break;
+            case PNG_DFMT:
+                img_fol->out_format = "png";
+                break;
+            default:
+                fprintf(stderr,
+                        "Unknown output format image %s [only *.pnm, *.pgm, *.ppm, *.pgx, *.bmp, *.tif, *.raw or *.tga]!! \n",
+                        outformat);
+                return 1;
+                break;
+            }
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+
+        case 'r': {     /* reduce option */
+            sscanf(opj_optarg, "%d", &parameters->cp_reduce);
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+
+        case 'l': {     /* layering option */
+            sscanf(opj_optarg, "%d", &parameters->cp_layer);
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+
+        case 'h':           /* display an help description */
+            decode_help_display();
+            return 1;
+
+        /* ------------------------------------------------------ */
+
+        case 'y': {         /* Image Directory path */
+            img_fol->imgdirpath = (char*)malloc(strlen(opj_optarg) + 1);
+            strcpy(img_fol->imgdirpath, opj_optarg);
+            img_fol->set_imgdir = 1;
+        }
+        break;
+        /* ----------------------------------------------------- */
+        case 'x': {         /* Creation of index file */
+            char *index = opj_optarg;
+            strncpy(indexfilename, index, OPJ_PATH_LEN);
+        }
+        break;
+            /* ----------------------------------------------------- */
+            /* UniPG>> */
 #ifdef USE_JPWL
-                       
-                       case 'W':                       /* activate JPWL correction */
-                       {
-                               char *token = NULL;
-
-                               token = strtok(opj_optarg, ",");
-                               while(token != NULL) {
-
-                                       /* search expected number of components */
-                                       if (*token == 'c') {
-
-                                               static int compno;
-
-                                               compno = JPWL_EXPECTED_COMPONENTS; /* predefined no. of components */
-
-                                               if(sscanf(token, "c=%d", &compno) == 1) {
-                                                       /* Specified */
-                                                       if ((compno < 1) || (compno > 256)) {
-                                                               fprintf(stderr, "ERROR -> invalid number of components c = %d\n", compno);
-                                                               return 1;
-                                                       }
-                                                       parameters->jpwl_exp_comps = compno;
-
-                                               } else if (!strcmp(token, "c")) {
-                                                       /* default */
-                                                       parameters->jpwl_exp_comps = compno; /* auto for default size */
-
-                                               } else {
-                                                       fprintf(stderr, "ERROR -> invalid components specified = %s\n", token);
-                                                       return 1;
-                                               };
-                                       }
-
-                                       /* search maximum number of tiles */
-                                       if (*token == 't') {
-
-                                               static int tileno;
-
-                                               tileno = JPWL_MAXIMUM_TILES; /* maximum no. of tiles */
-
-                                               if(sscanf(token, "t=%d", &tileno) == 1) {
-                                                       /* Specified */
-                                                       if ((tileno < 1) || (tileno > JPWL_MAXIMUM_TILES)) {
-                                                               fprintf(stderr, "ERROR -> invalid number of tiles t = %d\n", tileno);
-                                                               return 1;
-                                                       }
-                                                       parameters->jpwl_max_tiles = tileno;
-
-                                               } else if (!strcmp(token, "t")) {
-                                                       /* default */
-                                                       parameters->jpwl_max_tiles = tileno; /* auto for default size */
-
-                                               } else {
-                                                       fprintf(stderr, "ERROR -> invalid tiles specified = %s\n", token);
-                                                       return 1;
-                                               };
-                                       }
-
-                                       /* next token or bust */
-                                       token = strtok(NULL, ",");
-                               };
-                               parameters->jpwl_correct = OPJ_TRUE;
-                               fprintf(stdout, "JPWL correction capability activated\n");
-                               fprintf(stdout, "- expecting %d components\n", parameters->jpwl_exp_comps);
-                       }
-                       break;  
+
+        case 'W': {         /* activate JPWL correction */
+            char *token = NULL;
+
+            token = strtok(opj_optarg, ",");
+            while (token != NULL) {
+
+                /* search expected number of components */
+                if (*token == 'c') {
+
+                    static int compno;
+
+                    compno = JPWL_EXPECTED_COMPONENTS; /* predefined no. of components */
+
+                    if (sscanf(token, "c=%d", &compno) == 1) {
+                        /* Specified */
+                        if ((compno < 1) || (compno > 256)) {
+                            fprintf(stderr, "ERROR -> invalid number of components c = %d\n", compno);
+                            return 1;
+                        }
+                        parameters->jpwl_exp_comps = compno;
+
+                    } else if (!strcmp(token, "c")) {
+                        /* default */
+                        parameters->jpwl_exp_comps = compno; /* auto for default size */
+
+                    } else {
+                        fprintf(stderr, "ERROR -> invalid components specified = %s\n", token);
+                        return 1;
+                    };
+                }
+
+                /* search maximum number of tiles */
+                if (*token == 't') {
+
+                    static int tileno;
+
+                    tileno = JPWL_MAXIMUM_TILES; /* maximum no. of tiles */
+
+                    if (sscanf(token, "t=%d", &tileno) == 1) {
+                        /* Specified */
+                        if ((tileno < 1) || (tileno > JPWL_MAXIMUM_TILES)) {
+                            fprintf(stderr, "ERROR -> invalid number of tiles t = %d\n", tileno);
+                            return 1;
+                        }
+                        parameters->jpwl_max_tiles = tileno;
+
+                    } else if (!strcmp(token, "t")) {
+                        /* default */
+                        parameters->jpwl_max_tiles = tileno; /* auto for default size */
+
+                    } else {
+                        fprintf(stderr, "ERROR -> invalid tiles specified = %s\n", token);
+                        return 1;
+                    };
+                }
+
+                /* next token or bust */
+                token = strtok(NULL, ",");
+            };
+            parameters->jpwl_correct = OPJ_TRUE;
+            fprintf(stdout, "JPWL correction capability activated\n");
+            fprintf(stdout, "- expecting %d components\n", parameters->jpwl_exp_comps);
+        }
+        break;
 #endif /* USE_JPWL */
-/* <<UniPG */            
-
-                               /* ----------------------------------------------------- */
-                       
-                       default:
-                               fprintf(stderr,"WARNING -> this option is not valid \"-%c %s\"\n",c, opj_optarg);
-                               break;
-               }
-       }while(c != -1);
-
-       /* check for possible errors */
-       if(img_fol->set_imgdir==1){
-               if(!(parameters->infile[0]==0)){
-                       fprintf(stderr, "Error: options -ImgDir and -i cannot be used together !!\n");
-                       return 1;
-               }
-               if(img_fol->set_out_format == 0){
-                       fprintf(stderr, "Error: When -ImgDir is used, -OutFor <FORMAT> must be used !!\n");
-                       fprintf(stderr, "Only one format allowed! Valid format PGM, PPM, PNM, PGX, BMP, TIF, RAW and TGA!!\n");
-                       return 1;
-               }
-               if(!((parameters->outfile[0] == 0))){
-                       fprintf(stderr, "Error: options -ImgDir and -o cannot be used together !!\n");
-                       return 1;
-               }
-       }else{
-               if((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
-                       fprintf(stderr, "Example: %s -i image.j2k -o image.pgm\n",argv[0]);
-                       fprintf(stderr, "    Try: %s -h\n",argv[0]);
-                       return 1;
-               }
-       }
-
-       return 0;
+        /* <<UniPG */
+
+        /* ----------------------------------------------------- */
+
+        default:
+            fprintf(stderr, "WARNING -> this option is not valid \"-%c %s\"\n", c,
+                    opj_optarg);
+            break;
+        }
+    } while (c != -1);
+
+    /* check for possible errors */
+    if (img_fol->set_imgdir == 1) {
+        if (!(parameters->infile[0] == 0)) {
+            fprintf(stderr, "Error: options -ImgDir and -i cannot be used together !!\n");
+            return 1;
+        }
+        if (img_fol->set_out_format == 0) {
+            fprintf(stderr,
+                    "Error: When -ImgDir is used, -OutFor <FORMAT> must be used !!\n");
+            fprintf(stderr,
+                    "Only one format allowed! Valid format PGM, PPM, PNM, PGX, BMP, TIF, RAW and TGA!!\n");
+            return 1;
+        }
+        if (!((parameters->outfile[0] == 0))) {
+            fprintf(stderr, "Error: options -ImgDir and -o cannot be used together !!\n");
+            return 1;
+        }
+    } else {
+        if ((parameters->infile[0] == 0) || (parameters->outfile[0] == 0)) {
+            fprintf(stderr, "Example: %s -i image.j2k -o image.pgm\n", argv[0]);
+            fprintf(stderr, "    Try: %s -h\n", argv[0]);
+            return 1;
+        }
+    }
+
+    return 0;
 }
 
 /* -------------------------------------------------------------------------- */
@@ -496,362 +529,364 @@ int parse_cmdline_decoder(int argc, char **argv, opj_dparameters_t *parameters,i
 /**
 sample error callback expecting a FILE* client object
 */
-void error_callback(const char *msg, void *client_data) {
-       FILE *stream = (FILE*)client_data;
-       fprintf(stream, "[ERROR] %s", msg);
+void error_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[ERROR] %s", msg);
 }
 /**
 sample warning callback expecting a FILE* client object
 */
-void warning_callback(const char *msg, void *client_data) {
-       FILE *stream = (FILE*)client_data;
-       fprintf(stream, "[WARNING] %s", msg);
+void warning_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[WARNING] %s", msg);
 }
 /**
 sample debug callback expecting no client object
 */
-void info_callback(const char *msg, void *client_data) {
-       (void)client_data;
-       fprintf(stdout, "[INFO] %s", msg);
+void info_callback(const char *msg, void *client_data)
+{
+    (void)client_data;
+    fprintf(stdout, "[INFO] %s", msg);
 }
 
 /* -------------------------------------------------------------------------- */
 
-int main(int argc, char **argv) {
-       opj_dparameters_t parameters;   /* decompression parameters */
-       img_fol_t img_fol;
-       opj_event_mgr_t event_mgr;              /* event manager */
-       opj_image_t *image = NULL;
-       FILE *fsrc = NULL;
-       unsigned char *src = NULL;
-       int file_length;
-       int num_images;
-       int i,imageno;
-       dircnt_t *dirptr = NULL;
-       opj_dinfo_t* dinfo = NULL;      /* handle to a decompressor */
-       opj_cio_t *cio = NULL;
-       opj_codestream_info_t cstr_info;  /* Codestream information structure */
-       char indexfilename[OPJ_PATH_LEN];       /* index file name */
-
-       /* configure the event callbacks (not required) */
-       memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
-       event_mgr.error_handler = error_callback;
-       event_mgr.warning_handler = warning_callback;
-       event_mgr.info_handler = info_callback;
-
-       /* set decoding parameters to default values */
-       opj_set_default_decoder_parameters(&parameters);
-
-       /* Initialize indexfilename and img_fol */
-       *indexfilename = 0;
-       memset(&img_fol,0,sizeof(img_fol_t));
-
-       /* parse input and get user encoding parameters */
-       if(parse_cmdline_decoder(argc, argv, &parameters,&img_fol, indexfilename) == 1) {
-               return 1;
-       }
-
-       /* Initialize reading of directory */
-       if(img_fol.set_imgdir==1){      
-               num_images=get_num_images(img_fol.imgdirpath);
-
-               dirptr=(dircnt_t*)malloc(sizeof(dircnt_t));
-               if(dirptr){
-                       dirptr->filename_buf = (char*)malloc(num_images*OPJ_PATH_LEN*sizeof(char));     /* Stores at max 10 image file names*/
-                       dirptr->filename = (char**) malloc(num_images*sizeof(char*));
-
-                       if(!dirptr->filename_buf){
-                               return 1;
-                       }
-                       for(i=0;i<num_images;i++){
-                               dirptr->filename[i] = dirptr->filename_buf + i*OPJ_PATH_LEN;
-                       }
-               }
-               if(load_images(dirptr,img_fol.imgdirpath)==1){
-                       return 1;
-               }
-               if (num_images==0){
-                       fprintf(stdout,"Folder is empty\n");
-                       return 1;
-               }
-       }else{
-               num_images=1;
-       }
-
-       /*Encoding image one by one*/
-       for(imageno = 0; imageno < num_images ; imageno++)      {
-               image = NULL;
-               fprintf(stderr,"\n");
-
-               if(img_fol.set_imgdir==1){
-                       if (get_next_file(imageno, dirptr,&img_fol, &parameters)) {
-                               fprintf(stderr,"skipping file...\n");
-                               continue;
-                       }
-               }
-
-               /* read the input file and put it in memory */
-               /* ---------------------------------------- */
-               fsrc = fopen(parameters.infile, "rb");
-               if (!fsrc) {
-                       fprintf(stderr, "ERROR -> failed to open %s for reading\n", parameters.infile);
-                       return 1;
-               }
-               fseek(fsrc, 0, SEEK_END);
-               file_length = ftell(fsrc);
-               fseek(fsrc, 0, SEEK_SET);
-               src = (unsigned char *) malloc(file_length);
-               if (fread(src, 1, file_length, fsrc) != (size_t)file_length)
-               {
-                       free(src);
-                       fclose(fsrc);
-                       fprintf(stderr, "\nERROR: fread return a number of element different from the expected.\n");
-                       return 1;
-               }
-               fclose(fsrc);
-
-               /* decode the code-stream */
-               /* ---------------------- */
-
-               switch(parameters.decod_format) {
-               case J2K_CFMT:
-               {
-                       /* JPEG-2000 codestream */
-
-                       /* get a decoder handle */
-                       dinfo = opj_create_decompress(CODEC_J2K);
-
-                       /* catch events using our callbacks and give a local context */
-                       opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
-
-                       /* setup the decoder decoding parameters using user parameters */
-                       opj_setup_decoder(dinfo, &parameters);
-
-                       /* open a byte stream */
-                       cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
-
-                       /* decode the stream and fill the image structure */
-                       if (*indexfilename)                             /* If need to extract codestream information*/
-                               image = opj_decode_with_info(dinfo, cio, &cstr_info);
-                       else
-                               image = opj_decode(dinfo, cio);
-                       if(!image) {
-                               fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
-                               opj_destroy_decompress(dinfo);
-                               opj_cio_close(cio);
-                               free(src);
-                               return 1;
-                       }
-
-                       /* close the byte stream */
-                       opj_cio_close(cio);
-
-                       /* Write the index to disk */
-                       if (*indexfilename) {
-                               opj_bool bSuccess;
-                               bSuccess = write_index_file(&cstr_info, indexfilename);
-                               if (bSuccess) {
-                                       fprintf(stderr, "Failed to output index file\n");
-                               }
-                       }
-               }
-               break;
-
-               case JP2_CFMT:
-               {
-                       /* JPEG 2000 compressed image data */
-
-                       /* get a decoder handle */
-                       dinfo = opj_create_decompress(CODEC_JP2);
-
-                       /* catch events using our callbacks and give a local context */
-                       opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
-
-                       /* setup the decoder decoding parameters using the current image and user parameters */
-                       opj_setup_decoder(dinfo, &parameters);
-
-                       /* open a byte stream */
-                       cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
-
-                       /* decode the stream and fill the image structure */
-                       if (*indexfilename)                             /* If need to extract codestream information*/
-                               image = opj_decode_with_info(dinfo, cio, &cstr_info);
-                       else
-                               image = opj_decode(dinfo, cio);                 
-                       if(!image) {
-                               fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
-                               opj_destroy_decompress(dinfo);
-                               opj_cio_close(cio);
-                               free(src);
-                               return 1;
-                       }
-
-                       /* close the byte stream */
-                       opj_cio_close(cio);
-
-                       /* Write the index to disk */
-                       if (*indexfilename) {
-                               opj_bool bSuccess;
-                               bSuccess = write_index_file(&cstr_info, indexfilename);
-                               if (bSuccess) {
-                                       fprintf(stderr, "Failed to output index file\n");
-                               }
-                       }
-               }
-               break;
-
-               case JPT_CFMT:
-               {
-                       /* JPEG 2000, JPIP */
-
-                       /* get a decoder handle */
-                       dinfo = opj_create_decompress(CODEC_JPT);
-
-                       /* catch events using our callbacks and give a local context */
-                       opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
-
-                       /* setup the decoder decoding parameters using user parameters */
-                       opj_setup_decoder(dinfo, &parameters);
-
-                       /* open a byte stream */
-                       cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
-
-                       /* decode the stream and fill the image structure */
-                       if (*indexfilename)                             /* If need to extract codestream information*/
-                               image = opj_decode_with_info(dinfo, cio, &cstr_info);
-                       else
-                               image = opj_decode(dinfo, cio);
-                       if(!image) {
-                               fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
-                               opj_destroy_decompress(dinfo);
-                               opj_cio_close(cio);
-                               free(src);
-                               return 1;
-                       }
-
-                       /* close the byte stream */
-                       opj_cio_close(cio);
-
-                       /* Write the index to disk */
-                       if (*indexfilename) {
-                               opj_bool bSuccess;
-                               bSuccess = write_index_file(&cstr_info, indexfilename);
-                               if (bSuccess) {
-                                       fprintf(stderr, "Failed to output index file\n");
-                               }
-                       }
-               }
-               break;
-
-               default:
-                       fprintf(stderr, "skipping file..\n");
-                       continue;
-       }
-
-               /* free the memory containing the code-stream */
-               free(src);
-               src = NULL;
-
-       if(image->color_space == CLRSPC_SYCC)
-   {
-       color_sycc_to_rgb(image);
-   }
-
-       if(image->icc_profile_buf)
-   {
+int main(int argc, char **argv)
+{
+    opj_dparameters_t parameters;   /* decompression parameters */
+    img_fol_t img_fol;
+    opj_event_mgr_t event_mgr;      /* event manager */
+    opj_image_t *image = NULL;
+    FILE *fsrc = NULL;
+    unsigned char *src = NULL;
+    int file_length;
+    int num_images;
+    int i, imageno;
+    dircnt_t *dirptr = NULL;
+    opj_dinfo_t* dinfo = NULL;  /* handle to a decompressor */
+    opj_cio_t *cio = NULL;
+    opj_codestream_info_t cstr_info;  /* Codestream information structure */
+    char indexfilename[OPJ_PATH_LEN];   /* index file name */
+
+    /* configure the event callbacks (not required) */
+    memset(&event_mgr, 0, sizeof(opj_event_mgr_t));
+    event_mgr.error_handler = error_callback;
+    event_mgr.warning_handler = warning_callback;
+    event_mgr.info_handler = info_callback;
+
+    /* set decoding parameters to default values */
+    opj_set_default_decoder_parameters(&parameters);
+
+    /* Initialize indexfilename and img_fol */
+    *indexfilename = 0;
+    memset(&img_fol, 0, sizeof(img_fol_t));
+
+    /* parse input and get user encoding parameters */
+    if (parse_cmdline_decoder(argc, argv, &parameters, &img_fol,
+                              indexfilename) == 1) {
+        return 1;
+    }
+
+    /* Initialize reading of directory */
+    if (img_fol.set_imgdir == 1) {
+        num_images = get_num_images(img_fol.imgdirpath);
+
+        dirptr = (dircnt_t*)malloc(sizeof(dircnt_t));
+        if (dirptr) {
+            dirptr->filename_buf = (char*)malloc(num_images * OPJ_PATH_LEN * sizeof(
+                    char)); /* Stores at max 10 image file names*/
+            dirptr->filename = (char**) malloc(num_images * sizeof(char*));
+
+            if (!dirptr->filename_buf) {
+                return 1;
+            }
+            for (i = 0; i < num_images; i++) {
+                dirptr->filename[i] = dirptr->filename_buf + i * OPJ_PATH_LEN;
+            }
+        }
+        if (load_images(dirptr, img_fol.imgdirpath) == 1) {
+            return 1;
+        }
+        if (num_images == 0) {
+            fprintf(stdout, "Folder is empty\n");
+            return 1;
+        }
+    } else {
+        num_images = 1;
+    }
+
+    /*Encoding image one by one*/
+    for (imageno = 0; imageno < num_images ; imageno++)  {
+        image = NULL;
+        fprintf(stderr, "\n");
+
+        if (img_fol.set_imgdir == 1) {
+            if (get_next_file(imageno, dirptr, &img_fol, &parameters)) {
+                fprintf(stderr, "skipping file...\n");
+                continue;
+            }
+        }
+
+        /* read the input file and put it in memory */
+        /* ---------------------------------------- */
+        fsrc = fopen(parameters.infile, "rb");
+        if (!fsrc) {
+            fprintf(stderr, "ERROR -> failed to open %s for reading\n", parameters.infile);
+            return 1;
+        }
+        fseek(fsrc, 0, SEEK_END);
+        file_length = ftell(fsrc);
+        fseek(fsrc, 0, SEEK_SET);
+        src = (unsigned char *) malloc(file_length);
+        if (fread(src, 1, file_length, fsrc) != (size_t)file_length) {
+            free(src);
+            fclose(fsrc);
+            fprintf(stderr,
+                    "\nERROR: fread return a number of element different from the expected.\n");
+            return 1;
+        }
+        fclose(fsrc);
+
+        /* decode the code-stream */
+        /* ---------------------- */
+
+        switch (parameters.decod_format) {
+        case J2K_CFMT: {
+            /* JPEG-2000 codestream */
+
+            /* get a decoder handle */
+            dinfo = opj_create_decompress(CODEC_J2K);
+
+            /* catch events using our callbacks and give a local context */
+            opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
+
+            /* setup the decoder decoding parameters using user parameters */
+            opj_setup_decoder(dinfo, &parameters);
+
+            /* open a byte stream */
+            cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
+
+            /* decode the stream and fill the image structure */
+            if (*indexfilename) {           /* If need to extract codestream information*/
+                image = opj_decode_with_info(dinfo, cio, &cstr_info);
+            } else {
+                image = opj_decode(dinfo, cio);
+            }
+            if (!image) {
+                fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
+                opj_destroy_decompress(dinfo);
+                opj_cio_close(cio);
+                free(src);
+                return 1;
+            }
+
+            /* close the byte stream */
+            opj_cio_close(cio);
+
+            /* Write the index to disk */
+            if (*indexfilename) {
+                opj_bool bSuccess;
+                bSuccess = write_index_file(&cstr_info, indexfilename);
+                if (bSuccess) {
+                    fprintf(stderr, "Failed to output index file\n");
+                }
+            }
+        }
+        break;
+
+        case JP2_CFMT: {
+            /* JPEG 2000 compressed image data */
+
+            /* get a decoder handle */
+            dinfo = opj_create_decompress(CODEC_JP2);
+
+            /* catch events using our callbacks and give a local context */
+            opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
+
+            /* setup the decoder decoding parameters using the current image and user parameters */
+            opj_setup_decoder(dinfo, &parameters);
+
+            /* open a byte stream */
+            cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
+
+            /* decode the stream and fill the image structure */
+            if (*indexfilename) {           /* If need to extract codestream information*/
+                image = opj_decode_with_info(dinfo, cio, &cstr_info);
+            } else {
+                image = opj_decode(dinfo, cio);
+            }
+            if (!image) {
+                fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
+                opj_destroy_decompress(dinfo);
+                opj_cio_close(cio);
+                free(src);
+                return 1;
+            }
+
+            /* close the byte stream */
+            opj_cio_close(cio);
+
+            /* Write the index to disk */
+            if (*indexfilename) {
+                opj_bool bSuccess;
+                bSuccess = write_index_file(&cstr_info, indexfilename);
+                if (bSuccess) {
+                    fprintf(stderr, "Failed to output index file\n");
+                }
+            }
+        }
+        break;
+
+        case JPT_CFMT: {
+            /* JPEG 2000, JPIP */
+
+            /* get a decoder handle */
+            dinfo = opj_create_decompress(CODEC_JPT);
+
+            /* catch events using our callbacks and give a local context */
+            opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
+
+            /* setup the decoder decoding parameters using user parameters */
+            opj_setup_decoder(dinfo, &parameters);
+
+            /* open a byte stream */
+            cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);
+
+            /* decode the stream and fill the image structure */
+            if (*indexfilename) {           /* If need to extract codestream information*/
+                image = opj_decode_with_info(dinfo, cio, &cstr_info);
+            } else {
+                image = opj_decode(dinfo, cio);
+            }
+            if (!image) {
+                fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
+                opj_destroy_decompress(dinfo);
+                opj_cio_close(cio);
+                free(src);
+                return 1;
+            }
+
+            /* close the byte stream */
+            opj_cio_close(cio);
+
+            /* Write the index to disk */
+            if (*indexfilename) {
+                opj_bool bSuccess;
+                bSuccess = write_index_file(&cstr_info, indexfilename);
+                if (bSuccess) {
+                    fprintf(stderr, "Failed to output index file\n");
+                }
+            }
+        }
+        break;
+
+        default:
+            fprintf(stderr, "skipping file..\n");
+            continue;
+        }
+
+        /* free the memory containing the code-stream */
+        free(src);
+        src = NULL;
+
+        if (image->color_space == CLRSPC_SYCC) {
+            color_sycc_to_rgb(image);
+        }
+
+        if (image->icc_profile_buf) {
 #if defined(OPJ_HAVE_LIBLCMS1) || defined(OPJ_HAVE_LIBLCMS2)
-       color_apply_icc_profile(image);
+            color_apply_icc_profile(image);
 #endif
 
-       free(image->icc_profile_buf);
-       image->icc_profile_buf = NULL; image->icc_profile_len = 0;
-   }
-
-               /* create output image */
-               /* ------------------- */
-               switch (parameters.cod_format) {
-               case PXM_DFMT:                  /* PNM PGM PPM */
-                       if (imagetopnm(image, parameters.outfile)) {
-                               fprintf(stdout,"Outfile %s not generated\n",parameters.outfile);
-                       }
-                       else {
-                               fprintf(stdout,"Generated Outfile %s\n",parameters.outfile);
-                       }
-                       break;
-
-               case PGX_DFMT:                  /* PGX */
-                       if(imagetopgx(image, parameters.outfile)){
-                               fprintf(stdout,"Outfile %s not generated\n",parameters.outfile);
-                       }
-                       else {
-                               fprintf(stdout,"Generated Outfile %s\n",parameters.outfile);
-                       }
-                       break;
-
-               case BMP_DFMT:                  /* BMP */
-                       if(imagetobmp(image, parameters.outfile)){
-                               fprintf(stdout,"Outfile %s not generated\n",parameters.outfile);
-                       }
-                       else {
-                               fprintf(stdout,"Generated Outfile %s\n",parameters.outfile);
-                       }
-                       break;
+            free(image->icc_profile_buf);
+            image->icc_profile_buf = NULL;
+            image->icc_profile_len = 0;
+        }
+
+        /* create output image */
+        /* ------------------- */
+        switch (parameters.cod_format) {
+        case PXM_DFMT:          /* PNM PGM PPM */
+            if (imagetopnm(image, parameters.outfile)) {
+                fprintf(stdout, "Outfile %s not generated\n", parameters.outfile);
+            } else {
+                fprintf(stdout, "Generated Outfile %s\n", parameters.outfile);
+            }
+            break;
+
+        case PGX_DFMT:          /* PGX */
+            if (imagetopgx(image, parameters.outfile)) {
+                fprintf(stdout, "Outfile %s not generated\n", parameters.outfile);
+            } else {
+                fprintf(stdout, "Generated Outfile %s\n", parameters.outfile);
+            }
+            break;
+
+        case BMP_DFMT:          /* BMP */
+            if (imagetobmp(image, parameters.outfile)) {
+                fprintf(stdout, "Outfile %s not generated\n", parameters.outfile);
+            } else {
+                fprintf(stdout, "Generated Outfile %s\n", parameters.outfile);
+            }
+            break;
 #ifdef OPJ_HAVE_LIBTIFF
-               case TIF_DFMT:                  /* TIFF */
-                       if(imagetotif(image, parameters.outfile)){
-                               fprintf(stdout,"Outfile %s not generated\n",parameters.outfile);
-                       }
-                       else {
-                               fprintf(stdout,"Generated Outfile %s\n",parameters.outfile);
-                       }
-                       break;
+        case TIF_DFMT:          /* TIFF */
+            if (imagetotif(image, parameters.outfile)) {
+                fprintf(stdout, "Outfile %s not generated\n", parameters.outfile);
+            } else {
+                fprintf(stdout, "Generated Outfile %s\n", parameters.outfile);
+            }
+            break;
 #endif /* OPJ_HAVE_LIBTIFF */
-               case RAW_DFMT:                  /* RAW */
-                       if(imagetoraw(image, parameters.outfile)){
-                               fprintf(stdout,"Error generating raw file. Outfile %s not generated\n",parameters.outfile);
-                       }
-                       else {
-                               fprintf(stdout,"Successfully generated Outfile %s\n",parameters.outfile);
-                       }
-                       break;
-
-               case TGA_DFMT:                  /* TGA */
-                       if(imagetotga(image, parameters.outfile)){
-                               fprintf(stdout,"Error generating tga file. Outfile %s not generated\n",parameters.outfile);
-                       }
-                       else {
-                               fprintf(stdout,"Successfully generated Outfile %s\n",parameters.outfile);
-                       }
-                       break;
+        case RAW_DFMT:          /* RAW */
+            if (imagetoraw(image, parameters.outfile)) {
+                fprintf(stdout, "Error generating raw file. Outfile %s not generated\n",
+                        parameters.outfile);
+            } else {
+                fprintf(stdout, "Successfully generated Outfile %s\n", parameters.outfile);
+            }
+            break;
+
+        case TGA_DFMT:          /* TGA */
+            if (imagetotga(image, parameters.outfile)) {
+                fprintf(stdout, "Error generating tga file. Outfile %s not generated\n",
+                        parameters.outfile);
+            } else {
+                fprintf(stdout, "Successfully generated Outfile %s\n", parameters.outfile);
+            }
+            break;
 #ifdef OPJ_HAVE_LIBPNG
-               case PNG_DFMT:                  /* PNG */
-                       if(imagetopng(image, parameters.outfile)){
-                               fprintf(stdout,"Error generating png file. Outfile %s not generated\n",parameters.outfile);
-                       }
-                       else {
-                               fprintf(stdout,"Successfully generated Outfile %s\n",parameters.outfile);
-                       }
-                       break;
+        case PNG_DFMT:          /* PNG */
+            if (imagetopng(image, parameters.outfile)) {
+                fprintf(stdout, "Error generating png file. Outfile %s not generated\n",
+                        parameters.outfile);
+            } else {
+                fprintf(stdout, "Successfully generated Outfile %s\n", parameters.outfile);
+            }
+            break;
 #endif /* OPJ_HAVE_LIBPNG */
-/* Can happen if output file is TIFF or PNG
- * and OPJ_HAVE_LIBTIF or OPJ_HAVE_LIBPNG is undefined
-*/
-                       default:
-                               fprintf(stderr,"Outfile %s not generated\n",parameters.outfile);
-               }
-
-               /* free remaining structures */
-               if(dinfo) {
-                       opj_destroy_decompress(dinfo);
-               }
-               /* free codestream information structure */
-               if (*indexfilename)     
-                       opj_destroy_cstr_info(&cstr_info);
-               /* free image data structure */
-               opj_image_destroy(image);
-
-       }
-       return 0;
+        /* Can happen if output file is TIFF or PNG
+         * and OPJ_HAVE_LIBTIF or OPJ_HAVE_LIBPNG is undefined
+        */
+        default:
+            fprintf(stderr, "Outfile %s not generated\n", parameters.outfile);
+        }
+
+        /* free remaining structures */
+        if (dinfo) {
+            opj_destroy_decompress(dinfo);
+        }
+        /* free codestream information structure */
+        if (*indexfilename) {
+            opj_destroy_cstr_info(&cstr_info);
+        }
+        /* free image data structure */
+        opj_image_destroy(image);
+
+    }
+    return 0;
 }
 /*end main*/
 
index f5ca0be862a88fa496c4e69c4fde438a2d1bd674..352766bf0f4834fc1e4d730359f28cdd7ba9e350 100644 (file)
@@ -4,7 +4,7 @@
 /* Contributed to Open JPEG by Glenn Pearson, contract software developer, U.S. National Library of Medicine.
 
 The base code in this file was developed by the author as part of a video archiving
-project for the U.S. National Library of Medicine, Bethesda, MD. 
+project for the U.S. National Library of Medicine, Bethesda, MD.
 It is the policy of NLM (and U.S. government) to not assert copyright.
 
 A non-exclusive copy of this code has been contributed to the Open JPEG project.
@@ -28,16 +28,23 @@ static BOOL derived = TRUE;
 opj_tcp_t *j2k_default_tcp;
 
 /* Forwards */
-int xml_write_overall_header(FILE *file, FILE *xmlout, opj_mj2_t * movie, unsigned int sampleframe, opj_event_mgr_t *event_mgr);
-int xml_write_moov(FILE *file, FILE *xmlout, opj_mj2_t * movie, unsigned int sampleframe, opj_event_mgr_t *event_mgr);
+int xml_write_overall_header(FILE *file, FILE *xmlout, opj_mj2_t * movie,
+                             unsigned int sampleframe, opj_event_mgr_t *event_mgr);
+int xml_write_moov(FILE *file, FILE *xmlout, opj_mj2_t * movie,
+                   unsigned int sampleframe, opj_event_mgr_t *event_mgr);
 
 void uint_to_chars(unsigned int value, char* buf);
 
-void xml_write_trak(FILE* file, FILE* xmlout, mj2_tk_t *track, unsigned int tnum, unsigned int sampleframe, opj_event_mgr_t *event_mgr);
-void xml_write_tkhd(FILE* file, FILE* xmlout, mj2_tk_t *track, unsigned int tnum);
-void xml_write_udta(FILE* file, FILE* xmlout, mj2_tk_t *track, unsigned int tnum);
-void xml_write_mdia(FILE* file, FILE* xmlout, mj2_tk_t *track, unsigned int tnum);
-void xml_write_stbl(FILE* file, FILE* xmlout, mj2_tk_t *track, unsigned int tnum);
+void xml_write_trak(FILE* file, FILE* xmlout, mj2_tk_t *track,
+                    unsigned int tnum, unsigned int sampleframe, opj_event_mgr_t *event_mgr);
+void xml_write_tkhd(FILE* file, FILE* xmlout, mj2_tk_t *track,
+                    unsigned int tnum);
+void xml_write_udta(FILE* file, FILE* xmlout, mj2_tk_t *track,
+                    unsigned int tnum);
+void xml_write_mdia(FILE* file, FILE* xmlout, mj2_tk_t *track,
+                    unsigned int tnum);
+void xml_write_stbl(FILE* file, FILE* xmlout, mj2_tk_t *track,
+                    unsigned int tnum);
 
 void UnixTimeToFileTime(time_t t, LPFILETIME pft);
 void UnixTimeToSystemTime(time_t t, LPSYSTEMTIME pst);
@@ -49,227 +56,282 @@ void xml_write_moov_udta(FILE* xmlout, opj_mj2_t * movie);
 void xml_write_free_and_skip(FILE* xmlout, opj_mj2_t * movie);
 void xml_write_uuid(FILE* xmlout, opj_mj2_t * movie);
 
-int xml_out_frame(FILE* file, FILE* xmlout, mj2_sample_t *sample, unsigned int snum, opj_event_mgr_t *event_mgr);
+int xml_out_frame(FILE* file, FILE* xmlout, mj2_sample_t *sample,
+                  unsigned int snum, opj_event_mgr_t *event_mgr);
 
 void xml_out_frame_siz(FILE* xmlout, opj_image_t *img, opj_cp_t *cp);
 void xml_out_frame_cod(FILE* xmlout, opj_tcp_t *tcp);
-void xml_out_frame_coc(FILE* xmlout, opj_tcp_t *tcp, int numcomps); /* opj_image_t *img); */
+void xml_out_frame_coc(FILE* xmlout, opj_tcp_t *tcp,
+                       int numcomps); /* opj_image_t *img); */
 BOOL same_component_style(opj_tccp_t *tccp1, opj_tccp_t *tccp2);
 void xml_out_frame_qcd(FILE* xmlout, opj_tcp_t *tcp);
-void xml_out_frame_qcc(FILE* xmlout, opj_tcp_t *tcp, int numcomps); /* opj_image_t *img); */
+void xml_out_frame_qcc(FILE* xmlout, opj_tcp_t *tcp,
+                       int numcomps); /* opj_image_t *img); */
 BOOL same_component_quantization(opj_tccp_t *tccp1, opj_tccp_t *tccp2);
-void xml_out_frame_rgn(FILE* xmlout, opj_tcp_t *tcp, int numcomps);/* opj_image_t *img);*/
+void xml_out_frame_rgn(FILE* xmlout, opj_tcp_t *tcp,
+                       int numcomps);/* opj_image_t *img);*/
 void xml_out_frame_poc(FILE* xmlout, opj_tcp_t *tcp);
 void xml_out_frame_ppm(FILE* xmlout, opj_cp_t *cp);
 void xml_out_frame_ppt(FILE* xmlout, opj_tcp_t *tcp);
-void xml_out_frame_tlm(FILE* xmlout); /* j2k_default_tcp is passed globally */ /* NO-OP.  TLM NOT SAVED IN DATA STRUCTURE */
-void xml_out_frame_plm(FILE* xmlout); /* j2k_default_tcp is passed globally */ /* NO-OP.  PLM NOT SAVED IN DATA STRUCTURE.  opt in main; can be used in conjunction with PLT */
-void xml_out_frame_plt(FILE* xmlout, opj_tcp_t *tcp); /* NO-OP.  PLM NOT SAVED IN DATA STRUCTURE.  opt in main; can be used in conjunction with PLT */
-void xml_out_frame_crg(FILE* xmlout); /* j2k_default_tcp is passed globally */ /* opt in main; */
-void xml_out_frame_com(FILE* xmlout, opj_tcp_t *tcp); /* NO-OP.  COM NOT SAVED IN DATA STRUCTURE */ /* opt in main; */
+void xml_out_frame_tlm(FILE*
+                       xmlout); /* j2k_default_tcp is passed globally */ /* NO-OP.  TLM NOT SAVED IN DATA STRUCTURE */
+void xml_out_frame_plm(FILE*
+                       xmlout); /* j2k_default_tcp is passed globally */ /* NO-OP.  PLM NOT SAVED IN DATA STRUCTURE.  opt in main; can be used in conjunction with PLT */
+void xml_out_frame_plt(FILE* xmlout,
+                       opj_tcp_t *tcp); /* NO-OP.  PLM NOT SAVED IN DATA STRUCTURE.  opt in main; can be used in conjunction with PLT */
+void xml_out_frame_crg(FILE*
+                       xmlout); /* j2k_default_tcp is passed globally */ /* opt in main; */
+void xml_out_frame_com(FILE* xmlout,
+                       opj_tcp_t *tcp); /* NO-OP.  COM NOT SAVED IN DATA STRUCTURE */ /* opt in main; */
 void xml_out_dump_hex(FILE* xmlout, char *data, int data_len, char* s);
-void xml_out_dump_hex_and_ascii(FILE* xmlout, char *data, int data_len, char* s);
+void xml_out_dump_hex_and_ascii(FILE* xmlout, char *data, int data_len,
+                                char* s);
 void xml_out_frame_jp2h(FILE* xmlout, opj_jp2_t *jp2_struct);
 #ifdef NOTYET
 /* Shown with cp, extended, as data structure... but it could be a new different one */
-void xml_out_frame_jp2i(FILE* xmlout, opj_cp_t *cp);/* IntellectualProperty 'jp2i' (no restrictions on location) */
-void xml_out_frame_xml(FILE* xmlout, opj_cp_t *cp); /* XML 'xml\040' (0x786d6c20).  Can appear multiply */
-void xml_out_frame_uuid(FILE* xmlout, opj_cp_t *cp); /* UUID 'uuid' (top level only) */
-void xml_out_frame_uinf(FILE* xmlout, opj_cp_t *cp); /* UUIDInfo 'uinf', includes UUIDList 'ulst' and URL 'url\40' */
+void xml_out_frame_jp2i(FILE* xmlout,
+                        opj_cp_t *cp);/* IntellectualProperty 'jp2i' (no restrictions on location) */
+void xml_out_frame_xml(FILE* xmlout,
+                       opj_cp_t *cp); /* XML 'xml\040' (0x786d6c20).  Can appear multiply */
+void xml_out_frame_uuid(FILE* xmlout,
+                        opj_cp_t *cp); /* UUID 'uuid' (top level only) */
+void xml_out_frame_uinf(FILE* xmlout,
+                        opj_cp_t *cp); /* UUIDInfo 'uinf', includes UUIDList 'ulst' and URL 'url\40' */
 void xml_out_frame_unknown_type(FILE* xmlout, opj_cp_t *cp);
 #endif
 
 
 void xml_write_init(BOOL n, BOOL t, BOOL r, BOOL d)
 {
-  /* Init file globals */
-  notes = n;
-  sampletables = t;
-  raw = r;
-  derived = d;
+    /* Init file globals */
+    notes = n;
+    sampletables = t;
+    raw = r;
+    derived = d;
 }
 
-int xml_write_struct(FILE* file, FILE *xmlout, opj_mj2_t * movie, unsigned int sampleframe, char* stringDTD, opj_event_mgr_t *event_mgr) {
-
-  if(stringDTD != NULL)
-  {
-    fprintf(xmlout,"<?xml version=\"1.0\" standalone=\"no\"?>\n");
-       /* stringDTD is known to start with "SYSTEM " or "PUBLIC " */
-       /* typical: SYSTEM mj2_to_metadata.dtd */
-       stringDTD[6] = '\0'; /* Break into two strings at space, so quotes can be inserted. */
-    fprintf(xmlout,"<!DOCTYPE MJ2_File %s \"%s\">\n", stringDTD, stringDTD+7); 
-       stringDTD[6] = ' '; /* restore for sake of debugger or memory allocator */
-  } else
-    fprintf(xmlout,"<?xml version=\"1.0\" standalone=\"yes\"?>\n");    
-
-  fprintf(xmlout, "<MJ2_File>\n");
-  xml_write_overall_header(file, xmlout, movie, sampleframe, event_mgr);
-  fprintf(xmlout, "</MJ2_File>");
-  return 0;
+int xml_write_struct(FILE* file, FILE *xmlout, opj_mj2_t * movie,
+                     unsigned int sampleframe, char* stringDTD, opj_event_mgr_t *event_mgr)
+{
+
+    if (stringDTD != NULL) {
+        fprintf(xmlout, "<?xml version=\"1.0\" standalone=\"no\"?>\n");
+        /* stringDTD is known to start with "SYSTEM " or "PUBLIC " */
+        /* typical: SYSTEM mj2_to_metadata.dtd */
+        stringDTD[6] =
+            '\0'; /* Break into two strings at space, so quotes can be inserted. */
+        fprintf(xmlout, "<!DOCTYPE MJ2_File %s \"%s\">\n", stringDTD, stringDTD + 7);
+        stringDTD[6] = ' '; /* restore for sake of debugger or memory allocator */
+    } else {
+        fprintf(xmlout, "<?xml version=\"1.0\" standalone=\"yes\"?>\n");
+    }
+
+    fprintf(xmlout, "<MJ2_File>\n");
+    xml_write_overall_header(file, xmlout, movie, sampleframe, event_mgr);
+    fprintf(xmlout, "</MJ2_File>");
+    return 0;
 }
 
 /* ------------- */
 
-int xml_write_overall_header(FILE *file, FILE *xmlout, opj_mj2_t * movie, unsigned int sampleframe, opj_event_mgr_t *event_mgr)
+int xml_write_overall_header(FILE *file, FILE *xmlout, opj_mj2_t * movie,
+                             unsigned int sampleframe, opj_event_mgr_t *event_mgr)
 {
-  int i;
-  char buf[5];
-  buf[4] = '\0';
-
-  fprintf(xmlout,   "  <JP2 BoxType=\"jP[space][space]\" Signature=\"0x0d0a870a\" />\n");
-  // Called after structure initialized by mj2_read_ftyp
-  fprintf(xmlout,   "  <FileType BoxType=\"ftyp\">\n");
-  uint_to_chars(movie->brand, buf);
-  fprintf(xmlout,   "    <Brand>%s</Brand>\n", buf);    /* 4 character; BR              */
-  fprintf(xmlout,   "    <MinorVersion>%u</MinorVersion>\n", movie->minversion);    /* 4 char; MinV            */
-  fprintf(xmlout,   "    <CompatibilityList Count=\"%d\">\n",movie->num_cl);
-  for (i = movie->num_cl - 1; i > -1; i--) /* read routine stored in reverse order, so let's undo damage */
-  {
-    uint_to_chars(movie->cl[i], buf);
-    fprintf(xmlout, "      <CompatibleBrand>%s</CompatibleBrand>\n", buf);    /*4 characters, each CLi */
-  }
-  fprintf(xmlout,   "    </CompatibilityList>\n");
-  fprintf(xmlout,   "  </FileType>\n");
-  xml_write_moov(file, xmlout, movie, sampleframe, event_mgr);
-  // To come?              <mdat>  // This is the container for media data that can also be accessed through track structures,
-                                   // so is redundant, and simply not of interest as metadata
-  //                       <moof>  // Allows incremental build up of movie.  Probably not in Simple Profile
-  xml_write_free_and_skip(xmlout, movie); /* NO OP so far */ /* May be a place where user squirrels metadata */
-  xml_write_uuid(xmlout, movie); /* NO OP so far */ /* May be a place where user squirrels metadata */
-  return 0;
+    int i;
+    char buf[5];
+    buf[4] = '\0';
+
+    fprintf(xmlout,
+            "  <JP2 BoxType=\"jP[space][space]\" Signature=\"0x0d0a870a\" />\n");
+    // Called after structure initialized by mj2_read_ftyp
+    fprintf(xmlout,   "  <FileType BoxType=\"ftyp\">\n");
+    uint_to_chars(movie->brand, buf);
+    fprintf(xmlout,   "    <Brand>%s</Brand>\n",
+            buf);    /* 4 character; BR              */
+    fprintf(xmlout,   "    <MinorVersion>%u</MinorVersion>\n",
+            movie->minversion);    /* 4 char; MinV            */
+    fprintf(xmlout,   "    <CompatibilityList Count=\"%d\">\n", movie->num_cl);
+    for (i = movie->num_cl - 1; i > -1;
+            i--) { /* read routine stored in reverse order, so let's undo damage */
+        uint_to_chars(movie->cl[i], buf);
+        fprintf(xmlout, "      <CompatibleBrand>%s</CompatibleBrand>\n",
+                buf);    /*4 characters, each CLi */
+    }
+    fprintf(xmlout,   "    </CompatibilityList>\n");
+    fprintf(xmlout,   "  </FileType>\n");
+    xml_write_moov(file, xmlout, movie, sampleframe, event_mgr);
+    // To come?              <mdat>  // This is the container for media data that can also be accessed through track structures,
+    // so is redundant, and simply not of interest as metadata
+    //                       <moof>  // Allows incremental build up of movie.  Probably not in Simple Profile
+    xml_write_free_and_skip(xmlout,
+                            movie); /* NO OP so far */ /* May be a place where user squirrels metadata */
+    xml_write_uuid(xmlout,
+                   movie); /* NO OP so far */ /* May be a place where user squirrels metadata */
+    return 0;
 }
 
 /* ------------- */
 
-int xml_write_moov(FILE *file, FILE *xmlout, opj_mj2_t * movie, unsigned int sampleframe, opj_event_mgr_t *event_mgr)
+int xml_write_moov(FILE *file, FILE *xmlout, opj_mj2_t * movie,
+                   unsigned int sampleframe, opj_event_mgr_t *event_mgr)
 {
-  unsigned int tnum;
-  mj2_tk_t *track;
-
-  fprintf(xmlout,   "  <MovieBox BoxType=\"moov\">\n");
-  fprintf(xmlout,   "    <MovieHeader BoxType=\"mvhd\">\n");
-  fprintf(xmlout,   "      <CreationTime>\n");
-  if(raw)
-    fprintf(xmlout, "        <InSeconds>%u</InSeconds>\n", movie->creation_time);
-  if(notes)
-    fprintf(xmlout, "        <!-- Seconds since start of Jan. 1, 1904 UTC (Greenwich) -->\n");
-  /*  2082844800 = seconds between 1/1/04 and 1/1/70 */
-  /* There's still a time zone offset problem not solved... but spec is ambigous as to whether stored time
-     should be local or UTC */
-  if(derived) {
-    fprintf(xmlout, "        <AsLocalTime>"); 
-                             xml_time_out(xmlout, movie->creation_time - 2082844800);
-                                                     fprintf(xmlout,"</AsLocalTime>\n");
-  }
-  fprintf(xmlout,   "      </CreationTime>\n");
-  fprintf(xmlout,   "      <ModificationTime>\n");
-  if(raw)
-    fprintf(xmlout, "        <InSeconds>%u</InSeconds>\n", movie->modification_time);
-  if(derived) {
-    fprintf(xmlout, "        <AsLocalTime>"); 
-                             xml_time_out(xmlout, movie->modification_time - 2082844800);
-                                                     fprintf(xmlout,"</AsLocalTime>\n");
-  }
-  fprintf(xmlout,   "      </ModificationTime>\n");
-  fprintf(xmlout,   "      <Timescale>%d</Timescale>\n", movie->timescale);
-  if(notes)
-    fprintf(xmlout, "      <!-- Timescale defines time units in one second -->\n");
-  fprintf(xmlout,   "      <Rate>\n");        /* Rate to play presentation  (default = 0x00010000)          */
-  if(notes) {
-    fprintf(xmlout, "      <!-- Rate to play presentation is stored as fixed-point binary 16.16 value. Decimal value is approximation. -->\n");
-    fprintf(xmlout, "      <!-- Rate is expressed relative to normal (default) value of 0x00010000 (1.0) -->\n");
-  }
-  if(raw)
-    fprintf(xmlout, "        <AsHex>0x%08x</AsHex>\n", movie->rate);
-  if(derived)
-    fprintf(xmlout, "        <AsDecimal>%12.6f</AsDecimal>\n", (double)movie->rate/(double)0x00010000);
-  fprintf(xmlout,   "      </Rate>\n");
-  fprintf(xmlout,   "      <Duration>\n");
-  if(raw)
-    fprintf(xmlout, "        <InTimeUnits>%u</InTimeUnits>\n", movie->duration);
-  if(derived)
-    fprintf(xmlout, "        <InSeconds>%12.3f</InSeconds>\n", (double)movie->duration/(double)movie->timescale);    // Make this double later to get fractional seconds
-  fprintf(xmlout,   "      </Duration>\n");
+    unsigned int tnum;
+    mj2_tk_t *track;
+
+    fprintf(xmlout,   "  <MovieBox BoxType=\"moov\">\n");
+    fprintf(xmlout,   "    <MovieHeader BoxType=\"mvhd\">\n");
+    fprintf(xmlout,   "      <CreationTime>\n");
+    if (raw) {
+        fprintf(xmlout, "        <InSeconds>%u</InSeconds>\n", movie->creation_time);
+    }
+    if (notes) {
+        fprintf(xmlout,
+                "        <!-- Seconds since start of Jan. 1, 1904 UTC (Greenwich) -->\n");
+    }
+    /*  2082844800 = seconds between 1/1/04 and 1/1/70 */
+    /* There's still a time zone offset problem not solved... but spec is ambigous as to whether stored time
+       should be local or UTC */
+    if (derived) {
+        fprintf(xmlout, "        <AsLocalTime>");
+        xml_time_out(xmlout, movie->creation_time - 2082844800);
+        fprintf(xmlout, "</AsLocalTime>\n");
+    }
+    fprintf(xmlout,   "      </CreationTime>\n");
+    fprintf(xmlout,   "      <ModificationTime>\n");
+    if (raw) {
+        fprintf(xmlout, "        <InSeconds>%u</InSeconds>\n",
+                movie->modification_time);
+    }
+    if (derived) {
+        fprintf(xmlout, "        <AsLocalTime>");
+        xml_time_out(xmlout, movie->modification_time - 2082844800);
+        fprintf(xmlout, "</AsLocalTime>\n");
+    }
+    fprintf(xmlout,   "      </ModificationTime>\n");
+    fprintf(xmlout,   "      <Timescale>%d</Timescale>\n", movie->timescale);
+    if (notes) {
+        fprintf(xmlout, "      <!-- Timescale defines time units in one second -->\n");
+    }
+    fprintf(xmlout,
+            "      <Rate>\n");        /* Rate to play presentation  (default = 0x00010000)          */
+    if (notes) {
+        fprintf(xmlout,
+                "      <!-- Rate to play presentation is stored as fixed-point binary 16.16 value. Decimal value is approximation. -->\n");
+        fprintf(xmlout,
+                "      <!-- Rate is expressed relative to normal (default) value of 0x00010000 (1.0) -->\n");
+    }
+    if (raw) {
+        fprintf(xmlout, "        <AsHex>0x%08x</AsHex>\n", movie->rate);
+    }
+    if (derived) {
+        fprintf(xmlout, "        <AsDecimal>%12.6f</AsDecimal>\n",
+                (double)movie->rate / (double)0x00010000);
+    }
+    fprintf(xmlout,   "      </Rate>\n");
+    fprintf(xmlout,   "      <Duration>\n");
+    if (raw) {
+        fprintf(xmlout, "        <InTimeUnits>%u</InTimeUnits>\n", movie->duration);
+    }
+    if (derived) {
+        fprintf(xmlout, "        <InSeconds>%12.3f</InSeconds>\n",
+                (double)movie->duration / (double)
+                movie->timescale);    // Make this double later to get fractional seconds
+    }
+    fprintf(xmlout,   "      </Duration>\n");
 #ifdef CURRENTSTRUCT
-  movie->volume = movie->volume << 8;
+    movie->volume = movie->volume << 8;
 #endif
-  fprintf(xmlout,   "      <Volume>\n");
-  if(notes) {
-    fprintf(xmlout, "      <!-- Audio volume stored as fixed-point binary 8.8 value. Decimal value is approximation. -->\n");
-    fprintf(xmlout, "      <!-- Full, normal (default) value is 0x0100 (1.0) -->\n");
-  }
-  if(raw)
-    fprintf(xmlout, "        <AsHex>0x%04x</AsHex>\n", movie->volume);
-  if(derived)
-    fprintf(xmlout, "        <AsDecimal>%6.3f</AsDecimal>\n", (double)movie->volume/(double)0x0100);
-  fprintf(xmlout,   "      </Volume>\n");
+    fprintf(xmlout,   "      <Volume>\n");
+    if (notes) {
+        fprintf(xmlout,
+                "      <!-- Audio volume stored as fixed-point binary 8.8 value. Decimal value is approximation. -->\n");
+        fprintf(xmlout,
+                "      <!-- Full, normal (default) value is 0x0100 (1.0) -->\n");
+    }
+    if (raw) {
+        fprintf(xmlout, "        <AsHex>0x%04x</AsHex>\n", movie->volume);
+    }
+    if (derived) {
+        fprintf(xmlout, "        <AsDecimal>%6.3f</AsDecimal>\n",
+                (double)movie->volume / (double)0x0100);
+    }
+    fprintf(xmlout,   "      </Volume>\n");
 #ifdef CURRENTSTRUCT
-  if(notes)
-    fprintf(xmlout, "      <!-- Current m2j_to_metadata implementation always shows bits to right of decimal as zeroed. -->\n");
-  movie->volume = movie->volume >> 8;
+    if (notes) {
+        fprintf(xmlout,
+                "      <!-- Current m2j_to_metadata implementation always shows bits to right of decimal as zeroed. -->\n");
+    }
+    movie->volume = movie->volume >> 8;
 #endif
-  /* Transformation matrix for video                            */
-  fprintf(xmlout,   "      <TransformationMatrix>\n");
-  if(notes) {
-    fprintf(xmlout, "      <!-- 3 x 3 Video Transformation Matrix {a,b,u,c,d,v,x,y,w}.  Required: u=0, v=0, w=1 -->\n");
-    fprintf(xmlout, "      <!-- Maps decompressed point (p,q) to rendered point (ap + cq + x, bp + dq + y) -->\n");
-    fprintf(xmlout, "      <!-- Stored as Fixed Point Hex: all are binary 16.16, except u,v,w are 2.30 -->\n");
-    fprintf(xmlout, "      <!-- Unity = 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 -->\n");
-  }
-  fprintf(xmlout,   "        <TMa>0x%08x</TMa>\n", movie->trans_matrix[0]);    
-  fprintf(xmlout,   "        <TMb>0x%08x</TMb>\n", movie->trans_matrix[1]);    
-  fprintf(xmlout,   "        <TMu>0x%08x</TMu>\n", movie->trans_matrix[2]);    
-  fprintf(xmlout,   "        <TMc>0x%08x</TMc>\n", movie->trans_matrix[3]);    
-  fprintf(xmlout,   "        <TMd>0x%08x</TMd>\n", movie->trans_matrix[4]);    
-  fprintf(xmlout,   "        <TMv>0x%08x</TMv>\n", movie->trans_matrix[5]);    
-  fprintf(xmlout,   "        <TMx>0x%08x</TMx>\n", movie->trans_matrix[6]);    
-  fprintf(xmlout,   "        <TMy>0x%08x</TMy>\n", movie->trans_matrix[7]);    
-  fprintf(xmlout,   "        <TMw>0x%08x</TMw>\n", movie->trans_matrix[8]);
-  fprintf(xmlout,   "      </TransformationMatrix>\n");
-  fprintf(xmlout,   "    </MovieHeader>\n");
-  
-  fprintf(xmlout,   "    <Statistics>\n");
-  fprintf(xmlout,   "      <TracksFound>\n");
-  fprintf(xmlout,   "        <Video>%d</Video>\n", movie->num_vtk);
-  fprintf(xmlout,   "        <Audio>%d</Audio>\n", movie->num_stk);
-  fprintf(xmlout,   "        <Hint>%d</Hint>\n", movie->num_htk);
-  if(notes)
-    fprintf(xmlout, "        <!-- Hint tracks for streaming video are not part of MJ2, but are a defined extension. -->\n");
-  /* See Part 3 Amend 2 Section 4.2 for relation of MJ2 to Part 12 Sections 7 and 10 hints */
-  fprintf(xmlout,   "      </TracksFound>\n");
-  fprintf(xmlout,   "    </Statistics>\n");
-  /* Idea for the future:  It would be possible to add code to verify that the file values:
-    1) are legal and self-consistent
-       2) comply with particular JP2 and/or MJ2 profiles.
-       This could be reported here as additional XML elements */
-
-  // Find first video track 
-  tnum = 0;
-  while (movie->tk[tnum].track_type != 0)
-    tnum ++;
-
-  track = &(movie->tk[tnum]);
-  // For now, output info on first video track
-  xml_write_trak(file, xmlout, track, tnum, sampleframe, event_mgr);
-
-  // to come:                <MovieExtends mvek> // possibly not in Simple Profile
-  xml_write_moov_udta(xmlout, movie); /* NO OP so far */ /* <UserDataBox udta> contains <CopyrightBox cprt> */
-  fprintf(xmlout,   "  </MovieBox>\n");
-  return 0;
+    /* Transformation matrix for video                            */
+    fprintf(xmlout,   "      <TransformationMatrix>\n");
+    if (notes) {
+        fprintf(xmlout,
+                "      <!-- 3 x 3 Video Transformation Matrix {a,b,u,c,d,v,x,y,w}.  Required: u=0, v=0, w=1 -->\n");
+        fprintf(xmlout,
+                "      <!-- Maps decompressed point (p,q) to rendered point (ap + cq + x, bp + dq + y) -->\n");
+        fprintf(xmlout,
+                "      <!-- Stored as Fixed Point Hex: all are binary 16.16, except u,v,w are 2.30 -->\n");
+        fprintf(xmlout,
+                "      <!-- Unity = 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 -->\n");
+    }
+    fprintf(xmlout,   "        <TMa>0x%08x</TMa>\n", movie->trans_matrix[0]);
+    fprintf(xmlout,   "        <TMb>0x%08x</TMb>\n", movie->trans_matrix[1]);
+    fprintf(xmlout,   "        <TMu>0x%08x</TMu>\n", movie->trans_matrix[2]);
+    fprintf(xmlout,   "        <TMc>0x%08x</TMc>\n", movie->trans_matrix[3]);
+    fprintf(xmlout,   "        <TMd>0x%08x</TMd>\n", movie->trans_matrix[4]);
+    fprintf(xmlout,   "        <TMv>0x%08x</TMv>\n", movie->trans_matrix[5]);
+    fprintf(xmlout,   "        <TMx>0x%08x</TMx>\n", movie->trans_matrix[6]);
+    fprintf(xmlout,   "        <TMy>0x%08x</TMy>\n", movie->trans_matrix[7]);
+    fprintf(xmlout,   "        <TMw>0x%08x</TMw>\n", movie->trans_matrix[8]);
+    fprintf(xmlout,   "      </TransformationMatrix>\n");
+    fprintf(xmlout,   "    </MovieHeader>\n");
+
+    fprintf(xmlout,   "    <Statistics>\n");
+    fprintf(xmlout,   "      <TracksFound>\n");
+    fprintf(xmlout,   "        <Video>%d</Video>\n", movie->num_vtk);
+    fprintf(xmlout,   "        <Audio>%d</Audio>\n", movie->num_stk);
+    fprintf(xmlout,   "        <Hint>%d</Hint>\n", movie->num_htk);
+    if (notes) {
+        fprintf(xmlout,
+                "        <!-- Hint tracks for streaming video are not part of MJ2, but are a defined extension. -->\n");
+    }
+    /* See Part 3 Amend 2 Section 4.2 for relation of MJ2 to Part 12 Sections 7 and 10 hints */
+    fprintf(xmlout,   "      </TracksFound>\n");
+    fprintf(xmlout,   "    </Statistics>\n");
+    /* Idea for the future:  It would be possible to add code to verify that the file values:
+      1) are legal and self-consistent
+    2) comply with particular JP2 and/or MJ2 profiles.
+    This could be reported here as additional XML elements */
+
+    // Find first video track
+    tnum = 0;
+    while (movie->tk[tnum].track_type != 0) {
+        tnum ++;
+    }
+
+    track = &(movie->tk[tnum]);
+    // For now, output info on first video track
+    xml_write_trak(file, xmlout, track, tnum, sampleframe, event_mgr);
+
+    // to come:                <MovieExtends mvek> // possibly not in Simple Profile
+    xml_write_moov_udta(xmlout,
+                        movie); /* NO OP so far */ /* <UserDataBox udta> contains <CopyrightBox cprt> */
+    fprintf(xmlout,   "  </MovieBox>\n");
+    return 0;
 }
 
 /* --------------- */
 
 void uint_to_chars(unsigned int value, char* buf)
 {
-       /* buf is at least char[5] */
+    /* buf is at least char[5] */
     int i;
-    for (i = 3; i >= 0; i--)
-    {
+    for (i = 3; i >= 0; i--) {
         buf[i] = (value & 0x000000ff);
         value = (value >> 8);
     }
-       buf[4] = '\0'; /* Precautionary */
+    buf[4] = '\0'; /* Precautionary */
 }
 
 /* ------------- */
@@ -278,15 +340,15 @@ void uint_to_chars(unsigned int value, char* buf)
 
 void UnixTimeToFileTime(time_t t, LPFILETIME pft)
 {
-  /* Windows specific.  From MS Q167296 */
-  /* 'time_t' represents seconds since midnight January 1, 1970 UTC (coordinated universal time). */
-  /* 64-bit FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601 UTC (coordinate universal time). */
-  LONGLONG ll; /* LONGLONG is a 64-bit value. */
-  ll = Int32x32To64(t, 10000000) + 116444736000000000;
-  pft->dwLowDateTime = (DWORD)ll;
-  /* pft->dwLowDateTime = (DWORD)(0x00000000ffffffff & ll); */
-  pft->dwHighDateTime = (DWORD)(ll >> 32);
-} 
+    /* Windows specific.  From MS Q167296 */
+    /* 'time_t' represents seconds since midnight January 1, 1970 UTC (coordinated universal time). */
+    /* 64-bit FILETIME structure represents the number of 100-nanosecond intervals since January 1, 1601 UTC (coordinate universal time). */
+    LONGLONG ll; /* LONGLONG is a 64-bit value. */
+    ll = Int32x32To64(t, 10000000) + 116444736000000000;
+    pft->dwLowDateTime = (DWORD)ll;
+    /* pft->dwLowDateTime = (DWORD)(0x00000000ffffffff & ll); */
+    pft->dwHighDateTime = (DWORD)(ll >> 32);
+}
 // Once the UNIX time is converted to a FILETIME structure,
 // other Win32 time formats can be easily obtained by using Win32 functions such
 // as FileTimeToSystemTime() and FileTimeToDosDateTime().
@@ -295,758 +357,986 @@ void UnixTimeToFileTime(time_t t, LPFILETIME pft)
 
 void UnixTimeToSystemTime(time_t t, LPSYSTEMTIME pst)
 {
-  /* Windows specific */
-  FILETIME ft;
-  UnixTimeToFileTime(t, &ft);
-  FileTimeToLocalFileTime( &ft, &ft ); /* Adjust from UTC to local time zone */
-  FileTimeToSystemTime(&ft, pst);
+    /* Windows specific */
+    FILETIME ft;
+    UnixTimeToFileTime(t, &ft);
+    FileTimeToLocalFileTime(&ft, &ft);   /* Adjust from UTC to local time zone */
+    FileTimeToSystemTime(&ft, pst);
 }
 
 /* ------------- */
 
 void xml_time_out(FILE* xmlout, time_t t)
 {
-  /* Windows specific */
-  SYSTEMTIME st;
-  char szLocalDate[255], szLocalTime[255];
-  UnixTimeToSystemTime( t, &st );
-  GetDateFormat( LOCALE_USER_DEFAULT, DATE_LONGDATE, &st, NULL, szLocalDate, 255 );
-  GetTimeFormat( LOCALE_USER_DEFAULT, 0, &st, NULL, szLocalTime, 255 );
-  fprintf(xmlout, "%s %s", szLocalDate, szLocalTime ); 
+    /* Windows specific */
+    SYSTEMTIME st;
+    char szLocalDate[255], szLocalTime[255];
+    UnixTimeToSystemTime(t, &st);
+    GetDateFormat(LOCALE_USER_DEFAULT, DATE_LONGDATE, &st, NULL, szLocalDate, 255);
+    GetTimeFormat(LOCALE_USER_DEFAULT, 0, &st, NULL, szLocalTime, 255);
+    fprintf(xmlout, "%s %s", szLocalDate, szLocalTime);
 }
 
 /* END WINDOWS SPECIFIC */
 
 /* ------------- */
 
-void xml_write_moov_udta(FILE* xmlout, opj_mj2_t * movie) {
-  /* Compare with xml_write_udta */
+void xml_write_moov_udta(FILE* xmlout, opj_mj2_t * movie)
+{
+    /* Compare with xml_write_udta */
 #ifdef NOTYET
-  /* NO-OP so far.  Optional UserData 'udta' (zero or one in moov or each trak)
-     can contain multiple Copyright 'cprt' with different language codes */
-  /* There may be nested non-standard boxes within udta */
-  IMAGINE movie->udta, movie->copyright_count, movie->copyright_language[i] (array of 16bit ints), movie->copyright_notice[i] (array of buffers)
-  PROBABLY ALSO NEED movie->udta_len or special handler for non-standard boxes
-  char buf[5];
-  int i;
-
-  if(movie->udta != 1)
-         return; /* Not present */
-
-  fprintf(xmlout,    "    <UserData BoxType=\"udta\">\n");
-  for(i = 0; i < movie->copyright_count; i++) {
-    fprintf(xmlout,  "      <Copyright BoxType=\"cprt\"> Instance=\"%d\">\n", i+1);
-    int16_to_3packedchars((short int)movie->copyright_languages[i], buf);
-    fprintf(xmlout,  "        <Language>%s</Language>\n", buf);    /* 3 chars */
-    fprintf(xmlout,  "        <Notice>%s</Notice>\n",movie->copyright_notices[i]);
-    fprintf(xmlout,  "      </Copyright>\n", i+1);
-  }
-  /* TO DO: Non-standard boxes */
-  fprintf(xmlout,    "    </UserData>\n");
+    /* NO-OP so far.  Optional UserData 'udta' (zero or one in moov or each trak)
+       can contain multiple Copyright 'cprt' with different language codes */
+    /* There may be nested non-standard boxes within udta */
+    IMAGINE movie->udta, movie->copyright_count,
+            movie->copyright_language[i](array of 16bit ints),
+            movie->copyright_notice[i](array of buffers)
+            PROBABLY ALSO NEED movie->udta_len or special handler for non - standard boxes
+            char buf[5];
+    int i;
+
+    if (movie->udta != 1) {
+        return;    /* Not present */
+    }
+
+    fprintf(xmlout,    "    <UserData BoxType=\"udta\">\n");
+    for (i = 0; i < movie->copyright_count; i++) {
+        fprintf(xmlout,  "      <Copyright BoxType=\"cprt\"> Instance=\"%d\">\n",
+                i + 1);
+        int16_to_3packedchars((short int)movie->copyright_languages[i], buf);
+        fprintf(xmlout,  "        <Language>%s</Language>\n", buf);    /* 3 chars */
+        fprintf(xmlout,  "        <Notice>%s</Notice>\n", movie->copyright_notices[i]);
+        fprintf(xmlout,  "      </Copyright>\n", i + 1);
+    }
+    /* TO DO: Non-standard boxes */
+    fprintf(xmlout,    "    </UserData>\n");
 #endif
 }
 
-void xml_write_free_and_skip(FILE* xmlout, opj_mj2_t * movie) {
+void xml_write_free_and_skip(FILE* xmlout, opj_mj2_t * movie)
+{
 #ifdef NOTYET
-  /* NO-OP so far.  There can be zero or more instances of free and/or skip
-     at the top level of the file.  This may be a place where the user squirrel's metadata.
-        Let's assume unstructured, and do a dump */
-  IMAGINE movie->free_and_skip, movie->free_and_skip_count, movie->free_and_skip_content[i] (array of buffers),
-         movie->free_and_skip_len[i] (array of ints), movie->is_skip[i] (array of BOOL)
-  int i;
-
-  if(movie->free_and_skip != 1)
-         return; /* Not present */
-
-  for(i = 0; i < movie->free_and_skip_count; i++) {
-    if(movie->is_skip[i])
-      fprintf(xmlout,    "  <Skip BoxType=\"skip\">\n");
-       else
-      fprintf(xmlout,    "  <Free BoxType=\"free\">\n");
-
-    xml_out_dump_hex_and_ascii(xmlout, movie->free_and_skip_contents[i], movie->free_and_skip_len[i]);
-
-    if(movie->is_skip[i])
-      fprintf(xmlout,    "  </Skip>\n");
-       else
-      fprintf(xmlout,    "  </Free>\n");
-  }
+    /* NO-OP so far.  There can be zero or more instances of free and/or skip
+       at the top level of the file.  This may be a place where the user squirrel's metadata.
+     Let's assume unstructured, and do a dump */
+    IMAGINE movie->free_and_skip, movie->free_and_skip_count,
+            movie->free_and_skip_content[i](array of buffers),
+            movie->free_and_skip_len[i](array of ints), movie->is_skip[i](array of BOOL)
+            int i;
+
+    if (movie->free_and_skip != 1) {
+        return;    /* Not present */
+    }
+
+    for (i = 0; i < movie->free_and_skip_count; i++) {
+        if (movie->is_skip[i]) {
+            fprintf(xmlout,    "  <Skip BoxType=\"skip\">\n");
+        } else {
+            fprintf(xmlout,    "  <Free BoxType=\"free\">\n");
+        }
+
+        xml_out_dump_hex_and_ascii(xmlout, movie->free_and_skip_contents[i],
+                                   movie->free_and_skip_len[i]);
+
+        if (movie->is_skip[i]) {
+            fprintf(xmlout,    "  </Skip>\n");
+        } else {
+            fprintf(xmlout,    "  </Free>\n");
+        }
+    }
 #endif
 }
 
-void xml_write_uuid(FILE* xmlout, opj_mj2_t * movie) {
-/* Universal Unique IDs of 16 bytes.  */
+void xml_write_uuid(FILE* xmlout, opj_mj2_t * movie)
+{
+    /* Universal Unique IDs of 16 bytes.  */
 #ifdef NOTYET
-  /* NO-OP so far.  There can be zero or more instances of private uuid boxes in a file.
-     This function supports the top level of the file, but uuid may be elsewhere [not yet supported].
-        This may be a place where the user squirrel's metadata.  Let's assume unstructured, and do a dump */
-  IMAGINE movie->uuid, movie->uuid_count, movie->uuid_content[i] (array of buffers),
-         movie->uuid_len[i] (array of ints), movie->uuid_type[i] (array of 17-byte (16+null termination) buffers)
-  int i;
-
-  if(movie->uuid != 1)
-         return; /* Not present */
-
-  for(i = 0; i < movie->uuid_count; i++) {
-    fprintf(xmlout,    "  <PrivateExtension BoxType=\"uuid\" UUID=\"%s\">\n", movie->uuid_type[i]);
-       // See Part III section 5.2.1, 6.1, 6.2
-    xml_out_dump_hex_and_ascii(xmlout, movie->uuid_contents[i], movie->uuid_len[i]);
-    fprintf(xmlout,    "  </PrivateExtension>\n");
-  }
+    /* NO-OP so far.  There can be zero or more instances of private uuid boxes in a file.
+       This function supports the top level of the file, but uuid may be elsewhere [not yet supported].
+     This may be a place where the user squirrel's metadata.  Let's assume unstructured, and do a dump */
+    IMAGINE movie->uuid, movie->uuid_count,
+            movie->uuid_content[i](array of buffers),
+            movie->uuid_len[i](array of ints),
+            movie->uuid_type[i](array of 17 - byte(16 + null termination) buffers)
+            int i;
+
+    if (movie->uuid != 1) {
+        return;    /* Not present */
+    }
+
+    for (i = 0; i < movie->uuid_count; i++) {
+        fprintf(xmlout,    "  <PrivateExtension BoxType=\"uuid\" UUID=\"%s\">\n",
+                movie->uuid_type[i]);
+        // See Part III section 5.2.1, 6.1, 6.2
+        xml_out_dump_hex_and_ascii(xmlout, movie->uuid_contents[i], movie->uuid_len[i]);
+        fprintf(xmlout,    "  </PrivateExtension>\n");
+    }
 #endif
 }
 
 /* ------------- */
 
-void xml_write_trak(FILE* file, FILE* xmlout, mj2_tk_t *track, unsigned int tnum, unsigned int sampleframe, opj_event_mgr_t *event_mgr)
+void xml_write_trak(FILE* file, FILE* xmlout, mj2_tk_t *track,
+                    unsigned int tnum, unsigned int sampleframe, opj_event_mgr_t *event_mgr)
 {
-  fprintf(xmlout,    "    <Track BoxType=\"trak\" Instance=\"%d\">\n", tnum);
-  xml_write_tkhd(file, xmlout, track, tnum);
-  // TO DO: TrackReferenceContainer 'tref'  just used in hint track
-  // TO DO: EditListContainer 'edts', contains EditList 'elst' with media-time, segment-duration, media-rate
-  xml_write_mdia(file, xmlout, track, tnum);
-  xml_write_udta(file, xmlout, track, tnum); // NO-OP so far.  Optional UserData 'udta', can contain multiple Copyright 'cprt'
-
-  if(track->track_type==0) { /* Only do for visual track */
-       /* sampleframe is from user option -f.  1 = first frame */
-    /* sampleframe of 0 is a user requests: no jp2 header */
-       /* Treat out-of-bounds values in the same way */
-       if(sampleframe > 0 && sampleframe <= track->num_samples) 
-    {
-      mj2_sample_t *sample;
-      unsigned int snum;
-
-      snum = sampleframe-1;
-      // Someday maybe do a smart range scan... for (snum=0; snum < track->num_samples; snum++){
-      //  fprintf(stdout,"Frame %d: ",snum+1);
-      sample = &track->sample[snum];
-         if(xml_out_frame(file, xmlout, sample, snum, event_mgr))
-           return; /* Not great error handling here */
-    }
-  }
-  fprintf(xmlout,    "    </Track>\n");
+    fprintf(xmlout,    "    <Track BoxType=\"trak\" Instance=\"%d\">\n", tnum);
+    xml_write_tkhd(file, xmlout, track, tnum);
+    // TO DO: TrackReferenceContainer 'tref'  just used in hint track
+    // TO DO: EditListContainer 'edts', contains EditList 'elst' with media-time, segment-duration, media-rate
+    xml_write_mdia(file, xmlout, track, tnum);
+    xml_write_udta(file, xmlout, track,
+                   tnum); // NO-OP so far.  Optional UserData 'udta', can contain multiple Copyright 'cprt'
+
+    if (track->track_type == 0) { /* Only do for visual track */
+        /* sampleframe is from user option -f.  1 = first frame */
+        /* sampleframe of 0 is a user requests: no jp2 header */
+        /* Treat out-of-bounds values in the same way */
+        if (sampleframe > 0 && sampleframe <= track->num_samples) {
+            mj2_sample_t *sample;
+            unsigned int snum;
+
+            snum = sampleframe - 1;
+            // Someday maybe do a smart range scan... for (snum=0; snum < track->num_samples; snum++){
+            //  fprintf(stdout,"Frame %d: ",snum+1);
+            sample = &track->sample[snum];
+            if (xml_out_frame(file, xmlout, sample, snum, event_mgr)) {
+                return;    /* Not great error handling here */
+            }
+        }
+    }
+    fprintf(xmlout,    "    </Track>\n");
 }
 
 /* ------------- */
 
-void xml_write_tkhd(FILE* file, FILE* xmlout, mj2_tk_t *track, unsigned int tnum)
+void xml_write_tkhd(FILE* file, FILE* xmlout, mj2_tk_t *track,
+                    unsigned int tnum)
 {
-  fprintf(xmlout,    "      <TrackHeader BoxType=\"tkhd\">\n");
-  if(notes) {
-    fprintf(xmlout,  "      <!-- Not shown here: CreationTime, ModificationTime, Duration. -->\n");
-    fprintf(xmlout,  "      <!-- These 3 fields are reported under MediaHeader below.   When reading these 3, -->\n");
-    fprintf(xmlout,  "      <!-- m2j_to_metadata currently doesn't distinguish between TrackHeader and MediaHeader source. -->\n");
-    fprintf(xmlout,  "      <!-- If both found, value read from MediaHeader is used. -->\n");
-  }
-  fprintf(xmlout,    "        <TrackID>%u</TrackID>\n", track->track_ID);
-  if(track->track_type==0) /* For visual track */
-  {
-    fprintf(xmlout,  "        <TrackLayer>%d</TrackLayer>\n", track->layer);
-    if(notes)
-      fprintf(xmlout,"        <!-- front-to-back ordering of video tracks. 0 = normal, -1 is closer, etc. -->\n");
-  }
-  if(track->track_type!=0) /* volume irrelevant for visual track */
-  {
+    fprintf(xmlout,    "      <TrackHeader BoxType=\"tkhd\">\n");
+    if (notes) {
+        fprintf(xmlout,
+                "      <!-- Not shown here: CreationTime, ModificationTime, Duration. -->\n");
+        fprintf(xmlout,
+                "      <!-- These 3 fields are reported under MediaHeader below.   When reading these 3, -->\n");
+        fprintf(xmlout,
+                "      <!-- m2j_to_metadata currently doesn't distinguish between TrackHeader and MediaHeader source. -->\n");
+        fprintf(xmlout,
+                "      <!-- If both found, value read from MediaHeader is used. -->\n");
+    }
+    fprintf(xmlout,    "        <TrackID>%u</TrackID>\n", track->track_ID);
+    if (track->track_type == 0) { /* For visual track */
+        fprintf(xmlout,  "        <TrackLayer>%d</TrackLayer>\n", track->layer);
+        if (notes) {
+            fprintf(xmlout,
+                    "        <!-- front-to-back ordering of video tracks. 0 = normal, -1 is closer, etc. -->\n");
+        }
+    }
+    if (track->track_type != 0) { /* volume irrelevant for visual track */
 #ifdef CURRENTSTRUCT
-    track->volume = track->volume << 8;
+        track->volume = track->volume << 8;
 #endif
-    fprintf(xmlout,  "        <Volume>\n");
-       if(notes) {
-      fprintf(xmlout,"          <!-- Track audio volume stored as fixed-point binary 8.8 value. Decimal value is approximation. -->\n");
-      fprintf(xmlout,"          <!-- Full, normal (default) value is 0x0100 (1.0) -->\n");
-       }
-       if(raw)
-      fprintf(xmlout,"          <AsHex>0x%04x</AsHex>\n", track->volume);
-       if(derived)
-      fprintf(xmlout,"          <AsDecimal>%6.3f</AsDecimal>\n", (double)track->volume/(double)0x0100);
-    fprintf(xmlout,  "        </Volume>\n");
+        fprintf(xmlout,  "        <Volume>\n");
+        if (notes) {
+            fprintf(xmlout,
+                    "          <!-- Track audio volume stored as fixed-point binary 8.8 value. Decimal value is approximation. -->\n");
+            fprintf(xmlout,
+                    "          <!-- Full, normal (default) value is 0x0100 (1.0) -->\n");
+        }
+        if (raw) {
+            fprintf(xmlout, "          <AsHex>0x%04x</AsHex>\n", track->volume);
+        }
+        if (derived) {
+            fprintf(xmlout, "          <AsDecimal>%6.3f</AsDecimal>\n",
+                    (double)track->volume / (double)0x0100);
+        }
+        fprintf(xmlout,  "        </Volume>\n");
 #ifdef CURRENTSTRUCT
-  if(notes)
-    fprintf(xmlout,  "        <!-- Current m2j_to_metadata implementation always shows bits to right of decimal as zeroed. -->\n");
-       track->volume = track->volume >> 8;
+        if (notes) {
+            fprintf(xmlout,
+                    "        <!-- Current m2j_to_metadata implementation always shows bits to right of decimal as zeroed. -->\n");
+        }
+        track->volume = track->volume >> 8;
 #endif
-  }
-  if(track->track_type==0)
-  {
-    /* Transformation matrix for video                            */
-    fprintf(xmlout,  "        <TransformationMatrix>\n");
-       if(notes) {
-      fprintf(xmlout,"          <!-- Comments about matrix in MovieHeader apply here as well. -->\n");
-      fprintf(xmlout,"          <!-- This matrix is applied before MovieHeader one. -->\n");
-       }
-    fprintf(xmlout,  "          <TMa>0x%08x</TMa>\n", track->trans_matrix[0]);    
-    fprintf(xmlout,  "          <TMb>0x%08x</TMb>\n", track->trans_matrix[1]);    
-    fprintf(xmlout,  "          <TMu>0x%08x</TMu>\n", track->trans_matrix[2]);    
-    fprintf(xmlout,  "          <TMc>0x%08x</TMc>\n", track->trans_matrix[3]);    
-    fprintf(xmlout,  "          <TMd>0x%08x</TMd>\n", track->trans_matrix[4]);    
-    fprintf(xmlout,  "          <TMv>0x%08x</TMv>\n", track->trans_matrix[5]);    
-    fprintf(xmlout,  "          <TMx>0x%08x</TMx>\n", track->trans_matrix[6]);    
-    fprintf(xmlout,  "          <TMy>0x%08x</TMy>\n", track->trans_matrix[7]);    
-    fprintf(xmlout,  "          <TMw>0x%08x</TMw>\n", track->trans_matrix[8]);
-    fprintf(xmlout,  "        </TransformationMatrix>\n");
-  }
+    }
+    if (track->track_type == 0) {
+        /* Transformation matrix for video                            */
+        fprintf(xmlout,  "        <TransformationMatrix>\n");
+        if (notes) {
+            fprintf(xmlout,
+                    "          <!-- Comments about matrix in MovieHeader apply here as well. -->\n");
+            fprintf(xmlout,
+                    "          <!-- This matrix is applied before MovieHeader one. -->\n");
+        }
+        fprintf(xmlout,  "          <TMa>0x%08x</TMa>\n", track->trans_matrix[0]);
+        fprintf(xmlout,  "          <TMb>0x%08x</TMb>\n", track->trans_matrix[1]);
+        fprintf(xmlout,  "          <TMu>0x%08x</TMu>\n", track->trans_matrix[2]);
+        fprintf(xmlout,  "          <TMc>0x%08x</TMc>\n", track->trans_matrix[3]);
+        fprintf(xmlout,  "          <TMd>0x%08x</TMd>\n", track->trans_matrix[4]);
+        fprintf(xmlout,  "          <TMv>0x%08x</TMv>\n", track->trans_matrix[5]);
+        fprintf(xmlout,  "          <TMx>0x%08x</TMx>\n", track->trans_matrix[6]);
+        fprintf(xmlout,  "          <TMy>0x%08x</TMy>\n", track->trans_matrix[7]);
+        fprintf(xmlout,  "          <TMw>0x%08x</TMw>\n", track->trans_matrix[8]);
+        fprintf(xmlout,  "        </TransformationMatrix>\n");
+    }
 #ifdef CURRENTSTRUCT
-  track->w = track->w << 16;
-  track->h = track->h << 16;
+    track->w = track->w << 16;
+    track->h = track->h << 16;
 #endif
-  if(notes) {
-    fprintf(xmlout,  "        <!-- Width and Height in pixels are for the presentation; frames will be scaled to this. -->\n");
-    fprintf(xmlout,  "        <!-- Both stored as fixed-point binary 16.16 values. Decimal values are approximations. -->\n");
-  }
-  fprintf(xmlout,    "        <Width>\n");
-  if(raw)
-    fprintf(xmlout,  "          <AsHex>0x%08x</AsHex>\n", track->w);
-  if(derived)
-    fprintf(xmlout,  "          <AsDecimal>%12.6f</AsDecimal>\n", (double)track->w/(double)0x00010000);        /* Rate to play presentation  (default = 0x00010000)          */
-  fprintf(xmlout,    "        </Width>\n");
-  fprintf(xmlout,    "        <Height>\n");
-  if(raw)
-    fprintf(xmlout,  "          <AsHex>0x%08x</AsHex>\n", track->h);
-  if(derived)
-    fprintf(xmlout,  "          <AsDecimal>%12.6f</AsDecimal>\n", (double)track->h/(double)0x00010000);        /* Rate to play presentation  (default = 0x00010000)          */
-  fprintf(xmlout,    "        </Height>\n");
+    if (notes) {
+        fprintf(xmlout,
+                "        <!-- Width and Height in pixels are for the presentation; frames will be scaled to this. -->\n");
+        fprintf(xmlout,
+                "        <!-- Both stored as fixed-point binary 16.16 values. Decimal values are approximations. -->\n");
+    }
+    fprintf(xmlout,    "        <Width>\n");
+    if (raw) {
+        fprintf(xmlout,  "          <AsHex>0x%08x</AsHex>\n", track->w);
+    }
+    if (derived) {
+        fprintf(xmlout,  "          <AsDecimal>%12.6f</AsDecimal>\n",
+                (double)track->w / (double)
+                0x00010000);    /* Rate to play presentation  (default = 0x00010000)          */
+    }
+    fprintf(xmlout,    "        </Width>\n");
+    fprintf(xmlout,    "        <Height>\n");
+    if (raw) {
+        fprintf(xmlout,  "          <AsHex>0x%08x</AsHex>\n", track->h);
+    }
+    if (derived) {
+        fprintf(xmlout,  "          <AsDecimal>%12.6f</AsDecimal>\n",
+                (double)track->h / (double)
+                0x00010000);    /* Rate to play presentation  (default = 0x00010000)          */
+    }
+    fprintf(xmlout,    "        </Height>\n");
 #ifdef CURRENTSTRUCT
-  if(notes) {
-    fprintf(xmlout,  "        <!-- Current m2j_to_metadata implementation always shows bits to right of decimal as zeroed. -->\n");
-    fprintf(xmlout,  "        <!-- Also, width and height values shown here will actually be those read from track's <VisualSampleEntry> if given. -->\n");
-  }
-  track->w = track->w >> 16;
-  track->h = track->h >> 16;
+    if (notes) {
+        fprintf(xmlout,
+                "        <!-- Current m2j_to_metadata implementation always shows bits to right of decimal as zeroed. -->\n");
+        fprintf(xmlout,
+                "        <!-- Also, width and height values shown here will actually be those read from track's <VisualSampleEntry> if given. -->\n");
+    }
+    track->w = track->w >> 16;
+    track->h = track->h >> 16;
 #endif
-  fprintf(xmlout,    "      </TrackHeader>\n");
+    fprintf(xmlout,    "      </TrackHeader>\n");
 }
 
 /* ------------- */
 
-void xml_write_udta(FILE* file, FILE* xmlout, mj2_tk_t *track, unsigned int tnum) {
-  /* NO-OP so far.  Optional UserData 'udta' (zero or one in moov or each trak)
-     can contain multiple Copyright 'cprt' with different language codes */
-  /* There may be nested non-standard boxes within udta */
+void xml_write_udta(FILE* file, FILE* xmlout, mj2_tk_t *track,
+                    unsigned int tnum)
+{
+    /* NO-OP so far.  Optional UserData 'udta' (zero or one in moov or each trak)
+       can contain multiple Copyright 'cprt' with different language codes */
+    /* There may be nested non-standard boxes within udta */
 #ifdef NOTYET
-  IMAGINE track->udta, track->copyright_count, track->copyright_language[i] (array of 16bit ints), track->copyright_notice[i] (array of buffers)
-  PROBABLY ALSO NEED track->udta_len or special handler for non-standard boxes
-  char buf[5];
-  int i;
-
-  if(track->udta != 1)
-         return; /* Not present */
-
-  fprintf(xmlout,    "      <UserData BoxType=\"udta\">\n");
-  for(i = 0; i < track->copyright_count; i++) {
-    fprintf(xmlout,  "        <Copyright BoxType=\"cprt\"> Instance=\"%d\">\n", i+1);
-    int16_to_3packedchars((short int)track->copyright_languages[i], buf);
-    fprintf(xmlout,  "          <Language>%s</Language>\n", buf);    /* 3 chars */
-    fprintf(xmlout,  "          <Notice>%s</Notice>\n",track->copyright_notices[i]);
-    fprintf(xmlout,  "        </Copyright>\n", i+1);
-  }
-  /* TO DO: Non-standard boxes */
-  fprintf(xmlout,    "      </UserData>\n");
+    IMAGINE track->udta, track->copyright_count,
+            track->copyright_language[i](array of 16bit ints),
+            track->copyright_notice[i](array of buffers)
+            PROBABLY ALSO NEED track->udta_len or special handler for non - standard boxes
+            char buf[5];
+    int i;
+
+    if (track->udta != 1) {
+        return;    /* Not present */
+    }
+
+    fprintf(xmlout,    "      <UserData BoxType=\"udta\">\n");
+    for (i = 0; i < track->copyright_count; i++) {
+        fprintf(xmlout,  "        <Copyright BoxType=\"cprt\"> Instance=\"%d\">\n",
+                i + 1);
+        int16_to_3packedchars((short int)track->copyright_languages[i], buf);
+        fprintf(xmlout,  "          <Language>%s</Language>\n", buf);    /* 3 chars */
+        fprintf(xmlout,  "          <Notice>%s</Notice>\n",
+                track->copyright_notices[i]);
+        fprintf(xmlout,  "        </Copyright>\n", i + 1);
+    }
+    /* TO DO: Non-standard boxes */
+    fprintf(xmlout,    "      </UserData>\n");
 #endif
 }
 
 /* ------------- */
 
-void xml_write_mdia(FILE* file, FILE* xmlout, mj2_tk_t *track, unsigned int tnum)
+void xml_write_mdia(FILE* file, FILE* xmlout, mj2_tk_t *track,
+                    unsigned int tnum)
 {
-  char buf[5];
-  int i, k;
-  buf[4] = '\0';
-
-  fprintf(xmlout,    "      <Media BoxType=\"mdia\">\n");
-  fprintf(xmlout,    "        <MediaHeader BoxType=\"mdhd\">\n");
-  fprintf(xmlout,    "          <CreationTime>\n");
-  if(raw)
-    fprintf(xmlout,  "            <InSeconds>%u</InSeconds>\n", track->creation_time);
-  if(notes)
-    fprintf(xmlout,  "            <!-- Seconds since start of Jan. 1, 1904 UTC (Greenwich) -->\n");
-  /*  2082844800 = seconds between 1/1/04 and 1/1/70 */
-  /* There's still a time zone offset problem not solved... but spec is ambigous as to whether stored time
-     should be local or UTC */
-  if(derived) {
-    fprintf(xmlout,  "            <AsLocalTime>"); 
-                                xml_time_out(xmlout, track->creation_time - 2082844800);
-                                                     fprintf(xmlout,"</AsLocalTime>\n");
-  }
-  fprintf(xmlout,    "          </CreationTime>\n");
-  fprintf(xmlout,    "          <ModificationTime>\n");
-  if(raw)
-    fprintf(xmlout,  "            <InSeconds>%u</InSeconds>\n", track->modification_time);
-  if(derived) {
-    fprintf(xmlout,  "            <AsLocalTime>"); 
-                                xml_time_out(xmlout, track->modification_time - 2082844800);
-                                                     fprintf(xmlout,"</AsLocalTime>\n");
-  }
-  fprintf(xmlout,    "          </ModificationTime>\n");
-  fprintf(xmlout,    "          <Timescale>%d</Timescale>\n", track->timescale);
-  if(notes)
-    fprintf(xmlout,  "          <!-- Timescale defines time units in one second -->\n");
-  fprintf(xmlout,    "          <Duration>\n");
-  if(raw)
-    fprintf(xmlout,  "            <InTimeUnits>%u</InTimeUnits>\n", track->duration);
-  if(derived)
-    fprintf(xmlout,  "            <InSeconds>%12.3f</InSeconds>\n", (double)track->duration/(double)track->timescale);    // Make this double later to get fractional seconds
-  fprintf(xmlout,    "          </Duration>\n");
-  int16_to_3packedchars((short int)track->language, buf);
-  fprintf(xmlout,    "          <Language>%s</Language>\n", buf);    /* 3 chars */
-  fprintf(xmlout,    "        </MediaHeader>\n");
-  fprintf(xmlout,    "        <HandlerReference BoxType=\"hdlr\">\n");
-  switch(track->track_type)
-  {
-  case 0:
-    fprintf(xmlout,  "          <HandlerType Code=\"vide\">video media track</HandlerType>\n"); break;
-  case 1:
-    fprintf(xmlout,  "          <HandlerType Code=\"soun\">Sound</HandlerType>\n"); break;
-  case 2:
-    fprintf(xmlout,  "          <HandlerType Code=\"hint\">Hint</HandlerType>\n"); break;
-  }
-  if(notes) {
-    fprintf(xmlout,  "          <!-- String value shown is not actually read from file. -->\n");
-    fprintf(xmlout,  "          <!-- Shown value is one used for our encode. -->\n");
-  }
-  fprintf(xmlout,    "        </HandlerReference>\n");
-  fprintf(xmlout,    "        <MediaInfoContainer BoxType=\"minf\">\n");
-  switch(track->track_type)
-  {
-  case 0:
-    fprintf(xmlout,  "          <VideoMediaHeader BoxType=\"vmhd\">\n");
-    fprintf(xmlout,  "            <GraphicsMode>0x%02x</GraphicsMode>\n", track->graphicsmode);
-       if(notes) {
-      fprintf(xmlout,"            <!-- Enumerated values of graphics mode: -->\n");
-      fprintf(xmlout,"            <!--  0x00 = copy (over existing image); -->\n");
-      fprintf(xmlout,"            <!--  0x24 = transparent; 'blue-screen' this image using opcolor; -->\n");
-      fprintf(xmlout,"            <!--  0x100 = alpha; alpha-blend this image -->\n");
-/*    fprintf(xmlout,"            <!--  0x101 = whitealpha; alpha-blend this image, which has been blended with white; -->\n"); This was evidently dropped upon amendment */
-      fprintf(xmlout,"            <!--  0x102 = pre-multiplied black alpha; image has been already been alpha-blended with black. -->\n");
-      fprintf(xmlout,"            <!--  0x110 = component alpha; blend alpha channel(s) and color channels individually. -->\n");
-       }
-    fprintf(xmlout,  "            <Opcolor>\n");
-    fprintf(xmlout,  "              <Red>0x%02x</Red>\n", track->opcolor[0]);
-    fprintf(xmlout,  "              <Green>0x%02x</Green>\n",track->opcolor[1]);
-    fprintf(xmlout,  "              <Blue>0x%02x</Blue>\n",track->opcolor[2]);
-    fprintf(xmlout,  "            </Opcolor>\n");
-    fprintf(xmlout,  "          </VideoMediaHeader>\n");
-    break;
-  case 1:
-    fprintf(xmlout,  "          <SoundMediaHeader BoxType=\"smhd\">\n");
+    char buf[5];
+    int i, k;
+    buf[4] = '\0';
+
+    fprintf(xmlout,    "      <Media BoxType=\"mdia\">\n");
+    fprintf(xmlout,    "        <MediaHeader BoxType=\"mdhd\">\n");
+    fprintf(xmlout,    "          <CreationTime>\n");
+    if (raw) {
+        fprintf(xmlout,  "            <InSeconds>%u</InSeconds>\n",
+                track->creation_time);
+    }
+    if (notes) {
+        fprintf(xmlout,
+                "            <!-- Seconds since start of Jan. 1, 1904 UTC (Greenwich) -->\n");
+    }
+    /*  2082844800 = seconds between 1/1/04 and 1/1/70 */
+    /* There's still a time zone offset problem not solved... but spec is ambigous as to whether stored time
+       should be local or UTC */
+    if (derived) {
+        fprintf(xmlout,  "            <AsLocalTime>");
+        xml_time_out(xmlout, track->creation_time - 2082844800);
+        fprintf(xmlout, "</AsLocalTime>\n");
+    }
+    fprintf(xmlout,    "          </CreationTime>\n");
+    fprintf(xmlout,    "          <ModificationTime>\n");
+    if (raw) {
+        fprintf(xmlout,  "            <InSeconds>%u</InSeconds>\n",
+                track->modification_time);
+    }
+    if (derived) {
+        fprintf(xmlout,  "            <AsLocalTime>");
+        xml_time_out(xmlout, track->modification_time - 2082844800);
+        fprintf(xmlout, "</AsLocalTime>\n");
+    }
+    fprintf(xmlout,    "          </ModificationTime>\n");
+    fprintf(xmlout,    "          <Timescale>%d</Timescale>\n", track->timescale);
+    if (notes) {
+        fprintf(xmlout,
+                "          <!-- Timescale defines time units in one second -->\n");
+    }
+    fprintf(xmlout,    "          <Duration>\n");
+    if (raw) {
+        fprintf(xmlout,  "            <InTimeUnits>%u</InTimeUnits>\n",
+                track->duration);
+    }
+    if (derived) {
+        fprintf(xmlout,  "            <InSeconds>%12.3f</InSeconds>\n",
+                (double)track->duration / (double)
+                track->timescale);    // Make this double later to get fractional seconds
+    }
+    fprintf(xmlout,    "          </Duration>\n");
+    int16_to_3packedchars((short int)track->language, buf);
+    fprintf(xmlout,    "          <Language>%s</Language>\n", buf);    /* 3 chars */
+    fprintf(xmlout,    "        </MediaHeader>\n");
+    fprintf(xmlout,    "        <HandlerReference BoxType=\"hdlr\">\n");
+    switch (track->track_type) {
+    case 0:
+        fprintf(xmlout,
+                "          <HandlerType Code=\"vide\">video media track</HandlerType>\n");
+        break;
+    case 1:
+        fprintf(xmlout,  "          <HandlerType Code=\"soun\">Sound</HandlerType>\n");
+        break;
+    case 2:
+        fprintf(xmlout,  "          <HandlerType Code=\"hint\">Hint</HandlerType>\n");
+        break;
+    }
+    if (notes) {
+        fprintf(xmlout,
+                "          <!-- String value shown is not actually read from file. -->\n");
+        fprintf(xmlout,
+                "          <!-- Shown value is one used for our encode. -->\n");
+    }
+    fprintf(xmlout,    "        </HandlerReference>\n");
+    fprintf(xmlout,    "        <MediaInfoContainer BoxType=\"minf\">\n");
+    switch (track->track_type) {
+    case 0:
+        fprintf(xmlout,  "          <VideoMediaHeader BoxType=\"vmhd\">\n");
+        fprintf(xmlout,  "            <GraphicsMode>0x%02x</GraphicsMode>\n",
+                track->graphicsmode);
+        if (notes) {
+            fprintf(xmlout, "            <!-- Enumerated values of graphics mode: -->\n");
+            fprintf(xmlout, "            <!--  0x00 = copy (over existing image); -->\n");
+            fprintf(xmlout,
+                    "            <!--  0x24 = transparent; 'blue-screen' this image using opcolor; -->\n");
+            fprintf(xmlout,
+                    "            <!--  0x100 = alpha; alpha-blend this image -->\n");
+            /*    fprintf(xmlout,"            <!--  0x101 = whitealpha; alpha-blend this image, which has been blended with white; -->\n"); This was evidently dropped upon amendment */
+            fprintf(xmlout,
+                    "            <!--  0x102 = pre-multiplied black alpha; image has been already been alpha-blended with black. -->\n");
+            fprintf(xmlout,
+                    "            <!--  0x110 = component alpha; blend alpha channel(s) and color channels individually. -->\n");
+        }
+        fprintf(xmlout,  "            <Opcolor>\n");
+        fprintf(xmlout,  "              <Red>0x%02x</Red>\n", track->opcolor[0]);
+        fprintf(xmlout,  "              <Green>0x%02x</Green>\n", track->opcolor[1]);
+        fprintf(xmlout,  "              <Blue>0x%02x</Blue>\n", track->opcolor[2]);
+        fprintf(xmlout,  "            </Opcolor>\n");
+        fprintf(xmlout,  "          </VideoMediaHeader>\n");
+        break;
+    case 1:
+        fprintf(xmlout,  "          <SoundMediaHeader BoxType=\"smhd\">\n");
 #ifdef CURRENTSTRUCT
-       track->balance = track->balance << 8;
+        track->balance = track->balance << 8;
 #endif
-    fprintf(xmlout,  "            <Balance>\n");
-       if(notes) {
-      fprintf(xmlout,"              <!-- Track audio balance fixes mono track in stereo space. -->\n");
-      fprintf(xmlout,"              <!-- Stored as fixed-point binary 8.8 value. Decimal value is approximation. -->\n");
-      fprintf(xmlout,"              <!-- 0.0 = center, -1.0 = full left, 1.0 = full right -->\n");
-       }
-       if(raw)
-      fprintf(xmlout,"              <AsHex>0x%04x</AsHex>\n", track->balance);
-    if(derived)
-         fprintf(xmlout,"              <AsDecimal>%6.3f</AsDecimal>\n", (double)track->balance/(double)0x0100);
-    fprintf(xmlout,  "            </Balance>\n");
+        fprintf(xmlout,  "            <Balance>\n");
+        if (notes) {
+            fprintf(xmlout,
+                    "              <!-- Track audio balance fixes mono track in stereo space. -->\n");
+            fprintf(xmlout,
+                    "              <!-- Stored as fixed-point binary 8.8 value. Decimal value is approximation. -->\n");
+            fprintf(xmlout,
+                    "              <!-- 0.0 = center, -1.0 = full left, 1.0 = full right -->\n");
+        }
+        if (raw) {
+            fprintf(xmlout, "              <AsHex>0x%04x</AsHex>\n", track->balance);
+        }
+        if (derived) {
+            fprintf(xmlout, "              <AsDecimal>%6.3f</AsDecimal>\n",
+                    (double)track->balance / (double)0x0100);
+        }
+        fprintf(xmlout,  "            </Balance>\n");
 #ifdef CURRENTSTRUCT
-    if(notes)
-         fprintf(xmlout,"            <!-- Current m2j_to_metadata implementation always shows bits to right of decimal as zeroed. -->\n");
-       track->balance = track->balance >> 8;
+        if (notes) {
+            fprintf(xmlout,
+                    "            <!-- Current m2j_to_metadata implementation always shows bits to right of decimal as zeroed. -->\n");
+        }
+        track->balance = track->balance >> 8;
 #endif
-    fprintf(xmlout,  "          </SoundMediaHeader>\n");
-    break;
-  case 2:
-    fprintf(xmlout,  "          <HintMediaHeader BoxType=\"hmhd\">\n");
-    fprintf(xmlout,  "            <MaxPDU_Size>%d</MaxPDU_Size>\n", track->maxPDUsize);
-    if(notes)
-      fprintf(xmlout,"            <!-- Size in bytes of largest PDU in this hint stream. -->\n");
-    fprintf(xmlout,  "            <AvgPDU_Size>%d</AvgPDU_Size>\n", track->avgPDUsize);
-    if(notes)
-      fprintf(xmlout,"            <!-- Average size in bytes of a PDU over the entire presentation. -->\n");
-    fprintf(xmlout,  "            <MaxBitRate>%d</MaxBitRate>\n", track->maxbitrate);
-    if(notes)
-      fprintf(xmlout,"            <!-- Maximum rate in bits per second over any window of 1 second. -->\n");
-    fprintf(xmlout,  "            <AvgBitRate>%d</AvgBitRate>\n", track->avgbitrate);
-    if(notes)
-      fprintf(xmlout,"            <!-- Averate rate in bits per second over the entire presentation. -->\n");
-    fprintf(xmlout,  "            <SlidingAvgBit>%d</SlidingAvgBitRate>\n", track->slidingavgbitrate);
-    if(notes)
-      fprintf(xmlout,"            <!-- Maximum rate in bits per second over any window of one minute. -->\n");
-    fprintf(xmlout,  "          </HintMediaHeader>\n");
-    break;
-  }
-  fprintf(xmlout,    "          <DataInfo BoxType=\"dinf\">\n");
-  fprintf(xmlout,    "            <DataReference BoxType=\"dref\"  URL_Count=\"%d\" URN_Count=\"%d\">\n", track->num_url, track->num_urn); // table w. flags, URLs, URNs
-  // Data structure does not distinguish between single URL, single URN, or DREF table or URLs & URNs.
-  // We could infer those, but for now just present everything as a DREF table.
-  if(notes)
-    fprintf(xmlout,  "              <!-- No entries here mean that file is self-contained, as required by Simple Profile. -->\n");
-  for(k = 0; k < track->num_url; k++) {
-    fprintf(xmlout,  "            <DataEntryUrlBox BoxType=\"url[space]\">\n"); // table w. flags, URLs, URNs
-    if(notes)
-      fprintf(xmlout,"              <!-- Only the first 16 bytes of URL location are recorded in mj2_to_metadata data structure. -->\n");
-    for(i = 0; i < 4; i++) {
-      uint_to_chars(track->url[track->num_url].location[i], buf);
-    fprintf(xmlout,  "              <Location>%s</Location>\n");
-    }
-    fprintf(xmlout,  "            </DataEntryUrlBox>\n"); // table w. flags, URLs, URNs
-  }
-  for(k = 0; k < track->num_urn; k++) {
-    fprintf(xmlout,"            <DataEntryUrnBox BoxType=\"urn[space]\">\n"); // table w. flags, URLs, URNs
-    // Only the first 16 bytes are recorded in the data structure currently.
-    if(notes)
-      fprintf(xmlout,"              <!-- Only the first 16 bytes each of URN name and optional location are recorded in mj2_to_metadata data structure. -->\n");
-    fprintf(xmlout,  "              <Name>");
-    for(i = 0; i < 4; i++) {
-      uint_to_chars(track->urn[track->num_urn].name[i], buf);
-      fprintf(xmlout,"%s", buf);
-    }
-    fprintf(xmlout,  "</Name>\n");
-    fprintf(xmlout,  "              <Location>");
-    for(i = 0; i < 4; i++) {
-      uint_to_chars(track->urn[track->num_urn].location[i], buf);
-      fprintf(xmlout,"%s");
-    }
-    fprintf(xmlout,  "</Location>\n");
-    fprintf(xmlout,  "            </DataEntryUrnBox>\n");
-  }
-  fprintf(xmlout,    "            </DataReference>\n");
-  fprintf(xmlout,    "          </DataInfo>\n");
-
-  xml_write_stbl(file, xmlout, track, tnum); /* SampleTable */
-
-  fprintf(xmlout,    "        </MediaInfoContainer>\n");  
-  fprintf(xmlout,    "      </Media>\n");
+        fprintf(xmlout,  "          </SoundMediaHeader>\n");
+        break;
+    case 2:
+        fprintf(xmlout,  "          <HintMediaHeader BoxType=\"hmhd\">\n");
+        fprintf(xmlout,  "            <MaxPDU_Size>%d</MaxPDU_Size>\n",
+                track->maxPDUsize);
+        if (notes) {
+            fprintf(xmlout,
+                    "            <!-- Size in bytes of largest PDU in this hint stream. -->\n");
+        }
+        fprintf(xmlout,  "            <AvgPDU_Size>%d</AvgPDU_Size>\n",
+                track->avgPDUsize);
+        if (notes) {
+            fprintf(xmlout,
+                    "            <!-- Average size in bytes of a PDU over the entire presentation. -->\n");
+        }
+        fprintf(xmlout,  "            <MaxBitRate>%d</MaxBitRate>\n",
+                track->maxbitrate);
+        if (notes) {
+            fprintf(xmlout,
+                    "            <!-- Maximum rate in bits per second over any window of 1 second. -->\n");
+        }
+        fprintf(xmlout,  "            <AvgBitRate>%d</AvgBitRate>\n",
+                track->avgbitrate);
+        if (notes) {
+            fprintf(xmlout,
+                    "            <!-- Averate rate in bits per second over the entire presentation. -->\n");
+        }
+        fprintf(xmlout,  "            <SlidingAvgBit>%d</SlidingAvgBitRate>\n",
+                track->slidingavgbitrate);
+        if (notes) {
+            fprintf(xmlout,
+                    "            <!-- Maximum rate in bits per second over any window of one minute. -->\n");
+        }
+        fprintf(xmlout,  "          </HintMediaHeader>\n");
+        break;
+    }
+    fprintf(xmlout,    "          <DataInfo BoxType=\"dinf\">\n");
+    fprintf(xmlout,
+            "            <DataReference BoxType=\"dref\"  URL_Count=\"%d\" URN_Count=\"%d\">\n",
+            track->num_url, track->num_urn); // table w. flags, URLs, URNs
+    // Data structure does not distinguish between single URL, single URN, or DREF table or URLs & URNs.
+    // We could infer those, but for now just present everything as a DREF table.
+    if (notes) {
+        fprintf(xmlout,
+                "              <!-- No entries here mean that file is self-contained, as required by Simple Profile. -->\n");
+    }
+    for (k = 0; k < track->num_url; k++) {
+        fprintf(xmlout,
+                "            <DataEntryUrlBox BoxType=\"url[space]\">\n"); // table w. flags, URLs, URNs
+        if (notes) {
+            fprintf(xmlout,
+                    "              <!-- Only the first 16 bytes of URL location are recorded in mj2_to_metadata data structure. -->\n");
+        }
+        for (i = 0; i < 4; i++) {
+            uint_to_chars(track->url[track->num_url].location[i], buf);
+            fprintf(xmlout,  "              <Location>%s</Location>\n");
+        }
+        fprintf(xmlout,
+                "            </DataEntryUrlBox>\n"); // table w. flags, URLs, URNs
+    }
+    for (k = 0; k < track->num_urn; k++) {
+        fprintf(xmlout,
+                "            <DataEntryUrnBox BoxType=\"urn[space]\">\n"); // table w. flags, URLs, URNs
+        // Only the first 16 bytes are recorded in the data structure currently.
+        if (notes) {
+            fprintf(xmlout,
+                    "              <!-- Only the first 16 bytes each of URN name and optional location are recorded in mj2_to_metadata data structure. -->\n");
+        }
+        fprintf(xmlout,  "              <Name>");
+        for (i = 0; i < 4; i++) {
+            uint_to_chars(track->urn[track->num_urn].name[i], buf);
+            fprintf(xmlout, "%s", buf);
+        }
+        fprintf(xmlout,  "</Name>\n");
+        fprintf(xmlout,  "              <Location>");
+        for (i = 0; i < 4; i++) {
+            uint_to_chars(track->urn[track->num_urn].location[i], buf);
+            fprintf(xmlout, "%s");
+        }
+        fprintf(xmlout,  "</Location>\n");
+        fprintf(xmlout,  "            </DataEntryUrnBox>\n");
+    }
+    fprintf(xmlout,    "            </DataReference>\n");
+    fprintf(xmlout,    "          </DataInfo>\n");
+
+    xml_write_stbl(file, xmlout, track, tnum); /* SampleTable */
+
+    fprintf(xmlout,    "        </MediaInfoContainer>\n");
+    fprintf(xmlout,    "      </Media>\n");
 }
 
 /* ------------- */
 
-void xml_write_stbl(FILE* file, FILE* xmlout, mj2_tk_t *track, unsigned int tnum)
+void xml_write_stbl(FILE* file, FILE* xmlout, mj2_tk_t *track,
+                    unsigned int tnum)
 {
-  char buf[5], buf33[33];
-  int i, len;
-  buf[4] = '\0';
-
-  fprintf(xmlout,      "          <SampleTable BoxType=\"stbl\">\n");
-  if(notes)
-    fprintf(xmlout,    "            <!-- What follows are specific instances of generic SampleDescription BoxType=\"stsd\" -->\n");
-  switch(track->track_type)
-  {
-  case 0:
-    // There could be multiple instances of this, but "entry_count" is just a local at read-time.
-    // And it's used wrong, too, as count of just visual type, when it's really all 3 types.
-    // This is referred to as "smj2" within mj2.c
-    fprintf(xmlout,    "            <VisualSampleEntry BoxType=\"mjp2\">\n");
-       if(notes) {
-      fprintf(xmlout,  "            <!-- If multiple instances of this box, only first is shown here. -->\n");
-         fprintf(xmlout,  "            <!-- Width and Height are in pixels.  Unlike the Track Header, there is no fractional part. -->\n");
-         fprintf(xmlout,  "            <!-- In mj2_to_metadata implementation, the values are not represented separately from Track Header's values. -->\n");
-       }
-       /* No shifting required.  If CURRENTSTRUCT gets changed, then may need to revisit treatment of these */
-    fprintf(xmlout,    "              <WidthAsInteger>%d</WidthAsInteger>\n", track->w);
-    fprintf(xmlout,    "              <HeightAsInteger>%d</HeightAsInteger>\n", track->h);
+    char buf[5], buf33[33];
+    int i, len;
+    buf[4] = '\0';
+
+    fprintf(xmlout,      "          <SampleTable BoxType=\"stbl\">\n");
+    if (notes) {
+        fprintf(xmlout,
+                "            <!-- What follows are specific instances of generic SampleDescription BoxType=\"stsd\" -->\n");
+    }
+    switch (track->track_type) {
+    case 0:
+        // There could be multiple instances of this, but "entry_count" is just a local at read-time.
+        // And it's used wrong, too, as count of just visual type, when it's really all 3 types.
+        // This is referred to as "smj2" within mj2.c
+        fprintf(xmlout,    "            <VisualSampleEntry BoxType=\"mjp2\">\n");
+        if (notes) {
+            fprintf(xmlout,
+                    "            <!-- If multiple instances of this box, only first is shown here. -->\n");
+            fprintf(xmlout,
+                    "            <!-- Width and Height are in pixels.  Unlike the Track Header, there is no fractional part. -->\n");
+            fprintf(xmlout,
+                    "            <!-- In mj2_to_metadata implementation, the values are not represented separately from Track Header's values. -->\n");
+        }
+        /* No shifting required.  If CURRENTSTRUCT gets changed, then may need to revisit treatment of these */
+        fprintf(xmlout,    "              <WidthAsInteger>%d</WidthAsInteger>\n",
+                track->w);
+        fprintf(xmlout,    "              <HeightAsInteger>%d</HeightAsInteger>\n",
+                track->h);
 // Horizresolution and vertresolution don't require shifting, already stored right in CURRENTSTRUCT
-    if(notes) {
-      fprintf(xmlout,  "              <!-- Resolutions are in pixels per inch, for the highest-resolution component (typically luminance). -->\n");
-      fprintf(xmlout,  "              <!-- Both stored as fixed-point binary 16.16 values. Decimal values are approximations. -->\n");
-      fprintf(xmlout,  "              <!-- Typical value for both resolutions is 0x00480000  (72.0) -->\n");
-       }
-    fprintf(xmlout,    "              <HorizontalRes>\n");
-       if(raw)
-      fprintf(xmlout,  "                <AsHex>0x%08x</AsHex>\n", track->horizresolution);
-       if(derived)
-      fprintf(xmlout,  "                <AsDecimal>%12.6f</AsDecimal>\n", (double)track->horizresolution/(double)0x00010000);        /* Rate to play presentation  (default = 0x00010000)          */
-    fprintf(xmlout,    "              </HorizontalRes>\n");
-    fprintf(xmlout,    "              <VerticalRes>\n");
-       if(raw)
-      fprintf(xmlout,  "                <AsHex>0x%08x</AsHex>\n", track->vertresolution);
-       if(derived)
-      fprintf(xmlout,  "                <AsDecimal>%12.6f</AsDecimal>\n", (double)track->vertresolution/(double)0x00010000);        /* Rate to play presentation  (default = 0x00010000)          */
-    fprintf(xmlout,    "              </VerticalRes>\n");
-
-    buf33[0] = '\0';
-    for(i = 0; i < 8; i++) {
-      uint_to_chars((unsigned int)track->compressorname[i], buf);
-      strcat(buf33, buf); /* This loads up (4 * 8) + 1 chars, but trailing ones are usually junk */
-    }
-    len = (int)buf33[0]; /* First byte has string length in bytes.  There may be garbage beyond it. */
-    buf33[len+1] = '\0'; /* Suppress it */
-    fprintf(xmlout,    "              <CompressorName>%s</CompressorName>\n", buf33+1); /* Start beyond first byte */
-       if(notes) {
-      fprintf(xmlout,  "              <!-- Compressor name for debugging.  Standard restricts max length to 31 bytes. -->\n");
-      fprintf(xmlout,  "              <!-- Usually blank or \"Motion JPEG2000\" -->\n");
-       }
-    fprintf(xmlout,    "              <Depth>0x%02x</Depth>\n",track->depth);
-       if(notes) {
-      fprintf(xmlout,  "              <!-- Depth is: -->\n");
-      fprintf(xmlout,  "              <!--   0x20: alpha channels present (color or grayscale) -->\n");
-      fprintf(xmlout,  "              <!--   0x28: grayscale without alpha -->\n");
-      fprintf(xmlout,  "              <!--   0x18: color without alpha -->\n");
-       }
-
-    xml_out_frame_jp2h(xmlout, &(track->jp2_struct));  /* JP2 Header */
-    
-  /* Following subboxes are optional */
-    fprintf(xmlout,    "              <FieldCoding BoxType=\"fiel\">\n");
-    fprintf(xmlout,    "                <FieldCount>%d</FieldCount>\n", (unsigned int)track->fieldcount); /* uchar as 1 byte uint */
-    if(notes)
-      fprintf(xmlout,  "                <!-- Must be either 1 or 2 -->\n");
-    fprintf(xmlout,    "                <FieldOrder>%d</FieldOrder>\n", (unsigned int)track->fieldorder); /* uchar as 1 byte uint */
-       if(notes) {
-      fprintf(xmlout,  "                <!-- When FieldCount=2, FieldOrder means: -->\n");
-      fprintf(xmlout,  "                <!--   0: Field coding unknown -->\n");
-      fprintf(xmlout,  "                <!--   1: Field with topmost line is stored first in sample; fields are in temporal order -->\n");
-      fprintf(xmlout,  "                <!--   6: Field with topmost line is stored second in sample; fields are in temporal order -->\n");
-      fprintf(xmlout,  "                <!-- Defaults: FieldCount=1, FieldOrder=0 if FieldCoding box not present -->\n");
-      fprintf(xmlout,  "                <!-- Current implementation doesn't retain whether box was actually present. -->\n");
-       }
-    fprintf(xmlout,    "              </FieldCoding>\n");
-
-    fprintf(xmlout,    "              <MJP2_Profile BoxType=\"jp2p\" Count=\"%d\">\n",track->num_br);
-    for (i = 0; i < track->num_br; i++) /* read routine stored in reverse order, so let's undo damage */
-    {
-      uint_to_chars(track->br[i], buf);
-      fprintf(xmlout,  "                <CompatibleBrand>%s</CompatibleBrand>\n", buf);    /*4 characters, each CLi */
-    }
-    fprintf(xmlout,    "              </MJP2_Profile>\n");
-
-    fprintf(xmlout,    "              <MJP2_Prefix BoxType=\"jp2x\" Count=\"%d\">\n",track->num_jp2x);
-    for (i = 0; i < track->num_jp2x; i++)
-    { // We'll probably need better formatting than this
-      fprintf(xmlout,  "                <Data>0x%02x</Data>\n", track->jp2xdata[i]);    /* Each entry is single byte */
-    }
-    fprintf(xmlout,    "              </MJP2_Prefix>\n");
-
-    fprintf(xmlout,    "              <MJP2_SubSampling BoxType=\"jsub\">\n"); /* These values are all 1 byte */
-    if(notes)
-         fprintf(xmlout,  "              <!-- Typical subsample value is 2 for 4:2:0 -->\n");
-    fprintf(xmlout,    "                <HorizontalSub>%d</HorizontalSub>\n", track->hsub);
-    fprintf(xmlout,    "                <VerticalSub>%d</VerticalSub>\n", track->vsub);
-    fprintf(xmlout,    "                <HorizontalOffset>%d</HorizontalOffset>\n", track->hoff);
-    fprintf(xmlout,    "                <VerticalOffset>%d</VerticalOffset>\n", track->voff);
-       if(notes) {
-         fprintf(xmlout,  "                <!-- Typical {horizontal, vertical} chroma offset values: -->\n");
-         fprintf(xmlout,  "                <!-- 4:2:2 format (CCIR601, H.262, MPEG2, MPEG4, recom. Exif): {0, 0} -->\n");
-         fprintf(xmlout,  "                <!-- 4:2:2 format (JFIF):                                      {1, 0} -->\n");
-         fprintf(xmlout,  "                <!-- 4:2:0 format (H.262, MPEG2, MPEG4):                       {0, 1} -->\n");
-         fprintf(xmlout,  "                <!-- 4:2:0 format (MPEG1, H.261, JFIF, recom. Exif):           {1, 1} -->\n");
-       }
-    fprintf(xmlout,    "              </MJP2_SubSampling>\n"); /* These values are all 1 byte */
-
-    fprintf(xmlout,    "              <MJP2_OriginalFormat BoxType=\"orfo\">\n"); /* Part III Appx. 2 */
-    fprintf(xmlout,    "                <OriginalFieldCount>%u</OriginalFieldCount>\n", (unsigned int)track->or_fieldcount); /* uchar as 1-byte uint */
-    if(notes)
-      fprintf(xmlout,  "                <!-- In original material before encoding.  Must be either 1 or 2 -->\n");
-    fprintf(xmlout,    "                <OriginalFieldOrder>%u</OriginalFieldOrder>\n", (unsigned int)track->or_fieldorder); /* uchar as 1-byte uint */
-       if(notes) {
-      fprintf(xmlout,  "                <!-- When FieldCount=2, FieldOrder means: -->\n");
-      fprintf(xmlout,  "                <!--   0: Field coding unknown -->\n");
-      fprintf(xmlout,  "                <!--   11: Topmost line came from the earlier field; -->\n");
-      fprintf(xmlout,  "                <!--   16:  Topmost line came form the later field. -->\n");
-      fprintf(xmlout,  "                <!-- Defaults: FieldCount=1, FieldOrder=0 if FieldCoding box not present -->\n");
-      fprintf(xmlout,  "                <!-- Current implementation doesn't retain whether box was actually present. -->\n");
-       }
-    fprintf(xmlout,    "              </MJP2_OriginalFormat>\n");
-    fprintf(xmlout,    "            </VisualSampleEntry>\n");
-    break;
-  case 1: case 2:
-    if(notes)
-      fprintf(xmlout,  "            <!-- mj2_to_metadata's data structure doesn't record this currently. -->\n"); break;
-  }
-  fprintf(xmlout,      "            <TimeToSample BoxType=\"stts\">\n");  
-  fprintf(xmlout,      "              <SampleStatistics>\n");  
-  fprintf(xmlout,      "                <TotalSamples>%d</TotalSamples>\n", track->num_samples);
-  if(notes)
-    fprintf(xmlout,    "                <!-- For video, gives the total frames in the track, by summing all entries in the Sample Table -->\n");
-  fprintf(xmlout,      "              </SampleStatistics>\n"); 
-  fprintf(xmlout,      "              <SampleEntries EntryCount=\"%d\">\n", track->num_tts);
-  for (i = 0; i < track->num_tts; i++) {
-    fprintf(xmlout,    "                <Table Entry=\"%u\" SampleCount=\"%d\" SampleDelta=\"%u\" />\n",
-                                      i+1, track->tts[i].sample_count, track->tts[i].sample_delta);
-  }
-  fprintf(xmlout,      "              </SampleEntries>\n");
-  fprintf(xmlout,      "            </TimeToSample>\n");
-
-  fprintf(xmlout,      "            <SampleToChunk BoxType=\"stsc\" Count=\"%d\">\n", track->num_samplestochunk);
-  for (i = 0; i < track->num_samplestochunk; i++) {
-    fprintf(xmlout,    "              <FirstChunk>%u</FirstChunk>\n",track->sampletochunk[i].first_chunk); /* 4 bytes */
-    fprintf(xmlout,    "              <SamplesPerChunk>%u</SamplesPerChunk>\n",track->sampletochunk[i].samples_per_chunk); /* 4 bytes */
-    fprintf(xmlout,    "              <SampleDescrIndex>%u</SampleDescrIndex>\n",track->sampletochunk[i].sample_descr_idx); /* 4 bytes */
-  }
-  fprintf(xmlout,      "            </SampleToChunk>\n");
-  // After reading this info in, track->num_chunks is calculated and a decompressed table established internally.
-
-  fprintf(xmlout,      "            <SampleSize BoxType=\"stsz\">\n");
-  if(track->same_sample_size) {
-    // all values in track->sample[i].sample_size are equal.  Grab the first one.
-    fprintf(xmlout,    "              <Sample_Size>%u</Sample_Size>\n", track->sample[0].sample_size);
-       if(notes) {
-      fprintf(xmlout,  "              <!-- Non-zero value means all samples have that size. -->\n");
-         fprintf(xmlout,  "              <!-- So <Sample_Count> (aka Entry_Count in std.) has no meaning, is suppressed from this output, and no table follows. -->\n");
-       }
-  } else {
-    fprintf(xmlout,    "              <Sample_Size>0</Sample_Size>\n");
-    if(notes)
-         if(sampletables)
-        fprintf(xmlout,"              <!-- Zero value means samples have different sizes, given in table next of length Sample_Count (aka Entry_Count in std). -->\n");
-         else
-        fprintf(xmlout,"              <!-- Zero value means samples have different sizes, given in table (not shown) of length Sample_Count (aka Entry_Count in std). -->\n");
-       fprintf(xmlout,    "              <Sample_Count>%u</Sample_Count>\n", track->num_samples);
-       if(sampletables)
-     for (i = 0; i < (int)track->num_samples; i++) {
-      fprintf(xmlout,  "              <EntrySize Num=\"%u\">%u</EntrySize>\n", i+1, track->sample[i].sample_size);
-     }
-  }  
-  fprintf(xmlout,      "            </SampleSize>\n");
-
-  fprintf(xmlout,      "            <ChunkOffset BoxType=\"stco\">\n");
-  // Structure not yet - Variant ChunkLargeOffset 'co64'
-  fprintf(xmlout,      "              <EntryCount>%u</EntryCount>\n", track->num_chunks);
-  if(notes) {
-    fprintf(xmlout,    "              <!-- For this implementation, EntryCount shown is one calculated during file read of <SampleToChunk> data. -->\n");
-    fprintf(xmlout,    "              <!-- Implementation will report failure during file read of <ChunkOffset> data if read entry-count disagrees. -->\n");
-  }
-  if(sampletables)
-    for (i = 0; i < (int)track->num_chunks; i++)
-      fprintf(xmlout,  "              <Chunk_Offset Num=\"%d\">%u</Chunk_Offset>\n", i+1, track->chunk[i].offset);
-  fprintf(xmlout,      "            </ChunkOffset>\n");
-
-  fprintf(xmlout,      "          </SampleTable>\n");
+        if (notes) {
+            fprintf(xmlout,
+                    "              <!-- Resolutions are in pixels per inch, for the highest-resolution component (typically luminance). -->\n");
+            fprintf(xmlout,
+                    "              <!-- Both stored as fixed-point binary 16.16 values. Decimal values are approximations. -->\n");
+            fprintf(xmlout,
+                    "              <!-- Typical value for both resolutions is 0x00480000  (72.0) -->\n");
+        }
+        fprintf(xmlout,    "              <HorizontalRes>\n");
+        if (raw) {
+            fprintf(xmlout,  "                <AsHex>0x%08x</AsHex>\n",
+                    track->horizresolution);
+        }
+        if (derived) {
+            fprintf(xmlout,  "                <AsDecimal>%12.6f</AsDecimal>\n",
+                    (double)track->horizresolution / (double)
+                    0x00010000);    /* Rate to play presentation  (default = 0x00010000)          */
+        }
+        fprintf(xmlout,    "              </HorizontalRes>\n");
+        fprintf(xmlout,    "              <VerticalRes>\n");
+        if (raw) {
+            fprintf(xmlout,  "                <AsHex>0x%08x</AsHex>\n",
+                    track->vertresolution);
+        }
+        if (derived) {
+            fprintf(xmlout,  "                <AsDecimal>%12.6f</AsDecimal>\n",
+                    (double)track->vertresolution / (double)
+                    0x00010000);    /* Rate to play presentation  (default = 0x00010000)          */
+        }
+        fprintf(xmlout,    "              </VerticalRes>\n");
+
+        buf33[0] = '\0';
+        for (i = 0; i < 8; i++) {
+            uint_to_chars((unsigned int)track->compressorname[i], buf);
+            strcat(buf33,
+                   buf); /* This loads up (4 * 8) + 1 chars, but trailing ones are usually junk */
+        }
+        len = (int)
+              buf33[0]; /* First byte has string length in bytes.  There may be garbage beyond it. */
+        buf33[len + 1] = '\0'; /* Suppress it */
+        fprintf(xmlout,    "              <CompressorName>%s</CompressorName>\n",
+                buf33 + 1); /* Start beyond first byte */
+        if (notes) {
+            fprintf(xmlout,
+                    "              <!-- Compressor name for debugging.  Standard restricts max length to 31 bytes. -->\n");
+            fprintf(xmlout,
+                    "              <!-- Usually blank or \"Motion JPEG2000\" -->\n");
+        }
+        fprintf(xmlout,    "              <Depth>0x%02x</Depth>\n", track->depth);
+        if (notes) {
+            fprintf(xmlout,  "              <!-- Depth is: -->\n");
+            fprintf(xmlout,
+                    "              <!--   0x20: alpha channels present (color or grayscale) -->\n");
+            fprintf(xmlout,  "              <!--   0x28: grayscale without alpha -->\n");
+            fprintf(xmlout,  "              <!--   0x18: color without alpha -->\n");
+        }
+
+        xml_out_frame_jp2h(xmlout, &(track->jp2_struct));  /* JP2 Header */
+
+        /* Following subboxes are optional */
+        fprintf(xmlout,    "              <FieldCoding BoxType=\"fiel\">\n");
+        fprintf(xmlout,    "                <FieldCount>%d</FieldCount>\n",
+                (unsigned int)track->fieldcount); /* uchar as 1 byte uint */
+        if (notes) {
+            fprintf(xmlout,  "                <!-- Must be either 1 or 2 -->\n");
+        }
+        fprintf(xmlout,    "                <FieldOrder>%d</FieldOrder>\n",
+                (unsigned int)track->fieldorder); /* uchar as 1 byte uint */
+        if (notes) {
+            fprintf(xmlout,
+                    "                <!-- When FieldCount=2, FieldOrder means: -->\n");
+            fprintf(xmlout,  "                <!--   0: Field coding unknown -->\n");
+            fprintf(xmlout,
+                    "                <!--   1: Field with topmost line is stored first in sample; fields are in temporal order -->\n");
+            fprintf(xmlout,
+                    "                <!--   6: Field with topmost line is stored second in sample; fields are in temporal order -->\n");
+            fprintf(xmlout,
+                    "                <!-- Defaults: FieldCount=1, FieldOrder=0 if FieldCoding box not present -->\n");
+            fprintf(xmlout,
+                    "                <!-- Current implementation doesn't retain whether box was actually present. -->\n");
+        }
+        fprintf(xmlout,    "              </FieldCoding>\n");
+
+        fprintf(xmlout,
+                "              <MJP2_Profile BoxType=\"jp2p\" Count=\"%d\">\n", track->num_br);
+        for (i = 0; i < track->num_br;
+                i++) { /* read routine stored in reverse order, so let's undo damage */
+            uint_to_chars(track->br[i], buf);
+            fprintf(xmlout,  "                <CompatibleBrand>%s</CompatibleBrand>\n",
+                    buf);    /*4 characters, each CLi */
+        }
+        fprintf(xmlout,    "              </MJP2_Profile>\n");
+
+        fprintf(xmlout,
+                "              <MJP2_Prefix BoxType=\"jp2x\" Count=\"%d\">\n", track->num_jp2x);
+        for (i = 0; i < track->num_jp2x; i++) {
+            // We'll probably need better formatting than this
+            fprintf(xmlout,  "                <Data>0x%02x</Data>\n",
+                    track->jp2xdata[i]);    /* Each entry is single byte */
+        }
+        fprintf(xmlout,    "              </MJP2_Prefix>\n");
+
+        fprintf(xmlout,
+                "              <MJP2_SubSampling BoxType=\"jsub\">\n"); /* These values are all 1 byte */
+        if (notes) {
+            fprintf(xmlout,
+                    "              <!-- Typical subsample value is 2 for 4:2:0 -->\n");
+        }
+        fprintf(xmlout,    "                <HorizontalSub>%d</HorizontalSub>\n",
+                track->hsub);
+        fprintf(xmlout,    "                <VerticalSub>%d</VerticalSub>\n",
+                track->vsub);
+        fprintf(xmlout,    "                <HorizontalOffset>%d</HorizontalOffset>\n",
+                track->hoff);
+        fprintf(xmlout,    "                <VerticalOffset>%d</VerticalOffset>\n",
+                track->voff);
+        if (notes) {
+            fprintf(xmlout,
+                    "                <!-- Typical {horizontal, vertical} chroma offset values: -->\n");
+            fprintf(xmlout,
+                    "                <!-- 4:2:2 format (CCIR601, H.262, MPEG2, MPEG4, recom. Exif): {0, 0} -->\n");
+            fprintf(xmlout,
+                    "                <!-- 4:2:2 format (JFIF):                                      {1, 0} -->\n");
+            fprintf(xmlout,
+                    "                <!-- 4:2:0 format (H.262, MPEG2, MPEG4):                       {0, 1} -->\n");
+            fprintf(xmlout,
+                    "                <!-- 4:2:0 format (MPEG1, H.261, JFIF, recom. Exif):           {1, 1} -->\n");
+        }
+        fprintf(xmlout,
+                "              </MJP2_SubSampling>\n"); /* These values are all 1 byte */
+
+        fprintf(xmlout,
+                "              <MJP2_OriginalFormat BoxType=\"orfo\">\n"); /* Part III Appx. 2 */
+        fprintf(xmlout,
+                "                <OriginalFieldCount>%u</OriginalFieldCount>\n",
+                (unsigned int)track->or_fieldcount); /* uchar as 1-byte uint */
+        if (notes) {
+            fprintf(xmlout,
+                    "                <!-- In original material before encoding.  Must be either 1 or 2 -->\n");
+        }
+        fprintf(xmlout,
+                "                <OriginalFieldOrder>%u</OriginalFieldOrder>\n",
+                (unsigned int)track->or_fieldorder); /* uchar as 1-byte uint */
+        if (notes) {
+            fprintf(xmlout,
+                    "                <!-- When FieldCount=2, FieldOrder means: -->\n");
+            fprintf(xmlout,  "                <!--   0: Field coding unknown -->\n");
+            fprintf(xmlout,
+                    "                <!--   11: Topmost line came from the earlier field; -->\n");
+            fprintf(xmlout,
+                    "                <!--   16:  Topmost line came form the later field. -->\n");
+            fprintf(xmlout,
+                    "                <!-- Defaults: FieldCount=1, FieldOrder=0 if FieldCoding box not present -->\n");
+            fprintf(xmlout,
+                    "                <!-- Current implementation doesn't retain whether box was actually present. -->\n");
+        }
+        fprintf(xmlout,    "              </MJP2_OriginalFormat>\n");
+        fprintf(xmlout,    "            </VisualSampleEntry>\n");
+        break;
+    case 1:
+    case 2:
+        if (notes) {
+            fprintf(xmlout,
+                    "            <!-- mj2_to_metadata's data structure doesn't record this currently. -->\n");
+        }
+        break;
+    }
+    fprintf(xmlout,      "            <TimeToSample BoxType=\"stts\">\n");
+    fprintf(xmlout,      "              <SampleStatistics>\n");
+    fprintf(xmlout,      "                <TotalSamples>%d</TotalSamples>\n",
+            track->num_samples);
+    if (notes) {
+        fprintf(xmlout,
+                "                <!-- For video, gives the total frames in the track, by summing all entries in the Sample Table -->\n");
+    }
+    fprintf(xmlout,      "              </SampleStatistics>\n");
+    fprintf(xmlout,      "              <SampleEntries EntryCount=\"%d\">\n",
+            track->num_tts);
+    for (i = 0; i < track->num_tts; i++) {
+        fprintf(xmlout,
+                "                <Table Entry=\"%u\" SampleCount=\"%d\" SampleDelta=\"%u\" />\n",
+                i + 1, track->tts[i].sample_count, track->tts[i].sample_delta);
+    }
+    fprintf(xmlout,      "              </SampleEntries>\n");
+    fprintf(xmlout,      "            </TimeToSample>\n");
+
+    fprintf(xmlout,
+            "            <SampleToChunk BoxType=\"stsc\" Count=\"%d\">\n",
+            track->num_samplestochunk);
+    for (i = 0; i < track->num_samplestochunk; i++) {
+        fprintf(xmlout,    "              <FirstChunk>%u</FirstChunk>\n",
+                track->sampletochunk[i].first_chunk); /* 4 bytes */
+        fprintf(xmlout,    "              <SamplesPerChunk>%u</SamplesPerChunk>\n",
+                track->sampletochunk[i].samples_per_chunk); /* 4 bytes */
+        fprintf(xmlout,    "              <SampleDescrIndex>%u</SampleDescrIndex>\n",
+                track->sampletochunk[i].sample_descr_idx); /* 4 bytes */
+    }
+    fprintf(xmlout,      "            </SampleToChunk>\n");
+    // After reading this info in, track->num_chunks is calculated and a decompressed table established internally.
+
+    fprintf(xmlout,      "            <SampleSize BoxType=\"stsz\">\n");
+    if (track->same_sample_size) {
+        // all values in track->sample[i].sample_size are equal.  Grab the first one.
+        fprintf(xmlout,    "              <Sample_Size>%u</Sample_Size>\n",
+                track->sample[0].sample_size);
+        if (notes) {
+            fprintf(xmlout,
+                    "              <!-- Non-zero value means all samples have that size. -->\n");
+            fprintf(xmlout,
+                    "              <!-- So <Sample_Count> (aka Entry_Count in std.) has no meaning, is suppressed from this output, and no table follows. -->\n");
+        }
+    } else {
+        fprintf(xmlout,    "              <Sample_Size>0</Sample_Size>\n");
+        if (notes)
+            if (sampletables) {
+                fprintf(xmlout,
+                        "              <!-- Zero value means samples have different sizes, given in table next of length Sample_Count (aka Entry_Count in std). -->\n");
+            } else {
+                fprintf(xmlout,
+                        "              <!-- Zero value means samples have different sizes, given in table (not shown) of length Sample_Count (aka Entry_Count in std). -->\n");
+            }
+        fprintf(xmlout,    "              <Sample_Count>%u</Sample_Count>\n",
+                track->num_samples);
+        if (sampletables)
+            for (i = 0; i < (int)track->num_samples; i++) {
+                fprintf(xmlout,  "              <EntrySize Num=\"%u\">%u</EntrySize>\n", i + 1,
+                        track->sample[i].sample_size);
+            }
+    }
+    fprintf(xmlout,      "            </SampleSize>\n");
+
+    fprintf(xmlout,      "            <ChunkOffset BoxType=\"stco\">\n");
+    // Structure not yet - Variant ChunkLargeOffset 'co64'
+    fprintf(xmlout,      "              <EntryCount>%u</EntryCount>\n",
+            track->num_chunks);
+    if (notes) {
+        fprintf(xmlout,
+                "              <!-- For this implementation, EntryCount shown is one calculated during file read of <SampleToChunk> data. -->\n");
+        fprintf(xmlout,
+                "              <!-- Implementation will report failure during file read of <ChunkOffset> data if read entry-count disagrees. -->\n");
+    }
+    if (sampletables)
+        for (i = 0; i < (int)track->num_chunks; i++) {
+            fprintf(xmlout,  "              <Chunk_Offset Num=\"%d\">%u</Chunk_Offset>\n",
+                    i + 1, track->chunk[i].offset);
+        }
+    fprintf(xmlout,      "            </ChunkOffset>\n");
+
+    fprintf(xmlout,      "          </SampleTable>\n");
 }
 
 /* ------------- */
 
-int xml_out_frame(FILE* file, FILE* xmlout, mj2_sample_t *sample, unsigned int snum, opj_event_mgr_t *event_mgr)
+int xml_out_frame(FILE* file, FILE* xmlout, mj2_sample_t *sample,
+                  unsigned int snum, opj_event_mgr_t *event_mgr)
 {
-       opj_dparameters_t parameters;   /* decompression parameters */
-  opj_image_t *img;
-  opj_cp_t *cp;
-  int i;
-  int numcomps;
-  unsigned char* frame_codestream;
-       opj_dinfo_t* dinfo = NULL;      /* handle to a decompressor */
-       opj_cio_t *cio = NULL;  
-       opj_j2k_t *j2k;
-
-       /* JPEG 2000 compressed image data */
-
-       /* get a decoder handle */
-       dinfo = opj_create_decompress(CODEC_J2K);
-
-       /* catch events using our callbacks and give a local context */
-       opj_set_event_mgr((opj_common_ptr)dinfo, event_mgr, stderr);
-
-       /* setup the decoder decoding parameters using the current image and user parameters */
-       parameters.cp_limit_decoding = DECODE_ALL_BUT_PACKETS;
-       opj_setup_decoder(dinfo, &parameters);  
-
-  frame_codestream = (unsigned char*) malloc (sample->sample_size-8); /* Skipping JP2C marker */
-  if(frame_codestream == NULL)
-         return 1;
-
-  fseek(file,sample->offset+8,SEEK_SET);
-  fread(frame_codestream,sample->sample_size-8,1, file);  /* Assuming that jp and ftyp markers size do */
-
-       /* open a byte stream */
-       cio = opj_cio_open((opj_common_ptr)dinfo, frame_codestream, sample->sample_size-8);
-
-  /* Decode J2K to image: */
-       img = opj_decode(dinfo, cio);
-  if (!img) {
-               fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
-               opj_destroy_decompress(dinfo);
-               opj_cio_close(cio);
-               return 1;
-       }
-
-       j2k = (opj_j2k_t*)dinfo->j2k_handle;
-       j2k_default_tcp = j2k->default_tcp;
-       cp = j2k->cp;
-
-  numcomps = img->numcomps;
-  /*  Alignments:        "      <       To help maintain xml pretty-printing */  
-  fprintf(xmlout,      "      <JP2_Frame Num=\"%d\">\n", snum+1);
-  fprintf(xmlout,      "        <MainHeader>\n");
-  /* There can be multiple codestreams; a particular image is entirely within a single codestream */
-  /* TO DO:  A frame can be represented by two I-guess-contiguous codestreams if its interleaved. */
-  fprintf(xmlout,      "          <StartOfCodestream Marker=\"SOC\" />\n");
-  /* "cp" stands for "coding parameter"; "tcp" is tile coding parameters, "tccp" is tile-component coding parameters */
-  xml_out_frame_siz(xmlout, img, cp); /* reqd in main */
-  xml_out_frame_cod(xmlout, j2k_default_tcp); /* reqd in main */
-  xml_out_frame_coc(xmlout, j2k_default_tcp, numcomps); /* opt in main, at most 1 per component */
-  xml_out_frame_qcd(xmlout, j2k_default_tcp); /* reqd in main */
-  xml_out_frame_qcc(xmlout, j2k_default_tcp, numcomps);        /* opt in main, at most 1 per component */
-  xml_out_frame_rgn(xmlout, j2k_default_tcp, numcomps); /* opt, at most 1 per component */
-  xml_out_frame_poc(xmlout, j2k_default_tcp); /*  opt (but reqd in main or tile for any progression order changes) */
-  /* Next four get j2k_default_tcp passed globally: */
+    opj_dparameters_t parameters;   /* decompression parameters */
+    opj_image_t *img;
+    opj_cp_t *cp;
+    int i;
+    int numcomps;
+    unsigned char* frame_codestream;
+    opj_dinfo_t* dinfo = NULL;  /* handle to a decompressor */
+    opj_cio_t *cio = NULL;
+    opj_j2k_t *j2k;
+
+    /* JPEG 2000 compressed image data */
+
+    /* get a decoder handle */
+    dinfo = opj_create_decompress(CODEC_J2K);
+
+    /* catch events using our callbacks and give a local context */
+    opj_set_event_mgr((opj_common_ptr)dinfo, event_mgr, stderr);
+
+    /* setup the decoder decoding parameters using the current image and user parameters */
+    parameters.cp_limit_decoding = DECODE_ALL_BUT_PACKETS;
+    opj_setup_decoder(dinfo, &parameters);
+
+    frame_codestream = (unsigned char*) malloc(sample->sample_size -
+                       8); /* Skipping JP2C marker */
+    if (frame_codestream == NULL) {
+        return 1;
+    }
+
+    fseek(file, sample->offset + 8, SEEK_SET);
+    fread(frame_codestream, sample->sample_size - 8, 1,
+          file); /* Assuming that jp and ftyp markers size do */
+
+    /* open a byte stream */
+    cio = opj_cio_open((opj_common_ptr)dinfo, frame_codestream,
+                       sample->sample_size - 8);
+
+    /* Decode J2K to image: */
+    img = opj_decode(dinfo, cio);
+    if (!img) {
+        fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
+        opj_destroy_decompress(dinfo);
+        opj_cio_close(cio);
+        return 1;
+    }
+
+    j2k = (opj_j2k_t*)dinfo->j2k_handle;
+    j2k_default_tcp = j2k->default_tcp;
+    cp = j2k->cp;
+
+    numcomps = img->numcomps;
+    /*  Alignments:        "      <       To help maintain xml pretty-printing */
+    fprintf(xmlout,      "      <JP2_Frame Num=\"%d\">\n", snum + 1);
+    fprintf(xmlout,      "        <MainHeader>\n");
+    /* There can be multiple codestreams; a particular image is entirely within a single codestream */
+    /* TO DO:  A frame can be represented by two I-guess-contiguous codestreams if its interleaved. */
+    fprintf(xmlout,      "          <StartOfCodestream Marker=\"SOC\" />\n");
+    /* "cp" stands for "coding parameter"; "tcp" is tile coding parameters, "tccp" is tile-component coding parameters */
+    xml_out_frame_siz(xmlout, img, cp); /* reqd in main */
+    xml_out_frame_cod(xmlout, j2k_default_tcp); /* reqd in main */
+    xml_out_frame_coc(xmlout, j2k_default_tcp,
+                      numcomps); /* opt in main, at most 1 per component */
+    xml_out_frame_qcd(xmlout, j2k_default_tcp); /* reqd in main */
+    xml_out_frame_qcc(xmlout, j2k_default_tcp,
+                      numcomps); /* opt in main, at most 1 per component */
+    xml_out_frame_rgn(xmlout, j2k_default_tcp,
+                      numcomps); /* opt, at most 1 per component */
+    xml_out_frame_poc(xmlout,
+                      j2k_default_tcp); /*  opt (but reqd in main or tile for any progression order changes) */
+    /* Next four get j2k_default_tcp passed globally: */
 #ifdef SUPPRESS_FOR_NOW
-  xml_out_frame_ppm(xmlout, cp); /* opt (but either PPM or PPT [distributed in tile headers] or codestream packet header reqd) */
+    xml_out_frame_ppm(xmlout,
+                      cp); /* opt (but either PPM or PPT [distributed in tile headers] or codestream packet header reqd) */
 #endif
-  xml_out_frame_tlm(xmlout); /* NO-OP.  TLM NOT SAVED IN DATA STRUCTURE */ /* opt */
-  xml_out_frame_plm(xmlout); /* NO-OP.  PLM NOT SAVED IN DATA STRUCTURE */ /* opt in main; can be used in conjunction with PLT */
-  xml_out_frame_crg(xmlout); /* NO-OP.  CRG NOT SAVED IN DATA STRUCTURE */ /* opt in main; */
-  xml_out_frame_com(xmlout, j2k_default_tcp); /* NO-OP.  COM NOT SAVED IN DATA STRUCTURE */ /* opt in main; */
-
-  fprintf(xmlout,      "        </MainHeader>\n");
-
-  /*   TO DO: all the tile headers (sigh)  */
-  fprintf(xmlout,      "        <TilePartHeaders Count=\"%d\">\n", cp->tileno_size);           /* size of the vector tileno */
-  for(i = 0; i < cp->tileno_size; i++) { /* I think cp->tileno_size will be same number as (cp->tw * cp->th) or as global j2k_curtileno */
-    // Standard seems to use zero-based # for tile-part.
-    fprintf(xmlout,    "          <TilePartHeader Num=\"%d\" ID=\"%d\">\n", i, cp->tileno[i]);                 /* ID number of the tiles present in the codestream */
-    fprintf(xmlout,    "            <StartOfTilePart Marker=\"SOT\" />\n");
-       /* All markers in tile-part headers (between SOT and SOD) are optional, unless structure requires. */
-    if(i == 0) {
-      xml_out_frame_cod(xmlout, &(cp->tcps[i])); /* No more than 1 per tile */
-      xml_out_frame_coc(xmlout, &(cp->tcps[i]), numcomps); /* No more than 1 per component */
-      xml_out_frame_qcd(xmlout, &(cp->tcps[i])); /* No more than 1 per tile */
-      xml_out_frame_qcc(xmlout, &(cp->tcps[i]), numcomps);     /* No more than 1 per component */
-      xml_out_frame_rgn(xmlout, &(cp->tcps[i]), numcomps); /* No more than 1 per component */
-    }
-    xml_out_frame_poc(xmlout, &(cp->tcps[i])); /* Reqd only if any progression order changes different from main POC */
+    xml_out_frame_tlm(
+        xmlout); /* NO-OP.  TLM NOT SAVED IN DATA STRUCTURE */ /* opt */
+    xml_out_frame_plm(
+        xmlout); /* NO-OP.  PLM NOT SAVED IN DATA STRUCTURE */ /* opt in main; can be used in conjunction with PLT */
+    xml_out_frame_crg(
+        xmlout); /* NO-OP.  CRG NOT SAVED IN DATA STRUCTURE */ /* opt in main; */
+    xml_out_frame_com(xmlout,
+                      j2k_default_tcp); /* NO-OP.  COM NOT SAVED IN DATA STRUCTURE */ /* opt in main; */
+
+    fprintf(xmlout,      "        </MainHeader>\n");
+
+    /*    TO DO: all the tile headers (sigh)  */
+    fprintf(xmlout,      "        <TilePartHeaders Count=\"%d\">\n",
+            cp->tileno_size);        /* size of the vector tileno */
+    for (i = 0; i < cp->tileno_size;
+            i++) { /* I think cp->tileno_size will be same number as (cp->tw * cp->th) or as global j2k_curtileno */
+        // Standard seems to use zero-based # for tile-part.
+        fprintf(xmlout,    "          <TilePartHeader Num=\"%d\" ID=\"%d\">\n", i,
+                cp->tileno[i]);          /* ID number of the tiles present in the codestream */
+        fprintf(xmlout,    "            <StartOfTilePart Marker=\"SOT\" />\n");
+        /* All markers in tile-part headers (between SOT and SOD) are optional, unless structure requires. */
+        if (i == 0) {
+            xml_out_frame_cod(xmlout, &(cp->tcps[i])); /* No more than 1 per tile */
+            xml_out_frame_coc(xmlout, &(cp->tcps[i]),
+                              numcomps); /* No more than 1 per component */
+            xml_out_frame_qcd(xmlout, &(cp->tcps[i])); /* No more than 1 per tile */
+            xml_out_frame_qcc(xmlout, &(cp->tcps[i]),
+                              numcomps);  /* No more than 1 per component */
+            xml_out_frame_rgn(xmlout, &(cp->tcps[i]),
+                              numcomps); /* No more than 1 per component */
+        }
+        xml_out_frame_poc(xmlout,
+                          &(cp->tcps[i])); /* Reqd only if any progression order changes different from main POC */
 #ifdef SUPPRESS_FOR_NOW
-    xml_out_frame_ppt(xmlout, &(cp->tcps[i])); /* Either PPT [distributed in tile headers] or PPM or codestream packet header reqd. */
+        xml_out_frame_ppt(xmlout,
+                          &(cp->tcps[i])); /* Either PPT [distributed in tile headers] or PPM or codestream packet header reqd. */
 #endif
-    xml_out_frame_plt(xmlout, &(cp->tcps[i])); /* NO-OP.  PLT NOT SAVED IN DATA STRUCTURE */ /* Can be used in conjunction with main's PLM */
-    xml_out_frame_com(xmlout, &(cp->tcps[i])); /* NO-OP.  COM NOT SAVED IN DATA STRUCTURE */
-    /* opj_tcp_t * cp->tcps; "tile coding parameters" */
-    /* Maybe not: fprintf(xmlout,  "        <>%d</>, cp->matrice[i];                   */ /* Fixed layer    */
-    fprintf(xmlout,    "            <StartOfData Marker=\"SOD\" />\n");
-    if(notes)
-      fprintf(xmlout,  "            <!-- Tile-part bitstream, not shown, follows tile-part header and SOD marker. -->\n");
-    fprintf(xmlout,    "          </TilePartHeader>\n");
-  }
-  fprintf(xmlout,      "        </TilePartHeaders>\n");                /* size of the vector tileno */
+        xml_out_frame_plt(xmlout,
+                          &(cp->tcps[i])); /* NO-OP.  PLT NOT SAVED IN DATA STRUCTURE */ /* Can be used in conjunction with main's PLM */
+        xml_out_frame_com(xmlout,
+                          &(cp->tcps[i])); /* NO-OP.  COM NOT SAVED IN DATA STRUCTURE */
+        /* opj_tcp_t * cp->tcps; "tile coding parameters" */
+        /* Maybe not: fprintf(xmlout,  "        <>%d</>, cp->matrice[i];            */ /* Fixed layer    */
+        fprintf(xmlout,    "            <StartOfData Marker=\"SOD\" />\n");
+        if (notes) {
+            fprintf(xmlout,
+                    "            <!-- Tile-part bitstream, not shown, follows tile-part header and SOD marker. -->\n");
+        }
+        fprintf(xmlout,    "          </TilePartHeader>\n");
+    }
+    fprintf(xmlout,
+            "        </TilePartHeaders>\n");     /* size of the vector tileno */
 
 #ifdef NOTYET
-  IMAGINE the cp object has data to support the following... but we could use an new different data structure instead
-  /* I'm unclear if the span of the original fread(frame_codestream...) included the following items if they're trailing. */
-  /* ALSO TO DO, BUT DATA STRUCTURE DOESN'T HANDLE YET: boxes (anywhere in file except before the Filetype box): */
-  xml_out_frame_jp2i(xmlout, &cp); /* IntellectualProperty 'jp2i' (no restrictions on location) */
-  xml_out_frame_xml(xmlout, &cp); /* XML 'xml\040' (0x786d6c20).  Can appear multiply */
-  xml_out_frame_uuid(xmlout, &cp); /* UUID 'uuid' (top level only) */
-  xml_out_frame_uinf(xmlout, &cp); /* UUIDInfo 'uinf', includes UUIDList 'ulst' and URL 'url\40' */
+    IMAGINE the cp object has data to support the following... but we could use an
+    new different data structure instead
+    /* I'm unclear if the span of the original fread(frame_codestream...) included the following items if they're trailing. */
+    /* ALSO TO DO, BUT DATA STRUCTURE DOESN'T HANDLE YET: boxes (anywhere in file except before the Filetype box): */
+    xml_out_frame_jp2i(xmlout,
+                       &cp); /* IntellectualProperty 'jp2i' (no restrictions on location) */
+    xml_out_frame_xml(xmlout,
+                      &cp); /* XML 'xml\040' (0x786d6c20).  Can appear multiply */
+    xml_out_frame_uuid(xmlout, &cp); /* UUID 'uuid' (top level only) */
+    xml_out_frame_uinf(xmlout,
+                       &cp); /* UUIDInfo 'uinf', includes UUIDList 'ulst' and URL 'url\40' */
 #endif
 
-  fprintf(xmlout,      "      </JP2_Frame>\n");
-
-  /* Extra commentary: */
-  if(notes) {
-    fprintf(xmlout,    "      <!-- Given the number and size of components, mj2_to_frame would try to convert this -->\n");
-    if (((img->numcomps == 3) && (img->comps[0].dx == img->comps[1].dx / 2) 
-      && (img->comps[0].dx == img->comps[2].dx / 2 ) && (img->comps[0].dx == 1)) 
-      || (img->numcomps == 1)) {
-      fprintf(xmlout,  "      <!-- file to a YUV movie in the normal manner. -->\n");
-    }
-    else if ((img->numcomps == 3) && 
-      (img->comps[0].dx == 1) && (img->comps[1].dx == 1)&&
-         (img->comps[2].dx == 1))  {// If YUV 4:4:4 input --> to bmp
-         fprintf(xmlout,  "      <!-- YUV 4:4:4 file to a series of .bmp files. -->\n");
-    }
-    else {
-         fprintf(xmlout,  "      <!-- file whose image component dimension are unknown, to a series of .j2k files. -->\n");
+    fprintf(xmlout,      "      </JP2_Frame>\n");
+
+    /* Extra commentary: */
+    if (notes) {
+        fprintf(xmlout,
+                "      <!-- Given the number and size of components, mj2_to_frame would try to convert this -->\n");
+        if (((img->numcomps == 3) && (img->comps[0].dx == img->comps[1].dx / 2)
+                && (img->comps[0].dx == img->comps[2].dx / 2) && (img->comps[0].dx == 1))
+                || (img->numcomps == 1)) {
+            fprintf(xmlout,  "      <!-- file to a YUV movie in the normal manner. -->\n");
+        } else if ((img->numcomps == 3) &&
+                   (img->comps[0].dx == 1) && (img->comps[1].dx == 1) &&
+                   (img->comps[2].dx == 1))  {// If YUV 4:4:4 input --> to bmp
+            fprintf(xmlout,  "      <!-- YUV 4:4:4 file to a series of .bmp files. -->\n");
+        } else {
+            fprintf(xmlout,
+                    "      <!-- file whose image component dimension are unknown, to a series of .j2k files. -->\n");
+        }
     }
-  }
 
-       opj_destroy_decompress(dinfo);
-       opj_cio_close(cio);
-  free(frame_codestream);
+    opj_destroy_decompress(dinfo);
+    opj_cio_close(cio);
+    free(frame_codestream);
 
-  return 0;
+    return 0;
 }
 
 /* ------------- */
@@ -1056,10 +1346,9 @@ void int16_to_3packedchars(short int value, char* buf)
     /* This is to retrieve the 3-letter ASCII language code */
     /* Each char is packed into 5 bits, as difference from 0x60 */
     int i;
-    for (i = 2; i >= 0; i--)
-    {
+    for (i = 2; i >= 0; i--) {
         buf[i] = (value & 0x001f) + 0x60;
-        value = (value >>5);
+        value = (value >> 5);
     }
     buf[3] = '\0';
 }
@@ -1068,669 +1357,940 @@ void int16_to_3packedchars(short int value, char* buf)
 
 void xml_out_frame_siz(FILE* xmlout, opj_image_t *img, opj_cp_t *cp)
 {
-  opj_image_comp_t *comp;
-  int i;
-
-  fprintf(xmlout,    "          <ImageAndFileSize Marker=\"SIZ\">\n");
-  // This is similar to j2k.c's j2k_dump_image.
-  // Not of interest: Lsiz, Rsiz
-  fprintf(xmlout,    "            <Xsiz>%d</Xsiz>\n", img->x1);
-  fprintf(xmlout,    "            <Ysiz>%d</Ysiz>\n", img->y1);
-  if(notes)
-    fprintf(xmlout,  "            <!-- Xsiz, Ysiz is the size of the reference grid. -->\n");
-  fprintf(xmlout,    "            <XOsiz>%d</XOsiz>\n", img->x0);
-  fprintf(xmlout,    "            <YOsiz>%d</YOsiz>\n", img->y0);
-  if(notes)
-    fprintf(xmlout,  "            <!-- XOsiz, YOsiz are offsets from grid origin to image origin. -->\n");
-  fprintf(xmlout,    "            <XTsiz>%d</XTsiz>\n", cp->tdx);
-  fprintf(xmlout,    "            <YTsiz>%d</YTsiz>\n", cp->tdy);
-  if(notes)
-    fprintf(xmlout,  "            <!-- XTsiz, YTsiz is the size of one tile with respect to the grid. -->\n");
-  fprintf(xmlout,    "            <XTOsiz>%d</XTOsiz>\n", cp->tx0);
-  fprintf(xmlout,    "            <YTOsiz>%d</YTOsiz>\n", cp->ty0);
-  if(notes)
-    fprintf(xmlout,  "            <!-- XTOsiz, YTOsiz are offsets from grid origin to first tile origin. -->\n");
-  fprintf(xmlout,    "            <Csiz>%d</Csiz>\n", img->numcomps);
-  if(notes) {
-    fprintf(xmlout,  "            <!-- Csiz is the number of components in the image. -->\n");
-    fprintf(xmlout,  "            <!-- For image components next: -->\n");
-    fprintf(xmlout,  "            <!--   XRsiz, YRsiz denote pixel-sample-spacing on the grid, per Part I Annex B. -->\n");
-    //fprintf(xmlout,"            <!--   XO, YO is offset of the component compared to the whole image. -->\n");
-    fprintf(xmlout,  "            <!--   Bits per pixel (bpp) is the pixel depth. -->\n");
-    fprintf(xmlout,  "            <!--   WidthOfData and HeightOfData are calculated values, e.g.: w = roundup((Xsiz - XOsiz)/ XRsiz) -->\n");
-  }
-
-  for (i = 0; i < img->numcomps; i++) {/* image-components */
-    comp = &(img->comps[i]);
-    fprintf(xmlout,  "            <Component Num=\"%d\">\n", i+1);
-    fprintf(xmlout,  "              <Ssiz>\n");
-       if(raw)
-      fprintf(xmlout,"                <AsHex>0x%02x</AsHex>\n", (comp->sgnd << 7) & (comp->prec - 1));
-       if(derived) {
-      fprintf(xmlout,"                <Signed>%d</Signed>\n", comp->sgnd);
-      fprintf(xmlout,"                <PrecisionInBits>%d</PrecisionInBits>\n", comp->prec);
-       }
-    fprintf(xmlout,  "              </Ssiz>\n");
-    fprintf(xmlout,  "              <XRsiz>%d</XRsiz>\n", comp->dx);
-    fprintf(xmlout,  "              <YRsiz>%d</YRsiz>\n", comp->dy);
-    fprintf(xmlout,  "              <WidthOfData>%d</WidthOfData>\n", comp->w);
-    fprintf(xmlout,  "              <HeightOfData>%d</HeightOfData>\n", comp->h);
-    /* Rest of these aren't calculated when SIZ is read:
-    fprintf(xmlout,  "              <XO>%d</XO>\n", comp->x0);
-    fprintf(xmlout,  "              <YO>%d</YO>\n", comp->y0);
-       if(notes)
-         fprintf(xmlout,"              <!--  XO, YO is offset of the component compared to the whole image. -->\n");
-    fprintf(xmlout,  "              <BitsPerPixel>%d</BitsPerPixel>\n", comp->bpp);
-    fprintf(xmlout,  "              <NumberOfDecodedResolution>%d</NumberOfDecodedResolution>\n", comp->resno_decoded); */
-    // SUPPRESS: n/a to mj2_to_metadata.  fprintf(xmlout,"        <Factor>%d</Factor\n", comp->factor);
-    /* factor = number of division by 2 of the out image  compare to the original size of image */
-    // TO DO comp->data:  int *data;                   /* image-component data      */
-
-    fprintf(xmlout,  "            </Component>\n");
-  }
-  fprintf(xmlout,    "          </ImageAndFileSize>\n");
+    opj_image_comp_t *comp;
+    int i;
+
+    fprintf(xmlout,    "          <ImageAndFileSize Marker=\"SIZ\">\n");
+    // This is similar to j2k.c's j2k_dump_image.
+    // Not of interest: Lsiz, Rsiz
+    fprintf(xmlout,    "            <Xsiz>%d</Xsiz>\n", img->x1);
+    fprintf(xmlout,    "            <Ysiz>%d</Ysiz>\n", img->y1);
+    if (notes) {
+        fprintf(xmlout,
+                "            <!-- Xsiz, Ysiz is the size of the reference grid. -->\n");
+    }
+    fprintf(xmlout,    "            <XOsiz>%d</XOsiz>\n", img->x0);
+    fprintf(xmlout,    "            <YOsiz>%d</YOsiz>\n", img->y0);
+    if (notes) {
+        fprintf(xmlout,
+                "            <!-- XOsiz, YOsiz are offsets from grid origin to image origin. -->\n");
+    }
+    fprintf(xmlout,    "            <XTsiz>%d</XTsiz>\n", cp->tdx);
+    fprintf(xmlout,    "            <YTsiz>%d</YTsiz>\n", cp->tdy);
+    if (notes) {
+        fprintf(xmlout,
+                "            <!-- XTsiz, YTsiz is the size of one tile with respect to the grid. -->\n");
+    }
+    fprintf(xmlout,    "            <XTOsiz>%d</XTOsiz>\n", cp->tx0);
+    fprintf(xmlout,    "            <YTOsiz>%d</YTOsiz>\n", cp->ty0);
+    if (notes) {
+        fprintf(xmlout,
+                "            <!-- XTOsiz, YTOsiz are offsets from grid origin to first tile origin. -->\n");
+    }
+    fprintf(xmlout,    "            <Csiz>%d</Csiz>\n", img->numcomps);
+    if (notes) {
+        fprintf(xmlout,
+                "            <!-- Csiz is the number of components in the image. -->\n");
+        fprintf(xmlout,  "            <!-- For image components next: -->\n");
+        fprintf(xmlout,
+                "            <!--   XRsiz, YRsiz denote pixel-sample-spacing on the grid, per Part I Annex B. -->\n");
+        //fprintf(xmlout,"            <!--   XO, YO is offset of the component compared to the whole image. -->\n");
+        fprintf(xmlout,
+                "            <!--   Bits per pixel (bpp) is the pixel depth. -->\n");
+        fprintf(xmlout,
+                "            <!--   WidthOfData and HeightOfData are calculated values, e.g.: w = roundup((Xsiz - XOsiz)/ XRsiz) -->\n");
+    }
+
+    for (i = 0; i < img->numcomps; i++) {/* image-components */
+        comp = &(img->comps[i]);
+        fprintf(xmlout,  "            <Component Num=\"%d\">\n", i + 1);
+        fprintf(xmlout,  "              <Ssiz>\n");
+        if (raw) {
+            fprintf(xmlout, "                <AsHex>0x%02x</AsHex>\n",
+                    (comp->sgnd << 7) & (comp->prec - 1));
+        }
+        if (derived) {
+            fprintf(xmlout, "                <Signed>%d</Signed>\n", comp->sgnd);
+            fprintf(xmlout, "                <PrecisionInBits>%d</PrecisionInBits>\n",
+                    comp->prec);
+        }
+        fprintf(xmlout,  "              </Ssiz>\n");
+        fprintf(xmlout,  "              <XRsiz>%d</XRsiz>\n", comp->dx);
+        fprintf(xmlout,  "              <YRsiz>%d</YRsiz>\n", comp->dy);
+        fprintf(xmlout,  "              <WidthOfData>%d</WidthOfData>\n", comp->w);
+        fprintf(xmlout,  "              <HeightOfData>%d</HeightOfData>\n", comp->h);
+        /* Rest of these aren't calculated when SIZ is read:
+        fprintf(xmlout,  "              <XO>%d</XO>\n", comp->x0);
+        fprintf(xmlout,  "              <YO>%d</YO>\n", comp->y0);
+        if(notes)
+          fprintf(xmlout,"              <!--  XO, YO is offset of the component compared to the whole image. -->\n");
+        fprintf(xmlout,  "              <BitsPerPixel>%d</BitsPerPixel>\n", comp->bpp);
+        fprintf(xmlout,  "              <NumberOfDecodedResolution>%d</NumberOfDecodedResolution>\n", comp->resno_decoded); */
+        // SUPPRESS: n/a to mj2_to_metadata.  fprintf(xmlout,"        <Factor>%d</Factor\n", comp->factor);
+        /* factor = number of division by 2 of the out image  compare to the original size of image */
+        // TO DO comp->data:  int *data;            /* image-component data      */
+
+        fprintf(xmlout,  "            </Component>\n");
+    }
+    fprintf(xmlout,    "          </ImageAndFileSize>\n");
 }
 
 /* ------------- */
 
 void xml_out_frame_cod(FILE* xmlout, opj_tcp_t *tcp)
 {
-/* Could be called with tcp = &j2k_default_tcp;
-/* Or, for tile-part header, with &j2k_cp->tcps[j2k_curtileno]
-/*  Alignment for main:"          < < < <   To help maintain xml pretty-printing */  
-/*  Alignment for tile:"            < < <   To help maintain xml pretty-printing */  
-  opj_tccp_t *tccp;
-  int i;
-  char spaces[13] = "            "; /* 12 spaces if tilepart*/
-  char* s = spaces;
-  if(tcp == j2k_default_tcp) {
-    s++;s++; /* shorten s to 10 spaces if main */
-  }
-  tccp = &(tcp->tccps[0]);
-
-  fprintf(xmlout,      "%s<CodingStyleDefault Marker=\"COD\">\n",s); /* Required in main header */
-  /* Not retained or of interest: Lcod */
-  fprintf(xmlout,      "%s  <Scod>0x%02x</Scod>\n", s, tcp->csty); /* 1 byte */
-  if(notes) {
-    fprintf(xmlout,    "%s  <!-- For Scod, specific bits mean (where bit 0 is lowest or rightmost): -->\n",s);
-    fprintf(xmlout,    "%s  <!-- bit 0: Defines entropy coder precincts -->\n",s);
-    fprintf(xmlout,    "%s  <!--        0 = (PPx=15, PPy=15); 1 = precincts defined below. -->\n",s);
-    fprintf(xmlout,    "%s  <!-- bit 1: 1 = SOP marker may be used; 0 = not. -->\n",s);
-    fprintf(xmlout,    "%s  <!-- bit 2: 1 = EPH marker may be used; 0 = not. -->\n",s);
-  }
-  fprintf(xmlout,      "%s  <SGcod>\n",s);
-  fprintf(xmlout,      "%s    <ProgressionOrder>%d</ProgressionOrder>\n", s, tcp->prg); /* 1 byte, SGcod (A) */
-  if(notes) {
-    fprintf(xmlout,    "%s    <!-- Defined Progression Order Values are: -->\n",s);
-    fprintf(xmlout,    "%s    <!-- 0 = LRCP; 1 = RLCP; 2 = RPCL; 3 = PCRL; 4 = CPRL -->\n",s);
-    fprintf(xmlout,    "%s    <!-- where L = \"layer\", R = \"resolution level\", C = \"component\", P = \"position\". -->\n",s);
-  }
-  fprintf(xmlout,      "%s    <NumberOfLayers>%d</NumberOfLayers>\n", s, tcp->numlayers); /* 2 bytes, SGcod (B) */
-  fprintf(xmlout,      "%s    <MultipleComponentTransformation>%d</MultipleComponentTransformation>\n", s, tcp->mct); /* 1 byte, SGcod (C).  More or less boolean */
-  if(notes)
-    fprintf(xmlout,    "%s    <!-- For MCT, 0 = none, 1 = transform first 3 components for efficiency, per Part I Annex G -->\n",s);
-  fprintf(xmlout,      "%s  </SGcod>\n",s);
-  /* This code will compile only if declaration of j2k_default_tcp is changed from static (to implicit extern) in j2k.c */
-  fprintf(xmlout,      "%s  <SPcod>\n",s);
-  /* Internal data structure tccp defines separate defaults for each component, but they all get the same values */
-  /* So we only have to report the first component's values here. */
-  /* Compare j2k_read_cox(...) */
-  fprintf(xmlout,      "%s    <NumberOfDecompositionLevels>%d</NumberOfDecompositionLevels>\n", s, tccp->numresolutions - 1);  /* 1 byte, SPcox (D) */
-  fprintf(xmlout,      "%s    <CodeblockWidth>%d</CodeblockWidth>\n", s, tccp->cblkw - 2);     /* 1 byte, SPcox (E) */
-  fprintf(xmlout,      "%s    <CodeblockHeight>%d</CodeblockHeight>\n", s, tccp->cblkh - 2);   /* 1 byte, SPcox (F) */
-  if(notes) {
-    fprintf(xmlout,    "%s    <!-- CBW and CBH are non-negative, and summed cannot exceed 8 -->\n",s);
-    fprintf(xmlout,    "%s    <!-- Codeblock dimension is 2^(value + 2) -->\n", s);
-  }
-  fprintf(xmlout,      "%s    <CodeblockStyle>0x%02x</CodeblockStyle>\n", s, tccp->cblksty);   /* 1 byte, SPcox (G) */
-  if(notes) {
-    fprintf(xmlout,    "%s    <!-- For CodeblockStyle, bits mean (with value 1=feature on, 0=off): -->\n",s);
-    fprintf(xmlout,    "%s    <!-- bit 0: Selective arithmetic coding bypass. -->\n",s);
-    fprintf(xmlout,    "%s    <!-- bit 1: Reset context probabilities on coding pass boundaries. -->\n",s);
-    fprintf(xmlout,    "%s    <!-- bit 2: Termination on each coding pass. -->\n",s);
-    fprintf(xmlout,    "%s    <!-- bit 3: Vertically causal context. -->\n",s);
-    fprintf(xmlout,    "%s    <!-- bit 4: Predictable termination. -->\n",s);
-    fprintf(xmlout,    "%s    <!-- bit 5: Segmentation symbols are used. -->\n",s);
-  }
-  fprintf(xmlout,      "%s    <Transformation>%d</Transformation>\n", s, tccp->qmfbid);        /* 1 byte, SPcox (H) */
-  if(notes)
-    fprintf(xmlout,    "%s    <!-- For Transformation, 0=\"9-7 irreversible filter\", 1=\"5-3 reversible filter\" -->\n",s);
-  if (tccp->csty & J2K_CP_CSTY_PRT) {
-    fprintf(xmlout,    "%s    <PrecinctSize>\n",s); /* 1 byte, SPcox (I_i) */
-    if(notes)
-      fprintf(xmlout,  "%s    <!-- These are size exponents PPx and PPy. May be zero only for first level (aka N(L)LL subband)-->\n",s);
-    for (i = 0; i < tccp->numresolutions; i++) {       
-      fprintf(xmlout,  "%s      <PrecinctHeightAndWidth  ResolutionLevel=\"%d\">\n", s, i);
-         if(raw)
-        fprintf(xmlout,"%s        <AsHex>0x%02x</AsHex>\n", s, (tccp->prch[i] << 4) | tccp->prcw[i]);  /* packed into 1 byte, SPcox (G) */
-         if(derived) {
-        fprintf(xmlout,"%s        <WidthAsDecimal>%d</WidthAsDecimal>\n", s, tccp->prcw[i]);
-        fprintf(xmlout,"%s        <HeightAsDecimal>%d</HeightAsDecimal>\n", s, tccp->prch[i]);
-         }
-      fprintf(xmlout,  "%s      </PrecinctHeightAndWidth>\n", s, i);
-    }
-    fprintf(xmlout,    "%s    </PrecinctSize>\n",s); /* 1 byte, SPcox (I_i) */
-  }
-  fprintf(xmlout,      "%s  </SPcod>\n",s);
-  fprintf(xmlout,      "%s</CodingStyleDefault>\n",s);
+    /* Could be called with tcp = &j2k_default_tcp;
+    /* Or, for tile-part header, with &j2k_cp->tcps[j2k_curtileno]
+    /*  Alignment for main:"          < < < <   To help maintain xml pretty-printing */
+    /*  Alignment for tile:"            < < <   To help maintain xml pretty-printing */
+    opj_tccp_t *tccp;
+    int i;
+    char spaces[13] = "            "; /* 12 spaces if tilepart*/
+    char* s = spaces;
+    if (tcp == j2k_default_tcp) {
+        s++;
+        s++; /* shorten s to 10 spaces if main */
+    }
+    tccp = &(tcp->tccps[0]);
+
+    fprintf(xmlout,      "%s<CodingStyleDefault Marker=\"COD\">\n",
+            s); /* Required in main header */
+    /* Not retained or of interest: Lcod */
+    fprintf(xmlout,      "%s  <Scod>0x%02x</Scod>\n", s, tcp->csty); /* 1 byte */
+    if (notes) {
+        fprintf(xmlout,
+                "%s  <!-- For Scod, specific bits mean (where bit 0 is lowest or rightmost): -->\n",
+                s);
+        fprintf(xmlout,    "%s  <!-- bit 0: Defines entropy coder precincts -->\n", s);
+        fprintf(xmlout,
+                "%s  <!--        0 = (PPx=15, PPy=15); 1 = precincts defined below. -->\n", s);
+        fprintf(xmlout,    "%s  <!-- bit 1: 1 = SOP marker may be used; 0 = not. -->\n",
+                s);
+        fprintf(xmlout,    "%s  <!-- bit 2: 1 = EPH marker may be used; 0 = not. -->\n",
+                s);
+    }
+    fprintf(xmlout,      "%s  <SGcod>\n", s);
+    fprintf(xmlout,      "%s    <ProgressionOrder>%d</ProgressionOrder>\n", s,
+            tcp->prg); /* 1 byte, SGcod (A) */
+    if (notes) {
+        fprintf(xmlout,    "%s    <!-- Defined Progression Order Values are: -->\n", s);
+        fprintf(xmlout,
+                "%s    <!-- 0 = LRCP; 1 = RLCP; 2 = RPCL; 3 = PCRL; 4 = CPRL -->\n", s);
+        fprintf(xmlout,
+                "%s    <!-- where L = \"layer\", R = \"resolution level\", C = \"component\", P = \"position\". -->\n",
+                s);
+    }
+    fprintf(xmlout,      "%s    <NumberOfLayers>%d</NumberOfLayers>\n", s,
+            tcp->numlayers); /* 2 bytes, SGcod (B) */
+    fprintf(xmlout,
+            "%s    <MultipleComponentTransformation>%d</MultipleComponentTransformation>\n",
+            s, tcp->mct); /* 1 byte, SGcod (C).  More or less boolean */
+    if (notes) {
+        fprintf(xmlout,
+                "%s    <!-- For MCT, 0 = none, 1 = transform first 3 components for efficiency, per Part I Annex G -->\n",
+                s);
+    }
+    fprintf(xmlout,      "%s  </SGcod>\n", s);
+    /* This code will compile only if declaration of j2k_default_tcp is changed from static (to implicit extern) in j2k.c */
+    fprintf(xmlout,      "%s  <SPcod>\n", s);
+    /* Internal data structure tccp defines separate defaults for each component, but they all get the same values */
+    /* So we only have to report the first component's values here. */
+    /* Compare j2k_read_cox(...) */
+    fprintf(xmlout,
+            "%s    <NumberOfDecompositionLevels>%d</NumberOfDecompositionLevels>\n", s,
+            tccp->numresolutions - 1);   /* 1 byte, SPcox (D) */
+    fprintf(xmlout,      "%s    <CodeblockWidth>%d</CodeblockWidth>\n", s,
+            tccp->cblkw - 2);  /* 1 byte, SPcox (E) */
+    fprintf(xmlout,      "%s    <CodeblockHeight>%d</CodeblockHeight>\n", s,
+            tccp->cblkh - 2);    /* 1 byte, SPcox (F) */
+    if (notes) {
+        fprintf(xmlout,
+                "%s    <!-- CBW and CBH are non-negative, and summed cannot exceed 8 -->\n", s);
+        fprintf(xmlout,    "%s    <!-- Codeblock dimension is 2^(value + 2) -->\n", s);
+    }
+    fprintf(xmlout,      "%s    <CodeblockStyle>0x%02x</CodeblockStyle>\n", s,
+            tccp->cblksty);    /* 1 byte, SPcox (G) */
+    if (notes) {
+        fprintf(xmlout,
+                "%s    <!-- For CodeblockStyle, bits mean (with value 1=feature on, 0=off): -->\n",
+                s);
+        fprintf(xmlout,
+                "%s    <!-- bit 0: Selective arithmetic coding bypass. -->\n", s);
+        fprintf(xmlout,
+                "%s    <!-- bit 1: Reset context probabilities on coding pass boundaries. -->\n",
+                s);
+        fprintf(xmlout,    "%s    <!-- bit 2: Termination on each coding pass. -->\n",
+                s);
+        fprintf(xmlout,    "%s    <!-- bit 3: Vertically causal context. -->\n", s);
+        fprintf(xmlout,    "%s    <!-- bit 4: Predictable termination. -->\n", s);
+        fprintf(xmlout,    "%s    <!-- bit 5: Segmentation symbols are used. -->\n", s);
+    }
+    fprintf(xmlout,      "%s    <Transformation>%d</Transformation>\n", s,
+            tccp->qmfbid); /* 1 byte, SPcox (H) */
+    if (notes) {
+        fprintf(xmlout,
+                "%s    <!-- For Transformation, 0=\"9-7 irreversible filter\", 1=\"5-3 reversible filter\" -->\n",
+                s);
+    }
+    if (tccp->csty & J2K_CP_CSTY_PRT) {
+        fprintf(xmlout,    "%s    <PrecinctSize>\n", s); /* 1 byte, SPcox (I_i) */
+        if (notes) {
+            fprintf(xmlout,
+                    "%s    <!-- These are size exponents PPx and PPy. May be zero only for first level (aka N(L)LL subband)-->\n",
+                    s);
+        }
+        for (i = 0; i < tccp->numresolutions; i++) {
+            fprintf(xmlout,  "%s      <PrecinctHeightAndWidth  ResolutionLevel=\"%d\">\n",
+                    s, i);
+            if (raw) {
+                fprintf(xmlout, "%s        <AsHex>0x%02x</AsHex>\n", s,
+                        (tccp->prch[i] << 4) | tccp->prcw[i]);    /* packed into 1 byte, SPcox (G) */
+            }
+            if (derived) {
+                fprintf(xmlout, "%s        <WidthAsDecimal>%d</WidthAsDecimal>\n", s,
+                        tccp->prcw[i]);
+                fprintf(xmlout, "%s        <HeightAsDecimal>%d</HeightAsDecimal>\n", s,
+                        tccp->prch[i]);
+            }
+            fprintf(xmlout,  "%s      </PrecinctHeightAndWidth>\n", s, i);
+        }
+        fprintf(xmlout,    "%s    </PrecinctSize>\n", s); /* 1 byte, SPcox (I_i) */
+    }
+    fprintf(xmlout,      "%s  </SPcod>\n", s);
+    fprintf(xmlout,      "%s</CodingStyleDefault>\n", s);
 }
 
 /* ------------- */
 
-void xml_out_frame_coc(FILE* xmlout, opj_tcp_t *tcp, int numcomps) /* Optional in main & tile-part headers */
+void xml_out_frame_coc(FILE* xmlout, opj_tcp_t *tcp,
+                       int numcomps) /* Optional in main & tile-part headers */
 {
-/* Uses global j2k_default_tcp */
-  opj_tccp_t *tccp, *firstcomp_tccp;
-  int i, compno;
-  char spaces[13] = "            "; /* 12 spaces if tilepart*/
-  char* s = spaces;
-  if(tcp == j2k_default_tcp) {
-    s++;s++; /* shorten s to 10 spaces if main */
-  }
-
-  firstcomp_tccp = &(tcp->tccps[0]);
+    /* Uses global j2k_default_tcp */
+    opj_tccp_t *tccp, *firstcomp_tccp;
+    int i, compno;
+    char spaces[13] = "            "; /* 12 spaces if tilepart*/
+    char* s = spaces;
+    if (tcp == j2k_default_tcp) {
+        s++;
+        s++; /* shorten s to 10 spaces if main */
+    }
+
+    firstcomp_tccp = &(tcp->tccps[0]);
     /* Internal data structure tccp defines separate defaults for each component, set from main */
-       /* default, then selectively overwritten. */
+    /* default, then selectively overwritten. */
     /* Compare j2k_read_cox(...) */
-  /* We don't really know which was the default, and which were not */
-  /* Let's pretend that [0] is the default and all others are not */
-  if(notes) {
-    fprintf(xmlout,    "%s<!-- mj2_to_metadata implementation always reports component[0] as using default COD, -->\n", s);
-    if(tcp == j2k_default_tcp)
-      fprintf(xmlout,  "%s<!-- and any other component, with main-header style values different from [0], as COC. -->\n", s);
-    else
-      fprintf(xmlout,  "%s<!-- and any other component, with tile-part-header style values different from [0], as COC. -->\n", s);
-  }
-  for (compno = 1; compno < numcomps; compno++) /* spec says components are zero-based */
-  {
-    tccp = &tcp->tccps[compno];
-    if(same_component_style(firstcomp_tccp, tccp))
-               continue;
-
-/*  Alignments:          "      < < < < <   To help maintain xml pretty-printing */  
-    fprintf(xmlout,      "%s<CodingStyleComponent Marker=\"COC\">\n", s); /* Optional in main header, at most 1 per component */
-    if(notes)
-      fprintf(xmlout,    "%s  <!-- See Ccoc below for zero-based component number. -->\n", s);
-    /* Overrides the main COD for the specific component */
-    /* Not retained or of interest: Lcod */
-    fprintf(xmlout,      "%s  <Scoc>0x%02x</Scoc>\n", s, tccp->csty); /* 1 byte */
-       if(notes) {
-         fprintf(xmlout,    "%s  <!-- Scoc defines entropy coder precincts: -->\n", s);
-      fprintf(xmlout,    "%s  <!--   0 = maximum, namely (PPx=15, PPy=15); 1 = precincts defined below. -->\n", s);
-       }
-    fprintf(xmlout,      "%s  <Ccoc>%d</Ccoc>\n", s, compno); /* 1 or 2 bytes */
-    /* Unfortunately compo isn't retained in j2k_read_coc:  compno = cio_read(j2k_img->numcomps <= 256 ? 1 : 2);       /* Ccoc */
-    /*if(j2k_img_numcomps <=256)
-         component is 1 byte
-    else
-      compno is 2 byte */
+    /* We don't really know which was the default, and which were not */
+    /* Let's pretend that [0] is the default and all others are not */
+    if (notes) {
+        fprintf(xmlout,
+                "%s<!-- mj2_to_metadata implementation always reports component[0] as using default COD, -->\n",
+                s);
+        if (tcp == j2k_default_tcp) {
+            fprintf(xmlout,
+                    "%s<!-- and any other component, with main-header style values different from [0], as COC. -->\n",
+                    s);
+        } else {
+            fprintf(xmlout,
+                    "%s<!-- and any other component, with tile-part-header style values different from [0], as COC. -->\n",
+                    s);
+        }
+    }
+    for (compno = 1; compno < numcomps;
+            compno++) { /* spec says components are zero-based */
+        tccp = &tcp->tccps[compno];
+        if (same_component_style(firstcomp_tccp, tccp)) {
+            continue;
+        }
 
-    /* This code will compile only if declaration of j2k_default_tcp is changed from static (to implicit extern) in j2k.c */
-    fprintf(xmlout,      "%s  <SPcoc>\n", s);
-    fprintf(xmlout,      "%s    <NumberOfDecompositionLevels>%d</NumberOfDecompositionLevels>\n", s, tccp->numresolutions - 1);        /* 1 byte, SPcox (D) */
-    fprintf(xmlout,      "%s    <CodeblockWidth>%d</CodeblockWidth>\n", s, tccp->cblkw - 2);   /* 1 byte, SPcox (E) */
-    fprintf(xmlout,      "%s    <CodeblockHeight>%d</CodeblockHeight>\n", s, tccp->cblkh - 2); /* 1 byte, SPcox (F) */
-       if(notes) {
-      fprintf(xmlout,    "%s    <!-- CBW and CBH are non-negative, and summed cannot exceed 8 -->\n", s);
-      fprintf(xmlout,    "%s    <!-- Codeblock dimension is 2^(value + 2) -->\n", s);
-       }
-    fprintf(xmlout,      "%s    <CodeblockStyle>0x%02x</CodeblockStyle>\n", s, tccp->cblksty); /* 1 byte, SPcox (G) */
-       if(notes) {
-      fprintf(xmlout,    "%s    <!-- For CodeblockStyle, bits mean (with value 1=feature on, 0=off): -->\n", s);
-      fprintf(xmlout,    "%s    <!-- bit 0: Selective arithmetic coding bypass. -->\n", s);
-      fprintf(xmlout,    "%s    <!-- bit 1: Reset context probabilities on coding pass boundaries. -->\n", s);
-      fprintf(xmlout,    "%s    <!-- bit 2: Termination on each coding pass. -->\n", s);
-      fprintf(xmlout,    "%s    <!-- bit 3: Vertically causal context. -->\n", s);
-      fprintf(xmlout,    "%s    <!-- bit 4: Predictable termination. -->\n", s);
-      fprintf(xmlout,    "%s    <!-- bit 5: Segmentation symbols are used. -->\n", s);
-       }
-    fprintf(xmlout,      "%s    <Transformation>%d</Transformation>\n", s, tccp->qmfbid);      /* 1 byte, SPcox (H) */
-    if(notes)
-      fprintf(xmlout,    "%s    <!-- For Transformation, 0=\"9-7 irreversible filter\", 1=\"5-3 reversible filter\" -->\n", s);
-    if (tccp->csty & J2K_CP_CSTY_PRT) {
-      fprintf(xmlout,    "%s    <PrecinctSize>\n", s); /* 1 byte, SPcox (I_i) */
-      if(notes)
-        fprintf(xmlout,  "%s      <!-- These are size exponents PPx and PPy. May be zero only for first level (aka N(L)LL subband)-->\n", s);
-      for (i = 0; i < tccp->numresolutions-1; i++) { /* subtract 1 to get # of decomposition levels */ 
-        fprintf(xmlout,  "%s      <PrecinctHeightAndWidth  ResolutionLevel=\"%d\">\n", s, i);
-               if(raw)
-          fprintf(xmlout,"%s        <AsHex>0x%02x</AsHex>\n", s, (tccp->prch[i] << 4) | tccp->prcw[i]);        /* packed into 1 byte, SPcox (G) */
-               if(derived) {
-          fprintf(xmlout,"%s        <WidthAsDecimal>%d</WidthAsDecimal>\n", s, tccp->prcw[i]);
-          fprintf(xmlout,"%s        <HeightAsDecimal>%d</HeightAsDecimal>\n", s, tccp->prch[i]);
-               }
-        fprintf(xmlout,  "%s      </PrecinctHeightAndWidth>\n", s, i);
-      }
-      fprintf(xmlout,    "%s    </PrecinctSize>\n", s); /* 1 byte, SPcox (I_i) */
-    }
-    fprintf(xmlout,      "%s  </SPcoc>\n", s);
-    fprintf(xmlout,      "%s</CodingStyleComponent>\n", s);
-  }
+        /*  Alignments:          "      < < < < <   To help maintain xml pretty-printing */
+        fprintf(xmlout,      "%s<CodingStyleComponent Marker=\"COC\">\n",
+                s); /* Optional in main header, at most 1 per component */
+        if (notes) {
+            fprintf(xmlout,
+                    "%s  <!-- See Ccoc below for zero-based component number. -->\n", s);
+        }
+        /* Overrides the main COD for the specific component */
+        /* Not retained or of interest: Lcod */
+        fprintf(xmlout,      "%s  <Scoc>0x%02x</Scoc>\n", s, tccp->csty); /* 1 byte */
+        if (notes) {
+            fprintf(xmlout,    "%s  <!-- Scoc defines entropy coder precincts: -->\n", s);
+            fprintf(xmlout,
+                    "%s  <!--   0 = maximum, namely (PPx=15, PPy=15); 1 = precincts defined below. -->\n",
+                    s);
+        }
+        fprintf(xmlout,      "%s  <Ccoc>%d</Ccoc>\n", s, compno); /* 1 or 2 bytes */
+        /* Unfortunately compo isn't retained in j2k_read_coc:  compno = cio_read(j2k_img->numcomps <= 256 ? 1 : 2);    /* Ccoc */
+        /*if(j2k_img_numcomps <=256)
+          component is 1 byte
+        else
+          compno is 2 byte */
+
+        /* This code will compile only if declaration of j2k_default_tcp is changed from static (to implicit extern) in j2k.c */
+        fprintf(xmlout,      "%s  <SPcoc>\n", s);
+        fprintf(xmlout,
+                "%s    <NumberOfDecompositionLevels>%d</NumberOfDecompositionLevels>\n", s,
+                tccp->numresolutions - 1); /* 1 byte, SPcox (D) */
+        fprintf(xmlout,      "%s    <CodeblockWidth>%d</CodeblockWidth>\n", s,
+                tccp->cblkw - 2);    /* 1 byte, SPcox (E) */
+        fprintf(xmlout,      "%s    <CodeblockHeight>%d</CodeblockHeight>\n", s,
+                tccp->cblkh - 2);  /* 1 byte, SPcox (F) */
+        if (notes) {
+            fprintf(xmlout,
+                    "%s    <!-- CBW and CBH are non-negative, and summed cannot exceed 8 -->\n", s);
+            fprintf(xmlout,    "%s    <!-- Codeblock dimension is 2^(value + 2) -->\n", s);
+        }
+        fprintf(xmlout,      "%s    <CodeblockStyle>0x%02x</CodeblockStyle>\n", s,
+                tccp->cblksty);  /* 1 byte, SPcox (G) */
+        if (notes) {
+            fprintf(xmlout,
+                    "%s    <!-- For CodeblockStyle, bits mean (with value 1=feature on, 0=off): -->\n",
+                    s);
+            fprintf(xmlout,
+                    "%s    <!-- bit 0: Selective arithmetic coding bypass. -->\n", s);
+            fprintf(xmlout,
+                    "%s    <!-- bit 1: Reset context probabilities on coding pass boundaries. -->\n",
+                    s);
+            fprintf(xmlout,    "%s    <!-- bit 2: Termination on each coding pass. -->\n",
+                    s);
+            fprintf(xmlout,    "%s    <!-- bit 3: Vertically causal context. -->\n", s);
+            fprintf(xmlout,    "%s    <!-- bit 4: Predictable termination. -->\n", s);
+            fprintf(xmlout,    "%s    <!-- bit 5: Segmentation symbols are used. -->\n", s);
+        }
+        fprintf(xmlout,      "%s    <Transformation>%d</Transformation>\n", s,
+                tccp->qmfbid);   /* 1 byte, SPcox (H) */
+        if (notes) {
+            fprintf(xmlout,
+                    "%s    <!-- For Transformation, 0=\"9-7 irreversible filter\", 1=\"5-3 reversible filter\" -->\n",
+                    s);
+        }
+        if (tccp->csty & J2K_CP_CSTY_PRT) {
+            fprintf(xmlout,    "%s    <PrecinctSize>\n", s); /* 1 byte, SPcox (I_i) */
+            if (notes) {
+                fprintf(xmlout,
+                        "%s      <!-- These are size exponents PPx and PPy. May be zero only for first level (aka N(L)LL subband)-->\n",
+                        s);
+            }
+            for (i = 0; i < tccp->numresolutions - 1;
+                    i++) { /* subtract 1 to get # of decomposition levels */
+                fprintf(xmlout,  "%s      <PrecinctHeightAndWidth  ResolutionLevel=\"%d\">\n",
+                        s, i);
+                if (raw) {
+                    fprintf(xmlout, "%s        <AsHex>0x%02x</AsHex>\n", s,
+                            (tccp->prch[i] << 4) | tccp->prcw[i]);    /* packed into 1 byte, SPcox (G) */
+                }
+                if (derived) {
+                    fprintf(xmlout, "%s        <WidthAsDecimal>%d</WidthAsDecimal>\n", s,
+                            tccp->prcw[i]);
+                    fprintf(xmlout, "%s        <HeightAsDecimal>%d</HeightAsDecimal>\n", s,
+                            tccp->prch[i]);
+                }
+                fprintf(xmlout,  "%s      </PrecinctHeightAndWidth>\n", s, i);
+            }
+            fprintf(xmlout,    "%s    </PrecinctSize>\n", s); /* 1 byte, SPcox (I_i) */
+        }
+        fprintf(xmlout,      "%s  </SPcoc>\n", s);
+        fprintf(xmlout,      "%s</CodingStyleComponent>\n", s);
+    }
 }
 
 /* ------------- */
 
 BOOL same_component_style(opj_tccp_t *tccp1, opj_tccp_t *tccp2)
 {
-  int i;
-
-  if(tccp1->numresolutions != tccp2->numresolutions)
-         return FALSE;
-  if(tccp1->cblkw != tccp2->cblkw)
-         return FALSE;
-  if(tccp1->cblkh != tccp2->cblkh)
-         return FALSE;
-  if(tccp1->cblksty != tccp2->cblksty)
-         return FALSE;
-  if(tccp1->csty != tccp2->csty)
-         return FALSE;
-  
-  if (tccp1->csty & J2K_CP_CSTY_PRT) {
-      for (i = 0; i < tccp1->numresolutions; i++) {    
-         if(tccp1->prcw[i] != tccp2->prcw[i] || tccp1->prch[i] != tccp2->prch[i])
-                        return FALSE;
-      }
-  }
-  return TRUE;
+    int i;
+
+    if (tccp1->numresolutions != tccp2->numresolutions) {
+        return FALSE;
+    }
+    if (tccp1->cblkw != tccp2->cblkw) {
+        return FALSE;
+    }
+    if (tccp1->cblkh != tccp2->cblkh) {
+        return FALSE;
+    }
+    if (tccp1->cblksty != tccp2->cblksty) {
+        return FALSE;
+    }
+    if (tccp1->csty != tccp2->csty) {
+        return FALSE;
+    }
+
+    if (tccp1->csty & J2K_CP_CSTY_PRT) {
+        for (i = 0; i < tccp1->numresolutions; i++) {
+            if (tccp1->prcw[i] != tccp2->prcw[i] || tccp1->prch[i] != tccp2->prch[i]) {
+                return FALSE;
+            }
+        }
+    }
+    return TRUE;
 }
 
 /* ------------- */
 
 void xml_out_frame_qcd(FILE* xmlout, opj_tcp_t *tcp)
 {
-  /* This code will compile only if declaration of j2k_default_tcp is changed from static (to implicit extern) in j2k.c */
-  opj_tccp_t *tccp;
-  int bandno, numbands;
-  char spaces[13] = "            "; /* 12 spaces if tilepart*/
-  char* s = spaces;
-  if(tcp == j2k_default_tcp) {
-    s++;s++; /* shorten s to 10 spaces if main */
-  }
-
-  /* Compare j2k_read_qcx */
-  fprintf(xmlout,      "%s<QuantizationDefault Marker=\"QCD\">\n", s); /* Required in main header, single occurrence */
-  tccp = &(tcp->tccps[0]);
-  /* Not retained or of interest: Lqcd */
-  fprintf(xmlout,      "%s  <Sqcd>\n", s);             /* 1 byte */
-  if(notes)
-    fprintf(xmlout,    "%s  <!-- Default quantization style for all components. -->\n", s);
-  if(raw)
-    fprintf(xmlout,    "%s    <AsHex>0x%02x</AsHex>\n", s, (tccp->numgbits) << 5 | tccp->qntsty);
-  if(derived)
-    fprintf(xmlout,    "%s    <QuantizationStyle>%d</QuantizationStyle>\n", s, tccp->qntsty);
-  if(notes) {
-    fprintf(xmlout,    "%s    <!-- Quantization style (in Sqcd's low 5 bits) may be: -->\n", s);
-    fprintf(xmlout,    "%s    <!--   0 = No quantization. SPqcd size = 8 bits-->\n", s);
-    fprintf(xmlout,    "%s    <!--   1 = Scalar derived (values signaled for N(L)LL subband only). Use Eq. E.5. SPqcd size = 16. -->\n", s);
-    fprintf(xmlout,    "%s    <!--   2 = Scalar expounded (values signaled for each subband). SPqcd size = 16. -->\n", s);
-  }
-  if(derived)
-    fprintf(xmlout,    "%s    <NumberOfGuardBits>%d</NumberOfGuardBits>\n", s, tccp->numgbits);
-  if(notes)
-    fprintf(xmlout,    "%s    <!-- 0-7 guard bits allowed (stored in Sqcd's high 3 bits) -->\n", s);
-  fprintf(xmlout,      "%s  </Sqcd>\n", s);
-         
-  /* Problem: numbands in some cases is calculated from len, which is not retained or available here at this time */
-  /* So we'll just dump all internal values */
-  /* We could calculate it, but I'm having trouble believing the length equations in the standard */
-  
-  fprintf(xmlout,      "%s  <SPqcd>\n", s);
-  switch(tccp->qntsty) {
-  case J2K_CCP_QNTSTY_NOQNT: /* no quantization */
-    /* This is what standard says, but I don't believe it: len = 4 + (3*decomp); */
-    numbands = J2K_MAXBANDS; /* should be: numbands = len - 1; */
-       /* Better: IMAGINE numbands = tccp->stepsize_numbands; */
-    /* Instead look for first zero exponent, quit there.  Adequate? */
-    fprintf(xmlout,    "%s    <ReversibleStepSizeValue>\n", s);
-       if(notes) {
-      fprintf(xmlout,  "%s    <!-- Current mj2_to_metadata implementation dumps entire internal table, -->\n", s);
-         fprintf(xmlout,  "%s    <!-- until an exponent with zero value is reached. -->\n", s);
-         fprintf(xmlout,  "%s    <!-- Exponent epsilon(b) of reversible dynamic range. -->\n", s);
-         fprintf(xmlout,  "%s    <!-- Hex value is as stored, in high-order 5 bits. -->\n", s);
-       }
-    for (bandno = 0; bandno < numbands; bandno++) {
-      if(tccp->stepsizes[bandno].expn == 0)
-        break; /* Remove when we have real numbands */
-      fprintf(xmlout,  "%s      <DynamicRangeExponent Subband=\"%d\">\n", s, bandno);
-         if(raw)
-        fprintf(xmlout,"%s        <AsHex>0x%02x</AsHex>\n", s, tccp->stepsizes[bandno].expn << 3);
-         if(derived)
-        fprintf(xmlout,"%s        <AsDecimal>%d</AsDecimal>\n", s, tccp->stepsizes[bandno].expn);
-      fprintf(xmlout,  "%s      </DynamicRangeExponent>\n", s);
-    }
-    fprintf(xmlout,    "%s    </ReversibleStepSizeValue>\n", s);
-    break;
-  case J2K_CCP_QNTSTY_SIQNT:  /* scalar quantization derived */
-    /* This is what standard says.  Should I believe it:: len = 5;
-    /* numbands = 1; */
-    fprintf(xmlout,    "%s    <QuantizationStepSizeValues>\n", s);
-    if(notes)
-      fprintf(xmlout,  "%s    <!-- For irreversible transformation only.  See Part I Annex E Equation E.3 -->\n", s);
-    fprintf(xmlout,    "%s      <QuantizationValues Subband=\"0\">\n", s);
-    if(notes)
-      fprintf(xmlout,  "%s      <!-- For N(L)LL subband: >\n", s);
-       if(raw)
-      fprintf(xmlout,  "%s        <AsHex>0x%02x</AsHex>\n", s, (tccp->stepsizes[0].expn << 11) | tccp->stepsizes[0].mant);
-       if(derived) {
-      fprintf(xmlout,  "%s        <Exponent>%d</Exponent>\n", s, tccp->stepsizes[0].expn);
-      fprintf(xmlout,  "%s        <Mantissa>%d</Mantissa>\n", s, tccp->stepsizes[0].mant);
-       }
-    fprintf(xmlout,    "%s      </QuantizationValues>\n", s);
-       if(notes) {
-      fprintf(xmlout,  "%s      <!-- Exponents for subbands beyond 0 are not from header, but calculated per Eq. E.5 -->\n", s);
-      fprintf(xmlout,  "%s      <!-- The mantissa for all subbands is the same, given by the value above. -->\n", s);
-      fprintf(xmlout,  "%s      <!-- Current mj2_to_metadata implementation dumps entire internal table, -->\n", s);
-         fprintf(xmlout,  "%s      <!-- until a subband with exponent of zero value is reached. -->\n", s);
-       }
-
-    for (bandno = 1; bandno < J2K_MAXBANDS; bandno++) {
-      if(tccp->stepsizes[bandno].expn == 0)
+    /* This code will compile only if declaration of j2k_default_tcp is changed from static (to implicit extern) in j2k.c */
+    opj_tccp_t *tccp;
+    int bandno, numbands;
+    char spaces[13] = "            "; /* 12 spaces if tilepart*/
+    char* s = spaces;
+    if (tcp == j2k_default_tcp) {
+        s++;
+        s++; /* shorten s to 10 spaces if main */
+    }
+
+    /* Compare j2k_read_qcx */
+    fprintf(xmlout,      "%s<QuantizationDefault Marker=\"QCD\">\n",
+            s); /* Required in main header, single occurrence */
+    tccp = &(tcp->tccps[0]);
+    /* Not retained or of interest: Lqcd */
+    fprintf(xmlout,      "%s  <Sqcd>\n", s);      /* 1 byte */
+    if (notes) {
+        fprintf(xmlout,
+                "%s  <!-- Default quantization style for all components. -->\n", s);
+    }
+    if (raw) {
+        fprintf(xmlout,    "%s    <AsHex>0x%02x</AsHex>\n", s,
+                (tccp->numgbits) << 5 | tccp->qntsty);
+    }
+    if (derived) {
+        fprintf(xmlout,    "%s    <QuantizationStyle>%d</QuantizationStyle>\n", s,
+                tccp->qntsty);
+    }
+    if (notes) {
+        fprintf(xmlout,
+                "%s    <!-- Quantization style (in Sqcd's low 5 bits) may be: -->\n", s);
+        fprintf(xmlout,    "%s    <!--   0 = No quantization. SPqcd size = 8 bits-->\n",
+                s);
+        fprintf(xmlout,
+                "%s    <!--   1 = Scalar derived (values signaled for N(L)LL subband only). Use Eq. E.5. SPqcd size = 16. -->\n",
+                s);
+        fprintf(xmlout,
+                "%s    <!--   2 = Scalar expounded (values signaled for each subband). SPqcd size = 16. -->\n",
+                s);
+    }
+    if (derived) {
+        fprintf(xmlout,    "%s    <NumberOfGuardBits>%d</NumberOfGuardBits>\n", s,
+                tccp->numgbits);
+    }
+    if (notes) {
+        fprintf(xmlout,
+                "%s    <!-- 0-7 guard bits allowed (stored in Sqcd's high 3 bits) -->\n", s);
+    }
+    fprintf(xmlout,      "%s  </Sqcd>\n", s);
+
+    /* Problem: numbands in some cases is calculated from len, which is not retained or available here at this time */
+    /* So we'll just dump all internal values */
+    /* We could calculate it, but I'm having trouble believing the length equations in the standard */
+
+    fprintf(xmlout,      "%s  <SPqcd>\n", s);
+    switch (tccp->qntsty) {
+    case J2K_CCP_QNTSTY_NOQNT: /* no quantization */
+        /* This is what standard says, but I don't believe it: len = 4 + (3*decomp); */
+        numbands = J2K_MAXBANDS; /* should be: numbands = len - 1; */
+        /* Better: IMAGINE numbands = tccp->stepsize_numbands; */
+        /* Instead look for first zero exponent, quit there.  Adequate? */
+        fprintf(xmlout,    "%s    <ReversibleStepSizeValue>\n", s);
+        if (notes) {
+            fprintf(xmlout,
+                    "%s    <!-- Current mj2_to_metadata implementation dumps entire internal table, -->\n",
+                    s);
+            fprintf(xmlout,
+                    "%s    <!-- until an exponent with zero value is reached. -->\n", s);
+            fprintf(xmlout,
+                    "%s    <!-- Exponent epsilon(b) of reversible dynamic range. -->\n", s);
+            fprintf(xmlout,
+                    "%s    <!-- Hex value is as stored, in high-order 5 bits. -->\n", s);
+        }
+        for (bandno = 0; bandno < numbands; bandno++) {
+            if (tccp->stepsizes[bandno].expn == 0) {
+                break;    /* Remove when we have real numbands */
+            }
+            fprintf(xmlout,  "%s      <DynamicRangeExponent Subband=\"%d\">\n", s, bandno);
+            if (raw) {
+                fprintf(xmlout, "%s        <AsHex>0x%02x</AsHex>\n", s,
+                        tccp->stepsizes[bandno].expn << 3);
+            }
+            if (derived) {
+                fprintf(xmlout, "%s        <AsDecimal>%d</AsDecimal>\n", s,
+                        tccp->stepsizes[bandno].expn);
+            }
+            fprintf(xmlout,  "%s      </DynamicRangeExponent>\n", s);
+        }
+        fprintf(xmlout,    "%s    </ReversibleStepSizeValue>\n", s);
         break;
+    case J2K_CCP_QNTSTY_SIQNT:  /* scalar quantization derived */
+        /* This is what standard says.  Should I believe it:: len = 5;
+        /* numbands = 1; */
+        fprintf(xmlout,    "%s    <QuantizationStepSizeValues>\n", s);
+        if (notes) {
+            fprintf(xmlout,
+                    "%s    <!-- For irreversible transformation only.  See Part I Annex E Equation E.3 -->\n",
+                    s);
+        }
+        fprintf(xmlout,    "%s      <QuantizationValues Subband=\"0\">\n", s);
+        if (notes) {
+            fprintf(xmlout,  "%s      <!-- For N(L)LL subband: >\n", s);
+        }
+        if (raw) {
+            fprintf(xmlout,  "%s        <AsHex>0x%02x</AsHex>\n", s,
+                    (tccp->stepsizes[0].expn << 11) | tccp->stepsizes[0].mant);
+        }
+        if (derived) {
+            fprintf(xmlout,  "%s        <Exponent>%d</Exponent>\n", s,
+                    tccp->stepsizes[0].expn);
+            fprintf(xmlout,  "%s        <Mantissa>%d</Mantissa>\n", s,
+                    tccp->stepsizes[0].mant);
+        }
+        fprintf(xmlout,    "%s      </QuantizationValues>\n", s);
+        if (notes) {
+            fprintf(xmlout,
+                    "%s      <!-- Exponents for subbands beyond 0 are not from header, but calculated per Eq. E.5 -->\n",
+                    s);
+            fprintf(xmlout,
+                    "%s      <!-- The mantissa for all subbands is the same, given by the value above. -->\n",
+                    s);
+            fprintf(xmlout,
+                    "%s      <!-- Current mj2_to_metadata implementation dumps entire internal table, -->\n",
+                    s);
+            fprintf(xmlout,
+                    "%s      <!-- until a subband with exponent of zero value is reached. -->\n",
+                    s);
+        }
+
+        for (bandno = 1; bandno < J2K_MAXBANDS; bandno++) {
+            if (tccp->stepsizes[bandno].expn == 0) {
+                break;
+            }
 
-      fprintf(xmlout,  "%s      <CalculatedExponent Subband=\"%d\">%d</CalculatedExponent>\n", s, bandno, tccp->stepsizes[bandno].expn);
-    }
-
-    fprintf(xmlout,    "%s    </QuantizationStepSizeValues>\n", s);
-    break;
-
-  default: /* J2K_CCP_QNTSTY_SEQNT */ /* scalar quantization expounded */
-    /* This is what standard says, but should I believe it: len = 5 + 6*decomp; */
-    numbands = J2K_MAXBANDS; /* should be: (len - 1) / 2;*/
-       /* Better: IMAGINE numbands = tccp->stepsize_numbands; */
-    fprintf(xmlout,    "%s    <QuantizationStepSizeValues>\n", s);
-       if(notes) {
-      fprintf(xmlout,  "%s    <!-- For irreversible transformation only.  See Part I Annex E Equation E.3 -->\n", s);
-      fprintf(xmlout,  "%s    <!-- Current mj2_to_metadata implementation dumps entire internal table, -->\n", s);
-      fprintf(xmlout,  "%s    <!-- until a subband with mantissa and exponent of zero values is reached. -->\n", s);
-    }
-    for (bandno = 0; bandno < numbands; bandno++) {
-      if(tccp->stepsizes[bandno].expn == 0 && tccp->stepsizes[bandno].mant == 0)
-        break; /* Remove when we have real numbands */
-
-      fprintf(xmlout,  "%s      <QuantizationValues Subband=\"%d\">\n", s, bandno);
-         if(raw)
-        fprintf(xmlout,"%s        <AsHex>0x%02x</AsHex>\n", s, (tccp->stepsizes[bandno].expn << 11) | tccp->stepsizes[bandno].mant);
-         if(derived) {
-        fprintf(xmlout,"%s        <Exponent>%d</Exponent>\n", s, tccp->stepsizes[bandno].expn);
-        fprintf(xmlout,"%s        <Mantissa>%d</Mantissa>\n", s, tccp->stepsizes[bandno].mant);
-         }
-      fprintf(xmlout,  "%s      </QuantizationValues>\n", s);
-    }
-    fprintf(xmlout,    "%s    </QuantizationStepSizeValues>\n", s);
-    break;
-  } /* switch */
-  fprintf(xmlout,      "%s  </SPqcd>\n", s);
-  fprintf(xmlout,      "%s</QuantizationDefault>\n", s);
-
-/*  Alignments:        "    < < < < <   To help maintain xml pretty-printing */  
+            fprintf(xmlout,
+                    "%s      <CalculatedExponent Subband=\"%d\">%d</CalculatedExponent>\n", s,
+                    bandno, tccp->stepsizes[bandno].expn);
+        }
+
+        fprintf(xmlout,    "%s    </QuantizationStepSizeValues>\n", s);
+        break;
+
+    default: /* J2K_CCP_QNTSTY_SEQNT */ /* scalar quantization expounded */
+        /* This is what standard says, but should I believe it: len = 5 + 6*decomp; */
+        numbands = J2K_MAXBANDS; /* should be: (len - 1) / 2;*/
+        /* Better: IMAGINE numbands = tccp->stepsize_numbands; */
+        fprintf(xmlout,    "%s    <QuantizationStepSizeValues>\n", s);
+        if (notes) {
+            fprintf(xmlout,
+                    "%s    <!-- For irreversible transformation only.  See Part I Annex E Equation E.3 -->\n",
+                    s);
+            fprintf(xmlout,
+                    "%s    <!-- Current mj2_to_metadata implementation dumps entire internal table, -->\n",
+                    s);
+            fprintf(xmlout,
+                    "%s    <!-- until a subband with mantissa and exponent of zero values is reached. -->\n",
+                    s);
+        }
+        for (bandno = 0; bandno < numbands; bandno++) {
+            if (tccp->stepsizes[bandno].expn == 0 && tccp->stepsizes[bandno].mant == 0) {
+                break;    /* Remove when we have real numbands */
+            }
+
+            fprintf(xmlout,  "%s      <QuantizationValues Subband=\"%d\">\n", s, bandno);
+            if (raw) {
+                fprintf(xmlout, "%s        <AsHex>0x%02x</AsHex>\n", s,
+                        (tccp->stepsizes[bandno].expn << 11) | tccp->stepsizes[bandno].mant);
+            }
+            if (derived) {
+                fprintf(xmlout, "%s        <Exponent>%d</Exponent>\n", s,
+                        tccp->stepsizes[bandno].expn);
+                fprintf(xmlout, "%s        <Mantissa>%d</Mantissa>\n", s,
+                        tccp->stepsizes[bandno].mant);
+            }
+            fprintf(xmlout,  "%s      </QuantizationValues>\n", s);
+        }
+        fprintf(xmlout,    "%s    </QuantizationStepSizeValues>\n", s);
+        break;
+    } /* switch */
+    fprintf(xmlout,      "%s  </SPqcd>\n", s);
+    fprintf(xmlout,      "%s</QuantizationDefault>\n", s);
+
+    /*  Alignments:        "    < < < < <   To help maintain xml pretty-printing */
 }
 
 /* ------------- */
 
 void xml_out_frame_qcc(FILE* xmlout, opj_tcp_t *tcp, int numcomps)
 {
-/* Uses global j2k_default_tcp */
-  /* This code will compile only if declaration of j2k_default_tcp is changed from static (to implicit extern) in j2k.c */
-  opj_tccp_t *tccp, *firstcomp_tccp;
-  int bandno, numbands;
-  int compno;
-  char spaces[13] = "            "; /* 12 spaces if tilepart*/
-  char* s = spaces;
-  if(tcp == j2k_default_tcp) {
-    s++;s++; /* shorten s to 10 spaces if main */
-  }
-
-  firstcomp_tccp = &(tcp->tccps[0]);
+    /* Uses global j2k_default_tcp */
+    /* This code will compile only if declaration of j2k_default_tcp is changed from static (to implicit extern) in j2k.c */
+    opj_tccp_t *tccp, *firstcomp_tccp;
+    int bandno, numbands;
+    int compno;
+    char spaces[13] = "            "; /* 12 spaces if tilepart*/
+    char* s = spaces;
+    if (tcp == j2k_default_tcp) {
+        s++;
+        s++; /* shorten s to 10 spaces if main */
+    }
+
+    firstcomp_tccp = &(tcp->tccps[0]);
     /* Internal data structure tccp defines separate defaults for each component, set from main */
-       /* default, then selectively overwritten. */
+    /* default, then selectively overwritten. */
     /* Compare j2k_read_qcx(...) */
-  /* We don't really know which was the default, and which were not */
-  /* Let's pretend that [0] is the default and all others are not */
-  if(notes) {
-    fprintf(xmlout,      "%s<!-- mj2_to_metadata implementation always reports component[0] as using default QCD, -->\n", s);
-    if(tcp == j2k_default_tcp)
-      fprintf(xmlout,    "%s<!-- and any other component, with main-header quantization values different from [0], as QCC. -->\n", s);
-    else
-      fprintf(xmlout,    "%s<!-- and any other component, with tile-part-header quantization values different from [0], as QCC. -->\n", s);
-  }
-  for (compno = 1; compno < numcomps; compno++) /* spec says components are zero-based */
-  {
-    tccp = &(tcp->tccps[compno]);
-    if(same_component_quantization(firstcomp_tccp, tccp))
-               continue;
-
-    /* Compare j2k_read_qcx */
-    fprintf(xmlout,      "%s<QuantizationComponent Marker=\"QCC\" Component=\"%d\">\n", s, compno); /* Required in main header, single occurrence */
-    tccp = &j2k_default_tcp->tccps[0];
-    /* Not retained or perhaps of interest: Lqcd   It maybe can be calculated.  */
-    fprintf(xmlout,      "%s  <Sqcc>\n", s);           /* 1 byte */
-    if(notes)
-      fprintf(xmlout,    "%s  <!-- Quantization style for this component. -->\n", s);
-       if(raw)
-      fprintf(xmlout,    "%s    <AsHex>0x%02x</AsHex>\n", s, (tccp->numgbits) << 5 | tccp->qntsty);
-       if(derived)
-      fprintf(xmlout,    "%s    <QuantizationStyle>%d</QuantizationStyle>\n", s, tccp->qntsty);
-       if(notes) {
-      fprintf(xmlout,    "%s    <!-- Quantization style (in Sqcc's low 5 bits) may be: -->\n", s);
-      fprintf(xmlout,    "%s    <!--   0 = No quantization. SPqcc size = 8 bits-->\n", s);
-      fprintf(xmlout,    "%s    <!--   1 = Scalar derived (values signaled for N(L)LL subband only). Use Eq. E.5. SPqcc size = 16. -->\n", s);
-      fprintf(xmlout,    "%s    <!--   2 = Scalar expounded (values signaled for each subband). SPqcc size = 16. -->\n", s);
-       }
-       if(derived)
-      fprintf(xmlout,    "%s    <NumberOfGuardBits>%d</NumberOfGuardBits>\n", s,       tccp->numgbits);
-    if(notes)
-      fprintf(xmlout,    "%s    <!-- 0-7 guard bits allowed (stored in Sqcc's high 3 bits) -->\n", s);
-    fprintf(xmlout,      "%s  </Sqcc>\n", s);
-         
-    /* Problem: numbands in some cases is calculated from len, which is not retained or available here at this time */
-    /* So we'll just dump all internal values */
-    fprintf(xmlout,      "%s  <SPqcc>\n", s);
-    switch(tccp->qntsty) {
-    case J2K_CCP_QNTSTY_NOQNT:
-      numbands = J2K_MAXBANDS; /* should be: numbands = len - 1; */
-         /* Better: IMAGINE numbands = tccp->stepsize_numbands; */
-
-      /* Instead look for first zero exponent, quit there.  Adequate? */
-      fprintf(xmlout,    "%s    <ReversibleStepSizeValue>\n", s);
-         if(notes) {
-        fprintf(xmlout,  "%s    <!-- Current mj2_to_metadata implementation dumps entire internal table, -->\n", s);
-           fprintf(xmlout,  "%s    <!-- until an exponent with zero value is reached. -->\n", s);
-           fprintf(xmlout,  "%s    <!-- Exponent epsilon(b) of reversible dynamic range. -->\n", s);
-           fprintf(xmlout,  "%s    <!-- Hex value is as stored, in high-order 5 bits. -->\n", s);
-         }
-      for (bandno = 0; bandno < numbands; bandno++) {
-        if(tccp->stepsizes[bandno].expn == 0)
-          break; /* Remove this once we have real numbands */
-        fprintf(xmlout,  "%s      <Exponent Subband=\"%d\">\n", s, bandno);
-               if(raw)
-          fprintf(xmlout,"%s        <AsHex>0x%02x</AsHex>\n", s, tccp->stepsizes[bandno].expn << 3);
-               if(derived)
-          fprintf(xmlout,"%s        <AsDecimal>%d</AsDecimal>\n", s, tccp->stepsizes[bandno].expn);
-        fprintf(xmlout,  "%s      </Exponent>\n", s);
-      }
-      fprintf(xmlout,    "%s    </ReversibleStepSizeValue>\n", s);
-      break;
-    case J2K_CCP_QNTSTY_SIQNT:
-      /* numbands = 1; */
-      fprintf(xmlout,    "%s    <QuantizationStepSizeValues>\n", s);
-      if(notes)
-        fprintf(xmlout,  "%s    <!-- For irreversible transformation only.  See Part I Annex E Equation E.3 -->\n", s);
-      fprintf(xmlout,    "%s      <QuantizationValuesForSubband0>\n", s);
-      if(notes)
-        fprintf(xmlout,  "%s      <!-- For N(L)LL subband: >\n", s);
-         if(raw)
-        fprintf(xmlout,  "%s        <AsHex>0x%02x</AsHex>\n", s, (tccp->stepsizes[0].expn << 11) | tccp->stepsizes[0].mant);
-         if(derived) {
-        fprintf(xmlout,  "%s        <Exponent>%d</Exponent>\n", s, tccp->stepsizes[0].expn);
-        fprintf(xmlout,  "%s        <Mantissa>%d</Mantissa>\n", s, tccp->stepsizes[0].mant);
-         }
-      fprintf(xmlout,    "%s      </QuantizationValuesForSubband0>\n", s);
-         if(notes) {
-        fprintf(xmlout,  "%s      <!-- Exponents for subbands beyond 0 are not from header, but calculated per Eq. E.5 -->\n", s);
-        fprintf(xmlout,  "%s      <!-- The mantissa for all subbands is the same, given by the value above. -->\n", s);
-        fprintf(xmlout,  "%s      <!-- Current mj2_to_metadata implementation dumps entire internal table, -->\n", s);
-           fprintf(xmlout,  "%s      <!-- until a subband with exponent of zero value is reached. -->\n", s);
-        }
-
-      for (bandno = 1; bandno < J2K_MAXBANDS; bandno++) {
-        if(tccp->stepsizes[bandno].expn == 0)
-          break;
-
-        fprintf(xmlout,  "%s      <CalculatedExponent Subband=\"%d\">%d</CalculatedExponent>\n", s, bandno, tccp->stepsizes[bandno].expn);
-      }
-      fprintf(xmlout,    "%s    </QuantizationStepSizeValues>\n", s);
-      break;
+    /* We don't really know which was the default, and which were not */
+    /* Let's pretend that [0] is the default and all others are not */
+    if (notes) {
+        fprintf(xmlout,
+                "%s<!-- mj2_to_metadata implementation always reports component[0] as using default QCD, -->\n",
+                s);
+        if (tcp == j2k_default_tcp) {
+            fprintf(xmlout,
+                    "%s<!-- and any other component, with main-header quantization values different from [0], as QCC. -->\n",
+                    s);
+        } else {
+            fprintf(xmlout,
+                    "%s<!-- and any other component, with tile-part-header quantization values different from [0], as QCC. -->\n",
+                    s);
+        }
+    }
+    for (compno = 1; compno < numcomps;
+            compno++) { /* spec says components are zero-based */
+        tccp = &(tcp->tccps[compno]);
+        if (same_component_quantization(firstcomp_tccp, tccp)) {
+            continue;
+        }
 
-    default: /* J2K_CCP_QNTSTY_SEQNT */
-      numbands = J2K_MAXBANDS; /* should be: (len - 1) / 2;*/
-         /* Better: IMAGINE numbands = tccp->stepsize_numbands; */
-      fprintf(xmlout,    "%s    <QuantizationStepSizeValues>\n", s);
-      if(notes) {
-        fprintf(xmlout,  "%s    <!-- For irreversible transformation only.  See Part I Annex E Equation E.3 -->\n", s);
-        fprintf(xmlout,  "%s    <!-- Current mj2_to_metadata implementation dumps entire internal table, -->\n", s);
-           fprintf(xmlout,  "%s    <!-- until a subband with mantissa and exponent of zero values is reached. -->\n", s);
-         }
-      for (bandno = 0; bandno < numbands; bandno++) {
-        if(tccp->stepsizes[bandno].expn == 0 && tccp->stepsizes[bandno].mant == 0)
-                       break; /* Remove this once we have real numbands count */
-        fprintf(xmlout,  "%s      <QuantizationValues Subband=\"%d\">\n", s, bandno);
-               if(raw)
-          fprintf(xmlout,"%s        <AsHex>0x%02x</AsHex>\n", s, (tccp->stepsizes[bandno].expn << 11) | tccp->stepsizes[bandno].mant);
-               if(derived) {
-          fprintf(xmlout,"%s        <Exponent>%d</Exponent>\n", s, tccp->stepsizes[bandno].expn);
-          fprintf(xmlout,"%s        <Mantissa>%d</Mantissa>\n", s, tccp->stepsizes[bandno].mant);
-               }
-        fprintf(xmlout,  "%s      </QuantizationValues>\n", s);
-      }
-      fprintf(xmlout,    "%s    </QuantizationStepSizeValues>\n", s);
-      break;
-    } /* switch */
-    fprintf(xmlout,      "%s  </SPqcc>\n", s);
-    fprintf(xmlout,      "%s</QuantizationComponent>\n", s);
-  }
-/*  Alignments:          "    < < < < <   To help maintain xml pretty-printing */  
+        /* Compare j2k_read_qcx */
+        fprintf(xmlout,
+                "%s<QuantizationComponent Marker=\"QCC\" Component=\"%d\">\n", s,
+                compno); /* Required in main header, single occurrence */
+        tccp = &j2k_default_tcp->tccps[0];
+        /* Not retained or perhaps of interest: Lqcd   It maybe can be calculated.  */
+        fprintf(xmlout,      "%s  <Sqcc>\n", s);        /* 1 byte */
+        if (notes) {
+            fprintf(xmlout,    "%s  <!-- Quantization style for this component. -->\n", s);
+        }
+        if (raw) {
+            fprintf(xmlout,    "%s    <AsHex>0x%02x</AsHex>\n", s,
+                    (tccp->numgbits) << 5 | tccp->qntsty);
+        }
+        if (derived) {
+            fprintf(xmlout,    "%s    <QuantizationStyle>%d</QuantizationStyle>\n", s,
+                    tccp->qntsty);
+        }
+        if (notes) {
+            fprintf(xmlout,
+                    "%s    <!-- Quantization style (in Sqcc's low 5 bits) may be: -->\n", s);
+            fprintf(xmlout,    "%s    <!--   0 = No quantization. SPqcc size = 8 bits-->\n",
+                    s);
+            fprintf(xmlout,
+                    "%s    <!--   1 = Scalar derived (values signaled for N(L)LL subband only). Use Eq. E.5. SPqcc size = 16. -->\n",
+                    s);
+            fprintf(xmlout,
+                    "%s    <!--   2 = Scalar expounded (values signaled for each subband). SPqcc size = 16. -->\n",
+                    s);
+        }
+        if (derived) {
+            fprintf(xmlout,    "%s    <NumberOfGuardBits>%d</NumberOfGuardBits>\n", s,
+                    tccp->numgbits);
+        }
+        if (notes) {
+            fprintf(xmlout,
+                    "%s    <!-- 0-7 guard bits allowed (stored in Sqcc's high 3 bits) -->\n", s);
+        }
+        fprintf(xmlout,      "%s  </Sqcc>\n", s);
+
+        /* Problem: numbands in some cases is calculated from len, which is not retained or available here at this time */
+        /* So we'll just dump all internal values */
+        fprintf(xmlout,      "%s  <SPqcc>\n", s);
+        switch (tccp->qntsty) {
+        case J2K_CCP_QNTSTY_NOQNT:
+            numbands = J2K_MAXBANDS; /* should be: numbands = len - 1; */
+            /* Better: IMAGINE numbands = tccp->stepsize_numbands; */
+
+            /* Instead look for first zero exponent, quit there.  Adequate? */
+            fprintf(xmlout,    "%s    <ReversibleStepSizeValue>\n", s);
+            if (notes) {
+                fprintf(xmlout,
+                        "%s    <!-- Current mj2_to_metadata implementation dumps entire internal table, -->\n",
+                        s);
+                fprintf(xmlout,
+                        "%s    <!-- until an exponent with zero value is reached. -->\n", s);
+                fprintf(xmlout,
+                        "%s    <!-- Exponent epsilon(b) of reversible dynamic range. -->\n", s);
+                fprintf(xmlout,
+                        "%s    <!-- Hex value is as stored, in high-order 5 bits. -->\n", s);
+            }
+            for (bandno = 0; bandno < numbands; bandno++) {
+                if (tccp->stepsizes[bandno].expn == 0) {
+                    break;    /* Remove this once we have real numbands */
+                }
+                fprintf(xmlout,  "%s      <Exponent Subband=\"%d\">\n", s, bandno);
+                if (raw) {
+                    fprintf(xmlout, "%s        <AsHex>0x%02x</AsHex>\n", s,
+                            tccp->stepsizes[bandno].expn << 3);
+                }
+                if (derived) {
+                    fprintf(xmlout, "%s        <AsDecimal>%d</AsDecimal>\n", s,
+                            tccp->stepsizes[bandno].expn);
+                }
+                fprintf(xmlout,  "%s      </Exponent>\n", s);
+            }
+            fprintf(xmlout,    "%s    </ReversibleStepSizeValue>\n", s);
+            break;
+        case J2K_CCP_QNTSTY_SIQNT:
+            /* numbands = 1; */
+            fprintf(xmlout,    "%s    <QuantizationStepSizeValues>\n", s);
+            if (notes) {
+                fprintf(xmlout,
+                        "%s    <!-- For irreversible transformation only.  See Part I Annex E Equation E.3 -->\n",
+                        s);
+            }
+            fprintf(xmlout,    "%s      <QuantizationValuesForSubband0>\n", s);
+            if (notes) {
+                fprintf(xmlout,  "%s      <!-- For N(L)LL subband: >\n", s);
+            }
+            if (raw) {
+                fprintf(xmlout,  "%s        <AsHex>0x%02x</AsHex>\n", s,
+                        (tccp->stepsizes[0].expn << 11) | tccp->stepsizes[0].mant);
+            }
+            if (derived) {
+                fprintf(xmlout,  "%s        <Exponent>%d</Exponent>\n", s,
+                        tccp->stepsizes[0].expn);
+                fprintf(xmlout,  "%s        <Mantissa>%d</Mantissa>\n", s,
+                        tccp->stepsizes[0].mant);
+            }
+            fprintf(xmlout,    "%s      </QuantizationValuesForSubband0>\n", s);
+            if (notes) {
+                fprintf(xmlout,
+                        "%s      <!-- Exponents for subbands beyond 0 are not from header, but calculated per Eq. E.5 -->\n",
+                        s);
+                fprintf(xmlout,
+                        "%s      <!-- The mantissa for all subbands is the same, given by the value above. -->\n",
+                        s);
+                fprintf(xmlout,
+                        "%s      <!-- Current mj2_to_metadata implementation dumps entire internal table, -->\n",
+                        s);
+                fprintf(xmlout,
+                        "%s      <!-- until a subband with exponent of zero value is reached. -->\n",
+                        s);
+            }
+
+            for (bandno = 1; bandno < J2K_MAXBANDS; bandno++) {
+                if (tccp->stepsizes[bandno].expn == 0) {
+                    break;
+                }
+
+                fprintf(xmlout,
+                        "%s      <CalculatedExponent Subband=\"%d\">%d</CalculatedExponent>\n", s,
+                        bandno, tccp->stepsizes[bandno].expn);
+            }
+            fprintf(xmlout,    "%s    </QuantizationStepSizeValues>\n", s);
+            break;
+
+        default: /* J2K_CCP_QNTSTY_SEQNT */
+            numbands = J2K_MAXBANDS; /* should be: (len - 1) / 2;*/
+            /* Better: IMAGINE numbands = tccp->stepsize_numbands; */
+            fprintf(xmlout,    "%s    <QuantizationStepSizeValues>\n", s);
+            if (notes) {
+                fprintf(xmlout,
+                        "%s    <!-- For irreversible transformation only.  See Part I Annex E Equation E.3 -->\n",
+                        s);
+                fprintf(xmlout,
+                        "%s    <!-- Current mj2_to_metadata implementation dumps entire internal table, -->\n",
+                        s);
+                fprintf(xmlout,
+                        "%s    <!-- until a subband with mantissa and exponent of zero values is reached. -->\n",
+                        s);
+            }
+            for (bandno = 0; bandno < numbands; bandno++) {
+                if (tccp->stepsizes[bandno].expn == 0 && tccp->stepsizes[bandno].mant == 0) {
+                    break;    /* Remove this once we have real numbands count */
+                }
+                fprintf(xmlout,  "%s      <QuantizationValues Subband=\"%d\">\n", s, bandno);
+                if (raw) {
+                    fprintf(xmlout, "%s        <AsHex>0x%02x</AsHex>\n", s,
+                            (tccp->stepsizes[bandno].expn << 11) | tccp->stepsizes[bandno].mant);
+                }
+                if (derived) {
+                    fprintf(xmlout, "%s        <Exponent>%d</Exponent>\n", s,
+                            tccp->stepsizes[bandno].expn);
+                    fprintf(xmlout, "%s        <Mantissa>%d</Mantissa>\n", s,
+                            tccp->stepsizes[bandno].mant);
+                }
+                fprintf(xmlout,  "%s      </QuantizationValues>\n", s);
+            }
+            fprintf(xmlout,    "%s    </QuantizationStepSizeValues>\n", s);
+            break;
+        } /* switch */
+        fprintf(xmlout,      "%s  </SPqcc>\n", s);
+        fprintf(xmlout,      "%s</QuantizationComponent>\n", s);
+    }
+    /*  Alignments:          "    < < < < <   To help maintain xml pretty-printing */
 }
 
 /* ------------- */
 
 BOOL same_component_quantization(opj_tccp_t *tccp1, opj_tccp_t *tccp2)
 {
-  int bandno, numbands;
+    int bandno, numbands;
 
-  if(tccp1->qntsty != tccp2->qntsty)
-         return FALSE;
-  if(tccp1->numgbits != tccp2->numgbits)
-         return FALSE;
+    if (tccp1->qntsty != tccp2->qntsty) {
+        return FALSE;
+    }
+    if (tccp1->numgbits != tccp2->numgbits) {
+        return FALSE;
+    }
 
-  switch(tccp1->qntsty) {
+    switch (tccp1->qntsty) {
     case J2K_CCP_QNTSTY_NOQNT:
-      numbands = J2K_MAXBANDS; /* should be: numbands = len - 1; */
-      /* Instead look for first zero exponent, quit there.  Adequate? */
-      for (bandno = 0; bandno < numbands; bandno++) {
-        if(tccp1->stepsizes[bandno].expn == 0)
-          break;
-        if(tccp1->stepsizes[bandno].expn != tccp2->stepsizes[bandno].expn)
-         return FALSE;
-      }
-      break;
+        numbands = J2K_MAXBANDS; /* should be: numbands = len - 1; */
+        /* Instead look for first zero exponent, quit there.  Adequate? */
+        for (bandno = 0; bandno < numbands; bandno++) {
+            if (tccp1->stepsizes[bandno].expn == 0) {
+                break;
+            }
+            if (tccp1->stepsizes[bandno].expn != tccp2->stepsizes[bandno].expn) {
+                return FALSE;
+            }
+        }
+        break;
     case J2K_CCP_QNTSTY_SIQNT:
-      /* numbands = 1; */
-      if(tccp1->stepsizes[0].expn != tccp2->stepsizes[0].expn || tccp1->stepsizes[0].mant != tccp2->stepsizes[0].mant)
-        return FALSE;
-         /* Don't need to check remainder, since they are calculated from [0] */
-      break;
+        /* numbands = 1; */
+        if (tccp1->stepsizes[0].expn != tccp2->stepsizes[0].expn ||
+                tccp1->stepsizes[0].mant != tccp2->stepsizes[0].mant) {
+            return FALSE;
+        }
+        /* Don't need to check remainder, since they are calculated from [0] */
+        break;
 
     default: /* J2K_CCP_QNTSTY_SEQNT */
-      numbands = J2K_MAXBANDS; /* should be: (len - 1) / 2;*/
-         /* This comparison may cause us problems with trailing junk values. */
-      for (bandno = 0; bandno < numbands; bandno++) {
-        if(tccp1->stepsizes[bandno].expn != tccp2->stepsizes[bandno].expn || tccp1->stepsizes[bandno].mant != tccp2->stepsizes[bandno].mant);
-          return FALSE;
-      }
-      break;
+        numbands = J2K_MAXBANDS; /* should be: (len - 1) / 2;*/
+        /* This comparison may cause us problems with trailing junk values. */
+        for (bandno = 0; bandno < numbands; bandno++) {
+            if (tccp1->stepsizes[bandno].expn != tccp2->stepsizes[bandno].expn ||
+                    tccp1->stepsizes[bandno].mant != tccp2->stepsizes[bandno].mant);
+            return FALSE;
+        }
+        break;
     } /* switch */
-  return TRUE;
+    return TRUE;
 }
 
 /* ------------- */
 
 void xml_out_frame_rgn(FILE* xmlout, opj_tcp_t *tcp, int numcomps)
 {
-  int compno, SPrgn;
-  /* MJ2 files can have regions of interest if hybridized with JPX Part II */
-  char spaces[13] = "            "; /* 12 spaces if tilepart*/
-  char* s = spaces;
-  if(tcp == j2k_default_tcp) {
-    s++;s++; /* shorten s to 10 spaces if main */
-  }
-
-  for(compno = 0; compno < numcomps; compno++) {
-    SPrgn = tcp->tccps[compno].roishift;       /* 1 byte; SPrgn */
-    if(SPrgn == 0)
-               continue; /* Yet another kludge */
-
-    fprintf(xmlout,    "%s<RegionOfInterest Marker=\"RGN\">\n", s); /* Optional in main header, at most 1 per component */
-    if(notes)
-      fprintf(xmlout,  "%s<!-- See Crgn below for zero-based component number. -->\n", s);
-    /* Not retained or of interest: Lrgd */
-    fprintf(xmlout,    "%s  <Srgn>0</Srgn>\n", s); /* 1 byte */
-    if(notes)
-         fprintf(xmlout,  "%s  <!-- Srgn is ROI style.  Only style=0 defined: Implicit ROI (max. shift) -->\n", s);
-    fprintf(xmlout,    "%s  <Crgn>%d</Crgn>\n", s, compno); /* 1 or 2 bytes */
-    fprintf(xmlout,    "%s  <SPrgn>%d</SPrgn>\n", s, SPrgn); /* 1 byte */
-    if(notes)
-      fprintf(xmlout,  "%s  <!-- SPrgn is implicit ROI shift, i.e., binary shifting of ROI coefficients above background. -->\n", s);
-    fprintf(xmlout,    "</RegionOfInterest\n", s); /* Optional in main header, at most 1 per component */
-  }
+    int compno, SPrgn;
+    /* MJ2 files can have regions of interest if hybridized with JPX Part II */
+    char spaces[13] = "            "; /* 12 spaces if tilepart*/
+    char* s = spaces;
+    if (tcp == j2k_default_tcp) {
+        s++;
+        s++; /* shorten s to 10 spaces if main */
+    }
+
+    for (compno = 0; compno < numcomps; compno++) {
+        SPrgn = tcp->tccps[compno].roishift;    /* 1 byte; SPrgn */
+        if (SPrgn == 0) {
+            continue;    /* Yet another kludge */
+        }
+
+        fprintf(xmlout,    "%s<RegionOfInterest Marker=\"RGN\">\n",
+                s); /* Optional in main header, at most 1 per component */
+        if (notes) {
+            fprintf(xmlout,  "%s<!-- See Crgn below for zero-based component number. -->\n",
+                    s);
+        }
+        /* Not retained or of interest: Lrgd */
+        fprintf(xmlout,    "%s  <Srgn>0</Srgn>\n", s); /* 1 byte */
+        if (notes) {
+            fprintf(xmlout,
+                    "%s  <!-- Srgn is ROI style.  Only style=0 defined: Implicit ROI (max. shift) -->\n",
+                    s);
+        }
+        fprintf(xmlout,    "%s  <Crgn>%d</Crgn>\n", s, compno); /* 1 or 2 bytes */
+        fprintf(xmlout,    "%s  <SPrgn>%d</SPrgn>\n", s, SPrgn); /* 1 byte */
+        if (notes) {
+            fprintf(xmlout,
+                    "%s  <!-- SPrgn is implicit ROI shift, i.e., binary shifting of ROI coefficients above background. -->\n",
+                    s);
+        }
+        fprintf(xmlout,    "</RegionOfInterest\n",
+                s); /* Optional in main header, at most 1 per component */
+    }
 }
 
 /* ------------- */
 
-void xml_out_frame_poc(FILE* xmlout, opj_tcp_t *tcp) { /* Progression Order Change */
-  /* Compare j2k_read_poc() */
-  int i;
-  opj_poc_t *poc;
-  char spaces[13] = "            "; /* 12 spaces if tilepart*/
-  char* s = spaces;
-  if(tcp == j2k_default_tcp) {
-    s++;s++; /* shorten s to 10 spaces if main */
-  }
-  
-  if(tcp->POC != 1)
-         return; /* Not present */
-
-  fprintf(xmlout,    "%s<ProgressionOrderChange Marker=\"POC\">\n", s); /* Optional in main header, at most 1 per component */
-  /* j2k_read_poc seems to allow accumulation of default pocs from multiple POC segments, but does
-  the spec really allow that? */
-  /* 2 bytes, not retained; Lpoc */
-  /* I probably didn't get this dump precisely right. */
-  for (i = 0; i < tcp->numpocs; i++) {
-    poc = &tcp->pocs[i];
-    fprintf(xmlout,  "%s  <Progression Num=\"%d\">\n", s, i+1);
-    fprintf(xmlout,  "%S    <RSpoc>%d</RSpoc>\n", s, poc->resno0);     /* 1 byte, RSpoc_i */
-    if(notes)
-         fprintf(xmlout,"%s    <!-- Resolution level index (inclusive) for progression start. Range: 0 to 33 -->\n", s);
-    fprintf(xmlout,  "%s    <CSpoc>%d</CSpoc>\n", s, poc->compno0);/* j2k_img->numcomps <= 256 ? 1 byte : 2 bytes; CSpoc_i */
-    if(notes)
-      fprintf(xmlout,"%s    <!-- Component index (inclusive) for progression start. -->\n", s);
-    fprintf(xmlout,  "%s    <LYEpoc>%d</LYEpoc>\n", s, poc->layno1); /* int_min(cio_read(2), tcp->numlayers);  /* 2 bytes; LYEpoc_i */
-    if(notes)
-      fprintf(xmlout,"%s    <!-- Layer index (exclusive) for progression end. -->\n", s);
-    fprintf(xmlout,  "%s    <REpoc>%d</REpoc>\n", s, poc->resno1); /*int_min(cio_read(1), tccp->numresolutions);       /* REpoc_i */
-    if(notes)
-      fprintf(xmlout,"%s    <!-- Resolution level index (exclusive) for progression end. Range: RSpoc to 33 -->\n", s);
-    fprintf(xmlout,  "%s    <CEpoc>%d</CEpoc>\n", s, poc->compno1); /* int_min(cio_read(j2k_img->numcomps <= 256 ? 1 : 2), j2k_img->numcomps); /* CEpoc_i */
-    if(notes)
-         fprintf(xmlout,"%s    <!-- Component index (exclusive) for progression end.  Minimum: CSpoc -->\n", s);
-    fprintf(xmlout,  "%s    <Ppoc>%d</Ppoc>\n", s, poc->prg); /* 1 byte Ppoc_i */
-       if(notes) {
-      fprintf(xmlout,"%s    <!-- Defined Progression Order Values are: -->\n", s);
-      fprintf(xmlout,"%s    <!-- 0 = LRCP; 1 = RLCP; 2 = RPCL; 3 = PCRL; 4 = CPRL -->\n", s);
-      fprintf(xmlout,"%s    <!-- where L = \"layer\", R = \"resolution level\", C = \"component\", P = \"position\". -->\n", s);
-       }
-    fprintf(xmlout,  "%s  </Progression>\n", s);
-  }
-  fprintf(xmlout,    "%s</ProgressionOrderChange\n", s);
+void xml_out_frame_poc(FILE* xmlout,
+                       opj_tcp_t *tcp)   /* Progression Order Change */
+{
+    /* Compare j2k_read_poc() */
+    int i;
+    opj_poc_t *poc;
+    char spaces[13] = "            "; /* 12 spaces if tilepart*/
+    char* s = spaces;
+    if (tcp == j2k_default_tcp) {
+        s++;
+        s++; /* shorten s to 10 spaces if main */
+    }
+
+    if (tcp->POC != 1) {
+        return;    /* Not present */
+    }
+
+    fprintf(xmlout,    "%s<ProgressionOrderChange Marker=\"POC\">\n",
+            s); /* Optional in main header, at most 1 per component */
+    /* j2k_read_poc seems to allow accumulation of default pocs from multiple POC segments, but does
+    the spec really allow that? */
+    /* 2 bytes, not retained; Lpoc */
+    /* I probably didn't get this dump precisely right. */
+    for (i = 0; i < tcp->numpocs; i++) {
+        poc = &tcp->pocs[i];
+        fprintf(xmlout,  "%s  <Progression Num=\"%d\">\n", s, i + 1);
+        fprintf(xmlout,  "%S    <RSpoc>%d</RSpoc>\n", s,
+                poc->resno0);  /* 1 byte, RSpoc_i */
+        if (notes) {
+            fprintf(xmlout,
+                    "%s    <!-- Resolution level index (inclusive) for progression start. Range: 0 to 33 -->\n",
+                    s);
+        }
+        fprintf(xmlout,  "%s    <CSpoc>%d</CSpoc>\n", s,
+                poc->compno0);/* j2k_img->numcomps <= 256 ? 1 byte : 2 bytes; CSpoc_i */
+        if (notes) {
+            fprintf(xmlout,
+                    "%s    <!-- Component index (inclusive) for progression start. -->\n", s);
+        }
+        fprintf(xmlout,  "%s    <LYEpoc>%d</LYEpoc>\n", s,
+                poc->layno1); /* int_min(cio_read(2), tcp->numlayers);   /* 2 bytes; LYEpoc_i */
+        if (notes) {
+            fprintf(xmlout, "%s    <!-- Layer index (exclusive) for progression end. -->\n",
+                    s);
+        }
+        fprintf(xmlout,  "%s    <REpoc>%d</REpoc>\n", s,
+                poc->resno1); /*int_min(cio_read(1), tccp->numresolutions);    /* REpoc_i */
+        if (notes) {
+            fprintf(xmlout,
+                    "%s    <!-- Resolution level index (exclusive) for progression end. Range: RSpoc to 33 -->\n",
+                    s);
+        }
+        fprintf(xmlout,  "%s    <CEpoc>%d</CEpoc>\n", s,
+                poc->compno1); /* int_min(cio_read(j2k_img->numcomps <= 256 ? 1 : 2), j2k_img->numcomps);  /* CEpoc_i */
+        if (notes) {
+            fprintf(xmlout,
+                    "%s    <!-- Component index (exclusive) for progression end.  Minimum: CSpoc -->\n",
+                    s);
+        }
+        fprintf(xmlout,  "%s    <Ppoc>%d</Ppoc>\n", s, poc->prg); /* 1 byte Ppoc_i */
+        if (notes) {
+            fprintf(xmlout, "%s    <!-- Defined Progression Order Values are: -->\n", s);
+            fprintf(xmlout,
+                    "%s    <!-- 0 = LRCP; 1 = RLCP; 2 = RPCL; 3 = PCRL; 4 = CPRL -->\n", s);
+            fprintf(xmlout,
+                    "%s    <!-- where L = \"layer\", R = \"resolution level\", C = \"component\", P = \"position\". -->\n",
+                    s);
+        }
+        fprintf(xmlout,  "%s  </Progression>\n", s);
+    }
+    fprintf(xmlout,    "%s</ProgressionOrderChange\n", s);
 }
 
 /* ------------- */
@@ -1739,135 +2299,175 @@ void xml_out_frame_poc(FILE* xmlout, opj_tcp_t *tcp) { /* Progression Order Chan
 /* Suppress PPM and PPT since we're not showing data from the third option, namely within the codestream, and
 that's evidently what frames_to_mj2 uses.  And a hex dump isn't so useful anyway */
 
-void xml_out_frame_ppm(FILE *xmlout, opj_cp_t *cp) { /* For main header, not tile-part (which uses PPT instead). */
-/* Either the PPM or PPT is required if the packet headers are not distributed in the bit stream */
-/* Use of PPM and PPT are mutually exclusive. */
-/* Compare j2k_read_ppm() */
-  int j;
-  
-  if(cp->ppm != 1)
-         return; /* Not present */
-/* Main header uses indent of 10 spaces */
-  fprintf(xmlout,    "          <PackedPacketHeadersMainHeader Marker=\"PPM\">\n"); /* Optional in main header, but if not, must be in PPT or codestream */
-  /* 2 bytes Lppm not saved */
-  if(notes) {
-    fprintf(xmlout,  "          <!-- If there are multiple PPM marker segments in the main header, -->\n");
-    fprintf(xmlout,  "          <!-- this mj2_to_metadata implementation will report them as a single consolidated PPM header. -->\n");
-    fprintf(xmlout,  "          <!-- The implementation can't currently segregate by tile-part. -->\n");
-    fprintf(xmlout,  "          <!-- TO DO? further map the packet headers to xml. -->\n");
-  }
-  /* 1 byte, not retained ; Zppm is sequence # of this PPM header */
-  /* 4 bytes, possibly overwritten multiple times in j2k_cp->ppm_previous: Nppm */
-  /* Use j symbol for index instead of i, to make comparable with j2k_read_ppm */
-  /* Not real clear whether to use ppm->store or ppm_len as upper bound */
-  fprintf(xmlout,    "            <PackedData>\n");
-  xml_out_dump_hex(xmlout, cp->ppm_data, cp->ppm_len);
-  /* Dump packet headers 1 byte at a time: lppm[i][j] */
-  fprintf(xmlout,    "            </PackedData>\n");
-  fprintf(xmlout,    "          </PackedPacketHeadersMainHeader>\n"); /* Optional in main header, but if not, must be in PPT or codestream */
+void xml_out_frame_ppm(FILE *xmlout,
+                       opj_cp_t *cp)   /* For main header, not tile-part (which uses PPT instead). */
+{
+    /* Either the PPM or PPT is required if the packet headers are not distributed in the bit stream */
+    /* Use of PPM and PPT are mutually exclusive. */
+    /* Compare j2k_read_ppm() */
+    int j;
+
+    if (cp->ppm != 1) {
+        return;    /* Not present */
+    }
+    /* Main header uses indent of 10 spaces */
+    fprintf(xmlout,
+            "          <PackedPacketHeadersMainHeader Marker=\"PPM\">\n"); /* Optional in main header, but if not, must be in PPT or codestream */
+    /* 2 bytes Lppm not saved */
+    if (notes) {
+        fprintf(xmlout,
+                "          <!-- If there are multiple PPM marker segments in the main header, -->\n");
+        fprintf(xmlout,
+                "          <!-- this mj2_to_metadata implementation will report them as a single consolidated PPM header. -->\n");
+        fprintf(xmlout,
+                "          <!-- The implementation can't currently segregate by tile-part. -->\n");
+        fprintf(xmlout,
+                "          <!-- TO DO? further map the packet headers to xml. -->\n");
+    }
+
+    /* 1 byte, not retained ; Zppm is sequence # of this PPM header */
+    /* 4 bytes, possibly overwritten multiple times in j2k_cp->ppm_previous: Nppm */
+    /* Use j symbol for index instead of i, to make comparable with j2k_read_ppm */
+    /* Not real clear whether to use ppm->store or ppm_len as upper bound */
+    fprintf(xmlout,    "            <PackedData>\n");
+    xml_out_dump_hex(xmlout, cp->ppm_data, cp->ppm_len);
+    /* Dump packet headers 1 byte at a time: lppm[i][j] */
+    fprintf(xmlout,    "            </PackedData>\n");
+    fprintf(xmlout,
+            "          </PackedPacketHeadersMainHeader>\n"); /* Optional in main header, but if not, must be in PPT or codestream */
 }
 
 /* ------------- */
 
-void xml_out_frame_ppt(FILE *xmlout, opj_tcp_t *tcp) { /* For tile-part header, not main (which uses PPM instead). */
-/* Either the PPM or PPT is required if the packet headers are not distributed in the bit stream */
-/* Use of PPM and PPT are mutually exclusive. */
-/* Compare j2k_read_ppt() */
-  int j;
-  
-  if(tcp->ppt != 1)
-         return; /* Not present */
-
-  /* Tile-part indents are 12 spaces */
-  fprintf(xmlout,    "            <PackedPacketHeadersTilePartHeader Marker=\"PPT\">\n"); /* Optional in main header, but if not, must be in PPT or codestream */
-  /* 2 bytes Lppm not saved */
-  if(notes) {
-    fprintf(xmlout,  "            <!-- If there are multiple PPT marker segments in the tile-part header, -->\n");
-    fprintf(xmlout,  "            <!-- this mj2_to_metadata implementation will report them as a single consolidated PPT header. -->\n");
-    fprintf(xmlout,  "            <!-- The implementation can't currently segregate by tile-part. -->\n");
-    fprintf(xmlout,  "            <!-- TO DO? further map the packet headers to xml. -->\n");
-  }
-  /* 1 byte, not retained ; Zppt is sequence # of this PPT header */
-  /* 4 bytes, possibly overwritten multiple times in j2k_cp->ppt_previous: Nppt */
-  /* Use j symbol for index instead of i, to make comparable with j2k_read_ppt */
-  /* Not real clear whether to use ppt->store or ppt_len as upper bound */
-  fprintf(xmlout,    "              <PackedData>\n");
-  xml_out_dump_hex(xmlout, tcp->ppt_data, tcp->ppt_len);
-  /* Dump packet headers 1 byte at a time: lppt[i][j] */
-  fprintf(xmlout,    "              </PackedData>\n");
-  fprintf(xmlout,    "            </PackedPacketHeadersTileHeader>\n"); /* Optional in tile-part header, but if not, must be in PPM or codestream */
+void xml_out_frame_ppt(FILE *xmlout,
+                       opj_tcp_t *tcp)   /* For tile-part header, not main (which uses PPM instead). */
+{
+    /* Either the PPM or PPT is required if the packet headers are not distributed in the bit stream */
+    /* Use of PPM and PPT are mutually exclusive. */
+    /* Compare j2k_read_ppt() */
+    int j;
+
+    if (tcp->ppt != 1) {
+        return;    /* Not present */
+    }
+
+    /* Tile-part indents are 12 spaces */
+    fprintf(xmlout,
+            "            <PackedPacketHeadersTilePartHeader Marker=\"PPT\">\n"); /* Optional in main header, but if not, must be in PPT or codestream */
+    /* 2 bytes Lppm not saved */
+    if (notes) {
+        fprintf(xmlout,
+                "            <!-- If there are multiple PPT marker segments in the tile-part header, -->\n");
+        fprintf(xmlout,
+                "            <!-- this mj2_to_metadata implementation will report them as a single consolidated PPT header. -->\n");
+        fprintf(xmlout,
+                "            <!-- The implementation can't currently segregate by tile-part. -->\n");
+        fprintf(xmlout,
+                "            <!-- TO DO? further map the packet headers to xml. -->\n");
+    }
+
+    /* 1 byte, not retained ; Zppt is sequence # of this PPT header */
+    /* 4 bytes, possibly overwritten multiple times in j2k_cp->ppt_previous: Nppt */
+    /* Use j symbol for index instead of i, to make comparable with j2k_read_ppt */
+    /* Not real clear whether to use ppt->store or ppt_len as upper bound */
+    fprintf(xmlout,    "              <PackedData>\n");
+    xml_out_dump_hex(xmlout, tcp->ppt_data, tcp->ppt_len);
+    /* Dump packet headers 1 byte at a time: lppt[i][j] */
+    fprintf(xmlout,    "              </PackedData>\n");
+    fprintf(xmlout,
+            "            </PackedPacketHeadersTileHeader>\n"); /* Optional in tile-part header, but if not, must be in PPM or codestream */
 }
 #endif SUPPRESS_FOR_NOW
 
 /* ------------- */
 
-void xml_out_frame_tlm(FILE* xmlout) { /* opt, main header only.  May be multiple. */
-/* Compare j2k_read_tlm()... which doesn't retain anything! */
-/* Plan:  Since this is only called from main header, not tilepart, use global j2k_default_tcp rather than parameter */
-/* Main header indents are 10 spaces */
+void xml_out_frame_tlm(FILE*
+                       xmlout)   /* opt, main header only.  May be multiple. */
+{
+    /* Compare j2k_read_tlm()... which doesn't retain anything! */
+    /* Plan:  Since this is only called from main header, not tilepart, use global j2k_default_tcp rather than parameter */
+    /* Main header indents are 10 spaces */
 }
 
 /* ------------- */
 
-void xml_out_frame_plm(FILE* xmlout) { /* opt, main header only; can be used in conjunction with tile-part's PLT */
-/* NO-OP.  PLM NOT SAVED IN DATA STRUCTURE */
-       /* Compare j2k_read_plm()... which doesn't retain anything! */
-/* Plan:  Since this is only called from main header, not tilepart, use global j2k_default_tcp rather than parameter */
-/* Main header indents are 10 spaces */
+void xml_out_frame_plm(FILE*
+                       xmlout)   /* opt, main header only; can be used in conjunction with tile-part's PLT */
+{
+    /* NO-OP.  PLM NOT SAVED IN DATA STRUCTURE */
+    /* Compare j2k_read_plm()... which doesn't retain anything! */
+    /* Plan:  Since this is only called from main header, not tilepart, use global j2k_default_tcp rather than parameter */
+    /* Main header indents are 10 spaces */
 }
 
 /* ------------- */
 
-void xml_out_frame_plt(FILE* xmlout, opj_tcp_t *tcp) { /* opt, tile-part headers only; can be used in conjunction with main header's PLM */
-/* NO-OP.  PLT NOT SAVED IN DATA STRUCTURE */
-       /* Compare j2k_read_plt()... which doesn't retain anything! */
-/* Tile-part header indents are 12 spaces */
+void xml_out_frame_plt(FILE* xmlout,
+                       opj_tcp_t *tcp)   /* opt, tile-part headers only; can be used in conjunction with main header's PLM */
+{
+    /* NO-OP.  PLT NOT SAVED IN DATA STRUCTURE */
+    /* Compare j2k_read_plt()... which doesn't retain anything! */
+    /* Tile-part header indents are 12 spaces */
 }
 
 /* ------------- */
 
-void xml_out_frame_crg(FILE* xmlout) { /* NO-OP.  CRG NOT SAVED IN DATA STRUCTURE */ /* opt, main header only; */
-/* Compare j2k_read_crg()... which doesn't retain anything! */
-/* Plan:  Since this is only called from main header, not tilepart, use global j2k_default_tcp rather than parameter */
+void xml_out_frame_crg(FILE* xmlout)
+{
+    /* NO-OP.  CRG NOT SAVED IN DATA STRUCTURE */ /* opt, main header only; */
+    /* Compare j2k_read_crg()... which doesn't retain anything! */
+    /* Plan:  Since this is only called from main header, not tilepart, use global j2k_default_tcp rather than parameter */
 #ifdef NOTYET
-  THIS PSEUDOCODE IMAGINES THESE EXIST: j2k_default_tcp->crg, j2k_default_tcp->crg_i, j2k_default_tcp->crg_xcrg*, j2k_default_tcp->crg_ycrg* 
-  (POSSIBLY DON'T NEED crg_i, CAN GET NUMBER OR COMPONENTS FROM ELSEWHERE)
-  if(j2k_default_tcp->crg != 1 || j2k_default_tcp->crg_i == 0)
-         return; /* Not present */
-
-/* Main header indents are 10 spaces */
-  fprintf(xmlout,    "          <ComponentRegistration Marker=\"RG\" Count=\"%d\">\n", j2k_default_tcp->crg_i);
-  if(notes) {
-    fprintf(xmlout,  "          <!-- Fine tuning of registration of components with respect to each other, -->\n");
-    fprintf(xmlout,  "          <!-- not required but potentially helpful for decoder. -->\n");
-    fprintf(xmlout,  "          <!-- These supplementary fractional offsets are in units of 1/65536 of the horizontal -->\n");
-    fprintf(xmlout,  "          <!-- or vertical separation (e.g., XRsiz[i] or YRsiz[i] for component i). -->\n");
-  }
-  /* This isn't the most compact form of table, but is OK when number of components is small, as is likely. */
-  for (i = 0; i < j2k_default_tcp->crg_i; i++) {
-    fprintf(xmlout,  "            <Component Num=\"%d\">\n", i+1);
-    fprintf(xmlout,  "              <Xcrg>\n");
-       if(raw)
-      fprintf(xmlout,"                <AsNumerator>%d</AsNumerator>\n", j2k_default_tcp->crg_xcrg[i]);
-       if(derived) {
-         /* Calculate n * 100%/65536; 4 digits after decimal point is sufficiently accurate */
-      fprintf(xmlout,"                <AsPercentage>%.4f</AsPercentage>\n", ((double)j2k_default_tcp->crg_xcrg[i])/655.36);
-         /* We could do another calculation that include XRsiz[i]; maybe later. */
-       }
-    fprintf(xmlout,  "              </Xcrg>\n");
-    fprintf(xmlout,  "              <Ycrg>\n");
-       if(raw)
-      fprintf(xmlout,"                <AsNumerator>%d</AsNumerator>\n", j2k_default_tcp->crg_ycrg[i]);
-       if(derived) {
-      fprintf(xmlout,"                <AsPercentage>%f</AsPercentage>\n", ((double)j2k_default_tcp->crg_ycrg[i])/655.36);
-       }
-    fprintf(xmlout,  "              </Ycrg>\n");
-    fprintf(xmlout,  "            </Component>\n");
-  }
-
-  fprintf(xmlout,    "          </ComponentRegistration>\n");
+THIS PSEUDOCODE IMAGINES THESE EXIST:
+    j2k_default_tcp->crg, j2k_default_tcp->crg_i, j2k_default_tcp->crg_xcrg*,
+                    j2k_default_tcp->crg_ycrg*
+                    (POSSIBLY DON'T NEED crg_i, CAN GET NUMBER OR COMPONENTS FROM ELSEWHERE)
+                     if (j2k_default_tcp->crg != 1 || j2k_default_tcp->crg_i == 0)
+                     return; /* Not present */
+
+                     /* Main header indents are 10 spaces */
+                     fprintf(xmlout,
+                             "          <ComponentRegistration Marker=\"RG\" Count=\"%d\">\n",
+                             j2k_default_tcp->crg_i);
+    if (notes) {
+        fprintf(xmlout,
+                "          <!-- Fine tuning of registration of components with respect to each other, -->\n");
+            fprintf(xmlout,
+                    "          <!-- not required but potentially helpful for decoder. -->\n");
+            fprintf(xmlout,
+                    "          <!-- These supplementary fractional offsets are in units of 1/65536 of the horizontal -->\n");
+            fprintf(xmlout,
+                    "          <!-- or vertical separation (e.g., XRsiz[i] or YRsiz[i] for component i). -->\n");
+        }
+    /* This isn't the most compact form of table, but is OK when number of components is small, as is likely. */
+    for (i = 0; i < j2k_default_tcp->crg_i; i++) {
+    fprintf(xmlout,  "            <Component Num=\"%d\">\n", i + 1);
+        fprintf(xmlout,  "              <Xcrg>\n");
+        if (raw) {
+            fprintf(xmlout, "                <AsNumerator>%d</AsNumerator>\n",
+                    j2k_default_tcp->crg_xcrg[i]);
+        }
+        if (derived) {
+            /* Calculate n * 100%/65536; 4 digits after decimal point is sufficiently accurate */
+            fprintf(xmlout, "                <AsPercentage>%.4f</AsPercentage>\n",
+                    ((double)j2k_default_tcp->crg_xcrg[i]) / 655.36);
+            /* We could do another calculation that include XRsiz[i]; maybe later. */
+        }
+        fprintf(xmlout,  "              </Xcrg>\n");
+        fprintf(xmlout,  "              <Ycrg>\n");
+        if (raw) {
+            fprintf(xmlout, "                <AsNumerator>%d</AsNumerator>\n",
+                    j2k_default_tcp->crg_ycrg[i]);
+        }
+        if (derived) {
+            fprintf(xmlout, "                <AsPercentage>%f</AsPercentage>\n",
+                    ((double)j2k_default_tcp->crg_ycrg[i]) / 655.36);
+        }
+        fprintf(xmlout,  "              </Ycrg>\n");
+        fprintf(xmlout,  "            </Component>\n");
+    }
+
+    fprintf(xmlout,    "          </ComponentRegistration>\n");
 
 #endif
 }
@@ -1875,307 +2475,384 @@ void xml_out_frame_crg(FILE* xmlout) { /* NO-OP.  CRG NOT SAVED IN DATA STRUCTUR
 /* ------------- */
 
 /* Regrettably from a metadata point of view, j2k_read_com() skips over any comments in main header or tile-part-header */
-void xml_out_frame_com(FILE* xmlout, opj_tcp_t *tcp) { /* NO-OP.  COM NOT SAVED IN DATA STRUCTURE */ /* opt in main or tile-part headers; */
-/* Compare j2k_read_com()... which doesn't retain anything! */
+void xml_out_frame_com(FILE* xmlout, opj_tcp_t *tcp)
+{
+    /* NO-OP.  COM NOT SAVED IN DATA STRUCTURE */ /* opt in main or tile-part headers; */
+    /* Compare j2k_read_com()... which doesn't retain anything! */
 #ifdef NOTYET
-  char spaces[13] = "            "; /* 12 spaces if tilepart*/
-  char* s = spaces;
-  if(tcp == &j2k_default_tcp) {
-    s++;s++; /* shorten s to 10 spaces if main */
-  }
-  THIS PSEUDOCODE IMAGINES THESE EXIST: tcp->com, tcp->com_len, tcp->com_data array 
-  if(tcp->com != 1)
-         return; /* Not present */
-
-  fprintf(xmlout,    "%s<Comment Marker=\"COM\">\n", s); /* Optional in main or tile-part header */
-  xml_out_dump_hex_and_ascii(tcp->com_data, tcp->com_len, s);
-  fprintf(xmlout,    "%s</Comment>\n", s);
+    char spaces[13] = "            "; /* 12 spaces if tilepart*/
+    char* s = spaces;
+    if (tcp == &j2k_default_tcp) {
+        s++;
+        s++; /* shorten s to 10 spaces if main */
+    }
+THIS PSEUDOCODE IMAGINES THESE EXIST:
+    tcp->com, tcp->com_len, tcp->com_data array
+    if (tcp->com != 1) {
+        return;    /* Not present */
+    }
+
+    fprintf(xmlout,    "%s<Comment Marker=\"COM\">\n",
+            s); /* Optional in main or tile-part header */
+    xml_out_dump_hex_and_ascii(tcp->com_data, tcp->com_len, s);
+    fprintf(xmlout,    "%s</Comment>\n", s);
 #endif
 }
 
-void xml_out_dump_hex(FILE* xmlout, char *data, int data_len, char* s) {
-  /* s is a string of spaces for indent */
-  int i;
-  
-  /* This is called when raw is true, or there is no appropriate derived form */
-  fprintf(xmlout,    "%s<AsHex>\n", s);
-  fprintf(xmlout,    "%s  ", s); /* Inadequate for pretty printing */
-  for (i = 0; i < data_len; i++) {     /* Dump packet headers */
-    fprintf(xmlout,  "%02x", data[i]);
-  }
-  fprintf(xmlout,    "%s</AsHex>\n", s);
+void xml_out_dump_hex(FILE* xmlout, char *data, int data_len, char* s)
+{
+    /* s is a string of spaces for indent */
+    int i;
+
+    /* This is called when raw is true, or there is no appropriate derived form */
+    fprintf(xmlout,    "%s<AsHex>\n", s);
+    fprintf(xmlout,    "%s  ", s); /* Inadequate for pretty printing */
+    for (i = 0; i < data_len; i++) {  /* Dump packet headers */
+        fprintf(xmlout,  "%02x", data[i]);
+    }
+    fprintf(xmlout,    "%s</AsHex>\n", s);
 }
 
 /* Define this as an even number: */
 #define BYTES_PER_DUMP_LINE 40
 /* Current total width for Hex and ASCII is : 11 spaces lead + (3 * BPDL) + 2 spaces + BPDL */
-void xml_out_dump_hex_and_ascii(FILE* xmlout, char *data, int data_len, char* s) {
-  /* s is a string of spaces for indent */
-  int i,j;
-  
-  if(raw)
-    xml_out_dump_hex(xmlout, data, data_len, s);
-
-  if(derived) {
-    fprintf(xmlout,  "%s<AsHexAndASCII>\n", s);
-       for (i = 0; i < data_len; ) {
-      fprintf(xmlout,"%s ", s); /* Additional leading space added in loop */
-         /* First column: hex */
-      for (j = 0; j < BYTES_PER_DUMP_LINE; j++)        /* Dump bytes */
-        fprintf(xmlout," %02x", data[i+j]);
-      /* Space between columns... */ fprintf(xmlout,  "  ");
-         /* Second column: ASCII */
-         for (j = 0; j < BYTES_PER_DUMP_LINE; j++, i++) {
-           if(isprint((int)data[i]) && i < data_len)
-          fprintf(xmlout,"%c", data[i]);
-           else
-             fprintf(xmlout," ");
-      }
-      /* If we also wanted to output UCS-2 Unicode as a third column, then entire document
-      must use fwprintf.  Forget about it for now.  As it stands, if data is UCS-2 format but still
-      the ASCII set, then we'll be able to read every other byte as ASCII in column 2.  If
-      data is UTF-8 format but still ASCII, then we'll be able to read every byte as ASCII
-      in column 2. */
-    }
-    fprintf(xmlout,  "%s</AsHexAndASCII>\n", s);
-  }
+void xml_out_dump_hex_and_ascii(FILE* xmlout, char *data, int data_len,
+                                char* s)
+{
+    /* s is a string of spaces for indent */
+    int i, j;
+
+    if (raw) {
+        xml_out_dump_hex(xmlout, data, data_len, s);
+    }
+
+    if (derived) {
+        fprintf(xmlout,  "%s<AsHexAndASCII>\n", s);
+        for (i = 0; i < data_len;) {
+            fprintf(xmlout, "%s ", s); /* Additional leading space added in loop */
+            /* First column: hex */
+            for (j = 0; j < BYTES_PER_DUMP_LINE; j++) { /* Dump bytes */
+                fprintf(xmlout, " %02x", data[i + j]);
+            }
+            /* Space between columns... */ fprintf(xmlout,  "  ");
+            /* Second column: ASCII */
+            for (j = 0; j < BYTES_PER_DUMP_LINE; j++, i++) {
+                if (isprint((int)data[i]) && i < data_len) {
+                    fprintf(xmlout, "%c", data[i]);
+                } else {
+                    fprintf(xmlout, " ");
+                }
+            }
+            /* If we also wanted to output UCS-2 Unicode as a third column, then entire document
+            must use fwprintf.  Forget about it for now.  As it stands, if data is UCS-2 format but still
+            the ASCII set, then we'll be able to read every other byte as ASCII in column 2.  If
+            data is UTF-8 format but still ASCII, then we'll be able to read every byte as ASCII
+            in column 2. */
+        }
+        fprintf(xmlout,  "%s</AsHexAndASCII>\n", s);
+    }
 }
 
 
 /* ------------- */
 
-void xml_out_frame_jp2h(FILE* xmlout, opj_jp2_t *jp2_struct) {  /* JP2 Header */
-/* Compare jp2_read_jp2h(opj_jp2_t * jp2_struct) */
-  int i;
-
-  fprintf(xmlout,      "              <JP2Header BoxType=\"jp2h\">\n");
-
-/* Compare jp2_read_ihdr(jp2_struct)) */
-  fprintf(xmlout,      "                <ImageHeader BoxType=\"ihdr\">\n");
-  fprintf(xmlout,      "                  <HEIGHT>%d</HEIGHT>\n", jp2_struct->h); /* 4 bytes */
-  fprintf(xmlout,      "                  <WIDTH>%d</WIDTH>\n", jp2_struct->w); /* 4 bytes */
-  if(notes)
-    fprintf(xmlout,    "                  <!-- HEIGHT here, if 2 fields per image, is of total deinterlaced height. -->\n");
-  fprintf(xmlout,      "                  <NC>%d</NC>\n", jp2_struct->numcomps); /* 2 bytes */
-  if(notes)
-    fprintf(xmlout,    "                  <!-- NC is number of components -->\n"); /* 2 bytes */
-  fprintf(xmlout,      "                  <BPC>\n"); /* 1 byte */
-  if(jp2_struct->bpc == 255) {
-    fprintf(xmlout,    "                    <AsHex>0x%02x</AsHex>\n", jp2_struct->bpc); /* 1 byte */
-    if(notes)
-      fprintf(xmlout,  "                    <!-- BPC = 0xff means bits per pixel varies with component; see table below. -->\n");
-  } else { /* Not 0xff */
-    if(raw) {
-      fprintf(xmlout,  "                    <AsHex>0x%02x</AsHex>\n", jp2_struct->bpc); /* 1 byte */
-      if(notes)
-        fprintf(xmlout,"                    <!-- BPC = 0xff means bits per pixel varies with component; see table below. -->\n");
-       }
-    if(derived) {
-      fprintf(xmlout,  "                    <BitsPerPixel>%d</BitsPerPixel>\n", jp2_struct->bpc & 0x7f);
-      fprintf(xmlout,  "                    <Signed>%d</Signed>\n", jp2_struct->bpc >> 7);
-       }
-  }
-  fprintf(xmlout,      "                  </BPC>\n");
-  fprintf(xmlout,      "                  <C>%d</C>\n", jp2_struct->C); /* 1 byte */
-  if(notes)
-    fprintf(xmlout,    "                  <!-- C is compression type.  Only \"7\" is allowed to date. -->\n"); /* 2 bytes */
-  fprintf(xmlout,      "                  <UnkC>%d</UnkC>\n", jp2_struct->UnkC); /* 1 byte */
-  if(notes)
-    fprintf(xmlout,    "                  <!-- Colourspace Unknown. 1 = unknown, 0 = known (e.g., colourspace spec is accurate) -->\n"); /* 1 byte */
-  fprintf(xmlout,      "                  <IPR>%d</IPR>\n", jp2_struct->IPR); /* 1 byte */
-  if(notes)
-    fprintf(xmlout,    "                  <!-- IPR is 1 if frame contains an Intellectual Property box; 0 otherwise. -->\n"); /* 2 bytes */
-  fprintf(xmlout,      "                </ImageHeader>\n");
-
-  if (jp2_struct->bpc == 255)
-  {
-    fprintf(xmlout,    "                <BitsPerComponent BoxType=\"bpcc\">\n");
-    if(notes)
-      fprintf(xmlout,  "                <!-- Pixel depth (range 1 to 38) is low 7 bits of hex value + 1 -->\n");
-       /* Bits per pixel varies with components */
-    /* Compare jp2_read_bpcc(jp2_struct) */
-       for (i = 0; i < (int)jp2_struct->numcomps; i++) {
-         if(raw)
-        fprintf(xmlout,"                  <AsHex>0x%02x</AsHex>\n", jp2_struct->comps[i].bpcc); /* 1 byte */
-         if(derived) {
-        fprintf(xmlout,"                  <BitsPerPixel>%d</BitsPerPixel>\n", (jp2_struct->comps[i].bpcc & 0x7f)+1);
-        fprintf(xmlout,"                  <Signed>%d</Signed>\n", jp2_struct->comps[i].bpcc >> 7);
-         }
-       }
-    fprintf(xmlout,    "                </BitsPerComponent>\n");
-  }
-
-  /* Compare jp2_read_colr(jp2_struct) */
-  fprintf(xmlout,      "                <ColourSpecification BoxType=\"colr\">\n");
-  fprintf(xmlout,      "                  <METH>%d</METH>\n", jp2_struct->meth); /* 1 byte */
-  if(notes) {
-    fprintf(xmlout,    "                  <!-- Valid values of specification method so far: -->\n");
-    fprintf(xmlout,    "                  <!--   1 = Enumerated colourspace, in EnumCS field -->\n");
-    fprintf(xmlout,    "                  <!--   2 = Restricted ICC Profile, in PROFILE field -->\n");
-  }
-  fprintf(xmlout,      "                  <PREC>%d</PREC>\n", jp2_struct->precedence); /* 1 byte */
-  if(notes)
-    fprintf(xmlout,    "                  <!-- 0 is only valid value of precedence so far. -->\n");
-  fprintf(xmlout,      "                  <APPROX>%d</APPROX>\n", jp2_struct->approx); /* 1 byte */
-  if(notes)
-    fprintf(xmlout,    "                  <!-- 0 is only valid value of colourspace approximation so far. -->\n");
-
-  if (jp2_struct->meth == 1) {
-    fprintf(xmlout,    "                  <EnumCS>%d</EnumCS>\n", jp2_struct->enumcs); /* 4 bytes */
-       if(notes) {
-         fprintf(xmlout,  "                  <!-- Valid values of enumerated MJ2 colourspace so far: -->\n");
-         fprintf(xmlout,  "                  <!--   16: sRGB as defined by IEC 61966-2-1. -->\n");
-         fprintf(xmlout,  "                  <!--   17: greyscale (related to sRGB). -->\n");
-         fprintf(xmlout,  "                  <!--   18: sRGB YCC (from JPEG 2000 Part II). -->\n");
-         fprintf(xmlout,  "                  <!-- (Additional JPX values are defined in Part II). -->\n");
-       }
-  }
-  else
-    if(notes)
-      fprintf(xmlout,  "                  <!-- PROFILE is not handled by current OpenJPEG implementation. -->\n");
+void xml_out_frame_jp2h(FILE* xmlout, opj_jp2_t *jp2_struct)    /* JP2 Header */
+{
+    /* Compare jp2_read_jp2h(opj_jp2_t * jp2_struct) */
+    int i;
+
+    fprintf(xmlout,      "              <JP2Header BoxType=\"jp2h\">\n");
+
+    /* Compare jp2_read_ihdr(jp2_struct)) */
+    fprintf(xmlout,      "                <ImageHeader BoxType=\"ihdr\">\n");
+    fprintf(xmlout,      "                  <HEIGHT>%d</HEIGHT>\n",
+            jp2_struct->h); /* 4 bytes */
+    fprintf(xmlout,      "                  <WIDTH>%d</WIDTH>\n",
+            jp2_struct->w); /* 4 bytes */
+    if (notes) {
+        fprintf(xmlout,
+                "                  <!-- HEIGHT here, if 2 fields per image, is of total deinterlaced height. -->\n");
+    }
+    fprintf(xmlout,      "                  <NC>%d</NC>\n",
+            jp2_struct->numcomps); /* 2 bytes */
+    if (notes) {
+        fprintf(xmlout,
+                "                  <!-- NC is number of components -->\n");    /* 2 bytes */
+    }
+    fprintf(xmlout,      "                  <BPC>\n"); /* 1 byte */
+    if (jp2_struct->bpc == 255) {
+        fprintf(xmlout,    "                    <AsHex>0x%02x</AsHex>\n",
+                jp2_struct->bpc); /* 1 byte */
+        if (notes) {
+            fprintf(xmlout,
+                    "                    <!-- BPC = 0xff means bits per pixel varies with component; see table below. -->\n");
+        }
+    } else { /* Not 0xff */
+        if (raw) {
+            fprintf(xmlout,  "                    <AsHex>0x%02x</AsHex>\n",
+                    jp2_struct->bpc); /* 1 byte */
+            if (notes) {
+                fprintf(xmlout,
+                        "                    <!-- BPC = 0xff means bits per pixel varies with component; see table below. -->\n");
+            }
+        }
+        if (derived) {
+            fprintf(xmlout,  "                    <BitsPerPixel>%d</BitsPerPixel>\n",
+                    jp2_struct->bpc & 0x7f);
+            fprintf(xmlout,  "                    <Signed>%d</Signed>\n",
+                    jp2_struct->bpc >> 7);
+        }
+    }
+    fprintf(xmlout,      "                  </BPC>\n");
+    fprintf(xmlout,      "                  <C>%d</C>\n",
+            jp2_struct->C); /* 1 byte */
+    if (notes) {
+        fprintf(xmlout,
+                "                  <!-- C is compression type.  Only \"7\" is allowed to date. -->\n");    /* 2 bytes */
+    }
+    fprintf(xmlout,      "                  <UnkC>%d</UnkC>\n",
+            jp2_struct->UnkC); /* 1 byte */
+    if (notes) {
+        fprintf(xmlout,
+                "                  <!-- Colourspace Unknown. 1 = unknown, 0 = known (e.g., colourspace spec is accurate) -->\n");    /* 1 byte */
+    }
+    fprintf(xmlout,      "                  <IPR>%d</IPR>\n",
+            jp2_struct->IPR); /* 1 byte */
+    if (notes) {
+        fprintf(xmlout,
+                "                  <!-- IPR is 1 if frame contains an Intellectual Property box; 0 otherwise. -->\n");    /* 2 bytes */
+    }
+    fprintf(xmlout,      "                </ImageHeader>\n");
+
+    if (jp2_struct->bpc == 255) {
+        fprintf(xmlout,    "                <BitsPerComponent BoxType=\"bpcc\">\n");
+        if (notes) {
+            fprintf(xmlout,
+                    "                <!-- Pixel depth (range 1 to 38) is low 7 bits of hex value + 1 -->\n");
+        }
+        /* Bits per pixel varies with components */
+        /* Compare jp2_read_bpcc(jp2_struct) */
+        for (i = 0; i < (int)jp2_struct->numcomps; i++) {
+            if (raw) {
+                fprintf(xmlout, "                  <AsHex>0x%02x</AsHex>\n",
+                        jp2_struct->comps[i].bpcc);    /* 1 byte */
+            }
+            if (derived) {
+                fprintf(xmlout, "                  <BitsPerPixel>%d</BitsPerPixel>\n",
+                        (jp2_struct->comps[i].bpcc & 0x7f) + 1);
+                fprintf(xmlout, "                  <Signed>%d</Signed>\n",
+                        jp2_struct->comps[i].bpcc >> 7);
+            }
+        }
+        fprintf(xmlout,    "                </BitsPerComponent>\n");
+    }
+
+    /* Compare jp2_read_colr(jp2_struct) */
+    fprintf(xmlout,
+            "                <ColourSpecification BoxType=\"colr\">\n");
+    fprintf(xmlout,      "                  <METH>%d</METH>\n",
+            jp2_struct->meth); /* 1 byte */
+    if (notes) {
+        fprintf(xmlout,
+                "                  <!-- Valid values of specification method so far: -->\n");
+        fprintf(xmlout,
+                "                  <!--   1 = Enumerated colourspace, in EnumCS field -->\n");
+        fprintf(xmlout,
+                "                  <!--   2 = Restricted ICC Profile, in PROFILE field -->\n");
+    }
+    fprintf(xmlout,      "                  <PREC>%d</PREC>\n",
+            jp2_struct->precedence); /* 1 byte */
+    if (notes) {
+        fprintf(xmlout,
+                "                  <!-- 0 is only valid value of precedence so far. -->\n");
+    }
+    fprintf(xmlout,      "                  <APPROX>%d</APPROX>\n",
+            jp2_struct->approx); /* 1 byte */
+    if (notes) {
+        fprintf(xmlout,
+                "                  <!-- 0 is only valid value of colourspace approximation so far. -->\n");
+    }
+
+    if (jp2_struct->meth == 1) {
+        fprintf(xmlout,    "                  <EnumCS>%d</EnumCS>\n",
+                jp2_struct->enumcs); /* 4 bytes */
+        if (notes) {
+            fprintf(xmlout,
+                    "                  <!-- Valid values of enumerated MJ2 colourspace so far: -->\n");
+            fprintf(xmlout,
+                    "                  <!--   16: sRGB as defined by IEC 61966-2-1. -->\n");
+            fprintf(xmlout,
+                    "                  <!--   17: greyscale (related to sRGB). -->\n");
+            fprintf(xmlout,
+                    "                  <!--   18: sRGB YCC (from JPEG 2000 Part II). -->\n");
+            fprintf(xmlout,
+                    "                  <!-- (Additional JPX values are defined in Part II). -->\n");
+        }
+    } else if (notes) {
+        fprintf(xmlout,
+                "                  <!-- PROFILE is not handled by current OpenJPEG implementation. -->\n");
+    }
     /* only 1 byte is read and nothing stored */
-  fprintf(xmlout,      "                </ColourSpecification>\n");
-
-  /* TO DO?  No OpenJPEG support.
-  Palette 'pclr'
-  ComponentMapping 'cmap'
-  ChannelDefinition 'cdef'
-  Resolution 'res'
-  */
-  fprintf(xmlout,      "              </JP2Header>\n");
+    fprintf(xmlout,      "                </ColourSpecification>\n");
+
+    /* TO DO?  No OpenJPEG support.
+    Palette 'pclr'
+    ComponentMapping 'cmap'
+    ChannelDefinition 'cdef'
+    Resolution 'res'
+    */
+    fprintf(xmlout,      "              </JP2Header>\n");
 }
 /* ------------- */
 
 #ifdef NOTYET
-IMAGE these use cp structure, extended... but we could use a new data structure instead
-void xml_out_frame_jp2i(FILE* xmlout, opj_cp_t *cp) {
-  /* IntellectualProperty 'jp2i' (no restrictions on location) */
-  int i;
-  IMAGE cp->jp2i, cp->jp2i_count, cp->jp2i_data (array of chars), cp->cp2i_len (array of ints)
-  if(cp->jp2i != 1)
-         return; /* Not present */
-
-  for(i = 0; i < cp->jp2i_count; i++)
-  {
-    fprintf(xmlout,      "            <IntellectualProperty BoxType=\"jp2i\">\n");
-  /* I think this can be anything, including binary, so do a dump */
-    /* Is it better to indent or not indent this content?  Indent is better for reading, but
-    worse for cut/paste. */
-    xml_out_dump_hex_and_ascii(xmlout, cp->jp2i_data[i], cp->jp2i_len[i]);
-    fprintf(xmlout,      "            </IntellectualProperty>\n");
-  }
+IMAGE these use cp structure,
+      extended... but we could use a new data structure instead
+      void xml_out_frame_jp2i(FILE* xmlout, opj_cp_t *cp)
+{
+    /* IntellectualProperty 'jp2i' (no restrictions on location) */
+    int i;
+    IMAGE cp->jp2i, cp->jp2i_count, cp->jp2i_data(array of chars),
+          cp->cp2i_len(array of ints)
+    if (cp->jp2i != 1) {
+        return;    /* Not present */
+    }
+
+    for (i = 0; i < cp->jp2i_count; i++) {
+        fprintf(xmlout,      "            <IntellectualProperty BoxType=\"jp2i\">\n");
+        /* I think this can be anything, including binary, so do a dump */
+        /* Is it better to indent or not indent this content?  Indent is better for reading, but
+        worse for cut/paste. */
+        xml_out_dump_hex_and_ascii(xmlout, cp->jp2i_data[i], cp->jp2i_len[i]);
+        fprintf(xmlout,      "            </IntellectualProperty>\n");
+    }
 }
 
-void xml_out_frame_xml(FILE* xmlout, opj_cp_t *cp) {
-  /* XML 'xml\040' (0x786d6c20).  Can appear multiply, before or after jp2c codestreams */
-  IMAGE cp->xml, cp->xml_count, cp->xml_data (array of chars)
-  MAYBE WE DON'T NEED cp->xml_len (array of ints) IF WE ASSUME xml_data IS NULL-TERMINATED.
-  ASSUME ASSUME EACH LINE IS ENDED BY \n.
-  int i;
-  if(cp->xml != 1)
-         return; /* Not present */
-
-  for(i = 0; i < cp->xml_count; i++)
-  {
-    fprintf(xmlout,      "            <TextFormXML BoxType=\"xml[space]" Instance=\"%d\">\n", i+1);
-    /* Is it better to indent or not indent this content?  Indent is better for reading, but
-    worse for cut/paste. Being lazy, didn't indent here. */
-    fprintf(xmlout,cp->xml_data[i]); /* May be multiple lines */ /* Could check if this is well-formed */
-    fprintf(xmlout,      "            </TextFormXML>\n");
-  }
+void xml_out_frame_xml(FILE* xmlout, opj_cp_t *cp)
+{
+    /* XML 'xml\040' (0x786d6c20).  Can appear multiply, before or after jp2c codestreams */
+    IMAGE cp->xml, cp->xml_count, cp->xml_data(array of chars)
+    MAYBE WE DON'T NEED cp->xml_len (array of ints) IF WE ASSUME xml_data IS NULL-TERMINATED.
+    ASSUME ASSUME EACH LINE IS ENDED BY \n.
+    int i;
+    if (cp->xml != 1) {
+        return;    /* Not present */
+    }
+
+    for (i = 0; i < cp->xml_count; i++) {
+        fprintf(xmlout,      "            <TextFormXML BoxType=\"xml[space]" Instance =
+                    \"%d\">\n", i + 1);
+        /* Is it better to indent or not indent this content?  Indent is better for reading, but
+        worse for cut/paste. Being lazy, didn't indent here. */
+        fprintf(xmlout,
+                cp->xml_data[i]); /* May be multiple lines */ /* Could check if this is well-formed */
+        fprintf(xmlout,      "            </TextFormXML>\n");
+    }
 }
 
-void xml_out_frame_uuid(FILE* xmlout, opj_cp_t *cp) {
-       /* UUID 'uuid' (top level only) */
-       /* Part I 1.7.2 says: may appear multiply in JP2 file, anywhere except before File Type box */
-       /* Part III 5.2.1 says: Private extensions shall be achieved through the 'uuid' type. */
-       /* A UUID is a 16-byte value.  There is a conventional string representation for it:
-          "0x12345678-9ABC-DEF0-1234-567890ABCDEF".  Let's assume that is what is stored in uuid_value */
-
-       /* Part III 6.1 Any other MJ2 box type could be alternatively written as a 'uuid' box, with value given
-          as : 0xXXXXXXXX-0011-0010-8000-00AA00389B71, where the Xs are the boxtype in hex.  However,
-          such a file is "not compliant; systems may choose to read [such] objects ... as equivalent to the box of
-          the same type, or not."  Here, we choose not to. */
-  int i;
-  IMAGE cp->uuid, cp->uuid_count, cp->uuid_value (array of uuids... let's say fixed-length strings) cp->uuid_data (array of char buffers), cp->uuid_len (array of ints)
-  if(cp->juuid != 1)
-         return; /* Not present */
-
-  for(i = 0; i < cp->uuid_count; i++)
-  {
-    fprintf(xmlout,      "            <UniversalUniqueID BoxType=\"uuid\">
-       fprintf(xmlout,      "              <UUID>%s</UUDI>\n", cp->uuid_value[i]);
-       fprintf(xmlout,      "              <Data>\n");
-  /* I think this can be anything, including binary, so do a dump */
-    /* Is it better to indent or not indent this content?  Indent is better for reading, but
-    worse for cut/paste. */
-    xml_out_dump_hex_and_ascii(xmlout, cp->uuid_data[i], cp->uuid_len[i]);
-       fprintf(xmlout,      "              </Data>\n");
-    fprintf(xmlout,      "            </UniversalUniqueID>\n");
-  }
+void xml_out_frame_uuid(FILE* xmlout, opj_cp_t *cp)
+{
+    /* UUID 'uuid' (top level only) */
+    /* Part I 1.7.2 says: may appear multiply in JP2 file, anywhere except before File Type box */
+    /* Part III 5.2.1 says: Private extensions shall be achieved through the 'uuid' type. */
+    /* A UUID is a 16-byte value.  There is a conventional string representation for it:
+       "0x12345678-9ABC-DEF0-1234-567890ABCDEF".  Let's assume that is what is stored in uuid_value */
+
+    /* Part III 6.1 Any other MJ2 box type could be alternatively written as a 'uuid' box, with value given
+       as : 0xXXXXXXXX-0011-0010-8000-00AA00389B71, where the Xs are the boxtype in hex.  However,
+       such a file is "not compliant; systems may choose to read [such] objects ... as equivalent to the box of
+       the same type, or not."  Here, we choose not to. */
+    int i;
+    IMAGE cp->uuid, cp->uuid_count,
+          cp->uuid_value(array of uuids...
+                         let's say fixed-length strings) cp->uuid_data (array of char buffers), cp->uuid_len (array of ints)
+                         if (cp->juuid != 1)
+                         return; /* Not present */
+
+    for (i = 0; i < cp->uuid_count; i++) {
+        fprintf(xmlout,      "            <UniversalUniqueID BoxType=\"uuid\">
+                fprintf(xmlout,      "              <UUID>%s</UUDI>\n", cp->uuid_value[i]);
+                fprintf(xmlout,      "              <Data>\n");
+                /* I think this can be anything, including binary, so do a dump */
+                /* Is it better to indent or not indent this content?  Indent is better for reading, but
+                worse for cut/paste. */
+                xml_out_dump_hex_and_ascii(xmlout, cp->uuid_data[i], cp->uuid_len[i]);
+                fprintf(xmlout,      "              </Data>\n");
+                fprintf(xmlout,      "            </UniversalUniqueID>\n");
+    }
 }
 
-void xml_out_frame_uinf(FILE* xmlout, opj_cp_t *cp) {
-       /* UUIDInfo 'uinf', includes UUIDList 'ulst' and URL 'url\40' */
-       /* Part I 1.7.3 says: may appear multiply in JP2 file, anywhere at the top level except before File Type box */
-       /* So there may be multiple ulst's, and each can have multiple UUIDs listed (with a single URL) */
-       /* This is not quite as vendor-specific as UUIDs, or at least is meant to be generally readable */
-       /* Assume UUIDs stored in canonical string format */
-  int i, j;
-  IMAGE cp->uinf, cp->uinf_count, cp->uinf_ulst_nu (array of ints)
-    cp->uinf_uuid (2 dimensional array of uuids... let's say fixed-length strings),
-    cp->uinf_url (array of char buffers)
-
-  if(cp->uinf != 1)
-         return; /* Not present */
-
-  for(i = 0; i < cp->uuid_count; i++)
-  {
-    fprintf(xmlout,      "            <UUIDInfo BoxType=\"uinf\">\n");
-    fprintf(xmlout,      "              <UUIDList BoxType=\"ulst\" Count=\"%d\">\n",cp->cp->uinf_ulst_nu[i]);
-       for(j = 0; j < cp->uinf_ulst_nu[i];  j++)
-         fprintf(xmlout,    "              <ID Instance=\"%s\">%s</ID>\n", cp->uuif_uuid[i][j], j+1);
-    fprintf(xmlout,      "              </UUIDList>\n");
-       fprintf(xmlout,      "              <DataEntryURL>\n");
-       /* Could add VERS and FLAG here */
-       fprintf(xmlout,      "                <LOC>\n");
-    fprintf(xmlout,      "                  %s",cp->uinf_url[i]); /* Probably single line, so indent works */ /* In theory, could check if this is well-formed, or good live link */
-       fprintf(xmlout,      "                </LOC>\n");
-       fprintf(xmlout,      "              </DataEntryURL>\n");
-    fprintf(xmlout,      "            </UUIDInfo>\n");
-  }
+void xml_out_frame_uinf(FILE* xmlout, opj_cp_t *cp)
+{
+    /* UUIDInfo 'uinf', includes UUIDList 'ulst' and URL 'url\40' */
+    /* Part I 1.7.3 says: may appear multiply in JP2 file, anywhere at the top level except before File Type box */
+    /* So there may be multiple ulst's, and each can have multiple UUIDs listed (with a single URL) */
+    /* This is not quite as vendor-specific as UUIDs, or at least is meant to be generally readable */
+    /* Assume UUIDs stored in canonical string format */
+    int i, j;
+    IMAGE cp->uinf, cp->uinf_count, cp->uinf_ulst_nu(array of ints)
+    cp->uinf_uuid(2 dimensional array of uuids... let's say fixed-length strings),
+                  cp->uinf_url(array of char buffers)
+
+                  if (cp->uinf != 1)
+                  return; /* Not present */
+
+    for (i = 0; i < cp->uuid_count; i++) {
+        fprintf(xmlout,      "            <UUIDInfo BoxType=\"uinf\">\n");
+            fprintf(xmlout,      "              <UUIDList BoxType=\"ulst\" Count=\"%d\">\n",
+                    cp->cp->uinf_ulst_nu[i]);
+            for (j = 0; j < cp->uinf_ulst_nu[i];  j++) {
+                fprintf(xmlout,    "              <ID Instance=\"%s\">%s</ID>\n",
+                        cp->uuif_uuid[i][j], j + 1);
+            }
+            fprintf(xmlout,      "              </UUIDList>\n");
+            fprintf(xmlout,      "              <DataEntryURL>\n");
+            /* Could add VERS and FLAG here */
+            fprintf(xmlout,      "                <LOC>\n");
+            fprintf(xmlout,      "                  %s",
+                    cp->uinf_url[i]); /* Probably single line, so indent works */ /* In theory, could check if this is well-formed, or good live link */
+            fprintf(xmlout,      "                </LOC>\n");
+            fprintf(xmlout,      "              </DataEntryURL>\n");
+            fprintf(xmlout,      "            </UUIDInfo>\n");
+        }
 }
 
-IMAGE these use cp structure, extended... but we could use a new data structure instead
-void xml_out_frame_unknown_type(FILE* xmlout, opj_cp_t *cp) {
-  /* Part III 5.2.1 says "Type fields not defined here are reserved.  Private extensions
-     shall be acieved through the 'uuid' type." [This implies an unknown
-     type would be an error, but then...] "Boxes not explicitly defined in this standard,
-        or otherwise unrecognized by a reader, may be ignored."
-        Also, it says  "the following types are not and will not be used, or used only in
-        their existing sense, in future versions of this specification, to avoid conflict
-        with existing content using earlier pre-standard versions of this format:
-          clip, crgn, matt, kmat, pnot, ctab, load, imap;
-          track reference types tmcd, chap, sync,scpt, ssrc"
-        [But good luck figuring out the mapping.]
-        Part III Amend. 2 4.1 is stronger: "All these specifications [of this family, e.g.,
-        JP2 Part I, ISO Base format (Part 12) leading to MP4, Quicktime, and possibly including
-        MJ2] require that readers ignore objects that are unrecognizable to them".
-        */
-  int i;
-  IMAGE cp->unknown_type, cp->unknown_type_count, cp->unknown_type_boxtype (array of buf[5]s), cp->unknown_type_data (array of chars), cp->unknown_type_len (array of ints)
-  if(cp->unknown_type != 1)
-         return; /* Not present */
-
-  for(i = 0; i < cp->unknown_type_count; i++)
-  {
-    fprintf(xmlout,      "            <UnknownType BoxType=\"%s\">\n", cp->unknown_type_boxtype[i]);
-    /* Can be anything, including binary, so do a dump */
-    /* Is it better to indent or not indent this content?  Indent is better for reading, but
-    worse for cut/paste. */
-    xml_out_dump_hex_and_ascii(xmlout, cp->unknown_type_data[i], cp->unknown_type_len[i]);
-    fprintf(xmlout,      "            </UnknownType>\n");
-  }
+IMAGE these use cp structure,
+extended... but we could use a new data structure instead
+void xml_out_frame_unknown_type(FILE* xmlout, opj_cp_t *cp)
+{
+    /* Part III 5.2.1 says "Type fields not defined here are reserved.  Private extensions
+       shall be acieved through the 'uuid' type." [This implies an unknown
+       type would be an error, but then...] "Boxes not explicitly defined in this standard,
+     or otherwise unrecognized by a reader, may be ignored."
+     Also, it says  "the following types are not and will not be used, or used only in
+     their existing sense, in future versions of this specification, to avoid conflict
+     with existing content using earlier pre-standard versions of this format:
+       clip, crgn, matt, kmat, pnot, ctab, load, imap;
+       track reference types tmcd, chap, sync,scpt, ssrc"
+     [But good luck figuring out the mapping.]
+     Part III Amend. 2 4.1 is stronger: "All these specifications [of this family, e.g.,
+     JP2 Part I, ISO Base format (Part 12) leading to MP4, Quicktime, and possibly including
+     MJ2] require that readers ignore objects that are unrecognizable to them".
+     */
+    int i;
+    IMAGE cp->unknown_type, cp->unknown_type_count,
+          cp->unknown_type_boxtype(array of buf[5]s),
+          cp->unknown_type_data(array of chars), cp->unknown_type_len(array of ints)
+    if (cp->unknown_type != 1) {
+        return;    /* Not present */
+    }
+
+    for (i = 0; i < cp->unknown_type_count; i++) {
+        fprintf(xmlout,      "            <UnknownType BoxType=\"%s\">\n",
+                cp->unknown_type_boxtype[i]);
+        /* Can be anything, including binary, so do a dump */
+        /* Is it better to indent or not indent this content?  Indent is better for reading, but
+        worse for cut/paste. */
+        xml_out_dump_hex_and_ascii(xmlout, cp->unknown_type_data[i],
+                                   cp->unknown_type_len[i]);
+        fprintf(xmlout,      "            </UnknownType>\n");
+    }
 }
 
 #endif
index 2ec2829d9713d946668215c8d9a58f89a0aef02e..f7ee63e44f0392cf5a822b5abdeb6a8e5a27e1c8 100644 (file)
@@ -3,7 +3,7 @@
 /* Contributed to Open JPEG by Glenn Pearson, contract software developer, U.S. National Library of Medicine.
 
 The base code in this file was developed by the author as part of a video archiving
-project for the U.S. National Library of Medicine, Bethesda, MD. 
+project for the U.S. National Library of Medicine, Bethesda, MD.
 It is the policy of NLM (and U.S. government) to not assert copyright.
 
 A non-exclusive copy of this code has been contributed to the Open JPEG project.
@@ -23,23 +23,26 @@ can be bound by the Open JPEG open-source license and disclaimer, expressed else
 /**
 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);
+void error_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[ERROR] %s", msg);
 }
 /**
 sample warning callback expecting a FILE* client object
 */
-void warning_callback(const char *msg, void *client_data) {
-       FILE *stream = (FILE*)client_data;
-       fprintf(stream, "[WARNING] %s", msg);
+void warning_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[WARNING] %s", msg);
 }
 /**
 sample debug callback expecting a FILE* client object
 */
-void info_callback(const char *msg, void *client_data) {
-       FILE *stream = (FILE*)client_data;
-       fprintf(stream, "[INFO] %s", msg);
+void info_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[INFO] %s", msg);
 }
 
 /* -------------------------------------------------------------------------- */
@@ -50,263 +53,297 @@ void info_callback(const char *msg, void *client_data) {
 
 void help_display()
 {
-  /*             "1234567890123456789012345678901234567890123456789012345678901234567890123456789" */
-  fprintf(stdout,"                Help for the 'mj2_to_metadata' Program\n");
-  fprintf(stdout,"                ======================================\n");
-  fprintf(stdout,"The -h option displays this information on screen.\n\n");
-  
-  fprintf(stdout,"mj2_to_metadata generates an XML file from a Motion JPEG 2000 file.\n");
-  fprintf(stdout,"The generated XML shows the structural, but not (yet) curatorial,\n");
-  fprintf(stdout,"metadata from the movie header and from the JPEG 2000 image and tile\n");
-  fprintf(stdout,"headers of a sample frame.  Excluded: low-level packed-bits image data.\n\n");
-
-  fprintf(stdout,"By Default\n");
-  fprintf(stdout,"----------\n");
-  fprintf(stdout,"The metadata includes the jp2 image and tile headers of the first frame.\n");
-  fprintf(stdout,"\n");
-  fprintf(stdout,"Metadata values are shown in 'raw' form (e.g., hexadecimal) as stored in the\n");
-  fprintf(stdout,"file, and, if apt, in a 'derived' form that is more quickly grasped.\n");
-  fprintf(stdout,"\n");
-  fprintf(stdout,"Notes explaining the XML are embedded as terse comments.  These include\n");
-  fprintf(stdout,"   meaning of non-obvious tag abbreviations;\n");
-  fprintf(stdout,"   range and precision of valid values;\n");
-  fprintf(stdout,"   interpretations of values, such as enumerations; and\n");
-  fprintf(stdout,"   current implementation limitations.\n");
-  fprintf(stdout,"\n");
-  fprintf(stdout,"The sample-size and chunk-offset tables, each with 1 row per frame, are not reported.\n");
-  fprintf(stdout,"\n");
-  fprintf(stdout,"The file is self-contained and no verification (e.g., against a DTD) is requested.\n");
-  fprintf(stdout,"\n");
-  fprintf(stdout,"Required Parameters (except with -h)\n");
-  fprintf(stdout,"------------------------------------\n");
-  fprintf(stdout,"[Caution: file strings that contain spaces should be wrapped with quotes.]\n");
-  fprintf(stdout,"-i input.mj2  : where 'input' is any source file name or path.\n");
-  fprintf(stdout,"                MJ2 files created with 'frames_to_mj2' are supported so far.\n");
-  fprintf(stdout,"                These are silent, single-track, 'MJ2 Simple Profile' videos.\n");
-  fprintf(stdout,"-o output.xml : where 'output' is any destination file name or path.\n");
-  fprintf(stdout,"\n");
-  fprintf(stdout,"Optional Parameters\n");
-  fprintf(stdout,"-------------------\n");
-  fprintf(stdout,"-h            : Display this help information.\n");
-  fprintf(stdout,"-n            : Suppress all mj2_to_metadata notes.\n");
-  fprintf(stdout,"-t            : Include sample-size and chunk-offset tables.\n");
-  fprintf(stdout,"-f n          : where n > 0.  Include jp2 header info for frame n [default=1].\n");
-  fprintf(stdout,"-f 0          : No jp2 header info.\n");
-  fprintf(stdout,"-r            : Suppress all 'raw' data for which a 'derived' form exists.\n");
-  fprintf(stdout,"-d            : Suppress all 'derived' data.\n");
-  fprintf(stdout,"                (If both -r and -d given, -r will be ignored.)\n");
-  fprintf(stdout,"-v string     : Verify against the DTD file located by the string.\n");
-  fprintf(stdout,"                Prepend quoted 'string' with either SYSTEM or PUBLIC keyword.\n");
-  fprintf(stdout,"                Thus, for the distributed DTD placed in the same directory as\n");
-  fprintf(stdout,"                the output file: -v \"SYSTEM mj2_to_metadata.dtd\"\n");
-  fprintf(stdout,"                \"PUBLIC\" is used with an access protocol (e.g., http:) + URL.\n");
-  /* More to come */
-  fprintf(stdout,"\n");
-  /*             "1234567890123456789012345678901234567890123456789012345678901234567890123456789" */
+    /*             "1234567890123456789012345678901234567890123456789012345678901234567890123456789" */
+    fprintf(stdout, "                Help for the 'mj2_to_metadata' Program\n");
+    fprintf(stdout, "                ======================================\n");
+    fprintf(stdout, "The -h option displays this information on screen.\n\n");
+
+    fprintf(stdout,
+            "mj2_to_metadata generates an XML file from a Motion JPEG 2000 file.\n");
+    fprintf(stdout,
+            "The generated XML shows the structural, but not (yet) curatorial,\n");
+    fprintf(stdout,
+            "metadata from the movie header and from the JPEG 2000 image and tile\n");
+    fprintf(stdout,
+            "headers of a sample frame.  Excluded: low-level packed-bits image data.\n\n");
+
+    fprintf(stdout, "By Default\n");
+    fprintf(stdout, "----------\n");
+    fprintf(stdout,
+            "The metadata includes the jp2 image and tile headers of the first frame.\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "Metadata values are shown in 'raw' form (e.g., hexadecimal) as stored in the\n");
+    fprintf(stdout,
+            "file, and, if apt, in a 'derived' form that is more quickly grasped.\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "Notes explaining the XML are embedded as terse comments.  These include\n");
+    fprintf(stdout, "   meaning of non-obvious tag abbreviations;\n");
+    fprintf(stdout, "   range and precision of valid values;\n");
+    fprintf(stdout, "   interpretations of values, such as enumerations; and\n");
+    fprintf(stdout, "   current implementation limitations.\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "The sample-size and chunk-offset tables, each with 1 row per frame, are not reported.\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout,
+            "The file is self-contained and no verification (e.g., against a DTD) is requested.\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "Required Parameters (except with -h)\n");
+    fprintf(stdout, "------------------------------------\n");
+    fprintf(stdout,
+            "[Caution: file strings that contain spaces should be wrapped with quotes.]\n");
+    fprintf(stdout,
+            "-i input.mj2  : where 'input' is any source file name or path.\n");
+    fprintf(stdout,
+            "                MJ2 files created with 'frames_to_mj2' are supported so far.\n");
+    fprintf(stdout,
+            "                These are silent, single-track, 'MJ2 Simple Profile' videos.\n");
+    fprintf(stdout,
+            "-o output.xml : where 'output' is any destination file name or path.\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "Optional Parameters\n");
+    fprintf(stdout, "-------------------\n");
+    fprintf(stdout, "-h            : Display this help information.\n");
+    fprintf(stdout, "-n            : Suppress all mj2_to_metadata notes.\n");
+    fprintf(stdout,
+            "-t            : Include sample-size and chunk-offset tables.\n");
+    fprintf(stdout,
+            "-f n          : where n > 0.  Include jp2 header info for frame n [default=1].\n");
+    fprintf(stdout, "-f 0          : No jp2 header info.\n");
+    fprintf(stdout,
+            "-r            : Suppress all 'raw' data for which a 'derived' form exists.\n");
+    fprintf(stdout, "-d            : Suppress all 'derived' data.\n");
+    fprintf(stdout,
+            "                (If both -r and -d given, -r will be ignored.)\n");
+    fprintf(stdout,
+            "-v string     : Verify against the DTD file located by the string.\n");
+    fprintf(stdout,
+            "                Prepend quoted 'string' with either SYSTEM or PUBLIC keyword.\n");
+    fprintf(stdout,
+            "                Thus, for the distributed DTD placed in the same directory as\n");
+    fprintf(stdout,
+            "                the output file: -v \"SYSTEM mj2_to_metadata.dtd\"\n");
+    fprintf(stdout,
+            "                \"PUBLIC\" is used with an access protocol (e.g., http:) + URL.\n");
+    /* More to come */
+    fprintf(stdout, "\n");
+    /*             "1234567890123456789012345678901234567890123456789012345678901234567890123456789" */
 }
 
 /* ------------- */
 
-int main(int argc, char *argv[]) {
-
-       opj_dinfo_t* dinfo; 
-       opj_event_mgr_t event_mgr;              /* event manager */
-
-  FILE *file, *xmlout;
-/*  char xmloutname[50]; */
-  opj_mj2_t *movie;
-
-  char* infile = 0;
-  char* outfile = 0;
-  char* s, S1, S2, S3;
-  int len;
-  unsigned int sampleframe = 1; /* First frame */
-  char* stringDTD = NULL;
-  BOOL notes = TRUE;
-  BOOL sampletables = FALSE;
-  BOOL raw = TRUE;
-  BOOL derived = TRUE;
-       mj2_dparameters_t parameters;
-
-  while (TRUE) {
-       /* ':' after letter means it takes an argument */
-    int c = getopt(argc, argv, "i:o:f:v:hntrd");
-       /* FUTURE:  Reserve 'p' for pruning file (which will probably make -t redundant) */
-    if (c == -1)
-      break;
-    switch (c) {
-    case 'i':                  /* IN file */
-      infile = optarg;
-      s = optarg;
-      while (*s) { s++; } /* Run to filename end */
-      s--;
-      S3 = *s;
-      s--;
-      S2 = *s;
-      s--;
-      S1 = *s;
-      
-      if ((S1 == 'm' && S2 == 'j' && S3 == '2')
-      || (S1 == 'M' && S2 == 'J' && S3 == '2')) {
-       break;
-      }
-      fprintf(stderr, "Input file name must have .mj2 extension, not .%c%c%c.\n", S1, S2, S3);
-      return 1;
-
-      /* ----------------------------------------------------- */
-    case 'o':                  /* OUT file */
-      outfile = optarg;
-      while (*outfile) { outfile++; } /* Run to filename end */
-      outfile--;
-      S3 = *outfile;
-      outfile--;
-      S2 = *outfile;
-      outfile--;
-      S1 = *outfile;
-      
-      outfile = optarg;
-      
-      if ((S1 == 'x' && S2 == 'm' && S3 == 'l')
-         || (S1 == 'X' && S2 == 'M' && S3 == 'L'))
-        break;
-    
-      fprintf(stderr,
-         "Output file name must have .xml extension, not .%c%c%c\n", S1, S2, S3);
-         return 1;
-
-      /* ----------------------------------------------------- */
-    case 'f':                  /* Choose sample frame.  0 = none */
-      sscanf(optarg, "%u", &sampleframe);
-      break;
-
-      /* ----------------------------------------------------- */
-    case 'v':                  /* Verification by DTD. */
-      stringDTD = optarg;
-         /* We will not insist upon last 3 chars being "dtd", since non-file
-         access protocol may be used. */
-         if(strchr(stringDTD,'"') != NULL) {
-        fprintf(stderr, "-D's string must not contain any embedded double-quote characters.\n");
-           return 1;
-         }
-
-      if (strncmp(stringDTD,"PUBLIC ",7) == 0 || strncmp(stringDTD,"SYSTEM ",7) == 0)
-        break;
-    
-      fprintf(stderr, "-D's string must start with \"PUBLIC \" or \"SYSTEM \"\n");
-         return 1;
-
-    /* ----------------------------------------------------- */
-    case 'n':                  /* Suppress comments */
-      notes = FALSE;
-      break;
-
-    /* ----------------------------------------------------- */
-    case 't':                  /* Show sample size and chunk offset tables */
-      sampletables = TRUE;
-      break;
-
-    /* ----------------------------------------------------- */
-    case 'h':                  /* Display an help description */
-      help_display();
-      return 0;
-
-    /* ----------------------------------------------------- */
-    case 'r':                  /* Suppress raw data */
-      raw = FALSE;
-      break;
-
-    /* ----------------------------------------------------- */
-    case 'd':                  /* Suppress derived data */
-      derived = FALSE;
-      break;
-
-   /* ----------------------------------------------------- */
-    default:
-      return 1;
-    } /* switch */
-  } /* while */
-
-  if(!raw && !derived)
-         raw = TRUE; /* At least one of 'raw' and 'derived' must be true */
+int main(int argc, char *argv[])
+{
+
+    opj_dinfo_t* dinfo;
+    opj_event_mgr_t event_mgr;      /* event manager */
+
+    FILE *file, *xmlout;
+    /*  char xmloutname[50]; */
+    opj_mj2_t *movie;
+
+    char* infile = 0;
+    char* outfile = 0;
+    char* s, S1, S2, S3;
+    int len;
+    unsigned int sampleframe = 1; /* First frame */
+    char* stringDTD = NULL;
+    BOOL notes = TRUE;
+    BOOL sampletables = FALSE;
+    BOOL raw = TRUE;
+    BOOL derived = TRUE;
+    mj2_dparameters_t parameters;
+
+    while (TRUE) {
+        /* ':' after letter means it takes an argument */
+        int c = getopt(argc, argv, "i:o:f:v:hntrd");
+        /* FUTURE:  Reserve 'p' for pruning file (which will probably make -t redundant) */
+        if (c == -1) {
+            break;
+        }
+        switch (c) {
+        case 'i':           /* IN file */
+            infile = optarg;
+            s = optarg;
+            while (*s) {
+                s++;    /* Run to filename end */
+            }
+            s--;
+            S3 = *s;
+            s--;
+            S2 = *s;
+            s--;
+            S1 = *s;
+
+            if ((S1 == 'm' && S2 == 'j' && S3 == '2')
+                    || (S1 == 'M' && S2 == 'J' && S3 == '2')) {
+                break;
+            }
+            fprintf(stderr, "Input file name must have .mj2 extension, not .%c%c%c.\n", S1,
+                    S2, S3);
+            return 1;
+
+        /* ----------------------------------------------------- */
+        case 'o':           /* OUT file */
+            outfile = optarg;
+            while (*outfile) {
+                outfile++;    /* Run to filename end */
+            }
+            outfile--;
+            S3 = *outfile;
+            outfile--;
+            S2 = *outfile;
+            outfile--;
+            S1 = *outfile;
+
+            outfile = optarg;
+
+            if ((S1 == 'x' && S2 == 'm' && S3 == 'l')
+                    || (S1 == 'X' && S2 == 'M' && S3 == 'L')) {
+                break;
+            }
+
+            fprintf(stderr,
+                    "Output file name must have .xml extension, not .%c%c%c\n", S1, S2, S3);
+            return 1;
+
+        /* ----------------------------------------------------- */
+        case 'f':           /* Choose sample frame.  0 = none */
+            sscanf(optarg, "%u", &sampleframe);
+            break;
+
+        /* ----------------------------------------------------- */
+        case 'v':           /* Verification by DTD. */
+            stringDTD = optarg;
+            /* We will not insist upon last 3 chars being "dtd", since non-file
+            access protocol may be used. */
+            if (strchr(stringDTD, '"') != NULL) {
+                fprintf(stderr,
+                        "-D's string must not contain any embedded double-quote characters.\n");
+                return 1;
+            }
+
+            if (strncmp(stringDTD, "PUBLIC ", 7) == 0 ||
+                    strncmp(stringDTD, "SYSTEM ", 7) == 0) {
+                break;
+            }
+
+            fprintf(stderr, "-D's string must start with \"PUBLIC \" or \"SYSTEM \"\n");
+            return 1;
+
+        /* ----------------------------------------------------- */
+        case 'n':           /* Suppress comments */
+            notes = FALSE;
+            break;
+
+        /* ----------------------------------------------------- */
+        case 't':           /* Show sample size and chunk offset tables */
+            sampletables = TRUE;
+            break;
+
+        /* ----------------------------------------------------- */
+        case 'h':           /* Display an help description */
+            help_display();
+            return 0;
+
+        /* ----------------------------------------------------- */
+        case 'r':           /* Suppress raw data */
+            raw = FALSE;
+            break;
+
+        /* ----------------------------------------------------- */
+        case 'd':           /* Suppress derived data */
+            derived = FALSE;
+            break;
+
+        /* ----------------------------------------------------- */
+        default:
+            return 1;
+        } /* switch */
+    } /* while */
+
+    if (!raw && !derived) {
+        raw = TRUE;    /* At least one of 'raw' and 'derived' must be true */
+    }
 
     /* Error messages */
-  /* -------------- */
-  if (!infile || !outfile) {
-    fprintf(stderr,"Correct usage: mj2_to_metadata -i mj2-file -o xml-file (plus options)\n");
-    return 1;
-  }
-
-/* was:
-  if (argc != 3) {
-    printf("Bad syntax: Usage: MJ2_to_metadata inputfile.mj2 outputfile.xml\n"); 
-    printf("Example: MJ2_to_metadata foreman.mj2 foreman.xml\n");
-    return 1;
-  }
-*/
-  len = strlen(infile);
-  if(infile[0] == ' ')
-  {
-    infile++; /* There may be a leading blank if user put space after -i */
-  }
-  
-  file = fopen(infile, "rb"); /* was: argv[1] */
-  
-  if (!file) {
-    fprintf(stderr, "Failed to open %s for reading.\n", infile); /* was: argv[1] */
-    return 1;
-  }
-
-  len = strlen(outfile);
-  if(outfile[0] == ' ')
-  {
-    outfile++; /* There may be a leading blank if user put space after -o */
-  }
-
-  // Checking output file
-  xmlout = fopen(outfile, "w"); /* was: argv[2] */
-  if (!xmlout) {
-    fprintf(stderr, "Failed to open %s for writing.\n", outfile); /* was: argv[2] */
-    return 1;
-  }
-  // Leave it open
-
-       /*
-       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;
-
-       /* get a MJ2 decompressor handle */
-       dinfo = mj2_create_decompress();
-
-       /* catch events using our callbacks and give a local context */
-       opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);           
-
-       /* setup the decoder decoding parameters using user parameters */
-       movie = (opj_mj2_t*) dinfo->mj2_handle;
-       mj2_setup_decoder(dinfo->mj2_handle, &parameters);
-
-  if (mj2_read_struct(file, movie)) // Creating the movie structure
-  {
+    /* -------------- */
+    if (!infile || !outfile) {
+        fprintf(stderr,
+                "Correct usage: mj2_to_metadata -i mj2-file -o xml-file (plus options)\n");
+        return 1;
+    }
+
+    /* was:
+      if (argc != 3) {
+        printf("Bad syntax: Usage: MJ2_to_metadata inputfile.mj2 outputfile.xml\n");
+        printf("Example: MJ2_to_metadata foreman.mj2 foreman.xml\n");
+        return 1;
+      }
+    */
+    len = strlen(infile);
+    if (infile[0] == ' ') {
+        infile++; /* There may be a leading blank if user put space after -i */
+    }
+
+    file = fopen(infile, "rb"); /* was: argv[1] */
+
+    if (!file) {
+        fprintf(stderr, "Failed to open %s for reading.\n", infile); /* was: argv[1] */
+        return 1;
+    }
+
+    len = strlen(outfile);
+    if (outfile[0] == ' ') {
+        outfile++; /* There may be a leading blank if user put space after -o */
+    }
+
+    // Checking output file
+    xmlout = fopen(outfile, "w"); /* was: argv[2] */
+    if (!xmlout) {
+        fprintf(stderr, "Failed to open %s for writing.\n", outfile); /* was: argv[2] */
+        return 1;
+    }
+    // Leave it open
+
+    /*
+    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;
+
+    /* get a MJ2 decompressor handle */
+    dinfo = mj2_create_decompress();
+
+    /* catch events using our callbacks and give a local context */
+    opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
+
+    /* setup the decoder decoding parameters using user parameters */
+    movie = (opj_mj2_t*) dinfo->mj2_handle;
+    mj2_setup_decoder(dinfo->mj2_handle, &parameters);
+
+    if (mj2_read_struct(file, movie)) { // Creating the movie structure
+        fclose(xmlout);
+        return 1;
+    }
+
+    xml_write_init(notes, sampletables, raw, derived);
+    xml_write_struct(file, xmlout, movie, sampleframe, stringDTD, &event_mgr);
     fclose(xmlout);
-    return 1;
-  }
-
-  xml_write_init(notes, sampletables, raw, derived);
-  xml_write_struct(file, xmlout, movie, sampleframe, stringDTD, &event_mgr);
-  fclose(xmlout);
 
-       fprintf(stderr,"Metadata correctly extracted to XML file \n");; 
+    fprintf(stderr, "Metadata correctly extracted to XML file \n");;
 
-       /* free remaining structures */
-       if(dinfo) {
-               mj2_destroy_decompress((opj_mj2_t*)dinfo->mj2_handle);
-       }
+    /* free remaining structures */
+    if (dinfo) {
+        mj2_destroy_decompress((opj_mj2_t*)dinfo->mj2_handle);
+    }
 
-  return 0;
+    return 0;
 }
 
 
index afe37679ecbd4349a1ff299a1e3c0a06506046c4..4baefe6704b2be9d284de8c666ac92facd6d7e44 100644 (file)
@@ -42,7 +42,7 @@
 /**
 Size of memory first allocated for MOOV box
 */
-#define TEMP_BUF 10000 
+#define TEMP_BUF 10000
 
 
 /* -------------------------------------------------------------------------- */
@@ -50,16 +50,18 @@ Size of memory first allocated for MOOV box
 /**
 sample error callback expecting a FILE* client object
 */
-static void error_callback(const char *msg, void *client_data) {
-       FILE *stream = (FILE*)client_data;
-       fprintf(stream, "[ERROR] %s", msg);
+static void error_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[ERROR] %s", msg);
 }
 /**
 sample warning callback expecting a FILE* client object
 */
-static void warning_callback(const char *msg, void *client_data) {
-       FILE *stream = (FILE*)client_data;
-       fprintf(stream, "[WARNING] %s", msg);
+static void warning_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[WARNING] %s", msg);
 }
 
 /* -------------------------------------------------------------------------- */
@@ -67,157 +69,166 @@ static void warning_callback(const char *msg, void *client_data) {
 
 static void help_display()
 {
-  fprintf(stdout,"HELP for frames_to_mj2\n----\n\n");
-  fprintf(stdout,"- the -h option displays this help information on screen\n\n");
-  
-  
-  fprintf(stdout,"List of parameters for the MJ2 encoder:\n");
-  fprintf(stdout,"\n");
-  fprintf(stdout,"REMARKS:\n");
-  fprintf(stdout,"---------\n");
-  fprintf(stdout,"\n");
-  fprintf
-    (stdout,"The markers written to the main_header are : SOC SIZ COD QCD COM.\n");
-  fprintf
-    (stdout,"COD and QCD never appear in the tile_header.\n");
-  fprintf(stdout,"\n");
-  fprintf(stdout,"By default:\n");
-  fprintf(stdout,"------------\n");
-  fprintf(stdout,"\n");
-  fprintf(stdout," * Lossless\n");
-  fprintf(stdout," * 1 tile\n");
-  fprintf(stdout," * Size of precinct : 2^15 x 2^15 (means 1 precinct)\n");
-  fprintf(stdout," * Size of code-block : 64 x 64\n");
-  fprintf(stdout," * Number of resolutions: 6\n");
-  fprintf(stdout," * No SOP marker in the codestream\n");
-  fprintf(stdout," * No EPH marker in the codestream\n");
-  fprintf(stdout," * No sub-sampling in x or y direction\n");
-  fprintf(stdout," * No mode switch activated\n");
-  fprintf(stdout," * Progression order: LRCP\n");
-  fprintf(stdout," * No index file\n");
-  fprintf(stdout," * No ROI upshifted\n");
-  fprintf(stdout," * No offset of the origin of the image\n");
-  fprintf(stdout," * No offset of the origin of the tiles\n");
-  fprintf(stdout," * Reversible DWT 5-3\n");
-  fprintf(stdout,"\n");
-  fprintf(stdout,"Parameters:\n");
-  fprintf(stdout,"------------\n");
-  fprintf(stdout,"\n");
-  fprintf
-    (stdout,"Required Parameters (except with -h):\n");
-  fprintf
-    (stdout,"-i : source file      (-i source.yuv) \n");
-  fprintf
-    (stdout,"-o : destination file (-o dest.mj2) \n");
-  fprintf
-    (stdout,"Optional Parameters:\n");
-  fprintf(stdout,"-h : display the help information \n");
-  fprintf(stdout,"-r : different compression ratios for successive layers (-r 20,10,5)\n");
-  fprintf(stdout,"     - The rate specified for each quality level is the desired \n");
-  fprintf(stdout,"       compression factor.\n");
-  fprintf(stdout,"       Example: -r 20,10,1 means quality 1: compress 20x, \n");
-  fprintf(stdout,"       quality 2: compress 10x and quality 3: compress lossless\n");
-  fprintf(stdout,"       (options -r and -q cannot be used together)\n");
-  
-  fprintf(stdout,"-q : different psnr for successive layers (-q 30,40,50) \n");
-  fprintf(stdout,"        (options -r and -q cannot be used together)\n");
-  
-  fprintf(stdout,"-n : number of resolutions (-n 3) \n");
-  fprintf(stdout,"-b : size of code block (-b 32,32) \n");
-  fprintf(stdout,"-c : size of precinct (-c 128,128) \n");
-  fprintf(stdout,"-t : size of tile (-t 512,512) \n");
-  fprintf
-    (stdout,"-p : progression order (-p LRCP) [LRCP, RLCP, RPCL, PCRL, CPRL] \n");
-  fprintf
-    (stdout,"-s : subsampling factor (-s 2,2) [-s X,Y] \n");
-  fprintf(stdout,"     Remark: subsampling bigger than 2 can produce error\n");
-  fprintf
-    (stdout,"-S : write SOP marker before each packet \n");
-  fprintf
-    (stdout,"-E : write EPH marker after each header packet \n");
-  fprintf
-    (stdout,"-M : mode switch (-M 3) [1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL)\n");
-  fprintf
-    (stdout,"             8=VSC 16=ERTERM(SEGTERM) 32=SEGMARK(SEGSYM)] \n");
-  fprintf
-    (stdout,"             Indicate multiple modes by adding their values. \n");
-  fprintf
-    (stdout,"             Example: RESTART(4) + RESET(2) + SEGMARK(32) = -M 38\n");
-  fprintf
-    (stdout,"-R : c=%%d,U=%%d : quantization indices upshifted \n");
-  fprintf
-    (stdout,"             for component c=%%d [%%d = 0,1,2]\n");
-  fprintf
-    (stdout,"             with a value of U=%%d [0 <= %%d <= 37] (i.e. -ROI:c=0,U=25) \n");
-  fprintf
-    (stdout,"-d : offset of the origin of the image (-d 150,300) \n");
-  fprintf
-    (stdout,"-T : offset of the origin of the tiles (-T 100,75) \n");
-  fprintf(stdout,"-I : use the irreversible DWT 9-7 (-I) \n");
-  fprintf(stdout,"-W : image width, height and the dx and dy subsampling \n");
-  fprintf(stdout,"        of the Cb and Cr components for YUV files \n");
-  fprintf(stdout,"        (default is '352,288,2,2' for CIF format's 352x288 and 4:2:0)\n");
-  fprintf(stdout,"-F : video frame rate (set to 25 by default)\n");
-  fprintf(stdout,"-D : depth, precision in bits [8 .. 16]; default:8\n");
-  fprintf(stdout,"-C : comment\n");
-  fprintf(stdout,"\n");
-  fprintf(stdout,"IMPORTANT:\n");
-  fprintf(stdout,"-----------\n");
-  fprintf(stdout,"\n");
-  fprintf(stdout,"The index file has the structure below:\n");
-  fprintf(stdout,"---------------------------------------\n");
-  fprintf(stdout,"\n");
-  fprintf(stdout,"Image_height Image_width\n");
-  fprintf(stdout,"progression order\n");
-  fprintf(stdout,"Tiles_size_X Tiles_size_Y\n");
-  fprintf(stdout,"Components_nb\n");
-  fprintf(stdout,"Layers_nb\n");
-  fprintf(stdout,"decomposition_levels\n");
-  fprintf(stdout,"[Precincts_size_X_res_Nr Precincts_size_Y_res_Nr]...\n");
-  fprintf(stdout,"   [Precincts_size_X_res_0 Precincts_size_Y_res_0]\n");
-  fprintf(stdout,"Main_header_end_position\n");
-  fprintf(stdout,"Codestream_size\n");
-  fprintf(stdout,"Tile_0 start_pos end_Theader end_pos TotalDisto NumPix MaxMSE\n");
-  fprintf(stdout,"Tile_1   ''           ''        ''        ''       ''    ''\n");
-  fprintf(stdout,"...\n");
-  fprintf(stdout,"Tile_Nt   ''           ''        ''        ''       ''    ''\n");
-  fprintf(stdout,"Tpacket_0 Tile layer res. comp. prec. start_pos end_pos disto\n");
-  fprintf(stdout,"...\n");
-  fprintf(stdout,"Tpacket_Np ''   ''    ''   ''    ''       ''       ''     ''\n");
-  
-  fprintf(stdout,"MaxDisto\n");
-  
-  fprintf(stdout,"TotalDisto\n\n");
+    fprintf(stdout, "HELP for frames_to_mj2\n----\n\n");
+    fprintf(stdout, "- the -h option displays this help information on screen\n\n");
+
+
+    fprintf(stdout, "List of parameters for the MJ2 encoder:\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "REMARKS:\n");
+    fprintf(stdout, "---------\n");
+    fprintf(stdout, "\n");
+    fprintf
+    (stdout, "The markers written to the main_header are : SOC SIZ COD QCD COM.\n");
+    fprintf
+    (stdout, "COD and QCD never appear in the tile_header.\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "By default:\n");
+    fprintf(stdout, "------------\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, " * Lossless\n");
+    fprintf(stdout, " * 1 tile\n");
+    fprintf(stdout, " * Size of precinct : 2^15 x 2^15 (means 1 precinct)\n");
+    fprintf(stdout, " * Size of code-block : 64 x 64\n");
+    fprintf(stdout, " * Number of resolutions: 6\n");
+    fprintf(stdout, " * No SOP marker in the codestream\n");
+    fprintf(stdout, " * No EPH marker in the codestream\n");
+    fprintf(stdout, " * No sub-sampling in x or y direction\n");
+    fprintf(stdout, " * No mode switch activated\n");
+    fprintf(stdout, " * Progression order: LRCP\n");
+    fprintf(stdout, " * No index file\n");
+    fprintf(stdout, " * No ROI upshifted\n");
+    fprintf(stdout, " * No offset of the origin of the image\n");
+    fprintf(stdout, " * No offset of the origin of the tiles\n");
+    fprintf(stdout, " * Reversible DWT 5-3\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "Parameters:\n");
+    fprintf(stdout, "------------\n");
+    fprintf(stdout, "\n");
+    fprintf
+    (stdout, "Required Parameters (except with -h):\n");
+    fprintf
+    (stdout, "-i : source file      (-i source.yuv) \n");
+    fprintf
+    (stdout, "-o : destination file (-o dest.mj2) \n");
+    fprintf
+    (stdout, "Optional Parameters:\n");
+    fprintf(stdout, "-h : display the help information \n");
+    fprintf(stdout,
+            "-r : different compression ratios for successive layers (-r 20,10,5)\n");
+    fprintf(stdout,
+            "     - The rate specified for each quality level is the desired \n");
+    fprintf(stdout, "       compression factor.\n");
+    fprintf(stdout, "       Example: -r 20,10,1 means quality 1: compress 20x, \n");
+    fprintf(stdout,
+            "       quality 2: compress 10x and quality 3: compress lossless\n");
+    fprintf(stdout, "       (options -r and -q cannot be used together)\n");
+
+    fprintf(stdout, "-q : different psnr for successive layers (-q 30,40,50) \n");
+    fprintf(stdout, "        (options -r and -q cannot be used together)\n");
+
+    fprintf(stdout, "-n : number of resolutions (-n 3) \n");
+    fprintf(stdout, "-b : size of code block (-b 32,32) \n");
+    fprintf(stdout, "-c : size of precinct (-c 128,128) \n");
+    fprintf(stdout, "-t : size of tile (-t 512,512) \n");
+    fprintf
+    (stdout, "-p : progression order (-p LRCP) [LRCP, RLCP, RPCL, PCRL, CPRL] \n");
+    fprintf
+    (stdout, "-s : subsampling factor (-s 2,2) [-s X,Y] \n");
+    fprintf(stdout, "     Remark: subsampling bigger than 2 can produce error\n");
+    fprintf
+    (stdout, "-S : write SOP marker before each packet \n");
+    fprintf
+    (stdout, "-E : write EPH marker after each header packet \n");
+    fprintf
+    (stdout, "-M : mode switch (-M 3) [1=BYPASS(LAZY) 2=RESET 4=RESTART(TERMALL)\n");
+    fprintf
+    (stdout, "             8=VSC 16=ERTERM(SEGTERM) 32=SEGMARK(SEGSYM)] \n");
+    fprintf
+    (stdout, "             Indicate multiple modes by adding their values. \n");
+    fprintf
+    (stdout, "             Example: RESTART(4) + RESET(2) + SEGMARK(32) = -M 38\n");
+    fprintf
+    (stdout, "-R : c=%%d,U=%%d : quantization indices upshifted \n");
+    fprintf
+    (stdout, "             for component c=%%d [%%d = 0,1,2]\n");
+    fprintf
+    (stdout, "             with a value of U=%%d [0 <= %%d <= 37] (i.e. -ROI:c=0,U=25) \n");
+    fprintf
+    (stdout, "-d : offset of the origin of the image (-d 150,300) \n");
+    fprintf
+    (stdout, "-T : offset of the origin of the tiles (-T 100,75) \n");
+    fprintf(stdout, "-I : use the irreversible DWT 9-7 (-I) \n");
+    fprintf(stdout, "-W : image width, height and the dx and dy subsampling \n");
+    fprintf(stdout, "        of the Cb and Cr components for YUV files \n");
+    fprintf(stdout,
+            "        (default is '352,288,2,2' for CIF format's 352x288 and 4:2:0)\n");
+    fprintf(stdout, "-F : video frame rate (set to 25 by default)\n");
+    fprintf(stdout, "-D : depth, precision in bits [8 .. 16]; default:8\n");
+    fprintf(stdout, "-C : comment\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "IMPORTANT:\n");
+    fprintf(stdout, "-----------\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "The index file has the structure below:\n");
+    fprintf(stdout, "---------------------------------------\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "Image_height Image_width\n");
+    fprintf(stdout, "progression order\n");
+    fprintf(stdout, "Tiles_size_X Tiles_size_Y\n");
+    fprintf(stdout, "Components_nb\n");
+    fprintf(stdout, "Layers_nb\n");
+    fprintf(stdout, "decomposition_levels\n");
+    fprintf(stdout, "[Precincts_size_X_res_Nr Precincts_size_Y_res_Nr]...\n");
+    fprintf(stdout, "   [Precincts_size_X_res_0 Precincts_size_Y_res_0]\n");
+    fprintf(stdout, "Main_header_end_position\n");
+    fprintf(stdout, "Codestream_size\n");
+    fprintf(stdout,
+            "Tile_0 start_pos end_Theader end_pos TotalDisto NumPix MaxMSE\n");
+    fprintf(stdout,
+            "Tile_1   ''           ''        ''        ''       ''    ''\n");
+    fprintf(stdout, "...\n");
+    fprintf(stdout,
+            "Tile_Nt   ''           ''        ''        ''       ''    ''\n");
+    fprintf(stdout,
+            "Tpacket_0 Tile layer res. comp. prec. start_pos end_pos disto\n");
+    fprintf(stdout, "...\n");
+    fprintf(stdout,
+            "Tpacket_Np ''   ''    ''   ''    ''       ''       ''     ''\n");
+
+    fprintf(stdout, "MaxDisto\n");
+
+    fprintf(stdout, "TotalDisto\n\n");
 }
 
 static OPJ_PROG_ORDER give_progression(const char progression[5])
 {
-  if (progression[0] == 'L' && progression[1] == 'R'
-    && progression[2] == 'C' && progression[3] == 'P') {
-    return LRCP;
-  } else {
-    if (progression[0] == 'R' && progression[1] == 'L'
-      && progression[2] == 'C' && progression[3] == 'P') {
-      return RLCP;
+    if (progression[0] == 'L' && progression[1] == 'R'
+            && progression[2] == 'C' && progression[3] == 'P') {
+        return LRCP;
     } else {
-      if (progression[0] == 'R' && progression[1] == 'P'
-                               && progression[2] == 'C' && progression[3] == 'L') {
-                               return RPCL;
-      } else {
-                               if (progression[0] == 'P' && progression[1] == 'C'
-                                       && progression[2] == 'R' && progression[3] == 'L') {
-                                       return PCRL;
-                               } else {
-                                       if (progression[0] == 'C' && progression[1] == 'P'
-                                               && progression[2] == 'R' && progression[3] == 'L') {
-                                               return CPRL;
-                                       } else {
-                                               return PROG_UNKNOWN;
-                                       }
-                               }
-      }
+        if (progression[0] == 'R' && progression[1] == 'L'
+                && progression[2] == 'C' && progression[3] == 'P') {
+            return RLCP;
+        } else {
+            if (progression[0] == 'R' && progression[1] == 'P'
+                    && progression[2] == 'C' && progression[3] == 'L') {
+                return RPCL;
+            } else {
+                if (progression[0] == 'P' && progression[1] == 'C'
+                        && progression[2] == 'R' && progression[3] == 'L') {
+                    return PCRL;
+                } else {
+                    if (progression[0] == 'C' && progression[1] == 'P'
+                            && progression[2] == 'R' && progression[3] == 'L') {
+                        return CPRL;
+                    } else {
+                        return PROG_UNKNOWN;
+                    }
+                }
+            }
+        }
     }
-  }
 }
 
 
@@ -225,610 +236,617 @@ static OPJ_PROG_ORDER give_progression(const char progression[5])
 
 int main(int argc, char **argv)
 {
-       mj2_cparameters_t mj2_parameters;       /* MJ2 compression parameters */
-       opj_cparameters_t *j2k_parameters;      /* J2K compression parameters */
-       opj_event_mgr_t event_mgr;              /* event manager */
-       opj_cio_t *cio;
-       int value;
-       opj_mj2_t *movie;
-       opj_image_t *img;
-       int i, j;
-       char *s, S1, S2, S3;
-       unsigned char *buf;
-       int x1, y1,  len;
-       long mdat_initpos, offset;
-       FILE *mj2file;
-       int sampleno;  
-       opj_cinfo_t* cinfo;
-       opj_bool bSuccess;
-       int numframes;
-       int prec = 8;/* DEFAULT */
-       double total_time = 0;  
-
-       memset(&mj2_parameters, 0, sizeof(mj2_cparameters_t));
-  /* default value */
-  /* ------------- */
-       mj2_parameters.w = 352;                 /* CIF default value*/
-       mj2_parameters.h = 288;                 /* CIF default value*/
-       mj2_parameters.CbCr_subsampling_dx = 2; /* CIF default value*/
-       mj2_parameters.CbCr_subsampling_dy = 2; /* CIF default value*/
-       mj2_parameters.frame_rate = 25;
-       mj2_parameters.prec = 8; /* DEFAULT */
-       mj2_parameters.enumcs = ENUMCS_SYCC; /* FIXME: ENUMCS_YUV420 */
-       mj2_parameters.meth = 1; /* enumerated color space */
+    mj2_cparameters_t mj2_parameters;   /* MJ2 compression parameters */
+    opj_cparameters_t *j2k_parameters;  /* J2K compression parameters */
+    opj_event_mgr_t event_mgr;      /* event manager */
+    opj_cio_t *cio;
+    int value;
+    opj_mj2_t *movie;
+    opj_image_t *img;
+    int i, j;
+    char *s, S1, S2, S3;
+    unsigned char *buf;
+    int x1, y1,  len;
+    long mdat_initpos, offset;
+    FILE *mj2file;
+    int sampleno;
+    opj_cinfo_t* cinfo;
+    opj_bool bSuccess;
+    int numframes;
+    int prec = 8;/* DEFAULT */
+    double total_time = 0;
+
+    memset(&mj2_parameters, 0, sizeof(mj2_cparameters_t));
+    /* default value */
+    /* ------------- */
+    mj2_parameters.w = 352;         /* CIF default value*/
+    mj2_parameters.h = 288;         /* CIF default value*/
+    mj2_parameters.CbCr_subsampling_dx = 2; /* CIF default value*/
+    mj2_parameters.CbCr_subsampling_dy = 2; /* CIF default value*/
+    mj2_parameters.frame_rate = 25;
+    mj2_parameters.prec = 8; /* DEFAULT */
+    mj2_parameters.enumcs = ENUMCS_SYCC; /* FIXME: ENUMCS_YUV420 */
+    mj2_parameters.meth = 1; /* enumerated color space */
+
+    /*
+        configure the event callbacks (not required)
+        setting of each callback is 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 = NULL;
+
+    /* set J2K encoding parameters to default values */
+    opj_set_default_encoder_parameters(&mj2_parameters.j2k_parameters);
+    j2k_parameters = &mj2_parameters.j2k_parameters;
+
+    /* Create comment for codestream */
+    if (j2k_parameters->cp_comment == NULL) {
+        const char comment[] = "Created by OpenJPEG version ";
+        const size_t clen = strlen(comment);
+        const char *version = opj_version();
+        j2k_parameters->cp_comment = (char*)malloc(clen + strlen(version) + 1);
+        sprintf(j2k_parameters->cp_comment, "%s%s", comment, version);
+    }
 
-/*
-       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 = NULL;
-    
-       /* set J2K encoding parameters to default values */
-       opj_set_default_encoder_parameters(&mj2_parameters.j2k_parameters);
-       j2k_parameters = &mj2_parameters.j2k_parameters;
-
-       /* Create comment for codestream */
-       if(j2k_parameters->cp_comment == NULL) {
-    const char comment[] = "Created by OpenJPEG version ";
-               const size_t clen = strlen(comment);
-    const char *version = opj_version();
-               j2k_parameters->cp_comment = (char*)malloc(clen+strlen(version)+1);
-               sprintf(j2k_parameters->cp_comment,"%s%s", comment, version);
-       }
-
-  while (1) {
-    int c = opj_getopt(argc, argv,
-      "i:o:r:q:f:t:n:c:b:p:s:d:P:S:E:M:R:T:C:I:W:F:D:h");
-    if (c == -1)
-      break;
-    switch (c) {
-    case 'i':                  /* IN fill */
-                       {
-                               char *infile = opj_optarg;
-                               s = opj_optarg;
-                               while (*s) {
-                                       s++;
-                               }
-                               s--;
-                               S3 = *s;
-                               s--;
-                               S2 = *s;
-                               s--;
-                               S1 = *s;
-                               
-                               if ((S1 == 'y' && S2 == 'u' && S3 == 'v')
-                                       || (S1 == 'Y' && S2 == 'U' && S3 == 'V')) {
-                                       mj2_parameters.decod_format = YUV_DFMT;                         
-                               }
-                               else {
-                                       fprintf(stderr,
-                                               "!! Unrecognized format for infile : %c%c%c [accept only *.yuv] !!\n\n",
-                                               S1, S2, S3);
-                                       return 1;
-                               }
-                               strncpy(mj2_parameters.infile, infile, sizeof(mj2_parameters.infile)-1);
-                       }
-      break;
-      /* ----------------------------------------------------- */
-    case 'o':                  /* OUT fill */
-                       {
-                               char *outfile = opj_optarg;
-                               while (*outfile) {
-                                       outfile++;
-                               }
-                               outfile--;
-                               S3 = *outfile;
-                               outfile--;
-                               S2 = *outfile;
-                               outfile--;
-                               S1 = *outfile;
-                               
-                               outfile = opj_optarg;
-                               
-                               if ((S1 == 'm' && S2 == 'j' && S3 == '2')
-                                       || (S1 == 'M' && S2 == 'J' && S3 == '2'))
-                                       mj2_parameters.cod_format = MJ2_CFMT;
-                               else {
-                                       fprintf(stderr,
-                                               "Unknown output format image *.%c%c%c [only *.mj2]!! \n",
-                                               S1, S2, S3);
-                                       return 1;
-                               }
-                               strncpy(mj2_parameters.outfile, outfile, sizeof(mj2_parameters.outfile)-1);      
-      }
-      break;
-      /* ----------------------------------------------------- */
-    case 'r':                  /* rates rates/distorsion */
-                       {
-                               float rate;
-                               s = opj_optarg;
-                               while (sscanf(s, "%f", &rate) == 1) {
-                                       j2k_parameters->tcp_rates[j2k_parameters->tcp_numlayers] = rate * 2;
-                                       j2k_parameters->tcp_numlayers++;
-                                       while (*s && *s != ',') {
-                                               s++;
-                                       }
-                                       if (!*s)
-                                               break;
-                                       s++;
-                               }
-                               j2k_parameters->cp_disto_alloc = 1;
-                       }
-      break;
-      /* ----------------------------------------------------- */
-    case 'q':                  /* add fixed_quality */
-      s = opj_optarg;
-                       while (sscanf(s, "%f", &j2k_parameters->tcp_distoratio[j2k_parameters->tcp_numlayers]) == 1) {
-                               j2k_parameters->tcp_numlayers++;
-                               while (*s && *s != ',') {
-                                       s++;
-                               }
-                               if (!*s)
-                                       break;
-                               s++;
-                       }
-                       j2k_parameters->cp_fixed_quality = 1;
-      break;
-      /* dda */
-      /* ----------------------------------------------------- */
-    case 'f':                  /* mod fixed_quality (before : -q) */
-                       {
-                               int *row = NULL, *col = NULL;
-                               int numlayers = 0, numresolution = 0, matrix_width = 0;
-                               
-                               s = opj_optarg;
-                               sscanf(s, "%d", &numlayers);
-                               s++;
-                               if (numlayers > 9)
-                                       s++;
-                               
-                               j2k_parameters->tcp_numlayers = numlayers;
-                               numresolution = j2k_parameters->numresolution;
-                               matrix_width = numresolution * 3;
-                               j2k_parameters->cp_matrice = (int *) malloc(numlayers * matrix_width * sizeof(int));
-                               s = s + 2;
-                               
-                               for (i = 0; i < numlayers; i++) {
-                                       row = &j2k_parameters->cp_matrice[i * matrix_width];
-                                       col = row;
-                                       j2k_parameters->tcp_rates[i] = 1;
-                                       sscanf(s, "%d,", &col[0]);
-                                       s += 2;
-                                       if (col[0] > 9)
-                                               s++;
-                                       col[1] = 0;
-                                       col[2] = 0;
-                                       for (j = 1; j < numresolution; j++) {
-                                               col += 3;
-                                               sscanf(s, "%d,%d,%d", &col[0], &col[1], &col[2]);
-                                               s += 6;
-                                               if (col[0] > 9)
-                                                       s++;
-                                               if (col[1] > 9)
-                                                       s++;
-                                               if (col[2] > 9)
-                                                       s++;
-                                       }
-                                       if (i < numlayers - 1)
-                                               s++;
-                               }
-                               j2k_parameters->cp_fixed_alloc = 1;
-                       }
-                       break;
-      /* ----------------------------------------------------- */
-    case 't':                  /* tiles */
-      sscanf(opj_optarg, "%d,%d", &j2k_parameters->cp_tdx, &j2k_parameters->cp_tdy);
-                       j2k_parameters->tile_size_on = OPJ_TRUE;
-      break;
-      /* ----------------------------------------------------- */
-    case 'n':                  /* resolution */
-      sscanf(opj_optarg, "%d", &j2k_parameters->numresolution);
-      break;
-      /* ----------------------------------------------------- */
-    case 'c':                  /* precinct dimension */
-                       {
-                               char sep;
-                               int res_spec = 0;
-
-                               char *s = opj_optarg;
-                               do {
-                                       sep = 0;
-                                       sscanf(s, "[%d,%d]%c", &j2k_parameters->prcw_init[res_spec],
-                                 &j2k_parameters->prch_init[res_spec], &sep);
-                                       j2k_parameters->csty |= 0x01;
-                                       res_spec++;
-                                       s = strpbrk(s, "]") + 2;
-                               }
-                               while (sep == ',');
-                               j2k_parameters->res_spec = res_spec;
-                       }
-                       break;
-
-      /* ----------------------------------------------------- */
-    case 'b':                  /* code-block dimension */
-                       {
-                               int cblockw_init = 0, cblockh_init = 0;
-                               sscanf(opj_optarg, "%d,%d", &cblockw_init, &cblockh_init);
-                               if (cblockw_init * cblockh_init > 4096 || cblockw_init > 1024
-                                       || cblockw_init < 4 || cblockh_init > 1024 || cblockh_init < 4) {
-                                       fprintf(stderr,
-                                               "!! Size of code_block error (option -b) !!\n\nRestriction :\n"
-            "    * width*height<=4096\n    * 4<=width,height<= 1024\n\n");
-                                       return 1;
-                               }
-                               j2k_parameters->cblockw_init = cblockw_init;
-                               j2k_parameters->cblockh_init = cblockh_init;
-                       }
-                       break;
-      /* ----------------------------------------------------- */
-    case 'p':                  /* progression order */
-                       {
-                               char progression[5];
-                               
-                               strncpy(progression, opj_optarg, 5);
-                               j2k_parameters->prog_order = give_progression(progression);
-                               if (j2k_parameters->prog_order == -1) {
-                                       fprintf(stderr, "Unrecognized progression order "
-            "[LRCP, RLCP, RPCL, PCRL, CPRL] !!\n");
-                                       return 1;
-                               }
-                       }
-                       break;
-      /* ----------------------------------------------------- */
-    case 's':                  /* subsampling factor */
-      {
-                               if (sscanf(opj_optarg, "%d,%d", &j2k_parameters->subsampling_dx,
-                                    &j2k_parameters->subsampling_dy) != 2) {
-                                       fprintf(stderr, "'-s' sub-sampling argument error !  [-s dx,dy]\n");
-                                       return 1;
-                               }
-                       }
-                       break;
-      /* ----------------------------------------------------- */
-    case 'd':                  /* coordonnate of the reference grid */
-      {
-                               if (sscanf(opj_optarg, "%d,%d", &j2k_parameters->image_offset_x0,
-                                    &j2k_parameters->image_offset_y0) != 2) {
-                                       fprintf(stderr, "-d 'coordonnate of the reference grid' argument "
-            "error !! [-d x0,y0]\n");
-                                       return 1;
-                               }
-                       }
-                       break;
-      /* ----------------------------------------------------- */
-    case 'h':                  /* Display an help description */
-      help_display();
-      return 0;
-      break;
-      /* ----------------------------------------------------- */
-    case 'P':                  /* POC */
-      {
-                               int numpocs = 0;                /* number of progression order change (POC) default 0 */
-                               opj_poc_t *POC = NULL;  /* POC : used in case of Progression order change */
-
-                               char *s = opj_optarg;
-                               POC = j2k_parameters->POC;
-
-                               while (sscanf(s, "T%d=%d,%d,%d,%d,%d,%4s", &POC[numpocs].tile,
-                                       &POC[numpocs].resno0, &POC[numpocs].compno0,
-                                       &POC[numpocs].layno1, &POC[numpocs].resno1,
-                                       &POC[numpocs].compno1, POC[numpocs].progorder) == 7) {
-                                       POC[numpocs].prg1 = give_progression(POC[numpocs].progorder);
-                                       numpocs++;
-                                       while (*s && *s != '/') {
-                                               s++;
-                                       }
-                                       if (!*s) {
-                                               break;
-                                       }
-                                       s++;
-                               }
-                               j2k_parameters->numpocs = numpocs;
-                       }
-                       break;
-      /* ------------------------------------------------------ */
-    case 'S':                  /* SOP marker */
-      j2k_parameters->csty |= 0x02;
-      break;
-      /* ------------------------------------------------------ */
-    case 'E':                  /* EPH marker */
-      j2k_parameters->csty |= 0x04;
-      break;
-      /* ------------------------------------------------------ */
-    case 'M':                  /* Mode switch pas tous au point !! */
-      if (sscanf(opj_optarg, "%d", &value) == 1) {
-                               for (i = 0; i <= 5; i++) {
-                                       int cache = value & (1 << i);
-                                       if (cache)
-                                               j2k_parameters->mode |= (1 << i);
-                               }
-      }
-      break;
-      /* ------------------------------------------------------ */
-    case 'R':                  /* ROI */
-      {
-                               if (sscanf(opj_optarg, "OI:c=%d,U=%d", &j2k_parameters->roi_compno,
-                                           &j2k_parameters->roi_shift) != 2) {
-                                       fprintf(stderr, "ROI error !! [-ROI:c='compno',U='shift']\n");
-                                       return 1;
-                               }
-                       }
-                       break;
-      /* ------------------------------------------------------ */
-    case 'T':                  /* Tile offset */
-                       {
-                               if (sscanf(opj_optarg, "%d,%d", &j2k_parameters->cp_tx0, &j2k_parameters->cp_ty0) != 2) {
-                                       fprintf(stderr, "-T 'tile offset' argument error !! [-T X0,Y0]");
-                                       return 1;
-                               }
-                       }
-                       break;
-      /* ------------------------------------------------------ */
-    case 'C':                  /* Add a comment */
-                       {
-                               j2k_parameters->cp_comment = (char*)malloc(strlen(opj_optarg) + 1);
-                               if(j2k_parameters->cp_comment) {
-                                       strcpy(j2k_parameters->cp_comment, opj_optarg);
-                               }
-                       }
-                       break;
-      /* ------------------------------------------------------ */
-    case 'I':                  /* reversible or not */
-                       {
-                               j2k_parameters->irreversible = 1;
-                       }
-                       break;
-      /* ------------------------------------------------------ */
-    case 'W':                  /* Width and Height and Cb and Cr subsampling in case of YUV format files */
-      if (sscanf
-                               (opj_optarg, "%d,%d,%d,%d", &mj2_parameters.w, &mj2_parameters.h, &mj2_parameters.CbCr_subsampling_dx,
-                               &mj2_parameters.CbCr_subsampling_dy) != 4) {
-                               fprintf(stderr, "-W argument error");
-                               return 1;
-      }
-      break;
-      /* ------------------------------------------------------ */
-    case 'F':                  /* Video frame rate */
-      if (sscanf(opj_optarg, "%d", &mj2_parameters.frame_rate) != 1) {
-                               fprintf(stderr, "-F argument error");
-                               return 1;
-      }
-      break;
-      /* ------------------------------------------------------ */
-       case 'D': /* Depth: the precision */
-               if(sscanf(opj_optarg, "%d", &prec) != 1) prec = 0;
-               break;
-
-    default:
-      return 1;
+    while (1) {
+        int c = opj_getopt(argc, argv,
+                           "i:o:r:q:f:t:n:c:b:p:s:d:P:S:E:M:R:T:C:I:W:F:D:h");
+        if (c == -1) {
+            break;
+        }
+        switch (c) {
+        case 'i': {         /* IN fill */
+            char *infile = opj_optarg;
+            s = opj_optarg;
+            while (*s) {
+                s++;
+            }
+            s--;
+            S3 = *s;
+            s--;
+            S2 = *s;
+            s--;
+            S1 = *s;
+
+            if ((S1 == 'y' && S2 == 'u' && S3 == 'v')
+                    || (S1 == 'Y' && S2 == 'U' && S3 == 'V')) {
+                mj2_parameters.decod_format = YUV_DFMT;
+            } else {
+                fprintf(stderr,
+                        "!! Unrecognized format for infile : %c%c%c [accept only *.yuv] !!\n\n",
+                        S1, S2, S3);
+                return 1;
+            }
+            strncpy(mj2_parameters.infile, infile, sizeof(mj2_parameters.infile) - 1);
+        }
+        break;
+        /* ----------------------------------------------------- */
+        case 'o': {         /* OUT fill */
+            char *outfile = opj_optarg;
+            while (*outfile) {
+                outfile++;
+            }
+            outfile--;
+            S3 = *outfile;
+            outfile--;
+            S2 = *outfile;
+            outfile--;
+            S1 = *outfile;
+
+            outfile = opj_optarg;
+
+            if ((S1 == 'm' && S2 == 'j' && S3 == '2')
+                    || (S1 == 'M' && S2 == 'J' && S3 == '2')) {
+                mj2_parameters.cod_format = MJ2_CFMT;
+            } else {
+                fprintf(stderr,
+                        "Unknown output format image *.%c%c%c [only *.mj2]!! \n",
+                        S1, S2, S3);
+                return 1;
+            }
+            strncpy(mj2_parameters.outfile, outfile, sizeof(mj2_parameters.outfile) - 1);
+        }
+        break;
+        /* ----------------------------------------------------- */
+        case 'r': {         /* rates rates/distorsion */
+            float rate;
+            s = opj_optarg;
+            while (sscanf(s, "%f", &rate) == 1) {
+                j2k_parameters->tcp_rates[j2k_parameters->tcp_numlayers] = rate * 2;
+                j2k_parameters->tcp_numlayers++;
+                while (*s && *s != ',') {
+                    s++;
+                }
+                if (!*s) {
+                    break;
+                }
+                s++;
+            }
+            j2k_parameters->cp_disto_alloc = 1;
+        }
+        break;
+        /* ----------------------------------------------------- */
+        case 'q':           /* add fixed_quality */
+            s = opj_optarg;
+            while (sscanf(s, "%f",
+                          &j2k_parameters->tcp_distoratio[j2k_parameters->tcp_numlayers]) == 1) {
+                j2k_parameters->tcp_numlayers++;
+                while (*s && *s != ',') {
+                    s++;
+                }
+                if (!*s) {
+                    break;
+                }
+                s++;
+            }
+            j2k_parameters->cp_fixed_quality = 1;
+            break;
+        /* dda */
+        /* ----------------------------------------------------- */
+        case 'f': {         /* mod fixed_quality (before : -q) */
+            int *row = NULL, *col = NULL;
+            int numlayers = 0, numresolution = 0, matrix_width = 0;
+
+            s = opj_optarg;
+            sscanf(s, "%d", &numlayers);
+            s++;
+            if (numlayers > 9) {
+                s++;
+            }
+
+            j2k_parameters->tcp_numlayers = numlayers;
+            numresolution = j2k_parameters->numresolution;
+            matrix_width = numresolution * 3;
+            j2k_parameters->cp_matrice = (int *) malloc(numlayers * matrix_width * sizeof(
+                                             int));
+            s = s + 2;
+
+            for (i = 0; i < numlayers; i++) {
+                row = &j2k_parameters->cp_matrice[i * matrix_width];
+                col = row;
+                j2k_parameters->tcp_rates[i] = 1;
+                sscanf(s, "%d,", &col[0]);
+                s += 2;
+                if (col[0] > 9) {
+                    s++;
+                }
+                col[1] = 0;
+                col[2] = 0;
+                for (j = 1; j < numresolution; j++) {
+                    col += 3;
+                    sscanf(s, "%d,%d,%d", &col[0], &col[1], &col[2]);
+                    s += 6;
+                    if (col[0] > 9) {
+                        s++;
+                    }
+                    if (col[1] > 9) {
+                        s++;
+                    }
+                    if (col[2] > 9) {
+                        s++;
+                    }
+                }
+                if (i < numlayers - 1) {
+                    s++;
+                }
+            }
+            j2k_parameters->cp_fixed_alloc = 1;
+        }
+        break;
+        /* ----------------------------------------------------- */
+        case 't':           /* tiles */
+            sscanf(opj_optarg, "%d,%d", &j2k_parameters->cp_tdx, &j2k_parameters->cp_tdy);
+            j2k_parameters->tile_size_on = OPJ_TRUE;
+            break;
+        /* ----------------------------------------------------- */
+        case 'n':           /* resolution */
+            sscanf(opj_optarg, "%d", &j2k_parameters->numresolution);
+            break;
+        /* ----------------------------------------------------- */
+        case 'c': {         /* precinct dimension */
+            char sep;
+            int res_spec = 0;
+
+            char *s = opj_optarg;
+            do {
+                sep = 0;
+                sscanf(s, "[%d,%d]%c", &j2k_parameters->prcw_init[res_spec],
+                       &j2k_parameters->prch_init[res_spec], &sep);
+                j2k_parameters->csty |= 0x01;
+                res_spec++;
+                s = strpbrk(s, "]") + 2;
+            } while (sep == ',');
+            j2k_parameters->res_spec = res_spec;
+        }
+        break;
+
+        /* ----------------------------------------------------- */
+        case 'b': {         /* code-block dimension */
+            int cblockw_init = 0, cblockh_init = 0;
+            sscanf(opj_optarg, "%d,%d", &cblockw_init, &cblockh_init);
+            if (cblockw_init * cblockh_init > 4096 || cblockw_init > 1024
+                    || cblockw_init < 4 || cblockh_init > 1024 || cblockh_init < 4) {
+                fprintf(stderr,
+                        "!! Size of code_block error (option -b) !!\n\nRestriction :\n"
+                        "    * width*height<=4096\n    * 4<=width,height<= 1024\n\n");
+                return 1;
+            }
+            j2k_parameters->cblockw_init = cblockw_init;
+            j2k_parameters->cblockh_init = cblockh_init;
+        }
+        break;
+        /* ----------------------------------------------------- */
+        case 'p': {         /* progression order */
+            char progression[5];
+
+            strncpy(progression, opj_optarg, 5);
+            j2k_parameters->prog_order = give_progression(progression);
+            if (j2k_parameters->prog_order == -1) {
+                fprintf(stderr, "Unrecognized progression order "
+                        "[LRCP, RLCP, RPCL, PCRL, CPRL] !!\n");
+                return 1;
+            }
+        }
+        break;
+        /* ----------------------------------------------------- */
+        case 's': {         /* subsampling factor */
+            if (sscanf(opj_optarg, "%d,%d", &j2k_parameters->subsampling_dx,
+                       &j2k_parameters->subsampling_dy) != 2) {
+                fprintf(stderr, "'-s' sub-sampling argument error !  [-s dx,dy]\n");
+                return 1;
+            }
+        }
+        break;
+        /* ----------------------------------------------------- */
+        case 'd': {         /* coordonnate of the reference grid */
+            if (sscanf(opj_optarg, "%d,%d", &j2k_parameters->image_offset_x0,
+                       &j2k_parameters->image_offset_y0) != 2) {
+                fprintf(stderr, "-d 'coordonnate of the reference grid' argument "
+                        "error !! [-d x0,y0]\n");
+                return 1;
+            }
+        }
+        break;
+        /* ----------------------------------------------------- */
+        case 'h':           /* Display an help description */
+            help_display();
+            return 0;
+            break;
+        /* ----------------------------------------------------- */
+        case 'P': {         /* POC */
+            int numpocs = 0;        /* number of progression order change (POC) default 0 */
+            opj_poc_t *POC = NULL;  /* POC : used in case of Progression order change */
+
+            char *s = opj_optarg;
+            POC = j2k_parameters->POC;
+
+            while (sscanf(s, "T%d=%d,%d,%d,%d,%d,%4s", &POC[numpocs].tile,
+                          &POC[numpocs].resno0, &POC[numpocs].compno0,
+                          &POC[numpocs].layno1, &POC[numpocs].resno1,
+                          &POC[numpocs].compno1, POC[numpocs].progorder) == 7) {
+                POC[numpocs].prg1 = give_progression(POC[numpocs].progorder);
+                numpocs++;
+                while (*s && *s != '/') {
+                    s++;
+                }
+                if (!*s) {
+                    break;
+                }
+                s++;
+            }
+            j2k_parameters->numpocs = numpocs;
+        }
+        break;
+        /* ------------------------------------------------------ */
+        case 'S':           /* SOP marker */
+            j2k_parameters->csty |= 0x02;
+            break;
+        /* ------------------------------------------------------ */
+        case 'E':           /* EPH marker */
+            j2k_parameters->csty |= 0x04;
+            break;
+        /* ------------------------------------------------------ */
+        case 'M':           /* Mode switch pas tous au point !! */
+            if (sscanf(opj_optarg, "%d", &value) == 1) {
+                for (i = 0; i <= 5; i++) {
+                    int cache = value & (1 << i);
+                    if (cache) {
+                        j2k_parameters->mode |= (1 << i);
+                    }
+                }
+            }
+            break;
+        /* ------------------------------------------------------ */
+        case 'R': {         /* ROI */
+            if (sscanf(opj_optarg, "OI:c=%d,U=%d", &j2k_parameters->roi_compno,
+                       &j2k_parameters->roi_shift) != 2) {
+                fprintf(stderr, "ROI error !! [-ROI:c='compno',U='shift']\n");
+                return 1;
+            }
+        }
+        break;
+        /* ------------------------------------------------------ */
+        case 'T': {         /* Tile offset */
+            if (sscanf(opj_optarg, "%d,%d", &j2k_parameters->cp_tx0,
+                       &j2k_parameters->cp_ty0) != 2) {
+                fprintf(stderr, "-T 'tile offset' argument error !! [-T X0,Y0]");
+                return 1;
+            }
+        }
+        break;
+        /* ------------------------------------------------------ */
+        case 'C': {         /* Add a comment */
+            j2k_parameters->cp_comment = (char*)malloc(strlen(opj_optarg) + 1);
+            if (j2k_parameters->cp_comment) {
+                strcpy(j2k_parameters->cp_comment, opj_optarg);
+            }
+        }
+        break;
+        /* ------------------------------------------------------ */
+        case 'I': {         /* reversible or not */
+            j2k_parameters->irreversible = 1;
+        }
+        break;
+        /* ------------------------------------------------------ */
+        case 'W':           /* Width and Height and Cb and Cr subsampling in case of YUV format files */
+            if (sscanf
+                    (opj_optarg, "%d,%d,%d,%d", &mj2_parameters.w, &mj2_parameters.h,
+                     &mj2_parameters.CbCr_subsampling_dx,
+                     &mj2_parameters.CbCr_subsampling_dy) != 4) {
+                fprintf(stderr, "-W argument error");
+                return 1;
+            }
+            break;
+        /* ------------------------------------------------------ */
+        case 'F':           /* Video frame rate */
+            if (sscanf(opj_optarg, "%d", &mj2_parameters.frame_rate) != 1) {
+                fprintf(stderr, "-F argument error");
+                return 1;
+            }
+            break;
+        /* ------------------------------------------------------ */
+        case 'D': /* Depth: the precision */
+            if (sscanf(opj_optarg, "%d", &prec) != 1) {
+                prec = 0;
+            }
+            break;
+
+        default:
+            return 1;
+        }
+    }
+
+    /* Error messages */
+    /* -------------- */
+    if (!mj2_parameters.cod_format || !mj2_parameters.decod_format) {
+        fprintf(stderr,
+                "Usage: %s -i yuv-file -o mj2-file (+ options)\n", argv[0]);
+        return 1;
+    }
+    if (prec < 1 || prec > 16) {
+        fprintf(stderr, "Error: Depth %d must be in the range 8 .. 16\n", prec);
+        return 1;
+    }
+    if ((j2k_parameters->cp_disto_alloc || j2k_parameters->cp_fixed_alloc ||
+            j2k_parameters->cp_fixed_quality)
+            && (!(j2k_parameters->cp_disto_alloc ^ j2k_parameters->cp_fixed_alloc ^
+                  j2k_parameters->cp_fixed_quality))) {
+        fprintf(stderr, "Error: options -r -q and -f cannot be used together !!\n");
+        return 1;
+    }               /* mod fixed_quality */
+
+    /* if no rate entered, lossless by default */
+    if (j2k_parameters->tcp_numlayers == 0) {
+        j2k_parameters->tcp_rates[0] = 0;   /* MOD antonin : losslessbug */
+        j2k_parameters->tcp_numlayers++;
+        j2k_parameters->cp_disto_alloc = 1;
+    }
+
+    if ((j2k_parameters->cp_tx0 > j2k_parameters->image_offset_x0) ||
+            (j2k_parameters->cp_ty0 > j2k_parameters->image_offset_y0)) {
+        fprintf(stderr,
+                "Error: Tile offset dimension is unnappropriate --> TX0(%d)<=IMG_X0(%d) TYO(%d)<=IMG_Y0(%d) \n",
+                j2k_parameters->cp_tx0, j2k_parameters->image_offset_x0, j2k_parameters->cp_ty0,
+                j2k_parameters->image_offset_y0);
+        return 1;
+    }
+
+    for (i = 0; i < j2k_parameters->numpocs; i++) {
+        if (j2k_parameters->POC[i].prg == -1) {
+            fprintf(stderr,
+                    "Unrecognized progression order in option -P (POC n %d) [LRCP, RLCP, RPCL, PCRL, CPRL] !!\n",
+                    i + 1);
+        }
+    }
+
+    if (j2k_parameters->cp_tdx > mj2_parameters.Dim[0] ||
+            j2k_parameters->cp_tdy > mj2_parameters.Dim[1]) {
+        fprintf(stderr,
+                "Error: Tile offset dimension is unnappropriate --> TX0(%d)<=IMG_X0(%d) TYO(%d)<=IMG_Y0(%d) \n",
+                j2k_parameters->cp_tdx, mj2_parameters.Dim[0], j2k_parameters->cp_tdy,
+                mj2_parameters.Dim[1]);
+        return 1;
+    }
+
+    /* to respect profile - 0 */
+    /* ---------------------- */
+
+    x1 = !mj2_parameters.Dim[0] ? (mj2_parameters.w - 1) *
+         j2k_parameters->subsampling_dx
+         + 1 : mj2_parameters.Dim[0] + (mj2_parameters.w - 1) *
+         j2k_parameters->subsampling_dx + 1;
+    y1 = !mj2_parameters.Dim[1] ? (mj2_parameters.h - 1) *
+         j2k_parameters->subsampling_dy
+         + 1 : mj2_parameters.Dim[1] + (mj2_parameters.h - 1) *
+         j2k_parameters->subsampling_dy + 1;
+    mj2_parameters.numcomps = 3; /* YUV files only have 3 components */
+
+    mj2_parameters.prec = prec;
+
+    j2k_parameters->tcp_mct = 0;
+
+    mj2file = fopen(mj2_parameters.outfile, "wb");
+
+    if (!mj2file) {
+        fprintf(stderr, "failed to open %s for writing\n", argv[2]);
+        return 1;
+    }
+
+    /* get a MJ2 decompressor handle */
+    cinfo = mj2_create_compress();
+    movie = (opj_mj2_t*)cinfo->mj2_handle;
+
+    /* catch events using our callbacks and give a local context */
+    opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr);
+
+    /* setup encoder parameters */
+    mj2_setup_encoder(movie, &mj2_parameters);
+
+    movie->tk[0].num_samples =
+        yuv_num_frames(&movie->tk[0], mj2_parameters.infile);
+
+    if (movie->tk[0].num_samples == 0) {
+        return 1;
+    }
+
+    /* One sample per chunk*/
+    movie->tk[0].chunk = (mj2_chunk_t*)
+                         malloc(movie->tk[0].num_samples * sizeof(mj2_chunk_t));
+    movie->tk[0].sample = (mj2_sample_t*)
+                          malloc(movie->tk[0].num_samples * sizeof(mj2_sample_t));
+
+    if (mj2_init_stdmovie(movie)) {
+        fprintf(stderr, "Error with movie initialization");
+        return 1;
+    }
+
+    /* Writing JP, FTYP and MDAT boxes */
+    /* Assuming that the JP and FTYP boxes won't be longer than 300 bytes:*/
+    buf = (unsigned char*)
+          malloc(300 * sizeof(unsigned char));
+
+    cio = opj_cio_open((opj_common_ptr)movie->cinfo, buf, 300);
+
+    mj2_write_jp(cio);
+    mj2_write_ftyp(movie, cio);
+
+    mdat_initpos = cio_tell(cio);
+    cio_skip(cio, 4);
+
+    cio_write(cio, MJ2_MDAT, 4);
+
+    fwrite(buf, cio_tell(cio), 1, mj2file);
+
+    offset = cio_tell(cio);
+    opj_cio_close(cio);
+    free(buf);
+
+    for (i = 0; i < movie->num_stk + movie->num_htk + movie->num_vtk; i++) {
+        if (movie->tk[i].track_type != 0) {
+            fprintf(stderr, "Unable to write sound or hint tracks\n");
+        } else {
+            mj2_tk_t *tk;
+            int buflen = 0;
+
+            tk = &movie->tk[i];
+            tk->num_chunks = tk->num_samples;
+            numframes = tk->num_samples;
+            tk->depth = prec;
+
+            fprintf(stderr, "Video Track number %d\n", i);
+
+            img = mj2_image_create(tk, j2k_parameters);
+
+            buflen = 2 * (tk->w * tk->h * 8);
+            buf = (unsigned char *) malloc(buflen * sizeof(unsigned char));
+
+            for (sampleno = 0; sampleno < numframes; sampleno++) {
+                double init_time = opj_clock();
+                double elapsed_time;
+
+                if (yuvtoimage(tk, img, sampleno, j2k_parameters,
+                               mj2_parameters.infile)) {
+                    fprintf(stderr, "Error with frame number %d in YUV file\n", sampleno);
+                    return 1;
+                }
+
+                /* setup the encoder parameters using the current image and user parameters */
+                opj_setup_encoder(cinfo, j2k_parameters, img);
+
+                cio = opj_cio_open((opj_common_ptr)movie->cinfo, buf, buflen);
+
+                cio_skip(cio, 4);
+                cio_write(cio, JP2_JP2C, 4);    /* JP2C*/
+
+                /* encode the image */
+                bSuccess = opj_encode(cinfo, cio, img, NULL);
+
+                if (!bSuccess) {
+                    opj_cio_close(cio);
+                    fprintf(stderr, "failed to encode image\n");
+                    return 1;
+                }
+
+                len = cio_tell(cio) - 8;
+                cio_seek(cio, 0);
+                cio_write(cio, len + 8, 4);
+                opj_cio_close(cio);
+
+                tk->sample[sampleno].sample_size = len + 8;
+                tk->sample[sampleno].offset = offset;
+                tk->chunk[sampleno].offset = offset;    /* There is one sample per chunk */
+                fwrite(buf, 1, len + 8, mj2file);
+                offset += len + 8;
+
+                elapsed_time = opj_clock() - init_time;
+                fprintf(stderr, "Frame number %d/%d encoded in %.2f mseconds\n",
+                        sampleno + 1, numframes, elapsed_time * 1000);
+                total_time += elapsed_time;
+            }  /* for(sampleno */
+
+            free(buf);
+            opj_image_destroy(img);
+        }
+    }/* for(i */
+
+    fseek(mj2file, mdat_initpos, SEEK_SET);
+
+    buf = (unsigned char*) malloc(4 * sizeof(unsigned char));
+
+    /* Init a cio to write box length variable in a little endian way */
+    cio = opj_cio_open(NULL, buf, 4);
+    cio_write(cio, offset - mdat_initpos, 4);
+    fwrite(buf, 4, 1, mj2file);
+    fseek(mj2file, 0, SEEK_END);
+    free(buf);
+
+    /* Writing MOOV box */
+    buf = (unsigned char*)
+          malloc((TEMP_BUF + numframes * 20) * sizeof(unsigned char));
+    cio = opj_cio_open(movie->cinfo, buf, (TEMP_BUF + numframes * 20));
+    mj2_write_moov(movie, cio);
+    fwrite(buf, cio_tell(cio), 1, mj2file);
+    free(buf);
+
+    fprintf(stdout, "Total encoding time: %.2f s for %d frames (%.1f fps)\n",
+            total_time, numframes, (float)numframes / total_time);
+
+    /* Ending program */
+
+    fclose(mj2file);
+    /* free remaining compression structures */
+    mj2_destroy_compress(movie);
+    free(cinfo);
+
+    if (j2k_parameters->cp_comment) {
+        free(j2k_parameters->cp_comment);
     }
-  }
-    
-  /* Error messages */
-  /* -------------- */
-       if (!mj2_parameters.cod_format || !mj2_parameters.decod_format) {
-    fprintf(stderr,
-      "Usage: %s -i yuv-file -o mj2-file (+ options)\n",argv[0]);
-    return 1;
-  }
-    if(prec < 1 || prec > 16)
-  {
-       fprintf(stderr, "Error: Depth %d must be in the range 8 .. 16\n",prec);
-       return 1;       
-  }
-       if ((j2k_parameters->cp_disto_alloc || j2k_parameters->cp_fixed_alloc || j2k_parameters->cp_fixed_quality)
-               && (!(j2k_parameters->cp_disto_alloc ^ j2k_parameters->cp_fixed_alloc ^ j2k_parameters->cp_fixed_quality))) {
-               fprintf(stderr, "Error: options -r -q and -f cannot be used together !!\n");
-               return 1;
-       }                               /* mod fixed_quality */
-
-       /* if no rate entered, lossless by default */
-       if (j2k_parameters->tcp_numlayers == 0) {
-               j2k_parameters->tcp_rates[0] = 0;       /* MOD antonin : losslessbug */
-               j2k_parameters->tcp_numlayers++;
-               j2k_parameters->cp_disto_alloc = 1;
-       }
-
-       if((j2k_parameters->cp_tx0 > j2k_parameters->image_offset_x0) || (j2k_parameters->cp_ty0 > j2k_parameters->image_offset_y0)) {
-               fprintf(stderr,
-                       "Error: Tile offset dimension is unnappropriate --> TX0(%d)<=IMG_X0(%d) TYO(%d)<=IMG_Y0(%d) \n",
-                       j2k_parameters->cp_tx0, j2k_parameters->image_offset_x0, j2k_parameters->cp_ty0, j2k_parameters->image_offset_y0);
-               return 1;
-       }
-
-       for (i = 0; i < j2k_parameters->numpocs; i++) {
-               if (j2k_parameters->POC[i].prg == -1) {
-                       fprintf(stderr,
-                               "Unrecognized progression order in option -P (POC n %d) [LRCP, RLCP, RPCL, PCRL, CPRL] !!\n",
-                               i + 1);
-               }
-       }
-  
-  if (j2k_parameters->cp_tdx > mj2_parameters.Dim[0] || j2k_parameters->cp_tdy > mj2_parameters.Dim[1]) {
-    fprintf(stderr,
-      "Error: Tile offset dimension is unnappropriate --> TX0(%d)<=IMG_X0(%d) TYO(%d)<=IMG_Y0(%d) \n",
-      j2k_parameters->cp_tdx, mj2_parameters.Dim[0], j2k_parameters->cp_tdy, mj2_parameters.Dim[1]);
-    return 1;
-  }
-    
-  /* to respect profile - 0 */
-  /* ---------------------- */
-  
-  x1 = !mj2_parameters.Dim[0] ? (mj2_parameters.w - 1) * j2k_parameters->subsampling_dx 
-               + 1 : mj2_parameters.Dim[0] + (mj2_parameters.w - 1) * j2k_parameters->subsampling_dx + 1;
-  y1 = !mj2_parameters.Dim[1] ? (mj2_parameters.h - 1) * j2k_parameters->subsampling_dy 
-               + 1 : mj2_parameters.Dim[1] + (mj2_parameters.h - 1) * j2k_parameters->subsampling_dy + 1;   
-       mj2_parameters.numcomps = 3; /* YUV files only have 3 components */ 
-
-       mj2_parameters.prec = prec;
-
-       j2k_parameters->tcp_mct = 0;
-    
-       mj2file = fopen(mj2_parameters.outfile, "wb");
-  
-       if (!mj2file) {
-    fprintf(stderr, "failed to open %s for writing\n", argv[2]);
-    return 1;
-       }
-    
-       /* get a MJ2 decompressor handle */
-       cinfo = mj2_create_compress();
-       movie = (opj_mj2_t*)cinfo->mj2_handle;
-       
-       /* catch events using our callbacks and give a local context */
-       opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr);
-
-       /* setup encoder parameters */
-       mj2_setup_encoder(movie, &mj2_parameters);   
-  
-       movie->tk[0].num_samples = 
-        yuv_num_frames(&movie->tk[0],mj2_parameters.infile);
-
-       if (movie->tk[0].num_samples == 0) {
-               return 1;
-       }
-
-  /* One sample per chunk*/
-       movie->tk[0].chunk = (mj2_chunk_t*) 
-        malloc(movie->tk[0].num_samples * sizeof(mj2_chunk_t));     
-       movie->tk[0].sample = (mj2_sample_t*) 
-        malloc(movie->tk[0].num_samples * sizeof(mj2_sample_t));
-  
-       if (mj2_init_stdmovie(movie)) {
-    fprintf(stderr, "Error with movie initialization");
-    return 1;
-       }    
-  
-/* Writing JP, FTYP and MDAT boxes */
-/* Assuming that the JP and FTYP boxes won't be longer than 300 bytes:*/
-       buf = (unsigned char*) 
-        malloc (300 * sizeof(unsigned char));
-
-       cio = opj_cio_open((opj_common_ptr)movie->cinfo, buf, 300);
-
-       mj2_write_jp(cio);
-       mj2_write_ftyp(movie, cio);
-
-       mdat_initpos = cio_tell(cio);
-       cio_skip(cio, 4);
-
-       cio_write(cio, MJ2_MDAT, 4);    
-
-       fwrite(buf,cio_tell(cio),1,mj2file);
-
-       offset = cio_tell(cio);
-       opj_cio_close(cio);
-       free(buf);
-
-       for(i = 0; i < movie->num_stk + movie->num_htk + movie->num_vtk; i++) 
-   {
-    if(movie->tk[i].track_type != 0) 
-  {
-       fprintf(stderr, "Unable to write sound or hint tracks\n");
-  }
-       else 
-  {
-       mj2_tk_t *tk;
-       int buflen = 0;
-  
-       tk = &movie->tk[i];     
-       tk->num_chunks = tk->num_samples;
-       numframes = tk->num_samples;
-       tk->depth = prec; 
-
-       fprintf(stderr, "Video Track number %d\n", i);
-
-       img = mj2_image_create(tk, j2k_parameters);          
-
-       buflen = 2 * (tk->w * tk->h * 8);
-       buf = (unsigned char *) malloc(buflen*sizeof(unsigned char));   
-
-       for(sampleno = 0; sampleno < numframes; sampleno++) 
- {
-       double init_time = opj_clock();
-       double elapsed_time;
-
-               if(yuvtoimage(tk, img, sampleno, j2k_parameters, 
-                       mj2_parameters.infile))
-          {
-               fprintf(stderr, "Error with frame number %d in YUV file\n", sampleno);
-               return 1;
-          }
-
-/* setup the encoder parameters using the current image and user parameters */
-       opj_setup_encoder(cinfo, j2k_parameters, img);
-
-       cio = opj_cio_open((opj_common_ptr)movie->cinfo, buf, buflen);
-                                                               
-       cio_skip(cio, 4);
-       cio_write(cio, JP2_JP2C, 4);    /* JP2C*/
-
-/* encode the image */
-       bSuccess = opj_encode(cinfo, cio, img, NULL);
-
-       if (!bSuccess) {
-       opj_cio_close(cio);
-       fprintf(stderr, "failed to encode image\n");
-       return 1;
-       }
-
-       len = cio_tell(cio) - 8;
-       cio_seek(cio, 0);
-       cio_write(cio, len+8,4);
-       opj_cio_close(cio);
-
-       tk->sample[sampleno].sample_size = len+8;                               
-       tk->sample[sampleno].offset = offset;
-       tk->chunk[sampleno].offset = offset;    /* There is one sample per chunk */
-       fwrite(buf, 1, len+8, mj2file);                         
-       offset += len+8;                                
-
-       elapsed_time = opj_clock()-init_time;
-       fprintf(stderr, "Frame number %d/%d encoded in %.2f mseconds\n", 
-               sampleno + 1, numframes, elapsed_time*1000);
-       total_time += elapsed_time;
- }     /* for(sampleno */
-
-       free(buf);
-       opj_image_destroy(img);
-  }
-   }/* for(i */
-  
-       fseek(mj2file, mdat_initpos, SEEK_SET);
-       
-       buf = (unsigned char*) malloc(4*sizeof(unsigned char));
-
-/* Init a cio to write box length variable in a little endian way */
-       cio = opj_cio_open(NULL, buf, 4);
-       cio_write(cio, offset - mdat_initpos, 4);
-       fwrite(buf, 4, 1, mj2file);
-       fseek(mj2file,0,SEEK_END);
-       free(buf);
-
-/* Writing MOOV box */
-       buf = (unsigned char*) 
-        malloc ((TEMP_BUF+numframes*20) * sizeof(unsigned char));
-       cio = opj_cio_open(movie->cinfo, buf, (TEMP_BUF+numframes*20));
-       mj2_write_moov(movie, cio);
-       fwrite(buf,cio_tell(cio),1,mj2file);
-       free(buf);
-
-       fprintf(stdout,"Total encoding time: %.2f s for %d frames (%.1f fps)\n",
-        total_time, numframes, (float)numframes/total_time);
-
-  /* Ending program */
-  
-       fclose(mj2file);
-/* free remaining compression structures */
-       mj2_destroy_compress(movie);
-       free(cinfo);
-
-       if(j2k_parameters->cp_comment) free(j2k_parameters->cp_comment);
-       if(j2k_parameters->cp_matrice) free(j2k_parameters->cp_matrice);
-       opj_cio_close(cio);
-
-       return 0;
+    if (j2k_parameters->cp_matrice) {
+        free(j2k_parameters->cp_matrice);
+    }
+    opj_cio_close(cio);
+
+    return 0;
 }
index 086918c77a0fe80743b6e332193ca8152a746182..7b8c303872791f32df6f175e9d4aed6c0965a4d6 100644 (file)
 /**
 sample error callback expecting a FILE* client object
 */
-static void error_callback(const char *msg, void *client_data) {
-       FILE *stream = (FILE*)client_data;
-       fprintf(stream, "[ERROR] %s", msg);
+static void error_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[ERROR] %s", msg);
 }
 /**
 sample warning callback expecting a FILE* client object
 */
-static void warning_callback(const char *msg, void *client_data) {
-       FILE *stream = (FILE*)client_data;
-       fprintf(stream, "[WARNING] %s", msg);
+static void warning_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[WARNING] %s", msg);
 }
 
 /* -------------------------------------------------------------------------- */
 
 
-int main(int argc, char *argv[]) {
-       mj2_dparameters_t mj2_parameters;                       /* decompression parameters */
-       opj_dinfo_t* dinfo; 
-       opj_event_mgr_t event_mgr;              /* event manager */     
-       opj_cio_t *cio = NULL;
-  unsigned int tnum, snum;
-  opj_mj2_t *movie;
-  mj2_tk_t *track;
-  mj2_sample_t *sample;
-  unsigned char* frame_codestream;
-  FILE *file, *outfile;
-  char outfilename[50];
-  opj_image_t *img = NULL;
-       unsigned int max_codstrm_size = 0;
-       double total_time = 0;
-       unsigned int numframes = 0;
-                       
-  if (argc != 3) {
-    printf("Usage: %s inputfile.mj2 outputfile.yuv\n",argv[0]); 
-    return 1;
-  }
-  
-  file = fopen(argv[1], "rb");
-  
-  if (!file) {
-    fprintf(stderr, "failed to open %s for reading\n", argv[1]);
-    return 1;
-  }
-       
-  /* Checking output file */
-  outfile = fopen(argv[2], "w");
-  if (!file) {
-    fprintf(stderr, "failed to open %s for writing\n", argv[2]);
-    return 1;
-  }
-  fclose(outfile);
-       
-       /*
-       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 = NULL;
-       
-       /* get a MJ2 decompressor handle */
-       dinfo = mj2_create_decompress();
-       movie = (opj_mj2_t*)dinfo->mj2_handle;
-       
-       /* catch events using our callbacks and give a local context */
-       opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);           
-
-       memset(&mj2_parameters, 0, sizeof(mj2_dparameters_t));
-       /* set J2K decoding parameters to default values */
-       opj_set_default_decoder_parameters(&mj2_parameters.j2k_parameters);
-       
-       /* setup the decoder decoding parameters using user parameters */
-       mj2_setup_decoder(movie, &mj2_parameters);
-                       
-  if (mj2_read_struct(file, movie)) /* Creating the movie structure */
-    return 1;  
-       
-  /* Decode first video track */
-       for (tnum=0; tnum < (unsigned int)(movie->num_htk + movie->num_stk + movie->num_vtk); tnum++) {
-               if (movie->tk[tnum].track_type == 0) 
-                       break;
-       }
-       
-       if (movie->tk[tnum].track_type != 0) {
-               printf("Error. Movie does not contain any video track\n");
-               return 1;
-       }
-       
-  track = &movie->tk[tnum];
-       
-  /* Output info on first video tracl */
-  fprintf(stdout,"The first video track contains %d frames.\nWidth: %d, Height: %d \n\n",
-    track->num_samples, track->w, track->h);
-       
-       max_codstrm_size = track->sample[0].sample_size-8;
-       frame_codestream = (unsigned char*) malloc(max_codstrm_size * sizeof(unsigned char)); 
-
-       numframes = track->num_samples;
-       
-  for (snum=0; snum < numframes; snum++)
-  {
-               double init_time = opj_clock();
-               double elapsed_time;
-
-    sample = &track->sample[snum];
-               if (sample->sample_size-8 > max_codstrm_size) {
-                       max_codstrm_size =  sample->sample_size-8;
-                       if ((frame_codestream = (unsigned char*)
-                               realloc(frame_codestream, max_codstrm_size)) == NULL) {
-                               printf("Error reallocation memory\n");
-                               return 1;
-                       };              
-               }
-    fseek(file,sample->offset+8,SEEK_SET);
-    fread(frame_codestream, sample->sample_size-8, 1, file);  /* Assuming that jp and ftyp markers size do */
-               
-               /* open a byte stream */
-               cio = opj_cio_open((opj_common_ptr)dinfo, frame_codestream, sample->sample_size-8);
-               
-               img = opj_decode(dinfo, cio); /* Decode J2K to image */
+int main(int argc, char *argv[])
+{
+    mj2_dparameters_t mj2_parameters;           /* decompression parameters */
+    opj_dinfo_t* dinfo;
+    opj_event_mgr_t event_mgr;      /* event manager */
+    opj_cio_t *cio = NULL;
+    unsigned int tnum, snum;
+    opj_mj2_t *movie;
+    mj2_tk_t *track;
+    mj2_sample_t *sample;
+    unsigned char* frame_codestream;
+    FILE *file, *outfile;
+    char outfilename[50];
+    opj_image_t *img = NULL;
+    unsigned int max_codstrm_size = 0;
+    double total_time = 0;
+    unsigned int numframes = 0;
+
+    if (argc != 3) {
+        printf("Usage: %s inputfile.mj2 outputfile.yuv\n", argv[0]);
+        return 1;
+    }
+
+    file = fopen(argv[1], "rb");
+
+    if (!file) {
+        fprintf(stderr, "failed to open %s for reading\n", argv[1]);
+        return 1;
+    }
+
+    /* Checking output file */
+    outfile = fopen(argv[2], "w");
+    if (!file) {
+        fprintf(stderr, "failed to open %s for writing\n", argv[2]);
+        return 1;
+    }
+    fclose(outfile);
+
+    /*
+    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 = NULL;
+
+    /* get a MJ2 decompressor handle */
+    dinfo = mj2_create_decompress();
+    movie = (opj_mj2_t*)dinfo->mj2_handle;
+
+    /* catch events using our callbacks and give a local context */
+    opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
+
+    memset(&mj2_parameters, 0, sizeof(mj2_dparameters_t));
+    /* set J2K decoding parameters to default values */
+    opj_set_default_decoder_parameters(&mj2_parameters.j2k_parameters);
+
+    /* setup the decoder decoding parameters using user parameters */
+    mj2_setup_decoder(movie, &mj2_parameters);
+
+    if (mj2_read_struct(file, movie)) { /* Creating the movie structure */
+        return 1;
+    }
+
+    /* Decode first video track */
+    for (tnum = 0;
+            tnum < (unsigned int)(movie->num_htk + movie->num_stk + movie->num_vtk);
+            tnum++) {
+        if (movie->tk[tnum].track_type == 0) {
+            break;
+        }
+    }
+
+    if (movie->tk[tnum].track_type != 0) {
+        printf("Error. Movie does not contain any video track\n");
+        return 1;
+    }
+
+    track = &movie->tk[tnum];
+
+    /* Output info on first video tracl */
+    fprintf(stdout,
+            "The first video track contains %d frames.\nWidth: %d, Height: %d \n\n",
+            track->num_samples, track->w, track->h);
+
+    max_codstrm_size = track->sample[0].sample_size - 8;
+    frame_codestream = (unsigned char*) malloc(max_codstrm_size * sizeof(
+                           unsigned char));
+
+    numframes = track->num_samples;
+
+    for (snum = 0; snum < numframes; snum++) {
+        double init_time = opj_clock();
+        double elapsed_time;
+
+        sample = &track->sample[snum];
+        if (sample->sample_size - 8 > max_codstrm_size) {
+            max_codstrm_size =  sample->sample_size - 8;
+            if ((frame_codestream = (unsigned char*)
+                                    realloc(frame_codestream, max_codstrm_size)) == NULL) {
+                printf("Error reallocation memory\n");
+                return 1;
+            };
+        }
+        fseek(file, sample->offset + 8, SEEK_SET);
+        fread(frame_codestream, sample->sample_size - 8, 1,
+              file); /* Assuming that jp and ftyp markers size do */
+
+        /* open a byte stream */
+        cio = opj_cio_open((opj_common_ptr)dinfo, frame_codestream,
+                           sample->sample_size - 8);
+
+        img = opj_decode(dinfo, cio); /* Decode J2K to image */
 
 #ifdef WANT_SYCC_TO_RGB
-       if(img->color_space == CLRSPC_SYCC)
-  {
-       color_sycc_to_rgb(img);
-  }
+        if (img->color_space == CLRSPC_SYCC) {
+            color_sycc_to_rgb(img);
+        }
 #endif
 
-       if(img->icc_profile_buf)
-  {
+        if (img->icc_profile_buf) {
 #if defined(OPJ_HAVE_LIBLCMS1) || defined(OPJ_HAVE_LIBLCMS2)
-       color_apply_icc_profile(img);
+            color_apply_icc_profile(img);
 #endif
 
-       free(img->icc_profile_buf);
-       img->icc_profile_buf = NULL; img->icc_profile_len = 0;
-  }
+            free(img->icc_profile_buf);
+            img->icc_profile_buf = NULL;
+            img->icc_profile_len = 0;
+        }
+
+        if (((img->numcomps == 3) && (img->comps[0].dx == img->comps[1].dx / 2)
+                && (img->comps[0].dx == img->comps[2].dx / 2) && (img->comps[0].dx == 1))
+                || (img->numcomps == 1)) {
+
+            if (!imagetoyuv(img, argv[2])) {  /* Convert image to YUV */
+                return 1;
+            }
+        } else if ((img->numcomps == 3) &&
+                   (img->comps[0].dx == 1) && (img->comps[1].dx == 1) &&
+                   (img->comps[2].dx == 1)) { /* If YUV 4:4:4 input --> to bmp */
+            fprintf(stdout,
+                    "The frames will be output in a bmp format (output_1.bmp, ...)\n");
+            sprintf(outfilename, "output_%d.bmp", snum);
+            if (imagetobmp(img, outfilename)) { /* Convert image to BMP */
+                return 1;
+            }
+
+        } else {
+            fprintf(stdout,
+                    "Image component dimensions are unknown. Unable to output image\n");
+            fprintf(stdout,
+                    "The frames will be output in a j2k file (output_1.j2k, ...)\n");
+
+            sprintf(outfilename, "output_%d.j2k", snum);
+            outfile = fopen(outfilename, "wb");
+            if (!outfile) {
+                fprintf(stderr, "failed to open %s for writing\n", outfilename);
+                return 1;
+            }
+            fwrite(frame_codestream, sample->sample_size - 8, 1, outfile);
+            fclose(outfile);
+        }
+        /* close the byte stream */
+        opj_cio_close(cio);
+        /* free image data structure */
+        opj_image_destroy(img);
+        elapsed_time = opj_clock() - init_time;
+        fprintf(stderr, "Frame number %d/%d decoded in %.2f mseconds\n", snum + 1,
+                numframes, elapsed_time * 1000);
+        total_time += elapsed_time;
 
-    if (((img->numcomps == 3) && (img->comps[0].dx == img->comps[1].dx / 2) 
-      && (img->comps[0].dx == img->comps[2].dx / 2 ) && (img->comps[0].dx == 1)) 
-      || (img->numcomps == 1)) {
-      
-      if (!imagetoyuv(img, argv[2]))   /* Convert image to YUV */
-                               return 1;
-    }
-    else if ((img->numcomps == 3) && 
-      (img->comps[0].dx == 1) && (img->comps[1].dx == 1)&&
-      (img->comps[2].dx == 1))/* If YUV 4:4:4 input --> to bmp */
-    {
-      fprintf(stdout,"The frames will be output in a bmp format (output_1.bmp, ...)\n");
-      sprintf(outfilename,"output_%d.bmp",snum);
-      if (imagetobmp(img, outfilename))        /* Convert image to BMP */
-                               return 1;
-      
     }
-    else {
-      fprintf(stdout,"Image component dimensions are unknown. Unable to output image\n");
-      fprintf(stdout,"The frames will be output in a j2k file (output_1.j2k, ...)\n");
-                       
-      sprintf(outfilename,"output_%d.j2k",snum);
-      outfile = fopen(outfilename, "wb");
-      if (!outfile) {
-                               fprintf(stderr, "failed to open %s for writing\n",outfilename);
-                               return 1;
-      }
-      fwrite(frame_codestream,sample->sample_size-8,1,outfile);
-      fclose(outfile);
+
+    free(frame_codestream);
+    fclose(file);
+
+    /* free remaining structures */
+    if (dinfo) {
+        mj2_destroy_decompress((opj_mj2_t*)dinfo->mj2_handle);
     }
-               /* close the byte stream */
-               opj_cio_close(cio);     
-               /* free image data structure */
-               opj_image_destroy(img);
-               elapsed_time = opj_clock()-init_time;
-               fprintf(stderr, "Frame number %d/%d decoded in %.2f mseconds\n", snum + 1, numframes, elapsed_time*1000);
-               total_time += elapsed_time;
-
-  }
-       
-       free(frame_codestream); 
-  fclose(file);        
-
-       /* free remaining structures */
-       if(dinfo) {
-               mj2_destroy_decompress((opj_mj2_t*)dinfo->mj2_handle);
-       }
-       free(dinfo);
-       
-       fprintf(stdout, "%d frame(s) correctly decompressed\n", snum);
-       fprintf(stdout,"Total decoding time: %.2f seconds (%.1f fps)\n", total_time, (float)numframes/total_time);
-               
-  return 0;
+    free(dinfo);
+
+    fprintf(stdout, "%d frame(s) correctly decompressed\n", snum);
+    fprintf(stdout, "Total decoding time: %.2f seconds (%.1f fps)\n", total_time,
+            (float)numframes / total_time);
+
+    return 0;
 }
index 25e6b79b344e20bfa238de54507a778f5606902d..9b4f1b0ad9607986a001681cf059dd318728db38 100644 (file)
@@ -1,12 +1,12 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
  * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
  * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
 /**
 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);
+void error_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[ERROR] %s", msg);
 }
 /**
 sample warning callback expecting a FILE* client object
 */
-void warning_callback(const char *msg, void *client_data) {
-       FILE *stream = (FILE*)client_data;
-       fprintf(stream, "[WARNING] %s", msg);
+void warning_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[WARNING] %s", msg);
 }
 /**
 sample debug callback expecting a FILE* client object
 */
-void info_callback(const char *msg, void *client_data) {
-       FILE *stream = (FILE*)client_data;
-       fprintf(stream, "[INFO] %s", msg);
+void info_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[INFO] %s", msg);
 }
 
 /* -------------------------------------------------------------------------- */
 
 
-int main(int argc, char *argv[]) {
-       opj_dinfo_t* dinfo; 
-       opj_event_mgr_t event_mgr;              /* event manager */
-  int tnum;
-  unsigned int snum;
-  opj_mj2_t *movie;
-  mj2_tk_t *track;
-  mj2_sample_t *sample;
-  unsigned char* frame_codestream;
-  FILE *file, *outfile;
-  char outfilename[50];
-       mj2_dparameters_t parameters;
-
-  if (argc != 3) {
-    printf("Usage: %s mj2filename output_location\n",argv[0]); 
-    printf("Example: %s foreman.mj2 output/foreman\n",argv[0]);
-    return 1;
-  }
-  
-  file = fopen(argv[1], "rb");
-  
-  if (!file) {
-    fprintf(stderr, "failed to open %s for reading\n", argv[1]);
-    return 1;
-  }
-
-       /*
-       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;
-
-       /* get a MJ2 decompressor handle */
-       dinfo = mj2_create_decompress();
-
-       /* catch events using our callbacks and give a local context */
-       opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);           
-
-       /* setup the decoder decoding parameters using user parameters */
-       memset(&parameters, 0, sizeof(mj2_dparameters_t));
-       movie = (opj_mj2_t*) dinfo->mj2_handle;
-       mj2_setup_decoder(movie, &parameters);
-
-  if (mj2_read_struct(file, movie)) /* Creating the movie structure*/
-    return 1;
-
-  /* Decode first video track */
-  tnum = 0;
-  while (movie->tk[tnum].track_type != 0)
-    tnum ++;
-
-  track = &movie->tk[tnum];
-
-  fprintf(stdout,"Extracting %d frames from file...\n",track->num_samples);
-
-  for (snum=0; snum < track->num_samples; snum++)
-  {
-    sample = &track->sample[snum];
-    frame_codestream = (unsigned char*) malloc (sample->sample_size-8); /* Skipping JP2C marker*/
-    fseek(file,sample->offset+8,SEEK_SET);
-    fread(frame_codestream,sample->sample_size-8,1, file);  /* Assuming that jp and ftyp markers size do*/
-
-    sprintf(outfilename,"%s_%05d.j2k",argv[2],snum);
-    outfile = fopen(outfilename, "wb");
-    if (!outfile) {
-      fprintf(stderr, "failed to open %s for writing\n",outfilename);
-      return 1;
+int main(int argc, char *argv[])
+{
+    opj_dinfo_t* dinfo;
+    opj_event_mgr_t event_mgr;      /* event manager */
+    int tnum;
+    unsigned int snum;
+    opj_mj2_t *movie;
+    mj2_tk_t *track;
+    mj2_sample_t *sample;
+    unsigned char* frame_codestream;
+    FILE *file, *outfile;
+    char outfilename[50];
+    mj2_dparameters_t parameters;
+
+    if (argc != 3) {
+        printf("Usage: %s mj2filename output_location\n", argv[0]);
+        printf("Example: %s foreman.mj2 output/foreman\n", argv[0]);
+        return 1;
     }
-    fwrite(frame_codestream,sample->sample_size-8,1,outfile);
-    fclose(outfile);
-    free(frame_codestream);
+
+    file = fopen(argv[1], "rb");
+
+    if (!file) {
+        fprintf(stderr, "failed to open %s for reading\n", argv[1]);
+        return 1;
+    }
+
+    /*
+    configure the event callbacks (not required)
+    setting of each callback is 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;
+
+    /* get a MJ2 decompressor handle */
+    dinfo = mj2_create_decompress();
+
+    /* catch events using our callbacks and give a local context */
+    opj_set_event_mgr((opj_common_ptr)dinfo, &event_mgr, stderr);
+
+    /* setup the decoder decoding parameters using user parameters */
+    memset(&parameters, 0, sizeof(mj2_dparameters_t));
+    movie = (opj_mj2_t*) dinfo->mj2_handle;
+    mj2_setup_decoder(movie, &parameters);
+
+    if (mj2_read_struct(file, movie)) { /* Creating the movie structure*/
+        return 1;
     }
-  fclose(file);
-  fprintf(stdout, "%d frames correctly extracted\n", snum);
-       
-       /* free remaining structures */
-       if(dinfo) {
-               mj2_destroy_decompress((opj_mj2_t*)dinfo->mj2_handle);
-       }
-       
-  return 0;
+
+    /* Decode first video track */
+    tnum = 0;
+    while (movie->tk[tnum].track_type != 0) {
+        tnum ++;
+    }
+
+    track = &movie->tk[tnum];
+
+    fprintf(stdout, "Extracting %d frames from file...\n", track->num_samples);
+
+    for (snum = 0; snum < track->num_samples; snum++) {
+        sample = &track->sample[snum];
+        frame_codestream = (unsigned char*) malloc(sample->sample_size -
+                           8); /* Skipping JP2C marker*/
+        fseek(file, sample->offset + 8, SEEK_SET);
+        fread(frame_codestream, sample->sample_size - 8, 1,
+              file); /* Assuming that jp and ftyp markers size do*/
+
+        sprintf(outfilename, "%s_%05d.j2k", argv[2], snum);
+        outfile = fopen(outfilename, "wb");
+        if (!outfile) {
+            fprintf(stderr, "failed to open %s for writing\n", outfilename);
+            return 1;
+        }
+        fwrite(frame_codestream, sample->sample_size - 8, 1, outfile);
+        fclose(outfile);
+        free(frame_codestream);
+    }
+    fclose(file);
+    fprintf(stdout, "%d frames correctly extracted\n", snum);
+
+    /* free remaining structures */
+    if (dinfo) {
+        mj2_destroy_decompress((opj_mj2_t*)dinfo->mj2_handle);
+    }
+
+    return 0;
 }
index 59fb871dc9926859c8825d93f0b763ccc1e57ab3..8d95116ddb10cfbdbff9e6e9d62e9fc01bdc7d57 100644 (file)
@@ -1,12 +1,12 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
  * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
  * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
 #include "jp2.h"
 #include "mj2.h"
 
-static int int_ceildiv(int a, int b) {
-       return (a + b - 1) / b;
+static int int_ceildiv(int a, int b)
+{
+    return (a + b - 1) / b;
 }
 
 /**
 Size of memory first allocated for MOOV box
 */
-#define TEMP_BUF 10000 
+#define TEMP_BUF 10000
 
 #define J2K_CODESTREAM_MAGIC "\xff\x4f\xff\x51"
 
@@ -56,153 +57,149 @@ Size of memory first allocated for MOOV box
 
 static int test_image(const char *fname, mj2_cparameters_t *cp)
 {
-       FILE *reader;
-       opj_image_t *image;
-       unsigned char *src;
-       opj_dinfo_t *dinfo;
-       opj_cio_t *cio;
-       opj_dparameters_t dparameters;
-       int success;
-       long src_len;
-
-       success = 0;
-
-       if((reader = fopen(fname, "rb")) == NULL) return success;
-
-       fseek(reader, 0, SEEK_END);
-       src_len = ftell(reader);
-       fseek(reader, 0, SEEK_SET);
-       src = (unsigned char*) malloc(src_len);
-       fread(src, 1, src_len, reader);
-       fclose(reader);
-
-       if(memcmp(src, J2K_CODESTREAM_MAGIC, 4) != 0)
-   {
-       free(src); return success;
-   }
-       memset(&dparameters, 0, sizeof(opj_dparameters_t));
-
-       opj_set_default_decoder_parameters(&dparameters);
-
-       dinfo = opj_create_decompress(CODEC_J2K);
-
-       opj_setup_decoder(dinfo, &dparameters);
-
-       cio = opj_cio_open((opj_common_ptr)dinfo, src, src_len);
-
-       image = opj_decode(dinfo, cio);
-
-       free(src); cio->buffer = NULL;
-       opj_cio_close(cio);
-
-       if(image == NULL) goto fin;
-
-       cp->numcomps = image->numcomps;
-       cp->w = image->comps[0].w;
-       cp->h = image->comps[0].h;
-       cp->prec = image->comps[0].prec;
-
-       if(image->numcomps > 2 )
-   {
-       if((image->comps[0].dx == 1)
-       && (image->comps[1].dx == 2)
-       && (image->comps[2].dx == 2)
-       && (image->comps[0].dy == 1)
-       && (image->comps[1].dy == 2)
-       && (image->comps[2].dy == 2))/* horizontal and vertical*/
-  {
-/*   Y420*/
-       cp->enumcs = ENUMCS_SYCC;
-       cp->CbCr_subsampling_dx = 2;
-       cp->CbCr_subsampling_dy = 2;
-  }
-       else
-       if((image->comps[0].dx == 1)
-       && (image->comps[1].dx == 2)
-       && (image->comps[2].dx == 2)
-       && (image->comps[0].dy == 1)
-       && (image->comps[1].dy == 1)
-       && (image->comps[2].dy == 1))/* horizontal only*/
-  {
-/*   Y422*/
-       cp->enumcs = ENUMCS_SYCC;
-       cp->CbCr_subsampling_dx = 2;
-       cp->CbCr_subsampling_dy = 1;
-  }
-       else
-       if((image->comps[0].dx == 1)
-       && (image->comps[1].dx == 1)
-       && (image->comps[2].dx == 1)
-       && (image->comps[0].dy == 1)
-       && (image->comps[1].dy == 1)
-       && (image->comps[2].dy == 1))
-  {
-/*   Y444 or RGB */
-
-       if(image->color_space ==  CLRSPC_SRGB)
- {
-       cp->enumcs = ENUMCS_SRGB;
-
-/*    cp->CbCr_subsampling_dx = 0; */
-/*    cp->CbCr_subsampling_dy = 0; */
- }
-       else
- {
-       cp->enumcs = ENUMCS_SYCC;
-
-       cp->CbCr_subsampling_dx = 1;
-       cp->CbCr_subsampling_dy = 1;
- }
-  }
-       else
-  {
-       goto fin;
-  }
-   }
-       else
-   {
-       cp->enumcs = ENUMCS_GRAY;
-/*  cp->CbCr_subsampling_dx = 0; */
-/*  cp->CbCr_subsampling_dy = 0; */
-   }
-       if(image->icc_profile_buf)
-   {
-       cp->meth = 2;
-       free(image->icc_profile_buf); image->icc_profile_buf = NULL;
-   }
-       else cp->meth = 1;
-
-       success = 1;
+    FILE *reader;
+    opj_image_t *image;
+    unsigned char *src;
+    opj_dinfo_t *dinfo;
+    opj_cio_t *cio;
+    opj_dparameters_t dparameters;
+    int success;
+    long src_len;
+
+    success = 0;
+
+    if ((reader = fopen(fname, "rb")) == NULL) {
+        return success;
+    }
+
+    fseek(reader, 0, SEEK_END);
+    src_len = ftell(reader);
+    fseek(reader, 0, SEEK_SET);
+    src = (unsigned char*) malloc(src_len);
+    fread(src, 1, src_len, reader);
+    fclose(reader);
+
+    if (memcmp(src, J2K_CODESTREAM_MAGIC, 4) != 0) {
+        free(src);
+        return success;
+    }
+    memset(&dparameters, 0, sizeof(opj_dparameters_t));
+
+    opj_set_default_decoder_parameters(&dparameters);
+
+    dinfo = opj_create_decompress(CODEC_J2K);
+
+    opj_setup_decoder(dinfo, &dparameters);
+
+    cio = opj_cio_open((opj_common_ptr)dinfo, src, src_len);
+
+    image = opj_decode(dinfo, cio);
+
+    free(src);
+    cio->buffer = NULL;
+    opj_cio_close(cio);
+
+    if (image == NULL) {
+        goto fin;
+    }
+
+    cp->numcomps = image->numcomps;
+    cp->w = image->comps[0].w;
+    cp->h = image->comps[0].h;
+    cp->prec = image->comps[0].prec;
+
+    if (image->numcomps > 2) {
+        if ((image->comps[0].dx == 1)
+                && (image->comps[1].dx == 2)
+                && (image->comps[2].dx == 2)
+                && (image->comps[0].dy == 1)
+                && (image->comps[1].dy == 2)
+                && (image->comps[2].dy == 2)) { /* horizontal and vertical*/
+            /*   Y420*/
+            cp->enumcs = ENUMCS_SYCC;
+            cp->CbCr_subsampling_dx = 2;
+            cp->CbCr_subsampling_dy = 2;
+        } else if ((image->comps[0].dx == 1)
+                   && (image->comps[1].dx == 2)
+                   && (image->comps[2].dx == 2)
+                   && (image->comps[0].dy == 1)
+                   && (image->comps[1].dy == 1)
+                   && (image->comps[2].dy == 1)) { /* horizontal only*/
+            /*   Y422*/
+            cp->enumcs = ENUMCS_SYCC;
+            cp->CbCr_subsampling_dx = 2;
+            cp->CbCr_subsampling_dy = 1;
+        } else if ((image->comps[0].dx == 1)
+                   && (image->comps[1].dx == 1)
+                   && (image->comps[2].dx == 1)
+                   && (image->comps[0].dy == 1)
+                   && (image->comps[1].dy == 1)
+                   && (image->comps[2].dy == 1)) {
+            /*   Y444 or RGB */
+
+            if (image->color_space ==  CLRSPC_SRGB) {
+                cp->enumcs = ENUMCS_SRGB;
+
+                /*    cp->CbCr_subsampling_dx = 0; */
+                /*    cp->CbCr_subsampling_dy = 0; */
+            } else {
+                cp->enumcs = ENUMCS_SYCC;
+
+                cp->CbCr_subsampling_dx = 1;
+                cp->CbCr_subsampling_dy = 1;
+            }
+        } else {
+            goto fin;
+        }
+    } else {
+        cp->enumcs = ENUMCS_GRAY;
+        /*  cp->CbCr_subsampling_dx = 0; */
+        /*  cp->CbCr_subsampling_dy = 0; */
+    }
+    if (image->icc_profile_buf) {
+        cp->meth = 2;
+        free(image->icc_profile_buf);
+        image->icc_profile_buf = NULL;
+    } else {
+        cp->meth = 1;
+    }
+
+    success = 1;
 fin:
-       if(dinfo)
-        opj_destroy_decompress(dinfo);
+    if (dinfo) {
+        opj_destroy_decompress(dinfo);
+    }
 
-       if(image)
-        opj_image_destroy(image);
+    if (image) {
+        opj_image_destroy(image);
+    }
 
-       return success;
+    return success;
 }
 
 /**
 sample error callback expecting a FILE* client object
 */
-static void error_callback(const char *msg, void *client_data) {
-       FILE *stream = (FILE*)client_data;
-       fprintf(stream, "[ERROR] %s", msg);
+static void error_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[ERROR] %s", msg);
 }
 /**
 sample warning callback expecting a FILE* client object
 */
-static void warning_callback(const char *msg, void *client_data) {
-       FILE *stream = (FILE*)client_data;
-       fprintf(stream, "[WARNING] %s", msg);
+static void warning_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[WARNING] %s", msg);
 }
 /**
 sample debug callback expecting a FILE* client object
 */
-static void info_callback(const char *msg, void *client_data) {
-       FILE *stream = (FILE*)client_data;
-       fprintf(stream, "[INFO] %s", msg);
+static void info_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[INFO] %s", msg);
 }
 
 /* -------------------------------------------------------------------------- */
@@ -211,316 +208,330 @@ static void info_callback(const char *msg, void *client_data) {
 
 static void read_siz_marker(FILE *file, opj_image_t *image)
 {
-  int len,i;
-  char buf, buf2[2];
-  unsigned char *siz_buffer;
-       opj_cio_t *cio;
-  
-  fseek(file, 0, SEEK_SET);
-  do {
-    fread(&buf,1,1, file);
-    if (buf==(char)0xff)
-      fread(&buf,1,1, file);
-  }
-  while (!(buf==(char)0x51));
-  
-  fread(buf2,2,1,file);                /* Lsiz                */
-  len = ((buf2[0])<<8) + buf2[1];
-  
-  siz_buffer = (unsigned char*) malloc(len * sizeof(unsigned char));
-  fread(siz_buffer,len, 1, file);
-       cio = opj_cio_open(NULL, siz_buffer, len);
-  
-  cio_read(cio, 2);                    /* Rsiz (capabilities) */
-  image->x1 = cio_read(cio, 4);        /* Xsiz                */
-  image->y1 = cio_read(cio, 4);        /* Ysiz                */
-  image->x0 = cio_read(cio, 4);        /* X0siz               */
-  image->y0 = cio_read(cio, 4);        /* Y0siz               */
-  cio_skip(cio, 16);                   /* XTsiz, YTsiz, XT0siz, YT0siz        */
-  
-  image->numcomps = cio_read(cio,2);   /* Csiz                */
-  image->comps =
-    (opj_image_comp_t *) malloc(image->numcomps * sizeof(opj_image_comp_t));
-       
-  for (i = 0; i < image->numcomps; i++) {
-    int tmp;
-    tmp = cio_read(cio,1);             /* Ssiz_i          */
-    image->comps[i].prec = (tmp & 0x7f) + 1;
-    image->comps[i].sgnd = tmp >> 7;
-    image->comps[i].dx = cio_read(cio,1);      /* XRsiz_i         */
-    image->comps[i].dy = cio_read(cio,1);      /* YRsiz_i         */
-    image->comps[i].resno_decoded = 0; /* number of resolution decoded */
-    image->comps[i].factor = 0;        /* reducing factor by component */
-  }
-  fseek(file, 0, SEEK_SET);
-       opj_cio_close(cio);
-  free(siz_buffer);
+    int len, i;
+    char buf, buf2[2];
+    unsigned char *siz_buffer;
+    opj_cio_t *cio;
+
+    fseek(file, 0, SEEK_SET);
+    do {
+        fread(&buf, 1, 1, file);
+        if (buf == (char)0xff) {
+            fread(&buf, 1, 1, file);
+        }
+    } while (!(buf == (char)0x51));
+
+    fread(buf2, 2, 1, file);  /* Lsiz                */
+    len = ((buf2[0]) << 8) + buf2[1];
+
+    siz_buffer = (unsigned char*) malloc(len * sizeof(unsigned char));
+    fread(siz_buffer, len, 1, file);
+    cio = opj_cio_open(NULL, siz_buffer, len);
+
+    cio_read(cio, 2);         /* Rsiz (capabilities) */
+    image->x1 = cio_read(cio, 4); /* Xsiz                */
+    image->y1 = cio_read(cio, 4); /* Ysiz                */
+    image->x0 = cio_read(cio, 4); /* X0siz               */
+    image->y0 = cio_read(cio, 4); /* Y0siz               */
+    cio_skip(cio, 16);            /* XTsiz, YTsiz, XT0siz, YT0siz        */
+
+    image->numcomps = cio_read(cio, 2);   /* Csiz                */
+    image->comps =
+        (opj_image_comp_t *) malloc(image->numcomps * sizeof(opj_image_comp_t));
+
+    for (i = 0; i < image->numcomps; i++) {
+        int tmp;
+        tmp = cio_read(cio, 1);     /* Ssiz_i          */
+        image->comps[i].prec = (tmp & 0x7f) + 1;
+        image->comps[i].sgnd = tmp >> 7;
+        image->comps[i].dx = cio_read(cio, 1);  /* XRsiz_i         */
+        image->comps[i].dy = cio_read(cio, 1);  /* YRsiz_i         */
+        image->comps[i].resno_decoded = 0;  /* number of resolution decoded */
+        image->comps[i].factor = 0; /* reducing factor by component */
+    }
+    fseek(file, 0, SEEK_SET);
+    opj_cio_close(cio);
+    free(siz_buffer);
 }
 
-static void setparams(opj_mj2_t *movie, opj_image_t *image) {
-  int i, depth_0, depth, sign;
-  
-  movie->tk[0].w = int_ceildiv(image->x1 - image->x0, image->comps[0].dx);
-  movie->tk[0].h = int_ceildiv(image->y1 - image->y0, image->comps[0].dy);
-  mj2_init_stdmovie(movie);
-  
-  movie->tk[0].depth = image->comps[0].prec;
-       
-  if (image->numcomps==3) {
-    if ((image->comps[0].dx == 1) 
-       && (image->comps[1].dx == 1) 
-       && (image->comps[2].dx == 1)) 
-      movie->tk[0].CbCr_subsampling_dx = 1;
-    else 
-       if ((image->comps[0].dx == 1) 
-       && (image->comps[1].dx == 2) 
-       && (image->comps[2].dx == 2))
-      movie->tk[0].CbCr_subsampling_dx = 2;
-    else
-      fprintf(stderr,"Image component sizes are incoherent\n");
-    
-    if ((image->comps[0].dy == 1) 
-       && (image->comps[1].dy == 1) 
-       && (image->comps[2].dy == 1)) 
-      movie->tk[0].CbCr_subsampling_dy = 1;
-    else 
-       if ((image->comps[0].dy == 1) 
-       && (image->comps[1].dy == 2) 
-       && (image->comps[2].dy == 2))
-      movie->tk[0].CbCr_subsampling_dy = 2;
-    else
-      fprintf(stderr,"Image component sizes are incoherent\n");
-  }
-  
-  movie->tk[0].sample_rate = 25;
-  
-  movie->tk[0].jp2_struct.numcomps = image->numcomps;  /* NC */
-       
-       /* Init Standard jp2 structure */
-       
-       movie->tk[0].jp2_struct.comps =
-    (opj_jp2_comps_t *) malloc(movie->tk[0].jp2_struct.numcomps * sizeof(opj_jp2_comps_t));
-  movie->tk[0].jp2_struct.precedence = 0;   /* PRECEDENCE*/
-  movie->tk[0].jp2_struct.approx = 0;   /* APPROX*/
-  movie->tk[0].jp2_struct.brand = JP2_JP2;     /* BR         */
-  movie->tk[0].jp2_struct.minversion = 0;      /* MinV       */
-  movie->tk[0].jp2_struct.numcl = 1;
-  movie->tk[0].jp2_struct.cl = (unsigned int *) malloc(movie->tk[0].jp2_struct.numcl * sizeof(int));
-  movie->tk[0].jp2_struct.cl[0] = JP2_JP2;     /* CL0 : JP2  */
-  movie->tk[0].jp2_struct.C = 7;      /* C : Always 7*/
-  movie->tk[0].jp2_struct.UnkC = 0;      /* UnkC, colorspace specified in colr box*/
-  movie->tk[0].jp2_struct.IPR = 0;      /* IPR, no intellectual property*/
-  movie->tk[0].jp2_struct.w = int_ceildiv(image->x1 - image->x0, image->comps[0].dx);
-  movie->tk[0].jp2_struct.h = int_ceildiv(image->y1 - image->y0, image->comps[0].dy);
-  
-  depth_0 = image->comps[0].prec - 1;
-  sign = image->comps[0].sgnd;
-  movie->tk[0].jp2_struct.bpc = depth_0 + (sign << 7);
-  
-  for (i = 1; i < image->numcomps; i++) {
-    depth = image->comps[i].prec - 1;
-    sign = image->comps[i].sgnd;
-    if (depth_0 != depth)
-      movie->tk[0].jp2_struct.bpc = 255;
-  }
-  
-  for (i = 0; i < image->numcomps; i++)
-    movie->tk[0].jp2_struct.comps[i].bpcc =
-    image->comps[i].prec - 1 + (image->comps[i].sgnd << 7);
-  
-  if ((image->numcomps == 1 || image->numcomps == 3)
-    && (movie->tk[0].jp2_struct.bpc != 255))
-    movie->tk[0].jp2_struct.meth = 1;
-  else
-    movie->tk[0].jp2_struct.meth = 2;
-       
-    if (image->numcomps == 1)
-     movie->tk[0].jp2_struct.enumcs = 17;  /* Grayscale */
-  
-    else   
-       if ((image->comps[0].dx == 1) 
-       && (image->comps[1].dx == 1) 
-       && (image->comps[2].dx == 1) 
-    && (image->comps[0].dy == 1) 
-       && (image->comps[1].dy == 1) 
-       && (image->comps[2].dy == 1)) 
-     movie->tk[0].jp2_struct.enumcs = 16;    /* RGB */
-  
-    else   
-       if ((image->comps[0].dx == 1) 
-       && (image->comps[1].dx == 2) 
-       && (image->comps[2].dx == 2) 
-    && (image->comps[0].dy == 1) 
-       && (image->comps[1].dy == 2) 
-       && (image->comps[2].dy == 2)) 
-     movie->tk[0].jp2_struct.enumcs = 18;  /* YUV */
-  
-  else
-    movie->tk[0].jp2_struct.enumcs = 0;        /* Unknown profile */
-}
+static void setparams(opj_mj2_t *movie, opj_image_t *image)
+{
+    int i, depth_0, depth, sign;
+
+    movie->tk[0].w = int_ceildiv(image->x1 - image->x0, image->comps[0].dx);
+    movie->tk[0].h = int_ceildiv(image->y1 - image->y0, image->comps[0].dy);
+    mj2_init_stdmovie(movie);
+
+    movie->tk[0].depth = image->comps[0].prec;
+
+    if (image->numcomps == 3) {
+        if ((image->comps[0].dx == 1)
+                && (image->comps[1].dx == 1)
+                && (image->comps[2].dx == 1)) {
+            movie->tk[0].CbCr_subsampling_dx = 1;
+        } else if ((image->comps[0].dx == 1)
+                   && (image->comps[1].dx == 2)
+                   && (image->comps[2].dx == 2)) {
+            movie->tk[0].CbCr_subsampling_dx = 2;
+        } else {
+            fprintf(stderr, "Image component sizes are incoherent\n");
+        }
+
+        if ((image->comps[0].dy == 1)
+                && (image->comps[1].dy == 1)
+                && (image->comps[2].dy == 1)) {
+            movie->tk[0].CbCr_subsampling_dy = 1;
+        } else if ((image->comps[0].dy == 1)
+                   && (image->comps[1].dy == 2)
+                   && (image->comps[2].dy == 2)) {
+            movie->tk[0].CbCr_subsampling_dy = 2;
+        } else {
+            fprintf(stderr, "Image component sizes are incoherent\n");
+        }
+    }
 
-int main(int argc, char *argv[]) {
-       opj_cinfo_t* cinfo; 
-       opj_event_mgr_t event_mgr;              /* event manager */  
-  unsigned int snum;
-  opj_mj2_t *movie;
-  mj2_sample_t *sample;
-  unsigned char* frame_codestream;
-  FILE *mj2file, *j2kfile;
-  char *j2kfilename;
-  unsigned char *buf;
-  int offset, mdat_initpos;
-  opj_image_t img;
-       opj_cio_t *cio;
-       mj2_cparameters_t parameters;
-       
-  if (argc != 3) {
-    printf("Usage: %s source_location mj2_filename\n",argv[0]);
-    printf("Example: %s input/input output.mj2\n",argv[0]);
-    return 1;
-  }
-  
-  mj2file = fopen(argv[2], "wb");
-  
-  if (!mj2file) {
-    fprintf(stderr, "failed to open %s for writing\n", argv[2]);
-    return 1;
-  }
-       memset(&img, 0, sizeof(opj_image_t));
-       /*
-       configure the event callbacks (not required)
-       setting of each callback is 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;
-
-       /* get a MJ2 decompressor handle */
-       cinfo = mj2_create_compress();
-
-       /* catch events using our callbacks and give a local context */
-       opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr);   
-       
-       /* setup the decoder encoding parameters using user parameters */
-       memset(&parameters, 0, sizeof(mj2_cparameters_t));
-       movie = (opj_mj2_t*) cinfo->mj2_handle;
-
-       j2kfilename = (char*)malloc(strlen(argv[1]) + 12);/* max. '%6d' */
-       sprintf(j2kfilename, "%s_00001.j2k",argv[1]);
-
-       if(test_image(j2kfilename, &parameters) == 0) goto fin;
-
-       parameters.frame_rate = 25; /* DEFAULT */
-
-       mj2_setup_encoder(movie, &parameters);
-
-  
-       /* Writing JP, FTYP and MDAT boxes 
-       Assuming that the JP and FTYP boxes won't be longer than 300 bytes */
-       
-  buf = (unsigned char*) malloc (300 * sizeof(unsigned char)); 
-  cio = opj_cio_open(movie->cinfo, buf, 300);
-  mj2_write_jp(cio);
-  mj2_write_ftyp(movie, cio);
-  mdat_initpos = cio_tell(cio);
-  cio_skip(cio, 4);
-  cio_write(cio,MJ2_MDAT, 4);  
-  fwrite(buf,cio_tell(cio),1,mj2file);
-  free(buf);
-       
-  /* Insert each j2k codestream in a JP2C box */
-  snum=0;
-  offset = 0;  
-  while(1)
-  {
-    mj2_sample_t * new_sample;
-    mj2_chunk_t * new_chunk;
-    sample = &movie->tk[0].sample[snum];
-    sprintf(j2kfilename,"%s_%05d.j2k",argv[1],snum);
-    j2kfile = fopen(j2kfilename, "rb");
-    if (!j2kfile) {
-      if (snum==0) {  /* Could not open a single codestream */
-                               fprintf(stderr, "failed to open %s for reading\n",j2kfilename);
-                               return 1;
-      }
-      else {         /* Tried to open a inexistant codestream */
-                               fprintf(stdout,"%d frames are being added to the MJ2 file\n",snum);
-                               break;
-      }
+    movie->tk[0].sample_rate = 25;
+
+    movie->tk[0].jp2_struct.numcomps = image->numcomps;   /* NC */
+
+    /* Init Standard jp2 structure */
+
+    movie->tk[0].jp2_struct.comps =
+        (opj_jp2_comps_t *) malloc(movie->tk[0].jp2_struct.numcomps * sizeof(
+                                       opj_jp2_comps_t));
+    movie->tk[0].jp2_struct.precedence = 0;   /* PRECEDENCE*/
+    movie->tk[0].jp2_struct.approx = 0;   /* APPROX*/
+    movie->tk[0].jp2_struct.brand = JP2_JP2;  /* BR         */
+    movie->tk[0].jp2_struct.minversion = 0;   /* MinV       */
+    movie->tk[0].jp2_struct.numcl = 1;
+    movie->tk[0].jp2_struct.cl = (unsigned int *) malloc(
+                                     movie->tk[0].jp2_struct.numcl * sizeof(int));
+    movie->tk[0].jp2_struct.cl[0] = JP2_JP2;  /* CL0 : JP2  */
+    movie->tk[0].jp2_struct.C = 7;      /* C : Always 7*/
+    movie->tk[0].jp2_struct.UnkC =
+        0;      /* UnkC, colorspace specified in colr box*/
+    movie->tk[0].jp2_struct.IPR = 0;      /* IPR, no intellectual property*/
+    movie->tk[0].jp2_struct.w = int_ceildiv(image->x1 - image->x0,
+                                            image->comps[0].dx);
+    movie->tk[0].jp2_struct.h = int_ceildiv(image->y1 - image->y0,
+                                            image->comps[0].dy);
+
+    depth_0 = image->comps[0].prec - 1;
+    sign = image->comps[0].sgnd;
+    movie->tk[0].jp2_struct.bpc = depth_0 + (sign << 7);
+
+    for (i = 1; i < image->numcomps; i++) {
+        depth = image->comps[i].prec - 1;
+        sign = image->comps[i].sgnd;
+        if (depth_0 != depth) {
+            movie->tk[0].jp2_struct.bpc = 255;
+        }
     }
 
-    /* Calculating offset for samples and chunks */
-    offset += cio_tell(cio);     
-    sample->offset = offset;
-    movie->tk[0].chunk[snum].offset = offset;  /* There will be one sample per chunk */
-    
-    /* Calculating sample size */
-    fseek(j2kfile,0,SEEK_END); 
-    sample->sample_size = ftell(j2kfile) + 8; /* Sample size is codestream + JP2C box header */
-    fseek(j2kfile,0,SEEK_SET);
-    
-    /* Reading siz marker of j2k image for the first codestream */
-    if (snum==0)             
-      read_siz_marker(j2kfile, &img);
-    
-    /* Writing JP2C box header */
-    frame_codestream = (unsigned char*) malloc (sample->sample_size+8); 
-               cio = opj_cio_open(movie->cinfo, frame_codestream, sample->sample_size);    
-    cio_write(cio,sample->sample_size, 4);  /* Sample size */
-    cio_write(cio,JP2_JP2C, 4);        /* JP2C */
-    
-    /* Writing codestream from J2K file to MJ2 file */
-    fread(frame_codestream+8,sample->sample_size-8,1,j2kfile);
-    fwrite(frame_codestream,sample->sample_size,1,mj2file);
-    cio_skip(cio, sample->sample_size-8);
-    
-    /* Ending loop */
-    fclose(j2kfile);
-    snum++;
-    new_sample = (mj2_sample_t*)
-               realloc(movie->tk[0].sample, (snum+1) * sizeof(mj2_sample_t));
-    new_chunk = (mj2_chunk_t*)
-               realloc(movie->tk[0].chunk, (snum+1) * sizeof(mj2_chunk_t));
-    if (new_sample && new_chunk) {
-        movie->tk[0].sample = new_sample;
-        movie->tk[0].chunk = new_chunk;
+    for (i = 0; i < image->numcomps; i++)
+        movie->tk[0].jp2_struct.comps[i].bpcc =
+            image->comps[i].prec - 1 + (image->comps[i].sgnd << 7);
+
+    if ((image->numcomps == 1 || image->numcomps == 3)
+            && (movie->tk[0].jp2_struct.bpc != 255)) {
+        movie->tk[0].jp2_struct.meth = 1;
     } else {
-       fprintf(stderr, "Failed to allocate enough memory to read %s\n", j2kfilename);
-       return 1;
+        movie->tk[0].jp2_struct.meth = 2;
+    }
+
+    if (image->numcomps == 1) {
+        movie->tk[0].jp2_struct.enumcs = 17;    /* Grayscale */
+    }
+
+    else if ((image->comps[0].dx == 1)
+             && (image->comps[1].dx == 1)
+             && (image->comps[2].dx == 1)
+             && (image->comps[0].dy == 1)
+             && (image->comps[1].dy == 1)
+             && (image->comps[2].dy == 1)) {
+        movie->tk[0].jp2_struct.enumcs = 16;    /* RGB */
+    }
+
+    else if ((image->comps[0].dx == 1)
+             && (image->comps[1].dx == 2)
+             && (image->comps[2].dx == 2)
+             && (image->comps[0].dy == 1)
+             && (image->comps[1].dy == 2)
+             && (image->comps[2].dy == 2)) {
+        movie->tk[0].jp2_struct.enumcs = 18;    /* YUV */
+    }
+
+    else {
+        movie->tk[0].jp2_struct.enumcs = 0;    /* Unknown profile */
+    }
+}
+
+int main(int argc, char *argv[])
+{
+    opj_cinfo_t* cinfo;
+    opj_event_mgr_t event_mgr;      /* event manager */
+    unsigned int snum;
+    opj_mj2_t *movie;
+    mj2_sample_t *sample;
+    unsigned char* frame_codestream;
+    FILE *mj2file, *j2kfile;
+    char *j2kfilename;
+    unsigned char *buf;
+    int offset, mdat_initpos;
+    opj_image_t img;
+    opj_cio_t *cio;
+    mj2_cparameters_t parameters;
+
+    if (argc != 3) {
+        printf("Usage: %s source_location mj2_filename\n", argv[0]);
+        printf("Example: %s input/input output.mj2\n", argv[0]);
+        return 1;
+    }
+
+    mj2file = fopen(argv[2], "wb");
+
+    if (!mj2file) {
+        fprintf(stderr, "failed to open %s for writing\n", argv[2]);
+        return 1;
+    }
+    memset(&img, 0, sizeof(opj_image_t));
+    /*
+    configure the event callbacks (not required)
+    setting of each callback is 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;
+
+    /* get a MJ2 decompressor handle */
+    cinfo = mj2_create_compress();
+
+    /* catch events using our callbacks and give a local context */
+    opj_set_event_mgr((opj_common_ptr)cinfo, &event_mgr, stderr);
+
+    /* setup the decoder encoding parameters using user parameters */
+    memset(&parameters, 0, sizeof(mj2_cparameters_t));
+    movie = (opj_mj2_t*) cinfo->mj2_handle;
+
+    j2kfilename = (char*)malloc(strlen(argv[1]) + 12);/* max. '%6d' */
+    sprintf(j2kfilename, "%s_00001.j2k", argv[1]);
+
+    if (test_image(j2kfilename, &parameters) == 0) {
+        goto fin;
     }
-    free(frame_codestream);
-  }
-  
-  /* Writing the MDAT box length in header */
-  offset += cio_tell(cio);
-  buf = (unsigned char*) malloc (4 * sizeof(unsigned char));
-       cio = opj_cio_open(movie->cinfo, buf, 4);
-  cio_write(cio,offset-mdat_initpos,4); 
-  fseek(mj2file,(long)mdat_initpos,SEEK_SET);
-  fwrite(buf,4,1,mj2file);
-  fseek(mj2file,0,SEEK_END);
-  free(buf);
-       
-  /* Setting movie parameters */
-  movie->tk[0].num_samples=snum;
-  movie->tk[0].num_chunks=snum;
-  setparams(movie, &img);
-       
-  /* Writing MOOV box */
-       buf = (unsigned char*) malloc ((TEMP_BUF+snum*20) * sizeof(unsigned char));
-       cio = opj_cio_open(movie->cinfo, buf, (TEMP_BUF+snum*20));
-       mj2_write_moov(movie, cio);
-  fwrite(buf,cio_tell(cio),1,mj2file);
-       
-  /* Ending program */
-  free(img.comps);
-  opj_cio_close(cio);
+
+    parameters.frame_rate = 25; /* DEFAULT */
+
+    mj2_setup_encoder(movie, &parameters);
+
+
+    /* Writing JP, FTYP and MDAT boxes
+    Assuming that the JP and FTYP boxes won't be longer than 300 bytes */
+
+    buf = (unsigned char*) malloc(300 * sizeof(unsigned char));
+    cio = opj_cio_open(movie->cinfo, buf, 300);
+    mj2_write_jp(cio);
+    mj2_write_ftyp(movie, cio);
+    mdat_initpos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_MDAT, 4);
+    fwrite(buf, cio_tell(cio), 1, mj2file);
+    free(buf);
+
+    /* Insert each j2k codestream in a JP2C box */
+    snum = 0;
+    offset = 0;
+    while (1) {
+        mj2_sample_t * new_sample;
+        mj2_chunk_t * new_chunk;
+        sample = &movie->tk[0].sample[snum];
+        sprintf(j2kfilename, "%s_%05d.j2k", argv[1], snum);
+        j2kfile = fopen(j2kfilename, "rb");
+        if (!j2kfile) {
+            if (snum == 0) { /* Could not open a single codestream */
+                fprintf(stderr, "failed to open %s for reading\n", j2kfilename);
+                return 1;
+            } else {        /* Tried to open a inexistant codestream */
+                fprintf(stdout, "%d frames are being added to the MJ2 file\n", snum);
+                break;
+            }
+        }
+
+        /* Calculating offset for samples and chunks */
+        offset += cio_tell(cio);
+        sample->offset = offset;
+        movie->tk[0].chunk[snum].offset =
+            offset;  /* There will be one sample per chunk */
+
+        /* Calculating sample size */
+        fseek(j2kfile, 0, SEEK_END);
+        sample->sample_size = ftell(j2kfile) +
+                              8; /* Sample size is codestream + JP2C box header */
+        fseek(j2kfile, 0, SEEK_SET);
+
+        /* Reading siz marker of j2k image for the first codestream */
+        if (snum == 0) {
+            read_siz_marker(j2kfile, &img);
+        }
+
+        /* Writing JP2C box header */
+        frame_codestream = (unsigned char*) malloc(sample->sample_size + 8);
+        cio = opj_cio_open(movie->cinfo, frame_codestream, sample->sample_size);
+        cio_write(cio, sample->sample_size, 4); /* Sample size */
+        cio_write(cio, JP2_JP2C, 4); /* JP2C */
+
+        /* Writing codestream from J2K file to MJ2 file */
+        fread(frame_codestream + 8, sample->sample_size - 8, 1, j2kfile);
+        fwrite(frame_codestream, sample->sample_size, 1, mj2file);
+        cio_skip(cio, sample->sample_size - 8);
+
+        /* Ending loop */
+        fclose(j2kfile);
+        snum++;
+        new_sample = (mj2_sample_t*)
+                     realloc(movie->tk[0].sample, (snum + 1) * sizeof(mj2_sample_t));
+        new_chunk = (mj2_chunk_t*)
+                    realloc(movie->tk[0].chunk, (snum + 1) * sizeof(mj2_chunk_t));
+        if (new_sample && new_chunk) {
+            movie->tk[0].sample = new_sample;
+            movie->tk[0].chunk = new_chunk;
+        } else {
+            fprintf(stderr, "Failed to allocate enough memory to read %s\n", j2kfilename);
+            return 1;
+        }
+        free(frame_codestream);
+    }
+
+    /* Writing the MDAT box length in header */
+    offset += cio_tell(cio);
+    buf = (unsigned char*) malloc(4 * sizeof(unsigned char));
+    cio = opj_cio_open(movie->cinfo, buf, 4);
+    cio_write(cio, offset - mdat_initpos, 4);
+    fseek(mj2file, (long)mdat_initpos, SEEK_SET);
+    fwrite(buf, 4, 1, mj2file);
+    fseek(mj2file, 0, SEEK_END);
+    free(buf);
+
+    /* Setting movie parameters */
+    movie->tk[0].num_samples = snum;
+    movie->tk[0].num_chunks = snum;
+    setparams(movie, &img);
+
+    /* Writing MOOV box */
+    buf = (unsigned char*) malloc((TEMP_BUF + snum * 20) * sizeof(unsigned char));
+    cio = opj_cio_open(movie->cinfo, buf, (TEMP_BUF + snum * 20));
+    mj2_write_moov(movie, cio);
+    fwrite(buf, cio_tell(cio), 1, mj2file);
+
+    /* Ending program */
+    free(img.comps);
+    opj_cio_close(cio);
 
 fin:
-  fclose(mj2file);
-  mj2_destroy_compress(movie);
-  free(j2kfilename);
+    fclose(mj2file);
+    mj2_destroy_compress(movie);
+    free(j2kfilename);
 
-  return 0;
+    return 0;
 }
index 269769b45f5a768792d6b5eda3a86ec920b666af..c291e2a0fa289619942c62abbd8f968b5aee61b7 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * All rights reserved.
@@ -72,132 +72,148 @@ static OPJ_BOOL opj_bio_bytein(opj_bio_t *bio);
 
 /*@}*/
 
-/* 
+/*
 ==========================================================
    local functions
 ==========================================================
 */
 
-static OPJ_BOOL opj_bio_byteout(opj_bio_t *bio) {
-       bio->buf = (bio->buf << 8) & 0xffff;
-       bio->ct = bio->buf == 0xff00 ? 7 : 8;
-       if ((OPJ_SIZE_T)bio->bp >= (OPJ_SIZE_T)bio->end) {
-               return OPJ_FALSE;
-       }
-       *bio->bp++ = (OPJ_BYTE)(bio->buf >> 8);
-       return OPJ_TRUE;
+static OPJ_BOOL opj_bio_byteout(opj_bio_t *bio)
+{
+    bio->buf = (bio->buf << 8) & 0xffff;
+    bio->ct = bio->buf == 0xff00 ? 7 : 8;
+    if ((OPJ_SIZE_T)bio->bp >= (OPJ_SIZE_T)bio->end) {
+        return OPJ_FALSE;
+    }
+    *bio->bp++ = (OPJ_BYTE)(bio->buf >> 8);
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_bio_bytein(opj_bio_t *bio) {
-       bio->buf = (bio->buf << 8) & 0xffff;
-       bio->ct = bio->buf == 0xff00 ? 7 : 8;
-       if ((OPJ_SIZE_T)bio->bp >= (OPJ_SIZE_T)bio->end) {
-               return OPJ_FALSE;
-       }
-       bio->buf |= *bio->bp++;
-       return OPJ_TRUE;
+static OPJ_BOOL opj_bio_bytein(opj_bio_t *bio)
+{
+    bio->buf = (bio->buf << 8) & 0xffff;
+    bio->ct = bio->buf == 0xff00 ? 7 : 8;
+    if ((OPJ_SIZE_T)bio->bp >= (OPJ_SIZE_T)bio->end) {
+        return OPJ_FALSE;
+    }
+    bio->buf |= *bio->bp++;
+    return OPJ_TRUE;
 }
 
-static void opj_bio_putbit(opj_bio_t *bio, OPJ_UINT32 b) {
-       if (bio->ct == 0) {
-               opj_bio_byteout(bio); /* MSD: why not check the return value of this function ? */
-       }
-       bio->ct--;
-       bio->buf |= b << bio->ct;
+static void opj_bio_putbit(opj_bio_t *bio, OPJ_UINT32 b)
+{
+    if (bio->ct == 0) {
+        opj_bio_byteout(
+            bio); /* MSD: why not check the return value of this function ? */
+    }
+    bio->ct--;
+    bio->buf |= b << bio->ct;
 }
 
-static OPJ_UINT32 opj_bio_getbit(opj_bio_t *bio) {
-       if (bio->ct == 0) {
-               opj_bio_bytein(bio); /* MSD: why not check the return value of this function ? */
-       }
-       bio->ct--;
-       return (bio->buf >> bio->ct) & 1;
+static OPJ_UINT32 opj_bio_getbit(opj_bio_t *bio)
+{
+    if (bio->ct == 0) {
+        opj_bio_bytein(
+            bio); /* MSD: why not check the return value of this function ? */
+    }
+    bio->ct--;
+    return (bio->buf >> bio->ct) & 1;
 }
 
-/* 
+/*
 ==========================================================
    Bit Input/Output interface
 ==========================================================
 */
 
-opj_bio_t* opj_bio_create(void) {
-       opj_bio_t *bio = (opj_bio_t*)opj_malloc(sizeof(opj_bio_t));
-       return bio;
+opj_bio_t* opj_bio_create(void)
+{
+    opj_bio_t *bio = (opj_bio_t*)opj_malloc(sizeof(opj_bio_t));
+    return bio;
 }
 
-void opj_bio_destroy(opj_bio_t *bio) {
-       if(bio) {
-               opj_free(bio);
-       }
+void opj_bio_destroy(opj_bio_t *bio)
+{
+    if (bio) {
+        opj_free(bio);
+    }
 }
 
-ptrdiff_t opj_bio_numbytes(opj_bio_t *bio) {
-       return (bio->bp - bio->start);
+ptrdiff_t opj_bio_numbytes(opj_bio_t *bio)
+{
+    return (bio->bp - bio->start);
 }
 
-void opj_bio_init_enc(opj_bio_t *bio, OPJ_BYTE *bp, OPJ_UINT32 len) {
-       bio->start = bp;
-       bio->end = bp + len;
-       bio->bp = bp;
-       bio->buf = 0;
-       bio->ct = 8;
+void opj_bio_init_enc(opj_bio_t *bio, OPJ_BYTE *bp, OPJ_UINT32 len)
+{
+    bio->start = bp;
+    bio->end = bp + len;
+    bio->bp = bp;
+    bio->buf = 0;
+    bio->ct = 8;
 }
 
-void opj_bio_init_dec(opj_bio_t *bio, OPJ_BYTE *bp, OPJ_UINT32 len) {
-       bio->start = bp;
-       bio->end = bp + len;
-       bio->bp = bp;
-       bio->buf = 0;
-       bio->ct = 0;
+void opj_bio_init_dec(opj_bio_t *bio, OPJ_BYTE *bp, OPJ_UINT32 len)
+{
+    bio->start = bp;
+    bio->end = bp + len;
+    bio->bp = bp;
+    bio->buf = 0;
+    bio->ct = 0;
 }
 
 OPJ_NOSANITIZE("unsigned-integer-overflow")
-void opj_bio_write(opj_bio_t *bio, OPJ_UINT32 v, OPJ_UINT32 n) {
-       OPJ_UINT32 i;
-       
-       assert((n > 0U) && (n <= 32U));
-       for (i = n - 1; i < n; i--) { /* overflow used for end-loop condition */
-               opj_bio_putbit(bio, (v >> i) & 1);
-       }
+void opj_bio_write(opj_bio_t *bio, OPJ_UINT32 v, OPJ_UINT32 n)
+{
+    OPJ_UINT32 i;
+
+    assert((n > 0U) && (n <= 32U));
+    for (i = n - 1; i < n; i--) { /* overflow used for end-loop condition */
+        opj_bio_putbit(bio, (v >> i) & 1);
+    }
 }
 
 OPJ_NOSANITIZE("unsigned-integer-overflow")
-OPJ_UINT32 opj_bio_read(opj_bio_t *bio, OPJ_UINT32 n) {
-       OPJ_UINT32 i;
-       OPJ_UINT32 v;
-       
-       assert((n > 0U) /* && (n <= 32U)*/);
+OPJ_UINT32 opj_bio_read(opj_bio_t *bio, OPJ_UINT32 n)
+{
+    OPJ_UINT32 i;
+    OPJ_UINT32 v;
+
+    assert((n > 0U) /* && (n <= 32U)*/);
 #ifdef OPJ_UBSAN_BUILD
-       /* This assert fails for some corrupted images which are gracefully rejected */
-       /* Add this assert only for ubsan build. */
-       /* This is the condition for overflow not to occur below which is needed because of OPJ_NOSANITIZE */
-       assert(n <= 32U);
+    /* This assert fails for some corrupted images which are gracefully rejected */
+    /* Add this assert only for ubsan build. */
+    /* This is the condition for overflow not to occur below which is needed because of OPJ_NOSANITIZE */
+    assert(n <= 32U);
 #endif
-       v = 0U;
-       for (i = n - 1; i < n; i--) { /* overflow used for end-loop condition */
-               v |= opj_bio_getbit(bio) << i; /* can't overflow, opj_bio_getbit returns 0 or 1 */
-       }
-       return v;
+    v = 0U;
+    for (i = n - 1; i < n; i--) { /* overflow used for end-loop condition */
+        v |= opj_bio_getbit(bio) <<
+             i; /* can't overflow, opj_bio_getbit returns 0 or 1 */
+    }
+    return v;
 }
 
-OPJ_BOOL opj_bio_flush(opj_bio_t *bio) {
-       if (! opj_bio_byteout(bio)) {
-               return OPJ_FALSE;
-       }
-       if (bio->ct == 7) {
-               if (! opj_bio_byteout(bio)) {
-                       return OPJ_FALSE;
-               }
-       }
-       return OPJ_TRUE;
+OPJ_BOOL opj_bio_flush(opj_bio_t *bio)
+{
+    if (! opj_bio_byteout(bio)) {
+        return OPJ_FALSE;
+    }
+    if (bio->ct == 7) {
+        if (! opj_bio_byteout(bio)) {
+            return OPJ_FALSE;
+        }
+    }
+    return OPJ_TRUE;
 }
 
-OPJ_BOOL opj_bio_inalign(opj_bio_t *bio) {
-       if ((bio->buf & 0xff) == 0xff) {
-               if (! opj_bio_bytein(bio)) {
-                       return OPJ_FALSE;
-               }
-       }
-       bio->ct = 0;
-       return OPJ_TRUE;
+OPJ_BOOL opj_bio_inalign(opj_bio_t *bio)
+{
+    if ((bio->buf & 0xff) == 0xff) {
+        if (! opj_bio_bytein(bio)) {
+            return OPJ_FALSE;
+        }
+    }
+    bio->ct = 0;
+    return OPJ_TRUE;
 }
index 30561ed203b618848e39f5db297a3e1c5d995ce1..c273f9a0fcad083df0d486bf06356b1c8a60c3b9 100644 (file)
@@ -32,7 +32,7 @@
 #include "opj_includes.h"
 
 
-/* 
+/*
  * Write CPTR Codestream finder box
  *
  * @param[in] coff offset of j2k codestream
  */
 
 void opj_write_cptr(int coff, int clen, opj_stream_private_t *cio,
-              opj_event_mgr_t * p_manager );
+                    opj_event_mgr_t * p_manager);
 
 
 
 
 
-int opj_write_cidx( int offset, opj_stream_private_t *cio, opj_codestream_info_t cstr_info, int j2klen,
-              opj_event_mgr_t * p_manager )
+int opj_write_cidx(int offset, opj_stream_private_t *cio,
+                   opj_codestream_info_t cstr_info, int j2klen,
+                   opj_event_mgr_t * p_manager)
 {
-  int i;
-  OPJ_OFF_T lenp;
-  OPJ_UINT32 len;
-  opj_jp2_box_t *box;
-  int num_box = 0;
-  OPJ_BOOL  EPHused;
-  OPJ_BYTE l_data_header [4];
-
-  lenp = -1;
-  box = (opj_jp2_box_t *)opj_calloc( 32, sizeof(opj_jp2_box_t));
-  if(box == NULL){
-       return 0;
-  }
-  for (i=0;i<2;i++){
-  
-    if(i)
-      opj_stream_seek(cio,lenp,p_manager);
-
-
-    lenp = opj_stream_tell (cio);
-
-    opj_stream_skip(cio, 4, p_manager); /* L [at the end] */
-
-    opj_write_bytes(l_data_header,JPIP_CIDX,4); /* CIDX */
-    opj_stream_write_data(cio,l_data_header,4,p_manager);
-
-    opj_write_cptr( offset, cstr_info.codestream_size, cio,p_manager);
-
-    opj_write_manf( i, num_box, box, cio,p_manager);
-    
-    num_box = 0;
-    box[num_box].length = (OPJ_UINT32)opj_write_mainmhix( offset, cstr_info, cio,p_manager);
-    box[num_box].type = JPIP_MHIX;
-    num_box++;
-
-    box[num_box].length = (OPJ_UINT32)opj_write_tpix( offset, cstr_info, j2klen, cio,p_manager);
-    box[num_box].type = JPIP_TPIX;
-    num_box++;
-      
-    box[num_box].length = (OPJ_UINT32)opj_write_thix( offset, cstr_info, cio, p_manager);
-    box[num_box].type = JPIP_THIX;
-    num_box++;
-
-    EPHused = opj_check_EPHuse( offset, cstr_info.marker, cstr_info.marknum, cio,p_manager);
-      
-    box[num_box].length = (OPJ_UINT32)opj_write_ppix( offset, cstr_info, EPHused, j2klen, cio,p_manager);
-    box[num_box].type = JPIP_PPIX;
-    num_box++;
-    
-    box[num_box].length = (OPJ_UINT32)opj_write_phix( offset, cstr_info, EPHused, j2klen, cio,p_manager);
-    box[num_box].type = JPIP_PHIX;
-    num_box++;
-      
-    len = (OPJ_UINT32) (opj_stream_tell(cio)-lenp);
-    opj_stream_seek(cio, lenp,p_manager);
-    opj_write_bytes(l_data_header,len,4);/* L  */
-    opj_stream_write_data(cio,l_data_header,4,p_manager);
-    opj_stream_seek(cio, lenp+len,p_manager);
-  }
-
-  opj_free( box);
-  
-  return (int)len;
+    int i;
+    OPJ_OFF_T lenp;
+    OPJ_UINT32 len;
+    opj_jp2_box_t *box;
+    int num_box = 0;
+    OPJ_BOOL  EPHused;
+    OPJ_BYTE l_data_header [4];
+
+    lenp = -1;
+    box = (opj_jp2_box_t *)opj_calloc(32, sizeof(opj_jp2_box_t));
+    if (box == NULL) {
+        return 0;
+    }
+    for (i = 0; i < 2; i++) {
+
+        if (i) {
+            opj_stream_seek(cio, lenp, p_manager);
+        }
+
+
+        lenp = opj_stream_tell(cio);
+
+        opj_stream_skip(cio, 4, p_manager); /* L [at the end] */
+
+        opj_write_bytes(l_data_header, JPIP_CIDX, 4); /* CIDX */
+        opj_stream_write_data(cio, l_data_header, 4, p_manager);
+
+        opj_write_cptr(offset, cstr_info.codestream_size, cio, p_manager);
+
+        opj_write_manf(i, num_box, box, cio, p_manager);
+
+        num_box = 0;
+        box[num_box].length = (OPJ_UINT32)opj_write_mainmhix(offset, cstr_info, cio,
+                              p_manager);
+        box[num_box].type = JPIP_MHIX;
+        num_box++;
+
+        box[num_box].length = (OPJ_UINT32)opj_write_tpix(offset, cstr_info, j2klen, cio,
+                              p_manager);
+        box[num_box].type = JPIP_TPIX;
+        num_box++;
+
+        box[num_box].length = (OPJ_UINT32)opj_write_thix(offset, cstr_info, cio,
+                              p_manager);
+        box[num_box].type = JPIP_THIX;
+        num_box++;
+
+        EPHused = opj_check_EPHuse(offset, cstr_info.marker, cstr_info.marknum, cio,
+                                   p_manager);
+
+        box[num_box].length = (OPJ_UINT32)opj_write_ppix(offset, cstr_info, EPHused,
+                              j2klen, cio, p_manager);
+        box[num_box].type = JPIP_PPIX;
+        num_box++;
+
+        box[num_box].length = (OPJ_UINT32)opj_write_phix(offset, cstr_info, EPHused,
+                              j2klen, cio, p_manager);
+        box[num_box].type = JPIP_PHIX;
+        num_box++;
+
+        len = (OPJ_UINT32)(opj_stream_tell(cio) - lenp);
+        opj_stream_seek(cio, lenp, p_manager);
+        opj_write_bytes(l_data_header, len, 4); /* L  */
+        opj_stream_write_data(cio, l_data_header, 4, p_manager);
+        opj_stream_seek(cio, lenp + len, p_manager);
+    }
+
+    opj_free(box);
+
+    return (int)len;
 }
 
 
 
 void opj_write_cptr(int coff, int clen, opj_stream_private_t *cio,
-              opj_event_mgr_t * p_manager )
+                    opj_event_mgr_t * p_manager)
 {
-  OPJ_BYTE l_data_header [3*8];
-  OPJ_UINT32 len;
-  OPJ_OFF_T lenp;
-
-
-  lenp = opj_stream_tell(cio);
-  opj_stream_skip( cio, 4, p_manager);               /* L [at the end]     */
-  opj_write_bytes( l_data_header, JPIP_CPTR, 4);   /* T                  */
-  opj_write_bytes( l_data_header+4, 0, 2);           /* DR  A PRECISER !!  */
-  opj_write_bytes( l_data_header+6, 0, 2);           /* CONT               */
-  opj_write_bytes( l_data_header+8, (OPJ_UINT32)coff, 8);    /* COFF A PRECISER !! */
-  opj_write_bytes( l_data_header+16, (OPJ_UINT32)clen, 8);    /* CLEN               */
-  opj_stream_write_data(cio,l_data_header,3*8,p_manager);
-
-  len = (OPJ_UINT32) (opj_stream_tell(cio) - lenp);
-  opj_stream_seek(cio,lenp,p_manager);
-  opj_write_bytes(l_data_header, len, 4);         /* L                  */
-  opj_stream_write_data(cio,l_data_header,4,p_manager);
-  opj_stream_seek(cio, lenp+len,p_manager);
+    OPJ_BYTE l_data_header [3 * 8];
+    OPJ_UINT32 len;
+    OPJ_OFF_T lenp;
+
+
+    lenp = opj_stream_tell(cio);
+    opj_stream_skip(cio, 4, p_manager);                /* L [at the end]     */
+    opj_write_bytes(l_data_header, JPIP_CPTR, 4);    /* T                  */
+    opj_write_bytes(l_data_header + 4, 0, 2);          /* DR  A PRECISER !!  */
+    opj_write_bytes(l_data_header + 6, 0, 2);          /* CONT               */
+    opj_write_bytes(l_data_header + 8, (OPJ_UINT32)coff,
+                    8);   /* COFF A PRECISER !! */
+    opj_write_bytes(l_data_header + 16, (OPJ_UINT32)clen,
+                    8);   /* CLEN               */
+    opj_stream_write_data(cio, l_data_header, 3 * 8, p_manager);
+
+    len = (OPJ_UINT32)(opj_stream_tell(cio) - lenp);
+    opj_stream_seek(cio, lenp, p_manager);
+    opj_write_bytes(l_data_header, len, 4);         /* L                  */
+    opj_stream_write_data(cio, l_data_header, 4, p_manager);
+    opj_stream_seek(cio, lenp + len, p_manager);
 
 }
 
 
 
-void opj_write_manf(int second, 
-                    int v, 
-                    opj_jp2_box_t *box, 
+void opj_write_manf(int second,
+                    int v,
+                    opj_jp2_box_t *box,
                     opj_stream_private_t *cio,
-                    opj_event_mgr_t * p_manager )
+                    opj_event_mgr_t * p_manager)
 {
-  OPJ_BYTE l_data_header [4];
-  int i;
-  OPJ_UINT32 len;
-  OPJ_OFF_T lenp;
-  
-  lenp = opj_stream_tell(cio);
-  opj_stream_skip( cio, 4, p_manager);             /* L [at the end]     */
-  opj_write_bytes( l_data_header, JPIP_MANF, 4);   /* T                  */
-  opj_stream_write_data(cio,l_data_header,4,p_manager);
-
-  if (second){                          /* Write only during the second pass */
-    for( i=0; i<v; i++){
-      opj_write_bytes( l_data_header, box[i].length, 4); /* Box length                     */
-      opj_stream_write_data(cio,l_data_header,4,p_manager);
-      opj_write_bytes( l_data_header, box[i].type, 4); /* Box type                       */
-      opj_stream_write_data(cio,l_data_header,4,p_manager);
+    OPJ_BYTE l_data_header [4];
+    int i;
+    OPJ_UINT32 len;
+    OPJ_OFF_T lenp;
+
+    lenp = opj_stream_tell(cio);
+    opj_stream_skip(cio, 4, p_manager);              /* L [at the end]     */
+    opj_write_bytes(l_data_header, JPIP_MANF, 4);    /* T                  */
+    opj_stream_write_data(cio, l_data_header, 4, p_manager);
+
+    if (second) {                         /* Write only during the second pass */
+        for (i = 0; i < v; i++) {
+            opj_write_bytes(l_data_header, box[i].length,
+                            4);  /* Box length                     */
+            opj_stream_write_data(cio, l_data_header, 4, p_manager);
+            opj_write_bytes(l_data_header, box[i].type,
+                            4);  /* Box type                       */
+            opj_stream_write_data(cio, l_data_header, 4, p_manager);
+        }
     }
-  }
 
-  len = (OPJ_UINT32) (opj_stream_tell(cio) - lenp);
-  opj_stream_seek(cio,lenp,p_manager);
-  opj_write_bytes(l_data_header, len, 4);/* L                                 */
-  opj_stream_write_data(cio,l_data_header,4,p_manager);
-  opj_stream_seek(cio,lenp+len,p_manager);
+    len = (OPJ_UINT32)(opj_stream_tell(cio) - lenp);
+    opj_stream_seek(cio, lenp, p_manager);
+    opj_write_bytes(l_data_header, len, 4);/* L                                 */
+    opj_stream_write_data(cio, l_data_header, 4, p_manager);
+    opj_stream_seek(cio, lenp + len, p_manager);
 }
 
 
-int opj_write_mainmhix( int coff, opj_codestream_info_t cstr_info, opj_stream_private_t *cio,
-              opj_event_mgr_t * p_manager )
+int opj_write_mainmhix(int coff, opj_codestream_info_t cstr_info,
+                       opj_stream_private_t *cio,
+                       opj_event_mgr_t * p_manager)
 {
-  OPJ_BYTE l_data_header [8];
-  OPJ_UINT32 i;
-  OPJ_UINT32 len;
-  OPJ_OFF_T lenp;
-  
-  lenp = opj_stream_tell (cio);
-  opj_stream_skip(cio, 4, p_manager);               /* L [at the end]                    */
-  opj_write_bytes(l_data_header,JPIP_MHIX,4);       /* MHIX                              */
-  opj_stream_write_data(cio,l_data_header,4,p_manager);
-
-  opj_write_bytes(l_data_header, (OPJ_UINT32)(cstr_info.main_head_end-cstr_info.main_head_start+1), 8);        /* TLEN                              */
-  opj_stream_write_data(cio,l_data_header,8,p_manager);
-
-  for(i = 1; i < (OPJ_UINT32)cstr_info.marknum; i++){    /* Marker restricted to 1 apparition, skip SOC marker */
-    opj_write_bytes( l_data_header, cstr_info.marker[i].type, 2);
-    opj_write_bytes( l_data_header+2, 0, 2);
-    opj_stream_write_data(cio,l_data_header,4,p_manager);
-    opj_write_bytes( l_data_header,(OPJ_UINT32) (cstr_info.marker[i].pos-coff), 8);
-    opj_stream_write_data(cio,l_data_header,8,p_manager);
-    opj_write_bytes( l_data_header, (OPJ_UINT32)cstr_info.marker[i].len, 2);
-    opj_stream_write_data(cio,l_data_header,2,p_manager);
-  }
-
-  len = (OPJ_UINT32) (opj_stream_tell(cio)-lenp);
-  opj_stream_seek(cio, lenp,p_manager);
-  opj_write_bytes(l_data_header,len,4);/* L  */
-  opj_stream_write_data(cio,l_data_header,4,p_manager);
-  opj_stream_seek(cio, lenp+len,p_manager);
-  
-  return (int)len;
+    OPJ_BYTE l_data_header [8];
+    OPJ_UINT32 i;
+    OPJ_UINT32 len;
+    OPJ_OFF_T lenp;
+
+    lenp = opj_stream_tell(cio);
+    opj_stream_skip(cio, 4,
+                    p_manager);               /* L [at the end]                    */
+    opj_write_bytes(l_data_header, JPIP_MHIX,
+                    4);     /* MHIX                              */
+    opj_stream_write_data(cio, l_data_header, 4, p_manager);
+
+    opj_write_bytes(l_data_header,
+                    (OPJ_UINT32)(cstr_info.main_head_end - cstr_info.main_head_start + 1),
+                    8);        /* TLEN                              */
+    opj_stream_write_data(cio, l_data_header, 8, p_manager);
+
+    for (i = 1; i < (OPJ_UINT32)cstr_info.marknum;
+            i++) {  /* Marker restricted to 1 apparition, skip SOC marker */
+        opj_write_bytes(l_data_header, cstr_info.marker[i].type, 2);
+        opj_write_bytes(l_data_header + 2, 0, 2);
+        opj_stream_write_data(cio, l_data_header, 4, p_manager);
+        opj_write_bytes(l_data_header, (OPJ_UINT32)(cstr_info.marker[i].pos - coff), 8);
+        opj_stream_write_data(cio, l_data_header, 8, p_manager);
+        opj_write_bytes(l_data_header, (OPJ_UINT32)cstr_info.marker[i].len, 2);
+        opj_stream_write_data(cio, l_data_header, 2, p_manager);
+    }
+
+    len = (OPJ_UINT32)(opj_stream_tell(cio) - lenp);
+    opj_stream_seek(cio, lenp, p_manager);
+    opj_write_bytes(l_data_header, len, 4); /* L  */
+    opj_stream_write_data(cio, l_data_header, 4, p_manager);
+    opj_stream_seek(cio, lenp + len, p_manager);
+
+    return (int)len;
 }
 
-OPJ_BOOL opj_check_EPHuse( int coff, opj_marker_info_t *markers, int marknum, opj_stream_private_t *cio,
-              opj_event_mgr_t * p_manager )
+OPJ_BOOL opj_check_EPHuse(int coff, opj_marker_info_t *markers, int marknum,
+                          opj_stream_private_t *cio,
+                          opj_event_mgr_t * p_manager)
 {
-  OPJ_BYTE l_data_header [4];
-  OPJ_BOOL EPHused = OPJ_FALSE;
-  int i=0;
-  OPJ_OFF_T org_pos;
-  unsigned int Scod;
-
-  for(i = 0; i < marknum; i++)
-    {
-    if( markers[i].type == J2K_MS_COD)
-      {
-      org_pos = opj_stream_tell(cio);
-      opj_stream_seek(cio, coff+markers[i].pos+2,p_manager);
-
-      opj_stream_read_data(cio,l_data_header,1,p_manager);
-      opj_read_bytes(l_data_header,&Scod,1);
-      if( ((Scod >> 2) & 1))
-        EPHused = OPJ_TRUE;
-      opj_stream_seek( cio, org_pos, p_manager);
-
-      break;
-      }
-    }    
-  return EPHused;
+    OPJ_BYTE l_data_header [4];
+    OPJ_BOOL EPHused = OPJ_FALSE;
+    int i = 0;
+    OPJ_OFF_T org_pos;
+    unsigned int Scod;
+
+    for (i = 0; i < marknum; i++) {
+        if (markers[i].type == J2K_MS_COD) {
+            org_pos = opj_stream_tell(cio);
+            opj_stream_seek(cio, coff + markers[i].pos + 2, p_manager);
+
+            opj_stream_read_data(cio, l_data_header, 1, p_manager);
+            opj_read_bytes(l_data_header, &Scod, 1);
+            if (((Scod >> 2) & 1)) {
+                EPHused = OPJ_TRUE;
+            }
+            opj_stream_seek(cio, org_pos, p_manager);
+
+            break;
+        }
+    }
+    return EPHused;
 }
index b115cf5298776fee8b960395226cd17ad423aa86..224fdbe20b02f407651b9844dd3e2dc024a1925a 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,10 +8,10 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR 
+ * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR
  * Copyright (c) 2012, CS Systemes d'Information, France
  * All rights reserved.
  *
 
 /* ----------------------------------------------------------------------- */
 
-void opj_write_bytes_BE (OPJ_BYTE * p_buffer, OPJ_UINT32 p_value, OPJ_UINT32 p_nb_bytes)
+void opj_write_bytes_BE(OPJ_BYTE * p_buffer, OPJ_UINT32 p_value,
+                        OPJ_UINT32 p_nb_bytes)
 {
-       const OPJ_BYTE * l_data_ptr = ((const OPJ_BYTE *) &p_value)+sizeof(OPJ_UINT32)-p_nb_bytes;
+    const OPJ_BYTE * l_data_ptr = ((const OPJ_BYTE *) &p_value) + sizeof(
+                                      OPJ_UINT32) - p_nb_bytes;
 
-       assert(p_nb_bytes > 0 && p_nb_bytes <=  sizeof(OPJ_UINT32));
+    assert(p_nb_bytes > 0 && p_nb_bytes <=  sizeof(OPJ_UINT32));
 
-       memcpy(p_buffer,l_data_ptr,p_nb_bytes);
+    memcpy(p_buffer, l_data_ptr, p_nb_bytes);
 }
 
-void opj_write_bytes_LE (OPJ_BYTE * p_buffer, OPJ_UINT32 p_value, OPJ_UINT32 p_nb_bytes)
+void opj_write_bytes_LE(OPJ_BYTE * p_buffer, OPJ_UINT32 p_value,
+                        OPJ_UINT32 p_nb_bytes)
 {
-       const OPJ_BYTE * l_data_ptr = ((const OPJ_BYTE *) &p_value) + p_nb_bytes - 1;
-       OPJ_UINT32 i;
+    const OPJ_BYTE * l_data_ptr = ((const OPJ_BYTE *) &p_value) + p_nb_bytes - 1;
+    OPJ_UINT32 i;
 
-       assert(p_nb_bytes > 0 && p_nb_bytes <= sizeof(OPJ_UINT32));
+    assert(p_nb_bytes > 0 && p_nb_bytes <= sizeof(OPJ_UINT32));
 
-       for     (i=0;i<p_nb_bytes;++i) {
-               *(p_buffer++) = *(l_data_ptr--);
-       }
+    for (i = 0; i < p_nb_bytes; ++i) {
+        *(p_buffer++) = *(l_data_ptr--);
+    }
 }
 
-void opj_read_bytes_BE(const OPJ_BYTE * p_buffer, OPJ_UINT32 * p_value, OPJ_UINT32 p_nb_bytes)
+void opj_read_bytes_BE(const OPJ_BYTE * p_buffer, OPJ_UINT32 * p_value,
+                       OPJ_UINT32 p_nb_bytes)
 {
-       OPJ_BYTE * l_data_ptr = ((OPJ_BYTE *) p_value);
+    OPJ_BYTE * l_data_ptr = ((OPJ_BYTE *) p_value);
 
-       assert(p_nb_bytes > 0 && p_nb_bytes <= sizeof(OPJ_UINT32));
+    assert(p_nb_bytes > 0 && p_nb_bytes <= sizeof(OPJ_UINT32));
 
-       *p_value = 0;
-       memcpy(l_data_ptr+sizeof(OPJ_UINT32)-p_nb_bytes,p_buffer,p_nb_bytes);
+    *p_value = 0;
+    memcpy(l_data_ptr + sizeof(OPJ_UINT32) - p_nb_bytes, p_buffer, p_nb_bytes);
 }
 
-void opj_read_bytes_LE(const OPJ_BYTE * p_buffer, OPJ_UINT32 * p_value, OPJ_UINT32 p_nb_bytes)
+void opj_read_bytes_LE(const OPJ_BYTE * p_buffer, OPJ_UINT32 * p_value,
+                       OPJ_UINT32 p_nb_bytes)
 {
-       OPJ_BYTE * l_data_ptr = ((OPJ_BYTE *) p_value) + p_nb_bytes-1;
-       OPJ_UINT32 i;
+    OPJ_BYTE * l_data_ptr = ((OPJ_BYTE *) p_value) + p_nb_bytes - 1;
+    OPJ_UINT32 i;
 
-       assert(p_nb_bytes > 0 && p_nb_bytes <= sizeof(OPJ_UINT32));
+    assert(p_nb_bytes > 0 && p_nb_bytes <= sizeof(OPJ_UINT32));
 
-       *p_value = 0;
-       for (i=0;i<p_nb_bytes;++i) {
-               *(l_data_ptr--) = *(p_buffer++);
-       }
+    *p_value = 0;
+    for (i = 0; i < p_nb_bytes; ++i) {
+        *(l_data_ptr--) = *(p_buffer++);
+    }
 }
 
 void opj_write_double_BE(OPJ_BYTE * p_buffer, OPJ_FLOAT64 p_value)
 {
-       const OPJ_BYTE * l_data_ptr = ((const OPJ_BYTE *) &p_value);
-       memcpy(p_buffer,l_data_ptr,sizeof(OPJ_FLOAT64));
+    const OPJ_BYTE * l_data_ptr = ((const OPJ_BYTE *) &p_value);
+    memcpy(p_buffer, l_data_ptr, sizeof(OPJ_FLOAT64));
 }
 
 void opj_write_double_LE(OPJ_BYTE * p_buffer, OPJ_FLOAT64 p_value)
 {
-       const OPJ_BYTE * l_data_ptr = ((const OPJ_BYTE *) &p_value) + sizeof(OPJ_FLOAT64) - 1;
-       OPJ_UINT32 i;
-       for     (i=0;i<sizeof(OPJ_FLOAT64);++i) {
-               *(p_buffer++) = *(l_data_ptr--);
-       }
+    const OPJ_BYTE * l_data_ptr = ((const OPJ_BYTE *) &p_value) + sizeof(
+                                      OPJ_FLOAT64) - 1;
+    OPJ_UINT32 i;
+    for (i = 0; i < sizeof(OPJ_FLOAT64); ++i) {
+        *(p_buffer++) = *(l_data_ptr--);
+    }
 }
 
 void opj_read_double_BE(const OPJ_BYTE * p_buffer, OPJ_FLOAT64 * p_value)
 {
-       OPJ_BYTE * l_data_ptr = ((OPJ_BYTE *) p_value);
-       memcpy(l_data_ptr,p_buffer,sizeof(OPJ_FLOAT64));
+    OPJ_BYTE * l_data_ptr = ((OPJ_BYTE *) p_value);
+    memcpy(l_data_ptr, p_buffer, sizeof(OPJ_FLOAT64));
 }
 
 void opj_read_double_LE(const OPJ_BYTE * p_buffer, OPJ_FLOAT64 * p_value)
 {
-       OPJ_BYTE * l_data_ptr = ((OPJ_BYTE *) p_value) + sizeof(OPJ_FLOAT64)-1;
-       OPJ_UINT32 i;
-       for (i=0;i<sizeof(OPJ_FLOAT64);++i) {
-               *(l_data_ptr--) = *(p_buffer++);
-       }
+    OPJ_BYTE * l_data_ptr = ((OPJ_BYTE *) p_value) + sizeof(OPJ_FLOAT64) - 1;
+    OPJ_UINT32 i;
+    for (i = 0; i < sizeof(OPJ_FLOAT64); ++i) {
+        *(l_data_ptr--) = *(p_buffer++);
+    }
 }
 
 void opj_write_float_BE(OPJ_BYTE * p_buffer, OPJ_FLOAT32 p_value)
 {
-       const OPJ_BYTE * l_data_ptr = ((const OPJ_BYTE *) &p_value);
-       memcpy(p_buffer,l_data_ptr,sizeof(OPJ_FLOAT32));
+    const OPJ_BYTE * l_data_ptr = ((const OPJ_BYTE *) &p_value);
+    memcpy(p_buffer, l_data_ptr, sizeof(OPJ_FLOAT32));
 }
 
 void opj_write_float_LE(OPJ_BYTE * p_buffer, OPJ_FLOAT32 p_value)
 {
-       const OPJ_BYTE * l_data_ptr = ((const OPJ_BYTE *) &p_value) + sizeof(OPJ_FLOAT32) - 1;
-       OPJ_UINT32 i;
-       for     (i=0;i<sizeof(OPJ_FLOAT32);++i) {
-               *(p_buffer++) = *(l_data_ptr--);
-       }
+    const OPJ_BYTE * l_data_ptr = ((const OPJ_BYTE *) &p_value) + sizeof(
+                                      OPJ_FLOAT32) - 1;
+    OPJ_UINT32 i;
+    for (i = 0; i < sizeof(OPJ_FLOAT32); ++i) {
+        *(p_buffer++) = *(l_data_ptr--);
+    }
 }
 
 void opj_read_float_BE(const OPJ_BYTE * p_buffer, OPJ_FLOAT32 * p_value)
 {
-       OPJ_BYTE * l_data_ptr = ((OPJ_BYTE *) p_value);
-       memcpy(l_data_ptr,p_buffer,sizeof(OPJ_FLOAT32));
+    OPJ_BYTE * l_data_ptr = ((OPJ_BYTE *) p_value);
+    memcpy(l_data_ptr, p_buffer, sizeof(OPJ_FLOAT32));
 }
 
 void opj_read_float_LE(const OPJ_BYTE * p_buffer, OPJ_FLOAT32 * p_value)
 {
-       OPJ_BYTE * l_data_ptr = ((OPJ_BYTE *) p_value) + sizeof(OPJ_FLOAT32)-1;
-       OPJ_UINT32 i;
-       for     (i=0;i<sizeof(OPJ_FLOAT32);++i) {
-               *(l_data_ptr--) = *(p_buffer++);
-       }
+    OPJ_BYTE * l_data_ptr = ((OPJ_BYTE *) p_value) + sizeof(OPJ_FLOAT32) - 1;
+    OPJ_UINT32 i;
+    for (i = 0; i < sizeof(OPJ_FLOAT32); ++i) {
+        *(l_data_ptr--) = *(p_buffer++);
+    }
 }
 
-opj_stream_t* OPJ_CALLCONV opj_stream_create(OPJ_SIZE_T p_buffer_size,OPJ_BOOL l_is_input)
+opj_stream_t* OPJ_CALLCONV opj_stream_create(OPJ_SIZE_T p_buffer_size,
+        OPJ_BOOL l_is_input)
 {
-       opj_stream_private_t * l_stream = 00;
-       l_stream = (opj_stream_private_t*) opj_calloc(1,sizeof(opj_stream_private_t));
-       if (! l_stream) {
-               return 00;
-       }
+    opj_stream_private_t * l_stream = 00;
+    l_stream = (opj_stream_private_t*) opj_calloc(1, sizeof(opj_stream_private_t));
+    if (! l_stream) {
+        return 00;
+    }
 
-       l_stream->m_buffer_size = p_buffer_size;
-       l_stream->m_stored_data = (OPJ_BYTE *) opj_malloc(p_buffer_size);
-       if (! l_stream->m_stored_data) {
-               opj_free(l_stream);
-               return 00;
-       }
+    l_stream->m_buffer_size = p_buffer_size;
+    l_stream->m_stored_data = (OPJ_BYTE *) opj_malloc(p_buffer_size);
+    if (! l_stream->m_stored_data) {
+        opj_free(l_stream);
+        return 00;
+    }
 
-       l_stream->m_current_data = l_stream->m_stored_data;
+    l_stream->m_current_data = l_stream->m_stored_data;
 
-       if (l_is_input) {
-               l_stream->m_status |= OPJ_STREAM_STATUS_INPUT;
-               l_stream->m_opj_skip = opj_stream_read_skip;
-               l_stream->m_opj_seek = opj_stream_read_seek;
-       }
-       else {
-               l_stream->m_status |= OPJ_STREAM_STATUS_OUTPUT;
-               l_stream->m_opj_skip = opj_stream_write_skip;
-               l_stream->m_opj_seek = opj_stream_write_seek;
-       }
+    if (l_is_input) {
+        l_stream->m_status |= OPJ_STREAM_STATUS_INPUT;
+        l_stream->m_opj_skip = opj_stream_read_skip;
+        l_stream->m_opj_seek = opj_stream_read_seek;
+    } else {
+        l_stream->m_status |= OPJ_STREAM_STATUS_OUTPUT;
+        l_stream->m_opj_skip = opj_stream_write_skip;
+        l_stream->m_opj_seek = opj_stream_write_seek;
+    }
 
-       l_stream->m_read_fn = opj_stream_default_read;
-       l_stream->m_write_fn = opj_stream_default_write;
-       l_stream->m_skip_fn = opj_stream_default_skip;
-       l_stream->m_seek_fn = opj_stream_default_seek;
+    l_stream->m_read_fn = opj_stream_default_read;
+    l_stream->m_write_fn = opj_stream_default_write;
+    l_stream->m_skip_fn = opj_stream_default_skip;
+    l_stream->m_seek_fn = opj_stream_default_seek;
 
-       return (opj_stream_t *) l_stream;
+    return (opj_stream_t *) l_stream;
 }
 
 opj_stream_t* OPJ_CALLCONV opj_stream_default_create(OPJ_BOOL l_is_input)
 {
-       return opj_stream_create(OPJ_J2K_STREAM_CHUNK_SIZE,l_is_input);
+    return opj_stream_create(OPJ_J2K_STREAM_CHUNK_SIZE, l_is_input);
 }
 
 void OPJ_CALLCONV opj_stream_destroy(opj_stream_t* p_stream)
 {
-       opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream;
-       
-       if (l_stream) {
-               if (l_stream->m_free_user_data_fn) {
-                       l_stream->m_free_user_data_fn(l_stream->m_user_data);
-               }
-               opj_free(l_stream->m_stored_data);
-               l_stream->m_stored_data = 00;
-               opj_free(l_stream);
-       }
+    opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream;
+
+    if (l_stream) {
+        if (l_stream->m_free_user_data_fn) {
+            l_stream->m_free_user_data_fn(l_stream->m_user_data);
+        }
+        opj_free(l_stream->m_stored_data);
+        l_stream->m_stored_data = 00;
+        opj_free(l_stream);
+    }
+}
+
+void OPJ_CALLCONV opj_stream_set_read_function(opj_stream_t* p_stream,
+        opj_stream_read_fn p_function)
+{
+    opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream;
+
+    if ((!l_stream) || (!(l_stream->m_status & OPJ_STREAM_STATUS_INPUT))) {
+        return;
+    }
+
+    l_stream->m_read_fn = p_function;
+}
+
+void OPJ_CALLCONV opj_stream_set_seek_function(opj_stream_t* p_stream,
+        opj_stream_seek_fn p_function)
+{
+    opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream;
+
+    if (!l_stream) {
+        return;
+    }
+    l_stream->m_seek_fn = p_function;
 }
 
-void OPJ_CALLCONV opj_stream_set_read_function(opj_stream_t* p_stream, opj_stream_read_fn p_function)
+void OPJ_CALLCONV opj_stream_set_write_function(opj_stream_t* p_stream,
+        opj_stream_write_fn p_function)
 {
-       opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream;
+    opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream;
 
-       if ((!l_stream) || (! (l_stream->m_status & OPJ_STREAM_STATUS_INPUT))) {
-               return;
-       }
+    if ((!l_stream) || (!(l_stream->m_status & OPJ_STREAM_STATUS_OUTPUT))) {
+        return;
+    }
+
+    l_stream->m_write_fn = p_function;
+}
+
+void OPJ_CALLCONV opj_stream_set_skip_function(opj_stream_t* p_stream,
+        opj_stream_skip_fn p_function)
+{
+    opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream;
+
+    if (! l_stream) {
+        return;
+    }
+
+    l_stream->m_skip_fn = p_function;
+}
+
+void OPJ_CALLCONV opj_stream_set_user_data(opj_stream_t* p_stream,
+        void * p_data, opj_stream_free_user_data_fn p_function)
+{
+    opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream;
+    if (!l_stream) {
+        return;
+    }
+    l_stream->m_user_data = p_data;
+    l_stream->m_free_user_data_fn = p_function;
+}
+
+void OPJ_CALLCONV opj_stream_set_user_data_length(opj_stream_t* p_stream,
+        OPJ_UINT64 data_length)
+{
+    opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream;
+    if (!l_stream) {
+        return;
+    }
+    l_stream->m_user_data_length = data_length;
+}
+
+OPJ_SIZE_T opj_stream_read_data(opj_stream_private_t * p_stream,
+                                OPJ_BYTE * p_buffer, OPJ_SIZE_T p_size, opj_event_mgr_t * p_event_mgr)
+{
+    OPJ_SIZE_T l_read_nb_bytes = 0;
+    if (p_stream->m_bytes_in_buffer >= p_size) {
+        memcpy(p_buffer, p_stream->m_current_data, p_size);
+        p_stream->m_current_data += p_size;
+        p_stream->m_bytes_in_buffer -= p_size;
+        l_read_nb_bytes += p_size;
+        p_stream->m_byte_offset += (OPJ_OFF_T)p_size;
+        return l_read_nb_bytes;
+    }
+
+    /* we are now in the case when the remaining data if not sufficient */
+    if (p_stream->m_status & OPJ_STREAM_STATUS_END) {
+        l_read_nb_bytes += p_stream->m_bytes_in_buffer;
+        memcpy(p_buffer, p_stream->m_current_data, p_stream->m_bytes_in_buffer);
+        p_stream->m_current_data += p_stream->m_bytes_in_buffer;
+        p_stream->m_byte_offset += (OPJ_OFF_T)p_stream->m_bytes_in_buffer;
+        p_stream->m_bytes_in_buffer = 0;
+        return l_read_nb_bytes ? l_read_nb_bytes : (OPJ_SIZE_T) - 1;
+    }
+
+    /* the flag is not set, we copy data and then do an actual read on the stream */
+    if (p_stream->m_bytes_in_buffer) {
+        l_read_nb_bytes += p_stream->m_bytes_in_buffer;
+        memcpy(p_buffer, p_stream->m_current_data, p_stream->m_bytes_in_buffer);
+        p_stream->m_current_data = p_stream->m_stored_data;
+        p_buffer += p_stream->m_bytes_in_buffer;
+        p_size -= p_stream->m_bytes_in_buffer;
+        p_stream->m_byte_offset += (OPJ_OFF_T)p_stream->m_bytes_in_buffer;
+        p_stream->m_bytes_in_buffer = 0;
+    } else {
+        /* case where we are already at the end of the buffer
+           so reset the m_current_data to point to the start of the
+           stored buffer to get ready to read from disk*/
+        p_stream->m_current_data = p_stream->m_stored_data;
+    }
+
+    for (;;) {
+        /* we should read less than a chunk -> read a chunk */
+        if (p_size < p_stream->m_buffer_size) {
+            /* we should do an actual read on the media */
+            p_stream->m_bytes_in_buffer = p_stream->m_read_fn(p_stream->m_stored_data,
+                                          p_stream->m_buffer_size, p_stream->m_user_data);
+
+            if (p_stream->m_bytes_in_buffer == (OPJ_SIZE_T) - 1) {
+                /* end of stream */
+                opj_event_msg(p_event_mgr, EVT_INFO, "Stream reached its end !\n");
+
+                p_stream->m_bytes_in_buffer = 0;
+                p_stream->m_status |= OPJ_STREAM_STATUS_END;
+                /* end of stream */
+                return l_read_nb_bytes ? l_read_nb_bytes : (OPJ_SIZE_T) - 1;
+            } else if (p_stream->m_bytes_in_buffer < p_size) {
+                /* not enough data */
+                l_read_nb_bytes += p_stream->m_bytes_in_buffer;
+                memcpy(p_buffer, p_stream->m_current_data, p_stream->m_bytes_in_buffer);
+                p_stream->m_current_data = p_stream->m_stored_data;
+                p_buffer += p_stream->m_bytes_in_buffer;
+                p_size -= p_stream->m_bytes_in_buffer;
+                p_stream->m_byte_offset += (OPJ_OFF_T)p_stream->m_bytes_in_buffer;
+                p_stream->m_bytes_in_buffer = 0;
+            } else {
+                l_read_nb_bytes += p_size;
+                memcpy(p_buffer, p_stream->m_current_data, p_size);
+                p_stream->m_current_data += p_size;
+                p_stream->m_bytes_in_buffer -= p_size;
+                p_stream->m_byte_offset += (OPJ_OFF_T)p_size;
+                return l_read_nb_bytes;
+            }
+        } else {
+            /* direct read on the dest buffer */
+            p_stream->m_bytes_in_buffer = p_stream->m_read_fn(p_buffer, p_size,
+                                          p_stream->m_user_data);
+
+            if (p_stream->m_bytes_in_buffer == (OPJ_SIZE_T) - 1) {
+                /*  end of stream */
+                opj_event_msg(p_event_mgr, EVT_INFO, "Stream reached its end !\n");
+
+                p_stream->m_bytes_in_buffer = 0;
+                p_stream->m_status |= OPJ_STREAM_STATUS_END;
+                /* end of stream */
+                return l_read_nb_bytes ? l_read_nb_bytes : (OPJ_SIZE_T) - 1;
+            } else if (p_stream->m_bytes_in_buffer < p_size) {
+                /* not enough data */
+                l_read_nb_bytes += p_stream->m_bytes_in_buffer;
+                p_stream->m_current_data = p_stream->m_stored_data;
+                p_buffer += p_stream->m_bytes_in_buffer;
+                p_size -= p_stream->m_bytes_in_buffer;
+                p_stream->m_byte_offset += (OPJ_OFF_T)p_stream->m_bytes_in_buffer;
+                p_stream->m_bytes_in_buffer = 0;
+            } else {
+                /* we have read the exact size */
+                l_read_nb_bytes += p_stream->m_bytes_in_buffer;
+                p_stream->m_byte_offset += (OPJ_OFF_T)p_stream->m_bytes_in_buffer;
+                p_stream->m_current_data = p_stream->m_stored_data;
+                p_stream->m_bytes_in_buffer = 0;
+                return l_read_nb_bytes;
+            }
+        }
+    }
+}
+
+OPJ_SIZE_T opj_stream_write_data(opj_stream_private_t * p_stream,
+                                 const OPJ_BYTE * p_buffer,
+                                 OPJ_SIZE_T p_size,
+                                 opj_event_mgr_t * p_event_mgr)
+{
+    OPJ_SIZE_T l_remaining_bytes = 0;
+    OPJ_SIZE_T l_write_nb_bytes = 0;
+
+    if (p_stream->m_status & OPJ_STREAM_STATUS_ERROR) {
+        return (OPJ_SIZE_T) - 1;
+    }
+
+    for (;;) {
+        l_remaining_bytes = p_stream->m_buffer_size - p_stream->m_bytes_in_buffer;
+
+        /* we have more memory than required */
+        if (l_remaining_bytes >= p_size) {
+            memcpy(p_stream->m_current_data, p_buffer, p_size);
+
+            p_stream->m_current_data += p_size;
+            p_stream->m_bytes_in_buffer += p_size;
+            l_write_nb_bytes += p_size;
+            p_stream->m_byte_offset += (OPJ_OFF_T)p_size;
+
+            return l_write_nb_bytes;
+        }
+
+        /* we copy data and then do an actual read on the stream */
+        if (l_remaining_bytes) {
+            l_write_nb_bytes += l_remaining_bytes;
+
+            memcpy(p_stream->m_current_data, p_buffer, l_remaining_bytes);
+
+            p_stream->m_current_data = p_stream->m_stored_data;
+
+            p_buffer += l_remaining_bytes;
+            p_size -= l_remaining_bytes;
+            p_stream->m_bytes_in_buffer += l_remaining_bytes;
+            p_stream->m_byte_offset += (OPJ_OFF_T)l_remaining_bytes;
+        }
+
+        if (! opj_stream_flush(p_stream, p_event_mgr)) {
+            return (OPJ_SIZE_T) - 1;
+        }
+    }
+
+}
+
+OPJ_BOOL opj_stream_flush(opj_stream_private_t * p_stream,
+                          opj_event_mgr_t * p_event_mgr)
+{
+    /* the number of bytes written on the media. */
+    OPJ_SIZE_T l_current_write_nb_bytes = 0;
+
+    p_stream->m_current_data = p_stream->m_stored_data;
+
+    while (p_stream->m_bytes_in_buffer) {
+        /* we should do an actual write on the media */
+        l_current_write_nb_bytes = p_stream->m_write_fn(p_stream->m_current_data,
+                                   p_stream->m_bytes_in_buffer,
+                                   p_stream->m_user_data);
+
+        if (l_current_write_nb_bytes == (OPJ_SIZE_T) - 1) {
+            p_stream->m_status |= OPJ_STREAM_STATUS_ERROR;
+            opj_event_msg(p_event_mgr, EVT_INFO, "Error on writing stream!\n");
+
+            return OPJ_FALSE;
+        }
+
+        p_stream->m_current_data += l_current_write_nb_bytes;
+        p_stream->m_bytes_in_buffer -= l_current_write_nb_bytes;
+    }
+
+    p_stream->m_current_data = p_stream->m_stored_data;
+
+    return OPJ_TRUE;
+}
+
+OPJ_OFF_T opj_stream_read_skip(opj_stream_private_t * p_stream,
+                               OPJ_OFF_T p_size, opj_event_mgr_t * p_event_mgr)
+{
+    OPJ_OFF_T l_skip_nb_bytes = 0;
+    OPJ_OFF_T l_current_skip_nb_bytes = 0;
+
+    assert(p_size >= 0);
+
+    if (p_stream->m_bytes_in_buffer >= (OPJ_SIZE_T)p_size) {
+        p_stream->m_current_data += p_size;
+        /* it is safe to cast p_size to OPJ_SIZE_T since it is <= m_bytes_in_buffer
+        which is of type OPJ_SIZE_T */
+        p_stream->m_bytes_in_buffer -= (OPJ_SIZE_T)p_size;
+        l_skip_nb_bytes += p_size;
+        p_stream->m_byte_offset += l_skip_nb_bytes;
+        return l_skip_nb_bytes;
+    }
+
+    /* we are now in the case when the remaining data if not sufficient */
+    if (p_stream->m_status & OPJ_STREAM_STATUS_END) {
+        l_skip_nb_bytes += (OPJ_OFF_T)p_stream->m_bytes_in_buffer;
+        p_stream->m_current_data += p_stream->m_bytes_in_buffer;
+        p_stream->m_bytes_in_buffer = 0;
+        p_stream->m_byte_offset += l_skip_nb_bytes;
+        return l_skip_nb_bytes ? l_skip_nb_bytes : (OPJ_OFF_T) - 1;
+    }
+
+    /* the flag is not set, we copy data and then do an actual skip on the stream */
+    if (p_stream->m_bytes_in_buffer) {
+        l_skip_nb_bytes += (OPJ_OFF_T)p_stream->m_bytes_in_buffer;
+        p_stream->m_current_data = p_stream->m_stored_data;
+        p_size -= (OPJ_OFF_T)p_stream->m_bytes_in_buffer;
+        p_stream->m_bytes_in_buffer = 0;
+    }
 
-       l_stream->m_read_fn = p_function;
+    while (p_size > 0) {
+        /* we should do an actual skip on the media */
+        l_current_skip_nb_bytes = p_stream->m_skip_fn(p_size, p_stream->m_user_data);
+        if (l_current_skip_nb_bytes == (OPJ_OFF_T) - 1) {
+            opj_event_msg(p_event_mgr, EVT_INFO, "Stream reached its end !\n");
+
+            p_stream->m_status |= OPJ_STREAM_STATUS_END;
+            p_stream->m_byte_offset += l_skip_nb_bytes;
+            /* end if stream */
+            return l_skip_nb_bytes ? l_skip_nb_bytes : (OPJ_OFF_T) - 1;
+        }
+        p_size -= l_current_skip_nb_bytes;
+        l_skip_nb_bytes += l_current_skip_nb_bytes;
+    }
+
+    p_stream->m_byte_offset += l_skip_nb_bytes;
+
+    return l_skip_nb_bytes;
 }
 
-void OPJ_CALLCONV opj_stream_set_seek_function(opj_stream_t* p_stream, opj_stream_seek_fn p_function)
+OPJ_OFF_T opj_stream_write_skip(opj_stream_private_t * p_stream,
+                                OPJ_OFF_T p_size, opj_event_mgr_t * p_event_mgr)
 {
-       opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream;
-       
-       if (!l_stream) {
-               return;
-       }
-       l_stream->m_seek_fn = p_function;
-}
-
-void OPJ_CALLCONV opj_stream_set_write_function(opj_stream_t* p_stream, opj_stream_write_fn p_function)
-{
-       opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream;
-       
-       if ((!l_stream )|| (! (l_stream->m_status & OPJ_STREAM_STATUS_OUTPUT))) {
-               return;
-       }
-
-       l_stream->m_write_fn = p_function;
-}
-
-void OPJ_CALLCONV opj_stream_set_skip_function(opj_stream_t* p_stream, opj_stream_skip_fn p_function)
-{
-       opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream;
-       
-       if (! l_stream) {
-               return;
-       }
-
-       l_stream->m_skip_fn = p_function;
-}
-
-void OPJ_CALLCONV opj_stream_set_user_data(opj_stream_t* p_stream, void * p_data, opj_stream_free_user_data_fn p_function)
-{
-       opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream;
-       if (!l_stream)
-               return;
-       l_stream->m_user_data = p_data;
-  l_stream->m_free_user_data_fn = p_function;
-}
-
-void OPJ_CALLCONV opj_stream_set_user_data_length(opj_stream_t* p_stream, OPJ_UINT64 data_length)
-{
-       opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream;
-       if (!l_stream)
-               return;
-       l_stream->m_user_data_length = data_length;
-}
-
-OPJ_SIZE_T opj_stream_read_data (opj_stream_private_t * p_stream,OPJ_BYTE * p_buffer, OPJ_SIZE_T p_size, opj_event_mgr_t * p_event_mgr)
-{
-       OPJ_SIZE_T l_read_nb_bytes = 0;
-       if (p_stream->m_bytes_in_buffer >= p_size) {
-               memcpy(p_buffer,p_stream->m_current_data,p_size);
-               p_stream->m_current_data += p_size;
-               p_stream->m_bytes_in_buffer -= p_size;
-               l_read_nb_bytes += p_size;
-               p_stream->m_byte_offset += (OPJ_OFF_T)p_size;
-               return l_read_nb_bytes;
-       }
-
-       /* we are now in the case when the remaining data if not sufficient */
-       if (p_stream->m_status & OPJ_STREAM_STATUS_END) {
-               l_read_nb_bytes += p_stream->m_bytes_in_buffer;
-               memcpy(p_buffer,p_stream->m_current_data,p_stream->m_bytes_in_buffer);
-               p_stream->m_current_data += p_stream->m_bytes_in_buffer;
-               p_stream->m_byte_offset += (OPJ_OFF_T)p_stream->m_bytes_in_buffer;
-               p_stream->m_bytes_in_buffer = 0;
-               return l_read_nb_bytes ? l_read_nb_bytes : (OPJ_SIZE_T)-1;
-       }
-
-       /* the flag is not set, we copy data and then do an actual read on the stream */
-       if (p_stream->m_bytes_in_buffer) {
-               l_read_nb_bytes += p_stream->m_bytes_in_buffer;
-               memcpy(p_buffer,p_stream->m_current_data,p_stream->m_bytes_in_buffer);
-               p_stream->m_current_data = p_stream->m_stored_data;
-               p_buffer += p_stream->m_bytes_in_buffer;
-               p_size -= p_stream->m_bytes_in_buffer;
-               p_stream->m_byte_offset += (OPJ_OFF_T)p_stream->m_bytes_in_buffer;
-               p_stream->m_bytes_in_buffer = 0;
-       }
-       else {
-    /* case where we are already at the end of the buffer
-       so reset the m_current_data to point to the start of the
-       stored buffer to get ready to read from disk*/
-               p_stream->m_current_data = p_stream->m_stored_data;
-       }
-
-       for (;;) {
-               /* we should read less than a chunk -> read a chunk */
-               if (p_size < p_stream->m_buffer_size) {
-                       /* we should do an actual read on the media */
-                       p_stream->m_bytes_in_buffer = p_stream->m_read_fn(p_stream->m_stored_data,p_stream->m_buffer_size,p_stream->m_user_data);
-
-                       if (p_stream->m_bytes_in_buffer == (OPJ_SIZE_T)-1) {
-                               /* end of stream */
-                               opj_event_msg(p_event_mgr, EVT_INFO, "Stream reached its end !\n");
-
-                               p_stream->m_bytes_in_buffer = 0;
-                               p_stream->m_status |= OPJ_STREAM_STATUS_END;
-                               /* end of stream */
-                               return l_read_nb_bytes ? l_read_nb_bytes : (OPJ_SIZE_T)-1;
-                       }
-                       else if (p_stream->m_bytes_in_buffer < p_size) {
-                               /* not enough data */
-                               l_read_nb_bytes += p_stream->m_bytes_in_buffer;
-                               memcpy(p_buffer,p_stream->m_current_data,p_stream->m_bytes_in_buffer);
-                               p_stream->m_current_data = p_stream->m_stored_data;
-                               p_buffer += p_stream->m_bytes_in_buffer;
-                               p_size -= p_stream->m_bytes_in_buffer;
-                               p_stream->m_byte_offset += (OPJ_OFF_T)p_stream->m_bytes_in_buffer;
-                               p_stream->m_bytes_in_buffer = 0;
-                       }
-                       else {
-                               l_read_nb_bytes += p_size;
-                               memcpy(p_buffer,p_stream->m_current_data,p_size);
-                               p_stream->m_current_data += p_size;
-                               p_stream->m_bytes_in_buffer -= p_size;
-                               p_stream->m_byte_offset += (OPJ_OFF_T)p_size;
-                               return l_read_nb_bytes;
-                       }
-               }
-               else {
-                       /* direct read on the dest buffer */
-                       p_stream->m_bytes_in_buffer = p_stream->m_read_fn(p_buffer,p_size,p_stream->m_user_data);
-
-                       if (p_stream->m_bytes_in_buffer == (OPJ_SIZE_T)-1) {
-                               /*  end of stream */
-                               opj_event_msg(p_event_mgr, EVT_INFO, "Stream reached its end !\n");
-
-                               p_stream->m_bytes_in_buffer = 0;
-                               p_stream->m_status |= OPJ_STREAM_STATUS_END;
-                               /* end of stream */
-                               return l_read_nb_bytes ? l_read_nb_bytes : (OPJ_SIZE_T)-1;
-                       }
-                       else if (p_stream->m_bytes_in_buffer < p_size) {
-                               /* not enough data */
-                               l_read_nb_bytes += p_stream->m_bytes_in_buffer;
-                               p_stream->m_current_data = p_stream->m_stored_data;
-                               p_buffer += p_stream->m_bytes_in_buffer;
-                               p_size -= p_stream->m_bytes_in_buffer;
-                               p_stream->m_byte_offset += (OPJ_OFF_T)p_stream->m_bytes_in_buffer;
-                               p_stream->m_bytes_in_buffer = 0;
-                       }
-                       else {
-                               /* we have read the exact size */
-                               l_read_nb_bytes += p_stream->m_bytes_in_buffer;
-                               p_stream->m_byte_offset += (OPJ_OFF_T)p_stream->m_bytes_in_buffer;
-                               p_stream->m_current_data = p_stream->m_stored_data;
-                               p_stream->m_bytes_in_buffer = 0;
-                               return l_read_nb_bytes;
-                       }
-               }
-       }
-}
-
-OPJ_SIZE_T opj_stream_write_data (opj_stream_private_t * p_stream,
-                                                                 const OPJ_BYTE * p_buffer,
-                                                                 OPJ_SIZE_T p_size, 
-                                                                 opj_event_mgr_t * p_event_mgr)
-{
-       OPJ_SIZE_T l_remaining_bytes = 0;
-       OPJ_SIZE_T l_write_nb_bytes = 0;
-
-       if (p_stream->m_status & OPJ_STREAM_STATUS_ERROR) {
-               return (OPJ_SIZE_T)-1;
-       }
-
-       for (;;) {
-               l_remaining_bytes = p_stream->m_buffer_size - p_stream->m_bytes_in_buffer;
-               
-               /* we have more memory than required */
-               if (l_remaining_bytes >= p_size) {
-                       memcpy(p_stream->m_current_data, p_buffer, p_size);
-                       
-                       p_stream->m_current_data += p_size;
-                       p_stream->m_bytes_in_buffer += p_size;
-                       l_write_nb_bytes += p_size;
-                       p_stream->m_byte_offset += (OPJ_OFF_T)p_size;
-                       
-                       return l_write_nb_bytes;
-               }
-
-               /* we copy data and then do an actual read on the stream */
-               if (l_remaining_bytes) {
-                       l_write_nb_bytes += l_remaining_bytes;
-                       
-                       memcpy(p_stream->m_current_data,p_buffer,l_remaining_bytes);
-                       
-                       p_stream->m_current_data = p_stream->m_stored_data;
-                       
-                       p_buffer += l_remaining_bytes;
-                       p_size -= l_remaining_bytes;
-                       p_stream->m_bytes_in_buffer += l_remaining_bytes;
-                       p_stream->m_byte_offset += (OPJ_OFF_T)l_remaining_bytes;
-               }
-
-               if (! opj_stream_flush(p_stream, p_event_mgr)) {
-                       return (OPJ_SIZE_T)-1;
-               }
-       }
-
-}
-
-OPJ_BOOL opj_stream_flush (opj_stream_private_t * p_stream, opj_event_mgr_t * p_event_mgr)
-{
-       /* the number of bytes written on the media. */
-       OPJ_SIZE_T l_current_write_nb_bytes = 0;
-
-       p_stream->m_current_data = p_stream->m_stored_data;
-
-       while (p_stream->m_bytes_in_buffer) {
-               /* we should do an actual write on the media */
-               l_current_write_nb_bytes = p_stream->m_write_fn(p_stream->m_current_data,
-                                                                                                               p_stream->m_bytes_in_buffer,
-                                                                                                               p_stream->m_user_data);
-               
-               if (l_current_write_nb_bytes == (OPJ_SIZE_T)-1) {
-                       p_stream->m_status |= OPJ_STREAM_STATUS_ERROR;
-                       opj_event_msg(p_event_mgr, EVT_INFO, "Error on writing stream!\n");
-
-                       return OPJ_FALSE;
-               }
-
-               p_stream->m_current_data += l_current_write_nb_bytes;
-               p_stream->m_bytes_in_buffer -= l_current_write_nb_bytes;
-       }
-
-       p_stream->m_current_data = p_stream->m_stored_data;
-       
-       return OPJ_TRUE;
-}
-
-OPJ_OFF_T opj_stream_read_skip (opj_stream_private_t * p_stream, OPJ_OFF_T p_size, opj_event_mgr_t * p_event_mgr)
-{
-       OPJ_OFF_T l_skip_nb_bytes = 0;
-       OPJ_OFF_T l_current_skip_nb_bytes = 0;
-       
-       assert( p_size >= 0 );
-       
-       if (p_stream->m_bytes_in_buffer >= (OPJ_SIZE_T)p_size) {
-               p_stream->m_current_data += p_size;
-               /* it is safe to cast p_size to OPJ_SIZE_T since it is <= m_bytes_in_buffer
-               which is of type OPJ_SIZE_T */
-               p_stream->m_bytes_in_buffer -= (OPJ_SIZE_T)p_size;
-               l_skip_nb_bytes += p_size;
-               p_stream->m_byte_offset += l_skip_nb_bytes;
-               return l_skip_nb_bytes;
-       }
-
-       /* we are now in the case when the remaining data if not sufficient */
-       if (p_stream->m_status & OPJ_STREAM_STATUS_END) {
-               l_skip_nb_bytes += (OPJ_OFF_T)p_stream->m_bytes_in_buffer;
-               p_stream->m_current_data += p_stream->m_bytes_in_buffer;
-               p_stream->m_bytes_in_buffer = 0;
-               p_stream->m_byte_offset += l_skip_nb_bytes;
-               return l_skip_nb_bytes ? l_skip_nb_bytes : (OPJ_OFF_T) -1;
-       }
-
-       /* the flag is not set, we copy data and then do an actual skip on the stream */
-       if (p_stream->m_bytes_in_buffer) {
-               l_skip_nb_bytes += (OPJ_OFF_T)p_stream->m_bytes_in_buffer;
-               p_stream->m_current_data = p_stream->m_stored_data;
-               p_size -= (OPJ_OFF_T)p_stream->m_bytes_in_buffer;
-               p_stream->m_bytes_in_buffer = 0;
-       }
-
-       while (p_size > 0) {
-               /* we should do an actual skip on the media */
-               l_current_skip_nb_bytes = p_stream->m_skip_fn(p_size, p_stream->m_user_data);
-               if (l_current_skip_nb_bytes == (OPJ_OFF_T) -1) {
-                       opj_event_msg(p_event_mgr, EVT_INFO, "Stream reached its end !\n");
-
-                       p_stream->m_status |= OPJ_STREAM_STATUS_END;
-                       p_stream->m_byte_offset += l_skip_nb_bytes;
-                       /* end if stream */
-                       return l_skip_nb_bytes ? l_skip_nb_bytes : (OPJ_OFF_T) -1;
-               }
-               p_size -= l_current_skip_nb_bytes;
-               l_skip_nb_bytes += l_current_skip_nb_bytes;
-       }
-
-       p_stream->m_byte_offset += l_skip_nb_bytes;
-       
-       return l_skip_nb_bytes;
-}
-
-OPJ_OFF_T opj_stream_write_skip (opj_stream_private_t * p_stream, OPJ_OFF_T p_size, opj_event_mgr_t * p_event_mgr)
-{
-       OPJ_BOOL l_is_written = 0;
-       OPJ_OFF_T l_current_skip_nb_bytes = 0;
-       OPJ_OFF_T l_skip_nb_bytes = 0;
+    OPJ_BOOL l_is_written = 0;
+    OPJ_OFF_T l_current_skip_nb_bytes = 0;
+    OPJ_OFF_T l_skip_nb_bytes = 0;
+
+    if (p_stream->m_status & OPJ_STREAM_STATUS_ERROR) {
+        return (OPJ_OFF_T) - 1;
+    }
+
+    /* we should flush data */
+    l_is_written = opj_stream_flush(p_stream, p_event_mgr);
+    if (! l_is_written) {
+        p_stream->m_status |= OPJ_STREAM_STATUS_ERROR;
+        p_stream->m_bytes_in_buffer = 0;
+        return (OPJ_OFF_T) - 1;
+    }
+    /* then skip */
 
-       if (p_stream->m_status & OPJ_STREAM_STATUS_ERROR) {
-               return (OPJ_OFF_T) -1;
-       }
+    while (p_size > 0) {
+        /* we should do an actual skip on the media */
+        l_current_skip_nb_bytes = p_stream->m_skip_fn(p_size, p_stream->m_user_data);
 
-       /* we should flush data */
-       l_is_written = opj_stream_flush (p_stream, p_event_mgr);
-       if (! l_is_written) {
-               p_stream->m_status |= OPJ_STREAM_STATUS_ERROR;
-               p_stream->m_bytes_in_buffer = 0;
-               return (OPJ_OFF_T) -1;
-       }
-       /* then skip */
+        if (l_current_skip_nb_bytes == (OPJ_OFF_T) - 1) {
+            opj_event_msg(p_event_mgr, EVT_INFO, "Stream error!\n");
 
-       while (p_size > 0) {
-               /* we should do an actual skip on the media */
-               l_current_skip_nb_bytes = p_stream->m_skip_fn(p_size, p_stream->m_user_data);
-               
-               if (l_current_skip_nb_bytes == (OPJ_OFF_T)-1) {
-                       opj_event_msg(p_event_mgr, EVT_INFO, "Stream error!\n");
+            p_stream->m_status |= OPJ_STREAM_STATUS_ERROR;
+            p_stream->m_byte_offset += l_skip_nb_bytes;
+            /* end if stream */
+            return l_skip_nb_bytes ? l_skip_nb_bytes : (OPJ_OFF_T) - 1;
+        }
+        p_size -= l_current_skip_nb_bytes;
+        l_skip_nb_bytes += l_current_skip_nb_bytes;
+    }
 
-                       p_stream->m_status |= OPJ_STREAM_STATUS_ERROR;
-                       p_stream->m_byte_offset += l_skip_nb_bytes;
-                       /* end if stream */
-                       return l_skip_nb_bytes ? l_skip_nb_bytes : (OPJ_OFF_T)-1;
-               }
-               p_size -= l_current_skip_nb_bytes;
-               l_skip_nb_bytes += l_current_skip_nb_bytes;
-       }
+    p_stream->m_byte_offset += l_skip_nb_bytes;
 
-       p_stream->m_byte_offset += l_skip_nb_bytes;
-       
-       return l_skip_nb_bytes;
+    return l_skip_nb_bytes;
 }
 
-OPJ_OFF_T opj_stream_tell (const opj_stream_private_t * p_stream)
+OPJ_OFF_T opj_stream_tell(const opj_stream_private_t * p_stream)
 {
-       return p_stream->m_byte_offset;
+    return p_stream->m_byte_offset;
 }
 
-OPJ_OFF_T opj_stream_get_number_byte_left (const opj_stream_private_t * p_stream)
+OPJ_OFF_T opj_stream_get_number_byte_left(const opj_stream_private_t * p_stream)
 {
-  assert( p_stream->m_byte_offset >= 0 );
-  assert( p_stream->m_user_data_length >= (OPJ_UINT64)p_stream->m_byte_offset);
-  return p_stream->m_user_data_length ?
-                               (OPJ_OFF_T)(p_stream->m_user_data_length) - p_stream->m_byte_offset :
-                               0;
+    assert(p_stream->m_byte_offset >= 0);
+    assert(p_stream->m_user_data_length >= (OPJ_UINT64)p_stream->m_byte_offset);
+    return p_stream->m_user_data_length ?
+           (OPJ_OFF_T)(p_stream->m_user_data_length) - p_stream->m_byte_offset :
+           0;
 }
 
-OPJ_OFF_T opj_stream_skip (opj_stream_private_t * p_stream, OPJ_OFF_T p_size, opj_event_mgr_t * p_event_mgr)
+OPJ_OFF_T opj_stream_skip(opj_stream_private_t * p_stream, OPJ_OFF_T p_size,
+                          opj_event_mgr_t * p_event_mgr)
 {
-       assert(p_size >= 0);
-       return p_stream->m_opj_skip(p_stream,p_size,p_event_mgr);
+    assert(p_size >= 0);
+    return p_stream->m_opj_skip(p_stream, p_size, p_event_mgr);
 }
 
-OPJ_BOOL opj_stream_read_seek (opj_stream_private_t * p_stream, OPJ_OFF_T p_size, opj_event_mgr_t * p_event_mgr)
+OPJ_BOOL opj_stream_read_seek(opj_stream_private_t * p_stream, OPJ_OFF_T p_size,
+                              opj_event_mgr_t * p_event_mgr)
 {
-       OPJ_ARG_NOT_USED(p_event_mgr);
-       p_stream->m_current_data = p_stream->m_stored_data;
-       p_stream->m_bytes_in_buffer = 0;
+    OPJ_ARG_NOT_USED(p_event_mgr);
+    p_stream->m_current_data = p_stream->m_stored_data;
+    p_stream->m_bytes_in_buffer = 0;
 
-       if( !(p_stream->m_seek_fn(p_size,p_stream->m_user_data)) ) {
-               p_stream->m_status |= OPJ_STREAM_STATUS_END;
-               return OPJ_FALSE;
-       }
-       else {
-               /* reset stream status */
-               p_stream->m_status &= (~OPJ_STREAM_STATUS_END);
-               p_stream->m_byte_offset = p_size;
+    if (!(p_stream->m_seek_fn(p_size, p_stream->m_user_data))) {
+        p_stream->m_status |= OPJ_STREAM_STATUS_END;
+        return OPJ_FALSE;
+    } else {
+        /* reset stream status */
+        p_stream->m_status &= (~OPJ_STREAM_STATUS_END);
+        p_stream->m_byte_offset = p_size;
 
-       }
+    }
 
-       return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-OPJ_BOOL opj_stream_write_seek (opj_stream_private_t * p_stream, OPJ_OFF_T p_size, opj_event_mgr_t * p_event_mgr)
+OPJ_BOOL opj_stream_write_seek(opj_stream_private_t * p_stream,
+                               OPJ_OFF_T p_size, opj_event_mgr_t * p_event_mgr)
 {
-       if (! opj_stream_flush(p_stream,p_event_mgr)) {
-               p_stream->m_status |= OPJ_STREAM_STATUS_ERROR;
-               return OPJ_FALSE;
-       }
+    if (! opj_stream_flush(p_stream, p_event_mgr)) {
+        p_stream->m_status |= OPJ_STREAM_STATUS_ERROR;
+        return OPJ_FALSE;
+    }
 
-       p_stream->m_current_data = p_stream->m_stored_data;
-       p_stream->m_bytes_in_buffer = 0;
+    p_stream->m_current_data = p_stream->m_stored_data;
+    p_stream->m_bytes_in_buffer = 0;
 
-       if (! p_stream->m_seek_fn(p_size,p_stream->m_user_data)) {
-               p_stream->m_status |= OPJ_STREAM_STATUS_ERROR;
-               return OPJ_FALSE;
-       }
-       else {
-               p_stream->m_byte_offset = p_size;
-       }
+    if (! p_stream->m_seek_fn(p_size, p_stream->m_user_data)) {
+        p_stream->m_status |= OPJ_STREAM_STATUS_ERROR;
+        return OPJ_FALSE;
+    } else {
+        p_stream->m_byte_offset = p_size;
+    }
 
-       return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-OPJ_BOOL opj_stream_seek (opj_stream_private_t * p_stream, OPJ_OFF_T p_size, struct opj_event_mgr * p_event_mgr)
+OPJ_BOOL opj_stream_seek(opj_stream_private_t * p_stream, OPJ_OFF_T p_size,
+                         struct opj_event_mgr * p_event_mgr)
 {
-       assert(p_size >= 0);
-       return p_stream->m_opj_seek(p_stream,p_size,p_event_mgr);
+    assert(p_size >= 0);
+    return p_stream->m_opj_seek(p_stream, p_size, p_event_mgr);
 }
 
-OPJ_BOOL opj_stream_has_seek (const opj_stream_private_t * p_stream)
+OPJ_BOOL opj_stream_has_seek(const opj_stream_private_t * p_stream)
 {
-       return p_stream->m_seek_fn != opj_stream_default_seek;
+    return p_stream->m_seek_fn != opj_stream_default_seek;
 }
 
-OPJ_SIZE_T opj_stream_default_read (void * p_buffer, OPJ_SIZE_T p_nb_bytes, void * p_user_data)
+OPJ_SIZE_T opj_stream_default_read(void * p_buffer, OPJ_SIZE_T p_nb_bytes,
+                                   void * p_user_data)
 {
-       OPJ_ARG_NOT_USED(p_buffer);
-       OPJ_ARG_NOT_USED(p_nb_bytes);
-       OPJ_ARG_NOT_USED(p_user_data);
-       return (OPJ_SIZE_T) -1;
+    OPJ_ARG_NOT_USED(p_buffer);
+    OPJ_ARG_NOT_USED(p_nb_bytes);
+    OPJ_ARG_NOT_USED(p_user_data);
+    return (OPJ_SIZE_T) - 1;
 }
 
-OPJ_SIZE_T opj_stream_default_write (void * p_buffer, OPJ_SIZE_T p_nb_bytes, void * p_user_data)
+OPJ_SIZE_T opj_stream_default_write(void * p_buffer, OPJ_SIZE_T p_nb_bytes,
+                                    void * p_user_data)
 {
-       OPJ_ARG_NOT_USED(p_buffer);
-       OPJ_ARG_NOT_USED(p_nb_bytes);
-       OPJ_ARG_NOT_USED(p_user_data);
-       return (OPJ_SIZE_T) -1;
+    OPJ_ARG_NOT_USED(p_buffer);
+    OPJ_ARG_NOT_USED(p_nb_bytes);
+    OPJ_ARG_NOT_USED(p_user_data);
+    return (OPJ_SIZE_T) - 1;
 }
 
-OPJ_OFF_T opj_stream_default_skip (OPJ_OFF_T p_nb_bytes, void * p_user_data)
+OPJ_OFF_T opj_stream_default_skip(OPJ_OFF_T p_nb_bytes, void * p_user_data)
 {
-       OPJ_ARG_NOT_USED(p_nb_bytes);
-       OPJ_ARG_NOT_USED(p_user_data);
-       return (OPJ_OFF_T) -1;
+    OPJ_ARG_NOT_USED(p_nb_bytes);
+    OPJ_ARG_NOT_USED(p_user_data);
+    return (OPJ_OFF_T) - 1;
 }
 
-OPJ_BOOL opj_stream_default_seek (OPJ_OFF_T p_nb_bytes, void * p_user_data)
+OPJ_BOOL opj_stream_default_seek(OPJ_OFF_T p_nb_bytes, void * p_user_data)
 {
-       OPJ_ARG_NOT_USED(p_nb_bytes);
-       OPJ_ARG_NOT_USED(p_user_data);
-       return OPJ_FALSE;
+    OPJ_ARG_NOT_USED(p_nb_bytes);
+    OPJ_ARG_NOT_USED(p_user_data);
+    return OPJ_FALSE;
 }
index 9e2a36158e0d0728c7719ea75c1ae743736e6c36..a2841282b11351d6ff8698909997fe38bb6c4914 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * Copyright (c) 2007, Jonathan Ballard <dzonatas@dzonux.net>
 /*@{*/
 
 typedef struct dwt_local {
-       OPJ_INT32* mem;
-       OPJ_INT32 dn;
-       OPJ_INT32 sn;
-       OPJ_INT32 cas;
+    OPJ_INT32* mem;
+    OPJ_INT32 dn;
+    OPJ_INT32 sn;
+    OPJ_INT32 cas;
 } opj_dwt_t;
 
 typedef union {
-       OPJ_FLOAT32     f[4];
+    OPJ_FLOAT32 f[4];
 } opj_v4_t;
 
 typedef struct v4dwt_local {
-       opj_v4_t*       wavelet ;
-       OPJ_INT32               dn ;
-       OPJ_INT32               sn ;
-       OPJ_INT32               cas ;
+    opj_v4_t*   wavelet ;
+    OPJ_INT32       dn ;
+    OPJ_INT32       sn ;
+    OPJ_INT32       cas ;
 } opj_v4dwt_t ;
 
 static const OPJ_FLOAT32 opj_dwt_alpha =  1.586134342f; /*  12994 */
@@ -81,7 +81,7 @@ static const OPJ_FLOAT32 opj_c13318 = 1.625732422f;
 /*@}*/
 
 /**
-Virtual function type for wavelet transform in 1-D 
+Virtual function type for wavelet transform in 1-D
 */
 typedef void (*DWT1DFN)(opj_dwt_t* v);
 
@@ -91,11 +91,13 @@ typedef void (*DWT1DFN)(opj_dwt_t* v);
 /**
 Forward lazy transform (horizontal)
 */
-static void opj_dwt_deinterleave_h(OPJ_INT32 *a, OPJ_INT32 *b, OPJ_INT32 dn, OPJ_INT32 sn, OPJ_INT32 cas);
+static void opj_dwt_deinterleave_h(OPJ_INT32 *a, OPJ_INT32 *b, OPJ_INT32 dn,
+                                   OPJ_INT32 sn, OPJ_INT32 cas);
 /**
 Forward lazy transform (vertical)
 */
-static void opj_dwt_deinterleave_v(OPJ_INT32 *a, OPJ_INT32 *b, OPJ_INT32 dn, OPJ_INT32 sn, OPJ_INT32 x, OPJ_INT32 cas);
+static void opj_dwt_deinterleave_v(OPJ_INT32 *a, OPJ_INT32 *b, OPJ_INT32 dn,
+                                   OPJ_INT32 sn, OPJ_INT32 x, OPJ_INT32 cas);
 /**
 Inverse lazy transform (horizontal)
 */
@@ -107,48 +109,60 @@ static void opj_dwt_interleave_v(opj_dwt_t* v, OPJ_INT32 *a, OPJ_INT32 x);
 /**
 Forward 5-3 wavelet transform in 1-D
 */
-static void opj_dwt_encode_1(OPJ_INT32 *a, OPJ_INT32 dn, OPJ_INT32 sn, OPJ_INT32 cas);
+static void opj_dwt_encode_1(OPJ_INT32 *a, OPJ_INT32 dn, OPJ_INT32 sn,
+                             OPJ_INT32 cas);
 /**
 Inverse 5-3 wavelet transform in 1-D
 */
 static void opj_dwt_decode_1(opj_dwt_t *v);
-static void opj_dwt_decode_1_(OPJ_INT32 *a, OPJ_INT32 dn, OPJ_INT32 sn, OPJ_INT32 cas);
+static void opj_dwt_decode_1_(OPJ_INT32 *a, OPJ_INT32 dn, OPJ_INT32 sn,
+                              OPJ_INT32 cas);
 /**
 Forward 9-7 wavelet transform in 1-D
 */
-static void opj_dwt_encode_1_real(OPJ_INT32 *a, OPJ_INT32 dn, OPJ_INT32 sn, OPJ_INT32 cas);
+static void opj_dwt_encode_1_real(OPJ_INT32 *a, OPJ_INT32 dn, OPJ_INT32 sn,
+                                  OPJ_INT32 cas);
 /**
-Explicit calculation of the Quantization Stepsizes 
+Explicit calculation of the Quantization Stepsizes
 */
-static void opj_dwt_encode_stepsize(OPJ_INT32 stepsize, OPJ_INT32 numbps, opj_stepsize_t *bandno_stepsize);
+static void opj_dwt_encode_stepsize(OPJ_INT32 stepsize, OPJ_INT32 numbps,
+                                    opj_stepsize_t *bandno_stepsize);
 /**
 Inverse wavelet transform in 2-D.
 */
-static OPJ_BOOL opj_dwt_decode_tile(opj_thread_pool_t* tp, opj_tcd_tilecomp_t* tilec, OPJ_UINT32 i, DWT1DFN fn);
+static OPJ_BOOL opj_dwt_decode_tile(opj_thread_pool_t* tp,
+                                    opj_tcd_tilecomp_t* tilec, OPJ_UINT32 i, DWT1DFN fn);
 
-static OPJ_BOOL opj_dwt_encode_procedure(      opj_tcd_tilecomp_t * tilec,
-                                                                                   void (*p_function)(OPJ_INT32 *, OPJ_INT32,OPJ_INT32,OPJ_INT32) );
+static OPJ_BOOL opj_dwt_encode_procedure(opj_tcd_tilecomp_t * tilec,
+        void (*p_function)(OPJ_INT32 *, OPJ_INT32, OPJ_INT32, OPJ_INT32));
 
-static OPJ_UINT32 opj_dwt_max_resolution(opj_tcd_resolution_t* OPJ_RESTRICT r, OPJ_UINT32 i);
+static OPJ_UINT32 opj_dwt_max_resolution(opj_tcd_resolution_t* OPJ_RESTRICT r,
+        OPJ_UINT32 i);
 
 /* <summary>                             */
 /* Inverse 9-7 wavelet transform in 1-D. */
 /* </summary>                            */
 static void opj_v4dwt_decode(opj_v4dwt_t* OPJ_RESTRICT dwt);
 
-static void opj_v4dwt_interleave_h(opj_v4dwt_t* OPJ_RESTRICT w, OPJ_FLOAT32* OPJ_RESTRICT a, OPJ_INT32 x, OPJ_INT32 size);
+static void opj_v4dwt_interleave_h(opj_v4dwt_t* OPJ_RESTRICT w,
+                                   OPJ_FLOAT32* OPJ_RESTRICT a, OPJ_INT32 x, OPJ_INT32 size);
 
-static void opj_v4dwt_interleave_v(opj_v4dwt_t* OPJ_RESTRICT v , OPJ_FLOAT32* OPJ_RESTRICT a , OPJ_INT32 x, OPJ_INT32 nb_elts_read);
+static void opj_v4dwt_interleave_v(opj_v4dwt_t* OPJ_RESTRICT v,
+                                   OPJ_FLOAT32* OPJ_RESTRICT a, OPJ_INT32 x, OPJ_INT32 nb_elts_read);
 
 #ifdef __SSE__
-static void opj_v4dwt_decode_step1_sse(opj_v4_t* w, OPJ_INT32 count, const __m128 c);
+static void opj_v4dwt_decode_step1_sse(opj_v4_t* w, OPJ_INT32 count,
+                                       const __m128 c);
 
-static void opj_v4dwt_decode_step2_sse(opj_v4_t* l, opj_v4_t* w, OPJ_INT32 k, OPJ_INT32 m, __m128 c);
+static void opj_v4dwt_decode_step2_sse(opj_v4_t* l, opj_v4_t* w, OPJ_INT32 k,
+                                       OPJ_INT32 m, __m128 c);
 
 #else
-static void opj_v4dwt_decode_step1(opj_v4_t* w, OPJ_INT32 count, const OPJ_FLOAT32 c);
+static void opj_v4dwt_decode_step1(opj_v4_t* w, OPJ_INT32 count,
+                                   const OPJ_FLOAT32 c);
 
-static void opj_v4dwt_decode_step2(opj_v4_t* l, opj_v4_t* w, OPJ_INT32 k, OPJ_INT32 m, OPJ_FLOAT32 c);
+static void opj_v4dwt_decode_step2(opj_v4_t* l, opj_v4_t* w, OPJ_INT32 k,
+                                   OPJ_INT32 m, OPJ_FLOAT32 c);
 
 #endif
 
@@ -168,114 +182,120 @@ static void opj_v4dwt_decode_step2(opj_v4_t* l, opj_v4_t* w, OPJ_INT32 k, OPJ_IN
 /* This table contains the norms of the 5-3 wavelets for different bands. */
 /* </summary>                                                             */
 static const OPJ_FLOAT64 opj_dwt_norms[4][10] = {
-       {1.000, 1.500, 2.750, 5.375, 10.68, 21.34, 42.67, 85.33, 170.7, 341.3},
-       {1.038, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
-       {1.038, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
-       {.7186, .9218, 1.586, 3.043, 6.019, 12.01, 24.00, 47.97, 95.93}
+    {1.000, 1.500, 2.750, 5.375, 10.68, 21.34, 42.67, 85.33, 170.7, 341.3},
+    {1.038, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
+    {1.038, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
+    {.7186, .9218, 1.586, 3.043, 6.019, 12.01, 24.00, 47.97, 95.93}
 };
 
 /* <summary>                                                              */
 /* This table contains the norms of the 9-7 wavelets for different bands. */
 /* </summary>                                                             */
 static const OPJ_FLOAT64 opj_dwt_norms_real[4][10] = {
-       {1.000, 1.965, 4.177, 8.403, 16.90, 33.84, 67.69, 135.3, 270.6, 540.9},
-       {2.022, 3.989, 8.355, 17.04, 34.27, 68.63, 137.3, 274.6, 549.0},
-       {2.022, 3.989, 8.355, 17.04, 34.27, 68.63, 137.3, 274.6, 549.0},
-       {2.080, 3.865, 8.307, 17.18, 34.71, 69.59, 139.3, 278.6, 557.2}
+    {1.000, 1.965, 4.177, 8.403, 16.90, 33.84, 67.69, 135.3, 270.6, 540.9},
+    {2.022, 3.989, 8.355, 17.04, 34.27, 68.63, 137.3, 274.6, 549.0},
+    {2.022, 3.989, 8.355, 17.04, 34.27, 68.63, 137.3, 274.6, 549.0},
+    {2.080, 3.865, 8.307, 17.18, 34.71, 69.59, 139.3, 278.6, 557.2}
 };
 
-/* 
+/*
 ==========================================================
    local functions
 ==========================================================
 */
 
-/* <summary>                                    */
+/* <summary>                             */
 /* Forward lazy transform (horizontal).  */
-/* </summary>                            */ 
-static void opj_dwt_deinterleave_h(OPJ_INT32 *a, OPJ_INT32 *b, OPJ_INT32 dn, OPJ_INT32 sn, OPJ_INT32 cas) {
-       OPJ_INT32 i;
-       OPJ_INT32 * l_dest = b;
-       OPJ_INT32 * l_src = a+cas;
-
-    for (i=0; i<sn; ++i) {
-               *l_dest++ = *l_src;
-               l_src += 2;
-       }
-       
+/* </summary>                            */
+static void opj_dwt_deinterleave_h(OPJ_INT32 *a, OPJ_INT32 *b, OPJ_INT32 dn,
+                                   OPJ_INT32 sn, OPJ_INT32 cas)
+{
+    OPJ_INT32 i;
+    OPJ_INT32 * l_dest = b;
+    OPJ_INT32 * l_src = a + cas;
+
+    for (i = 0; i < sn; ++i) {
+        *l_dest++ = *l_src;
+        l_src += 2;
+    }
+
     l_dest = b + sn;
-       l_src = a + 1 - cas;
+    l_src = a + 1 - cas;
 
-    for        (i=0; i<dn; ++i)  {
-               *l_dest++=*l_src;
-               l_src += 2;
-       }
+    for (i = 0; i < dn; ++i)  {
+        *l_dest++ = *l_src;
+        l_src += 2;
+    }
 }
 
-/* <summary>                             */  
+/* <summary>                             */
 /* Forward lazy transform (vertical).    */
-/* </summary>                            */ 
-static void opj_dwt_deinterleave_v(OPJ_INT32 *a, OPJ_INT32 *b, OPJ_INT32 dn, OPJ_INT32 sn, OPJ_INT32 x, OPJ_INT32 cas) {
+/* </summary>                            */
+static void opj_dwt_deinterleave_v(OPJ_INT32 *a, OPJ_INT32 *b, OPJ_INT32 dn,
+                                   OPJ_INT32 sn, OPJ_INT32 x, OPJ_INT32 cas)
+{
     OPJ_INT32 i = sn;
-       OPJ_INT32 * l_dest = b;
-       OPJ_INT32 * l_src = a+cas;
+    OPJ_INT32 * l_dest = b;
+    OPJ_INT32 * l_src = a + cas;
 
     while (i--) {
-               *l_dest = *l_src;
-               l_dest += x;
-               l_src += 2;
-               } /* b[i*x]=a[2*i+cas]; */
-
-       l_dest = b + sn * x;
-       l_src = a + 1 - cas;
-       
-       i = dn;
+        *l_dest = *l_src;
+        l_dest += x;
+        l_src += 2;
+    } /* b[i*x]=a[2*i+cas]; */
+
+    l_dest = b + sn * x;
+    l_src = a + 1 - cas;
+
+    i = dn;
     while (i--) {
-               *l_dest = *l_src;
-               l_dest += x;
-               l_src += 2;
-        } /*b[(sn+i)*x]=a[(2*i+1-cas)];*/
+        *l_dest = *l_src;
+        l_dest += x;
+        l_src += 2;
+    } /*b[(sn+i)*x]=a[(2*i+1-cas)];*/
 }
 
 /* <summary>                             */
 /* Inverse lazy transform (horizontal).  */
 /* </summary>                            */
-static void opj_dwt_interleave_h(opj_dwt_t* h, OPJ_INT32 *a) {
+static void opj_dwt_interleave_h(opj_dwt_t* h, OPJ_INT32 *a)
+{
     OPJ_INT32 *ai = a;
     OPJ_INT32 *bi = h->mem + h->cas;
-    OPJ_INT32  i       = h->sn;
-    while( i-- ) {
-      *bi = *(ai++);
-         bi += 2;
+    OPJ_INT32  i    = h->sn;
+    while (i--) {
+        *bi = *(ai++);
+        bi += 2;
     }
-    ai = a + h->sn;
-    bi = h->mem + 1 - h->cas;
-    i  = h->dn ;
-    while( i-- ) {
-      *bi = *(ai++);
-         bi += 2;
+    ai  = a + h->sn;
+    bi  = h->mem + 1 - h->cas;
+    i   = h->dn ;
+    while (i--) {
+        *bi = *(ai++);
+        bi += 2;
     }
 }
 
-/* <summary>                             */  
+/* <summary>                             */
 /* Inverse lazy transform (vertical).    */
-/* </summary>                            */ 
-static void opj_dwt_interleave_v(opj_dwt_t* v, OPJ_INT32 *a, OPJ_INT32 x) {
+/* </summary>                            */
+static void opj_dwt_interleave_v(opj_dwt_t* v, OPJ_INT32 *a, OPJ_INT32 x)
+{
     OPJ_INT32 *ai = a;
     OPJ_INT32 *bi = v->mem + v->cas;
     OPJ_INT32  i = v->sn;
-    while( i-- ) {
-      *bi = *ai;
-         bi += 2;
-         ai += x;
+    while (i--) {
+        *bi = *ai;
+        bi += 2;
+        ai += x;
     }
     ai = a + (v->sn * x);
     bi = v->mem + 1 - v->cas;
     i = v->dn ;
-    while( i-- ) {
-      *bi = *ai;
-         bi += 2;  
-         ai += x;
+    while (i--) {
+        *bi = *ai;
+        bi += 2;
+        ai += x;
     }
 }
 
@@ -283,99 +303,136 @@ static void opj_dwt_interleave_v(opj_dwt_t* v, OPJ_INT32 *a, OPJ_INT32 x) {
 /* <summary>                            */
 /* Forward 5-3 wavelet transform in 1-D. */
 /* </summary>                           */
-static void opj_dwt_encode_1(OPJ_INT32 *a, OPJ_INT32 dn, OPJ_INT32 sn, OPJ_INT32 cas) {
-       OPJ_INT32 i;
-       
-       if (!cas) {
-               if ((dn > 0) || (sn > 1)) {     /* NEW :  CASE ONE ELEMENT */
-                       for (i = 0; i < dn; i++) OPJ_D(i) -= (OPJ_S_(i) + OPJ_S_(i + 1)) >> 1;
-                       for (i = 0; i < sn; i++) OPJ_S(i) += (OPJ_D_(i - 1) + OPJ_D_(i) + 2) >> 2;
-               }
-       } else {
-               if (!sn && dn == 1)                 /* NEW :  CASE ONE ELEMENT */
-                       OPJ_S(0) *= 2;
-               else {
-                       for (i = 0; i < dn; i++) OPJ_S(i) -= (OPJ_DD_(i) + OPJ_DD_(i - 1)) >> 1;
-                       for (i = 0; i < sn; i++) OPJ_D(i) += (OPJ_SS_(i) + OPJ_SS_(i + 1) + 2) >> 2;
-               }
-       }
+static void opj_dwt_encode_1(OPJ_INT32 *a, OPJ_INT32 dn, OPJ_INT32 sn,
+                             OPJ_INT32 cas)
+{
+    OPJ_INT32 i;
+
+    if (!cas) {
+        if ((dn > 0) || (sn > 1)) { /* NEW :  CASE ONE ELEMENT */
+            for (i = 0; i < dn; i++) {
+                OPJ_D(i) -= (OPJ_S_(i) + OPJ_S_(i + 1)) >> 1;
+            }
+            for (i = 0; i < sn; i++) {
+                OPJ_S(i) += (OPJ_D_(i - 1) + OPJ_D_(i) + 2) >> 2;
+            }
+        }
+    } else {
+        if (!sn && dn == 1) {       /* NEW :  CASE ONE ELEMENT */
+            OPJ_S(0) *= 2;
+        } else {
+            for (i = 0; i < dn; i++) {
+                OPJ_S(i) -= (OPJ_DD_(i) + OPJ_DD_(i - 1)) >> 1;
+            }
+            for (i = 0; i < sn; i++) {
+                OPJ_D(i) += (OPJ_SS_(i) + OPJ_SS_(i + 1) + 2) >> 2;
+            }
+        }
+    }
 }
 
 /* <summary>                            */
 /* Inverse 5-3 wavelet transform in 1-D. */
-/* </summary>                           */ 
-static void opj_dwt_decode_1_(OPJ_INT32 *a, OPJ_INT32 dn, OPJ_INT32 sn, OPJ_INT32 cas) {
-       OPJ_INT32 i;
-       
-       if (!cas) {
-               if ((dn > 0) || (sn > 1)) { /* NEW :  CASE ONE ELEMENT */
-                       for (i = 0; i < sn; i++) OPJ_S(i) -= (OPJ_D_(i - 1) + OPJ_D_(i) + 2) >> 2;
-                       for (i = 0; i < dn; i++) OPJ_D(i) += (OPJ_S_(i) + OPJ_S_(i + 1)) >> 1;
-               }
-       } else {
-               if (!sn  && dn == 1)          /* NEW :  CASE ONE ELEMENT */
-                       OPJ_S(0) /= 2;
-               else {
-                       for (i = 0; i < sn; i++) OPJ_D(i) -= (OPJ_SS_(i) + OPJ_SS_(i + 1) + 2) >> 2;
-                       for (i = 0; i < dn; i++) OPJ_S(i) += (OPJ_DD_(i) + OPJ_DD_(i - 1)) >> 1;
-               }
-       }
+/* </summary>                           */
+static void opj_dwt_decode_1_(OPJ_INT32 *a, OPJ_INT32 dn, OPJ_INT32 sn,
+                              OPJ_INT32 cas)
+{
+    OPJ_INT32 i;
+
+    if (!cas) {
+        if ((dn > 0) || (sn > 1)) { /* NEW :  CASE ONE ELEMENT */
+            for (i = 0; i < sn; i++) {
+                OPJ_S(i) -= (OPJ_D_(i - 1) + OPJ_D_(i) + 2) >> 2;
+            }
+            for (i = 0; i < dn; i++) {
+                OPJ_D(i) += (OPJ_S_(i) + OPJ_S_(i + 1)) >> 1;
+            }
+        }
+    } else {
+        if (!sn  && dn == 1) {        /* NEW :  CASE ONE ELEMENT */
+            OPJ_S(0) /= 2;
+        } else {
+            for (i = 0; i < sn; i++) {
+                OPJ_D(i) -= (OPJ_SS_(i) + OPJ_SS_(i + 1) + 2) >> 2;
+            }
+            for (i = 0; i < dn; i++) {
+                OPJ_S(i) += (OPJ_DD_(i) + OPJ_DD_(i - 1)) >> 1;
+            }
+        }
+    }
 }
 
 /* <summary>                            */
 /* Inverse 5-3 wavelet transform in 1-D. */
-/* </summary>                           */ 
-static void opj_dwt_decode_1(opj_dwt_t *v) {
-       opj_dwt_decode_1_(v->mem, v->dn, v->sn, v->cas);
+/* </summary>                           */
+static void opj_dwt_decode_1(opj_dwt_t *v)
+{
+    opj_dwt_decode_1_(v->mem, v->dn, v->sn, v->cas);
 }
 
 /* <summary>                             */
 /* Forward 9-7 wavelet transform in 1-D. */
 /* </summary>                            */
-static void opj_dwt_encode_1_real(OPJ_INT32 *a, OPJ_INT32 dn, OPJ_INT32 sn, OPJ_INT32 cas) {
-       OPJ_INT32 i;
-       if (!cas) {
-               if ((dn > 0) || (sn > 1)) {     /* NEW :  CASE ONE ELEMENT */
-                       for (i = 0; i < dn; i++)
-                               OPJ_D(i) -= opj_int_fix_mul(OPJ_S_(i) + OPJ_S_(i + 1), 12993);
-                       for (i = 0; i < sn; i++)
-                               OPJ_S(i) -= opj_int_fix_mul(OPJ_D_(i - 1) + OPJ_D_(i), 434);
-                       for (i = 0; i < dn; i++)
-                               OPJ_D(i) += opj_int_fix_mul(OPJ_S_(i) + OPJ_S_(i + 1), 7233);
-                       for (i = 0; i < sn; i++)
-                               OPJ_S(i) += opj_int_fix_mul(OPJ_D_(i - 1) + OPJ_D_(i), 3633);
-                       for (i = 0; i < dn; i++)
-                               OPJ_D(i) = opj_int_fix_mul(OPJ_D(i), 5038);     /*5038 */
-                       for (i = 0; i < sn; i++)
-                               OPJ_S(i) = opj_int_fix_mul(OPJ_S(i), 6659);     /*6660 */
-               }
-       } else {
-               if ((sn > 0) || (dn > 1)) {     /* NEW :  CASE ONE ELEMENT */
-                       for (i = 0; i < dn; i++)
-                               OPJ_S(i) -= opj_int_fix_mul(OPJ_DD_(i) + OPJ_DD_(i - 1), 12993);
-                       for (i = 0; i < sn; i++)
-                               OPJ_D(i) -= opj_int_fix_mul(OPJ_SS_(i) + OPJ_SS_(i + 1), 434);
-                       for (i = 0; i < dn; i++)
-                               OPJ_S(i) += opj_int_fix_mul(OPJ_DD_(i) + OPJ_DD_(i - 1), 7233);
-                       for (i = 0; i < sn; i++)
-                               OPJ_D(i) += opj_int_fix_mul(OPJ_SS_(i) + OPJ_SS_(i + 1), 3633);
-                       for (i = 0; i < dn; i++)
-                               OPJ_S(i) = opj_int_fix_mul(OPJ_S(i), 5038);     /*5038 */
-                       for (i = 0; i < sn; i++)
-                               OPJ_D(i) = opj_int_fix_mul(OPJ_D(i), 6659);     /*6660 */
-               }
-       }
+static void opj_dwt_encode_1_real(OPJ_INT32 *a, OPJ_INT32 dn, OPJ_INT32 sn,
+                                  OPJ_INT32 cas)
+{
+    OPJ_INT32 i;
+    if (!cas) {
+        if ((dn > 0) || (sn > 1)) { /* NEW :  CASE ONE ELEMENT */
+            for (i = 0; i < dn; i++) {
+                OPJ_D(i) -= opj_int_fix_mul(OPJ_S_(i) + OPJ_S_(i + 1), 12993);
+            }
+            for (i = 0; i < sn; i++) {
+                OPJ_S(i) -= opj_int_fix_mul(OPJ_D_(i - 1) + OPJ_D_(i), 434);
+            }
+            for (i = 0; i < dn; i++) {
+                OPJ_D(i) += opj_int_fix_mul(OPJ_S_(i) + OPJ_S_(i + 1), 7233);
+            }
+            for (i = 0; i < sn; i++) {
+                OPJ_S(i) += opj_int_fix_mul(OPJ_D_(i - 1) + OPJ_D_(i), 3633);
+            }
+            for (i = 0; i < dn; i++) {
+                OPJ_D(i) = opj_int_fix_mul(OPJ_D(i), 5038);    /*5038 */
+            }
+            for (i = 0; i < sn; i++) {
+                OPJ_S(i) = opj_int_fix_mul(OPJ_S(i), 6659);    /*6660 */
+            }
+        }
+    } else {
+        if ((sn > 0) || (dn > 1)) { /* NEW :  CASE ONE ELEMENT */
+            for (i = 0; i < dn; i++) {
+                OPJ_S(i) -= opj_int_fix_mul(OPJ_DD_(i) + OPJ_DD_(i - 1), 12993);
+            }
+            for (i = 0; i < sn; i++) {
+                OPJ_D(i) -= opj_int_fix_mul(OPJ_SS_(i) + OPJ_SS_(i + 1), 434);
+            }
+            for (i = 0; i < dn; i++) {
+                OPJ_S(i) += opj_int_fix_mul(OPJ_DD_(i) + OPJ_DD_(i - 1), 7233);
+            }
+            for (i = 0; i < sn; i++) {
+                OPJ_D(i) += opj_int_fix_mul(OPJ_SS_(i) + OPJ_SS_(i + 1), 3633);
+            }
+            for (i = 0; i < dn; i++) {
+                OPJ_S(i) = opj_int_fix_mul(OPJ_S(i), 5038);    /*5038 */
+            }
+            for (i = 0; i < sn; i++) {
+                OPJ_D(i) = opj_int_fix_mul(OPJ_D(i), 6659);    /*6660 */
+            }
+        }
+    }
 }
 
-static void opj_dwt_encode_stepsize(OPJ_INT32 stepsize, OPJ_INT32 numbps, opj_stepsize_t *bandno_stepsize) {
-       OPJ_INT32 p, n;
-       p = opj_int_floorlog2(stepsize) - 13;
-       n = 11 - opj_int_floorlog2(stepsize);
-       bandno_stepsize->mant = (n < 0 ? stepsize >> -n : stepsize << n) & 0x7ff;
-       bandno_stepsize->expn = numbps - p;
+static void opj_dwt_encode_stepsize(OPJ_INT32 stepsize, OPJ_INT32 numbps,
+                                    opj_stepsize_t *bandno_stepsize)
+{
+    OPJ_INT32 p, n;
+    p = opj_int_floorlog2(stepsize) - 13;
+    n = 11 - opj_int_floorlog2(stepsize);
+    bandno_stepsize->mant = (n < 0 ? stepsize >> -n : stepsize << n) & 0x7ff;
+    bandno_stepsize->expn = numbps - p;
 }
 
-/* 
+/*
 ==========================================================
    DWT interface
 ==========================================================
@@ -385,121 +442,130 @@ static void opj_dwt_encode_stepsize(OPJ_INT32 stepsize, OPJ_INT32 numbps, opj_st
 /* <summary>                            */
 /* Forward 5-3 wavelet transform in 2-D. */
 /* </summary>                           */
-static INLINE OPJ_BOOL opj_dwt_encode_procedure(opj_tcd_tilecomp_t * tilec,void (*p_function)(OPJ_INT32 *, OPJ_INT32,OPJ_INT32,OPJ_INT32) )
+static INLINE OPJ_BOOL opj_dwt_encode_procedure(opj_tcd_tilecomp_t * tilec,
+        void (*p_function)(OPJ_INT32 *, OPJ_INT32, OPJ_INT32, OPJ_INT32))
 {
-       OPJ_INT32 i, j, k;
-       OPJ_INT32 *a = 00;
-       OPJ_INT32 *aj = 00;
-       OPJ_INT32 *bj = 00;
-       OPJ_INT32 w, l;
-
-       OPJ_INT32 rw;                   /* width of the resolution level computed   */
-       OPJ_INT32 rh;                   /* height of the resolution level computed  */
-       size_t l_data_size;
-
-       opj_tcd_resolution_t * l_cur_res = 0;
-       opj_tcd_resolution_t * l_last_res = 0;
-
-       w = tilec->x1-tilec->x0;
-       l = (OPJ_INT32)tilec->numresolutions-1;
-       a = tilec->data;
-
-       l_cur_res = tilec->resolutions + l;
-       l_last_res = l_cur_res - 1;
-
-       l_data_size = opj_dwt_max_resolution( tilec->resolutions,tilec->numresolutions);
-       /* overflow check */
-       if (l_data_size > (SIZE_MAX / sizeof(OPJ_INT32))) {
-               /* FIXME event manager error callback */
-               return OPJ_FALSE;
-       }
-       l_data_size *= sizeof(OPJ_INT32);
-       bj = (OPJ_INT32*)opj_malloc(l_data_size);
-       /* l_data_size is equal to 0 when numresolutions == 1 but bj is not used */
-       /* in that case, so do not error out */
-       if (l_data_size != 0 && ! bj) {
-               return OPJ_FALSE;
-       }
-       i = l;
-
-       while (i--) {
-               OPJ_INT32 rw1;          /* width of the resolution level once lower than computed one                                       */
-               OPJ_INT32 rh1;          /* height of the resolution level once lower than computed one                                      */
-               OPJ_INT32 cas_col;      /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */
-               OPJ_INT32 cas_row;      /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering   */
-               OPJ_INT32 dn, sn;
-
-               rw  = l_cur_res->x1 - l_cur_res->x0;
-               rh  = l_cur_res->y1 - l_cur_res->y0;
-               rw1 = l_last_res->x1 - l_last_res->x0;
-               rh1 = l_last_res->y1 - l_last_res->y0;
-
-               cas_row = l_cur_res->x0 & 1;
-               cas_col = l_cur_res->y0 & 1;
-
-               sn = rh1;
-               dn = rh - rh1;
-               for (j = 0; j < rw; ++j) {
-                       aj = a + j;
-                       for (k = 0; k < rh; ++k) {
-                               bj[k] = aj[k*w];
-                       }
-
-                       (*p_function) (bj, dn, sn, cas_col);
-
-                       opj_dwt_deinterleave_v(bj, aj, dn, sn, w, cas_col);
-               }
-
-               sn = rw1;
-               dn = rw - rw1;
-
-               for (j = 0; j < rh; j++) {
-                       aj = a + j * w;
-                       for (k = 0; k < rw; k++)  bj[k] = aj[k];
-                       (*p_function) (bj, dn, sn, cas_row);
-                       opj_dwt_deinterleave_h(bj, aj, dn, sn, cas_row);
-               }
-
-               l_cur_res = l_last_res;
-
-               --l_last_res;
-       }
-
-       opj_free(bj);
-       return OPJ_TRUE;
+    OPJ_INT32 i, j, k;
+    OPJ_INT32 *a = 00;
+    OPJ_INT32 *aj = 00;
+    OPJ_INT32 *bj = 00;
+    OPJ_INT32 w, l;
+
+    OPJ_INT32 rw;           /* width of the resolution level computed   */
+    OPJ_INT32 rh;           /* height of the resolution level computed  */
+    size_t l_data_size;
+
+    opj_tcd_resolution_t * l_cur_res = 0;
+    opj_tcd_resolution_t * l_last_res = 0;
+
+    w = tilec->x1 - tilec->x0;
+    l = (OPJ_INT32)tilec->numresolutions - 1;
+    a = tilec->data;
+
+    l_cur_res = tilec->resolutions + l;
+    l_last_res = l_cur_res - 1;
+
+    l_data_size = opj_dwt_max_resolution(tilec->resolutions, tilec->numresolutions);
+    /* overflow check */
+    if (l_data_size > (SIZE_MAX / sizeof(OPJ_INT32))) {
+        /* FIXME event manager error callback */
+        return OPJ_FALSE;
+    }
+    l_data_size *= sizeof(OPJ_INT32);
+    bj = (OPJ_INT32*)opj_malloc(l_data_size);
+    /* l_data_size is equal to 0 when numresolutions == 1 but bj is not used */
+    /* in that case, so do not error out */
+    if (l_data_size != 0 && ! bj) {
+        return OPJ_FALSE;
+    }
+    i = l;
+
+    while (i--) {
+        OPJ_INT32 rw1;      /* width of the resolution level once lower than computed one                                       */
+        OPJ_INT32 rh1;      /* height of the resolution level once lower than computed one                                      */
+        OPJ_INT32 cas_col;  /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */
+        OPJ_INT32 cas_row;  /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering   */
+        OPJ_INT32 dn, sn;
+
+        rw  = l_cur_res->x1 - l_cur_res->x0;
+        rh  = l_cur_res->y1 - l_cur_res->y0;
+        rw1 = l_last_res->x1 - l_last_res->x0;
+        rh1 = l_last_res->y1 - l_last_res->y0;
+
+        cas_row = l_cur_res->x0 & 1;
+        cas_col = l_cur_res->y0 & 1;
+
+        sn = rh1;
+        dn = rh - rh1;
+        for (j = 0; j < rw; ++j) {
+            aj = a + j;
+            for (k = 0; k < rh; ++k) {
+                bj[k] = aj[k * w];
+            }
+
+            (*p_function)(bj, dn, sn, cas_col);
+
+            opj_dwt_deinterleave_v(bj, aj, dn, sn, w, cas_col);
+        }
+
+        sn = rw1;
+        dn = rw - rw1;
+
+        for (j = 0; j < rh; j++) {
+            aj = a + j * w;
+            for (k = 0; k < rw; k++) {
+                bj[k] = aj[k];
+            }
+            (*p_function)(bj, dn, sn, cas_row);
+            opj_dwt_deinterleave_h(bj, aj, dn, sn, cas_row);
+        }
+
+        l_cur_res = l_last_res;
+
+        --l_last_res;
+    }
+
+    opj_free(bj);
+    return OPJ_TRUE;
 }
 
 /* Forward 5-3 wavelet transform in 2-D. */
 /* </summary>                           */
 OPJ_BOOL opj_dwt_encode(opj_tcd_tilecomp_t * tilec)
 {
-       return opj_dwt_encode_procedure(tilec,opj_dwt_encode_1);
+    return opj_dwt_encode_procedure(tilec, opj_dwt_encode_1);
 }
 
 /* <summary>                            */
 /* Inverse 5-3 wavelet transform in 2-D. */
 /* </summary>                           */
-OPJ_BOOL opj_dwt_decode(opj_thread_pool_t* tp, opj_tcd_tilecomp_t* tilec, OPJ_UINT32 numres) {
-       return opj_dwt_decode_tile(tp, tilec, numres, &opj_dwt_decode_1);
+OPJ_BOOL opj_dwt_decode(opj_thread_pool_t* tp, opj_tcd_tilecomp_t* tilec,
+                        OPJ_UINT32 numres)
+{
+    return opj_dwt_decode_tile(tp, tilec, numres, &opj_dwt_decode_1);
 }
 
 
 /* <summary>                          */
 /* Get gain of 5-3 wavelet transform. */
 /* </summary>                         */
-OPJ_UINT32 opj_dwt_getgain(OPJ_UINT32 orient) {
-       if (orient == 0)
-               return 0;
-       if (orient == 1 || orient == 2)
-               return 1;
-       return 2;
+OPJ_UINT32 opj_dwt_getgain(OPJ_UINT32 orient)
+{
+    if (orient == 0) {
+        return 0;
+    }
+    if (orient == 1 || orient == 2) {
+        return 1;
+    }
+    return 2;
 }
 
 /* <summary>                */
 /* Get norm of 5-3 wavelet. */
 /* </summary>               */
-OPJ_FLOAT64 opj_dwt_getnorm(OPJ_UINT32 level, OPJ_UINT32 orient) {
-       return opj_dwt_norms[orient][level];
+OPJ_FLOAT64 opj_dwt_getnorm(OPJ_UINT32 level, OPJ_UINT32 orient)
+{
+    return opj_dwt_norms[orient][level];
 }
 
 /* <summary>                             */
@@ -507,63 +573,71 @@ OPJ_FLOAT64 opj_dwt_getnorm(OPJ_UINT32 level, OPJ_UINT32 orient) {
 /* </summary>                            */
 OPJ_BOOL opj_dwt_encode_real(opj_tcd_tilecomp_t * tilec)
 {
-       return opj_dwt_encode_procedure(tilec,opj_dwt_encode_1_real);
+    return opj_dwt_encode_procedure(tilec, opj_dwt_encode_1_real);
 }
 
 /* <summary>                          */
 /* Get gain of 9-7 wavelet transform. */
 /* </summary>                         */
-OPJ_UINT32 opj_dwt_getgain_real(OPJ_UINT32 orient) {
-       (void)orient;
-       return 0;
+OPJ_UINT32 opj_dwt_getgain_real(OPJ_UINT32 orient)
+{
+    (void)orient;
+    return 0;
 }
 
 /* <summary>                */
 /* Get norm of 9-7 wavelet. */
 /* </summary>               */
-OPJ_FLOAT64 opj_dwt_getnorm_real(OPJ_UINT32 level, OPJ_UINT32 orient) {
-       return opj_dwt_norms_real[orient][level];
+OPJ_FLOAT64 opj_dwt_getnorm_real(OPJ_UINT32 level, OPJ_UINT32 orient)
+{
+    return opj_dwt_norms_real[orient][level];
 }
 
-void opj_dwt_calc_explicit_stepsizes(opj_tccp_t * tccp, OPJ_UINT32 prec) {
-       OPJ_UINT32 numbands, bandno;
-       numbands = 3 * tccp->numresolutions - 2;
-       for (bandno = 0; bandno < numbands; bandno++) {
-               OPJ_FLOAT64 stepsize;
-               OPJ_UINT32 resno, level, orient, gain;
-
-               resno = (bandno == 0) ? 0 : ((bandno - 1) / 3 + 1);
-               orient = (bandno == 0) ? 0 : ((bandno - 1) % 3 + 1);
-               level = tccp->numresolutions - 1 - resno;
-               gain = (tccp->qmfbid == 0) ? 0 : ((orient == 0) ? 0 : (((orient == 1) || (orient == 2)) ? 1 : 2));
-               if (tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) {
-                       stepsize = 1.0;
-               } else {
-                       OPJ_FLOAT64 norm = opj_dwt_norms_real[orient][level];
-                       stepsize = (1 << (gain)) / norm;
-               }
-               opj_dwt_encode_stepsize((OPJ_INT32) floor(stepsize * 8192.0), (OPJ_INT32)(prec + gain), &tccp->stepsizes[bandno]);
-       }
+void opj_dwt_calc_explicit_stepsizes(opj_tccp_t * tccp, OPJ_UINT32 prec)
+{
+    OPJ_UINT32 numbands, bandno;
+    numbands = 3 * tccp->numresolutions - 2;
+    for (bandno = 0; bandno < numbands; bandno++) {
+        OPJ_FLOAT64 stepsize;
+        OPJ_UINT32 resno, level, orient, gain;
+
+        resno = (bandno == 0) ? 0 : ((bandno - 1) / 3 + 1);
+        orient = (bandno == 0) ? 0 : ((bandno - 1) % 3 + 1);
+        level = tccp->numresolutions - 1 - resno;
+        gain = (tccp->qmfbid == 0) ? 0 : ((orient == 0) ? 0 : (((orient == 1) ||
+                                          (orient == 2)) ? 1 : 2));
+        if (tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) {
+            stepsize = 1.0;
+        } else {
+            OPJ_FLOAT64 norm = opj_dwt_norms_real[orient][level];
+            stepsize = (1 << (gain)) / norm;
+        }
+        opj_dwt_encode_stepsize((OPJ_INT32) floor(stepsize * 8192.0),
+                                (OPJ_INT32)(prec + gain), &tccp->stepsizes[bandno]);
+    }
 }
 
 /* <summary>                             */
 /* Determine maximum computed resolution level for inverse wavelet transform */
 /* </summary>                            */
-static OPJ_UINT32 opj_dwt_max_resolution(opj_tcd_resolution_t* OPJ_RESTRICT r, OPJ_UINT32 i) {
-       OPJ_UINT32 mr   = 0;
-       OPJ_UINT32 w;
-       while( --i ) {
-               ++r;
-               if( mr < ( w = (OPJ_UINT32)(r->x1 - r->x0) ) )
-                       mr = w ;
-               if( mr < ( w = (OPJ_UINT32)(r->y1 - r->y0) ) )
-                       mr = w ;
-       }
-       return mr ;
+static OPJ_UINT32 opj_dwt_max_resolution(opj_tcd_resolution_t* OPJ_RESTRICT r,
+        OPJ_UINT32 i)
+{
+    OPJ_UINT32 mr   = 0;
+    OPJ_UINT32 w;
+    while (--i) {
+        ++r;
+        if (mr < (w = (OPJ_UINT32)(r->x1 - r->x0))) {
+            mr = w ;
+        }
+        if (mr < (w = (OPJ_UINT32)(r->y1 - r->y0))) {
+            mr = w ;
+        }
+    }
+    return mr ;
 }
 
-typedef struct
-{
+typedef struct {
     opj_dwt_t h;
     DWT1DFN dwt_1D;
     OPJ_UINT32 rw;
@@ -580,19 +654,17 @@ static void opj_dwt_decode_h_func(void* user_data, opj_tls_t* tls)
     (void)tls;
 
     job = (opj_dwd_decode_h_job_t*)user_data;
-    for( j = job->min_j; j < job->max_j; j++ )
-    {
-          opj_dwt_interleave_h(&job->h, &job->tiledp[j*job->w]);
-          (job->dwt_1D)(&job->h);
-          memcpy(&job->tiledp[j*job->w], job->h.mem, job->rw * sizeof(OPJ_INT32));
+    for (j = job->min_j; j < job->max_j; j++) {
+        opj_dwt_interleave_h(&job->h, &job->tiledp[j * job->w]);
+        (job->dwt_1D)(&job->h);
+        memcpy(&job->tiledp[j * job->w], job->h.mem, job->rw * sizeof(OPJ_INT32));
     }
 
     opj_aligned_free(job->h.mem);
     opj_free(job);
 }
 
-typedef struct
-{
+typedef struct {
     opj_dwt_t v;
     DWT1DFN dwt_1D;
     OPJ_UINT32 rh;
@@ -609,12 +681,11 @@ static void opj_dwt_decode_v_func(void* user_data, opj_tls_t* tls)
     (void)tls;
 
     job = (opj_dwd_decode_v_job_t*)user_data;
-    for( j = job->min_j; j < job->max_j; j++ )
-    {
+    for (j = job->min_j; j < job->max_j; j++) {
         OPJ_UINT32 k;
         opj_dwt_interleave_v(&job->v, &job->tiledp[j], (OPJ_INT32)job->w);
         (job->dwt_1D)(&job->v);
-        for(k = 0; k < job->rh; ++k) {
+        for (k = 0; k < job->rh; ++k) {
             job->tiledp[k * job->w + j] = job->v.mem[k];
         }
     }
@@ -627,352 +698,358 @@ static void opj_dwt_decode_v_func(void* user_data, opj_tls_t* tls)
 /* <summary>                            */
 /* Inverse wavelet transform in 2-D.    */
 /* </summary>                           */
-static OPJ_BOOL opj_dwt_decode_tile(opj_thread_pool_t* tp, opj_tcd_tilecomp_t* tilec, OPJ_UINT32 numres, DWT1DFN dwt_1D)
+static OPJ_BOOL opj_dwt_decode_tile(opj_thread_pool_t* tp,
+                                    opj_tcd_tilecomp_t* tilec, OPJ_UINT32 numres, DWT1DFN dwt_1D)
 {
-       opj_dwt_t h;
-       opj_dwt_t v;
-
-       opj_tcd_resolution_t* tr = tilec->resolutions;
-
-       OPJ_UINT32 rw = (OPJ_UINT32)(tr->x1 - tr->x0);  /* width of the resolution level computed */
-       OPJ_UINT32 rh = (OPJ_UINT32)(tr->y1 - tr->y0);  /* height of the resolution level computed */
-
-       OPJ_UINT32 w = (OPJ_UINT32)(tilec->x1 - tilec->x0);
-       size_t h_mem_size;
-       int num_threads;
-       
-       if (numres == 1U) {
-               return OPJ_TRUE;
-       }
-       num_threads = opj_thread_pool_get_thread_count(tp);
-       h_mem_size = opj_dwt_max_resolution(tr, numres);
-       /* overflow check */
-       if (h_mem_size > (SIZE_MAX / sizeof(OPJ_INT32))) {
-               /* FIXME event manager error callback */
-               return OPJ_FALSE;
-       }
-       h_mem_size *= sizeof(OPJ_INT32);
-       h.mem = (OPJ_INT32*)opj_aligned_malloc(h_mem_size);
-       if (! h.mem){
-               /* FIXME event manager error callback */
-               return OPJ_FALSE;
-       }
-
-       v.mem = h.mem;
-
-       while( --numres) {
-               OPJ_INT32 * OPJ_RESTRICT tiledp = tilec->data;
-               OPJ_UINT32 j;
-
-               ++tr;
-               h.sn = (OPJ_INT32)rw;
-               v.sn = (OPJ_INT32)rh;
-
-               rw = (OPJ_UINT32)(tr->x1 - tr->x0);
-               rh = (OPJ_UINT32)(tr->y1 - tr->y0);
-
-               h.dn = (OPJ_INT32)(rw - (OPJ_UINT32)h.sn);
-               h.cas = tr->x0 % 2;
-
-               if( num_threads <= 1 || rh <= 1 )
-               {
-                       for(j = 0; j < rh; ++j) {
-                               opj_dwt_interleave_h(&h, &tiledp[j*w]);
-                               (dwt_1D)(&h);
-                               memcpy(&tiledp[j*w], h.mem, rw * sizeof(OPJ_INT32));
-                       }
-               }
-               else
-               {
-                       OPJ_UINT32 num_jobs = (OPJ_UINT32)num_threads;
-                       OPJ_UINT32 step_j;
-
-                       if( rh < num_jobs ) {
-                               num_jobs = rh;
-                       }
-                       step_j = (rh / num_jobs);
-
-                       for(j = 0; j < num_jobs; j++)
-                       {
-                               opj_dwd_decode_h_job_t* job;
-
-                               job = (opj_dwd_decode_h_job_t*) opj_malloc(sizeof(opj_dwd_decode_h_job_t));
-                               if( !job )
-                               {
-                                       /* It would be nice to fallback to single thread case, but */
-                                       /* unfortunately some jobs may be launched and have modified */
-                                       /* tiledp, so it is not practical to recover from that error */
-                                       /* FIXME event manager error callback */
-                                       opj_thread_pool_wait_completion(tp, 0);
-                                       opj_aligned_free(h.mem);
-                                       return OPJ_FALSE;
-                               }
-                               job->h = h;
-                               job->dwt_1D = dwt_1D;
-                               job->rw = rw;
-                               job->w = w;
-                               job->tiledp = tiledp;
-                               job->min_j = j * step_j;
-                               job->max_j = (j + 1U) * step_j; /* this can overflow */
-                               if( j == (num_jobs - 1U) ) { /* this will take care of the overflow */
-                                       job->max_j = rh;
-                               }
-                               job->h.mem = (OPJ_INT32*)opj_aligned_malloc(h_mem_size);
-                               if (!job->h.mem)
-                               {
-                                       /* FIXME event manager error callback */
-                                       opj_thread_pool_wait_completion(tp, 0);
-                                       opj_free(job);
-                                       opj_aligned_free(h.mem);
-                                       return OPJ_FALSE;
-                               }
-                               opj_thread_pool_submit_job( tp, opj_dwt_decode_h_func, job );
-                       }
-                       opj_thread_pool_wait_completion(tp, 0);
-               }
-
-               v.dn = (OPJ_INT32)(rh - (OPJ_UINT32)v.sn);
-               v.cas = tr->y0 % 2;
-
-               if( num_threads <= 1 || rw <= 1 )
-               {
-                       for(j = 0; j < rw; ++j){
-                               OPJ_UINT32 k;
-
-                               opj_dwt_interleave_v(&v, &tiledp[j], (OPJ_INT32)w);
-                               (dwt_1D)(&v);
-                               for(k = 0; k < rh; ++k) {
-                                       tiledp[k * w + j] = v.mem[k];
-                               }
-                       }
-               }
-               else
-               {
-                       OPJ_UINT32 num_jobs = (OPJ_UINT32)num_threads;
-                       OPJ_UINT32 step_j;
-
-                       if( rw < num_jobs ) {
-                               num_jobs = rw;
-                       }
-                       step_j = (rw / num_jobs);
-
-                       for( j = 0; j < num_jobs; j++ )
-                       {
-                               opj_dwd_decode_v_job_t* job;
-
-                               job = (opj_dwd_decode_v_job_t*) opj_malloc(sizeof(opj_dwd_decode_v_job_t));
-                               if( !job )
-                               {
-                                       /* It would be nice to fallback to single thread case, but */
-                                       /* unfortunately some jobs may be launched and have modified */
-                                       /* tiledp, so it is not practical to recover from that error */
-                                       /* FIXME event manager error callback */
-                                       opj_thread_pool_wait_completion(tp, 0);
-                                       opj_aligned_free(v.mem);
-                                       return OPJ_FALSE;
-                               }
-                               job->v = v;
-                               job->dwt_1D = dwt_1D;
-                               job->rh = rh;
-                               job->w = w;
-                               job->tiledp = tiledp;
-                               job->min_j = j * step_j;
-                               job->max_j = (j + 1U) * step_j; /* this can overflow */
-                               if( j == (num_jobs - 1U) ) { /* this will take care of the overflow */
-                                       job->max_j = rw;
-                               }
-                               job->v.mem = (OPJ_INT32*)opj_aligned_malloc(h_mem_size);
-                               if (!job->v.mem)
-                               {
-                                       /* FIXME event manager error callback */
-                                       opj_thread_pool_wait_completion(tp, 0);
-                                       opj_free(job);
-                                       opj_aligned_free(v.mem);
-                                       return OPJ_FALSE;
-                               }
-                               opj_thread_pool_submit_job( tp, opj_dwt_decode_v_func, job );
-                       }
-                       opj_thread_pool_wait_completion(tp, 0);
-               }
-       }
-       opj_aligned_free(h.mem);
-       return OPJ_TRUE;
+    opj_dwt_t h;
+    opj_dwt_t v;
+
+    opj_tcd_resolution_t* tr = tilec->resolutions;
+
+    OPJ_UINT32 rw = (OPJ_UINT32)(tr->x1 -
+                                 tr->x0);  /* width of the resolution level computed */
+    OPJ_UINT32 rh = (OPJ_UINT32)(tr->y1 -
+                                 tr->y0);  /* height of the resolution level computed */
+
+    OPJ_UINT32 w = (OPJ_UINT32)(tilec->x1 - tilec->x0);
+    size_t h_mem_size;
+    int num_threads;
+
+    if (numres == 1U) {
+        return OPJ_TRUE;
+    }
+    num_threads = opj_thread_pool_get_thread_count(tp);
+    h_mem_size = opj_dwt_max_resolution(tr, numres);
+    /* overflow check */
+    if (h_mem_size > (SIZE_MAX / sizeof(OPJ_INT32))) {
+        /* FIXME event manager error callback */
+        return OPJ_FALSE;
+    }
+    h_mem_size *= sizeof(OPJ_INT32);
+    h.mem = (OPJ_INT32*)opj_aligned_malloc(h_mem_size);
+    if (! h.mem) {
+        /* FIXME event manager error callback */
+        return OPJ_FALSE;
+    }
+
+    v.mem = h.mem;
+
+    while (--numres) {
+        OPJ_INT32 * OPJ_RESTRICT tiledp = tilec->data;
+        OPJ_UINT32 j;
+
+        ++tr;
+        h.sn = (OPJ_INT32)rw;
+        v.sn = (OPJ_INT32)rh;
+
+        rw = (OPJ_UINT32)(tr->x1 - tr->x0);
+        rh = (OPJ_UINT32)(tr->y1 - tr->y0);
+
+        h.dn = (OPJ_INT32)(rw - (OPJ_UINT32)h.sn);
+        h.cas = tr->x0 % 2;
+
+        if (num_threads <= 1 || rh <= 1) {
+            for (j = 0; j < rh; ++j) {
+                opj_dwt_interleave_h(&h, &tiledp[j * w]);
+                (dwt_1D)(&h);
+                memcpy(&tiledp[j * w], h.mem, rw * sizeof(OPJ_INT32));
+            }
+        } else {
+            OPJ_UINT32 num_jobs = (OPJ_UINT32)num_threads;
+            OPJ_UINT32 step_j;
+
+            if (rh < num_jobs) {
+                num_jobs = rh;
+            }
+            step_j = (rh / num_jobs);
+
+            for (j = 0; j < num_jobs; j++) {
+                opj_dwd_decode_h_job_t* job;
+
+                job = (opj_dwd_decode_h_job_t*) opj_malloc(sizeof(opj_dwd_decode_h_job_t));
+                if (!job) {
+                    /* It would be nice to fallback to single thread case, but */
+                    /* unfortunately some jobs may be launched and have modified */
+                    /* tiledp, so it is not practical to recover from that error */
+                    /* FIXME event manager error callback */
+                    opj_thread_pool_wait_completion(tp, 0);
+                    opj_aligned_free(h.mem);
+                    return OPJ_FALSE;
+                }
+                job->h = h;
+                job->dwt_1D = dwt_1D;
+                job->rw = rw;
+                job->w = w;
+                job->tiledp = tiledp;
+                job->min_j = j * step_j;
+                job->max_j = (j + 1U) * step_j; /* this can overflow */
+                if (j == (num_jobs - 1U)) {  /* this will take care of the overflow */
+                    job->max_j = rh;
+                }
+                job->h.mem = (OPJ_INT32*)opj_aligned_malloc(h_mem_size);
+                if (!job->h.mem) {
+                    /* FIXME event manager error callback */
+                    opj_thread_pool_wait_completion(tp, 0);
+                    opj_free(job);
+                    opj_aligned_free(h.mem);
+                    return OPJ_FALSE;
+                }
+                opj_thread_pool_submit_job(tp, opj_dwt_decode_h_func, job);
+            }
+            opj_thread_pool_wait_completion(tp, 0);
+        }
+
+        v.dn = (OPJ_INT32)(rh - (OPJ_UINT32)v.sn);
+        v.cas = tr->y0 % 2;
+
+        if (num_threads <= 1 || rw <= 1) {
+            for (j = 0; j < rw; ++j) {
+                OPJ_UINT32 k;
+
+                opj_dwt_interleave_v(&v, &tiledp[j], (OPJ_INT32)w);
+                (dwt_1D)(&v);
+                for (k = 0; k < rh; ++k) {
+                    tiledp[k * w + j] = v.mem[k];
+                }
+            }
+        } else {
+            OPJ_UINT32 num_jobs = (OPJ_UINT32)num_threads;
+            OPJ_UINT32 step_j;
+
+            if (rw < num_jobs) {
+                num_jobs = rw;
+            }
+            step_j = (rw / num_jobs);
+
+            for (j = 0; j < num_jobs; j++) {
+                opj_dwd_decode_v_job_t* job;
+
+                job = (opj_dwd_decode_v_job_t*) opj_malloc(sizeof(opj_dwd_decode_v_job_t));
+                if (!job) {
+                    /* It would be nice to fallback to single thread case, but */
+                    /* unfortunately some jobs may be launched and have modified */
+                    /* tiledp, so it is not practical to recover from that error */
+                    /* FIXME event manager error callback */
+                    opj_thread_pool_wait_completion(tp, 0);
+                    opj_aligned_free(v.mem);
+                    return OPJ_FALSE;
+                }
+                job->v = v;
+                job->dwt_1D = dwt_1D;
+                job->rh = rh;
+                job->w = w;
+                job->tiledp = tiledp;
+                job->min_j = j * step_j;
+                job->max_j = (j + 1U) * step_j; /* this can overflow */
+                if (j == (num_jobs - 1U)) {  /* this will take care of the overflow */
+                    job->max_j = rw;
+                }
+                job->v.mem = (OPJ_INT32*)opj_aligned_malloc(h_mem_size);
+                if (!job->v.mem) {
+                    /* FIXME event manager error callback */
+                    opj_thread_pool_wait_completion(tp, 0);
+                    opj_free(job);
+                    opj_aligned_free(v.mem);
+                    return OPJ_FALSE;
+                }
+                opj_thread_pool_submit_job(tp, opj_dwt_decode_v_func, job);
+            }
+            opj_thread_pool_wait_completion(tp, 0);
+        }
+    }
+    opj_aligned_free(h.mem);
+    return OPJ_TRUE;
 }
 
-static void opj_v4dwt_interleave_h(opj_v4dwt_t* OPJ_RESTRICT w, OPJ_FLOAT32* OPJ_RESTRICT a, OPJ_INT32 x, OPJ_INT32 size)
+static void opj_v4dwt_interleave_h(opj_v4dwt_t* OPJ_RESTRICT w,
+                                   OPJ_FLOAT32* OPJ_RESTRICT a, OPJ_INT32 x, OPJ_INT32 size)
 {
-       OPJ_FLOAT32* OPJ_RESTRICT bi = (OPJ_FLOAT32*) (w->wavelet + w->cas);
-       OPJ_INT32 count = w->sn;
-       OPJ_INT32 i, k;
-
-       for(k = 0; k < 2; ++k){
-               if ( count + 3 * x < size && ((size_t) a & 0x0f) == 0 && ((size_t) bi & 0x0f) == 0 && (x & 0x0f) == 0 ) {
-                       /* Fast code path */
-                       for(i = 0; i < count; ++i){
-                               OPJ_INT32 j = i;
-                               bi[i*8    ] = a[j];
-                               j += x;
-                               bi[i*8 + 1] = a[j];
-                               j += x;
-                               bi[i*8 + 2] = a[j];
-                               j += x;
-                               bi[i*8 + 3] = a[j];
-                       }
-               }
-               else {
-                       /* Slow code path */
-                       for(i = 0; i < count; ++i){
-                               OPJ_INT32 j = i;
-                               bi[i*8    ] = a[j];
-                               j += x;
-                               if(j >= size) continue;
-                               bi[i*8 + 1] = a[j];
-                               j += x;
-                               if(j >= size) continue;
-                               bi[i*8 + 2] = a[j];
-                               j += x;
-                               if(j >= size) continue;
-                               bi[i*8 + 3] = a[j]; /* This one*/
-                       }
-               }
-
-               bi = (OPJ_FLOAT32*) (w->wavelet + 1 - w->cas);
-               a += w->sn;
-               size -= w->sn;
-               count = w->dn;
-       }
+    OPJ_FLOAT32* OPJ_RESTRICT bi = (OPJ_FLOAT32*)(w->wavelet + w->cas);
+    OPJ_INT32 count = w->sn;
+    OPJ_INT32 i, k;
+
+    for (k = 0; k < 2; ++k) {
+        if (count + 3 * x < size && ((size_t) a & 0x0f) == 0 &&
+                ((size_t) bi & 0x0f) == 0 && (x & 0x0f) == 0) {
+            /* Fast code path */
+            for (i = 0; i < count; ++i) {
+                OPJ_INT32 j = i;
+                bi[i * 8    ] = a[j];
+                j += x;
+                bi[i * 8 + 1] = a[j];
+                j += x;
+                bi[i * 8 + 2] = a[j];
+                j += x;
+                bi[i * 8 + 3] = a[j];
+            }
+        } else {
+            /* Slow code path */
+            for (i = 0; i < count; ++i) {
+                OPJ_INT32 j = i;
+                bi[i * 8    ] = a[j];
+                j += x;
+                if (j >= size) {
+                    continue;
+                }
+                bi[i * 8 + 1] = a[j];
+                j += x;
+                if (j >= size) {
+                    continue;
+                }
+                bi[i * 8 + 2] = a[j];
+                j += x;
+                if (j >= size) {
+                    continue;
+                }
+                bi[i * 8 + 3] = a[j]; /* This one*/
+            }
+        }
+
+        bi = (OPJ_FLOAT32*)(w->wavelet + 1 - w->cas);
+        a += w->sn;
+        size -= w->sn;
+        count = w->dn;
+    }
 }
 
-static void opj_v4dwt_interleave_v(opj_v4dwt_t* OPJ_RESTRICT v , OPJ_FLOAT32* OPJ_RESTRICT a , OPJ_INT32 x, OPJ_INT32 nb_elts_read){
-       opj_v4_t* OPJ_RESTRICT bi = v->wavelet + v->cas;
-       OPJ_INT32 i;
+static void opj_v4dwt_interleave_v(opj_v4dwt_t* OPJ_RESTRICT v,
+                                   OPJ_FLOAT32* OPJ_RESTRICT a, OPJ_INT32 x, OPJ_INT32 nb_elts_read)
+{
+    opj_v4_t* OPJ_RESTRICT bi = v->wavelet + v->cas;
+    OPJ_INT32 i;
 
-       for(i = 0; i < v->sn; ++i){
-               memcpy(&bi[i*2], &a[i*x], (size_t)nb_elts_read * sizeof(OPJ_FLOAT32));
-       }
+    for (i = 0; i < v->sn; ++i) {
+        memcpy(&bi[i * 2], &a[i * x], (size_t)nb_elts_read * sizeof(OPJ_FLOAT32));
+    }
 
-       a += v->sn * x;
-       bi = v->wavelet + 1 - v->cas;
+    a += v->sn * x;
+    bi = v->wavelet + 1 - v->cas;
 
-       for(i = 0; i < v->dn; ++i){
-               memcpy(&bi[i*2], &a[i*x], (size_t)nb_elts_read * sizeof(OPJ_FLOAT32));
-       }
+    for (i = 0; i < v->dn; ++i) {
+        memcpy(&bi[i * 2], &a[i * x], (size_t)nb_elts_read * sizeof(OPJ_FLOAT32));
+    }
 }
 
 #ifdef __SSE__
 
-static void opj_v4dwt_decode_step1_sse(opj_v4_t* w, OPJ_INT32 count, const __m128 c){
-       __m128* OPJ_RESTRICT vw = (__m128*) w;
-       OPJ_INT32 i;
-       /* 4x unrolled loop */
-       for(i = 0; i < count >> 2; ++i){
-               *vw = _mm_mul_ps(*vw, c);
-               vw += 2;
-               *vw = _mm_mul_ps(*vw, c);
-               vw += 2;
-               *vw = _mm_mul_ps(*vw, c);
-               vw += 2;
-               *vw = _mm_mul_ps(*vw, c);
-               vw += 2;
-       }
-       count &= 3;
-       for(i = 0; i < count; ++i){
-               *vw = _mm_mul_ps(*vw, c);
-               vw += 2;
-       }
+static void opj_v4dwt_decode_step1_sse(opj_v4_t* w, OPJ_INT32 count,
+                                       const __m128 c)
+{
+    __m128* OPJ_RESTRICT vw = (__m128*) w;
+    OPJ_INT32 i;
+    /* 4x unrolled loop */
+    for (i = 0; i < count >> 2; ++i) {
+        *vw = _mm_mul_ps(*vw, c);
+        vw += 2;
+        *vw = _mm_mul_ps(*vw, c);
+        vw += 2;
+        *vw = _mm_mul_ps(*vw, c);
+        vw += 2;
+        *vw = _mm_mul_ps(*vw, c);
+        vw += 2;
+    }
+    count &= 3;
+    for (i = 0; i < count; ++i) {
+        *vw = _mm_mul_ps(*vw, c);
+        vw += 2;
+    }
 }
 
-void opj_v4dwt_decode_step2_sse(opj_v4_t* l, opj_v4_t* w, OPJ_INT32 k, OPJ_INT32 m, __m128 c){
-       __m128* OPJ_RESTRICT vl = (__m128*) l;
-       __m128* OPJ_RESTRICT vw = (__m128*) w;
-       OPJ_INT32 i;
-       __m128 tmp1, tmp2, tmp3;
-       tmp1 = vl[0];
-       for(i = 0; i < m; ++i){
-               tmp2 = vw[-1];
-               tmp3 = vw[ 0];
-               vw[-1] = _mm_add_ps(tmp2, _mm_mul_ps(_mm_add_ps(tmp1, tmp3), c));
-               tmp1 = tmp3;
-               vw += 2;
-       }
-       vl = vw - 2;
-       if(m >= k){
-               return;
-       }
-       c = _mm_add_ps(c, c);
-       c = _mm_mul_ps(c, vl[0]);
-       for(; m < k; ++m){
-               __m128 tmp = vw[-1];
-               vw[-1] = _mm_add_ps(tmp, c);
-               vw += 2;
-       }
+void opj_v4dwt_decode_step2_sse(opj_v4_t* l, opj_v4_t* w, OPJ_INT32 k,
+                                OPJ_INT32 m, __m128 c)
+{
+    __m128* OPJ_RESTRICT vl = (__m128*) l;
+    __m128* OPJ_RESTRICT vw = (__m128*) w;
+    OPJ_INT32 i;
+    __m128 tmp1, tmp2, tmp3;
+    tmp1 = vl[0];
+    for (i = 0; i < m; ++i) {
+        tmp2 = vw[-1];
+        tmp3 = vw[ 0];
+        vw[-1] = _mm_add_ps(tmp2, _mm_mul_ps(_mm_add_ps(tmp1, tmp3), c));
+        tmp1 = tmp3;
+        vw += 2;
+    }
+    vl = vw - 2;
+    if (m >= k) {
+        return;
+    }
+    c = _mm_add_ps(c, c);
+    c = _mm_mul_ps(c, vl[0]);
+    for (; m < k; ++m) {
+        __m128 tmp = vw[-1];
+        vw[-1] = _mm_add_ps(tmp, c);
+        vw += 2;
+    }
 }
 
 #else
 
-static void opj_v4dwt_decode_step1(opj_v4_t* w, OPJ_INT32 count, const OPJ_FLOAT32 c)
+static void opj_v4dwt_decode_step1(opj_v4_t* w, OPJ_INT32 count,
+                                   const OPJ_FLOAT32 c)
 {
-       OPJ_FLOAT32* OPJ_RESTRICT fw = (OPJ_FLOAT32*) w;
-       OPJ_INT32 i;
-       for(i = 0; i < count; ++i){
-               OPJ_FLOAT32 tmp1 = fw[i*8    ];
-               OPJ_FLOAT32 tmp2 = fw[i*8 + 1];
-               OPJ_FLOAT32 tmp3 = fw[i*8 + 2];
-               OPJ_FLOAT32 tmp4 = fw[i*8 + 3];
-               fw[i*8    ] = tmp1 * c;
-               fw[i*8 + 1] = tmp2 * c;
-               fw[i*8 + 2] = tmp3 * c;
-               fw[i*8 + 3] = tmp4 * c;
-       }
+    OPJ_FLOAT32* OPJ_RESTRICT fw = (OPJ_FLOAT32*) w;
+    OPJ_INT32 i;
+    for (i = 0; i < count; ++i) {
+        OPJ_FLOAT32 tmp1 = fw[i * 8    ];
+        OPJ_FLOAT32 tmp2 = fw[i * 8 + 1];
+        OPJ_FLOAT32 tmp3 = fw[i * 8 + 2];
+        OPJ_FLOAT32 tmp4 = fw[i * 8 + 3];
+        fw[i * 8    ] = tmp1 * c;
+        fw[i * 8 + 1] = tmp2 * c;
+        fw[i * 8 + 2] = tmp3 * c;
+        fw[i * 8 + 3] = tmp4 * c;
+    }
 }
 
-static void opj_v4dwt_decode_step2(opj_v4_t* l, opj_v4_t* w, OPJ_INT32 k, OPJ_INT32 m, OPJ_FLOAT32 c)
+static void opj_v4dwt_decode_step2(opj_v4_t* l, opj_v4_t* w, OPJ_INT32 k,
+                                   OPJ_INT32 m, OPJ_FLOAT32 c)
 {
-       OPJ_FLOAT32* fl = (OPJ_FLOAT32*) l;
-       OPJ_FLOAT32* fw = (OPJ_FLOAT32*) w;
-       OPJ_INT32 i;
-       for(i = 0; i < m; ++i){
-               OPJ_FLOAT32 tmp1_1 = fl[0];
-               OPJ_FLOAT32 tmp1_2 = fl[1];
-               OPJ_FLOAT32 tmp1_3 = fl[2];
-               OPJ_FLOAT32 tmp1_4 = fl[3];
-               OPJ_FLOAT32 tmp2_1 = fw[-4];
-               OPJ_FLOAT32 tmp2_2 = fw[-3];
-               OPJ_FLOAT32 tmp2_3 = fw[-2];
-               OPJ_FLOAT32 tmp2_4 = fw[-1];
-               OPJ_FLOAT32 tmp3_1 = fw[0];
-               OPJ_FLOAT32 tmp3_2 = fw[1];
-               OPJ_FLOAT32 tmp3_3 = fw[2];
-               OPJ_FLOAT32 tmp3_4 = fw[3];
-               fw[-4] = tmp2_1 + ((tmp1_1 + tmp3_1) * c);
-               fw[-3] = tmp2_2 + ((tmp1_2 + tmp3_2) * c);
-               fw[-2] = tmp2_3 + ((tmp1_3 + tmp3_3) * c);
-               fw[-1] = tmp2_4 + ((tmp1_4 + tmp3_4) * c);
-               fl = fw;
-               fw += 8;
-       }
-       if(m < k){
-               OPJ_FLOAT32 c1;
-               OPJ_FLOAT32 c2;
-               OPJ_FLOAT32 c3;
-               OPJ_FLOAT32 c4;
-               c += c;
-               c1 = fl[0] * c;
-               c2 = fl[1] * c;
-               c3 = fl[2] * c;
-               c4 = fl[3] * c;
-               for(; m < k; ++m){
-                       OPJ_FLOAT32 tmp1 = fw[-4];
-                       OPJ_FLOAT32 tmp2 = fw[-3];
-                       OPJ_FLOAT32 tmp3 = fw[-2];
-                       OPJ_FLOAT32 tmp4 = fw[-1];
-                       fw[-4] = tmp1 + c1;
-                       fw[-3] = tmp2 + c2;
-                       fw[-2] = tmp3 + c3;
-                       fw[-1] = tmp4 + c4;
-                       fw += 8;
-               }
-       }
+    OPJ_FLOAT32* fl = (OPJ_FLOAT32*) l;
+    OPJ_FLOAT32* fw = (OPJ_FLOAT32*) w;
+    OPJ_INT32 i;
+    for (i = 0; i < m; ++i) {
+        OPJ_FLOAT32 tmp1_1 = fl[0];
+        OPJ_FLOAT32 tmp1_2 = fl[1];
+        OPJ_FLOAT32 tmp1_3 = fl[2];
+        OPJ_FLOAT32 tmp1_4 = fl[3];
+        OPJ_FLOAT32 tmp2_1 = fw[-4];
+        OPJ_FLOAT32 tmp2_2 = fw[-3];
+        OPJ_FLOAT32 tmp2_3 = fw[-2];
+        OPJ_FLOAT32 tmp2_4 = fw[-1];
+        OPJ_FLOAT32 tmp3_1 = fw[0];
+        OPJ_FLOAT32 tmp3_2 = fw[1];
+        OPJ_FLOAT32 tmp3_3 = fw[2];
+        OPJ_FLOAT32 tmp3_4 = fw[3];
+        fw[-4] = tmp2_1 + ((tmp1_1 + tmp3_1) * c);
+        fw[-3] = tmp2_2 + ((tmp1_2 + tmp3_2) * c);
+        fw[-2] = tmp2_3 + ((tmp1_3 + tmp3_3) * c);
+        fw[-1] = tmp2_4 + ((tmp1_4 + tmp3_4) * c);
+        fl = fw;
+        fw += 8;
+    }
+    if (m < k) {
+        OPJ_FLOAT32 c1;
+        OPJ_FLOAT32 c2;
+        OPJ_FLOAT32 c3;
+        OPJ_FLOAT32 c4;
+        c += c;
+        c1 = fl[0] * c;
+        c2 = fl[1] * c;
+        c3 = fl[2] * c;
+        c4 = fl[3] * c;
+        for (; m < k; ++m) {
+            OPJ_FLOAT32 tmp1 = fw[-4];
+            OPJ_FLOAT32 tmp2 = fw[-3];
+            OPJ_FLOAT32 tmp3 = fw[-2];
+            OPJ_FLOAT32 tmp4 = fw[-1];
+            fw[-4] = tmp1 + c1;
+            fw[-3] = tmp2 + c2;
+            fw[-2] = tmp3 + c3;
+            fw[-1] = tmp4 + c4;
+            fw += 8;
+        }
+    }
 }
 
 #endif
@@ -982,34 +1059,42 @@ static void opj_v4dwt_decode_step2(opj_v4_t* l, opj_v4_t* w, OPJ_INT32 k, OPJ_IN
 /* </summary>                            */
 static void opj_v4dwt_decode(opj_v4dwt_t* OPJ_RESTRICT dwt)
 {
-       OPJ_INT32 a, b;
-       if(dwt->cas == 0) {
-               if(!((dwt->dn > 0) || (dwt->sn > 1))){
-                       return;
-               }
-               a = 0;
-               b = 1;
-       }else{
-               if(!((dwt->sn > 0) || (dwt->dn > 1))) {
-                       return;
-               }
-               a = 1;
-               b = 0;
-       }
+    OPJ_INT32 a, b;
+    if (dwt->cas == 0) {
+        if (!((dwt->dn > 0) || (dwt->sn > 1))) {
+            return;
+        }
+        a = 0;
+        b = 1;
+    } else {
+        if (!((dwt->sn > 0) || (dwt->dn > 1))) {
+            return;
+        }
+        a = 1;
+        b = 0;
+    }
 #ifdef __SSE__
-       opj_v4dwt_decode_step1_sse(dwt->wavelet+a, dwt->sn, _mm_set1_ps(opj_K));
-       opj_v4dwt_decode_step1_sse(dwt->wavelet+b, dwt->dn, _mm_set1_ps(opj_c13318));
-       opj_v4dwt_decode_step2_sse(dwt->wavelet+b, dwt->wavelet+a+1, dwt->sn, opj_int_min(dwt->sn, dwt->dn-a), _mm_set1_ps(opj_dwt_delta));
-       opj_v4dwt_decode_step2_sse(dwt->wavelet+a, dwt->wavelet+b+1, dwt->dn, opj_int_min(dwt->dn, dwt->sn-b), _mm_set1_ps(opj_dwt_gamma));
-       opj_v4dwt_decode_step2_sse(dwt->wavelet+b, dwt->wavelet+a+1, dwt->sn, opj_int_min(dwt->sn, dwt->dn-a), _mm_set1_ps(opj_dwt_beta));
-       opj_v4dwt_decode_step2_sse(dwt->wavelet+a, dwt->wavelet+b+1, dwt->dn, opj_int_min(dwt->dn, dwt->sn-b), _mm_set1_ps(opj_dwt_alpha));
+    opj_v4dwt_decode_step1_sse(dwt->wavelet + a, dwt->sn, _mm_set1_ps(opj_K));
+    opj_v4dwt_decode_step1_sse(dwt->wavelet + b, dwt->dn, _mm_set1_ps(opj_c13318));
+    opj_v4dwt_decode_step2_sse(dwt->wavelet + b, dwt->wavelet + a + 1, dwt->sn,
+                               opj_int_min(dwt->sn, dwt->dn - a), _mm_set1_ps(opj_dwt_delta));
+    opj_v4dwt_decode_step2_sse(dwt->wavelet + a, dwt->wavelet + b + 1, dwt->dn,
+                               opj_int_min(dwt->dn, dwt->sn - b), _mm_set1_ps(opj_dwt_gamma));
+    opj_v4dwt_decode_step2_sse(dwt->wavelet + b, dwt->wavelet + a + 1, dwt->sn,
+                               opj_int_min(dwt->sn, dwt->dn - a), _mm_set1_ps(opj_dwt_beta));
+    opj_v4dwt_decode_step2_sse(dwt->wavelet + a, dwt->wavelet + b + 1, dwt->dn,
+                               opj_int_min(dwt->dn, dwt->sn - b), _mm_set1_ps(opj_dwt_alpha));
 #else
-       opj_v4dwt_decode_step1(dwt->wavelet+a, dwt->sn, opj_K);
-       opj_v4dwt_decode_step1(dwt->wavelet+b, dwt->dn, opj_c13318);
-       opj_v4dwt_decode_step2(dwt->wavelet+b, dwt->wavelet+a+1, dwt->sn, opj_int_min(dwt->sn, dwt->dn-a), opj_dwt_delta);
-       opj_v4dwt_decode_step2(dwt->wavelet+a, dwt->wavelet+b+1, dwt->dn, opj_int_min(dwt->dn, dwt->sn-b), opj_dwt_gamma);
-       opj_v4dwt_decode_step2(dwt->wavelet+b, dwt->wavelet+a+1, dwt->sn, opj_int_min(dwt->sn, dwt->dn-a), opj_dwt_beta);
-       opj_v4dwt_decode_step2(dwt->wavelet+a, dwt->wavelet+b+1, dwt->dn, opj_int_min(dwt->dn, dwt->sn-b), opj_dwt_alpha);
+    opj_v4dwt_decode_step1(dwt->wavelet + a, dwt->sn, opj_K);
+    opj_v4dwt_decode_step1(dwt->wavelet + b, dwt->dn, opj_c13318);
+    opj_v4dwt_decode_step2(dwt->wavelet + b, dwt->wavelet + a + 1, dwt->sn,
+                           opj_int_min(dwt->sn, dwt->dn - a), opj_dwt_delta);
+    opj_v4dwt_decode_step2(dwt->wavelet + a, dwt->wavelet + b + 1, dwt->dn,
+                           opj_int_min(dwt->dn, dwt->sn - b), opj_dwt_gamma);
+    opj_v4dwt_decode_step2(dwt->wavelet + b, dwt->wavelet + a + 1, dwt->sn,
+                           opj_int_min(dwt->sn, dwt->dn - a), opj_dwt_beta);
+    opj_v4dwt_decode_step2(dwt->wavelet + a, dwt->wavelet + b + 1, dwt->dn,
+                           opj_int_min(dwt->dn, dwt->sn - b), opj_dwt_alpha);
 #endif
 }
 
@@ -1017,115 +1102,124 @@ static void opj_v4dwt_decode(opj_v4dwt_t* OPJ_RESTRICT dwt)
 /* <summary>                             */
 /* Inverse 9-7 wavelet transform in 2-D. */
 /* </summary>                            */
-OPJ_BOOL opj_dwt_decode_real(opj_tcd_tilecomp_t* OPJ_RESTRICT tilec, OPJ_UINT32 numres)
+OPJ_BOOL opj_dwt_decode_real(opj_tcd_tilecomp_t* OPJ_RESTRICT tilec,
+                             OPJ_UINT32 numres)
 {
-       opj_v4dwt_t h;
-       opj_v4dwt_t v;
-
-       opj_tcd_resolution_t* res = tilec->resolutions;
-
-       OPJ_UINT32 rw = (OPJ_UINT32)(res->x1 - res->x0);        /* width of the resolution level computed */
-       OPJ_UINT32 rh = (OPJ_UINT32)(res->y1 - res->y0);        /* height of the resolution level computed */
-
-       OPJ_UINT32 w = (OPJ_UINT32)(tilec->x1 - tilec->x0);
-
-       size_t l_data_size;
-       
-       l_data_size = opj_dwt_max_resolution(res, numres);
-       /* overflow check */
-       if (l_data_size > (SIZE_MAX - 5U)) {
-               /* FIXME event manager error callback */
-               return OPJ_FALSE;
-       }
-       l_data_size += 5U;
-       /* overflow check */
-       if (l_data_size > (SIZE_MAX / sizeof(opj_v4_t))) {
-               /* FIXME event manager error callback */
-               return OPJ_FALSE;
-       }
-       h.wavelet = (opj_v4_t*) opj_aligned_malloc(l_data_size * sizeof(opj_v4_t));
-       if (!h.wavelet) {
-               /* FIXME event manager error callback */
-               return OPJ_FALSE;
-       }
-       v.wavelet = h.wavelet;
-
-       while( --numres) {
-               OPJ_FLOAT32 * OPJ_RESTRICT aj = (OPJ_FLOAT32*) tilec->data;
-               OPJ_UINT32 bufsize = (OPJ_UINT32)((tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0));
-               OPJ_INT32 j;
-
-               h.sn = (OPJ_INT32)rw;
-               v.sn = (OPJ_INT32)rh;
-
-               ++res;
-
-               rw = (OPJ_UINT32)(res->x1 - res->x0);   /* width of the resolution level computed */
-               rh = (OPJ_UINT32)(res->y1 - res->y0);   /* height of the resolution level computed */
-
-               h.dn = (OPJ_INT32)(rw - (OPJ_UINT32)h.sn);
-               h.cas = res->x0 % 2;
-
-               for(j = (OPJ_INT32)rh; j > 3; j -= 4) {
-                       OPJ_INT32 k;
-                       opj_v4dwt_interleave_h(&h, aj, (OPJ_INT32)w, (OPJ_INT32)bufsize);
-                       opj_v4dwt_decode(&h);
-
-                       for(k = (OPJ_INT32)rw; --k >= 0;){
-                               aj[k               ] = h.wavelet[k].f[0];
-                               aj[k+(OPJ_INT32)w  ] = h.wavelet[k].f[1];
-                               aj[k+(OPJ_INT32)w*2] = h.wavelet[k].f[2];
-                               aj[k+(OPJ_INT32)w*3] = h.wavelet[k].f[3];
-                       }
-
-                       aj += w*4;
-                       bufsize -= w*4;
-               }
-
-               if (rh & 0x03) {
-                       OPJ_INT32 k;
-                       j = rh & 0x03;
-                       opj_v4dwt_interleave_h(&h, aj, (OPJ_INT32)w, (OPJ_INT32)bufsize);
-                       opj_v4dwt_decode(&h);
-                       for(k = (OPJ_INT32)rw; --k >= 0;){
-                               switch(j) {
-                                       case 3: aj[k+(OPJ_INT32)w*2] = h.wavelet[k].f[2];
-                                       case 2: aj[k+(OPJ_INT32)w  ] = h.wavelet[k].f[1];
-                                       case 1: aj[k               ] = h.wavelet[k].f[0];
-                               }
-                       }
-               }
-
-               v.dn = (OPJ_INT32)(rh - (OPJ_UINT32)v.sn);
-               v.cas = res->y0 % 2;
-
-               aj = (OPJ_FLOAT32*) tilec->data;
-               for(j = (OPJ_INT32)rw; j > 3; j -= 4){
-                       OPJ_UINT32 k;
-
-                       opj_v4dwt_interleave_v(&v, aj, (OPJ_INT32)w, 4);
-                       opj_v4dwt_decode(&v);
-
-                       for(k = 0; k < rh; ++k){
-                               memcpy(&aj[k*w], &v.wavelet[k], 4 * sizeof(OPJ_FLOAT32));
-                       }
-                       aj += 4;
-               }
-
-               if (rw & 0x03){
-                       OPJ_UINT32 k;
-
-                       j = rw & 0x03;
-
-                       opj_v4dwt_interleave_v(&v, aj, (OPJ_INT32)w, j);
-                       opj_v4dwt_decode(&v);
-
-                       for(k = 0; k < rh; ++k){
-                               memcpy(&aj[k*w], &v.wavelet[k], (size_t)j * sizeof(OPJ_FLOAT32));
-                       }
-               }
-       }
-
-       opj_aligned_free(h.wavelet);
-       return OPJ_TRUE;
+    opj_v4dwt_t h;
+    opj_v4dwt_t v;
+
+    opj_tcd_resolution_t* res = tilec->resolutions;
+
+    OPJ_UINT32 rw = (OPJ_UINT32)(res->x1 -
+                                 res->x0);    /* width of the resolution level computed */
+    OPJ_UINT32 rh = (OPJ_UINT32)(res->y1 -
+                                 res->y0);    /* height of the resolution level computed */
+
+    OPJ_UINT32 w = (OPJ_UINT32)(tilec->x1 - tilec->x0);
+
+    size_t l_data_size;
+
+    l_data_size = opj_dwt_max_resolution(res, numres);
+    /* overflow check */
+    if (l_data_size > (SIZE_MAX - 5U)) {
+        /* FIXME event manager error callback */
+        return OPJ_FALSE;
+    }
+    l_data_size += 5U;
+    /* overflow check */
+    if (l_data_size > (SIZE_MAX / sizeof(opj_v4_t))) {
+        /* FIXME event manager error callback */
+        return OPJ_FALSE;
+    }
+    h.wavelet = (opj_v4_t*) opj_aligned_malloc(l_data_size * sizeof(opj_v4_t));
+    if (!h.wavelet) {
+        /* FIXME event manager error callback */
+        return OPJ_FALSE;
+    }
+    v.wavelet = h.wavelet;
+
+    while (--numres) {
+        OPJ_FLOAT32 * OPJ_RESTRICT aj = (OPJ_FLOAT32*) tilec->data;
+        OPJ_UINT32 bufsize = (OPJ_UINT32)((tilec->x1 - tilec->x0) *
+                                          (tilec->y1 - tilec->y0));
+        OPJ_INT32 j;
+
+        h.sn = (OPJ_INT32)rw;
+        v.sn = (OPJ_INT32)rh;
+
+        ++res;
+
+        rw = (OPJ_UINT32)(res->x1 -
+                          res->x0);   /* width of the resolution level computed */
+        rh = (OPJ_UINT32)(res->y1 -
+                          res->y0);   /* height of the resolution level computed */
+
+        h.dn = (OPJ_INT32)(rw - (OPJ_UINT32)h.sn);
+        h.cas = res->x0 % 2;
+
+        for (j = (OPJ_INT32)rh; j > 3; j -= 4) {
+            OPJ_INT32 k;
+            opj_v4dwt_interleave_h(&h, aj, (OPJ_INT32)w, (OPJ_INT32)bufsize);
+            opj_v4dwt_decode(&h);
+
+            for (k = (OPJ_INT32)rw; --k >= 0;) {
+                aj[k               ] = h.wavelet[k].f[0];
+                aj[k + (OPJ_INT32)w  ] = h.wavelet[k].f[1];
+                aj[k + (OPJ_INT32)w * 2] = h.wavelet[k].f[2];
+                aj[k + (OPJ_INT32)w * 3] = h.wavelet[k].f[3];
+            }
+
+            aj += w * 4;
+            bufsize -= w * 4;
+        }
+
+        if (rh & 0x03) {
+            OPJ_INT32 k;
+            j = rh & 0x03;
+            opj_v4dwt_interleave_h(&h, aj, (OPJ_INT32)w, (OPJ_INT32)bufsize);
+            opj_v4dwt_decode(&h);
+            for (k = (OPJ_INT32)rw; --k >= 0;) {
+                switch (j) {
+                case 3:
+                    aj[k + (OPJ_INT32)w * 2] = h.wavelet[k].f[2];
+                case 2:
+                    aj[k + (OPJ_INT32)w  ] = h.wavelet[k].f[1];
+                case 1:
+                    aj[k               ] = h.wavelet[k].f[0];
+                }
+            }
+        }
+
+        v.dn = (OPJ_INT32)(rh - (OPJ_UINT32)v.sn);
+        v.cas = res->y0 % 2;
+
+        aj = (OPJ_FLOAT32*) tilec->data;
+        for (j = (OPJ_INT32)rw; j > 3; j -= 4) {
+            OPJ_UINT32 k;
+
+            opj_v4dwt_interleave_v(&v, aj, (OPJ_INT32)w, 4);
+            opj_v4dwt_decode(&v);
+
+            for (k = 0; k < rh; ++k) {
+                memcpy(&aj[k * w], &v.wavelet[k], 4 * sizeof(OPJ_FLOAT32));
+            }
+            aj += 4;
+        }
+
+        if (rw & 0x03) {
+            OPJ_UINT32 k;
+
+            j = rw & 0x03;
+
+            opj_v4dwt_interleave_v(&v, aj, (OPJ_INT32)w, j);
+            opj_v4dwt_decode(&v);
+
+            for (k = 0; k < rh; ++k) {
+                memcpy(&aj[k * w], &v.wavelet[k], (size_t)j * sizeof(OPJ_FLOAT32));
+            }
+        }
+    }
+
+    opj_aligned_free(h.wavelet);
+    return OPJ_TRUE;
 }
index b6034b42d0a3cf3ed6c173a90afae61a0d09be99..3251849da2760fd363e5f8c05e78f0edcee2b074 100644 (file)
@@ -1,11 +1,11 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR 
+ * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR
  * Copyright (c) 2012, CS Systemes d'Information, France
  * All rights reserved.
  *
 #ifdef OPJ_CODE_NOT_USED
 #ifndef _WIN32
 static char*
-i2a(unsigned i, char *a, unsigned r) {
-       if (i/r > 0) a = i2a(i/r,a,r);
-       *a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i%r];
-       return a+1;
+i2a(unsigned i, char *a, unsigned r)
+{
+    if (i / r > 0) {
+        a = i2a(i / r, a, r);
+    }
+    *a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i % r];
+    return a + 1;
 }
 
-/** 
- Transforms integer i into an ascii string and stores the result in a; 
+/**
+ Transforms integer i into an ascii string and stores the result in a;
  string is encoded in the base indicated by r.
  @param i Number to be converted
  @param a String result
@@ -55,14 +58,16 @@ i2a(unsigned i, char *a, unsigned r) {
  @return Returns a
 */
 static char *
-_itoa(int i, char *a, int r) {
-       r = ((r < 2) || (r > 36)) ? 10 : r;
-       if(i < 0) {
-               *a = '-';
-               *i2a(-i, a+1, r) = 0;
-       }
-       else *i2a(i, a, r) = 0;
-       return a;
+_itoa(int i, char *a, int r)
+{
+    r = ((r < 2) || (r > 36)) ? 10 : r;
+    if (i < 0) {
+        *a = '-';
+        *i2a(-i, a + 1, r) = 0;
+    } else {
+        *i2a(i, a, r) = 0;
+    }
+    return a;
 }
 
 #endif /* !_WIN32 */
@@ -73,7 +78,7 @@ _itoa(int i, char *a, int r) {
  * Default callback function.
  * Do nothing.
  */
-static void opj_default_callback (const char *msg, void *client_data)
+static void opj_default_callback(const char *msg, void *client_data)
 {
     OPJ_ARG_NOT_USED(msg);
     OPJ_ARG_NOT_USED(client_data);
@@ -83,64 +88,66 @@ static void opj_default_callback (const char *msg, void *client_data)
 
 
 /* ----------------------------------------------------------------------- */
-OPJ_BOOL opj_event_msg(opj_event_mgr_t* p_event_mgr, OPJ_INT32 event_type, const char *fmt, ...) {
+OPJ_BOOL opj_event_msg(opj_event_mgr_t* p_event_mgr, OPJ_INT32 event_type,
+                       const char *fmt, ...)
+{
 #define OPJ_MSG_SIZE 512 /* 512 bytes should be more than enough for a short message */
-       opj_msg_callback msg_handler = 00;
-       void * l_data = 00;
+    opj_msg_callback msg_handler = 00;
+    void * l_data = 00;
 
-       if(p_event_mgr != 00) {
-               switch(event_type) {
-                       case EVT_ERROR:
-                               msg_handler = p_event_mgr->error_handler;
-                               l_data = p_event_mgr->m_error_data;
-                               break;
-                       case EVT_WARNING:
-                               msg_handler = p_event_mgr->warning_handler;
-                               l_data = p_event_mgr->m_warning_data;
-                               break;
-                       case EVT_INFO:
-                               msg_handler = p_event_mgr->info_handler;
-                               l_data = p_event_mgr->m_info_data;
-                               break;
-                       default:
-                               break;
-               }
-               if(msg_handler == 00) {
-                       return OPJ_FALSE;
-               }
-       } else {
-               return OPJ_FALSE;
-       }
+    if (p_event_mgr != 00) {
+        switch (event_type) {
+        case EVT_ERROR:
+            msg_handler = p_event_mgr->error_handler;
+            l_data = p_event_mgr->m_error_data;
+            break;
+        case EVT_WARNING:
+            msg_handler = p_event_mgr->warning_handler;
+            l_data = p_event_mgr->m_warning_data;
+            break;
+        case EVT_INFO:
+            msg_handler = p_event_mgr->info_handler;
+            l_data = p_event_mgr->m_info_data;
+            break;
+        default:
+            break;
+        }
+        if (msg_handler == 00) {
+            return OPJ_FALSE;
+        }
+    } else {
+        return OPJ_FALSE;
+    }
 
-       if ((fmt != 00) && (p_event_mgr != 00)) {
-               va_list arg;
-               size_t str_length/*, i, j*/; /* UniPG */
-               char message[OPJ_MSG_SIZE];
-               memset(message, 0, OPJ_MSG_SIZE);
-               /* initialize the optional parameter list */
-               va_start(arg, fmt);
-               /* check the length of the format string */
-               str_length = (strlen(fmt) > OPJ_MSG_SIZE) ? OPJ_MSG_SIZE : strlen(fmt);
+    if ((fmt != 00) && (p_event_mgr != 00)) {
+        va_list arg;
+        size_t str_length/*, i, j*/; /* UniPG */
+        char message[OPJ_MSG_SIZE];
+        memset(message, 0, OPJ_MSG_SIZE);
+        /* initialize the optional parameter list */
+        va_start(arg, fmt);
+        /* check the length of the format string */
+        str_length = (strlen(fmt) > OPJ_MSG_SIZE) ? OPJ_MSG_SIZE : strlen(fmt);
         (void)str_length;
-               /* parse the format string and put the result in 'message' */
-               vsnprintf(message, OPJ_MSG_SIZE, fmt, arg); /* UniPG */
-               /* deinitialize the optional parameter list */
-               va_end(arg);
+        /* parse the format string and put the result in 'message' */
+        vsnprintf(message, OPJ_MSG_SIZE, fmt, arg); /* UniPG */
+        /* deinitialize the optional parameter list */
+        va_end(arg);
 
-               /* output the message to the user program */
-               msg_handler(message, l_data);
-       }
+        /* output the message to the user program */
+        msg_handler(message, l_data);
+    }
 
-       return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 void opj_set_default_event_handler(opj_event_mgr_t * p_manager)
 {
-       p_manager->m_error_data = 00;
-       p_manager->m_warning_data = 00;
-       p_manager->m_info_data = 00;
-       p_manager->error_handler = opj_default_callback;
-       p_manager->info_handler = opj_default_callback;
-       p_manager->warning_handler = opj_default_callback;
+    p_manager->m_error_data = 00;
+    p_manager->m_warning_data = 00;
+    p_manager->m_info_data = 00;
+    p_manager->error_handler = opj_default_callback;
+    p_manager->info_handler = opj_default_callback;
+    p_manager->warning_handler = opj_default_callback;
 }
 
index a7ea11d59b28c7cbd1df0b00694d8617b0a37f45..e1c1af3897c72599774e28e20783a87efb4d9801 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
 
 opj_procedure_list_t *  opj_procedure_list_create()
 {
-        /* memory allocation */
-        opj_procedure_list_t * l_validation = (opj_procedure_list_t *) opj_calloc(1,sizeof(opj_procedure_list_t));
-        if (! l_validation)
-        {
-                return 00;
-        }
-        /* initialization */
-        l_validation->m_nb_max_procedures = OPJ_VALIDATION_SIZE;
-        l_validation->m_procedures = (opj_procedure*)opj_calloc(OPJ_VALIDATION_SIZE, sizeof(opj_procedure));
-        if (! l_validation->m_procedures)
-        {
-                opj_free(l_validation);
-                return 00;
-        }
-        return l_validation;
+    /* memory allocation */
+    opj_procedure_list_t * l_validation = (opj_procedure_list_t *) opj_calloc(1,
+                                          sizeof(opj_procedure_list_t));
+    if (! l_validation) {
+        return 00;
+    }
+    /* initialization */
+    l_validation->m_nb_max_procedures = OPJ_VALIDATION_SIZE;
+    l_validation->m_procedures = (opj_procedure*)opj_calloc(OPJ_VALIDATION_SIZE,
+                                 sizeof(opj_procedure));
+    if (! l_validation->m_procedures) {
+        opj_free(l_validation);
+        return 00;
+    }
+    return l_validation;
 }
 
 void  opj_procedure_list_destroy(opj_procedure_list_t * p_list)
 {
-        if (! p_list)
-        {
-                return;
-        }
-        /* initialization */
-        if (p_list->m_procedures)
-        {
-                opj_free(p_list->m_procedures);
-        }
-        opj_free(p_list);
+    if (! p_list) {
+        return;
+    }
+    /* initialization */
+    if (p_list->m_procedures) {
+        opj_free(p_list->m_procedures);
+    }
+    opj_free(p_list);
 }
 
-OPJ_BOOL opj_procedure_list_add_procedure (opj_procedure_list_t * p_validation_list, opj_procedure p_procedure, opj_event_mgr_t* p_manager )
+OPJ_BOOL opj_procedure_list_add_procedure(opj_procedure_list_t *
+        p_validation_list, opj_procedure p_procedure, opj_event_mgr_t* p_manager)
 {
-       
-        assert(p_manager != NULL);
-       
-        if (p_validation_list->m_nb_max_procedures == p_validation_list->m_nb_procedures)
-        {
-                opj_procedure * new_procedures;
 
-                p_validation_list->m_nb_max_procedures += OPJ_VALIDATION_SIZE;
-                new_procedures = (opj_procedure*)opj_realloc(
-                        p_validation_list->m_procedures,
-                        p_validation_list->m_nb_max_procedures * sizeof(opj_procedure));
-                if (! new_procedures)
-                {
-                        opj_free(p_validation_list->m_procedures);
-                        p_validation_list->m_nb_max_procedures = 0;
-                        p_validation_list->m_nb_procedures = 0;
-                        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to add a new validation procedure\n");
-                        return OPJ_FALSE;
-                }
-                else
-                {
-                        p_validation_list->m_procedures = new_procedures;
-                }
+    assert(p_manager != NULL);
+
+    if (p_validation_list->m_nb_max_procedures ==
+            p_validation_list->m_nb_procedures) {
+        opj_procedure * new_procedures;
+
+        p_validation_list->m_nb_max_procedures += OPJ_VALIDATION_SIZE;
+        new_procedures = (opj_procedure*)opj_realloc(
+                             p_validation_list->m_procedures,
+                             p_validation_list->m_nb_max_procedures * sizeof(opj_procedure));
+        if (! new_procedures) {
+            opj_free(p_validation_list->m_procedures);
+            p_validation_list->m_nb_max_procedures = 0;
+            p_validation_list->m_nb_procedures = 0;
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Not enough memory to add a new validation procedure\n");
+            return OPJ_FALSE;
+        } else {
+            p_validation_list->m_procedures = new_procedures;
         }
-        p_validation_list->m_procedures[p_validation_list->m_nb_procedures] = p_procedure;
-        ++p_validation_list->m_nb_procedures;
+    }
+    p_validation_list->m_procedures[p_validation_list->m_nb_procedures] =
+        p_procedure;
+    ++p_validation_list->m_nb_procedures;
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-OPJ_UINT32 opj_procedure_list_get_nb_procedures (opj_procedure_list_t * p_validation_list)
+OPJ_UINT32 opj_procedure_list_get_nb_procedures(opj_procedure_list_t *
+        p_validation_list)
 {
-        return p_validation_list->m_nb_procedures;
+    return p_validation_list->m_nb_procedures;
 }
 
-opj_procedure* opj_procedure_list_get_first_procedure (opj_procedure_list_t * p_validation_list)
+opj_procedure* opj_procedure_list_get_first_procedure(opj_procedure_list_t *
+        p_validation_list)
 {
-        return p_validation_list->m_procedures;
+    return p_validation_list->m_procedures;
 }
 
-void opj_procedure_list_clear (opj_procedure_list_t * p_validation_list)
+void opj_procedure_list_clear(opj_procedure_list_t * p_validation_list)
 {
-        p_validation_list->m_nb_procedures = 0;
+    p_validation_list->m_nb_procedures = 0;
 }
index 23462f05ff4d1638f88569942a3968ec667bf57f..e62b416ca6299116c1b7978dbf42bc419a84f808 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
 
 #include "opj_includes.h"
 
-opj_image_t* opj_image_create0(void) {
-       opj_image_t *image = (opj_image_t*)opj_calloc(1, sizeof(opj_image_t));
-       return image;
+opj_image_t* opj_image_create0(void)
+{
+    opj_image_t *image = (opj_image_t*)opj_calloc(1, sizeof(opj_image_t));
+    return image;
 }
 
-opj_image_t* OPJ_CALLCONV opj_image_create(OPJ_UINT32 numcmpts, opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc) {
-       OPJ_UINT32 compno;
-       opj_image_t *image = NULL;
-
-       image = (opj_image_t*) opj_calloc(1, sizeof(opj_image_t));
-       if(image) {
-               image->color_space = clrspc;
-               image->numcomps = numcmpts;
-               /* allocate memory for the per-component information */
-               image->comps = (opj_image_comp_t*)opj_calloc(1,image->numcomps * sizeof(opj_image_comp_t));
-               if(!image->comps) {
-                       /* TODO replace with event manager, breaks API */
-                       /* fprintf(stderr,"Unable to allocate memory for image.\n"); */
-                       opj_image_destroy(image);
-                       return NULL;
-               }
-               /* create the individual image components */
-               for(compno = 0; compno < numcmpts; compno++) {
-                       opj_image_comp_t *comp = &image->comps[compno];
-                       comp->dx = cmptparms[compno].dx;
-                       comp->dy = cmptparms[compno].dy;
-                       comp->w = cmptparms[compno].w;
-                       comp->h = cmptparms[compno].h;
-                       comp->x0 = cmptparms[compno].x0;
-                       comp->y0 = cmptparms[compno].y0;
-                       comp->prec = cmptparms[compno].prec;
-                       comp->bpp = cmptparms[compno].bpp;
-                       comp->sgnd = cmptparms[compno].sgnd;
-                       comp->data = (OPJ_INT32*) opj_calloc(comp->w * comp->h, sizeof(OPJ_INT32));
-                       if(!comp->data) {
-                               /* TODO replace with event manager, breaks API */
-                               /* fprintf(stderr,"Unable to allocate memory for image.\n"); */
-                               opj_image_destroy(image);
-                               return NULL;
-                       }
-               }
-       }
-
-       return image;
+opj_image_t* OPJ_CALLCONV opj_image_create(OPJ_UINT32 numcmpts,
+        opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc)
+{
+    OPJ_UINT32 compno;
+    opj_image_t *image = NULL;
+
+    image = (opj_image_t*) opj_calloc(1, sizeof(opj_image_t));
+    if (image) {
+        image->color_space = clrspc;
+        image->numcomps = numcmpts;
+        /* allocate memory for the per-component information */
+        image->comps = (opj_image_comp_t*)opj_calloc(1,
+                       image->numcomps * sizeof(opj_image_comp_t));
+        if (!image->comps) {
+            /* TODO replace with event manager, breaks API */
+            /* fprintf(stderr,"Unable to allocate memory for image.\n"); */
+            opj_image_destroy(image);
+            return NULL;
+        }
+        /* create the individual image components */
+        for (compno = 0; compno < numcmpts; compno++) {
+            opj_image_comp_t *comp = &image->comps[compno];
+            comp->dx = cmptparms[compno].dx;
+            comp->dy = cmptparms[compno].dy;
+            comp->w = cmptparms[compno].w;
+            comp->h = cmptparms[compno].h;
+            comp->x0 = cmptparms[compno].x0;
+            comp->y0 = cmptparms[compno].y0;
+            comp->prec = cmptparms[compno].prec;
+            comp->bpp = cmptparms[compno].bpp;
+            comp->sgnd = cmptparms[compno].sgnd;
+            comp->data = (OPJ_INT32*) opj_calloc(comp->w * comp->h, sizeof(OPJ_INT32));
+            if (!comp->data) {
+                /* TODO replace with event manager, breaks API */
+                /* fprintf(stderr,"Unable to allocate memory for image.\n"); */
+                opj_image_destroy(image);
+                return NULL;
+            }
+        }
+    }
+
+    return image;
 }
 
-void OPJ_CALLCONV opj_image_destroy(opj_image_t *image) {
-       if(image) {
-               if(image->comps) {
-                       OPJ_UINT32 compno;
-
-                       /* image components */
-                       for(compno = 0; compno < image->numcomps; compno++) {
-                               opj_image_comp_t *image_comp = &(image->comps[compno]);
-                               if(image_comp->data) {
-                                       opj_free(image_comp->data);
-                               }
-                       }
-                       opj_free(image->comps);
-               }
-
-               if(image->icc_profile_buf) {
-                       opj_free(image->icc_profile_buf);
-               }
-
-               opj_free(image);
-       }
+void OPJ_CALLCONV opj_image_destroy(opj_image_t *image)
+{
+    if (image) {
+        if (image->comps) {
+            OPJ_UINT32 compno;
+
+            /* image components */
+            for (compno = 0; compno < image->numcomps; compno++) {
+                opj_image_comp_t *image_comp = &(image->comps[compno]);
+                if (image_comp->data) {
+                    opj_free(image_comp->data);
+                }
+            }
+            opj_free(image->comps);
+        }
+
+        if (image->icc_profile_buf) {
+            opj_free(image->icc_profile_buf);
+        }
+
+        opj_free(image);
+    }
 }
 
 /**
  * Updates the components characteristics of the image from the coding parameters.
  *
- * @param p_image_header       the image header to update.
- * @param p_cp                         the coding parameters from which to update the image.
+ * @param p_image_header    the image header to update.
+ * @param p_cp              the coding parameters from which to update the image.
  */
-void opj_image_comp_header_update(opj_image_t * p_image_header, const struct opj_cp * p_cp)
+void opj_image_comp_header_update(opj_image_t * p_image_header,
+                                  const struct opj_cp * p_cp)
 {
-       OPJ_UINT32 i, l_width, l_height;
-       OPJ_UINT32 l_x0, l_y0, l_x1, l_y1;
-       OPJ_UINT32 l_comp_x0, l_comp_y0, l_comp_x1, l_comp_y1;
-       opj_image_comp_t* l_img_comp = NULL;
-
-       l_x0 = opj_uint_max(p_cp->tx0 , p_image_header->x0);
-       l_y0 = opj_uint_max(p_cp->ty0 , p_image_header->y0);
-       l_x1 = p_cp->tx0 + (p_cp->tw - 1U) * p_cp->tdx; /* validity of p_cp members used here checked in opj_j2k_read_siz. Can't overflow. */
-       l_y1 = p_cp->ty0 + (p_cp->th - 1U) * p_cp->tdy; /* can't overflow */
-       l_x1 = opj_uint_min(opj_uint_adds(l_x1, p_cp->tdx), p_image_header->x1); /* use add saturated to prevent overflow */
-       l_y1 = opj_uint_min(opj_uint_adds(l_y1, p_cp->tdy), p_image_header->y1); /* use add saturated to prevent overflow */
-
-       l_img_comp = p_image_header->comps;
-       for     (i = 0; i < p_image_header->numcomps; ++i) {
-               l_comp_x0 = opj_uint_ceildiv(l_x0, l_img_comp->dx);
-               l_comp_y0 = opj_uint_ceildiv(l_y0, l_img_comp->dy);
-               l_comp_x1 = opj_uint_ceildiv(l_x1, l_img_comp->dx);
-               l_comp_y1 = opj_uint_ceildiv(l_y1, l_img_comp->dy);
-               l_width   = opj_uint_ceildivpow2(l_comp_x1 - l_comp_x0, l_img_comp->factor);
-               l_height  = opj_uint_ceildivpow2(l_comp_y1 - l_comp_y0, l_img_comp->factor);
-               l_img_comp->w = l_width;
-               l_img_comp->h = l_height;
-               l_img_comp->x0 = l_comp_x0;
-               l_img_comp->y0 = l_comp_y0;
-               ++l_img_comp;
-       }
+    OPJ_UINT32 i, l_width, l_height;
+    OPJ_UINT32 l_x0, l_y0, l_x1, l_y1;
+    OPJ_UINT32 l_comp_x0, l_comp_y0, l_comp_x1, l_comp_y1;
+    opj_image_comp_t* l_img_comp = NULL;
+
+    l_x0 = opj_uint_max(p_cp->tx0, p_image_header->x0);
+    l_y0 = opj_uint_max(p_cp->ty0, p_image_header->y0);
+    l_x1 = p_cp->tx0 + (p_cp->tw - 1U) *
+           p_cp->tdx; /* validity of p_cp members used here checked in opj_j2k_read_siz. Can't overflow. */
+    l_y1 = p_cp->ty0 + (p_cp->th - 1U) * p_cp->tdy; /* can't overflow */
+    l_x1 = opj_uint_min(opj_uint_adds(l_x1, p_cp->tdx),
+                        p_image_header->x1); /* use add saturated to prevent overflow */
+    l_y1 = opj_uint_min(opj_uint_adds(l_y1, p_cp->tdy),
+                        p_image_header->y1); /* use add saturated to prevent overflow */
+
+    l_img_comp = p_image_header->comps;
+    for (i = 0; i < p_image_header->numcomps; ++i) {
+        l_comp_x0 = opj_uint_ceildiv(l_x0, l_img_comp->dx);
+        l_comp_y0 = opj_uint_ceildiv(l_y0, l_img_comp->dy);
+        l_comp_x1 = opj_uint_ceildiv(l_x1, l_img_comp->dx);
+        l_comp_y1 = opj_uint_ceildiv(l_y1, l_img_comp->dy);
+        l_width   = opj_uint_ceildivpow2(l_comp_x1 - l_comp_x0, l_img_comp->factor);
+        l_height  = opj_uint_ceildivpow2(l_comp_y1 - l_comp_y0, l_img_comp->factor);
+        l_img_comp->w = l_width;
+        l_img_comp->h = l_height;
+        l_img_comp->x0 = l_comp_x0;
+        l_img_comp->y0 = l_comp_y0;
+        ++l_img_comp;
+    }
 }
 
 
@@ -141,102 +150,107 @@ void opj_image_comp_header_update(opj_image_t * p_image_header, const struct opj
  * Copy only header of image and its component header (no data are copied)
  * if dest image have data, they will be freed
  *
- * @param      p_image_src             the src image
- * @param      p_image_dest    the dest image
+ * @param   p_image_src     the src image
+ * @param   p_image_dest    the dest image
  *
  */
-void opj_copy_image_header(const opj_image_t* p_image_src, opj_image_t* p_image_dest)
+void opj_copy_image_header(const opj_image_t* p_image_src,
+                           opj_image_t* p_image_dest)
 {
-       OPJ_UINT32 compno;
-
-       /* preconditions */
-       assert(p_image_src != 00);
-       assert(p_image_dest != 00);
-
-       p_image_dest->x0 = p_image_src->x0;
-       p_image_dest->y0 = p_image_src->y0;
-       p_image_dest->x1 = p_image_src->x1;
-       p_image_dest->y1 = p_image_src->y1;
-
-       if (p_image_dest->comps){
-               for(compno = 0; compno < p_image_dest->numcomps; compno++) {
-                       opj_image_comp_t *image_comp = &(p_image_dest->comps[compno]);
-                       if(image_comp->data) {
-                               opj_free(image_comp->data);
-                       }
-               }
-               opj_free(p_image_dest->comps);
-               p_image_dest->comps = NULL;
-       }
-
-       p_image_dest->numcomps = p_image_src->numcomps;
-
-       p_image_dest->comps = (opj_image_comp_t*) opj_malloc(p_image_dest->numcomps * sizeof(opj_image_comp_t));
-       if (!p_image_dest->comps){
-               p_image_dest->comps = NULL;
-               p_image_dest->numcomps = 0;
-               return;
-       }
-
-       for (compno=0; compno < p_image_dest->numcomps; compno++){
-               memcpy( &(p_image_dest->comps[compno]),
-                               &(p_image_src->comps[compno]),
-                               sizeof(opj_image_comp_t));
-               p_image_dest->comps[compno].data = NULL;
-       }
-
-       p_image_dest->color_space = p_image_src->color_space;
-       p_image_dest->icc_profile_len = p_image_src->icc_profile_len;
-
-       if (p_image_dest->icc_profile_len) {
-               p_image_dest->icc_profile_buf = (OPJ_BYTE*)opj_malloc(p_image_dest->icc_profile_len);
-               if (!p_image_dest->icc_profile_buf){
-                       p_image_dest->icc_profile_buf = NULL;
-                       p_image_dest->icc_profile_len = 0;
-                       return;
-               }
-               memcpy( p_image_dest->icc_profile_buf,
-                               p_image_src->icc_profile_buf,
-                               p_image_src->icc_profile_len);
-               }
-               else
-                       p_image_dest->icc_profile_buf = NULL;
-
-       return;
+    OPJ_UINT32 compno;
+
+    /* preconditions */
+    assert(p_image_src != 00);
+    assert(p_image_dest != 00);
+
+    p_image_dest->x0 = p_image_src->x0;
+    p_image_dest->y0 = p_image_src->y0;
+    p_image_dest->x1 = p_image_src->x1;
+    p_image_dest->y1 = p_image_src->y1;
+
+    if (p_image_dest->comps) {
+        for (compno = 0; compno < p_image_dest->numcomps; compno++) {
+            opj_image_comp_t *image_comp = &(p_image_dest->comps[compno]);
+            if (image_comp->data) {
+                opj_free(image_comp->data);
+            }
+        }
+        opj_free(p_image_dest->comps);
+        p_image_dest->comps = NULL;
+    }
+
+    p_image_dest->numcomps = p_image_src->numcomps;
+
+    p_image_dest->comps = (opj_image_comp_t*) opj_malloc(p_image_dest->numcomps *
+                          sizeof(opj_image_comp_t));
+    if (!p_image_dest->comps) {
+        p_image_dest->comps = NULL;
+        p_image_dest->numcomps = 0;
+        return;
+    }
+
+    for (compno = 0; compno < p_image_dest->numcomps; compno++) {
+        memcpy(&(p_image_dest->comps[compno]),
+               &(p_image_src->comps[compno]),
+               sizeof(opj_image_comp_t));
+        p_image_dest->comps[compno].data = NULL;
+    }
+
+    p_image_dest->color_space = p_image_src->color_space;
+    p_image_dest->icc_profile_len = p_image_src->icc_profile_len;
+
+    if (p_image_dest->icc_profile_len) {
+        p_image_dest->icc_profile_buf = (OPJ_BYTE*)opj_malloc(
+                                            p_image_dest->icc_profile_len);
+        if (!p_image_dest->icc_profile_buf) {
+            p_image_dest->icc_profile_buf = NULL;
+            p_image_dest->icc_profile_len = 0;
+            return;
+        }
+        memcpy(p_image_dest->icc_profile_buf,
+               p_image_src->icc_profile_buf,
+               p_image_src->icc_profile_len);
+    } else {
+        p_image_dest->icc_profile_buf = NULL;
+    }
+
+    return;
 }
 
-opj_image_t* OPJ_CALLCONV opj_image_tile_create(OPJ_UINT32 numcmpts, opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc) {
-       OPJ_UINT32 compno;
-       opj_image_t *image = 00;
-
-       image = (opj_image_t*) opj_calloc(1,sizeof(opj_image_t));
-       if (image)
-       {
-               
-               image->color_space = clrspc;
-               image->numcomps = numcmpts;
-               
-               /* allocate memory for the per-component information */
-               image->comps = (opj_image_comp_t*)opj_calloc(image->numcomps, sizeof(opj_image_comp_t));
-               if (!image->comps) {
-                       opj_image_destroy(image);
-                       return 00;
-               }
-               
-               /* create the individual image components */
-               for(compno = 0; compno < numcmpts; compno++) {
-                       opj_image_comp_t *comp = &image->comps[compno];
-                       comp->dx = cmptparms[compno].dx;
-                       comp->dy = cmptparms[compno].dy;
-                       comp->w = cmptparms[compno].w;
-                       comp->h = cmptparms[compno].h;
-                       comp->x0 = cmptparms[compno].x0;
-                       comp->y0 = cmptparms[compno].y0;
-                       comp->prec = cmptparms[compno].prec;
-                       comp->sgnd = cmptparms[compno].sgnd;
-                       comp->data = 0;
-               }
-       }
-
-       return image;
+opj_image_t* OPJ_CALLCONV opj_image_tile_create(OPJ_UINT32 numcmpts,
+        opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc)
+{
+    OPJ_UINT32 compno;
+    opj_image_t *image = 00;
+
+    image = (opj_image_t*) opj_calloc(1, sizeof(opj_image_t));
+    if (image) {
+
+        image->color_space = clrspc;
+        image->numcomps = numcmpts;
+
+        /* allocate memory for the per-component information */
+        image->comps = (opj_image_comp_t*)opj_calloc(image->numcomps,
+                       sizeof(opj_image_comp_t));
+        if (!image->comps) {
+            opj_image_destroy(image);
+            return 00;
+        }
+
+        /* create the individual image components */
+        for (compno = 0; compno < numcmpts; compno++) {
+            opj_image_comp_t *comp = &image->comps[compno];
+            comp->dx = cmptparms[compno].dx;
+            comp->dy = cmptparms[compno].dy;
+            comp->w = cmptparms[compno].w;
+            comp->h = cmptparms[compno].h;
+            comp->x0 = cmptparms[compno].x0;
+            comp->y0 = cmptparms[compno].y0;
+            comp->prec = cmptparms[compno].prec;
+            comp->sgnd = cmptparms[compno].sgnd;
+            comp->data = 0;
+        }
+    }
+
+    return image;
 }
index 7efaf6eca24f2e7c7680dea7a6f69a50eb5386d6..89f607155fd40d8f625a4f7bb804de8b208f2ef7 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
 
 #include "opj_includes.h"
 
-/** 
+/**
  * LUP decomposition
  */
 static OPJ_BOOL opj_lupDecompose(OPJ_FLOAT32 * matrix,
-                                 OPJ_UINT32 * permutations, 
+                                 OPJ_UINT32 * permutations,
                                  OPJ_FLOAT32 * p_swap_area,
                                  OPJ_UINT32 nb_compo);
-/** 
+/**
  * LUP solving
  */
-static void opj_lupSolve(OPJ_FLOAT32 * pResult, 
-                         OPJ_FLOAT32* pMatrix, 
-                         OPJ_FLOAT32* pVector, 
-                         OPJ_UINT32* pPermutations, 
+static void opj_lupSolve(OPJ_FLOAT32 * pResult,
+                         OPJ_FLOAT32* pMatrix,
+                         OPJ_FLOAT32* pVector,
+                         OPJ_UINT32* pPermutations,
                          OPJ_UINT32 nb_compo,
                          OPJ_FLOAT32 * p_intermediate_data);
 
-/** 
+/**
  *LUP inversion (call with the result of lupDecompose)
  */
-static void opj_lupInvert ( OPJ_FLOAT32 * pSrcMatrix,
-                            OPJ_FLOAT32 * pDestMatrix,
-                            OPJ_UINT32 nb_compo,
-                            OPJ_UINT32 * pPermutations,
-                            OPJ_FLOAT32 * p_src_temp,
-                            OPJ_FLOAT32 * p_dest_temp,
-                            OPJ_FLOAT32 * p_swap_area);
+static void opj_lupInvert(OPJ_FLOAT32 * pSrcMatrix,
+                          OPJ_FLOAT32 * pDestMatrix,
+                          OPJ_UINT32 nb_compo,
+                          OPJ_UINT32 * pPermutations,
+                          OPJ_FLOAT32 * p_src_temp,
+                          OPJ_FLOAT32 * p_dest_temp,
+                          OPJ_FLOAT32 * p_swap_area);
 
 /*
 ==========================================================
@@ -68,32 +68,33 @@ static void opj_lupInvert ( OPJ_FLOAT32 * pSrcMatrix,
  * Matrix inversion.
  */
 OPJ_BOOL opj_matrix_inversion_f(OPJ_FLOAT32 * pSrcMatrix,
-                                OPJ_FLOAT32 * pDestMatrix, 
+                                OPJ_FLOAT32 * pDestMatrix,
                                 OPJ_UINT32 nb_compo)
 {
-       OPJ_BYTE * l_data = 00;
-       OPJ_UINT32 l_permutation_size = nb_compo * (OPJ_UINT32)sizeof(OPJ_UINT32);
-       OPJ_UINT32 l_swap_size = nb_compo * (OPJ_UINT32)sizeof(OPJ_FLOAT32);
-       OPJ_UINT32 l_total_size = l_permutation_size + 3 * l_swap_size;
-       OPJ_UINT32 * lPermutations = 00;
-       OPJ_FLOAT32 * l_double_data = 00;
-
-       l_data = (OPJ_BYTE *) opj_malloc(l_total_size);
-       if (l_data == 0) {
-               return OPJ_FALSE;
-       }
-       lPermutations = (OPJ_UINT32 *) l_data;
-       l_double_data = (OPJ_FLOAT32 *) (l_data + l_permutation_size);
-       memset(lPermutations,0,l_permutation_size);
-
-       if(! opj_lupDecompose(pSrcMatrix,lPermutations,l_double_data,nb_compo)) {
-               opj_free(l_data);
-               return OPJ_FALSE;
-       }
-       
-    opj_lupInvert(pSrcMatrix,pDestMatrix,nb_compo,lPermutations,l_double_data,l_double_data + nb_compo,l_double_data + 2*nb_compo);
-       opj_free(l_data);
-       
+    OPJ_BYTE * l_data = 00;
+    OPJ_UINT32 l_permutation_size = nb_compo * (OPJ_UINT32)sizeof(OPJ_UINT32);
+    OPJ_UINT32 l_swap_size = nb_compo * (OPJ_UINT32)sizeof(OPJ_FLOAT32);
+    OPJ_UINT32 l_total_size = l_permutation_size + 3 * l_swap_size;
+    OPJ_UINT32 * lPermutations = 00;
+    OPJ_FLOAT32 * l_double_data = 00;
+
+    l_data = (OPJ_BYTE *) opj_malloc(l_total_size);
+    if (l_data == 0) {
+        return OPJ_FALSE;
+    }
+    lPermutations = (OPJ_UINT32 *) l_data;
+    l_double_data = (OPJ_FLOAT32 *)(l_data + l_permutation_size);
+    memset(lPermutations, 0, l_permutation_size);
+
+    if (! opj_lupDecompose(pSrcMatrix, lPermutations, l_double_data, nb_compo)) {
+        opj_free(l_data);
+        return OPJ_FALSE;
+    }
+
+    opj_lupInvert(pSrcMatrix, pDestMatrix, nb_compo, lPermutations, l_double_data,
+                  l_double_data + nb_compo, l_double_data + 2 * nb_compo);
+    opj_free(l_data);
+
     return OPJ_TRUE;
 }
 
@@ -103,192 +104,192 @@ OPJ_BOOL opj_matrix_inversion_f(OPJ_FLOAT32 * pSrcMatrix,
    Local functions
 ==========================================================
 */
-static OPJ_BOOL opj_lupDecompose(OPJ_FLOAT32 * matrix,OPJ_UINT32 * permutations,
-                          OPJ_FLOAT32 * p_swap_area,
-                          OPJ_UINT32 nb_compo) 
+static OPJ_BOOL opj_lupDecompose(OPJ_FLOAT32 * matrix,
+                                 OPJ_UINT32 * permutations,
+                                 OPJ_FLOAT32 * p_swap_area,
+                                 OPJ_UINT32 nb_compo)
 {
-       OPJ_UINT32 * tmpPermutations = permutations;
-       OPJ_UINT32 * dstPermutations;
-       OPJ_UINT32 k2=0,t;
-       OPJ_FLOAT32 temp;
-       OPJ_UINT32 i,j,k;
-       OPJ_FLOAT32 p;
-       OPJ_UINT32 lLastColum = nb_compo - 1;
-       OPJ_UINT32 lSwapSize = nb_compo * (OPJ_UINT32)sizeof(OPJ_FLOAT32);
-       OPJ_FLOAT32 * lTmpMatrix = matrix;
-       OPJ_FLOAT32 * lColumnMatrix,* lDestMatrix;
-       OPJ_UINT32 offset = 1;
-       OPJ_UINT32 lStride = nb_compo-1;
-
-       /*initialize permutations */
-       for (i = 0; i < nb_compo; ++i) 
-       {
-       *tmpPermutations++ = i;
-       }
-       /* now make a pivot with column switch */
-       tmpPermutations = permutations;
-       for (k = 0; k < lLastColum; ++k) {
-               p = 0.0;
-
-               /* take the middle element */
-               lColumnMatrix = lTmpMatrix + k;
-               
-               /* make permutation with the biggest value in the column */
+    OPJ_UINT32 * tmpPermutations = permutations;
+    OPJ_UINT32 * dstPermutations;
+    OPJ_UINT32 k2 = 0, t;
+    OPJ_FLOAT32 temp;
+    OPJ_UINT32 i, j, k;
+    OPJ_FLOAT32 p;
+    OPJ_UINT32 lLastColum = nb_compo - 1;
+    OPJ_UINT32 lSwapSize = nb_compo * (OPJ_UINT32)sizeof(OPJ_FLOAT32);
+    OPJ_FLOAT32 * lTmpMatrix = matrix;
+    OPJ_FLOAT32 * lColumnMatrix, * lDestMatrix;
+    OPJ_UINT32 offset = 1;
+    OPJ_UINT32 lStride = nb_compo - 1;
+
+    /*initialize permutations */
+    for (i = 0; i < nb_compo; ++i) {
+        *tmpPermutations++ = i;
+    }
+    /* now make a pivot with column switch */
+    tmpPermutations = permutations;
+    for (k = 0; k < lLastColum; ++k) {
+        p = 0.0;
+
+        /* take the middle element */
+        lColumnMatrix = lTmpMatrix + k;
+
+        /* make permutation with the biggest value in the column */
         for (i = k; i < nb_compo; ++i) {
-                       temp = ((*lColumnMatrix > 0) ? *lColumnMatrix : -(*lColumnMatrix));
-               if (temp > p) {
-                       p = temp;
-                       k2 = i;
-               }
-                       /* next line */
-                       lColumnMatrix += nb_compo;
-       }
-
-       /* a whole rest of 0 -> non singular */
-       if (p == 0.0) {
-               return OPJ_FALSE;
-               }
-
-               /* should we permute ? */
-               if (k2 != k) {
-                       /*exchange of line */
-               /* k2 > k */
-                       dstPermutations = tmpPermutations + k2 - k;
-                       /* swap indices */
-                       t = *tmpPermutations;
-               *tmpPermutations = *dstPermutations;
-               *dstPermutations = t;
-
-                       /* and swap entire line. */
-                       lColumnMatrix = lTmpMatrix + (k2 - k) * nb_compo;
-                       memcpy(p_swap_area,lColumnMatrix,lSwapSize);
-                       memcpy(lColumnMatrix,lTmpMatrix,lSwapSize);
-                       memcpy(lTmpMatrix,p_swap_area,lSwapSize);
-               }
-
-               /* now update data in the rest of the line and line after */
-               lDestMatrix = lTmpMatrix + k;
-               lColumnMatrix = lDestMatrix + nb_compo;
-               /* take the middle element */
-               temp = *(lDestMatrix++);
-
-               /* now compute up data (i.e. coeff up of the diagonal). */
-       for (i = offset; i < nb_compo; ++i)  {
-                       /*lColumnMatrix; */
-                       /* divide the lower column elements by the diagonal value */
-
-                       /* matrix[i][k] /= matrix[k][k]; */
-               /* p = matrix[i][k] */
-                       p = *lColumnMatrix / temp;
-                       *(lColumnMatrix++) = p;
-               
+            temp = ((*lColumnMatrix > 0) ? *lColumnMatrix : -(*lColumnMatrix));
+            if (temp > p) {
+                p = temp;
+                k2 = i;
+            }
+            /* next line */
+            lColumnMatrix += nb_compo;
+        }
+
+        /* a whole rest of 0 -> non singular */
+        if (p == 0.0) {
+            return OPJ_FALSE;
+        }
+
+        /* should we permute ? */
+        if (k2 != k) {
+            /*exchange of line */
+            /* k2 > k */
+            dstPermutations = tmpPermutations + k2 - k;
+            /* swap indices */
+            t = *tmpPermutations;
+            *tmpPermutations = *dstPermutations;
+            *dstPermutations = t;
+
+            /* and swap entire line. */
+            lColumnMatrix = lTmpMatrix + (k2 - k) * nb_compo;
+            memcpy(p_swap_area, lColumnMatrix, lSwapSize);
+            memcpy(lColumnMatrix, lTmpMatrix, lSwapSize);
+            memcpy(lTmpMatrix, p_swap_area, lSwapSize);
+        }
+
+        /* now update data in the rest of the line and line after */
+        lDestMatrix = lTmpMatrix + k;
+        lColumnMatrix = lDestMatrix + nb_compo;
+        /* take the middle element */
+        temp = *(lDestMatrix++);
+
+        /* now compute up data (i.e. coeff up of the diagonal). */
+        for (i = offset; i < nb_compo; ++i)  {
+            /*lColumnMatrix; */
+            /* divide the lower column elements by the diagonal value */
+
+            /* matrix[i][k] /= matrix[k][k]; */
+            /* p = matrix[i][k] */
+            p = *lColumnMatrix / temp;
+            *(lColumnMatrix++) = p;
+
             for (j = /* k + 1 */ offset; j < nb_compo; ++j) {
-                               /* matrix[i][j] -= matrix[i][k] * matrix[k][j]; */
-                       *(lColumnMatrix++) -= p * (*(lDestMatrix++));
-                       }
-                       /* come back to the k+1th element */
-                       lDestMatrix -= lStride;
-                       /* go to kth element of the next line */
-                       lColumnMatrix += k;
-       }
-
-               /* offset is now k+2 */
-               ++offset;
-               /* 1 element less for stride */
-               --lStride;
-               /* next line */
-               lTmpMatrix+=nb_compo;
-               /* next permutation element */
-               ++tmpPermutations;
-       }
+                /* matrix[i][j] -= matrix[i][k] * matrix[k][j]; */
+                *(lColumnMatrix++) -= p * (*(lDestMatrix++));
+            }
+            /* come back to the k+1th element */
+            lDestMatrix -= lStride;
+            /* go to kth element of the next line */
+            lColumnMatrix += k;
+        }
+
+        /* offset is now k+2 */
+        ++offset;
+        /* 1 element less for stride */
+        --lStride;
+        /* next line */
+        lTmpMatrix += nb_compo;
+        /* next permutation element */
+        ++tmpPermutations;
+    }
     return OPJ_TRUE;
 }
-               
-static void opj_lupSolve (OPJ_FLOAT32 * pResult,
-                   OPJ_FLOAT32 * pMatrix, 
-                   OPJ_FLOAT32 * pVector, 
-                   OPJ_UINT32* pPermutations, 
-                   OPJ_UINT32 nb_compo,OPJ_FLOAT32 * p_intermediate_data) 
+
+static void opj_lupSolve(OPJ_FLOAT32 * pResult,
+                         OPJ_FLOAT32 * pMatrix,
+                         OPJ_FLOAT32 * pVector,
+                         OPJ_UINT32* pPermutations,
+                         OPJ_UINT32 nb_compo, OPJ_FLOAT32 * p_intermediate_data)
 {
-       OPJ_INT32 k;
-    OPJ_UINT32 i,j;
-       OPJ_FLOAT32 sum;
-       OPJ_FLOAT32 u;
-    OPJ_UINT32 lStride = nb_compo+1;
-       OPJ_FLOAT32 * lCurrentPtr;
-       OPJ_FLOAT32 * lIntermediatePtr;
-       OPJ_FLOAT32 * lDestPtr;
-       OPJ_FLOAT32 * lTmpMatrix;
-       OPJ_FLOAT32 * lLineMatrix = pMatrix;
-       OPJ_FLOAT32 * lBeginPtr = pResult + nb_compo - 1;
-       OPJ_FLOAT32 * lGeneratedData;
-       OPJ_UINT32 * lCurrentPermutationPtr = pPermutations;
-
-       
-       lIntermediatePtr = p_intermediate_data;
-       lGeneratedData = p_intermediate_data + nb_compo - 1;
-       
+    OPJ_INT32 k;
+    OPJ_UINT32 i, j;
+    OPJ_FLOAT32 sum;
+    OPJ_FLOAT32 u;
+    OPJ_UINT32 lStride = nb_compo + 1;
+    OPJ_FLOAT32 * lCurrentPtr;
+    OPJ_FLOAT32 * lIntermediatePtr;
+    OPJ_FLOAT32 * lDestPtr;
+    OPJ_FLOAT32 * lTmpMatrix;
+    OPJ_FLOAT32 * lLineMatrix = pMatrix;
+    OPJ_FLOAT32 * lBeginPtr = pResult + nb_compo - 1;
+    OPJ_FLOAT32 * lGeneratedData;
+    OPJ_UINT32 * lCurrentPermutationPtr = pPermutations;
+
+
+    lIntermediatePtr = p_intermediate_data;
+    lGeneratedData = p_intermediate_data + nb_compo - 1;
+
     for (i = 0; i < nb_compo; ++i) {
-               sum = 0.0;
-               lCurrentPtr = p_intermediate_data;
-               lTmpMatrix = lLineMatrix;
-        for (j = 1; j <= i; ++j) 
-               {
-                       /* sum += matrix[i][j-1] * y[j-1]; */
-               sum += (*(lTmpMatrix++)) * (*(lCurrentPtr++));
+        sum = 0.0;
+        lCurrentPtr = p_intermediate_data;
+        lTmpMatrix = lLineMatrix;
+        for (j = 1; j <= i; ++j) {
+            /* sum += matrix[i][j-1] * y[j-1]; */
+            sum += (*(lTmpMatrix++)) * (*(lCurrentPtr++));
         }
-               /*y[i] = pVector[pPermutations[i]] - sum; */
+        /*y[i] = pVector[pPermutations[i]] - sum; */
         *(lIntermediatePtr++) = pVector[*(lCurrentPermutationPtr++)] - sum;
-               lLineMatrix += nb_compo;
-       }
+        lLineMatrix += nb_compo;
+    }
 
-       /* we take the last point of the matrix */
-       lLineMatrix = pMatrix + nb_compo*nb_compo - 1;
+    /* we take the last point of the matrix */
+    lLineMatrix = pMatrix + nb_compo * nb_compo - 1;
 
-       /* and we take after the last point of the destination vector */
-       lDestPtr = pResult + nb_compo;
+    /* and we take after the last point of the destination vector */
+    lDestPtr = pResult + nb_compo;
 
 
     assert(nb_compo != 0);
-       for (k = (OPJ_INT32)nb_compo - 1; k != -1 ; --k) {
-               sum = 0.0;
-               lTmpMatrix = lLineMatrix;
+    for (k = (OPJ_INT32)nb_compo - 1; k != -1 ; --k) {
+        sum = 0.0;
+        lTmpMatrix = lLineMatrix;
         u = *(lTmpMatrix++);
-               lCurrentPtr = lDestPtr--;
+        lCurrentPtr = lDestPtr--;
         for (j = (OPJ_UINT32)(k + 1); j < nb_compo; ++j) {
-                       /* sum += matrix[k][j] * x[j] */
-               sum += (*(lTmpMatrix++)) * (*(lCurrentPtr++));
-               }
-               /*x[k] = (y[k] - sum) / u; */
+            /* sum += matrix[k][j] * x[j] */
+            sum += (*(lTmpMatrix++)) * (*(lCurrentPtr++));
+        }
+        /*x[k] = (y[k] - sum) / u; */
         *(lBeginPtr--) = (*(lGeneratedData--) - sum) / u;
-               lLineMatrix -= lStride;
-       }
+        lLineMatrix -= lStride;
+    }
 }
-    
-
-static void opj_lupInvert (OPJ_FLOAT32 * pSrcMatrix,
-                    OPJ_FLOAT32 * pDestMatrix,
-                    OPJ_UINT32 nb_compo,
-                    OPJ_UINT32 * pPermutations,
-                    OPJ_FLOAT32 * p_src_temp,
-                    OPJ_FLOAT32 * p_dest_temp,
-                    OPJ_FLOAT32 * p_swap_area )
+
+
+static void opj_lupInvert(OPJ_FLOAT32 * pSrcMatrix,
+                          OPJ_FLOAT32 * pDestMatrix,
+                          OPJ_UINT32 nb_compo,
+                          OPJ_UINT32 * pPermutations,
+                          OPJ_FLOAT32 * p_src_temp,
+                          OPJ_FLOAT32 * p_dest_temp,
+                          OPJ_FLOAT32 * p_swap_area)
 {
-       OPJ_UINT32 j,i;
-       OPJ_FLOAT32 * lCurrentPtr;
-       OPJ_FLOAT32 * lLineMatrix = pDestMatrix;
-       OPJ_UINT32 lSwapSize = nb_compo * (OPJ_UINT32)sizeof(OPJ_FLOAT32);
-
-       for (j = 0; j < nb_compo; ++j) {
-               lCurrentPtr = lLineMatrix++;
-        memset(p_src_temp,0,lSwapSize);
-       p_src_temp[j] = 1.0;
-               opj_lupSolve(p_dest_temp,pSrcMatrix,p_src_temp, pPermutations, nb_compo , p_swap_area);
-
-               for (i = 0; i < nb_compo; ++i) {
-               *(lCurrentPtr) = p_dest_temp[i];
-                       lCurrentPtr+=nb_compo;
-       }
+    OPJ_UINT32 j, i;
+    OPJ_FLOAT32 * lCurrentPtr;
+    OPJ_FLOAT32 * lLineMatrix = pDestMatrix;
+    OPJ_UINT32 lSwapSize = nb_compo * (OPJ_UINT32)sizeof(OPJ_FLOAT32);
+
+    for (j = 0; j < nb_compo; ++j) {
+        lCurrentPtr = lLineMatrix++;
+        memset(p_src_temp, 0, lSwapSize);
+        p_src_temp[j] = 1.0;
+        opj_lupSolve(p_dest_temp, pSrcMatrix, p_src_temp, pPermutations, nb_compo,
+                     p_swap_area);
+
+        for (i = 0; i < nb_compo; ++i) {
+            *(lCurrentPtr) = p_dest_temp[i];
+            lCurrentPtr += nb_compo;
+        }
     }
 }
 
index 66802bb961a57d5c6b9858ce244d5c389e9bd900..980a8467c1fce0127508d2b771a286c637701216 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,13 +8,13 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * Copyright (c) 2008, Jerome Fimes, Communications & Systemes <jerome.fimes@c-s.fr>
  * Copyright (c) 2006-2007, Parvatha Elangovan
  * Copyright (c) 2010-2011, Kaori Hagihara
- * Copyright (c) 2011-2012, Centre National d'Etudes Spatiales (CNES), France 
+ * Copyright (c) 2011-2012, Centre National d'Etudes Spatiales (CNES), France
  * Copyright (c) 2012, CS Systemes d'Information, France
  * All rights reserved.
  *
 /**
  * Sets up the procedures to do on reading header. Developpers wanting to extend the library can add their own reading procedures.
  */
-static OPJ_BOOL opj_j2k_setup_header_reading (opj_j2k_t *p_j2k, opj_event_mgr_t * p_manager);
+static OPJ_BOOL opj_j2k_setup_header_reading(opj_j2k_t *p_j2k,
+        opj_event_mgr_t * p_manager);
 
 /**
  * The read header procedure.
  */
-static OPJ_BOOL opj_j2k_read_header_procedure(  opj_j2k_t *p_j2k,
-                                                opj_stream_private_t *p_stream,
-                                                opj_event_mgr_t * p_manager);
+static OPJ_BOOL opj_j2k_read_header_procedure(opj_j2k_t *p_j2k,
+        opj_stream_private_t *p_stream,
+        opj_event_mgr_t * p_manager);
 
 /**
  * The default encoding validation procedure without any extension.
@@ -69,9 +70,9 @@ static OPJ_BOOL opj_j2k_read_header_procedure(  opj_j2k_t *p_j2k,
  *
  * @return true if the parameters are correct.
  */
-static OPJ_BOOL opj_j2k_encoding_validation (   opj_j2k_t * p_j2k,
-                                                opj_stream_private_t *p_stream,
-                                                opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_encoding_validation(opj_j2k_t * p_j2k,
+        opj_stream_private_t *p_stream,
+        opj_event_mgr_t * p_manager);
 
 /**
  * The default decoding validation procedure without any extension.
@@ -82,27 +83,30 @@ static OPJ_BOOL opj_j2k_encoding_validation (   opj_j2k_t * p_j2k,
  *
  * @return true if the parameters are correct.
  */
-static OPJ_BOOL opj_j2k_decoding_validation (   opj_j2k_t * p_j2k,
-                                                opj_stream_private_t *p_stream,
-                                                opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_decoding_validation(opj_j2k_t * p_j2k,
+        opj_stream_private_t *p_stream,
+        opj_event_mgr_t * p_manager);
 
 /**
  * Sets up the validation ,i.e. adds the procedures to lauch to make sure the codec parameters
  * are valid. Developpers wanting to extend the library can add their own validation procedures.
  */
-static OPJ_BOOL opj_j2k_setup_encoding_validation (opj_j2k_t *p_j2k, opj_event_mgr_t * p_manager);
+static OPJ_BOOL opj_j2k_setup_encoding_validation(opj_j2k_t *p_j2k,
+        opj_event_mgr_t * p_manager);
 
 /**
  * Sets up the validation ,i.e. adds the procedures to lauch to make sure the codec parameters
  * are valid. Developpers wanting to extend the library can add their own validation procedures.
  */
-static OPJ_BOOL opj_j2k_setup_decoding_validation (opj_j2k_t *p_j2k, opj_event_mgr_t * p_manager);
+static OPJ_BOOL opj_j2k_setup_decoding_validation(opj_j2k_t *p_j2k,
+        opj_event_mgr_t * p_manager);
 
 /**
  * Sets up the validation ,i.e. adds the procedures to lauch to make sure the codec parameters
  * are valid. Developpers wanting to extend the library can add their own validation procedures.
  */
-static OPJ_BOOL opj_j2k_setup_end_compress (opj_j2k_t *p_j2k, opj_event_mgr_t * p_manager);
+static OPJ_BOOL opj_j2k_setup_end_compress(opj_j2k_t *p_j2k,
+        opj_event_mgr_t * p_manager);
 
 /**
  * The mct encoding validation procedure.
@@ -113,22 +117,22 @@ static OPJ_BOOL opj_j2k_setup_end_compress (opj_j2k_t *p_j2k, opj_event_mgr_t *
  *
  * @return true if the parameters are correct.
  */
-static OPJ_BOOL opj_j2k_mct_validation (opj_j2k_t * p_j2k,
-                                        opj_stream_private_t *p_stream,
-                                        opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_mct_validation(opj_j2k_t * p_j2k,
+                                       opj_stream_private_t *p_stream,
+                                       opj_event_mgr_t * p_manager);
 
 /**
  * Builds the tcd decoder to use to decode tile.
  */
-static OPJ_BOOL opj_j2k_build_decoder ( opj_j2k_t * p_j2k,
-                                        opj_stream_private_t *p_stream,
-                                        opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_build_decoder(opj_j2k_t * p_j2k,
+                                      opj_stream_private_t *p_stream,
+                                      opj_event_mgr_t * p_manager);
 /**
  * Builds the tcd encoder to use to encode tile.
  */
-static OPJ_BOOL opj_j2k_build_encoder ( opj_j2k_t * p_j2k,
-                                        opj_stream_private_t *p_stream,
-                                        opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_build_encoder(opj_j2k_t * p_j2k,
+                                      opj_stream_private_t *p_stream,
+                                      opj_event_mgr_t * p_manager);
 
 /**
  * Creates a tile-coder decoder.
@@ -137,9 +141,9 @@ static OPJ_BOOL opj_j2k_build_encoder ( opj_j2k_t * p_j2k,
  * @param       p_j2k                           J2K codec.
  * @param       p_manager                   the user event manager.
 */
-static OPJ_BOOL opj_j2k_create_tcd(     opj_j2k_t *p_j2k,
-                                                                    opj_stream_private_t *p_stream,
-                                                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_create_tcd(opj_j2k_t *p_j2k,
+                                   opj_stream_private_t *p_stream,
+                                   opj_event_mgr_t * p_manager);
 
 /**
  * Excutes the given procedures on the given codec.
@@ -151,10 +155,10 @@ static OPJ_BOOL opj_j2k_create_tcd(     opj_j2k_t *p_j2k,
  *
  * @return      true                            if all the procedures were successfully executed.
  */
-static OPJ_BOOL opj_j2k_exec (  opj_j2k_t * p_j2k,
-                            opj_procedure_list_t * p_procedure_list,
-                            opj_stream_private_t *p_stream,
-                            opj_event_mgr_t * p_manager);
+static OPJ_BOOL opj_j2k_exec(opj_j2k_t * p_j2k,
+                             opj_procedure_list_t * p_procedure_list,
+                             opj_stream_private_t *p_stream,
+                             opj_event_mgr_t * p_manager);
 
 /**
  * Updates the rates of the tcp.
@@ -163,24 +167,24 @@ static OPJ_BOOL opj_j2k_exec (  opj_j2k_t * p_j2k,
  * @param       p_j2k                           J2K codec.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_update_rates(   opj_j2k_t *p_j2k,
-                                                                            opj_stream_private_t *p_stream,
-                                                                            opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_update_rates(opj_j2k_t *p_j2k,
+                                     opj_stream_private_t *p_stream,
+                                     opj_event_mgr_t * p_manager);
 
 /**
  * Copies the decoding tile parameters onto all the tile parameters.
  * Creates also the tile decoder.
  */
-static OPJ_BOOL opj_j2k_copy_default_tcp_and_create_tcd (       opj_j2k_t * p_j2k,
-                                                            opj_stream_private_t *p_stream,
-                                                            opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_copy_default_tcp_and_create_tcd(opj_j2k_t * p_j2k,
+        opj_stream_private_t *p_stream,
+        opj_event_mgr_t * p_manager);
 
 /**
  * Destroys the memory associated with the decoding of headers.
  */
-static OPJ_BOOL opj_j2k_destroy_header_memory ( opj_j2k_t * p_j2k,
-                                                opj_stream_private_t *p_stream,
-                                                opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_destroy_header_memory(opj_j2k_t * p_j2k,
+        opj_stream_private_t *p_stream,
+        opj_event_mgr_t * p_manager);
 
 /**
  * Reads the lookup table containing all the marker, status and action, and returns the handler associated
@@ -189,28 +193,29 @@ static OPJ_BOOL opj_j2k_destroy_header_memory ( opj_j2k_t * p_j2k,
  *
  * @return      the handler associated with the id.
 */
-static const struct opj_dec_memory_marker_handler * opj_j2k_get_marker_handler (OPJ_UINT32 p_id);
+static const struct opj_dec_memory_marker_handler * opj_j2k_get_marker_handler(
+    OPJ_UINT32 p_id);
 
 /**
  * Destroys a tile coding parameter structure.
  *
  * @param       p_tcp           the tile coding parameter to destroy.
  */
-static void opj_j2k_tcp_destroy (opj_tcp_t *p_tcp);
+static void opj_j2k_tcp_destroy(opj_tcp_t *p_tcp);
 
 /**
  * Destroys the data inside a tile coding parameter structure.
  *
  * @param       p_tcp           the tile coding parameter which contain data to destroy.
  */
-static void opj_j2k_tcp_data_destroy (opj_tcp_t *p_tcp);
+static void opj_j2k_tcp_data_destroy(opj_tcp_t *p_tcp);
 
 /**
  * Destroys a coding parameter structure.
  *
  * @param       p_cp            the coding parameter to destroy.
  */
-static void opj_j2k_cp_destroy (opj_cp_t *p_cp);
+static void opj_j2k_cp_destroy(opj_cp_t *p_cp);
 
 /**
  * Compare 2 a SPCod/ SPCoc elements, i.e. the coding style of a given component of a tile.
@@ -222,7 +227,8 @@ static void opj_j2k_cp_destroy (opj_cp_t *p_cp);
  *
  * @return OPJ_TRUE if SPCdod are equals.
  */
-static OPJ_BOOL opj_j2k_compare_SPCod_SPCoc(opj_j2k_t *p_j2k, OPJ_UINT32 p_tile_no, OPJ_UINT32 p_first_comp_no, OPJ_UINT32 p_second_comp_no);
+static OPJ_BOOL opj_j2k_compare_SPCod_SPCoc(opj_j2k_t *p_j2k,
+        OPJ_UINT32 p_tile_no, OPJ_UINT32 p_first_comp_no, OPJ_UINT32 p_second_comp_no);
 
 /**
  * Writes a SPCod or SPCoc element, i.e. the coding style of a given component of a tile.
@@ -236,12 +242,12 @@ static OPJ_BOOL opj_j2k_compare_SPCod_SPCoc(opj_j2k_t *p_j2k, OPJ_UINT32 p_tile_
  *
  * @return FIXME DOC
 */
-static OPJ_BOOL opj_j2k_write_SPCod_SPCoc(      opj_j2k_t *p_j2k,
-                                                                                    OPJ_UINT32 p_tile_no,
-                                                                                    OPJ_UINT32 p_comp_no,
-                                                                                    OPJ_BYTE * p_data,
-                                                                                    OPJ_UINT32 * p_header_size,
-                                                                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_write_SPCod_SPCoc(opj_j2k_t *p_j2k,
+        OPJ_UINT32 p_tile_no,
+        OPJ_UINT32 p_comp_no,
+        OPJ_BYTE * p_data,
+        OPJ_UINT32 * p_header_size,
+        opj_event_mgr_t * p_manager);
 
 /**
  * Gets the size taken by writing a SPCod or SPCoc for the given tile and component.
@@ -252,9 +258,9 @@ static OPJ_BOOL opj_j2k_write_SPCod_SPCoc(      opj_j2k_t *p_j2k,
  *
  * @return      the number of bytes taken by the SPCod element.
  */
-static OPJ_UINT32 opj_j2k_get_SPCod_SPCoc_size (opj_j2k_t *p_j2k,
-                                                                                            OPJ_UINT32 p_tile_no,
-                                                                                            OPJ_UINT32 p_comp_no );
+static OPJ_UINT32 opj_j2k_get_SPCod_SPCoc_size(opj_j2k_t *p_j2k,
+        OPJ_UINT32 p_tile_no,
+        OPJ_UINT32 p_comp_no);
 
 /**
  * Reads a SPCod or SPCoc element, i.e. the coding style of a given component of a tile.
@@ -264,11 +270,11 @@ static OPJ_UINT32 opj_j2k_get_SPCod_SPCoc_size (opj_j2k_t *p_j2k,
  * @param       p_header_size   the size of the data contained in the COM marker.
  * @param       p_manager       the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_SPCod_SPCoc(   opj_j2k_t *p_j2k,
-                                            OPJ_UINT32 compno,
-                                            OPJ_BYTE * p_header_data,
-                                            OPJ_UINT32 * p_header_size,
-                                            opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_read_SPCod_SPCoc(opj_j2k_t *p_j2k,
+        OPJ_UINT32 compno,
+        OPJ_BYTE * p_header_data,
+        OPJ_UINT32 * p_header_size,
+        opj_event_mgr_t * p_manager);
 
 /**
  * Gets the size taken by writing SQcd or SQcc element, i.e. the quantization values of a band in the QCD or QCC.
@@ -279,9 +285,9 @@ static OPJ_BOOL opj_j2k_read_SPCod_SPCoc(   opj_j2k_t *p_j2k,
  *
  * @return      the number of bytes taken by the SPCod element.
  */
-static OPJ_UINT32 opj_j2k_get_SQcd_SQcc_size (  opj_j2k_t *p_j2k,
-                                                                                    OPJ_UINT32 p_tile_no,
-                                                                                    OPJ_UINT32 p_comp_no );
+static OPJ_UINT32 opj_j2k_get_SQcd_SQcc_size(opj_j2k_t *p_j2k,
+        OPJ_UINT32 p_tile_no,
+        OPJ_UINT32 p_comp_no);
 
 /**
  * Compares 2 SQcd or SQcc element, i.e. the quantization values of a band in the QCD or QCC.
@@ -293,7 +299,8 @@ static OPJ_UINT32 opj_j2k_get_SQcd_SQcc_size (  opj_j2k_t *p_j2k,
  *
  * @return OPJ_TRUE if equals.
  */
-static OPJ_BOOL opj_j2k_compare_SQcd_SQcc(opj_j2k_t *p_j2k, OPJ_UINT32 p_tile_no, OPJ_UINT32 p_first_comp_no, OPJ_UINT32 p_second_comp_no);
+static OPJ_BOOL opj_j2k_compare_SQcd_SQcc(opj_j2k_t *p_j2k,
+        OPJ_UINT32 p_tile_no, OPJ_UINT32 p_first_comp_no, OPJ_UINT32 p_second_comp_no);
 
 
 /**
@@ -308,16 +315,16 @@ static OPJ_BOOL opj_j2k_compare_SQcd_SQcc(opj_j2k_t *p_j2k, OPJ_UINT32 p_tile_no
  *
 */
 static OPJ_BOOL opj_j2k_write_SQcd_SQcc(opj_j2k_t *p_j2k,
-                                                                            OPJ_UINT32 p_tile_no,
-                                                                            OPJ_UINT32 p_comp_no,
-                                                                            OPJ_BYTE * p_data,
-                                                                            OPJ_UINT32 * p_header_size,
-                                                                            opj_event_mgr_t * p_manager);
+                                        OPJ_UINT32 p_tile_no,
+                                        OPJ_UINT32 p_comp_no,
+                                        OPJ_BYTE * p_data,
+                                        OPJ_UINT32 * p_header_size,
+                                        opj_event_mgr_t * p_manager);
 
 /**
  * Updates the Tile Length Marker.
  */
-static void opj_j2k_update_tlm ( opj_j2k_t * p_j2k, OPJ_UINT32 p_tile_part_size);
+static void opj_j2k_update_tlm(opj_j2k_t * p_j2k, OPJ_UINT32 p_tile_part_size);
 
 /**
  * Reads a SQcd or SQcc element, i.e. the quantization values of a band in the QCD or QCC.
@@ -329,77 +336,79 @@ static void opj_j2k_update_tlm ( opj_j2k_t * p_j2k, OPJ_UINT32 p_tile_part_size)
  * @param       p_manager       the user event manager.
  *
 */
-static OPJ_BOOL opj_j2k_read_SQcd_SQcc( opj_j2k_t *p_j2k,
-                                        OPJ_UINT32 compno,
-                                        OPJ_BYTE * p_header_data,
-                                        OPJ_UINT32 * p_header_size,
-                                        opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_read_SQcd_SQcc(opj_j2k_t *p_j2k,
+                                       OPJ_UINT32 compno,
+                                       OPJ_BYTE * p_header_data,
+                                       OPJ_UINT32 * p_header_size,
+                                       opj_event_mgr_t * p_manager);
 
 /**
  * Copies the tile component parameters of all the component from the first tile component.
  *
  * @param               p_j2k           the J2k codec.
  */
-static void opj_j2k_copy_tile_component_parameters( opj_j2k_t *p_j2k );
+static void opj_j2k_copy_tile_component_parameters(opj_j2k_t *p_j2k);
 
 /**
  * Copies the tile quantization parameters of all the component from the first tile component.
  *
  * @param               p_j2k           the J2k codec.
  */
-static void opj_j2k_copy_tile_quantization_parameters( opj_j2k_t *p_j2k );
+static void opj_j2k_copy_tile_quantization_parameters(opj_j2k_t *p_j2k);
 
 /**
  * Reads the tiles.
  */
-static OPJ_BOOL opj_j2k_decode_tiles (  opj_j2k_t *p_j2k,
-                                        opj_stream_private_t *p_stream,
-                                        opj_event_mgr_t * p_manager);
+static OPJ_BOOL opj_j2k_decode_tiles(opj_j2k_t *p_j2k,
+                                     opj_stream_private_t *p_stream,
+                                     opj_event_mgr_t * p_manager);
 
-static OPJ_BOOL opj_j2k_pre_write_tile ( opj_j2k_t * p_j2k,
-                                                                             OPJ_UINT32 p_tile_index,
-                                                                             opj_stream_private_t *p_stream,
-                                                                             opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_pre_write_tile(opj_j2k_t * p_j2k,
+                                       OPJ_UINT32 p_tile_index,
+                                       opj_stream_private_t *p_stream,
+                                       opj_event_mgr_t * p_manager);
 
-static OPJ_BOOL opj_j2k_update_image_data (opj_tcd_t * p_tcd, OPJ_BYTE * p_data, opj_image_t* p_output_image);
+static OPJ_BOOL opj_j2k_update_image_data(opj_tcd_t * p_tcd, OPJ_BYTE * p_data,
+        opj_image_t* p_output_image);
 
 static void opj_get_tile_dimensions(opj_image_t * l_image,
-                                                                                                                                               opj_tcd_tilecomp_t * l_tilec,
-                                                                                                                                               opj_image_comp_t * l_img_comp,
-                                                                                                                                               OPJ_UINT32* l_size_comp,
-                                                                                                                                               OPJ_UINT32* l_width,
-                                                                                                                                               OPJ_UINT32* l_height,
-                                                                                                                                               OPJ_UINT32* l_offset_x,
-                                                                                                                                               OPJ_UINT32* l_offset_y,
-                                                                                                                                               OPJ_UINT32* l_image_width,
-                                                                                                                                               OPJ_UINT32* l_stride,
-                                                                                                                                               OPJ_UINT32* l_tile_offset);
-
-static void opj_j2k_get_tile_data (opj_tcd_t * p_tcd, OPJ_BYTE * p_data);
-
-static OPJ_BOOL opj_j2k_post_write_tile (opj_j2k_t * p_j2k,
-                                                                             opj_stream_private_t *p_stream,
-                                                                             opj_event_mgr_t * p_manager );
+                                    opj_tcd_tilecomp_t * l_tilec,
+                                    opj_image_comp_t * l_img_comp,
+                                    OPJ_UINT32* l_size_comp,
+                                    OPJ_UINT32* l_width,
+                                    OPJ_UINT32* l_height,
+                                    OPJ_UINT32* l_offset_x,
+                                    OPJ_UINT32* l_offset_y,
+                                    OPJ_UINT32* l_image_width,
+                                    OPJ_UINT32* l_stride,
+                                    OPJ_UINT32* l_tile_offset);
+
+static void opj_j2k_get_tile_data(opj_tcd_t * p_tcd, OPJ_BYTE * p_data);
+
+static OPJ_BOOL opj_j2k_post_write_tile(opj_j2k_t * p_j2k,
+                                        opj_stream_private_t *p_stream,
+                                        opj_event_mgr_t * p_manager);
 
 /**
  * Sets up the procedures to do on writing header.
  * Developers wanting to extend the library can add their own writing procedures.
  */
-static OPJ_BOOL opj_j2k_setup_header_writing (opj_j2k_t *p_j2k, opj_event_mgr_t * p_manager);
-
-static OPJ_BOOL opj_j2k_write_first_tile_part(  opj_j2k_t *p_j2k,
-                                                                                            OPJ_BYTE * p_data,
-                                                                                            OPJ_UINT32 * p_data_written,
-                                                                                            OPJ_UINT32 p_total_data_size,
-                                                                                            opj_stream_private_t *p_stream,
-                                                                                            struct opj_event_mgr * p_manager );
-
-static OPJ_BOOL opj_j2k_write_all_tile_parts(   opj_j2k_t *p_j2k,
-                                                                                            OPJ_BYTE * p_data,
-                                                                                            OPJ_UINT32 * p_data_written,
-                                                                                            OPJ_UINT32 p_total_data_size,
-                                                                                            opj_stream_private_t *p_stream,
-                                                                                            struct opj_event_mgr * p_manager );
+static OPJ_BOOL opj_j2k_setup_header_writing(opj_j2k_t *p_j2k,
+        opj_event_mgr_t * p_manager);
+
+static OPJ_BOOL opj_j2k_write_first_tile_part(opj_j2k_t *p_j2k,
+        OPJ_BYTE * p_data,
+        OPJ_UINT32 * p_data_written,
+        OPJ_UINT32 p_total_data_size,
+        opj_stream_private_t *p_stream,
+        struct opj_event_mgr * p_manager);
+
+static OPJ_BOOL opj_j2k_write_all_tile_parts(opj_j2k_t *p_j2k,
+        OPJ_BYTE * p_data,
+        OPJ_UINT32 * p_data_written,
+        OPJ_UINT32 p_total_data_size,
+        opj_stream_private_t *p_stream,
+        struct opj_event_mgr * p_manager);
 
 /**
  * Gets the offset of the header.
@@ -408,9 +417,9 @@ static OPJ_BOOL opj_j2k_write_all_tile_parts(   opj_j2k_t *p_j2k,
  * @param       p_j2k                   J2K codec.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_get_end_header( opj_j2k_t *p_j2k,
-                                        opj_stream_private_t *p_stream,
-                                        opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_get_end_header(opj_j2k_t *p_j2k,
+                                       opj_stream_private_t *p_stream,
+                                       opj_event_mgr_t * p_manager);
 
 static OPJ_BOOL opj_j2k_allocate_tile_element_cstr_index(opj_j2k_t *p_j2k);
 
@@ -427,9 +436,9 @@ static OPJ_BOOL opj_j2k_allocate_tile_element_cstr_index(opj_j2k_t *p_j2k);
  * @param       p_j2k                   J2K codec.
  * @param       p_manager       the user event manager.
 */
-static OPJ_BOOL opj_j2k_write_soc(      opj_j2k_t *p_j2k,
-                                                        opj_stream_private_t *p_stream,
-                                                            opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_write_soc(opj_j2k_t *p_j2k,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager);
 
 /**
  * Reads a SOC marker (Start of Codestream)
@@ -437,9 +446,9 @@ static OPJ_BOOL opj_j2k_write_soc(      opj_j2k_t *p_j2k,
  * @param       p_stream        XXX needs data
  * @param       p_manager       the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_soc(   opj_j2k_t *p_j2k,
-                                    opj_stream_private_t *p_stream,
-                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_read_soc(opj_j2k_t *p_j2k,
+                                 opj_stream_private_t *p_stream,
+                                 opj_event_mgr_t * p_manager);
 
 /**
  * Writes the SIZ marker (image and tile size)
@@ -448,9 +457,9 @@ static OPJ_BOOL opj_j2k_read_soc(   opj_j2k_t *p_j2k,
  * @param       p_stream        the stream to write data to.
  * @param       p_manager       the user event manager.
 */
-static OPJ_BOOL opj_j2k_write_siz(      opj_j2k_t *p_j2k,
-                                                                opj_stream_private_t *p_stream,
-                                                                opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_write_siz(opj_j2k_t *p_j2k,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager);
 
 /**
  * Reads a SIZ marker (image and tile size)
@@ -471,9 +480,9 @@ static OPJ_BOOL opj_j2k_read_siz(opj_j2k_t *p_j2k,
  * @param       p_j2k                   J2K codec.
  * @param       p_manager       the user event manager.
 */
-static OPJ_BOOL opj_j2k_write_com(      opj_j2k_t *p_j2k,
-                                                                        opj_stream_private_t *p_stream,
-                                                                        opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_write_com(opj_j2k_t *p_j2k,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager);
 
 /**
  * Reads a COM marker (comments)
@@ -482,10 +491,10 @@ static OPJ_BOOL opj_j2k_write_com(      opj_j2k_t *p_j2k,
  * @param       p_header_size   the size of the data contained in the COM marker.
  * @param       p_manager       the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_com (  opj_j2k_t *p_j2k,
-                                    OPJ_BYTE * p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_read_com(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager);
 /**
  * Writes the COD marker (Coding style default)
  *
@@ -493,9 +502,9 @@ static OPJ_BOOL opj_j2k_read_com (  opj_j2k_t *p_j2k,
  * @param       p_j2k                   J2K codec.
  * @param       p_manager       the user event manager.
 */
-static OPJ_BOOL opj_j2k_write_cod(      opj_j2k_t *p_j2k,
-                                                                        opj_stream_private_t *p_stream,
-                                                                        opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_write_cod(opj_j2k_t *p_j2k,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager);
 
 /**
  * Reads a COD marker (Coding Styke defaults)
@@ -504,10 +513,10 @@ static OPJ_BOOL opj_j2k_write_cod(      opj_j2k_t *p_j2k,
  * @param       p_header_size   the size of the data contained in the COD marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_cod (  opj_j2k_t *p_j2k,
-                                    OPJ_BYTE * p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager);
+static OPJ_BOOL opj_j2k_read_cod(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager);
 
 /**
  * Compares 2 COC markers (Coding style component)
@@ -518,7 +527,8 @@ static OPJ_BOOL opj_j2k_read_cod (  opj_j2k_t *p_j2k,
  *
  * @return      OPJ_TRUE if equals
  */
-static OPJ_BOOL opj_j2k_compare_coc(opj_j2k_t *p_j2k, OPJ_UINT32 p_first_comp_no, OPJ_UINT32 p_second_comp_no);
+static OPJ_BOOL opj_j2k_compare_coc(opj_j2k_t *p_j2k,
+                                    OPJ_UINT32 p_first_comp_no, OPJ_UINT32 p_second_comp_no);
 
 /**
  * Writes the COC marker (Coding style component)
@@ -528,10 +538,10 @@ static OPJ_BOOL opj_j2k_compare_coc(opj_j2k_t *p_j2k, OPJ_UINT32 p_first_comp_no
  * @param       p_stream    the stream to write data to.
  * @param       p_manager   the user event manager.
 */
-static OPJ_BOOL opj_j2k_write_coc(  opj_j2k_t *p_j2k,
-                                                                OPJ_UINT32 p_comp_no,
-                                                                opj_stream_private_t *p_stream,
-                                                                opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_write_coc(opj_j2k_t *p_j2k,
+                                  OPJ_UINT32 p_comp_no,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager);
 
 /**
  * Writes the COC marker (Coding style component)
@@ -543,10 +553,10 @@ static OPJ_BOOL opj_j2k_write_coc(  opj_j2k_t *p_j2k,
  * @param       p_manager               the user event manager.
 */
 static void opj_j2k_write_coc_in_memory(opj_j2k_t *p_j2k,
-                                                                            OPJ_UINT32 p_comp_no,
-                                                                            OPJ_BYTE * p_data,
-                                                                            OPJ_UINT32 * p_data_written,
-                                                                            opj_event_mgr_t * p_manager );
+                                        OPJ_UINT32 p_comp_no,
+                                        OPJ_BYTE * p_data,
+                                        OPJ_UINT32 * p_data_written,
+                                        opj_event_mgr_t * p_manager);
 
 /**
  * Gets the maximum size taken by a coc.
@@ -562,10 +572,10 @@ static OPJ_UINT32 opj_j2k_get_max_coc_size(opj_j2k_t *p_j2k);
  * @param       p_header_size   the size of the data contained in the COC marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_coc (  opj_j2k_t *p_j2k,
-                                    OPJ_BYTE * p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_read_coc(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager);
 
 /**
  * Writes the QCD marker (quantization default)
@@ -574,9 +584,9 @@ static OPJ_BOOL opj_j2k_read_coc (  opj_j2k_t *p_j2k,
  * @param       p_stream                the stream to write data to.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_write_qcd(      opj_j2k_t *p_j2k,
-                                                                        opj_stream_private_t *p_stream,
-                                                                        opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_write_qcd(opj_j2k_t *p_j2k,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager);
 
 /**
  * Reads a QCD marker (Quantization defaults)
@@ -585,10 +595,10 @@ static OPJ_BOOL opj_j2k_write_qcd(      opj_j2k_t *p_j2k,
  * @param       p_header_size   the size of the data contained in the QCD marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_qcd (  opj_j2k_t *p_j2k,
-                                    OPJ_BYTE * p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_read_qcd(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager);
 
 /**
  * Compare QCC markers (quantization component)
@@ -599,7 +609,8 @@ static OPJ_BOOL opj_j2k_read_qcd (  opj_j2k_t *p_j2k,
  *
  * @return OPJ_TRUE if equals.
  */
-static OPJ_BOOL opj_j2k_compare_qcc(opj_j2k_t *p_j2k, OPJ_UINT32 p_first_comp_no, OPJ_UINT32 p_second_comp_no);
+static OPJ_BOOL opj_j2k_compare_qcc(opj_j2k_t *p_j2k,
+                                    OPJ_UINT32 p_first_comp_no, OPJ_UINT32 p_second_comp_no);
 
 /**
  * Writes the QCC marker (quantization component)
@@ -609,10 +620,10 @@ static OPJ_BOOL opj_j2k_compare_qcc(opj_j2k_t *p_j2k, OPJ_UINT32 p_first_comp_no
  * @param       p_j2k                   J2K codec.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_write_qcc(      opj_j2k_t *p_j2k,
-                                                                        OPJ_UINT32 p_comp_no,
-                                                                        opj_stream_private_t *p_stream,
-                                                                        opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_write_qcc(opj_j2k_t *p_j2k,
+                                  OPJ_UINT32 p_comp_no,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager);
 
 /**
  * Writes the QCC marker (quantization component)
@@ -624,15 +635,15 @@ static OPJ_BOOL opj_j2k_write_qcc(      opj_j2k_t *p_j2k,
  * @param       p_manager       the user event manager.
 */
 static void opj_j2k_write_qcc_in_memory(opj_j2k_t *p_j2k,
-                                                                            OPJ_UINT32 p_comp_no,
-                                                                            OPJ_BYTE * p_data,
-                                                                            OPJ_UINT32 * p_data_written,
-                                                                            opj_event_mgr_t * p_manager );
+                                        OPJ_UINT32 p_comp_no,
+                                        OPJ_BYTE * p_data,
+                                        OPJ_UINT32 * p_data_written,
+                                        opj_event_mgr_t * p_manager);
 
 /**
  * Gets the maximum size taken by a qcc.
  */
-static OPJ_UINT32 opj_j2k_get_max_qcc_size (opj_j2k_t *p_j2k);
+static OPJ_UINT32 opj_j2k_get_max_qcc_size(opj_j2k_t *p_j2k);
 
 /**
  * Reads a QCC marker (Quantization component)
@@ -641,10 +652,10 @@ static OPJ_UINT32 opj_j2k_get_max_qcc_size (opj_j2k_t *p_j2k);
  * @param       p_header_size   the size of the data contained in the QCC marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_qcc(   opj_j2k_t *p_j2k,
-                                    OPJ_BYTE * p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager);
+static OPJ_BOOL opj_j2k_read_qcc(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager);
 /**
  * Writes the POC marker (Progression Order Change)
  *
@@ -652,9 +663,9 @@ static OPJ_BOOL opj_j2k_read_qcc(   opj_j2k_t *p_j2k,
  * @param       p_j2k                           J2K codec.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_write_poc(      opj_j2k_t *p_j2k,
-                                                                        opj_stream_private_t *p_stream,
-                                                                        opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_write_poc(opj_j2k_t *p_j2k,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager);
 /**
  * Writes the POC marker (Progression Order Change)
  *
@@ -664,9 +675,9 @@ static OPJ_BOOL opj_j2k_write_poc(      opj_j2k_t *p_j2k,
  * @param       p_manager      the user event manager.
  */
 static void opj_j2k_write_poc_in_memory(opj_j2k_t *p_j2k,
-                                                                            OPJ_BYTE * p_data,
-                                                                            OPJ_UINT32 * p_data_written,
-                                                                            opj_event_mgr_t * p_manager );
+                                        OPJ_BYTE * p_data,
+                                        OPJ_UINT32 * p_data_written,
+                                        opj_event_mgr_t * p_manager);
 /**
  * Gets the maximum size taken by the writing of a POC.
  */
@@ -680,15 +691,15 @@ static OPJ_UINT32 opj_j2k_get_max_poc_size(opj_j2k_t *p_j2k);
  * @param       p_header_size   the size of the data contained in the POC marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_poc (  opj_j2k_t *p_j2k,
-                                    OPJ_BYTE * p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_read_poc(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager);
 
 /**
  * Gets the maximum size taken by the toc headers of all the tile parts of any given tile.
  */
-static OPJ_UINT32 opj_j2k_get_max_toc_size (opj_j2k_t *p_j2k);
+static OPJ_UINT32 opj_j2k_get_max_toc_size(opj_j2k_t *p_j2k);
 
 /**
  * Gets the maximum size taken by the headers of the SOT.
@@ -705,10 +716,10 @@ static OPJ_UINT32 opj_j2k_get_specific_header_sizes(opj_j2k_t *p_j2k);
  * @param       p_header_size   the size of the data contained in the TLM marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_crg (  opj_j2k_t *p_j2k,
-                                    OPJ_BYTE * p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_read_crg(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager);
 /**
  * Reads a TLM marker (Tile Length Marker)
  *
@@ -717,10 +728,10 @@ static OPJ_BOOL opj_j2k_read_crg (  opj_j2k_t *p_j2k,
  * @param       p_header_size   the size of the data contained in the TLM marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_tlm (  opj_j2k_t *p_j2k,
-                                    OPJ_BYTE * p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager);
+static OPJ_BOOL opj_j2k_read_tlm(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager);
 
 /**
  * Writes the updated tlm.
@@ -729,9 +740,9 @@ static OPJ_BOOL opj_j2k_read_tlm (  opj_j2k_t *p_j2k,
  * @param       p_j2k                   J2K codec.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_write_updated_tlm(      opj_j2k_t *p_j2k,
-                                            opj_stream_private_t *p_stream,
-                                            opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_write_updated_tlm(opj_j2k_t *p_j2k,
+        opj_stream_private_t *p_stream,
+        opj_event_mgr_t * p_manager);
 
 /**
  * Reads a PLM marker (Packet length, main header marker)
@@ -741,10 +752,10 @@ static OPJ_BOOL opj_j2k_write_updated_tlm(      opj_j2k_t *p_j2k,
  * @param       p_header_size   the size of the data contained in the TLM marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_plm (  opj_j2k_t *p_j2k,
-                                    OPJ_BYTE * p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager);
+static OPJ_BOOL opj_j2k_read_plm(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager);
 /**
  * Reads a PLT marker (Packet length, tile-part header)
  *
@@ -753,10 +764,10 @@ static OPJ_BOOL opj_j2k_read_plm (  opj_j2k_t *p_j2k,
  * @param       p_header_size   the size of the data contained in the PLT marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_plt (  opj_j2k_t *p_j2k,
-                                    OPJ_BYTE * p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_read_plt(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager);
 
 /**
  * Reads a PPM marker (Packed headers, main header)
@@ -767,11 +778,11 @@ static OPJ_BOOL opj_j2k_read_plt (  opj_j2k_t *p_j2k,
  * @param       p_manager               the user event manager.
  */
 
-static OPJ_BOOL opj_j2k_read_ppm (
-                                                                                                                                                opj_j2k_t *p_j2k,
-                                                                                                                                                OPJ_BYTE * p_header_data,
-                                                                                                                                                OPJ_UINT32 p_header_size,
-                                                                                                                                                opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_read_ppm(
+    opj_j2k_t *p_j2k,
+    OPJ_BYTE * p_header_data,
+    OPJ_UINT32 p_header_size,
+    opj_event_mgr_t * p_manager);
 
 /**
  * Merges all PPM markers read (Packed headers, main header)
@@ -779,7 +790,7 @@ static OPJ_BOOL opj_j2k_read_ppm (
  * @param       p_cp      main coding parameters.
  * @param       p_manager the user event manager.
  */
-static OPJ_BOOL opj_j2k_merge_ppm ( opj_cp_t *p_cp, opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_merge_ppm(opj_cp_t *p_cp, opj_event_mgr_t * p_manager);
 
 /**
  * Reads a PPT marker (Packed packet headers, tile-part header)
@@ -789,10 +800,10 @@ static OPJ_BOOL opj_j2k_merge_ppm ( opj_cp_t *p_cp, opj_event_mgr_t * p_manager
  * @param       p_header_size   the size of the data contained in the PPT marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_ppt (  opj_j2k_t *p_j2k,
-                                    OPJ_BYTE * p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_read_ppt(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager);
 
 /**
  * Merges all PPT markers read (Packed headers, tile-part header)
@@ -800,8 +811,8 @@ static OPJ_BOOL opj_j2k_read_ppt (  opj_j2k_t *p_j2k,
  * @param       p_tcp   the tile.
  * @param       p_manager               the user event manager.
  */
-static OPJ_BOOL opj_j2k_merge_ppt (  opj_tcp_t *p_tcp,
-                                                                                                                                          opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_merge_ppt(opj_tcp_t *p_tcp,
+                                  opj_event_mgr_t * p_manager);
 
 
 /**
@@ -811,9 +822,9 @@ static OPJ_BOOL opj_j2k_merge_ppt (  opj_tcp_t *p_tcp,
  * @param       p_j2k                           J2K codec.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_write_tlm(      opj_j2k_t *p_j2k,
-                                                                        opj_stream_private_t *p_stream,
-                                                                        opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_write_tlm(opj_j2k_t *p_j2k,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager);
 
 /**
  * Writes the SOT marker (Start of tile-part)
@@ -824,11 +835,11 @@ static OPJ_BOOL opj_j2k_write_tlm(      opj_j2k_t *p_j2k,
  * @param       p_stream         the stream to write data to.
  * @param       p_manager        the user event manager.
 */
-static OPJ_BOOL opj_j2k_write_sot(      opj_j2k_t *p_j2k,
-                                                                        OPJ_BYTE * p_data,
-                                                                        OPJ_UINT32 * p_data_written,
-                                                                        const opj_stream_private_t *p_stream,
-                                                                        opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_write_sot(opj_j2k_t *p_j2k,
+                                  OPJ_BYTE * p_data,
+                                  OPJ_UINT32 * p_data_written,
+                                  const opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager);
 
 /**
  * Reads values from a SOT marker (Start of tile-part)
@@ -844,12 +855,12 @@ static OPJ_BOOL opj_j2k_write_sot(      opj_j2k_t *p_j2k,
  * @param       p_manager       the user event manager.
  */
 static OPJ_BOOL opj_j2k_get_sot_values(OPJ_BYTE *  p_header_data,
-                                                                                                                                                        OPJ_UINT32  p_header_size,
-                                                                                                                                                        OPJ_UINT32* p_tile_no,
-                                                                                                                                                        OPJ_UINT32* p_tot_len,
-                                                                                                                                                        OPJ_UINT32* p_current_part,
-                                                                                                                                                        OPJ_UINT32* p_num_parts,
-                                                                                                                                                        opj_event_mgr_t * p_manager );
+                                       OPJ_UINT32  p_header_size,
+                                       OPJ_UINT32* p_tile_no,
+                                       OPJ_UINT32* p_tot_len,
+                                       OPJ_UINT32* p_current_part,
+                                       OPJ_UINT32* p_num_parts,
+                                       opj_event_mgr_t * p_manager);
 /**
  * Reads a SOT marker (Start of tile-part)
  *
@@ -858,10 +869,10 @@ static OPJ_BOOL opj_j2k_get_sot_values(OPJ_BYTE *  p_header_data,
  * @param       p_header_size   the size of the data contained in the PPT marker.
  * @param       p_manager       the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_sot (  opj_j2k_t *p_j2k,
-                                    OPJ_BYTE * p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_read_sot(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager);
 /**
  * Writes the SOD marker (Start of data)
  *
@@ -873,13 +884,13 @@ static OPJ_BOOL opj_j2k_read_sot (  opj_j2k_t *p_j2k,
  * @param       p_stream            the stream to write data to.
  * @param       p_manager           the user event manager.
 */
-static OPJ_BOOL opj_j2k_write_sod(      opj_j2k_t *p_j2k,
-                                                                        opj_tcd_t * p_tile_coder,
-                                                                        OPJ_BYTE * p_data,
-                                                                        OPJ_UINT32 * p_data_written,
-                                                                        OPJ_UINT32 p_total_data_size,
-                                                                        const opj_stream_private_t *p_stream,
-                                                                        opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_write_sod(opj_j2k_t *p_j2k,
+                                  opj_tcd_t * p_tile_coder,
+                                  OPJ_BYTE * p_data,
+                                  OPJ_UINT32 * p_data_written,
+                                  OPJ_UINT32 p_total_data_size,
+                                  const opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager);
 
 /**
  * Reads a SOD marker (Start Of Data)
@@ -888,17 +899,19 @@ static OPJ_BOOL opj_j2k_write_sod(      opj_j2k_t *p_j2k,
  * @param       p_stream                FIXME DOC
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_sod(   opj_j2k_t *p_j2k,
-                                    opj_stream_private_t *p_stream,
-                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_read_sod(opj_j2k_t *p_j2k,
+                                 opj_stream_private_t *p_stream,
+                                 opj_event_mgr_t * p_manager);
 
-static void opj_j2k_update_tlm (opj_j2k_t * p_j2k, OPJ_UINT32 p_tile_part_size )
+static void opj_j2k_update_tlm(opj_j2k_t * p_j2k, OPJ_UINT32 p_tile_part_size)
 {
-        opj_write_bytes(p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_current,p_j2k->m_current_tile_number,1);            /* PSOT */
-        ++p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_current;
+    opj_write_bytes(p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_current,
+                    p_j2k->m_current_tile_number, 1);           /* PSOT */
+    ++p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_current;
 
-        opj_write_bytes(p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_current,p_tile_part_size,4);                                        /* PSOT */
-        p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_current += 4;
+    opj_write_bytes(p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_current,
+                    p_tile_part_size, 4);                                       /* PSOT */
+    p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_current += 4;
 }
 
 /**
@@ -911,12 +924,12 @@ static void opj_j2k_update_tlm (opj_j2k_t * p_j2k, OPJ_UINT32 p_tile_part_size )
  * @param       p_j2k                   J2K codec.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_write_rgn(  opj_j2k_t *p_j2k,
-                                    OPJ_UINT32 p_tile_no,
-                                    OPJ_UINT32 p_comp_no,
-                                    OPJ_UINT32 nb_comps,
-                                    opj_stream_private_t *p_stream,
-                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_write_rgn(opj_j2k_t *p_j2k,
+                                  OPJ_UINT32 p_tile_no,
+                                  OPJ_UINT32 p_comp_no,
+                                  OPJ_UINT32 nb_comps,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager);
 
 /**
  * Reads a RGN marker (Region Of Interest)
@@ -926,10 +939,10 @@ static OPJ_BOOL opj_j2k_write_rgn(  opj_j2k_t *p_j2k,
  * @param       p_header_size   the size of the data contained in the POC marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_rgn (opj_j2k_t *p_j2k,
-                                  OPJ_BYTE * p_header_data,
-                                  OPJ_UINT32 p_header_size,
-                                  opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_read_rgn(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager);
 
 /**
  * Writes the EOC marker (End of Codestream)
@@ -938,9 +951,9 @@ static OPJ_BOOL opj_j2k_read_rgn (opj_j2k_t *p_j2k,
  * @param       p_j2k                   J2K codec.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_write_eoc(      opj_j2k_t *p_j2k,
-                                    opj_stream_private_t *p_stream,
-                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_write_eoc(opj_j2k_t *p_j2k,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager);
 
 #if 0
 /**
@@ -950,9 +963,9 @@ static OPJ_BOOL opj_j2k_write_eoc(      opj_j2k_t *p_j2k,
  * @param       p_stream                FIXME DOC
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_eoc (      opj_j2k_t *p_j2k,
-                                                                opj_stream_private_t *p_stream,
-                                                                opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_read_eoc(opj_j2k_t *p_j2k,
+                                 opj_stream_private_t *p_stream,
+                                 opj_event_mgr_t * p_manager);
 #endif
 
 /**
@@ -962,9 +975,9 @@ static OPJ_BOOL opj_j2k_read_eoc (      opj_j2k_t *p_j2k,
  * @param       p_j2k                   J2K codec.
  * @param       p_manager       the user event manager.
 */
-static OPJ_BOOL opj_j2k_write_mct_data_group(   opj_j2k_t *p_j2k,
-                                                opj_stream_private_t *p_stream,
-                                                opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_write_mct_data_group(opj_j2k_t *p_j2k,
+        opj_stream_private_t *p_stream,
+        opj_event_mgr_t * p_manager);
 
 /**
  * Inits the Info
@@ -973,9 +986,9 @@ static OPJ_BOOL opj_j2k_write_mct_data_group(   opj_j2k_t *p_j2k,
  * @param       p_j2k                   J2K codec.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_init_info(      opj_j2k_t *p_j2k,
-                                    opj_stream_private_t *p_stream,
-                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_init_info(opj_j2k_t *p_j2k,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager);
 
 /**
 Add main header marker information
@@ -984,7 +997,8 @@ Add main header marker information
 @param pos          byte offset of marker segment
 @param len          length of marker segment
  */
-static OPJ_BOOL opj_j2k_add_mhmarker(opj_codestream_index_t *cstr_index, OPJ_UINT32 type, OPJ_OFF_T pos, OPJ_UINT32 len) ;
+static OPJ_BOOL opj_j2k_add_mhmarker(opj_codestream_index_t *cstr_index,
+                                     OPJ_UINT32 type, OPJ_OFF_T pos, OPJ_UINT32 len) ;
 /**
 Add tile header marker information
 @param tileno       tile index number
@@ -993,7 +1007,9 @@ Add tile header marker information
 @param pos          byte offset of marker segment
 @param len          length of marker segment
  */
-static OPJ_BOOL opj_j2k_add_tlmarker(OPJ_UINT32 tileno, opj_codestream_index_t *cstr_index, OPJ_UINT32 type, OPJ_OFF_T pos, OPJ_UINT32 len);
+static OPJ_BOOL opj_j2k_add_tlmarker(OPJ_UINT32 tileno,
+                                     opj_codestream_index_t *cstr_index, OPJ_UINT32 type, OPJ_OFF_T pos,
+                                     OPJ_UINT32 len);
 
 /**
  * Reads an unknown marker
@@ -1005,10 +1021,10 @@ static OPJ_BOOL opj_j2k_add_tlmarker(OPJ_UINT32 tileno, opj_codestream_index_t *
  *
  * @return      true                    if the marker could be deduced.
 */
-static OPJ_BOOL opj_j2k_read_unk( opj_j2k_t *p_j2k,
-                                  opj_stream_private_t *p_stream,
-                                  OPJ_UINT32 *output_marker,
-                                  opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_read_unk(opj_j2k_t *p_j2k,
+                                 opj_stream_private_t *p_stream,
+                                 OPJ_UINT32 *output_marker,
+                                 opj_event_mgr_t * p_manager);
 
 /**
  * Writes the MCT marker (Multiple Component Transform)
@@ -1018,10 +1034,10 @@ static OPJ_BOOL opj_j2k_read_unk( opj_j2k_t *p_j2k,
  * @param       p_stream        the stream to write data to.
  * @param       p_manager       the user event manager.
 */
-static OPJ_BOOL opj_j2k_write_mct_record(       opj_j2k_t *p_j2k,
-                                                                                    opj_mct_data_t * p_mct_record,
-                                            opj_stream_private_t *p_stream,
-                                            opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_write_mct_record(opj_j2k_t *p_j2k,
+        opj_mct_data_t * p_mct_record,
+        opj_stream_private_t *p_stream,
+        opj_event_mgr_t * p_manager);
 
 /**
  * Reads a MCT marker (Multiple Component Transform)
@@ -1031,10 +1047,10 @@ static OPJ_BOOL opj_j2k_write_mct_record(       opj_j2k_t *p_j2k,
  * @param       p_header_size   the size of the data contained in the MCT marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_mct (      opj_j2k_t *p_j2k,
-                                                                    OPJ_BYTE * p_header_data,
-                                                                    OPJ_UINT32 p_header_size,
-                                                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_read_mct(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager);
 
 /**
  * Writes the MCC marker (Multiple Component Collection)
@@ -1044,10 +1060,10 @@ static OPJ_BOOL opj_j2k_read_mct (      opj_j2k_t *p_j2k,
  * @param       p_stream                the stream to write data to.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_write_mcc_record(   opj_j2k_t *p_j2k,
-                                            opj_simple_mcc_decorrelation_data_t * p_mcc_record,
-                                            opj_stream_private_t *p_stream,
-                                            opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_write_mcc_record(opj_j2k_t *p_j2k,
+        opj_simple_mcc_decorrelation_data_t * p_mcc_record,
+        opj_stream_private_t *p_stream,
+        opj_event_mgr_t * p_manager);
 
 /**
  * Reads a MCC marker (Multiple Component Collection)
@@ -1057,10 +1073,10 @@ static OPJ_BOOL opj_j2k_write_mcc_record(   opj_j2k_t *p_j2k,
  * @param       p_header_size   the size of the data contained in the MCC marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_mcc (      opj_j2k_t *p_j2k,
-                                                                    OPJ_BYTE * p_header_data,
-                                                                    OPJ_UINT32 p_header_size,
-                                                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_read_mcc(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager);
 
 /**
  * Writes the MCO marker (Multiple component transformation ordering)
@@ -1069,9 +1085,9 @@ static OPJ_BOOL opj_j2k_read_mcc (      opj_j2k_t *p_j2k,
  * @param       p_j2k                           J2K codec.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_write_mco(      opj_j2k_t *p_j2k,
-                                    opj_stream_private_t *p_stream,
-                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_write_mco(opj_j2k_t *p_j2k,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager);
 
 /**
  * Reads a MCO marker (Multiple Component Transform Ordering)
@@ -1081,27 +1097,40 @@ static OPJ_BOOL opj_j2k_write_mco(      opj_j2k_t *p_j2k,
  * @param       p_header_size   the size of the data contained in the MCO marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_mco (      opj_j2k_t *p_j2k,
-                                                                    OPJ_BYTE * p_header_data,
-                                                                    OPJ_UINT32 p_header_size,
-                                                                    opj_event_mgr_t * p_manager );
-
-static OPJ_BOOL opj_j2k_add_mct(opj_tcp_t * p_tcp, opj_image_t * p_image, OPJ_UINT32 p_index);
-
-static void  opj_j2k_read_int16_to_float (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem);
-static void  opj_j2k_read_int32_to_float (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem);
-static void  opj_j2k_read_float32_to_float (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem);
-static void  opj_j2k_read_float64_to_float (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem);
-
-static void  opj_j2k_read_int16_to_int32 (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem);
-static void  opj_j2k_read_int32_to_int32 (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem);
-static void  opj_j2k_read_float32_to_int32 (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem);
-static void  opj_j2k_read_float64_to_int32 (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem);
+static OPJ_BOOL opj_j2k_read_mco(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager);
 
-static void  opj_j2k_write_float_to_int16 (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem);
-static void  opj_j2k_write_float_to_int32 (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem);
-static void  opj_j2k_write_float_to_float (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem);
-static void  opj_j2k_write_float_to_float64 (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem);
+static OPJ_BOOL opj_j2k_add_mct(opj_tcp_t * p_tcp, opj_image_t * p_image,
+                                OPJ_UINT32 p_index);
+
+static void  opj_j2k_read_int16_to_float(const void * p_src_data,
+        void * p_dest_data, OPJ_UINT32 p_nb_elem);
+static void  opj_j2k_read_int32_to_float(const void * p_src_data,
+        void * p_dest_data, OPJ_UINT32 p_nb_elem);
+static void  opj_j2k_read_float32_to_float(const void * p_src_data,
+        void * p_dest_data, OPJ_UINT32 p_nb_elem);
+static void  opj_j2k_read_float64_to_float(const void * p_src_data,
+        void * p_dest_data, OPJ_UINT32 p_nb_elem);
+
+static void  opj_j2k_read_int16_to_int32(const void * p_src_data,
+        void * p_dest_data, OPJ_UINT32 p_nb_elem);
+static void  opj_j2k_read_int32_to_int32(const void * p_src_data,
+        void * p_dest_data, OPJ_UINT32 p_nb_elem);
+static void  opj_j2k_read_float32_to_int32(const void * p_src_data,
+        void * p_dest_data, OPJ_UINT32 p_nb_elem);
+static void  opj_j2k_read_float64_to_int32(const void * p_src_data,
+        void * p_dest_data, OPJ_UINT32 p_nb_elem);
+
+static void  opj_j2k_write_float_to_int16(const void * p_src_data,
+        void * p_dest_data, OPJ_UINT32 p_nb_elem);
+static void  opj_j2k_write_float_to_int32(const void * p_src_data,
+        void * p_dest_data, OPJ_UINT32 p_nb_elem);
+static void  opj_j2k_write_float_to_float(const void * p_src_data,
+        void * p_dest_data, OPJ_UINT32 p_nb_elem);
+static void  opj_j2k_write_float_to_float64(const void * p_src_data,
+        void * p_dest_data, OPJ_UINT32 p_nb_elem);
 
 /**
  * Ends the encoding, i.e. frees memory.
@@ -1110,9 +1139,9 @@ static void  opj_j2k_write_float_to_float64 (const void * p_src_data, void * p_d
  * @param       p_j2k                   J2K codec.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_end_encoding(   opj_j2k_t *p_j2k,
-                                                                            opj_stream_private_t *p_stream,
-                                                                            opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_end_encoding(opj_j2k_t *p_j2k,
+                                     opj_stream_private_t *p_stream,
+                                     opj_event_mgr_t * p_manager);
 
 /**
  * Writes the CBD marker (Component bit depth definition)
@@ -1121,9 +1150,9 @@ static OPJ_BOOL opj_j2k_end_encoding(   opj_j2k_t *p_j2k,
  * @param       p_j2k                           J2K codec.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_write_cbd(      opj_j2k_t *p_j2k,
-                                                                    opj_stream_private_t *p_stream,
-                                                                        opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_write_cbd(opj_j2k_t *p_j2k,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager);
 
 /**
  * Reads a CBD marker (Component bit depth definition)
@@ -1132,10 +1161,10 @@ static OPJ_BOOL opj_j2k_write_cbd(      opj_j2k_t *p_j2k,
  * @param       p_header_size   the size of the data contained in the CBD marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_cbd (      opj_j2k_t *p_j2k,
-                                                                OPJ_BYTE * p_header_data,
-                                                                OPJ_UINT32 p_header_size,
-                                                                opj_event_mgr_t * p_manager);
+static OPJ_BOOL opj_j2k_read_cbd(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager);
 
 
 /**
@@ -1145,9 +1174,9 @@ static OPJ_BOOL opj_j2k_read_cbd (      opj_j2k_t *p_j2k,
  * @param       p_j2k                   J2K codec.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_write_all_coc( opj_j2k_t *p_j2k,
-                                                                        opj_stream_private_t *p_stream,
-                                                                        opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_write_all_coc(opj_j2k_t *p_j2k,
+                                      opj_stream_private_t *p_stream,
+                                      opj_event_mgr_t * p_manager);
 
 /**
  * Writes QCC marker for each component.
@@ -1156,9 +1185,9 @@ static OPJ_BOOL opj_j2k_write_all_coc( opj_j2k_t *p_j2k,
  * @param       p_j2k                   J2K codec.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_write_all_qcc( opj_j2k_t *p_j2k,
-                                                                        opj_stream_private_t *p_stream,
-                                                                        opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_write_all_qcc(opj_j2k_t *p_j2k,
+                                      opj_stream_private_t *p_stream,
+                                      opj_event_mgr_t * p_manager);
 
 /**
  * Writes regions of interests.
@@ -1167,9 +1196,9 @@ static OPJ_BOOL opj_j2k_write_all_qcc( opj_j2k_t *p_j2k,
  * @param       p_j2k                   J2K codec.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_write_regions(  opj_j2k_t *p_j2k,
-                                                                        opj_stream_private_t *p_stream,
-                                                                        opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_write_regions(opj_j2k_t *p_j2k,
+                                      opj_stream_private_t *p_stream,
+                                      opj_event_mgr_t * p_manager);
 
 /**
  * Writes EPC ????
@@ -1178,9 +1207,9 @@ static OPJ_BOOL opj_j2k_write_regions(  opj_j2k_t *p_j2k,
  * @param       p_j2k                   J2K codec.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_write_epc(      opj_j2k_t *p_j2k,
-                                                                    opj_stream_private_t *p_stream,
-                                                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_write_epc(opj_j2k_t *p_j2k,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager);
 
 /**
  * Checks the progression order changes values. Tells of the poc given as input are valid.
@@ -1195,12 +1224,12 @@ static OPJ_BOOL opj_j2k_write_epc(      opj_j2k_t *p_j2k,
  *
  * @return      true if the pocs are valid.
  */
-static OPJ_BOOL opj_j2k_check_poc_val(  const opj_poc_t *p_pocs,
-                                                                            OPJ_UINT32 p_nb_pocs,
-                                                                            OPJ_UINT32 p_nb_resolutions,
-                                                                            OPJ_UINT32 numcomps,
-                                                                            OPJ_UINT32 numlayers,
-                                                                            opj_event_mgr_t * p_manager);
+static OPJ_BOOL opj_j2k_check_poc_val(const opj_poc_t *p_pocs,
+                                      OPJ_UINT32 p_nb_pocs,
+                                      OPJ_UINT32 p_nb_resolutions,
+                                      OPJ_UINT32 numcomps,
+                                      OPJ_UINT32 numlayers,
+                                      opj_event_mgr_t * p_manager);
 
 /**
  * Gets the number of tile parts used for the given change of progression (if any) and the given tile.
@@ -1211,7 +1240,8 @@ static OPJ_BOOL opj_j2k_check_poc_val(  const opj_poc_t *p_pocs,
  *
  * @return              the number of tile parts.
  */
-static OPJ_UINT32 opj_j2k_get_num_tp( opj_cp_t *cp, OPJ_UINT32 pino, OPJ_UINT32 tileno);
+static OPJ_UINT32 opj_j2k_get_num_tp(opj_cp_t *cp, OPJ_UINT32 pino,
+                                     OPJ_UINT32 tileno);
 
 /**
  * Calculates the total number of tile parts needed by the encoder to
@@ -1225,11 +1255,11 @@ static OPJ_UINT32 opj_j2k_get_num_tp( opj_cp_t *cp, OPJ_UINT32 pino, OPJ_UINT32
  *
  * @return true if the function was successful, false else.
  */
-static OPJ_BOOL opj_j2k_calculate_tp(   opj_j2k_t *p_j2k,
-                                                                            opj_cp_t *cp,
-                                                                            OPJ_UINT32 * p_nb_tiles,
-                                                                            opj_image_t *image,
-                                                                            opj_event_mgr_t * p_manager);
+static OPJ_BOOL opj_j2k_calculate_tp(opj_j2k_t *p_j2k,
+                                     opj_cp_t *cp,
+                                     OPJ_UINT32 * p_nb_tiles,
+                                     opj_image_t *image,
+                                     opj_event_mgr_t * p_manager);
 
 static void opj_j2k_dump_MH_info(opj_j2k_t* p_j2k, FILE* out_stream);
 
@@ -1237,15 +1267,17 @@ static void opj_j2k_dump_MH_index(opj_j2k_t* p_j2k, FILE* out_stream);
 
 static opj_codestream_index_t* opj_j2k_create_cstr_index(void);
 
-static OPJ_FLOAT32 opj_j2k_get_tp_stride (opj_tcp_t * p_tcp);
+static OPJ_FLOAT32 opj_j2k_get_tp_stride(opj_tcp_t * p_tcp);
 
-static OPJ_FLOAT32 opj_j2k_get_default_stride (opj_tcp_t * p_tcp);
+static OPJ_FLOAT32 opj_j2k_get_default_stride(opj_tcp_t * p_tcp);
 
 static int opj_j2k_initialise_4K_poc(opj_poc_t *POC, int numres);
 
-static void opj_j2k_set_cinema_parameters(opj_cparameters_t *parameters, opj_image_t *image, opj_event_mgr_t *p_manager);
+static void opj_j2k_set_cinema_parameters(opj_cparameters_t *parameters,
+        opj_image_t *image, opj_event_mgr_t *p_manager);
 
-static OPJ_BOOL opj_j2k_is_cinema_compliant(opj_image_t *image, OPJ_UINT16 rsiz, opj_event_mgr_t *p_manager);
+static OPJ_BOOL opj_j2k_is_cinema_compliant(opj_image_t *image, OPJ_UINT16 rsiz,
+        opj_event_mgr_t *p_manager);
 
 /**
  * Checks for invalid number of tile-parts in SOT marker (TPsot==TNsot). See issue 254.
@@ -1257,589 +1289,600 @@ static OPJ_BOOL opj_j2k_is_cinema_compliant(opj_image_t *image, OPJ_UINT16 rsiz,
  *
  * @return true if the function was successful, false else.
  */
-static OPJ_BOOL opj_j2k_need_nb_tile_parts_correction(opj_stream_private_t *p_stream, OPJ_UINT32 tile_no, OPJ_BOOL* p_correction_needed, opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_j2k_need_nb_tile_parts_correction(opj_stream_private_t
+        *p_stream, OPJ_UINT32 tile_no, OPJ_BOOL* p_correction_needed,
+        opj_event_mgr_t * p_manager);
 
 /*@}*/
 
 /*@}*/
 
 /* ----------------------------------------------------------------------- */
-typedef struct j2k_prog_order{
-        OPJ_PROG_ORDER enum_prog;
-        char str_prog[5];
-}j2k_prog_order_t;
+typedef struct j2k_prog_order {
+    OPJ_PROG_ORDER enum_prog;
+    char str_prog[5];
+} j2k_prog_order_t;
 
 static j2k_prog_order_t j2k_prog_order_list[] = {
-        {OPJ_CPRL, "CPRL"},
-        {OPJ_LRCP, "LRCP"},
-        {OPJ_PCRL, "PCRL"},
-        {OPJ_RLCP, "RLCP"},
-        {OPJ_RPCL, "RPCL"},
-        {(OPJ_PROG_ORDER)-1, ""}
+    {OPJ_CPRL, "CPRL"},
+    {OPJ_LRCP, "LRCP"},
+    {OPJ_PCRL, "PCRL"},
+    {OPJ_RLCP, "RLCP"},
+    {OPJ_RPCL, "RPCL"},
+    {(OPJ_PROG_ORDER) - 1, ""}
 };
 
 /**
  * FIXME DOC
  */
-static const OPJ_UINT32 MCT_ELEMENT_SIZE [] =
-{
-        2,
-        4,
-        4,
-        8
+static const OPJ_UINT32 MCT_ELEMENT_SIZE [] = {
+    2,
+    4,
+    4,
+    8
 };
 
-typedef void (* opj_j2k_mct_function) (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem);
+typedef void (* opj_j2k_mct_function)(const void * p_src_data,
+                                      void * p_dest_data, OPJ_UINT32 p_nb_elem);
 
-static const opj_j2k_mct_function j2k_mct_read_functions_to_float [] =
-{
-        opj_j2k_read_int16_to_float,
-        opj_j2k_read_int32_to_float,
-        opj_j2k_read_float32_to_float,
-        opj_j2k_read_float64_to_float
+static const opj_j2k_mct_function j2k_mct_read_functions_to_float [] = {
+    opj_j2k_read_int16_to_float,
+    opj_j2k_read_int32_to_float,
+    opj_j2k_read_float32_to_float,
+    opj_j2k_read_float64_to_float
 };
 
-static const opj_j2k_mct_function j2k_mct_read_functions_to_int32 [] =
-{
-        opj_j2k_read_int16_to_int32,
-        opj_j2k_read_int32_to_int32,
-        opj_j2k_read_float32_to_int32,
-        opj_j2k_read_float64_to_int32
+static const opj_j2k_mct_function j2k_mct_read_functions_to_int32 [] = {
+    opj_j2k_read_int16_to_int32,
+    opj_j2k_read_int32_to_int32,
+    opj_j2k_read_float32_to_int32,
+    opj_j2k_read_float64_to_int32
 };
 
-static const opj_j2k_mct_function j2k_mct_write_functions_from_float [] =
-{
-        opj_j2k_write_float_to_int16,
-        opj_j2k_write_float_to_int32,
-        opj_j2k_write_float_to_float,
-        opj_j2k_write_float_to_float64
+static const opj_j2k_mct_function j2k_mct_write_functions_from_float [] = {
+    opj_j2k_write_float_to_int16,
+    opj_j2k_write_float_to_int32,
+    opj_j2k_write_float_to_float,
+    opj_j2k_write_float_to_float64
 };
 
-typedef struct opj_dec_memory_marker_handler
-{
-        /** marker value */
-        OPJ_UINT32 id;
-        /** value of the state when the marker can appear */
-        OPJ_UINT32 states;
-        /** action linked to the marker */
-        OPJ_BOOL (*handler) (   opj_j2k_t *p_j2k,
-                            OPJ_BYTE * p_header_data,
-                            OPJ_UINT32 p_header_size,
-                            opj_event_mgr_t * p_manager );
+typedef struct opj_dec_memory_marker_handler {
+    /** marker value */
+    OPJ_UINT32 id;
+    /** value of the state when the marker can appear */
+    OPJ_UINT32 states;
+    /** action linked to the marker */
+    OPJ_BOOL(*handler)(opj_j2k_t *p_j2k,
+                       OPJ_BYTE * p_header_data,
+                       OPJ_UINT32 p_header_size,
+                       opj_event_mgr_t * p_manager);
 }
 opj_dec_memory_marker_handler_t;
 
 static const opj_dec_memory_marker_handler_t j2k_memory_marker_handler_tab [] =
 {
-  {J2K_MS_SOT, J2K_STATE_MH | J2K_STATE_TPHSOT, opj_j2k_read_sot},
-  {J2K_MS_COD, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_cod},
-  {J2K_MS_COC, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_coc},
-  {J2K_MS_RGN, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_rgn},
-  {J2K_MS_QCD, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_qcd},
-  {J2K_MS_QCC, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_qcc},
-  {J2K_MS_POC, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_poc},
-  {J2K_MS_SIZ, J2K_STATE_MHSIZ, opj_j2k_read_siz},
-  {J2K_MS_TLM, J2K_STATE_MH, opj_j2k_read_tlm},
-  {J2K_MS_PLM, J2K_STATE_MH, opj_j2k_read_plm},
-  {J2K_MS_PLT, J2K_STATE_TPH, opj_j2k_read_plt},
-  {J2K_MS_PPM, J2K_STATE_MH, opj_j2k_read_ppm},
-  {J2K_MS_PPT, J2K_STATE_TPH, opj_j2k_read_ppt},
-  {J2K_MS_SOP, 0, 0},
-  {J2K_MS_CRG, J2K_STATE_MH, opj_j2k_read_crg},
-  {J2K_MS_COM, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_com},
-  {J2K_MS_MCT, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_mct},
-  {J2K_MS_CBD, J2K_STATE_MH , opj_j2k_read_cbd},
-  {J2K_MS_MCC, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_mcc},
-  {J2K_MS_MCO, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_mco},
+    {J2K_MS_SOT, J2K_STATE_MH | J2K_STATE_TPHSOT, opj_j2k_read_sot},
+    {J2K_MS_COD, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_cod},
+    {J2K_MS_COC, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_coc},
+    {J2K_MS_RGN, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_rgn},
+    {J2K_MS_QCD, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_qcd},
+    {J2K_MS_QCC, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_qcc},
+    {J2K_MS_POC, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_poc},
+    {J2K_MS_SIZ, J2K_STATE_MHSIZ, opj_j2k_read_siz},
+    {J2K_MS_TLM, J2K_STATE_MH, opj_j2k_read_tlm},
+    {J2K_MS_PLM, J2K_STATE_MH, opj_j2k_read_plm},
+    {J2K_MS_PLT, J2K_STATE_TPH, opj_j2k_read_plt},
+    {J2K_MS_PPM, J2K_STATE_MH, opj_j2k_read_ppm},
+    {J2K_MS_PPT, J2K_STATE_TPH, opj_j2k_read_ppt},
+    {J2K_MS_SOP, 0, 0},
+    {J2K_MS_CRG, J2K_STATE_MH, opj_j2k_read_crg},
+    {J2K_MS_COM, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_com},
+    {J2K_MS_MCT, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_mct},
+    {J2K_MS_CBD, J2K_STATE_MH, opj_j2k_read_cbd},
+    {J2K_MS_MCC, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_mcc},
+    {J2K_MS_MCO, J2K_STATE_MH | J2K_STATE_TPH, opj_j2k_read_mco},
 #ifdef USE_JPWL
 #ifdef TODO_MS /* remove these functions which are not commpatible with the v2 API */
-  {J2K_MS_EPC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_epc},
-  {J2K_MS_EPB, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_epb},
-  {J2K_MS_ESD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_esd},
-  {J2K_MS_RED, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_red},
+    {J2K_MS_EPC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_epc},
+    {J2K_MS_EPB, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_epb},
+    {J2K_MS_ESD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_esd},
+    {J2K_MS_RED, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_red},
 #endif
 #endif /* USE_JPWL */
 #ifdef USE_JPSEC
-  {J2K_MS_SEC, J2K_DEC_STATE_MH, j2k_read_sec},
-  {J2K_MS_INSEC, 0, j2k_read_insec}
+    {J2K_MS_SEC, J2K_DEC_STATE_MH, j2k_read_sec},
+    {J2K_MS_INSEC, 0, j2k_read_insec}
 #endif /* USE_JPSEC */
-  {J2K_MS_UNK, J2K_STATE_MH | J2K_STATE_TPH, 0}/*opj_j2k_read_unk is directly used*/
+    {J2K_MS_UNK, J2K_STATE_MH | J2K_STATE_TPH, 0}/*opj_j2k_read_unk is directly used*/
 };
 
-static void  opj_j2k_read_int16_to_float (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem)
+static void  opj_j2k_read_int16_to_float(const void * p_src_data,
+        void * p_dest_data, OPJ_UINT32 p_nb_elem)
 {
-        OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data;
-        OPJ_FLOAT32 * l_dest_data = (OPJ_FLOAT32 *) p_dest_data;
-        OPJ_UINT32 i;
-        OPJ_UINT32 l_temp;
+    OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data;
+    OPJ_FLOAT32 * l_dest_data = (OPJ_FLOAT32 *) p_dest_data;
+    OPJ_UINT32 i;
+    OPJ_UINT32 l_temp;
 
-        for (i=0;i<p_nb_elem;++i) {
-                opj_read_bytes(l_src_data,&l_temp,2);
+    for (i = 0; i < p_nb_elem; ++i) {
+        opj_read_bytes(l_src_data, &l_temp, 2);
 
-                l_src_data+=sizeof(OPJ_INT16);
+        l_src_data += sizeof(OPJ_INT16);
 
-                *(l_dest_data++) = (OPJ_FLOAT32) l_temp;
-        }
+        *(l_dest_data++) = (OPJ_FLOAT32) l_temp;
+    }
 }
 
-static void  opj_j2k_read_int32_to_float (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem)
+static void  opj_j2k_read_int32_to_float(const void * p_src_data,
+        void * p_dest_data, OPJ_UINT32 p_nb_elem)
 {
-        OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data;
-        OPJ_FLOAT32 * l_dest_data = (OPJ_FLOAT32 *) p_dest_data;
-        OPJ_UINT32 i;
-        OPJ_UINT32 l_temp;
+    OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data;
+    OPJ_FLOAT32 * l_dest_data = (OPJ_FLOAT32 *) p_dest_data;
+    OPJ_UINT32 i;
+    OPJ_UINT32 l_temp;
 
-        for (i=0;i<p_nb_elem;++i) {
-                opj_read_bytes(l_src_data,&l_temp,4);
+    for (i = 0; i < p_nb_elem; ++i) {
+        opj_read_bytes(l_src_data, &l_temp, 4);
 
-                l_src_data+=sizeof(OPJ_INT32);
+        l_src_data += sizeof(OPJ_INT32);
 
-                *(l_dest_data++) = (OPJ_FLOAT32) l_temp;
-        }
+        *(l_dest_data++) = (OPJ_FLOAT32) l_temp;
+    }
 }
 
-static void  opj_j2k_read_float32_to_float (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem)
+static void  opj_j2k_read_float32_to_float(const void * p_src_data,
+        void * p_dest_data, OPJ_UINT32 p_nb_elem)
 {
-        OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data;
-        OPJ_FLOAT32 * l_dest_data = (OPJ_FLOAT32 *) p_dest_data;
-        OPJ_UINT32 i;
-        OPJ_FLOAT32 l_temp;
+    OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data;
+    OPJ_FLOAT32 * l_dest_data = (OPJ_FLOAT32 *) p_dest_data;
+    OPJ_UINT32 i;
+    OPJ_FLOAT32 l_temp;
 
-        for (i=0;i<p_nb_elem;++i) {
-                opj_read_float(l_src_data,&l_temp);
+    for (i = 0; i < p_nb_elem; ++i) {
+        opj_read_float(l_src_data, &l_temp);
 
-                l_src_data+=sizeof(OPJ_FLOAT32);
+        l_src_data += sizeof(OPJ_FLOAT32);
 
-                *(l_dest_data++) = l_temp;
-        }
+        *(l_dest_data++) = l_temp;
+    }
 }
 
-static void  opj_j2k_read_float64_to_float (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem)
+static void  opj_j2k_read_float64_to_float(const void * p_src_data,
+        void * p_dest_data, OPJ_UINT32 p_nb_elem)
 {
-        OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data;
-        OPJ_FLOAT32 * l_dest_data = (OPJ_FLOAT32 *) p_dest_data;
-        OPJ_UINT32 i;
-        OPJ_FLOAT64 l_temp;
+    OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data;
+    OPJ_FLOAT32 * l_dest_data = (OPJ_FLOAT32 *) p_dest_data;
+    OPJ_UINT32 i;
+    OPJ_FLOAT64 l_temp;
 
-        for (i=0;i<p_nb_elem;++i) {
-                opj_read_double(l_src_data,&l_temp);
+    for (i = 0; i < p_nb_elem; ++i) {
+        opj_read_double(l_src_data, &l_temp);
 
-                l_src_data+=sizeof(OPJ_FLOAT64);
+        l_src_data += sizeof(OPJ_FLOAT64);
 
-                *(l_dest_data++) = (OPJ_FLOAT32) l_temp;
-        }
+        *(l_dest_data++) = (OPJ_FLOAT32) l_temp;
+    }
 }
 
-static void  opj_j2k_read_int16_to_int32 (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem)
+static void  opj_j2k_read_int16_to_int32(const void * p_src_data,
+        void * p_dest_data, OPJ_UINT32 p_nb_elem)
 {
-        OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data;
-        OPJ_INT32 * l_dest_data = (OPJ_INT32 *) p_dest_data;
-        OPJ_UINT32 i;
-        OPJ_UINT32 l_temp;
+    OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data;
+    OPJ_INT32 * l_dest_data = (OPJ_INT32 *) p_dest_data;
+    OPJ_UINT32 i;
+    OPJ_UINT32 l_temp;
 
-        for (i=0;i<p_nb_elem;++i) {
-                opj_read_bytes(l_src_data,&l_temp,2);
+    for (i = 0; i < p_nb_elem; ++i) {
+        opj_read_bytes(l_src_data, &l_temp, 2);
 
-                l_src_data+=sizeof(OPJ_INT16);
+        l_src_data += sizeof(OPJ_INT16);
 
-                *(l_dest_data++) = (OPJ_INT32) l_temp;
-        }
+        *(l_dest_data++) = (OPJ_INT32) l_temp;
+    }
 }
 
-static void  opj_j2k_read_int32_to_int32 (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem)
+static void  opj_j2k_read_int32_to_int32(const void * p_src_data,
+        void * p_dest_data, OPJ_UINT32 p_nb_elem)
 {
-        OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data;
-        OPJ_INT32 * l_dest_data = (OPJ_INT32 *) p_dest_data;
-        OPJ_UINT32 i;
-        OPJ_UINT32 l_temp;
+    OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data;
+    OPJ_INT32 * l_dest_data = (OPJ_INT32 *) p_dest_data;
+    OPJ_UINT32 i;
+    OPJ_UINT32 l_temp;
 
-        for (i=0;i<p_nb_elem;++i) {
-                opj_read_bytes(l_src_data,&l_temp,4);
+    for (i = 0; i < p_nb_elem; ++i) {
+        opj_read_bytes(l_src_data, &l_temp, 4);
 
-                l_src_data+=sizeof(OPJ_INT32);
+        l_src_data += sizeof(OPJ_INT32);
 
-                *(l_dest_data++) = (OPJ_INT32) l_temp;
-        }
+        *(l_dest_data++) = (OPJ_INT32) l_temp;
+    }
 }
 
-static void  opj_j2k_read_float32_to_int32 (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem)
+static void  opj_j2k_read_float32_to_int32(const void * p_src_data,
+        void * p_dest_data, OPJ_UINT32 p_nb_elem)
 {
-        OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data;
-        OPJ_INT32 * l_dest_data = (OPJ_INT32 *) p_dest_data;
-        OPJ_UINT32 i;
-        OPJ_FLOAT32 l_temp;
+    OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data;
+    OPJ_INT32 * l_dest_data = (OPJ_INT32 *) p_dest_data;
+    OPJ_UINT32 i;
+    OPJ_FLOAT32 l_temp;
 
-        for (i=0;i<p_nb_elem;++i) {
-                opj_read_float(l_src_data,&l_temp);
+    for (i = 0; i < p_nb_elem; ++i) {
+        opj_read_float(l_src_data, &l_temp);
 
-                l_src_data+=sizeof(OPJ_FLOAT32);
+        l_src_data += sizeof(OPJ_FLOAT32);
 
-                *(l_dest_data++) = (OPJ_INT32) l_temp;
-        }
+        *(l_dest_data++) = (OPJ_INT32) l_temp;
+    }
 }
 
-static void  opj_j2k_read_float64_to_int32 (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem)
+static void  opj_j2k_read_float64_to_int32(const void * p_src_data,
+        void * p_dest_data, OPJ_UINT32 p_nb_elem)
 {
-        OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data;
-        OPJ_INT32 * l_dest_data = (OPJ_INT32 *) p_dest_data;
-        OPJ_UINT32 i;
-        OPJ_FLOAT64 l_temp;
+    OPJ_BYTE * l_src_data = (OPJ_BYTE *) p_src_data;
+    OPJ_INT32 * l_dest_data = (OPJ_INT32 *) p_dest_data;
+    OPJ_UINT32 i;
+    OPJ_FLOAT64 l_temp;
 
-        for (i=0;i<p_nb_elem;++i) {
-                opj_read_double(l_src_data,&l_temp);
+    for (i = 0; i < p_nb_elem; ++i) {
+        opj_read_double(l_src_data, &l_temp);
 
-                l_src_data+=sizeof(OPJ_FLOAT64);
+        l_src_data += sizeof(OPJ_FLOAT64);
 
-                *(l_dest_data++) = (OPJ_INT32) l_temp;
-        }
+        *(l_dest_data++) = (OPJ_INT32) l_temp;
+    }
 }
 
-static void  opj_j2k_write_float_to_int16 (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem)
+static void  opj_j2k_write_float_to_int16(const void * p_src_data,
+        void * p_dest_data, OPJ_UINT32 p_nb_elem)
 {
-        OPJ_BYTE * l_dest_data = (OPJ_BYTE *) p_dest_data;
-        OPJ_FLOAT32 * l_src_data = (OPJ_FLOAT32 *) p_src_data;
-        OPJ_UINT32 i;
-        OPJ_UINT32 l_temp;
+    OPJ_BYTE * l_dest_data = (OPJ_BYTE *) p_dest_data;
+    OPJ_FLOAT32 * l_src_data = (OPJ_FLOAT32 *) p_src_data;
+    OPJ_UINT32 i;
+    OPJ_UINT32 l_temp;
 
-        for (i=0;i<p_nb_elem;++i) {
-                l_temp = (OPJ_UINT32) *(l_src_data++);
+    for (i = 0; i < p_nb_elem; ++i) {
+        l_temp = (OPJ_UINT32) * (l_src_data++);
 
-                opj_write_bytes(l_dest_data,l_temp,sizeof(OPJ_INT16));
+        opj_write_bytes(l_dest_data, l_temp, sizeof(OPJ_INT16));
 
-                l_dest_data+=sizeof(OPJ_INT16);
-        }
+        l_dest_data += sizeof(OPJ_INT16);
+    }
 }
 
-static void opj_j2k_write_float_to_int32 (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem)
+static void opj_j2k_write_float_to_int32(const void * p_src_data,
+        void * p_dest_data, OPJ_UINT32 p_nb_elem)
 {
-        OPJ_BYTE * l_dest_data = (OPJ_BYTE *) p_dest_data;
-        OPJ_FLOAT32 * l_src_data = (OPJ_FLOAT32 *) p_src_data;
-        OPJ_UINT32 i;
-        OPJ_UINT32 l_temp;
+    OPJ_BYTE * l_dest_data = (OPJ_BYTE *) p_dest_data;
+    OPJ_FLOAT32 * l_src_data = (OPJ_FLOAT32 *) p_src_data;
+    OPJ_UINT32 i;
+    OPJ_UINT32 l_temp;
 
-        for (i=0;i<p_nb_elem;++i) {
-                l_temp = (OPJ_UINT32) *(l_src_data++);
+    for (i = 0; i < p_nb_elem; ++i) {
+        l_temp = (OPJ_UINT32) * (l_src_data++);
 
-                opj_write_bytes(l_dest_data,l_temp,sizeof(OPJ_INT32));
+        opj_write_bytes(l_dest_data, l_temp, sizeof(OPJ_INT32));
 
-                l_dest_data+=sizeof(OPJ_INT32);
-        }
+        l_dest_data += sizeof(OPJ_INT32);
+    }
 }
 
-static void  opj_j2k_write_float_to_float (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem)
+static void  opj_j2k_write_float_to_float(const void * p_src_data,
+        void * p_dest_data, OPJ_UINT32 p_nb_elem)
 {
-        OPJ_BYTE * l_dest_data = (OPJ_BYTE *) p_dest_data;
-        OPJ_FLOAT32 * l_src_data = (OPJ_FLOAT32 *) p_src_data;
-        OPJ_UINT32 i;
-        OPJ_FLOAT32 l_temp;
+    OPJ_BYTE * l_dest_data = (OPJ_BYTE *) p_dest_data;
+    OPJ_FLOAT32 * l_src_data = (OPJ_FLOAT32 *) p_src_data;
+    OPJ_UINT32 i;
+    OPJ_FLOAT32 l_temp;
 
-        for (i=0;i<p_nb_elem;++i) {
-                l_temp = (OPJ_FLOAT32) *(l_src_data++);
+    for (i = 0; i < p_nb_elem; ++i) {
+        l_temp = (OPJ_FLOAT32) * (l_src_data++);
 
-                opj_write_float(l_dest_data,l_temp);
+        opj_write_float(l_dest_data, l_temp);
 
-                l_dest_data+=sizeof(OPJ_FLOAT32);
-        }
+        l_dest_data += sizeof(OPJ_FLOAT32);
+    }
 }
 
-static void  opj_j2k_write_float_to_float64 (const void * p_src_data, void * p_dest_data, OPJ_UINT32 p_nb_elem)
+static void  opj_j2k_write_float_to_float64(const void * p_src_data,
+        void * p_dest_data, OPJ_UINT32 p_nb_elem)
 {
-        OPJ_BYTE * l_dest_data = (OPJ_BYTE *) p_dest_data;
-        OPJ_FLOAT32 * l_src_data = (OPJ_FLOAT32 *) p_src_data;
-        OPJ_UINT32 i;
-        OPJ_FLOAT64 l_temp;
+    OPJ_BYTE * l_dest_data = (OPJ_BYTE *) p_dest_data;
+    OPJ_FLOAT32 * l_src_data = (OPJ_FLOAT32 *) p_src_data;
+    OPJ_UINT32 i;
+    OPJ_FLOAT64 l_temp;
 
-        for (i=0;i<p_nb_elem;++i) {
-                l_temp = (OPJ_FLOAT64) *(l_src_data++);
+    for (i = 0; i < p_nb_elem; ++i) {
+        l_temp = (OPJ_FLOAT64) * (l_src_data++);
 
-                opj_write_double(l_dest_data,l_temp);
+        opj_write_double(l_dest_data, l_temp);
 
-                l_dest_data+=sizeof(OPJ_FLOAT64);
-        }
+        l_dest_data += sizeof(OPJ_FLOAT64);
+    }
 }
 
-char *opj_j2k_convert_progression_order(OPJ_PROG_ORDER prg_order){
-        j2k_prog_order_t *po;
-        for(po = j2k_prog_order_list; po->enum_prog != -1; po++ ){
-                if(po->enum_prog == prg_order){
-                        return po->str_prog;
-                }
+char *opj_j2k_convert_progression_order(OPJ_PROG_ORDER prg_order)
+{
+    j2k_prog_order_t *po;
+    for (po = j2k_prog_order_list; po->enum_prog != -1; po++) {
+        if (po->enum_prog == prg_order) {
+            return po->str_prog;
         }
-        return po->str_prog;
+    }
+    return po->str_prog;
 }
 
-static OPJ_BOOL opj_j2k_check_poc_val( const opj_poc_t *p_pocs,
-                                                        OPJ_UINT32 p_nb_pocs,
-                                                        OPJ_UINT32 p_nb_resolutions,
-                                                        OPJ_UINT32 p_num_comps,
-                                                        OPJ_UINT32 p_num_layers,
-                                                        opj_event_mgr_t * p_manager)
+static OPJ_BOOL opj_j2k_check_poc_val(const opj_poc_t *p_pocs,
+                                      OPJ_UINT32 p_nb_pocs,
+                                      OPJ_UINT32 p_nb_resolutions,
+                                      OPJ_UINT32 p_num_comps,
+                                      OPJ_UINT32 p_num_layers,
+                                      opj_event_mgr_t * p_manager)
 {
-        OPJ_UINT32* packet_array;
-        OPJ_UINT32 index , resno, compno, layno;
-        OPJ_UINT32 i;
-        OPJ_UINT32 step_c = 1;
-        OPJ_UINT32 step_r = p_num_comps * step_c;
-        OPJ_UINT32 step_l = p_nb_resolutions * step_r;
-        OPJ_BOOL loss = OPJ_FALSE;
-        OPJ_UINT32 layno0 = 0;
-
-        packet_array = (OPJ_UINT32*) opj_calloc(step_l * p_num_layers, sizeof(OPJ_UINT32));
-        if (packet_array == 00) {
-                opj_event_msg(p_manager , EVT_ERROR, "Not enough memory for checking the poc values.\n");
-                return OPJ_FALSE;
-        }
+    OPJ_UINT32* packet_array;
+    OPJ_UINT32 index, resno, compno, layno;
+    OPJ_UINT32 i;
+    OPJ_UINT32 step_c = 1;
+    OPJ_UINT32 step_r = p_num_comps * step_c;
+    OPJ_UINT32 step_l = p_nb_resolutions * step_r;
+    OPJ_BOOL loss = OPJ_FALSE;
+    OPJ_UINT32 layno0 = 0;
+
+    packet_array = (OPJ_UINT32*) opj_calloc(step_l * p_num_layers,
+                                            sizeof(OPJ_UINT32));
+    if (packet_array == 00) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Not enough memory for checking the poc values.\n");
+        return OPJ_FALSE;
+    }
 
-        if (p_nb_pocs == 0) {
+    if (p_nb_pocs == 0) {
         opj_free(packet_array);
-                return OPJ_TRUE;
-        }
+        return OPJ_TRUE;
+    }
 
-        index = step_r * p_pocs->resno0;
-        /* take each resolution for each poc */
-        for (resno = p_pocs->resno0 ; resno < p_pocs->resno1 ; ++resno)
-        {
-                OPJ_UINT32 res_index = index + p_pocs->compno0 * step_c;
-
-                /* take each comp of each resolution for each poc */
-                for (compno = p_pocs->compno0 ; compno < p_pocs->compno1 ; ++compno) {
-                        OPJ_UINT32 comp_index = res_index + layno0 * step_l;
-
-                        /* and finally take each layer of each res of ... */
-                        for (layno = layno0; layno < p_pocs->layno1 ; ++layno) {
-                                /*index = step_r * resno + step_c * compno + step_l * layno;*/
-                                packet_array[comp_index] = 1;
-                                comp_index += step_l;
-                        }
+    index = step_r * p_pocs->resno0;
+    /* take each resolution for each poc */
+    for (resno = p_pocs->resno0 ; resno < p_pocs->resno1 ; ++resno) {
+        OPJ_UINT32 res_index = index + p_pocs->compno0 * step_c;
 
-                        res_index += step_c;
-                }
+        /* take each comp of each resolution for each poc */
+        for (compno = p_pocs->compno0 ; compno < p_pocs->compno1 ; ++compno) {
+            OPJ_UINT32 comp_index = res_index + layno0 * step_l;
 
-                index += step_r;
-        }
-        ++p_pocs;
+            /* and finally take each layer of each res of ... */
+            for (layno = layno0; layno < p_pocs->layno1 ; ++layno) {
+                /*index = step_r * resno + step_c * compno + step_l * layno;*/
+                packet_array[comp_index] = 1;
+                comp_index += step_l;
+            }
 
-        /* iterate through all the pocs */
-        for (i = 1; i < p_nb_pocs ; ++i) {
-                OPJ_UINT32 l_last_layno1 = (p_pocs-1)->layno1 ;
+            res_index += step_c;
+        }
 
-                layno0 = (p_pocs->layno1 > l_last_layno1)? l_last_layno1 : 0;
-                index = step_r * p_pocs->resno0;
+        index += step_r;
+    }
+    ++p_pocs;
 
-                /* take each resolution for each poc */
-                for (resno = p_pocs->resno0 ; resno < p_pocs->resno1 ; ++resno) {
-                        OPJ_UINT32 res_index = index + p_pocs->compno0 * step_c;
+    /* iterate through all the pocs */
+    for (i = 1; i < p_nb_pocs ; ++i) {
+        OPJ_UINT32 l_last_layno1 = (p_pocs - 1)->layno1 ;
 
-                        /* take each comp of each resolution for each poc */
-                        for (compno = p_pocs->compno0 ; compno < p_pocs->compno1 ; ++compno) {
-                                OPJ_UINT32 comp_index = res_index + layno0 * step_l;
+        layno0 = (p_pocs->layno1 > l_last_layno1) ? l_last_layno1 : 0;
+        index = step_r * p_pocs->resno0;
 
-                                /* and finally take each layer of each res of ... */
-                                for (layno = layno0; layno < p_pocs->layno1 ; ++layno) {
-                                        /*index = step_r * resno + step_c * compno + step_l * layno;*/
-                                        packet_array[comp_index] = 1;
-                                        comp_index += step_l;
-                                }
+        /* take each resolution for each poc */
+        for (resno = p_pocs->resno0 ; resno < p_pocs->resno1 ; ++resno) {
+            OPJ_UINT32 res_index = index + p_pocs->compno0 * step_c;
 
-                                res_index += step_c;
-                        }
+            /* take each comp of each resolution for each poc */
+            for (compno = p_pocs->compno0 ; compno < p_pocs->compno1 ; ++compno) {
+                OPJ_UINT32 comp_index = res_index + layno0 * step_l;
 
-                        index += step_r;
+                /* and finally take each layer of each res of ... */
+                for (layno = layno0; layno < p_pocs->layno1 ; ++layno) {
+                    /*index = step_r * resno + step_c * compno + step_l * layno;*/
+                    packet_array[comp_index] = 1;
+                    comp_index += step_l;
                 }
 
-                ++p_pocs;
-        }
+                res_index += step_c;
+            }
 
-        index = 0;
-        for (layno = 0; layno < p_num_layers ; ++layno) {
-                for (resno = 0; resno < p_nb_resolutions; ++resno) {
-                        for (compno = 0; compno < p_num_comps; ++compno) {
-                                loss |= (packet_array[index]!=1);
-                                /*index = step_r * resno + step_c * compno + step_l * layno;*/
-                                index += step_c;
-                        }
-                }
+            index += step_r;
         }
 
-        if (loss) {
-                opj_event_msg(p_manager , EVT_ERROR, "Missing packets possible loss of data\n");
+        ++p_pocs;
+    }
+
+    index = 0;
+    for (layno = 0; layno < p_num_layers ; ++layno) {
+        for (resno = 0; resno < p_nb_resolutions; ++resno) {
+            for (compno = 0; compno < p_num_comps; ++compno) {
+                loss |= (packet_array[index] != 1);
+                /*index = step_r * resno + step_c * compno + step_l * layno;*/
+                index += step_c;
+            }
         }
+    }
 
-        opj_free(packet_array);
+    if (loss) {
+        opj_event_msg(p_manager, EVT_ERROR, "Missing packets possible loss of data\n");
+    }
+
+    opj_free(packet_array);
 
-        return !loss;
+    return !loss;
 }
 
 /* ----------------------------------------------------------------------- */
 
-static OPJ_UINT32 opj_j2k_get_num_tp(opj_cp_t *cp, OPJ_UINT32 pino, OPJ_UINT32 tileno)
+static OPJ_UINT32 opj_j2k_get_num_tp(opj_cp_t *cp, OPJ_UINT32 pino,
+                                     OPJ_UINT32 tileno)
 {
-        const OPJ_CHAR *prog = 00;
-        OPJ_INT32 i;
-        OPJ_UINT32 tpnum = 1;
-        opj_tcp_t *tcp = 00;
-        opj_poc_t * l_current_poc = 00;
-
-        /*  preconditions */
-        assert(tileno < (cp->tw * cp->th));
-        assert(pino < (cp->tcps[tileno].numpocs + 1));
-
-        /* get the given tile coding parameter */
-        tcp = &cp->tcps[tileno];
-        assert(tcp != 00);
-
-        l_current_poc = &(tcp->pocs[pino]);
-        assert(l_current_poc != 0);
-
-        /* get the progression order as a character string */
-        prog = opj_j2k_convert_progression_order(tcp->prg);
-        assert(strlen(prog) > 0);
-
-        if (cp->m_specific_param.m_enc.m_tp_on == 1) {
-                for (i=0;i<4;++i) {
-                        switch (prog[i])
-                        {
-                                /* component wise */
-                                case 'C':
-                                        tpnum *= l_current_poc->compE;
-                                        break;
-                                /* resolution wise */
-                                case 'R':
-                                        tpnum *= l_current_poc->resE;
-                                        break;
-                                /* precinct wise */
-                                case 'P':
-                                        tpnum *= l_current_poc->prcE;
-                                        break;
-                                /* layer wise */
-                                case 'L':
-                                        tpnum *= l_current_poc->layE;
-                                        break;
-                        }
-                        /* whould we split here ? */
-                        if ( cp->m_specific_param.m_enc.m_tp_flag == prog[i] ) {
-                                cp->m_specific_param.m_enc.m_tp_pos=i;
-                                break;
-                        }
-                }
-        }
-        else {
-                tpnum=1;
+    const OPJ_CHAR *prog = 00;
+    OPJ_INT32 i;
+    OPJ_UINT32 tpnum = 1;
+    opj_tcp_t *tcp = 00;
+    opj_poc_t * l_current_poc = 00;
+
+    /*  preconditions */
+    assert(tileno < (cp->tw * cp->th));
+    assert(pino < (cp->tcps[tileno].numpocs + 1));
+
+    /* get the given tile coding parameter */
+    tcp = &cp->tcps[tileno];
+    assert(tcp != 00);
+
+    l_current_poc = &(tcp->pocs[pino]);
+    assert(l_current_poc != 0);
+
+    /* get the progression order as a character string */
+    prog = opj_j2k_convert_progression_order(tcp->prg);
+    assert(strlen(prog) > 0);
+
+    if (cp->m_specific_param.m_enc.m_tp_on == 1) {
+        for (i = 0; i < 4; ++i) {
+            switch (prog[i]) {
+            /* component wise */
+            case 'C':
+                tpnum *= l_current_poc->compE;
+                break;
+            /* resolution wise */
+            case 'R':
+                tpnum *= l_current_poc->resE;
+                break;
+            /* precinct wise */
+            case 'P':
+                tpnum *= l_current_poc->prcE;
+                break;
+            /* layer wise */
+            case 'L':
+                tpnum *= l_current_poc->layE;
+                break;
+            }
+            /* whould we split here ? */
+            if (cp->m_specific_param.m_enc.m_tp_flag == prog[i]) {
+                cp->m_specific_param.m_enc.m_tp_pos = i;
+                break;
+            }
         }
+    } else {
+        tpnum = 1;
+    }
 
-        return tpnum;
+    return tpnum;
 }
 
-static OPJ_BOOL opj_j2k_calculate_tp(  opj_j2k_t *p_j2k,
-                                                        opj_cp_t *cp,
-                                                        OPJ_UINT32 * p_nb_tiles,
-                                                        opj_image_t *image,
-                                                        opj_event_mgr_t * p_manager
-                                )
+static OPJ_BOOL opj_j2k_calculate_tp(opj_j2k_t *p_j2k,
+                                     opj_cp_t *cp,
+                                     OPJ_UINT32 * p_nb_tiles,
+                                     opj_image_t *image,
+                                     opj_event_mgr_t * p_manager
+                                    )
 {
-        OPJ_UINT32 pino,tileno;
-        OPJ_UINT32 l_nb_tiles;
-        opj_tcp_t *tcp;
+    OPJ_UINT32 pino, tileno;
+    OPJ_UINT32 l_nb_tiles;
+    opj_tcp_t *tcp;
 
-        /* preconditions */
-        assert(p_nb_tiles != 00);
-        assert(cp != 00);
-        assert(image != 00);
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
+    /* preconditions */
+    assert(p_nb_tiles != 00);
+    assert(cp != 00);
+    assert(image != 00);
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-        l_nb_tiles = cp->tw * cp->th;
-        * p_nb_tiles = 0;
-        tcp = cp->tcps;
+    l_nb_tiles = cp->tw * cp->th;
+    * p_nb_tiles = 0;
+    tcp = cp->tcps;
 
-        /* INDEX >> */
-        /* TODO mergeV2: check this part which use cstr_info */
-        /*if (p_j2k->cstr_info) {
-                opj_tile_info_t * l_info_tile_ptr = p_j2k->cstr_info->tile;
+    /* INDEX >> */
+    /* TODO mergeV2: check this part which use cstr_info */
+    /*if (p_j2k->cstr_info) {
+            opj_tile_info_t * l_info_tile_ptr = p_j2k->cstr_info->tile;
 
-                for (tileno = 0; tileno < l_nb_tiles; ++tileno) {
-                        OPJ_UINT32 cur_totnum_tp = 0;
+            for (tileno = 0; tileno < l_nb_tiles; ++tileno) {
+                    OPJ_UINT32 cur_totnum_tp = 0;
 
-                        opj_pi_update_encoding_parameters(image,cp,tileno);
+                    opj_pi_update_encoding_parameters(image,cp,tileno);
 
-                        for (pino = 0; pino <= tcp->numpocs; ++pino)
-                        {
-                                OPJ_UINT32 tp_num = opj_j2k_get_num_tp(cp,pino,tileno);
+                    for (pino = 0; pino <= tcp->numpocs; ++pino)
+                    {
+                            OPJ_UINT32 tp_num = opj_j2k_get_num_tp(cp,pino,tileno);
 
-                                *p_nb_tiles = *p_nb_tiles + tp_num;
+                            *p_nb_tiles = *p_nb_tiles + tp_num;
 
-                                cur_totnum_tp += tp_num;
-                        }
+                            cur_totnum_tp += tp_num;
+                    }
 
-                        tcp->m_nb_tile_parts = cur_totnum_tp;
+                    tcp->m_nb_tile_parts = cur_totnum_tp;
 
-                        l_info_tile_ptr->tp = (opj_tp_info_t *) opj_malloc(cur_totnum_tp * sizeof(opj_tp_info_t));
-                        if (l_info_tile_ptr->tp == 00) {
-                                return OPJ_FALSE;
-                        }
+                    l_info_tile_ptr->tp = (opj_tp_info_t *) opj_malloc(cur_totnum_tp * sizeof(opj_tp_info_t));
+                    if (l_info_tile_ptr->tp == 00) {
+                            return OPJ_FALSE;
+                    }
 
-                        memset(l_info_tile_ptr->tp,0,cur_totnum_tp * sizeof(opj_tp_info_t));
+                    memset(l_info_tile_ptr->tp,0,cur_totnum_tp * sizeof(opj_tp_info_t));
 
-                        l_info_tile_ptr->num_tps = cur_totnum_tp;
+                    l_info_tile_ptr->num_tps = cur_totnum_tp;
 
-                        ++l_info_tile_ptr;
-                        ++tcp;
-                }
-        }
-        else */{
-                for (tileno = 0; tileno < l_nb_tiles; ++tileno) {
-                        OPJ_UINT32 cur_totnum_tp = 0;
+                    ++l_info_tile_ptr;
+                    ++tcp;
+            }
+    }
+    else */{
+        for (tileno = 0; tileno < l_nb_tiles; ++tileno) {
+            OPJ_UINT32 cur_totnum_tp = 0;
 
-                        opj_pi_update_encoding_parameters(image,cp,tileno);
+            opj_pi_update_encoding_parameters(image, cp, tileno);
 
-                        for (pino = 0; pino <= tcp->numpocs; ++pino) {
-                                OPJ_UINT32 tp_num = opj_j2k_get_num_tp(cp,pino,tileno);
+            for (pino = 0; pino <= tcp->numpocs; ++pino) {
+                OPJ_UINT32 tp_num = opj_j2k_get_num_tp(cp, pino, tileno);
 
-                                *p_nb_tiles = *p_nb_tiles + tp_num;
+                *p_nb_tiles = *p_nb_tiles + tp_num;
 
-                                cur_totnum_tp += tp_num;
-                        }
-                        tcp->m_nb_tile_parts = cur_totnum_tp;
+                cur_totnum_tp += tp_num;
+            }
+            tcp->m_nb_tile_parts = cur_totnum_tp;
 
-                        ++tcp;
-                }
+            ++tcp;
         }
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_write_soc(     opj_j2k_t *p_j2k,
-                                                opj_stream_private_t *p_stream,
-                                                    opj_event_mgr_t * p_manager )
+static OPJ_BOOL opj_j2k_write_soc(opj_j2k_t *p_j2k,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager)
 {
-        /* 2 bytes will be written */
-        OPJ_BYTE * l_start_stream = 00;
+    /* 2 bytes will be written */
+    OPJ_BYTE * l_start_stream = 00;
 
-        /* preconditions */
-        assert(p_stream != 00);
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
+    /* preconditions */
+    assert(p_stream != 00);
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-        l_start_stream = p_j2k->m_specific_param.m_encoder.m_header_tile_data;
+    l_start_stream = p_j2k->m_specific_param.m_encoder.m_header_tile_data;
 
-        /* write SOC identifier */
-        opj_write_bytes(l_start_stream,J2K_MS_SOC,2);
+    /* write SOC identifier */
+    opj_write_bytes(l_start_stream, J2K_MS_SOC, 2);
 
-        if (opj_stream_write_data(p_stream,l_start_stream,2,p_manager) != 2) {
-                return OPJ_FALSE;
-        }
+    if (opj_stream_write_data(p_stream, l_start_stream, 2, p_manager) != 2) {
+        return OPJ_FALSE;
+    }
 
-/* UniPG>> */
+    /* UniPG>> */
 #ifdef USE_JPWL
-        /* update markers struct */
-/*
-        OPJ_BOOL res = j2k_add_marker(p_j2k->cstr_info, J2K_MS_SOC, p_stream_tell(p_stream) - 2, 2);
-*/
-  assert( 0 && "TODO" );
+    /* update markers struct */
+    /*
+            OPJ_BOOL res = j2k_add_marker(p_j2k->cstr_info, J2K_MS_SOC, p_stream_tell(p_stream) - 2, 2);
+    */
+    assert(0 && "TODO");
 #endif /* USE_JPWL */
-/* <<UniPG */
+    /* <<UniPG */
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 /**
@@ -1848,137 +1891,143 @@ static OPJ_BOOL opj_j2k_write_soc(     opj_j2k_t *p_j2k,
  * @param       p_stream        FIXME DOC
  * @param       p_manager       the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_soc(   opj_j2k_t *p_j2k,
-                                    opj_stream_private_t *p_stream,
-                                    opj_event_mgr_t * p_manager
-                                    )
+static OPJ_BOOL opj_j2k_read_soc(opj_j2k_t *p_j2k,
+                                 opj_stream_private_t *p_stream,
+                                 opj_event_mgr_t * p_manager
+                                )
 {
-        OPJ_BYTE l_data [2];
-        OPJ_UINT32 l_marker;
+    OPJ_BYTE l_data [2];
+    OPJ_UINT32 l_marker;
 
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
 
-        if (opj_stream_read_data(p_stream,l_data,2,p_manager) != 2) {
-                return OPJ_FALSE;
-        }
+    if (opj_stream_read_data(p_stream, l_data, 2, p_manager) != 2) {
+        return OPJ_FALSE;
+    }
 
-        opj_read_bytes(l_data,&l_marker,2);
-        if (l_marker != J2K_MS_SOC) {
-                return OPJ_FALSE;
-        }
+    opj_read_bytes(l_data, &l_marker, 2);
+    if (l_marker != J2K_MS_SOC) {
+        return OPJ_FALSE;
+    }
 
-        /* Next marker should be a SIZ marker in the main header */
-        p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_MHSIZ;
+    /* Next marker should be a SIZ marker in the main header */
+    p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_MHSIZ;
 
-        /* FIXME move it in a index structure included in p_j2k*/
-        p_j2k->cstr_index->main_head_start = opj_stream_tell(p_stream) - 2;
+    /* FIXME move it in a index structure included in p_j2k*/
+    p_j2k->cstr_index->main_head_start = opj_stream_tell(p_stream) - 2;
 
-        opj_event_msg(p_manager, EVT_INFO, "Start to read j2k main header (%d).\n", p_j2k->cstr_index->main_head_start);
+    opj_event_msg(p_manager, EVT_INFO, "Start to read j2k main header (%d).\n",
+                  p_j2k->cstr_index->main_head_start);
 
-        /* Add the marker to the codestream index*/
-        if (OPJ_FALSE == opj_j2k_add_mhmarker(p_j2k->cstr_index, J2K_MS_SOC, p_j2k->cstr_index->main_head_start, 2)) {
-                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to add mh marker\n");
-                return OPJ_FALSE;
-        }
-        return OPJ_TRUE;
+    /* Add the marker to the codestream index*/
+    if (OPJ_FALSE == opj_j2k_add_mhmarker(p_j2k->cstr_index, J2K_MS_SOC,
+                                          p_j2k->cstr_index->main_head_start, 2)) {
+        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to add mh marker\n");
+        return OPJ_FALSE;
+    }
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_write_siz(     opj_j2k_t *p_j2k,
-                                                        opj_stream_private_t *p_stream,
-                                                        opj_event_mgr_t * p_manager )
+static OPJ_BOOL opj_j2k_write_siz(opj_j2k_t *p_j2k,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager)
 {
-        OPJ_UINT32 i;
-        OPJ_UINT32 l_size_len;
-        OPJ_BYTE * l_current_ptr;
-        opj_image_t * l_image = 00;
-        opj_cp_t *cp = 00;
-        opj_image_comp_t * l_img_comp = 00;
-
-        /* preconditions */
-        assert(p_stream != 00);
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-
-        l_image = p_j2k->m_private_image;
-        cp = &(p_j2k->m_cp);
-        l_size_len = 40 + 3 * l_image->numcomps;
-        l_img_comp = l_image->comps;
-
-        if (l_size_len > p_j2k->m_specific_param.m_encoder.m_header_tile_data_size) {
-
-                OPJ_BYTE *new_header_tile_data = (OPJ_BYTE *) opj_realloc(p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_size_len);
-                if (! new_header_tile_data) {
-                        opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data = NULL;
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
-                        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory for the SIZ marker\n");
-                        return OPJ_FALSE;
-                }
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data;
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_size_len;
+    OPJ_UINT32 i;
+    OPJ_UINT32 l_size_len;
+    OPJ_BYTE * l_current_ptr;
+    opj_image_t * l_image = 00;
+    opj_cp_t *cp = 00;
+    opj_image_comp_t * l_img_comp = 00;
+
+    /* preconditions */
+    assert(p_stream != 00);
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+
+    l_image = p_j2k->m_private_image;
+    cp = &(p_j2k->m_cp);
+    l_size_len = 40 + 3 * l_image->numcomps;
+    l_img_comp = l_image->comps;
+
+    if (l_size_len > p_j2k->m_specific_param.m_encoder.m_header_tile_data_size) {
+
+        OPJ_BYTE *new_header_tile_data = (OPJ_BYTE *) opj_realloc(
+                                             p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_size_len);
+        if (! new_header_tile_data) {
+            opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data = NULL;
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
+            opj_event_msg(p_manager, EVT_ERROR, "Not enough memory for the SIZ marker\n");
+            return OPJ_FALSE;
         }
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data;
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_size_len;
+    }
 
-        l_current_ptr = p_j2k->m_specific_param.m_encoder.m_header_tile_data;
+    l_current_ptr = p_j2k->m_specific_param.m_encoder.m_header_tile_data;
 
-        /* write SOC identifier */
-        opj_write_bytes(l_current_ptr,J2K_MS_SIZ,2);    /* SIZ */
-        l_current_ptr+=2;
+    /* write SOC identifier */
+    opj_write_bytes(l_current_ptr, J2K_MS_SIZ, 2);  /* SIZ */
+    l_current_ptr += 2;
 
-        opj_write_bytes(l_current_ptr,l_size_len-2,2); /* L_SIZ */
-        l_current_ptr+=2;
+    opj_write_bytes(l_current_ptr, l_size_len - 2, 2); /* L_SIZ */
+    l_current_ptr += 2;
 
-        opj_write_bytes(l_current_ptr, cp->rsiz, 2);    /* Rsiz (capabilities) */
-        l_current_ptr+=2;
+    opj_write_bytes(l_current_ptr, cp->rsiz, 2);    /* Rsiz (capabilities) */
+    l_current_ptr += 2;
 
-        opj_write_bytes(l_current_ptr, l_image->x1, 4); /* Xsiz */
-        l_current_ptr+=4;
+    opj_write_bytes(l_current_ptr, l_image->x1, 4); /* Xsiz */
+    l_current_ptr += 4;
 
-        opj_write_bytes(l_current_ptr, l_image->y1, 4); /* Ysiz */
-        l_current_ptr+=4;
+    opj_write_bytes(l_current_ptr, l_image->y1, 4); /* Ysiz */
+    l_current_ptr += 4;
 
-        opj_write_bytes(l_current_ptr, l_image->x0, 4); /* X0siz */
-        l_current_ptr+=4;
+    opj_write_bytes(l_current_ptr, l_image->x0, 4); /* X0siz */
+    l_current_ptr += 4;
 
-        opj_write_bytes(l_current_ptr, l_image->y0, 4); /* Y0siz */
-        l_current_ptr+=4;
+    opj_write_bytes(l_current_ptr, l_image->y0, 4); /* Y0siz */
+    l_current_ptr += 4;
 
-        opj_write_bytes(l_current_ptr, cp->tdx, 4);             /* XTsiz */
-        l_current_ptr+=4;
+    opj_write_bytes(l_current_ptr, cp->tdx, 4);             /* XTsiz */
+    l_current_ptr += 4;
 
-        opj_write_bytes(l_current_ptr, cp->tdy, 4);             /* YTsiz */
-        l_current_ptr+=4;
+    opj_write_bytes(l_current_ptr, cp->tdy, 4);             /* YTsiz */
+    l_current_ptr += 4;
 
-        opj_write_bytes(l_current_ptr, cp->tx0, 4);             /* XT0siz */
-        l_current_ptr+=4;
+    opj_write_bytes(l_current_ptr, cp->tx0, 4);             /* XT0siz */
+    l_current_ptr += 4;
 
-        opj_write_bytes(l_current_ptr, cp->ty0, 4);             /* YT0siz */
-        l_current_ptr+=4;
+    opj_write_bytes(l_current_ptr, cp->ty0, 4);             /* YT0siz */
+    l_current_ptr += 4;
 
-        opj_write_bytes(l_current_ptr, l_image->numcomps, 2);   /* Csiz */
-        l_current_ptr+=2;
+    opj_write_bytes(l_current_ptr, l_image->numcomps, 2);   /* Csiz */
+    l_current_ptr += 2;
 
-        for (i = 0; i < l_image->numcomps; ++i) {
-                /* TODO here with MCT ? */
-                opj_write_bytes(l_current_ptr, l_img_comp->prec - 1 + (l_img_comp->sgnd << 7), 1);      /* Ssiz_i */
-                ++l_current_ptr;
+    for (i = 0; i < l_image->numcomps; ++i) {
+        /* TODO here with MCT ? */
+        opj_write_bytes(l_current_ptr, l_img_comp->prec - 1 + (l_img_comp->sgnd << 7),
+                        1);      /* Ssiz_i */
+        ++l_current_ptr;
 
-                opj_write_bytes(l_current_ptr, l_img_comp->dx, 1);      /* XRsiz_i */
-                ++l_current_ptr;
+        opj_write_bytes(l_current_ptr, l_img_comp->dx, 1);      /* XRsiz_i */
+        ++l_current_ptr;
 
-                opj_write_bytes(l_current_ptr, l_img_comp->dy, 1);      /* YRsiz_i */
-                ++l_current_ptr;
+        opj_write_bytes(l_current_ptr, l_img_comp->dy, 1);      /* YRsiz_i */
+        ++l_current_ptr;
 
-                ++l_img_comp;
-        }
+        ++l_img_comp;
+    }
 
-        if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_header_tile_data,l_size_len,p_manager) != l_size_len) {
-                return OPJ_FALSE;
-        }
+    if (opj_stream_write_data(p_stream,
+                              p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_size_len,
+                              p_manager) != l_size_len) {
+        return OPJ_FALSE;
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 /**
@@ -1992,113 +2041,130 @@ static OPJ_BOOL opj_j2k_read_siz(opj_j2k_t *p_j2k,
                                  OPJ_BYTE * p_header_data,
                                  OPJ_UINT32 p_header_size,
                                  opj_event_mgr_t * p_manager
-                                 )
+                                )
 {
-        OPJ_UINT32 i;
-        OPJ_UINT32 l_nb_comp;
-        OPJ_UINT32 l_nb_comp_remain;
-        OPJ_UINT32 l_remaining_size;
-        OPJ_UINT32 l_nb_tiles;
-        OPJ_UINT32 l_tmp, l_tx1, l_ty1;
-        opj_image_t *l_image = 00;
-        opj_cp_t *l_cp = 00;
-        opj_image_comp_t * l_img_comp = 00;
-        opj_tcp_t * l_current_tile_param = 00;
-
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_header_data != 00);
-
-        l_image = p_j2k->m_private_image;
-        l_cp = &(p_j2k->m_cp);
-
-        /* minimum size == 39 - 3 (= minimum component parameter) */
-        if (p_header_size < 36) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error with SIZ marker size\n");
-                return OPJ_FALSE;
-        }
+    OPJ_UINT32 i;
+    OPJ_UINT32 l_nb_comp;
+    OPJ_UINT32 l_nb_comp_remain;
+    OPJ_UINT32 l_remaining_size;
+    OPJ_UINT32 l_nb_tiles;
+    OPJ_UINT32 l_tmp, l_tx1, l_ty1;
+    opj_image_t *l_image = 00;
+    opj_cp_t *l_cp = 00;
+    opj_image_comp_t * l_img_comp = 00;
+    opj_tcp_t * l_current_tile_param = 00;
+
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_header_data != 00);
+
+    l_image = p_j2k->m_private_image;
+    l_cp = &(p_j2k->m_cp);
+
+    /* minimum size == 39 - 3 (= minimum component parameter) */
+    if (p_header_size < 36) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error with SIZ marker size\n");
+        return OPJ_FALSE;
+    }
 
-        l_remaining_size = p_header_size - 36;
-        l_nb_comp = l_remaining_size / 3;
-        l_nb_comp_remain = l_remaining_size % 3;
-        if (l_nb_comp_remain != 0){
-                opj_event_msg(p_manager, EVT_ERROR, "Error with SIZ marker size\n");
-                return OPJ_FALSE;
-        }
+    l_remaining_size = p_header_size - 36;
+    l_nb_comp = l_remaining_size / 3;
+    l_nb_comp_remain = l_remaining_size % 3;
+    if (l_nb_comp_remain != 0) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error with SIZ marker size\n");
+        return OPJ_FALSE;
+    }
 
-        opj_read_bytes(p_header_data,&l_tmp ,2);                                                /* Rsiz (capabilities) */
-        p_header_data+=2;
-        l_cp->rsiz = (OPJ_UINT16) l_tmp;
-        opj_read_bytes(p_header_data, (OPJ_UINT32*) &l_image->x1, 4);   /* Xsiz */
-        p_header_data+=4;
-        opj_read_bytes(p_header_data, (OPJ_UINT32*) &l_image->y1, 4);   /* Ysiz */
-        p_header_data+=4;
-        opj_read_bytes(p_header_data, (OPJ_UINT32*) &l_image->x0, 4);   /* X0siz */
-        p_header_data+=4;
-        opj_read_bytes(p_header_data, (OPJ_UINT32*) &l_image->y0, 4);   /* Y0siz */
-        p_header_data+=4;
-        opj_read_bytes(p_header_data, (OPJ_UINT32*) &l_cp->tdx, 4);             /* XTsiz */
-        p_header_data+=4;
-        opj_read_bytes(p_header_data, (OPJ_UINT32*) &l_cp->tdy, 4);             /* YTsiz */
-        p_header_data+=4;
-        opj_read_bytes(p_header_data, (OPJ_UINT32*) &l_cp->tx0, 4);             /* XT0siz */
-        p_header_data+=4;
-        opj_read_bytes(p_header_data, (OPJ_UINT32*) &l_cp->ty0, 4);             /* YT0siz */
-        p_header_data+=4;
-        opj_read_bytes(p_header_data, (OPJ_UINT32*) &l_tmp, 2);                 /* Csiz */
-        p_header_data+=2;
-        if (l_tmp < 16385)
-                l_image->numcomps = (OPJ_UINT16) l_tmp;
-        else {
-                opj_event_msg(p_manager, EVT_ERROR, "Error with SIZ marker: number of component is illegal -> %d\n", l_tmp);
-                return OPJ_FALSE;
-        }
+    opj_read_bytes(p_header_data, &l_tmp,
+                   2);                                                /* Rsiz (capabilities) */
+    p_header_data += 2;
+    l_cp->rsiz = (OPJ_UINT16) l_tmp;
+    opj_read_bytes(p_header_data, (OPJ_UINT32*) &l_image->x1, 4);   /* Xsiz */
+    p_header_data += 4;
+    opj_read_bytes(p_header_data, (OPJ_UINT32*) &l_image->y1, 4);   /* Ysiz */
+    p_header_data += 4;
+    opj_read_bytes(p_header_data, (OPJ_UINT32*) &l_image->x0, 4);   /* X0siz */
+    p_header_data += 4;
+    opj_read_bytes(p_header_data, (OPJ_UINT32*) &l_image->y0, 4);   /* Y0siz */
+    p_header_data += 4;
+    opj_read_bytes(p_header_data, (OPJ_UINT32*) &l_cp->tdx,
+                   4);             /* XTsiz */
+    p_header_data += 4;
+    opj_read_bytes(p_header_data, (OPJ_UINT32*) &l_cp->tdy,
+                   4);             /* YTsiz */
+    p_header_data += 4;
+    opj_read_bytes(p_header_data, (OPJ_UINT32*) &l_cp->tx0,
+                   4);             /* XT0siz */
+    p_header_data += 4;
+    opj_read_bytes(p_header_data, (OPJ_UINT32*) &l_cp->ty0,
+                   4);             /* YT0siz */
+    p_header_data += 4;
+    opj_read_bytes(p_header_data, (OPJ_UINT32*) &l_tmp,
+                   2);                 /* Csiz */
+    p_header_data += 2;
+    if (l_tmp < 16385) {
+        l_image->numcomps = (OPJ_UINT16) l_tmp;
+    } else {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Error with SIZ marker: number of component is illegal -> %d\n", l_tmp);
+        return OPJ_FALSE;
+    }
 
-        if (l_image->numcomps != l_nb_comp) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error with SIZ marker: number of component is not compatible with the remaining number of parameters ( %d vs %d)\n", l_image->numcomps, l_nb_comp);
-                return OPJ_FALSE;
-        }
+    if (l_image->numcomps != l_nb_comp) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Error with SIZ marker: number of component is not compatible with the remaining number of parameters ( %d vs %d)\n",
+                      l_image->numcomps, l_nb_comp);
+        return OPJ_FALSE;
+    }
 
-        /* testcase 4035.pdf.SIGSEGV.d8b.3375 */
-        /* testcase issue427-null-image-size.jp2 */
-        if ((l_image->x0 >= l_image->x1) || (l_image->y0 >= l_image->y1)) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error with SIZ marker: negative or zero image size (%" PRId64 " x %" PRId64 ")\n", (OPJ_INT64)l_image->x1 - l_image->x0, (OPJ_INT64)l_image->y1 - l_image->y0);
-                return OPJ_FALSE;
-        }
-        /* testcase 2539.pdf.SIGFPE.706.1712 (also 3622.pdf.SIGFPE.706.2916 and 4008.pdf.SIGFPE.706.3345 and maybe more) */
-        if ((l_cp->tdx == 0U) || (l_cp->tdy == 0U)) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error with SIZ marker: invalid tile size (tdx: %d, tdy: %d)\n", l_cp->tdx, l_cp->tdy);
-                return OPJ_FALSE;
-        }
+    /* testcase 4035.pdf.SIGSEGV.d8b.3375 */
+    /* testcase issue427-null-image-size.jp2 */
+    if ((l_image->x0 >= l_image->x1) || (l_image->y0 >= l_image->y1)) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Error with SIZ marker: negative or zero image size (%" PRId64 " x %" PRId64
+                      ")\n", (OPJ_INT64)l_image->x1 - l_image->x0,
+                      (OPJ_INT64)l_image->y1 - l_image->y0);
+        return OPJ_FALSE;
+    }
+    /* testcase 2539.pdf.SIGFPE.706.1712 (also 3622.pdf.SIGFPE.706.2916 and 4008.pdf.SIGFPE.706.3345 and maybe more) */
+    if ((l_cp->tdx == 0U) || (l_cp->tdy == 0U)) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Error with SIZ marker: invalid tile size (tdx: %d, tdy: %d)\n", l_cp->tdx,
+                      l_cp->tdy);
+        return OPJ_FALSE;
+    }
 
-        /* testcase 1610.pdf.SIGSEGV.59c.681 */
-        if ((0xFFFFFFFFU / l_image->x1) < l_image->y1) {
-                opj_event_msg(p_manager, EVT_ERROR, "Prevent buffer overflow (x1: %d, y1: %d)\n", l_image->x1, l_image->y1);
-                return OPJ_FALSE;
-        }
+    /* testcase 1610.pdf.SIGSEGV.59c.681 */
+    if ((0xFFFFFFFFU / l_image->x1) < l_image->y1) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Prevent buffer overflow (x1: %d, y1: %d)\n", l_image->x1, l_image->y1);
+        return OPJ_FALSE;
+    }
 
-        /* testcase issue427-illegal-tile-offset.jp2 */
-        l_tx1 = opj_uint_adds(l_cp->tx0, l_cp->tdx); /* manage overflow */
-        l_ty1 = opj_uint_adds(l_cp->ty0, l_cp->tdy); /* manage overflow */
-        if ((l_cp->tx0 > l_image->x0) || (l_cp->ty0 > l_image->y0) || (l_tx1 <= l_image->x0) || (l_ty1 <= l_image->y0) ) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error with SIZ marker: illegal tile offset\n");
-                return OPJ_FALSE;
-        }
+    /* testcase issue427-illegal-tile-offset.jp2 */
+    l_tx1 = opj_uint_adds(l_cp->tx0, l_cp->tdx); /* manage overflow */
+    l_ty1 = opj_uint_adds(l_cp->ty0, l_cp->tdy); /* manage overflow */
+    if ((l_cp->tx0 > l_image->x0) || (l_cp->ty0 > l_image->y0) ||
+            (l_tx1 <= l_image->x0) || (l_ty1 <= l_image->y0)) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Error with SIZ marker: illegal tile offset\n");
+        return OPJ_FALSE;
+    }
 
 #ifdef USE_JPWL
-        if (l_cp->correct) {
-                /* if JPWL is on, we check whether TX errors have damaged
-                  too much the SIZ parameters */
-                if (!(l_image->x1 * l_image->y1)) {
-                        opj_event_msg(p_manager, EVT_ERROR,
-                                "JPWL: bad image size (%d x %d)\n",
-                                l_image->x1, l_image->y1);
-                        if (!JPWL_ASSUME) {
-                                opj_event_msg(p_manager, EVT_ERROR, "JPWL: giving up\n");
-                                return OPJ_FALSE;
-                        }
-                }
+    if (l_cp->correct) {
+        /* if JPWL is on, we check whether TX errors have damaged
+          too much the SIZ parameters */
+        if (!(l_image->x1 * l_image->y1)) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "JPWL: bad image size (%d x %d)\n",
+                          l_image->x1, l_image->y1);
+            if (!JPWL_ASSUME) {
+                opj_event_msg(p_manager, EVT_ERROR, "JPWL: giving up\n");
+                return OPJ_FALSE;
+            }
+        }
 
         /* FIXME check previously in the function so why keep this piece of code ? Need by the norm ?
                 if (l_image->numcomps != ((len - 38) / 3)) {
@@ -2123,267 +2189,303 @@ static OPJ_BOOL opj_j2k_read_siz(opj_j2k_t *p_j2k,
                 }
         */
 
-                /* update components number in the jpwl_exp_comps filed */
-                l_cp->exp_comps = l_image->numcomps;
-        }
+        /* update components number in the jpwl_exp_comps filed */
+        l_cp->exp_comps = l_image->numcomps;
+    }
 #endif /* USE_JPWL */
 
-        /* Allocate the resulting image components */
-        l_image->comps = (opj_image_comp_t*) opj_calloc(l_image->numcomps, sizeof(opj_image_comp_t));
-        if (l_image->comps == 00){
-                l_image->numcomps = 0;
-                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to take in charge SIZ marker\n");
-                return OPJ_FALSE;
-        }
-
-        l_img_comp = l_image->comps;
-
-        /* Read the component information */
-        for (i = 0; i < l_image->numcomps; ++i){
-                OPJ_UINT32 tmp;
-                opj_read_bytes(p_header_data,&tmp,1);   /* Ssiz_i */
-                ++p_header_data;
-                l_img_comp->prec = (tmp & 0x7f) + 1;
-                l_img_comp->sgnd = tmp >> 7;
-                opj_read_bytes(p_header_data,&tmp,1);   /* XRsiz_i */
-                ++p_header_data;
-                l_img_comp->dx = (OPJ_UINT32)tmp; /* should be between 1 and 255 */
-                opj_read_bytes(p_header_data,&tmp,1);   /* YRsiz_i */
-                ++p_header_data;
-                l_img_comp->dy = (OPJ_UINT32)tmp; /* should be between 1 and 255 */
-                if( l_img_comp->dx < 1 || l_img_comp->dx > 255 ||
-                    l_img_comp->dy < 1 || l_img_comp->dy > 255 ) {
-                    opj_event_msg(p_manager, EVT_ERROR,
-                                  "Invalid values for comp = %d : dx=%u dy=%u (should be between 1 and 255 according to the JPEG2000 norm)\n",
-                                  i, l_img_comp->dx, l_img_comp->dy);
-                    return OPJ_FALSE;
-                }
-                if( l_img_comp->prec > 38) { /* TODO openjpeg won't handle more than ? */
-                    opj_event_msg(p_manager, EVT_ERROR,
-                                  "Invalid values for comp = %d : prec=%u (should be between 1 and 38 according to the JPEG2000 norm)\n",
-                                  i, l_img_comp->prec);
-                    return OPJ_FALSE;
-                }
-
-#ifdef USE_JPWL
-                if (l_cp->correct) {
-                /* if JPWL is on, we check whether TX errors have damaged
-                        too much the SIZ parameters, again */
-                        if (!(l_image->comps[i].dx * l_image->comps[i].dy)) {
-                                opj_event_msg(p_manager, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
-                                        "JPWL: bad XRsiz_%d/YRsiz_%d (%d x %d)\n",
-                                        i, i, l_image->comps[i].dx, l_image->comps[i].dy);
-                                if (!JPWL_ASSUME) {
-                                        opj_event_msg(p_manager, EVT_ERROR, "JPWL: giving up\n");
-                                        return OPJ_FALSE;
-                                }
-                                /* we try to correct */
-                                opj_event_msg(p_manager, EVT_WARNING, "- trying to adjust them\n");
-                                if (!l_image->comps[i].dx) {
-                                        l_image->comps[i].dx = 1;
-                                        opj_event_msg(p_manager, EVT_WARNING, "- setting XRsiz_%d to %d => HYPOTHESIS!!!\n",
-                                                i, l_image->comps[i].dx);
-                                }
-                                if (!l_image->comps[i].dy) {
-                                        l_image->comps[i].dy = 1;
-                                        opj_event_msg(p_manager, EVT_WARNING, "- setting YRsiz_%d to %d => HYPOTHESIS!!!\n",
-                                                i, l_image->comps[i].dy);
-                                }
-                        }
-                }
-#endif /* USE_JPWL */
-                l_img_comp->resno_decoded = 0;                                                          /* number of resolution decoded */
-                l_img_comp->factor = l_cp->m_specific_param.m_dec.m_reduce; /* reducing factor per component */
-                ++l_img_comp;
-        }
+    /* Allocate the resulting image components */
+    l_image->comps = (opj_image_comp_t*) opj_calloc(l_image->numcomps,
+                     sizeof(opj_image_comp_t));
+    if (l_image->comps == 00) {
+        l_image->numcomps = 0;
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Not enough memory to take in charge SIZ marker\n");
+        return OPJ_FALSE;
+    }
 
-        /* Compute the number of tiles */
-        l_cp->tw = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)(l_image->x1 - l_cp->tx0), (OPJ_INT32)l_cp->tdx);
-        l_cp->th = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)(l_image->y1 - l_cp->ty0), (OPJ_INT32)l_cp->tdy);
+    l_img_comp = l_image->comps;
 
-        /* Check that the number of tiles is valid */
-        if (l_cp->tw == 0 || l_cp->th == 0 || l_cp->tw > 65535 / l_cp->th) {
-            opj_event_msg(  p_manager, EVT_ERROR, 
-                            "Invalid number of tiles : %u x %u (maximum fixed by jpeg2000 norm is 65535 tiles)\n",
-                            l_cp->tw, l_cp->th);
+    /* Read the component information */
+    for (i = 0; i < l_image->numcomps; ++i) {
+        OPJ_UINT32 tmp;
+        opj_read_bytes(p_header_data, &tmp, 1); /* Ssiz_i */
+        ++p_header_data;
+        l_img_comp->prec = (tmp & 0x7f) + 1;
+        l_img_comp->sgnd = tmp >> 7;
+        opj_read_bytes(p_header_data, &tmp, 1); /* XRsiz_i */
+        ++p_header_data;
+        l_img_comp->dx = (OPJ_UINT32)tmp; /* should be between 1 and 255 */
+        opj_read_bytes(p_header_data, &tmp, 1); /* YRsiz_i */
+        ++p_header_data;
+        l_img_comp->dy = (OPJ_UINT32)tmp; /* should be between 1 and 255 */
+        if (l_img_comp->dx < 1 || l_img_comp->dx > 255 ||
+                l_img_comp->dy < 1 || l_img_comp->dy > 255) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Invalid values for comp = %d : dx=%u dy=%u (should be between 1 and 255 according to the JPEG2000 norm)\n",
+                          i, l_img_comp->dx, l_img_comp->dy);
             return OPJ_FALSE;
         }
-        l_nb_tiles = l_cp->tw * l_cp->th;
-
-        /* Define the tiles which will be decoded */
-        if (p_j2k->m_specific_param.m_decoder.m_discard_tiles) {
-                p_j2k->m_specific_param.m_decoder.m_start_tile_x = (p_j2k->m_specific_param.m_decoder.m_start_tile_x - l_cp->tx0) / l_cp->tdx;
-                p_j2k->m_specific_param.m_decoder.m_start_tile_y = (p_j2k->m_specific_param.m_decoder.m_start_tile_y - l_cp->ty0) / l_cp->tdy;
-                p_j2k->m_specific_param.m_decoder.m_end_tile_x = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)(p_j2k->m_specific_param.m_decoder.m_end_tile_x - l_cp->tx0), (OPJ_INT32)l_cp->tdx);
-                p_j2k->m_specific_param.m_decoder.m_end_tile_y = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)(p_j2k->m_specific_param.m_decoder.m_end_tile_y - l_cp->ty0), (OPJ_INT32)l_cp->tdy);
-        }
-        else {
-                p_j2k->m_specific_param.m_decoder.m_start_tile_x = 0;
-                p_j2k->m_specific_param.m_decoder.m_start_tile_y = 0;
-                p_j2k->m_specific_param.m_decoder.m_end_tile_x = l_cp->tw;
-                p_j2k->m_specific_param.m_decoder.m_end_tile_y = l_cp->th;
+        if (l_img_comp->prec > 38) { /* TODO openjpeg won't handle more than ? */
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Invalid values for comp = %d : prec=%u (should be between 1 and 38 according to the JPEG2000 norm)\n",
+                          i, l_img_comp->prec);
+            return OPJ_FALSE;
         }
 
 #ifdef USE_JPWL
         if (l_cp->correct) {
-                /* if JPWL is on, we check whether TX errors have damaged
-                  too much the SIZ parameters */
-                if ((l_cp->tw < 1) || (l_cp->th < 1) || (l_cp->tw > l_cp->max_tiles) || (l_cp->th > l_cp->max_tiles)) {
-                        opj_event_msg(p_manager, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
-                                "JPWL: bad number of tiles (%d x %d)\n",
-                                l_cp->tw, l_cp->th);
-                        if (!JPWL_ASSUME) {
-                                opj_event_msg(p_manager, EVT_ERROR, "JPWL: giving up\n");
-                                return OPJ_FALSE;
-                        }
-                        /* we try to correct */
-                        opj_event_msg(p_manager, EVT_WARNING, "- trying to adjust them\n");
-                        if (l_cp->tw < 1) {
-                                l_cp->tw= 1;
-                                opj_event_msg(p_manager, EVT_WARNING, "- setting %d tiles in x => HYPOTHESIS!!!\n",
-                                                l_cp->tw);
-                        }
-                        if (l_cp->tw > l_cp->max_tiles) {
-                                l_cp->tw= 1;
-                                opj_event_msg(p_manager, EVT_WARNING, "- too large x, increase expectance of %d\n"
-                                        "- setting %d tiles in x => HYPOTHESIS!!!\n",
-                                        l_cp->max_tiles, l_cp->tw);
-                        }
-                        if (l_cp->th < 1) {
-                                l_cp->th= 1;
-                                opj_event_msg(p_manager, EVT_WARNING, "- setting %d tiles in y => HYPOTHESIS!!!\n",
-                                                l_cp->th);
-                        }
-                        if (l_cp->th > l_cp->max_tiles) {
-                                l_cp->th= 1;
-                                opj_event_msg(p_manager, EVT_WARNING, "- too large y, increase expectance of %d to continue\n",
-                                        "- setting %d tiles in y => HYPOTHESIS!!!\n",
-                                        l_cp->max_tiles, l_cp->th);
-                        }
+            /* if JPWL is on, we check whether TX errors have damaged
+                    too much the SIZ parameters, again */
+            if (!(l_image->comps[i].dx * l_image->comps[i].dy)) {
+                opj_event_msg(p_manager, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
+                              "JPWL: bad XRsiz_%d/YRsiz_%d (%d x %d)\n",
+                              i, i, l_image->comps[i].dx, l_image->comps[i].dy);
+                if (!JPWL_ASSUME) {
+                    opj_event_msg(p_manager, EVT_ERROR, "JPWL: giving up\n");
+                    return OPJ_FALSE;
                 }
+                /* we try to correct */
+                opj_event_msg(p_manager, EVT_WARNING, "- trying to adjust them\n");
+                if (!l_image->comps[i].dx) {
+                    l_image->comps[i].dx = 1;
+                    opj_event_msg(p_manager, EVT_WARNING,
+                                  "- setting XRsiz_%d to %d => HYPOTHESIS!!!\n",
+                                  i, l_image->comps[i].dx);
+                }
+                if (!l_image->comps[i].dy) {
+                    l_image->comps[i].dy = 1;
+                    opj_event_msg(p_manager, EVT_WARNING,
+                                  "- setting YRsiz_%d to %d => HYPOTHESIS!!!\n",
+                                  i, l_image->comps[i].dy);
+                }
+            }
         }
 #endif /* USE_JPWL */
+        l_img_comp->resno_decoded =
+            0;                                                          /* number of resolution decoded */
+        l_img_comp->factor =
+            l_cp->m_specific_param.m_dec.m_reduce; /* reducing factor per component */
+        ++l_img_comp;
+    }
 
-        /* memory allocations */
-        l_cp->tcps = (opj_tcp_t*) opj_calloc(l_nb_tiles, sizeof(opj_tcp_t));
-        if (l_cp->tcps == 00) {
-                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to take in charge SIZ marker\n");
-                return OPJ_FALSE;
-        }
+    /* Compute the number of tiles */
+    l_cp->tw = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)(l_image->x1 - l_cp->tx0),
+                                           (OPJ_INT32)l_cp->tdx);
+    l_cp->th = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)(l_image->y1 - l_cp->ty0),
+                                           (OPJ_INT32)l_cp->tdy);
+
+    /* Check that the number of tiles is valid */
+    if (l_cp->tw == 0 || l_cp->th == 0 || l_cp->tw > 65535 / l_cp->th) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Invalid number of tiles : %u x %u (maximum fixed by jpeg2000 norm is 65535 tiles)\n",
+                      l_cp->tw, l_cp->th);
+        return OPJ_FALSE;
+    }
+    l_nb_tiles = l_cp->tw * l_cp->th;
+
+    /* Define the tiles which will be decoded */
+    if (p_j2k->m_specific_param.m_decoder.m_discard_tiles) {
+        p_j2k->m_specific_param.m_decoder.m_start_tile_x =
+            (p_j2k->m_specific_param.m_decoder.m_start_tile_x - l_cp->tx0) / l_cp->tdx;
+        p_j2k->m_specific_param.m_decoder.m_start_tile_y =
+            (p_j2k->m_specific_param.m_decoder.m_start_tile_y - l_cp->ty0) / l_cp->tdy;
+        p_j2k->m_specific_param.m_decoder.m_end_tile_x = (OPJ_UINT32)opj_int_ceildiv((
+                    OPJ_INT32)(p_j2k->m_specific_param.m_decoder.m_end_tile_x - l_cp->tx0),
+                (OPJ_INT32)l_cp->tdx);
+        p_j2k->m_specific_param.m_decoder.m_end_tile_y = (OPJ_UINT32)opj_int_ceildiv((
+                    OPJ_INT32)(p_j2k->m_specific_param.m_decoder.m_end_tile_y - l_cp->ty0),
+                (OPJ_INT32)l_cp->tdy);
+    } else {
+        p_j2k->m_specific_param.m_decoder.m_start_tile_x = 0;
+        p_j2k->m_specific_param.m_decoder.m_start_tile_y = 0;
+        p_j2k->m_specific_param.m_decoder.m_end_tile_x = l_cp->tw;
+        p_j2k->m_specific_param.m_decoder.m_end_tile_y = l_cp->th;
+    }
 
 #ifdef USE_JPWL
-        if (l_cp->correct) {
-                if (!l_cp->tcps) {
-                        opj_event_msg(p_manager, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
-                                "JPWL: could not alloc tcps field of cp\n");
-                        if (!JPWL_ASSUME) {
-                                opj_event_msg(p_manager, EVT_ERROR, "JPWL: giving up\n");
-                                return OPJ_FALSE;
-                        }
-                }
+    if (l_cp->correct) {
+        /* if JPWL is on, we check whether TX errors have damaged
+          too much the SIZ parameters */
+        if ((l_cp->tw < 1) || (l_cp->th < 1) || (l_cp->tw > l_cp->max_tiles) ||
+                (l_cp->th > l_cp->max_tiles)) {
+            opj_event_msg(p_manager, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
+                          "JPWL: bad number of tiles (%d x %d)\n",
+                          l_cp->tw, l_cp->th);
+            if (!JPWL_ASSUME) {
+                opj_event_msg(p_manager, EVT_ERROR, "JPWL: giving up\n");
+                return OPJ_FALSE;
+            }
+            /* we try to correct */
+            opj_event_msg(p_manager, EVT_WARNING, "- trying to adjust them\n");
+            if (l_cp->tw < 1) {
+                l_cp->tw = 1;
+                opj_event_msg(p_manager, EVT_WARNING,
+                              "- setting %d tiles in x => HYPOTHESIS!!!\n",
+                              l_cp->tw);
+            }
+            if (l_cp->tw > l_cp->max_tiles) {
+                l_cp->tw = 1;
+                opj_event_msg(p_manager, EVT_WARNING,
+                              "- too large x, increase expectance of %d\n"
+                              "- setting %d tiles in x => HYPOTHESIS!!!\n",
+                              l_cp->max_tiles, l_cp->tw);
+            }
+            if (l_cp->th < 1) {
+                l_cp->th = 1;
+                opj_event_msg(p_manager, EVT_WARNING,
+                              "- setting %d tiles in y => HYPOTHESIS!!!\n",
+                              l_cp->th);
+            }
+            if (l_cp->th > l_cp->max_tiles) {
+                l_cp->th = 1;
+                opj_event_msg(p_manager, EVT_WARNING,
+                              "- too large y, increase expectance of %d to continue\n",
+                              "- setting %d tiles in y => HYPOTHESIS!!!\n",
+                              l_cp->max_tiles, l_cp->th);
+            }
         }
+    }
 #endif /* USE_JPWL */
 
-        p_j2k->m_specific_param.m_decoder.m_default_tcp->tccps =
-                        (opj_tccp_t*) opj_calloc(l_image->numcomps, sizeof(opj_tccp_t));
-        if(p_j2k->m_specific_param.m_decoder.m_default_tcp->tccps  == 00) {
-                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to take in charge SIZ marker\n");
+    /* memory allocations */
+    l_cp->tcps = (opj_tcp_t*) opj_calloc(l_nb_tiles, sizeof(opj_tcp_t));
+    if (l_cp->tcps == 00) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Not enough memory to take in charge SIZ marker\n");
+        return OPJ_FALSE;
+    }
+
+#ifdef USE_JPWL
+    if (l_cp->correct) {
+        if (!l_cp->tcps) {
+            opj_event_msg(p_manager, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
+                          "JPWL: could not alloc tcps field of cp\n");
+            if (!JPWL_ASSUME) {
+                opj_event_msg(p_manager, EVT_ERROR, "JPWL: giving up\n");
                 return OPJ_FALSE;
+            }
         }
+    }
+#endif /* USE_JPWL */
+
+    p_j2k->m_specific_param.m_decoder.m_default_tcp->tccps =
+        (opj_tccp_t*) opj_calloc(l_image->numcomps, sizeof(opj_tccp_t));
+    if (p_j2k->m_specific_param.m_decoder.m_default_tcp->tccps  == 00) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Not enough memory to take in charge SIZ marker\n");
+        return OPJ_FALSE;
+    }
 
-        p_j2k->m_specific_param.m_decoder.m_default_tcp->m_mct_records =
-                        (opj_mct_data_t*)opj_calloc(OPJ_J2K_MCT_DEFAULT_NB_RECORDS ,sizeof(opj_mct_data_t));
+    p_j2k->m_specific_param.m_decoder.m_default_tcp->m_mct_records =
+        (opj_mct_data_t*)opj_calloc(OPJ_J2K_MCT_DEFAULT_NB_RECORDS,
+                                    sizeof(opj_mct_data_t));
 
-        if (! p_j2k->m_specific_param.m_decoder.m_default_tcp->m_mct_records) {
-                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to take in charge SIZ marker\n");
-                return OPJ_FALSE;
-        }
-        p_j2k->m_specific_param.m_decoder.m_default_tcp->m_nb_max_mct_records = OPJ_J2K_MCT_DEFAULT_NB_RECORDS;
+    if (! p_j2k->m_specific_param.m_decoder.m_default_tcp->m_mct_records) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Not enough memory to take in charge SIZ marker\n");
+        return OPJ_FALSE;
+    }
+    p_j2k->m_specific_param.m_decoder.m_default_tcp->m_nb_max_mct_records =
+        OPJ_J2K_MCT_DEFAULT_NB_RECORDS;
 
-        p_j2k->m_specific_param.m_decoder.m_default_tcp->m_mcc_records =
-                        (opj_simple_mcc_decorrelation_data_t*)
-                        opj_calloc(OPJ_J2K_MCC_DEFAULT_NB_RECORDS, sizeof(opj_simple_mcc_decorrelation_data_t));
+    p_j2k->m_specific_param.m_decoder.m_default_tcp->m_mcc_records =
+        (opj_simple_mcc_decorrelation_data_t*)
+        opj_calloc(OPJ_J2K_MCC_DEFAULT_NB_RECORDS,
+                   sizeof(opj_simple_mcc_decorrelation_data_t));
 
-        if (! p_j2k->m_specific_param.m_decoder.m_default_tcp->m_mcc_records) {
-                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to take in charge SIZ marker\n");
-                return OPJ_FALSE;
-        }
-        p_j2k->m_specific_param.m_decoder.m_default_tcp->m_nb_max_mcc_records = OPJ_J2K_MCC_DEFAULT_NB_RECORDS;
+    if (! p_j2k->m_specific_param.m_decoder.m_default_tcp->m_mcc_records) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Not enough memory to take in charge SIZ marker\n");
+        return OPJ_FALSE;
+    }
+    p_j2k->m_specific_param.m_decoder.m_default_tcp->m_nb_max_mcc_records =
+        OPJ_J2K_MCC_DEFAULT_NB_RECORDS;
 
-        /* set up default dc level shift */
-        for (i=0;i<l_image->numcomps;++i) {
-                if (! l_image->comps[i].sgnd) {
-                        p_j2k->m_specific_param.m_decoder.m_default_tcp->tccps[i].m_dc_level_shift = 1 << (l_image->comps[i].prec - 1);
-                }
+    /* set up default dc level shift */
+    for (i = 0; i < l_image->numcomps; ++i) {
+        if (! l_image->comps[i].sgnd) {
+            p_j2k->m_specific_param.m_decoder.m_default_tcp->tccps[i].m_dc_level_shift = 1
+                    << (l_image->comps[i].prec - 1);
         }
+    }
 
-        l_current_tile_param = l_cp->tcps;
-        for     (i = 0; i < l_nb_tiles; ++i) {
-                l_current_tile_param->tccps = (opj_tccp_t*) opj_calloc(l_image->numcomps, sizeof(opj_tccp_t));
-                if (l_current_tile_param->tccps == 00) {
-                        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to take in charge SIZ marker\n");
-                        return OPJ_FALSE;
-                }
-
-                ++l_current_tile_param;
+    l_current_tile_param = l_cp->tcps;
+    for (i = 0; i < l_nb_tiles; ++i) {
+        l_current_tile_param->tccps = (opj_tccp_t*) opj_calloc(l_image->numcomps,
+                                      sizeof(opj_tccp_t));
+        if (l_current_tile_param->tccps == 00) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Not enough memory to take in charge SIZ marker\n");
+            return OPJ_FALSE;
         }
 
-        p_j2k->m_specific_param.m_decoder.m_state =  J2K_STATE_MH; /* FIXME J2K_DEC_STATE_MH; */
-        opj_image_comp_header_update(l_image,l_cp);
+        ++l_current_tile_param;
+    }
 
-        return OPJ_TRUE;
+    p_j2k->m_specific_param.m_decoder.m_state =
+        J2K_STATE_MH; /* FIXME J2K_DEC_STATE_MH; */
+    opj_image_comp_header_update(l_image, l_cp);
+
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_write_com(     opj_j2k_t *p_j2k,
-                                                        opj_stream_private_t *p_stream,
-                                                        opj_event_mgr_t * p_manager
-                            )
-{
-        OPJ_UINT32 l_comment_size;
-        OPJ_UINT32 l_total_com_size;
-        const OPJ_CHAR *l_comment;
-        OPJ_BYTE * l_current_ptr = 00;
-
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_stream != 00);
-        assert(p_manager != 00);
-
-        l_comment = p_j2k->m_cp.comment;
-        l_comment_size = (OPJ_UINT32)strlen(l_comment);
-        l_total_com_size = l_comment_size + 6;
-
-        if (l_total_com_size > p_j2k->m_specific_param.m_encoder.m_header_tile_data_size) {
-                OPJ_BYTE *new_header_tile_data = (OPJ_BYTE *) opj_realloc(p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_total_com_size);
-                if (! new_header_tile_data) {
-                        opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data = NULL;
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
-                        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to write the COM marker\n");
-                        return OPJ_FALSE;
-                }
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data;
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_total_com_size;
+static OPJ_BOOL opj_j2k_write_com(opj_j2k_t *p_j2k,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager
+                                 )
+{
+    OPJ_UINT32 l_comment_size;
+    OPJ_UINT32 l_total_com_size;
+    const OPJ_CHAR *l_comment;
+    OPJ_BYTE * l_current_ptr = 00;
+
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_stream != 00);
+    assert(p_manager != 00);
+
+    l_comment = p_j2k->m_cp.comment;
+    l_comment_size = (OPJ_UINT32)strlen(l_comment);
+    l_total_com_size = l_comment_size + 6;
+
+    if (l_total_com_size >
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data_size) {
+        OPJ_BYTE *new_header_tile_data = (OPJ_BYTE *) opj_realloc(
+                                             p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_total_com_size);
+        if (! new_header_tile_data) {
+            opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data = NULL;
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Not enough memory to write the COM marker\n");
+            return OPJ_FALSE;
         }
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data;
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_total_com_size;
+    }
 
-        l_current_ptr = p_j2k->m_specific_param.m_encoder.m_header_tile_data;
+    l_current_ptr = p_j2k->m_specific_param.m_encoder.m_header_tile_data;
 
-        opj_write_bytes(l_current_ptr,J2K_MS_COM , 2);  /* COM */
-        l_current_ptr+=2;
+    opj_write_bytes(l_current_ptr, J2K_MS_COM, 2);  /* COM */
+    l_current_ptr += 2;
 
-        opj_write_bytes(l_current_ptr,l_total_com_size - 2 , 2);        /* L_COM */
-        l_current_ptr+=2;
+    opj_write_bytes(l_current_ptr, l_total_com_size - 2, 2);        /* L_COM */
+    l_current_ptr += 2;
 
-        opj_write_bytes(l_current_ptr,1 , 2);   /* General use (IS 8859-15:1999 (Latin) values) */
-        l_current_ptr+=2;
+    opj_write_bytes(l_current_ptr, 1,
+                    2);   /* General use (IS 8859-15:1999 (Latin) values) */
+    l_current_ptr += 2;
 
-        memcpy( l_current_ptr,l_comment,l_comment_size);
+    memcpy(l_current_ptr, l_comment, l_comment_size);
 
-        if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_header_tile_data,l_total_com_size,p_manager) != l_total_com_size) {
-                return OPJ_FALSE;
-        }
+    if (opj_stream_write_data(p_stream,
+                              p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_total_com_size,
+                              p_manager) != l_total_com_size) {
+        return OPJ_FALSE;
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 /**
@@ -2393,90 +2495,95 @@ static OPJ_BOOL opj_j2k_write_com(     opj_j2k_t *p_j2k,
  * @param       p_header_size   the size of the data contained in the COM marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_com (  opj_j2k_t *p_j2k,
-                                    OPJ_BYTE * p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager
-                                    )
+static OPJ_BOOL opj_j2k_read_com(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager
+                                )
 {
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_header_data != 00);
-  (void)p_header_size;
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_header_data != 00);
+    (void)p_header_size;
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_write_cod(     opj_j2k_t *p_j2k,
-                                                        opj_stream_private_t *p_stream,
-                                                        opj_event_mgr_t * p_manager )
-{
-        opj_cp_t *l_cp = 00;
-        opj_tcp_t *l_tcp = 00;
-        OPJ_UINT32 l_code_size,l_remaining_size;
-        OPJ_BYTE * l_current_data = 00;
-
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
-
-        l_cp = &(p_j2k->m_cp);
-        l_tcp = &l_cp->tcps[p_j2k->m_current_tile_number];
-        l_code_size = 9 + opj_j2k_get_SPCod_SPCoc_size(p_j2k,p_j2k->m_current_tile_number,0);
-        l_remaining_size = l_code_size;
-
-        if (l_code_size > p_j2k->m_specific_param.m_encoder.m_header_tile_data_size) {
-                OPJ_BYTE *new_header_tile_data = (OPJ_BYTE *) opj_realloc(p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_code_size);
-                if (! new_header_tile_data) {
-                        opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data = NULL;
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
-                        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to write COD marker\n");
-                        return OPJ_FALSE;
-                }
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data;
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_code_size;
+static OPJ_BOOL opj_j2k_write_cod(opj_j2k_t *p_j2k,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager)
+{
+    opj_cp_t *l_cp = 00;
+    opj_tcp_t *l_tcp = 00;
+    OPJ_UINT32 l_code_size, l_remaining_size;
+    OPJ_BYTE * l_current_data = 00;
+
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
+
+    l_cp = &(p_j2k->m_cp);
+    l_tcp = &l_cp->tcps[p_j2k->m_current_tile_number];
+    l_code_size = 9 + opj_j2k_get_SPCod_SPCoc_size(p_j2k,
+                  p_j2k->m_current_tile_number, 0);
+    l_remaining_size = l_code_size;
+
+    if (l_code_size > p_j2k->m_specific_param.m_encoder.m_header_tile_data_size) {
+        OPJ_BYTE *new_header_tile_data = (OPJ_BYTE *) opj_realloc(
+                                             p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_code_size);
+        if (! new_header_tile_data) {
+            opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data = NULL;
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
+            opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to write COD marker\n");
+            return OPJ_FALSE;
         }
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data;
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_code_size;
+    }
 
-        l_current_data = p_j2k->m_specific_param.m_encoder.m_header_tile_data;
+    l_current_data = p_j2k->m_specific_param.m_encoder.m_header_tile_data;
 
-        opj_write_bytes(l_current_data,J2K_MS_COD,2);             /* COD */
-        l_current_data += 2;
+    opj_write_bytes(l_current_data, J2K_MS_COD, 2);           /* COD */
+    l_current_data += 2;
 
-        opj_write_bytes(l_current_data,l_code_size-2,2);          /* L_COD */
-        l_current_data += 2;
+    opj_write_bytes(l_current_data, l_code_size - 2, 2);      /* L_COD */
+    l_current_data += 2;
 
-        opj_write_bytes(l_current_data,l_tcp->csty,1);            /* Scod */
-        ++l_current_data;
+    opj_write_bytes(l_current_data, l_tcp->csty, 1);          /* Scod */
+    ++l_current_data;
 
-        opj_write_bytes(l_current_data,(OPJ_UINT32)l_tcp->prg,1); /* SGcod (A) */
-        ++l_current_data;
+    opj_write_bytes(l_current_data, (OPJ_UINT32)l_tcp->prg, 1); /* SGcod (A) */
+    ++l_current_data;
 
-        opj_write_bytes(l_current_data,l_tcp->numlayers,2);       /* SGcod (B) */
-        l_current_data+=2;
+    opj_write_bytes(l_current_data, l_tcp->numlayers, 2);     /* SGcod (B) */
+    l_current_data += 2;
 
-        opj_write_bytes(l_current_data,l_tcp->mct,1);             /* SGcod (C) */
-        ++l_current_data;
+    opj_write_bytes(l_current_data, l_tcp->mct, 1);           /* SGcod (C) */
+    ++l_current_data;
 
-        l_remaining_size -= 9;
+    l_remaining_size -= 9;
 
-        if (! opj_j2k_write_SPCod_SPCoc(p_j2k,p_j2k->m_current_tile_number,0,l_current_data,&l_remaining_size,p_manager)) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error writing COD marker\n");
-                return OPJ_FALSE;
-        }
+    if (! opj_j2k_write_SPCod_SPCoc(p_j2k, p_j2k->m_current_tile_number, 0,
+                                    l_current_data, &l_remaining_size, p_manager)) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error writing COD marker\n");
+        return OPJ_FALSE;
+    }
 
-        if (l_remaining_size != 0) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error writing COD marker\n");
-                return OPJ_FALSE;
-        }
+    if (l_remaining_size != 0) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error writing COD marker\n");
+        return OPJ_FALSE;
+    }
 
-        if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_header_tile_data,l_code_size,p_manager) != l_code_size) {
-                return OPJ_FALSE;
-        }
+    if (opj_stream_write_data(p_stream,
+                              p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_code_size,
+                              p_manager) != l_code_size) {
+        return OPJ_FALSE;
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 /**
@@ -2486,244 +2593,263 @@ static OPJ_BOOL opj_j2k_write_cod(     opj_j2k_t *p_j2k,
  * @param       p_header_size   the size of the data contained in the COD marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_cod (  opj_j2k_t *p_j2k,
-                                    OPJ_BYTE * p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager
-                                    )
+static OPJ_BOOL opj_j2k_read_cod(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager
+                                )
 {
-        /* loop */
-        OPJ_UINT32 i;
-        OPJ_UINT32 l_tmp;
-        opj_cp_t *l_cp = 00;
-        opj_tcp_t *l_tcp = 00;
-        opj_image_t *l_image = 00;
-
-        /* preconditions */
-        assert(p_header_data != 00);
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-
-        l_image = p_j2k->m_private_image;
-        l_cp = &(p_j2k->m_cp);
-
-        /* If we are in the first tile-part header of the current tile */
-        l_tcp = (p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_TPH) ?
-                                &l_cp->tcps[p_j2k->m_current_tile_number] :
-                                p_j2k->m_specific_param.m_decoder.m_default_tcp;
-       
-        /* Only one COD per tile */
-        if (l_tcp->cod) {
-                opj_event_msg(p_manager, EVT_ERROR, "COD marker already read. No more than one COD marker per tile.\n");
-                return OPJ_FALSE;
-        }
-        l_tcp->cod = 1;
-       
-        /* Make sure room is sufficient */
-        if (p_header_size < 5) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading COD marker\n");
-                return OPJ_FALSE;
-        }
+    /* loop */
+    OPJ_UINT32 i;
+    OPJ_UINT32 l_tmp;
+    opj_cp_t *l_cp = 00;
+    opj_tcp_t *l_tcp = 00;
+    opj_image_t *l_image = 00;
+
+    /* preconditions */
+    assert(p_header_data != 00);
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+
+    l_image = p_j2k->m_private_image;
+    l_cp = &(p_j2k->m_cp);
+
+    /* If we are in the first tile-part header of the current tile */
+    l_tcp = (p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_TPH) ?
+            &l_cp->tcps[p_j2k->m_current_tile_number] :
+            p_j2k->m_specific_param.m_decoder.m_default_tcp;
+
+    /* Only one COD per tile */
+    if (l_tcp->cod) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "COD marker already read. No more than one COD marker per tile.\n");
+        return OPJ_FALSE;
+    }
+    l_tcp->cod = 1;
 
-        opj_read_bytes(p_header_data,&l_tcp->csty,1);           /* Scod */
-        ++p_header_data;
-        /* Make sure we know how to decode this */
-        if ((l_tcp->csty & ~(OPJ_UINT32)(J2K_CP_CSTY_PRT | J2K_CP_CSTY_SOP | J2K_CP_CSTY_EPH)) != 0U) {
-                opj_event_msg(p_manager, EVT_ERROR, "Unknown Scod value in COD marker\n");
-                return OPJ_FALSE;
-        }
-        opj_read_bytes(p_header_data,&l_tmp,1);                         /* SGcod (A) */
-        ++p_header_data;
-        l_tcp->prg = (OPJ_PROG_ORDER) l_tmp;
-        /* Make sure progression order is valid */
-        if (l_tcp->prg > OPJ_CPRL ) {
-                opj_event_msg(p_manager, EVT_ERROR, "Unknown progression order in COD marker\n");
-                l_tcp->prg = OPJ_PROG_UNKNOWN;
-        }
-        opj_read_bytes(p_header_data,&l_tcp->numlayers,2);      /* SGcod (B) */
-        p_header_data+=2;
-       
-        if ((l_tcp->numlayers < 1U) || (l_tcp->numlayers > 65535U)) {
-                opj_event_msg(p_manager, EVT_ERROR, "Invalid number of layers in COD marker : %d not in range [1-65535]\n", l_tcp->numlayers);
-                return OPJ_FALSE;
-        }
+    /* Make sure room is sufficient */
+    if (p_header_size < 5) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading COD marker\n");
+        return OPJ_FALSE;
+    }
 
-        /* If user didn't set a number layer to decode take the max specify in the codestream. */
-        if      (l_cp->m_specific_param.m_dec.m_layer) {
-                l_tcp->num_layers_to_decode = l_cp->m_specific_param.m_dec.m_layer;
-        }
-        else {
-                l_tcp->num_layers_to_decode = l_tcp->numlayers;
-        }
+    opj_read_bytes(p_header_data, &l_tcp->csty, 1);         /* Scod */
+    ++p_header_data;
+    /* Make sure we know how to decode this */
+    if ((l_tcp->csty & ~(OPJ_UINT32)(J2K_CP_CSTY_PRT | J2K_CP_CSTY_SOP |
+                                     J2K_CP_CSTY_EPH)) != 0U) {
+        opj_event_msg(p_manager, EVT_ERROR, "Unknown Scod value in COD marker\n");
+        return OPJ_FALSE;
+    }
+    opj_read_bytes(p_header_data, &l_tmp, 1);                       /* SGcod (A) */
+    ++p_header_data;
+    l_tcp->prg = (OPJ_PROG_ORDER) l_tmp;
+    /* Make sure progression order is valid */
+    if (l_tcp->prg > OPJ_CPRL) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Unknown progression order in COD marker\n");
+        l_tcp->prg = OPJ_PROG_UNKNOWN;
+    }
+    opj_read_bytes(p_header_data, &l_tcp->numlayers, 2);    /* SGcod (B) */
+    p_header_data += 2;
 
-        opj_read_bytes(p_header_data,&l_tcp->mct,1);            /* SGcod (C) */
-        ++p_header_data;
+    if ((l_tcp->numlayers < 1U) || (l_tcp->numlayers > 65535U)) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Invalid number of layers in COD marker : %d not in range [1-65535]\n",
+                      l_tcp->numlayers);
+        return OPJ_FALSE;
+    }
 
-        p_header_size -= 5;
-        for     (i = 0; i < l_image->numcomps; ++i) {
-                l_tcp->tccps[i].csty = l_tcp->csty & J2K_CCP_CSTY_PRT;
-        }
+    /* If user didn't set a number layer to decode take the max specify in the codestream. */
+    if (l_cp->m_specific_param.m_dec.m_layer) {
+        l_tcp->num_layers_to_decode = l_cp->m_specific_param.m_dec.m_layer;
+    } else {
+        l_tcp->num_layers_to_decode = l_tcp->numlayers;
+    }
 
-        if (! opj_j2k_read_SPCod_SPCoc(p_j2k,0,p_header_data,&p_header_size,p_manager)) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading COD marker\n");
-                return OPJ_FALSE;
-        }
+    opj_read_bytes(p_header_data, &l_tcp->mct, 1);          /* SGcod (C) */
+    ++p_header_data;
 
-        if (p_header_size != 0) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading COD marker\n");
-                return OPJ_FALSE;
-        }
+    p_header_size -= 5;
+    for (i = 0; i < l_image->numcomps; ++i) {
+        l_tcp->tccps[i].csty = l_tcp->csty & J2K_CCP_CSTY_PRT;
+    }
+
+    if (! opj_j2k_read_SPCod_SPCoc(p_j2k, 0, p_header_data, &p_header_size,
+                                   p_manager)) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading COD marker\n");
+        return OPJ_FALSE;
+    }
+
+    if (p_header_size != 0) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading COD marker\n");
+        return OPJ_FALSE;
+    }
 
-        /* Apply the coding style to other components of the current tile or the m_default_tcp*/
-        opj_j2k_copy_tile_component_parameters(p_j2k);
+    /* Apply the coding style to other components of the current tile or the m_default_tcp*/
+    opj_j2k_copy_tile_component_parameters(p_j2k);
 
-        /* Index */
+    /* Index */
 #ifdef WIP_REMOVE_MSD
-        if (p_j2k->cstr_info) {
-                /*opj_codestream_info_t *l_cstr_info = p_j2k->cstr_info;*/
-                p_j2k->cstr_info->prog = l_tcp->prg;
-                p_j2k->cstr_info->numlayers = l_tcp->numlayers;
-                p_j2k->cstr_info->numdecompos = (OPJ_INT32*) opj_malloc(l_image->numcomps * sizeof(OPJ_UINT32));
-                               if(!p_j2k->cstr_info->numdecompos){
-                                       return OPJ_FALSE;
-                               }
-                for     (i = 0; i < l_image->numcomps; ++i) {
-                        p_j2k->cstr_info->numdecompos[i] = l_tcp->tccps[i].numresolutions - 1;
-                }
+    if (p_j2k->cstr_info) {
+        /*opj_codestream_info_t *l_cstr_info = p_j2k->cstr_info;*/
+        p_j2k->cstr_info->prog = l_tcp->prg;
+        p_j2k->cstr_info->numlayers = l_tcp->numlayers;
+        p_j2k->cstr_info->numdecompos = (OPJ_INT32*) opj_malloc(
+                                            l_image->numcomps * sizeof(OPJ_UINT32));
+        if (!p_j2k->cstr_info->numdecompos) {
+            return OPJ_FALSE;
+        }
+        for (i = 0; i < l_image->numcomps; ++i) {
+            p_j2k->cstr_info->numdecompos[i] = l_tcp->tccps[i].numresolutions - 1;
         }
+    }
 #endif
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_write_coc( opj_j2k_t *p_j2k,
-                                                OPJ_UINT32 p_comp_no,
-                                                opj_stream_private_t *p_stream,
-                                                opj_event_mgr_t * p_manager )
-{
-        OPJ_UINT32 l_coc_size,l_remaining_size;
-        OPJ_UINT32 l_comp_room;
+static OPJ_BOOL opj_j2k_write_coc(opj_j2k_t *p_j2k,
+                                  OPJ_UINT32 p_comp_no,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager)
+{
+    OPJ_UINT32 l_coc_size, l_remaining_size;
+    OPJ_UINT32 l_comp_room;
+
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
+
+    l_comp_room = (p_j2k->m_private_image->numcomps <= 256) ? 1 : 2;
+
+    l_coc_size = 5 + l_comp_room + opj_j2k_get_SPCod_SPCoc_size(p_j2k,
+                 p_j2k->m_current_tile_number, p_comp_no);
+
+    if (l_coc_size > p_j2k->m_specific_param.m_encoder.m_header_tile_data_size) {
+        OPJ_BYTE *new_header_tile_data;
+        /*p_j2k->m_specific_param.m_encoder.m_header_tile_data
+                = (OPJ_BYTE*)opj_realloc(
+                        p_j2k->m_specific_param.m_encoder.m_header_tile_data,
+                        l_coc_size);*/
+
+        new_header_tile_data = (OPJ_BYTE *) opj_realloc(
+                                   p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_coc_size);
+        if (! new_header_tile_data) {
+            opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data = NULL;
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
+            opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to write COC marker\n");
+            return OPJ_FALSE;
+        }
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data;
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_coc_size;
+    }
 
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
+    opj_j2k_write_coc_in_memory(p_j2k, p_comp_no,
+                                p_j2k->m_specific_param.m_encoder.m_header_tile_data, &l_remaining_size,
+                                p_manager);
 
-        l_comp_room = (p_j2k->m_private_image->numcomps <= 256) ? 1 : 2;
+    if (opj_stream_write_data(p_stream,
+                              p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_coc_size,
+                              p_manager) != l_coc_size) {
+        return OPJ_FALSE;
+    }
 
-        l_coc_size = 5 + l_comp_room + opj_j2k_get_SPCod_SPCoc_size(p_j2k,p_j2k->m_current_tile_number,p_comp_no);
+    return OPJ_TRUE;
+}
 
-        if (l_coc_size > p_j2k->m_specific_param.m_encoder.m_header_tile_data_size) {
-                OPJ_BYTE *new_header_tile_data;
-                /*p_j2k->m_specific_param.m_encoder.m_header_tile_data
-                        = (OPJ_BYTE*)opj_realloc(
-                                p_j2k->m_specific_param.m_encoder.m_header_tile_data,
-                                l_coc_size);*/
+static OPJ_BOOL opj_j2k_compare_coc(opj_j2k_t *p_j2k,
+                                    OPJ_UINT32 p_first_comp_no, OPJ_UINT32 p_second_comp_no)
+{
+    opj_cp_t *l_cp = NULL;
+    opj_tcp_t *l_tcp = NULL;
 
-                new_header_tile_data = (OPJ_BYTE *) opj_realloc(p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_coc_size);
-                if (! new_header_tile_data) {
-                        opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data = NULL;
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
-                        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to write COC marker\n");
-                        return OPJ_FALSE;
-                }
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data;
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_coc_size;
-        }
+    /* preconditions */
+    assert(p_j2k != 00);
 
-        opj_j2k_write_coc_in_memory(p_j2k,p_comp_no,p_j2k->m_specific_param.m_encoder.m_header_tile_data,&l_remaining_size,p_manager);
+    l_cp = &(p_j2k->m_cp);
+    l_tcp = &l_cp->tcps[p_j2k->m_current_tile_number];
 
-        if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_header_tile_data,l_coc_size,p_manager) != l_coc_size) {
-                return OPJ_FALSE;
-        }
+    if (l_tcp->tccps[p_first_comp_no].csty != l_tcp->tccps[p_second_comp_no].csty) {
+        return OPJ_FALSE;
+    }
 
-        return OPJ_TRUE;
+
+    return opj_j2k_compare_SPCod_SPCoc(p_j2k, p_j2k->m_current_tile_number,
+                                       p_first_comp_no, p_second_comp_no);
 }
 
-static OPJ_BOOL opj_j2k_compare_coc(opj_j2k_t *p_j2k, OPJ_UINT32 p_first_comp_no, OPJ_UINT32 p_second_comp_no)
-{
-       opj_cp_t *l_cp = NULL;
-       opj_tcp_t *l_tcp = NULL;
-       
-       /* preconditions */
-       assert(p_j2k != 00);
-       
-       l_cp = &(p_j2k->m_cp);
-       l_tcp = &l_cp->tcps[p_j2k->m_current_tile_number];
-       
-       if (l_tcp->tccps[p_first_comp_no].csty != l_tcp->tccps[p_second_comp_no].csty) {
-               return OPJ_FALSE;
-       }
-       
-       
-       return opj_j2k_compare_SPCod_SPCoc(p_j2k, p_j2k->m_current_tile_number, p_first_comp_no, p_second_comp_no);
-}
-
-static void opj_j2k_write_coc_in_memory(   opj_j2k_t *p_j2k,
-                                                OPJ_UINT32 p_comp_no,
-                                                OPJ_BYTE * p_data,
-                                                OPJ_UINT32 * p_data_written,
-                                                opj_event_mgr_t * p_manager
-                                    )
+static void opj_j2k_write_coc_in_memory(opj_j2k_t *p_j2k,
+                                        OPJ_UINT32 p_comp_no,
+                                        OPJ_BYTE * p_data,
+                                        OPJ_UINT32 * p_data_written,
+                                        opj_event_mgr_t * p_manager
+                                       )
 {
-        opj_cp_t *l_cp = 00;
-        opj_tcp_t *l_tcp = 00;
-        OPJ_UINT32 l_coc_size,l_remaining_size;
-        OPJ_BYTE * l_current_data = 00;
-        opj_image_t *l_image = 00;
-        OPJ_UINT32 l_comp_room;
+    opj_cp_t *l_cp = 00;
+    opj_tcp_t *l_tcp = 00;
+    OPJ_UINT32 l_coc_size, l_remaining_size;
+    OPJ_BYTE * l_current_data = 00;
+    opj_image_t *l_image = 00;
+    OPJ_UINT32 l_comp_room;
 
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-        l_cp = &(p_j2k->m_cp);
-        l_tcp = &l_cp->tcps[p_j2k->m_current_tile_number];
-        l_image = p_j2k->m_private_image;
-        l_comp_room = (l_image->numcomps <= 256) ? 1 : 2;
+    l_cp = &(p_j2k->m_cp);
+    l_tcp = &l_cp->tcps[p_j2k->m_current_tile_number];
+    l_image = p_j2k->m_private_image;
+    l_comp_room = (l_image->numcomps <= 256) ? 1 : 2;
 
-        l_coc_size = 5 + l_comp_room + opj_j2k_get_SPCod_SPCoc_size(p_j2k,p_j2k->m_current_tile_number,p_comp_no);
-        l_remaining_size = l_coc_size;
+    l_coc_size = 5 + l_comp_room + opj_j2k_get_SPCod_SPCoc_size(p_j2k,
+                 p_j2k->m_current_tile_number, p_comp_no);
+    l_remaining_size = l_coc_size;
 
-        l_current_data = p_data;
+    l_current_data = p_data;
 
-        opj_write_bytes(l_current_data,J2K_MS_COC,2);                           /* COC */
-        l_current_data += 2;
+    opj_write_bytes(l_current_data, J2K_MS_COC,
+                    2);                         /* COC */
+    l_current_data += 2;
 
-        opj_write_bytes(l_current_data,l_coc_size-2,2);                         /* L_COC */
-        l_current_data += 2;
+    opj_write_bytes(l_current_data, l_coc_size - 2,
+                    2);                     /* L_COC */
+    l_current_data += 2;
 
-        opj_write_bytes(l_current_data,p_comp_no, l_comp_room);         /* Ccoc */
-        l_current_data+=l_comp_room;
+    opj_write_bytes(l_current_data, p_comp_no, l_comp_room);        /* Ccoc */
+    l_current_data += l_comp_room;
 
-        opj_write_bytes(l_current_data, l_tcp->tccps[p_comp_no].csty, 1);               /* Scoc */
-        ++l_current_data;
+    opj_write_bytes(l_current_data, l_tcp->tccps[p_comp_no].csty,
+                    1);               /* Scoc */
+    ++l_current_data;
 
-        l_remaining_size -= (5 + l_comp_room);
-        opj_j2k_write_SPCod_SPCoc(p_j2k,p_j2k->m_current_tile_number,0,l_current_data,&l_remaining_size,p_manager);
-        * p_data_written = l_coc_size;
+    l_remaining_size -= (5 + l_comp_room);
+    opj_j2k_write_SPCod_SPCoc(p_j2k, p_j2k->m_current_tile_number, 0,
+                              l_current_data, &l_remaining_size, p_manager);
+    * p_data_written = l_coc_size;
 }
 
 static OPJ_UINT32 opj_j2k_get_max_coc_size(opj_j2k_t *p_j2k)
 {
-        OPJ_UINT32 i,j;
-        OPJ_UINT32 l_nb_comp;
-        OPJ_UINT32 l_nb_tiles;
-        OPJ_UINT32 l_max = 0;
+    OPJ_UINT32 i, j;
+    OPJ_UINT32 l_nb_comp;
+    OPJ_UINT32 l_nb_tiles;
+    OPJ_UINT32 l_max = 0;
 
-        /* preconditions */
+    /* preconditions */
 
-        l_nb_tiles = p_j2k->m_cp.tw * p_j2k->m_cp.th ;
-        l_nb_comp = p_j2k->m_private_image->numcomps;
+    l_nb_tiles = p_j2k->m_cp.tw * p_j2k->m_cp.th ;
+    l_nb_comp = p_j2k->m_private_image->numcomps;
 
-        for (i=0;i<l_nb_tiles;++i) {
-                for (j=0;j<l_nb_comp;++j) {
-                        l_max = opj_uint_max(l_max,opj_j2k_get_SPCod_SPCoc_size(p_j2k,i,j));
-                }
+    for (i = 0; i < l_nb_tiles; ++i) {
+        for (j = 0; j < l_nb_comp; ++j) {
+            l_max = opj_uint_max(l_max, opj_j2k_get_SPCod_SPCoc_size(p_j2k, i, j));
         }
+    }
 
-        return 6 + l_max;
+    return 6 + l_max;
 }
 
 /**
@@ -2733,114 +2859,124 @@ static OPJ_UINT32 opj_j2k_get_max_coc_size(opj_j2k_t *p_j2k)
  * @param       p_header_size   the size of the data contained in the COC marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_coc (  opj_j2k_t *p_j2k,
-                                    OPJ_BYTE * p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager
-                                    )
+static OPJ_BOOL opj_j2k_read_coc(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager
+                                )
 {
-        opj_cp_t *l_cp = NULL;
-        opj_tcp_t *l_tcp = NULL;
-        opj_image_t *l_image = NULL;
-        OPJ_UINT32 l_comp_room;
-        OPJ_UINT32 l_comp_no;
-
-        /* preconditions */
-        assert(p_header_data != 00);
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-
-        l_cp = &(p_j2k->m_cp);
-        l_tcp = (p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_TPH ) ? /*FIXME J2K_DEC_STATE_TPH*/
-                                &l_cp->tcps[p_j2k->m_current_tile_number] :
-                                p_j2k->m_specific_param.m_decoder.m_default_tcp;
-        l_image = p_j2k->m_private_image;
-
-        l_comp_room = l_image->numcomps <= 256 ? 1 : 2;
-
-        /* make sure room is sufficient*/
-        if (p_header_size < l_comp_room + 1) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading COC marker\n");
-                return OPJ_FALSE;
-        }
-        p_header_size -= l_comp_room + 1;
-
-        opj_read_bytes(p_header_data,&l_comp_no,l_comp_room);                   /* Ccoc */
-        p_header_data += l_comp_room;
-        if (l_comp_no >= l_image->numcomps) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading COC marker (bad number of components)\n");
-                return OPJ_FALSE;
-        }
+    opj_cp_t *l_cp = NULL;
+    opj_tcp_t *l_tcp = NULL;
+    opj_image_t *l_image = NULL;
+    OPJ_UINT32 l_comp_room;
+    OPJ_UINT32 l_comp_no;
+
+    /* preconditions */
+    assert(p_header_data != 00);
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+
+    l_cp = &(p_j2k->m_cp);
+    l_tcp = (p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_TPH)
+            ?  /*FIXME J2K_DEC_STATE_TPH*/
+            &l_cp->tcps[p_j2k->m_current_tile_number] :
+            p_j2k->m_specific_param.m_decoder.m_default_tcp;
+    l_image = p_j2k->m_private_image;
+
+    l_comp_room = l_image->numcomps <= 256 ? 1 : 2;
+
+    /* make sure room is sufficient*/
+    if (p_header_size < l_comp_room + 1) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading COC marker\n");
+        return OPJ_FALSE;
+    }
+    p_header_size -= l_comp_room + 1;
+
+    opj_read_bytes(p_header_data, &l_comp_no,
+                   l_comp_room);                 /* Ccoc */
+    p_header_data += l_comp_room;
+    if (l_comp_no >= l_image->numcomps) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Error reading COC marker (bad number of components)\n");
+        return OPJ_FALSE;
+    }
 
-        opj_read_bytes(p_header_data,&l_tcp->tccps[l_comp_no].csty,1);                  /* Scoc */
-        ++p_header_data ;
+    opj_read_bytes(p_header_data, &l_tcp->tccps[l_comp_no].csty,
+                   1);                  /* Scoc */
+    ++p_header_data ;
 
-        if (! opj_j2k_read_SPCod_SPCoc(p_j2k,l_comp_no,p_header_data,&p_header_size,p_manager)) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading COC marker\n");
-                return OPJ_FALSE;
-        }
+    if (! opj_j2k_read_SPCod_SPCoc(p_j2k, l_comp_no, p_header_data, &p_header_size,
+                                   p_manager)) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading COC marker\n");
+        return OPJ_FALSE;
+    }
 
-        if (p_header_size != 0) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading COC marker\n");
-                return OPJ_FALSE;
-        }
-        return OPJ_TRUE;
+    if (p_header_size != 0) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading COC marker\n");
+        return OPJ_FALSE;
+    }
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_write_qcd(     opj_j2k_t *p_j2k,
-                                                        opj_stream_private_t *p_stream,
-                                                        opj_event_mgr_t * p_manager
-                            )
+static OPJ_BOOL opj_j2k_write_qcd(opj_j2k_t *p_j2k,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager
+                                 )
 {
-        OPJ_UINT32 l_qcd_size,l_remaining_size;
-        OPJ_BYTE * l_current_data = 00;
-
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
-
-        l_qcd_size = 4 + opj_j2k_get_SQcd_SQcc_size(p_j2k,p_j2k->m_current_tile_number,0);
-        l_remaining_size = l_qcd_size;
-
-        if (l_qcd_size > p_j2k->m_specific_param.m_encoder.m_header_tile_data_size) {
-                OPJ_BYTE *new_header_tile_data = (OPJ_BYTE *) opj_realloc(p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_qcd_size);
-                if (! new_header_tile_data) {
-                        opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data = NULL;
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
-                        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to write QCD marker\n");
-                        return OPJ_FALSE;
-                }
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data;
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_qcd_size;
+    OPJ_UINT32 l_qcd_size, l_remaining_size;
+    OPJ_BYTE * l_current_data = 00;
+
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
+
+    l_qcd_size = 4 + opj_j2k_get_SQcd_SQcc_size(p_j2k, p_j2k->m_current_tile_number,
+                 0);
+    l_remaining_size = l_qcd_size;
+
+    if (l_qcd_size > p_j2k->m_specific_param.m_encoder.m_header_tile_data_size) {
+        OPJ_BYTE *new_header_tile_data = (OPJ_BYTE *) opj_realloc(
+                                             p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_qcd_size);
+        if (! new_header_tile_data) {
+            opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data = NULL;
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
+            opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to write QCD marker\n");
+            return OPJ_FALSE;
         }
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data;
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_qcd_size;
+    }
 
-        l_current_data = p_j2k->m_specific_param.m_encoder.m_header_tile_data;
+    l_current_data = p_j2k->m_specific_param.m_encoder.m_header_tile_data;
 
-        opj_write_bytes(l_current_data,J2K_MS_QCD,2);           /* QCD */
-        l_current_data += 2;
+    opj_write_bytes(l_current_data, J2K_MS_QCD, 2);         /* QCD */
+    l_current_data += 2;
 
-        opj_write_bytes(l_current_data,l_qcd_size-2,2);         /* L_QCD */
-        l_current_data += 2;
+    opj_write_bytes(l_current_data, l_qcd_size - 2, 2);     /* L_QCD */
+    l_current_data += 2;
 
-        l_remaining_size -= 4;
+    l_remaining_size -= 4;
 
-        if (! opj_j2k_write_SQcd_SQcc(p_j2k,p_j2k->m_current_tile_number,0,l_current_data,&l_remaining_size,p_manager)) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error writing QCD marker\n");
-                return OPJ_FALSE;
-        }
+    if (! opj_j2k_write_SQcd_SQcc(p_j2k, p_j2k->m_current_tile_number, 0,
+                                  l_current_data, &l_remaining_size, p_manager)) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error writing QCD marker\n");
+        return OPJ_FALSE;
+    }
 
-        if (l_remaining_size != 0) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error writing QCD marker\n");
-                return OPJ_FALSE;
-        }
+    if (l_remaining_size != 0) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error writing QCD marker\n");
+        return OPJ_FALSE;
+    }
 
-        if (opj_stream_write_data(p_stream, p_j2k->m_specific_param.m_encoder.m_header_tile_data,l_qcd_size,p_manager) != l_qcd_size) {
-                return OPJ_FALSE;
-        }
+    if (opj_stream_write_data(p_stream,
+                              p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_qcd_size,
+                              p_manager) != l_qcd_size) {
+        return OPJ_FALSE;
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 /**
@@ -2850,129 +2986,139 @@ static OPJ_BOOL opj_j2k_write_qcd(     opj_j2k_t *p_j2k,
  * @param       p_header_size   the size of the data contained in the QCD marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_qcd (  opj_j2k_t *p_j2k,
-                                    OPJ_BYTE * p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager
-                                    )
+static OPJ_BOOL opj_j2k_read_qcd(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager
+                                )
 {
-        /* preconditions */
-        assert(p_header_data != 00);
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
+    /* preconditions */
+    assert(p_header_data != 00);
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-        if (! opj_j2k_read_SQcd_SQcc(p_j2k,0,p_header_data,&p_header_size,p_manager)) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading QCD marker\n");
-                return OPJ_FALSE;
-        }
+    if (! opj_j2k_read_SQcd_SQcc(p_j2k, 0, p_header_data, &p_header_size,
+                                 p_manager)) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading QCD marker\n");
+        return OPJ_FALSE;
+    }
 
-        if (p_header_size != 0) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading QCD marker\n");
-                return OPJ_FALSE;
-        }
+    if (p_header_size != 0) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading QCD marker\n");
+        return OPJ_FALSE;
+    }
 
-        /* Apply the quantization parameters to other components of the current tile or the m_default_tcp */
-        opj_j2k_copy_tile_quantization_parameters(p_j2k);
+    /* Apply the quantization parameters to other components of the current tile or the m_default_tcp */
+    opj_j2k_copy_tile_quantization_parameters(p_j2k);
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_write_qcc(     opj_j2k_t *p_j2k,
-                                                OPJ_UINT32 p_comp_no,
-                                                opj_stream_private_t *p_stream,
-                                                opj_event_mgr_t * p_manager
-                            )
+static OPJ_BOOL opj_j2k_write_qcc(opj_j2k_t *p_j2k,
+                                  OPJ_UINT32 p_comp_no,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager
+                                 )
 {
-        OPJ_UINT32 l_qcc_size,l_remaining_size;
-
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
-
-        l_qcc_size = 5 + opj_j2k_get_SQcd_SQcc_size(p_j2k,p_j2k->m_current_tile_number,p_comp_no);
-        l_qcc_size += p_j2k->m_private_image->numcomps <= 256 ? 0:1;
-        l_remaining_size = l_qcc_size;
-
-        if (l_qcc_size > p_j2k->m_specific_param.m_encoder.m_header_tile_data_size) {
-                OPJ_BYTE *new_header_tile_data = (OPJ_BYTE *) opj_realloc(p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_qcc_size);
-                if (! new_header_tile_data) {
-                        opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data = NULL;
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
-                        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to write QCC marker\n");
-                        return OPJ_FALSE;
-                }
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data;
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_qcc_size;
+    OPJ_UINT32 l_qcc_size, l_remaining_size;
+
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
+
+    l_qcc_size = 5 + opj_j2k_get_SQcd_SQcc_size(p_j2k, p_j2k->m_current_tile_number,
+                 p_comp_no);
+    l_qcc_size += p_j2k->m_private_image->numcomps <= 256 ? 0 : 1;
+    l_remaining_size = l_qcc_size;
+
+    if (l_qcc_size > p_j2k->m_specific_param.m_encoder.m_header_tile_data_size) {
+        OPJ_BYTE *new_header_tile_data = (OPJ_BYTE *) opj_realloc(
+                                             p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_qcc_size);
+        if (! new_header_tile_data) {
+            opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data = NULL;
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
+            opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to write QCC marker\n");
+            return OPJ_FALSE;
         }
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data;
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_qcc_size;
+    }
 
-        opj_j2k_write_qcc_in_memory(p_j2k,p_comp_no,p_j2k->m_specific_param.m_encoder.m_header_tile_data,&l_remaining_size,p_manager);
+    opj_j2k_write_qcc_in_memory(p_j2k, p_comp_no,
+                                p_j2k->m_specific_param.m_encoder.m_header_tile_data, &l_remaining_size,
+                                p_manager);
 
-        if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_header_tile_data,l_qcc_size,p_manager) != l_qcc_size) {
-                return OPJ_FALSE;
-        }
+    if (opj_stream_write_data(p_stream,
+                              p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_qcc_size,
+                              p_manager) != l_qcc_size) {
+        return OPJ_FALSE;
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_compare_qcc(opj_j2k_t *p_j2k, OPJ_UINT32 p_first_comp_no, OPJ_UINT32 p_second_comp_no)
+static OPJ_BOOL opj_j2k_compare_qcc(opj_j2k_t *p_j2k,
+                                    OPJ_UINT32 p_first_comp_no, OPJ_UINT32 p_second_comp_no)
 {
-       return opj_j2k_compare_SQcd_SQcc(p_j2k,p_j2k->m_current_tile_number,p_first_comp_no, p_second_comp_no);
+    return opj_j2k_compare_SQcd_SQcc(p_j2k, p_j2k->m_current_tile_number,
+                                     p_first_comp_no, p_second_comp_no);
 }
 
-static void opj_j2k_write_qcc_in_memory(   opj_j2k_t *p_j2k,
-                                                                OPJ_UINT32 p_comp_no,
-                                                                OPJ_BYTE * p_data,
-                                                                OPJ_UINT32 * p_data_written,
-                                                                opj_event_mgr_t * p_manager
-                                    )
+static void opj_j2k_write_qcc_in_memory(opj_j2k_t *p_j2k,
+                                        OPJ_UINT32 p_comp_no,
+                                        OPJ_BYTE * p_data,
+                                        OPJ_UINT32 * p_data_written,
+                                        opj_event_mgr_t * p_manager
+                                       )
 {
-        OPJ_UINT32 l_qcc_size,l_remaining_size;
-        OPJ_BYTE * l_current_data = 00;
+    OPJ_UINT32 l_qcc_size, l_remaining_size;
+    OPJ_BYTE * l_current_data = 00;
 
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-        l_qcc_size = 6 + opj_j2k_get_SQcd_SQcc_size(p_j2k,p_j2k->m_current_tile_number,p_comp_no);
-        l_remaining_size = l_qcc_size;
+    l_qcc_size = 6 + opj_j2k_get_SQcd_SQcc_size(p_j2k, p_j2k->m_current_tile_number,
+                 p_comp_no);
+    l_remaining_size = l_qcc_size;
 
-        l_current_data = p_data;
+    l_current_data = p_data;
 
-        opj_write_bytes(l_current_data,J2K_MS_QCC,2);           /* QCC */
-        l_current_data += 2;
+    opj_write_bytes(l_current_data, J2K_MS_QCC, 2);         /* QCC */
+    l_current_data += 2;
 
-        if (p_j2k->m_private_image->numcomps <= 256) {
-                --l_qcc_size;
+    if (p_j2k->m_private_image->numcomps <= 256) {
+        --l_qcc_size;
 
-                opj_write_bytes(l_current_data,l_qcc_size-2,2);         /* L_QCC */
-                l_current_data += 2;
+        opj_write_bytes(l_current_data, l_qcc_size - 2, 2);     /* L_QCC */
+        l_current_data += 2;
 
-                opj_write_bytes(l_current_data, p_comp_no, 1);  /* Cqcc */
-                ++l_current_data;
+        opj_write_bytes(l_current_data, p_comp_no, 1);  /* Cqcc */
+        ++l_current_data;
 
-                /* in the case only one byte is sufficient the last byte allocated is useless -> still do -6 for available */
-                l_remaining_size -= 6;
-        }
-        else {
-                opj_write_bytes(l_current_data,l_qcc_size-2,2);         /* L_QCC */
-                l_current_data += 2;
+        /* in the case only one byte is sufficient the last byte allocated is useless -> still do -6 for available */
+        l_remaining_size -= 6;
+    } else {
+        opj_write_bytes(l_current_data, l_qcc_size - 2, 2);     /* L_QCC */
+        l_current_data += 2;
 
-                opj_write_bytes(l_current_data, p_comp_no, 2);  /* Cqcc */
-                l_current_data+=2;
+        opj_write_bytes(l_current_data, p_comp_no, 2);  /* Cqcc */
+        l_current_data += 2;
 
-                l_remaining_size -= 6;
-        }
+        l_remaining_size -= 6;
+    }
 
-        opj_j2k_write_SQcd_SQcc(p_j2k,p_j2k->m_current_tile_number,p_comp_no,l_current_data,&l_remaining_size,p_manager);
+    opj_j2k_write_SQcd_SQcc(p_j2k, p_j2k->m_current_tile_number, p_comp_no,
+                            l_current_data, &l_remaining_size, p_manager);
 
-        *p_data_written = l_qcc_size;
+    *p_data_written = l_qcc_size;
 }
 
-static OPJ_UINT32 opj_j2k_get_max_qcc_size (opj_j2k_t *p_j2k)
+static OPJ_UINT32 opj_j2k_get_max_qcc_size(opj_j2k_t *p_j2k)
 {
-        return opj_j2k_get_max_coc_size(p_j2k);
+    return opj_j2k_get_max_coc_size(p_j2k);
 }
 
 /**
@@ -2982,273 +3128,287 @@ static OPJ_UINT32 opj_j2k_get_max_qcc_size (opj_j2k_t *p_j2k)
  * @param       p_header_size   the size of the data contained in the QCC marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_qcc(   opj_j2k_t *p_j2k,
-                                    OPJ_BYTE * p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager
-                                    )
+static OPJ_BOOL opj_j2k_read_qcc(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager
+                                )
 {
-        OPJ_UINT32 l_num_comp,l_comp_no;
+    OPJ_UINT32 l_num_comp, l_comp_no;
 
-        /* preconditions */
-        assert(p_header_data != 00);
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
+    /* preconditions */
+    assert(p_header_data != 00);
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-        l_num_comp = p_j2k->m_private_image->numcomps;
+    l_num_comp = p_j2k->m_private_image->numcomps;
 
-        if (l_num_comp <= 256) {
-                if (p_header_size < 1) {
-                        opj_event_msg(p_manager, EVT_ERROR, "Error reading QCC marker\n");
-                        return OPJ_FALSE;
-                }
-                opj_read_bytes(p_header_data,&l_comp_no,1);
-                ++p_header_data;
-                --p_header_size;
+    if (l_num_comp <= 256) {
+        if (p_header_size < 1) {
+            opj_event_msg(p_manager, EVT_ERROR, "Error reading QCC marker\n");
+            return OPJ_FALSE;
         }
-        else {
-                if (p_header_size < 2) {
-                        opj_event_msg(p_manager, EVT_ERROR, "Error reading QCC marker\n");
-                        return OPJ_FALSE;
-                }
-                opj_read_bytes(p_header_data,&l_comp_no,2);
-                p_header_data+=2;
-                p_header_size-=2;
+        opj_read_bytes(p_header_data, &l_comp_no, 1);
+        ++p_header_data;
+        --p_header_size;
+    } else {
+        if (p_header_size < 2) {
+            opj_event_msg(p_manager, EVT_ERROR, "Error reading QCC marker\n");
+            return OPJ_FALSE;
         }
+        opj_read_bytes(p_header_data, &l_comp_no, 2);
+        p_header_data += 2;
+        p_header_size -= 2;
+    }
 
 #ifdef USE_JPWL
-        if (p_j2k->m_cp.correct) {
+    if (p_j2k->m_cp.correct) {
 
-                static OPJ_UINT32 backup_compno = 0;
+        static OPJ_UINT32 backup_compno = 0;
 
-                /* compno is negative or larger than the number of components!!! */
-                if (/*(l_comp_no < 0) ||*/ (l_comp_no >= l_num_comp)) {
-                        opj_event_msg(p_manager, EVT_ERROR,
-                                "JPWL: bad component number in QCC (%d out of a maximum of %d)\n",
-                                l_comp_no, l_num_comp);
-                        if (!JPWL_ASSUME) {
-                                opj_event_msg(p_manager, EVT_ERROR, "JPWL: giving up\n");
-                                return OPJ_FALSE;
-                        }
-                        /* we try to correct */
-                        l_comp_no = backup_compno % l_num_comp;
-                        opj_event_msg(p_manager, EVT_WARNING, "- trying to adjust this\n"
-                                "- setting component number to %d\n",
-                                l_comp_no);
-                }
+        /* compno is negative or larger than the number of components!!! */
+        if (/*(l_comp_no < 0) ||*/ (l_comp_no >= l_num_comp)) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "JPWL: bad component number in QCC (%d out of a maximum of %d)\n",
+                          l_comp_no, l_num_comp);
+            if (!JPWL_ASSUME) {
+                opj_event_msg(p_manager, EVT_ERROR, "JPWL: giving up\n");
+                return OPJ_FALSE;
+            }
+            /* we try to correct */
+            l_comp_no = backup_compno % l_num_comp;
+            opj_event_msg(p_manager, EVT_WARNING, "- trying to adjust this\n"
+                          "- setting component number to %d\n",
+                          l_comp_no);
+        }
 
-                /* keep your private count of tiles */
-                backup_compno++;
-        };
+        /* keep your private count of tiles */
+        backup_compno++;
+    };
 #endif /* USE_JPWL */
 
-        if (l_comp_no >= p_j2k->m_private_image->numcomps) {
-                opj_event_msg(p_manager, EVT_ERROR,
-                              "Invalid component number: %d, regarding the number of components %d\n",
-                              l_comp_no, p_j2k->m_private_image->numcomps);
-                return OPJ_FALSE;
-        }
+    if (l_comp_no >= p_j2k->m_private_image->numcomps) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Invalid component number: %d, regarding the number of components %d\n",
+                      l_comp_no, p_j2k->m_private_image->numcomps);
+        return OPJ_FALSE;
+    }
 
-        if (! opj_j2k_read_SQcd_SQcc(p_j2k,l_comp_no,p_header_data,&p_header_size,p_manager)) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading QCC marker\n");
-                return OPJ_FALSE;
-        }
+    if (! opj_j2k_read_SQcd_SQcc(p_j2k, l_comp_no, p_header_data, &p_header_size,
+                                 p_manager)) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading QCC marker\n");
+        return OPJ_FALSE;
+    }
 
-        if (p_header_size != 0) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading QCC marker\n");
-                return OPJ_FALSE;
-        }
+    if (p_header_size != 0) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading QCC marker\n");
+        return OPJ_FALSE;
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_write_poc(     opj_j2k_t *p_j2k,
-                                                        opj_stream_private_t *p_stream,
-                                                        opj_event_mgr_t * p_manager
-                            )
+static OPJ_BOOL opj_j2k_write_poc(opj_j2k_t *p_j2k,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager
+                                 )
 {
-        OPJ_UINT32 l_nb_comp;
-        OPJ_UINT32 l_nb_poc;
-        OPJ_UINT32 l_poc_size;
-        OPJ_UINT32 l_written_size = 0;
-        opj_tcp_t *l_tcp = 00;
-        OPJ_UINT32 l_poc_room;
-
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
+    OPJ_UINT32 l_nb_comp;
+    OPJ_UINT32 l_nb_poc;
+    OPJ_UINT32 l_poc_size;
+    OPJ_UINT32 l_written_size = 0;
+    opj_tcp_t *l_tcp = 00;
+    OPJ_UINT32 l_poc_room;
 
-        l_tcp = &p_j2k->m_cp.tcps[p_j2k->m_current_tile_number];
-        l_nb_comp = p_j2k->m_private_image->numcomps;
-        l_nb_poc = 1 + l_tcp->numpocs;
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
 
-        if (l_nb_comp <= 256) {
-                l_poc_room = 1;
-        }
-        else {
-                l_poc_room = 2;
-        }
-        l_poc_size = 4 + (5 + 2 * l_poc_room) * l_nb_poc;
+    l_tcp = &p_j2k->m_cp.tcps[p_j2k->m_current_tile_number];
+    l_nb_comp = p_j2k->m_private_image->numcomps;
+    l_nb_poc = 1 + l_tcp->numpocs;
 
-        if (l_poc_size > p_j2k->m_specific_param.m_encoder.m_header_tile_data_size) {
-                OPJ_BYTE *new_header_tile_data = (OPJ_BYTE *) opj_realloc(p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_poc_size);
-                if (! new_header_tile_data) {
-                        opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data = NULL;
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
-                        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to write POC marker\n");
-                        return OPJ_FALSE;
-                }
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data;
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_poc_size;
+    if (l_nb_comp <= 256) {
+        l_poc_room = 1;
+    } else {
+        l_poc_room = 2;
+    }
+    l_poc_size = 4 + (5 + 2 * l_poc_room) * l_nb_poc;
+
+    if (l_poc_size > p_j2k->m_specific_param.m_encoder.m_header_tile_data_size) {
+        OPJ_BYTE *new_header_tile_data = (OPJ_BYTE *) opj_realloc(
+                                             p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_poc_size);
+        if (! new_header_tile_data) {
+            opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data = NULL;
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
+            opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to write POC marker\n");
+            return OPJ_FALSE;
         }
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data;
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_poc_size;
+    }
 
-        opj_j2k_write_poc_in_memory(p_j2k,p_j2k->m_specific_param.m_encoder.m_header_tile_data,&l_written_size,p_manager);
+    opj_j2k_write_poc_in_memory(p_j2k,
+                                p_j2k->m_specific_param.m_encoder.m_header_tile_data, &l_written_size,
+                                p_manager);
 
-        if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_header_tile_data,l_poc_size,p_manager) != l_poc_size) {
-                return OPJ_FALSE;
-        }
+    if (opj_stream_write_data(p_stream,
+                              p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_poc_size,
+                              p_manager) != l_poc_size) {
+        return OPJ_FALSE;
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static void opj_j2k_write_poc_in_memory(   opj_j2k_t *p_j2k,
-                                                                OPJ_BYTE * p_data,
-                                                                OPJ_UINT32 * p_data_written,
-                                                                opj_event_mgr_t * p_manager
-                                    )
+static void opj_j2k_write_poc_in_memory(opj_j2k_t *p_j2k,
+                                        OPJ_BYTE * p_data,
+                                        OPJ_UINT32 * p_data_written,
+                                        opj_event_mgr_t * p_manager
+                                       )
 {
-        OPJ_UINT32 i;
-        OPJ_BYTE * l_current_data = 00;
-        OPJ_UINT32 l_nb_comp;
-        OPJ_UINT32 l_nb_poc;
-        OPJ_UINT32 l_poc_size;
-        opj_image_t *l_image = 00;
-        opj_tcp_t *l_tcp = 00;
-        opj_tccp_t *l_tccp = 00;
-        opj_poc_t *l_current_poc = 00;
-        OPJ_UINT32 l_poc_room;
+    OPJ_UINT32 i;
+    OPJ_BYTE * l_current_data = 00;
+    OPJ_UINT32 l_nb_comp;
+    OPJ_UINT32 l_nb_poc;
+    OPJ_UINT32 l_poc_size;
+    opj_image_t *l_image = 00;
+    opj_tcp_t *l_tcp = 00;
+    opj_tccp_t *l_tccp = 00;
+    opj_poc_t *l_current_poc = 00;
+    OPJ_UINT32 l_poc_room;
+
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+
+    l_tcp = &p_j2k->m_cp.tcps[p_j2k->m_current_tile_number];
+    l_tccp = &l_tcp->tccps[0];
+    l_image = p_j2k->m_private_image;
+    l_nb_comp = l_image->numcomps;
+    l_nb_poc = 1 + l_tcp->numpocs;
+
+    if (l_nb_comp <= 256) {
+        l_poc_room = 1;
+    } else {
+        l_poc_room = 2;
+    }
 
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
+    l_poc_size = 4 + (5 + 2 * l_poc_room) * l_nb_poc;
 
-        l_tcp = &p_j2k->m_cp.tcps[p_j2k->m_current_tile_number];
-        l_tccp = &l_tcp->tccps[0];
-        l_image = p_j2k->m_private_image;
-        l_nb_comp = l_image->numcomps;
-        l_nb_poc = 1 + l_tcp->numpocs;
+    l_current_data = p_data;
 
-        if (l_nb_comp <= 256) {
-                l_poc_room = 1;
-        }
-        else {
-                l_poc_room = 2;
-        }
+    opj_write_bytes(l_current_data, J2K_MS_POC,
+                    2);                                   /* POC  */
+    l_current_data += 2;
 
-        l_poc_size = 4 + (5 + 2 * l_poc_room) * l_nb_poc;
+    opj_write_bytes(l_current_data, l_poc_size - 2,
+                    2);                                 /* Lpoc */
+    l_current_data += 2;
 
-        l_current_data = p_data;
+    l_current_poc =  l_tcp->pocs;
+    for (i = 0; i < l_nb_poc; ++i) {
+        opj_write_bytes(l_current_data, l_current_poc->resno0,
+                        1);                                /* RSpoc_i */
+        ++l_current_data;
 
-        opj_write_bytes(l_current_data,J2K_MS_POC,2);                                   /* POC  */
-        l_current_data += 2;
+        opj_write_bytes(l_current_data, l_current_poc->compno0,
+                        l_poc_room);              /* CSpoc_i */
+        l_current_data += l_poc_room;
 
-        opj_write_bytes(l_current_data,l_poc_size-2,2);                                 /* Lpoc */
+        opj_write_bytes(l_current_data, l_current_poc->layno1,
+                        2);                                /* LYEpoc_i */
         l_current_data += 2;
 
-        l_current_poc =  l_tcp->pocs;
-        for (i = 0; i < l_nb_poc; ++i) {
-                opj_write_bytes(l_current_data,l_current_poc->resno0,1);                                /* RSpoc_i */
-                ++l_current_data;
-
-                opj_write_bytes(l_current_data,l_current_poc->compno0,l_poc_room);              /* CSpoc_i */
-                l_current_data+=l_poc_room;
-
-                opj_write_bytes(l_current_data,l_current_poc->layno1,2);                                /* LYEpoc_i */
-                l_current_data+=2;
-
-                opj_write_bytes(l_current_data,l_current_poc->resno1,1);                                /* REpoc_i */
-                ++l_current_data;
+        opj_write_bytes(l_current_data, l_current_poc->resno1,
+                        1);                                /* REpoc_i */
+        ++l_current_data;
 
-                opj_write_bytes(l_current_data,l_current_poc->compno1,l_poc_room);              /* CEpoc_i */
-                l_current_data+=l_poc_room;
+        opj_write_bytes(l_current_data, l_current_poc->compno1,
+                        l_poc_room);              /* CEpoc_i */
+        l_current_data += l_poc_room;
 
-                opj_write_bytes(l_current_data, (OPJ_UINT32)l_current_poc->prg,1);    /* Ppoc_i */
-                ++l_current_data;
+        opj_write_bytes(l_current_data, (OPJ_UINT32)l_current_poc->prg,
+                        1);   /* Ppoc_i */
+        ++l_current_data;
 
-                /* change the value of the max layer according to the actual number of layers in the file, components and resolutions*/
-                l_current_poc->layno1 = (OPJ_UINT32)opj_int_min((OPJ_INT32)l_current_poc->layno1, (OPJ_INT32)l_tcp->numlayers);
-                l_current_poc->resno1 = (OPJ_UINT32)opj_int_min((OPJ_INT32)l_current_poc->resno1, (OPJ_INT32)l_tccp->numresolutions);
-                l_current_poc->compno1 = (OPJ_UINT32)opj_int_min((OPJ_INT32)l_current_poc->compno1, (OPJ_INT32)l_nb_comp);
+        /* change the value of the max layer according to the actual number of layers in the file, components and resolutions*/
+        l_current_poc->layno1 = (OPJ_UINT32)opj_int_min((OPJ_INT32)
+                                l_current_poc->layno1, (OPJ_INT32)l_tcp->numlayers);
+        l_current_poc->resno1 = (OPJ_UINT32)opj_int_min((OPJ_INT32)
+                                l_current_poc->resno1, (OPJ_INT32)l_tccp->numresolutions);
+        l_current_poc->compno1 = (OPJ_UINT32)opj_int_min((OPJ_INT32)
+                                 l_current_poc->compno1, (OPJ_INT32)l_nb_comp);
 
-                ++l_current_poc;
-        }
+        ++l_current_poc;
+    }
 
-        *p_data_written = l_poc_size;
+    *p_data_written = l_poc_size;
 }
 
 static OPJ_UINT32 opj_j2k_get_max_poc_size(opj_j2k_t *p_j2k)
 {
-        opj_tcp_t * l_tcp = 00;
-        OPJ_UINT32 l_nb_tiles = 0;
-        OPJ_UINT32 l_max_poc = 0;
-        OPJ_UINT32 i;
+    opj_tcp_t * l_tcp = 00;
+    OPJ_UINT32 l_nb_tiles = 0;
+    OPJ_UINT32 l_max_poc = 0;
+    OPJ_UINT32 i;
 
-        l_tcp = p_j2k->m_cp.tcps;
-        l_nb_tiles = p_j2k->m_cp.th * p_j2k->m_cp.tw;
+    l_tcp = p_j2k->m_cp.tcps;
+    l_nb_tiles = p_j2k->m_cp.th * p_j2k->m_cp.tw;
 
-        for (i=0;i<l_nb_tiles;++i) {
-                l_max_poc = opj_uint_max(l_max_poc,l_tcp->numpocs);
-                ++l_tcp;
-        }
+    for (i = 0; i < l_nb_tiles; ++i) {
+        l_max_poc = opj_uint_max(l_max_poc, l_tcp->numpocs);
+        ++l_tcp;
+    }
 
-        ++l_max_poc;
+    ++l_max_poc;
 
-        return 4 + 9 * l_max_poc;
+    return 4 + 9 * l_max_poc;
 }
 
-static OPJ_UINT32 opj_j2k_get_max_toc_size (opj_j2k_t *p_j2k)
+static OPJ_UINT32 opj_j2k_get_max_toc_size(opj_j2k_t *p_j2k)
 {
-        OPJ_UINT32 i;
-        OPJ_UINT32 l_nb_tiles;
-        OPJ_UINT32 l_max = 0;
-        opj_tcp_t * l_tcp = 00;
+    OPJ_UINT32 i;
+    OPJ_UINT32 l_nb_tiles;
+    OPJ_UINT32 l_max = 0;
+    opj_tcp_t * l_tcp = 00;
 
-        l_tcp = p_j2k->m_cp.tcps;
-        l_nb_tiles = p_j2k->m_cp.tw * p_j2k->m_cp.th ;
+    l_tcp = p_j2k->m_cp.tcps;
+    l_nb_tiles = p_j2k->m_cp.tw * p_j2k->m_cp.th ;
 
-        for (i=0;i<l_nb_tiles;++i) {
-                l_max = opj_uint_max(l_max,l_tcp->m_nb_tile_parts);
+    for (i = 0; i < l_nb_tiles; ++i) {
+        l_max = opj_uint_max(l_max, l_tcp->m_nb_tile_parts);
 
-                ++l_tcp;
-        }
+        ++l_tcp;
+    }
 
-        return 12 * l_max;
+    return 12 * l_max;
 }
 
 static OPJ_UINT32 opj_j2k_get_specific_header_sizes(opj_j2k_t *p_j2k)
 {
-        OPJ_UINT32 l_nb_bytes = 0;
-        OPJ_UINT32 l_nb_comps;
-        OPJ_UINT32 l_coc_bytes,l_qcc_bytes;
+    OPJ_UINT32 l_nb_bytes = 0;
+    OPJ_UINT32 l_nb_comps;
+    OPJ_UINT32 l_coc_bytes, l_qcc_bytes;
 
-        l_nb_comps = p_j2k->m_private_image->numcomps - 1;
-        l_nb_bytes += opj_j2k_get_max_toc_size(p_j2k);
+    l_nb_comps = p_j2k->m_private_image->numcomps - 1;
+    l_nb_bytes += opj_j2k_get_max_toc_size(p_j2k);
 
-        if (!(OPJ_IS_CINEMA(p_j2k->m_cp.rsiz))) {
-                l_coc_bytes = opj_j2k_get_max_coc_size(p_j2k);
-                l_nb_bytes += l_nb_comps * l_coc_bytes;
+    if (!(OPJ_IS_CINEMA(p_j2k->m_cp.rsiz))) {
+        l_coc_bytes = opj_j2k_get_max_coc_size(p_j2k);
+        l_nb_bytes += l_nb_comps * l_coc_bytes;
 
-                l_qcc_bytes = opj_j2k_get_max_qcc_size(p_j2k);
-                l_nb_bytes += l_nb_comps * l_qcc_bytes;
-        }
+        l_qcc_bytes = opj_j2k_get_max_qcc_size(p_j2k);
+        l_nb_bytes += l_nb_comps * l_qcc_bytes;
+    }
 
-        l_nb_bytes += opj_j2k_get_max_poc_size(p_j2k);
+    l_nb_bytes += opj_j2k_get_max_poc_size(p_j2k);
 
-        /*** DEVELOPER CORNER, Add room for your headers ***/
+    /*** DEVELOPER CORNER, Add room for your headers ***/
 
-        return l_nb_bytes;
+    return l_nb_bytes;
 }
 
 /**
@@ -3259,84 +3419,88 @@ static OPJ_UINT32 opj_j2k_get_specific_header_sizes(opj_j2k_t *p_j2k)
  * @param       p_header_size   the size of the data contained in the POC marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_poc (  opj_j2k_t *p_j2k,
-                                    OPJ_BYTE * p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager
-                                    )
+static OPJ_BOOL opj_j2k_read_poc(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager
+                                )
 {
-        OPJ_UINT32 i, l_nb_comp, l_tmp;
-        opj_image_t * l_image = 00;
-        OPJ_UINT32 l_old_poc_nb, l_current_poc_nb, l_current_poc_remaining;
-        OPJ_UINT32 l_chunk_size, l_comp_room;
+    OPJ_UINT32 i, l_nb_comp, l_tmp;
+    opj_image_t * l_image = 00;
+    OPJ_UINT32 l_old_poc_nb, l_current_poc_nb, l_current_poc_remaining;
+    OPJ_UINT32 l_chunk_size, l_comp_room;
 
-        opj_cp_t *l_cp = 00;
-        opj_tcp_t *l_tcp = 00;
-        opj_poc_t *l_current_poc = 00;
+    opj_cp_t *l_cp = 00;
+    opj_tcp_t *l_tcp = 00;
+    opj_poc_t *l_current_poc = 00;
 
-        /* preconditions */
-        assert(p_header_data != 00);
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
+    /* preconditions */
+    assert(p_header_data != 00);
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-        l_image = p_j2k->m_private_image;
-        l_nb_comp = l_image->numcomps;
-        if (l_nb_comp <= 256) {
-                l_comp_room = 1;
-        }
-        else {
-                l_comp_room = 2;
-        }
-        l_chunk_size = 5 + 2 * l_comp_room;
-        l_current_poc_nb = p_header_size / l_chunk_size;
-        l_current_poc_remaining = p_header_size % l_chunk_size;
+    l_image = p_j2k->m_private_image;
+    l_nb_comp = l_image->numcomps;
+    if (l_nb_comp <= 256) {
+        l_comp_room = 1;
+    } else {
+        l_comp_room = 2;
+    }
+    l_chunk_size = 5 + 2 * l_comp_room;
+    l_current_poc_nb = p_header_size / l_chunk_size;
+    l_current_poc_remaining = p_header_size % l_chunk_size;
 
-        if ((l_current_poc_nb <= 0) || (l_current_poc_remaining != 0)) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading POC marker\n");
-                return OPJ_FALSE;
-        }
+    if ((l_current_poc_nb <= 0) || (l_current_poc_remaining != 0)) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading POC marker\n");
+        return OPJ_FALSE;
+    }
 
-        l_cp = &(p_j2k->m_cp);
-        l_tcp = (p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_TPH) ?
-                                &l_cp->tcps[p_j2k->m_current_tile_number] :
-                                p_j2k->m_specific_param.m_decoder.m_default_tcp;
-        l_old_poc_nb = l_tcp->POC ? l_tcp->numpocs + 1 : 0;
-        l_current_poc_nb += l_old_poc_nb;
-
-        if(l_current_poc_nb >= 32)
-          {
-          opj_event_msg(p_manager, EVT_ERROR, "Too many POCs %d\n", l_current_poc_nb);
-          return OPJ_FALSE;
-          }
-        assert(l_current_poc_nb < 32);
-
-        /* now poc is in use.*/
-        l_tcp->POC = 1;
-
-        l_current_poc = &l_tcp->pocs[l_old_poc_nb];
-        for     (i = l_old_poc_nb; i < l_current_poc_nb; ++i) {
-                opj_read_bytes(p_header_data,&(l_current_poc->resno0),1);                               /* RSpoc_i */
-                ++p_header_data;
-                opj_read_bytes(p_header_data,&(l_current_poc->compno0),l_comp_room);    /* CSpoc_i */
-                p_header_data+=l_comp_room;
-                opj_read_bytes(p_header_data,&(l_current_poc->layno1),2);                               /* LYEpoc_i */
-                /* make sure layer end is in acceptable bounds */
-                l_current_poc->layno1 = opj_uint_min(l_current_poc->layno1, l_tcp->numlayers);
-                p_header_data+=2;
-                opj_read_bytes(p_header_data,&(l_current_poc->resno1),1);                               /* REpoc_i */
-                ++p_header_data;
-                opj_read_bytes(p_header_data,&(l_current_poc->compno1),l_comp_room);    /* CEpoc_i */
-                p_header_data+=l_comp_room;
-                opj_read_bytes(p_header_data,&l_tmp,1);                                                                 /* Ppoc_i */
-                ++p_header_data;
-                l_current_poc->prg = (OPJ_PROG_ORDER) l_tmp;
-                /* make sure comp is in acceptable bounds */
-                l_current_poc->compno1 = opj_uint_min(l_current_poc->compno1, l_nb_comp);
-                ++l_current_poc;
-        }
-
-        l_tcp->numpocs = l_current_poc_nb - 1;
-        return OPJ_TRUE;
+    l_cp = &(p_j2k->m_cp);
+    l_tcp = (p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_TPH) ?
+            &l_cp->tcps[p_j2k->m_current_tile_number] :
+            p_j2k->m_specific_param.m_decoder.m_default_tcp;
+    l_old_poc_nb = l_tcp->POC ? l_tcp->numpocs + 1 : 0;
+    l_current_poc_nb += l_old_poc_nb;
+
+    if (l_current_poc_nb >= 32) {
+        opj_event_msg(p_manager, EVT_ERROR, "Too many POCs %d\n", l_current_poc_nb);
+        return OPJ_FALSE;
+    }
+    assert(l_current_poc_nb < 32);
+
+    /* now poc is in use.*/
+    l_tcp->POC = 1;
+
+    l_current_poc = &l_tcp->pocs[l_old_poc_nb];
+    for (i = l_old_poc_nb; i < l_current_poc_nb; ++i) {
+        opj_read_bytes(p_header_data, &(l_current_poc->resno0),
+                       1);                               /* RSpoc_i */
+        ++p_header_data;
+        opj_read_bytes(p_header_data, &(l_current_poc->compno0),
+                       l_comp_room);  /* CSpoc_i */
+        p_header_data += l_comp_room;
+        opj_read_bytes(p_header_data, &(l_current_poc->layno1),
+                       2);                               /* LYEpoc_i */
+        /* make sure layer end is in acceptable bounds */
+        l_current_poc->layno1 = opj_uint_min(l_current_poc->layno1, l_tcp->numlayers);
+        p_header_data += 2;
+        opj_read_bytes(p_header_data, &(l_current_poc->resno1),
+                       1);                               /* REpoc_i */
+        ++p_header_data;
+        opj_read_bytes(p_header_data, &(l_current_poc->compno1),
+                       l_comp_room);  /* CEpoc_i */
+        p_header_data += l_comp_room;
+        opj_read_bytes(p_header_data, &l_tmp,
+                       1);                                                                 /* Ppoc_i */
+        ++p_header_data;
+        l_current_poc->prg = (OPJ_PROG_ORDER) l_tmp;
+        /* make sure comp is in acceptable bounds */
+        l_current_poc->compno1 = opj_uint_min(l_current_poc->compno1, l_nb_comp);
+        ++l_current_poc;
+    }
+
+    l_tcp->numpocs = l_current_poc_nb - 1;
+    return OPJ_TRUE;
 }
 
 /**
@@ -3347,36 +3511,36 @@ static OPJ_BOOL opj_j2k_read_poc (  opj_j2k_t *p_j2k,
  * @param       p_header_size   the size of the data contained in the TLM marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_crg (  opj_j2k_t *p_j2k,
-                                    OPJ_BYTE * p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager
-                                    )
+static OPJ_BOOL opj_j2k_read_crg(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager
+                                )
 {
-        OPJ_UINT32 l_nb_comp;
-        /* preconditions */
-        assert(p_header_data != 00);
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
+    OPJ_UINT32 l_nb_comp;
+    /* preconditions */
+    assert(p_header_data != 00);
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-        l_nb_comp = p_j2k->m_private_image->numcomps;
+    l_nb_comp = p_j2k->m_private_image->numcomps;
 
-        if (p_header_size != l_nb_comp *4) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading CRG marker\n");
-                return OPJ_FALSE;
-        }
-        /* Do not care of this at the moment since only local variables are set here */
-        /*
-        for
-                (i = 0; i < l_nb_comp; ++i)
-        {
-                opj_read_bytes(p_header_data,&l_Xcrg_i,2);                              // Xcrg_i
-                p_header_data+=2;
-                opj_read_bytes(p_header_data,&l_Ycrg_i,2);                              // Xcrg_i
-                p_header_data+=2;
-        }
-        */
-        return OPJ_TRUE;
+    if (p_header_size != l_nb_comp * 4) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading CRG marker\n");
+        return OPJ_FALSE;
+    }
+    /* Do not care of this at the moment since only local variables are set here */
+    /*
+    for
+            (i = 0; i < l_nb_comp; ++i)
+    {
+            opj_read_bytes(p_header_data,&l_Xcrg_i,2);                              // Xcrg_i
+            p_header_data+=2;
+            opj_read_bytes(p_header_data,&l_Ycrg_i,2);                              // Xcrg_i
+            p_header_data+=2;
+    }
+    */
+    return OPJ_TRUE;
 }
 
 /**
@@ -3387,52 +3551,55 @@ static OPJ_BOOL opj_j2k_read_crg (  opj_j2k_t *p_j2k,
  * @param       p_header_size   the size of the data contained in the TLM marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_tlm (  opj_j2k_t *p_j2k,
-                                    OPJ_BYTE * p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager
-                                    )
+static OPJ_BOOL opj_j2k_read_tlm(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager
+                                )
 {
-        OPJ_UINT32 l_Ztlm, l_Stlm, l_ST, l_SP, l_tot_num_tp_remaining, l_quotient, l_Ptlm_size;
-        /* preconditions */
-        assert(p_header_data != 00);
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-
-        if (p_header_size < 2) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading TLM marker\n");
-                return OPJ_FALSE;
-        }
-        p_header_size -= 2;
+    OPJ_UINT32 l_Ztlm, l_Stlm, l_ST, l_SP, l_tot_num_tp_remaining, l_quotient,
+               l_Ptlm_size;
+    /* preconditions */
+    assert(p_header_data != 00);
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-        opj_read_bytes(p_header_data,&l_Ztlm,1);                                /* Ztlm */
-        ++p_header_data;
-        opj_read_bytes(p_header_data,&l_Stlm,1);                                /* Stlm */
-        ++p_header_data;
+    if (p_header_size < 2) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading TLM marker\n");
+        return OPJ_FALSE;
+    }
+    p_header_size -= 2;
 
-        l_ST = ((l_Stlm >> 4) & 0x3);
-        l_SP = (l_Stlm >> 6) & 0x1;
+    opj_read_bytes(p_header_data, &l_Ztlm,
+                   1);                              /* Ztlm */
+    ++p_header_data;
+    opj_read_bytes(p_header_data, &l_Stlm,
+                   1);                              /* Stlm */
+    ++p_header_data;
 
-        l_Ptlm_size = (l_SP + 1) * 2;
-        l_quotient = l_Ptlm_size + l_ST;
+    l_ST = ((l_Stlm >> 4) & 0x3);
+    l_SP = (l_Stlm >> 6) & 0x1;
 
-        l_tot_num_tp_remaining = p_header_size % l_quotient;
+    l_Ptlm_size = (l_SP + 1) * 2;
+    l_quotient = l_Ptlm_size + l_ST;
 
-        if (l_tot_num_tp_remaining != 0) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading TLM marker\n");
-                return OPJ_FALSE;
-        }
-        /* FIXME Do not care of this at the moment since only local variables are set here */
-        /*
-        for
-                (i = 0; i < l_tot_num_tp; ++i)
-        {
-                opj_read_bytes(p_header_data,&l_Ttlm_i,l_ST);                           // Ttlm_i
-                p_header_data += l_ST;
-                opj_read_bytes(p_header_data,&l_Ptlm_i,l_Ptlm_size);            // Ptlm_i
-                p_header_data += l_Ptlm_size;
-        }*/
-        return OPJ_TRUE;
+    l_tot_num_tp_remaining = p_header_size % l_quotient;
+
+    if (l_tot_num_tp_remaining != 0) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading TLM marker\n");
+        return OPJ_FALSE;
+    }
+    /* FIXME Do not care of this at the moment since only local variables are set here */
+    /*
+    for
+            (i = 0; i < l_tot_num_tp; ++i)
+    {
+            opj_read_bytes(p_header_data,&l_Ttlm_i,l_ST);                           // Ttlm_i
+            p_header_data += l_ST;
+            opj_read_bytes(p_header_data,&l_Ptlm_i,l_Ptlm_size);            // Ptlm_i
+            p_header_data += l_Ptlm_size;
+    }*/
+    return OPJ_TRUE;
 }
 
 /**
@@ -3443,66 +3610,66 @@ static OPJ_BOOL opj_j2k_read_tlm (  opj_j2k_t *p_j2k,
  * @param       p_header_size   the size of the data contained in the TLM marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_plm (  opj_j2k_t *p_j2k,
-                                    OPJ_BYTE * p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager
-                                    )
+static OPJ_BOOL opj_j2k_read_plm(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager
+                                )
 {
-        /* preconditions */
-        assert(p_header_data != 00);
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-
-        if (p_header_size < 1) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading PLM marker\n");
-                return OPJ_FALSE;
-        }
-        /* Do not care of this at the moment since only local variables are set here */
-        /*
-        opj_read_bytes(p_header_data,&l_Zplm,1);                                        // Zplm
-        ++p_header_data;
-        --p_header_size;
+    /* preconditions */
+    assert(p_header_data != 00);
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-        while
-                (p_header_size > 0)
-        {
-                opj_read_bytes(p_header_data,&l_Nplm,1);                                // Nplm
-                ++p_header_data;
-                p_header_size -= (1+l_Nplm);
-                if
-                        (p_header_size < 0)
-                {
-                        opj_event_msg(p_manager, EVT_ERROR, "Error reading PLM marker\n");
-                        return false;
-                }
-                for
-                        (i = 0; i < l_Nplm; ++i)
-                {
-                        opj_read_bytes(p_header_data,&l_tmp,1);                         // Iplm_ij
-                        ++p_header_data;
-                        // take only the last seven bytes
-                        l_packet_len |= (l_tmp & 0x7f);
-                        if
-                                (l_tmp & 0x80)
-                        {
-                                l_packet_len <<= 7;
-                        }
-                        else
-                        {
-                // store packet length and proceed to next packet
-                                l_packet_len = 0;
-                        }
-                }
-                if
-                        (l_packet_len != 0)
-                {
-                        opj_event_msg(p_manager, EVT_ERROR, "Error reading PLM marker\n");
-                        return false;
-                }
-        }
-        */
-        return OPJ_TRUE;
+    if (p_header_size < 1) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading PLM marker\n");
+        return OPJ_FALSE;
+    }
+    /* Do not care of this at the moment since only local variables are set here */
+    /*
+    opj_read_bytes(p_header_data,&l_Zplm,1);                                        // Zplm
+    ++p_header_data;
+    --p_header_size;
+
+    while
+            (p_header_size > 0)
+    {
+            opj_read_bytes(p_header_data,&l_Nplm,1);                                // Nplm
+            ++p_header_data;
+            p_header_size -= (1+l_Nplm);
+            if
+                    (p_header_size < 0)
+            {
+                    opj_event_msg(p_manager, EVT_ERROR, "Error reading PLM marker\n");
+                    return false;
+            }
+            for
+                    (i = 0; i < l_Nplm; ++i)
+            {
+                    opj_read_bytes(p_header_data,&l_tmp,1);                         // Iplm_ij
+                    ++p_header_data;
+                    // take only the last seven bytes
+                    l_packet_len |= (l_tmp & 0x7f);
+                    if
+                            (l_tmp & 0x80)
+                    {
+                            l_packet_len <<= 7;
+                    }
+                    else
+                    {
+            // store packet length and proceed to next packet
+                            l_packet_len = 0;
+                    }
+            }
+            if
+                    (l_packet_len != 0)
+            {
+                    opj_event_msg(p_manager, EVT_ERROR, "Error reading PLM marker\n");
+                    return false;
+            }
+    }
+    */
+    return OPJ_TRUE;
 }
 
 /**
@@ -3513,48 +3680,47 @@ static OPJ_BOOL opj_j2k_read_plm (  opj_j2k_t *p_j2k,
  * @param       p_header_size   the size of the data contained in the PLT marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_plt (  opj_j2k_t *p_j2k,
-                                    OPJ_BYTE * p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager
-                                    )
+static OPJ_BOOL opj_j2k_read_plt(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager
+                                )
 {
-        OPJ_UINT32 l_Zplt, l_tmp, l_packet_len = 0, i;
+    OPJ_UINT32 l_Zplt, l_tmp, l_packet_len = 0, i;
 
-        /* preconditions */
-        assert(p_header_data != 00);
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
+    /* preconditions */
+    assert(p_header_data != 00);
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-        if (p_header_size < 1) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading PLT marker\n");
-                return OPJ_FALSE;
-        }
+    if (p_header_size < 1) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading PLT marker\n");
+        return OPJ_FALSE;
+    }
 
-        opj_read_bytes(p_header_data,&l_Zplt,1);                /* Zplt */
-        ++p_header_data;
-        --p_header_size;
+    opj_read_bytes(p_header_data, &l_Zplt, 1);              /* Zplt */
+    ++p_header_data;
+    --p_header_size;
 
-        for (i = 0; i < p_header_size; ++i) {
-                opj_read_bytes(p_header_data,&l_tmp,1);         /* Iplt_ij */
-                ++p_header_data;
-                /* take only the last seven bytes */
-                l_packet_len |= (l_tmp & 0x7f);
-                if (l_tmp & 0x80) {
-                        l_packet_len <<= 7;
-                }
-                else {
+    for (i = 0; i < p_header_size; ++i) {
+        opj_read_bytes(p_header_data, &l_tmp, 1);       /* Iplt_ij */
+        ++p_header_data;
+        /* take only the last seven bytes */
+        l_packet_len |= (l_tmp & 0x7f);
+        if (l_tmp & 0x80) {
+            l_packet_len <<= 7;
+        } else {
             /* store packet length and proceed to next packet */
-                        l_packet_len = 0;
-                }
+            l_packet_len = 0;
         }
+    }
 
-        if (l_packet_len != 0) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading PLT marker\n");
-                return OPJ_FALSE;
-        }
+    if (l_packet_len != 0) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading PLT marker\n");
+        return OPJ_FALSE;
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 /**
@@ -3566,74 +3732,76 @@ static OPJ_BOOL opj_j2k_read_plt (  opj_j2k_t *p_j2k,
  * @param       p_manager               the user event manager.
  */
 
-static OPJ_BOOL opj_j2k_read_ppm (
-                                                                                                                                       opj_j2k_t *p_j2k,
-                                                                                                                                       OPJ_BYTE * p_header_data,
-                                                                                                                                       OPJ_UINT32 p_header_size,
-                                                                                                                                       opj_event_mgr_t * p_manager )
-{
-       opj_cp_t *l_cp = 00;
-       OPJ_UINT32 l_Z_ppm;
-       
-       /* preconditions */
-       assert(p_header_data != 00);
-       assert(p_j2k != 00);
-       assert(p_manager != 00);
-       
-       /* We need to have the Z_ppm element + 1 byte of Nppm/Ippm at minimum */
-       if (p_header_size < 2) {
-               opj_event_msg(p_manager, EVT_ERROR, "Error reading PPM marker\n");
-               return OPJ_FALSE;
-       }
-       
-       l_cp = &(p_j2k->m_cp);
-       l_cp->ppm = 1;
-       
-       opj_read_bytes(p_header_data,&l_Z_ppm,1);               /* Z_ppm */
-       ++p_header_data;
-       --p_header_size;
-       
-       /* check allocation needed */
-       if (l_cp->ppm_markers == NULL) { /* first PPM marker */
-               OPJ_UINT32 l_newCount = l_Z_ppm + 1U; /* can't overflow, l_Z_ppm is UINT8 */
-               assert(l_cp->ppm_markers_count == 0U);
-               
-               l_cp->ppm_markers = (opj_ppx *) opj_calloc(l_newCount, sizeof(opj_ppx));
-               if (l_cp->ppm_markers == NULL) {
-                       opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read PPM marker\n");
-                       return OPJ_FALSE;
-               }
-               l_cp->ppm_markers_count = l_newCount;
-       } else if (l_cp->ppm_markers_count <= l_Z_ppm) {
-               OPJ_UINT32 l_newCount = l_Z_ppm + 1U; /* can't overflow, l_Z_ppm is UINT8 */
-               opj_ppx *new_ppm_markers;
-               new_ppm_markers = (opj_ppx *) opj_realloc(l_cp->ppm_markers, l_newCount * sizeof(opj_ppx));
-               if (new_ppm_markers == NULL) {
-                       /* clean up to be done on l_cp destruction */
-                       opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read PPM marker\n");
-                       return OPJ_FALSE;
-               }
-               l_cp->ppm_markers = new_ppm_markers;
-               memset(l_cp->ppm_markers + l_cp->ppm_markers_count, 0, (l_newCount - l_cp->ppm_markers_count) * sizeof(opj_ppx));
-               l_cp->ppm_markers_count = l_newCount;
-       }
-       
-       if (l_cp->ppm_markers[l_Z_ppm].m_data != NULL) {
-               /* clean up to be done on l_cp destruction */
-               opj_event_msg(p_manager, EVT_ERROR, "Zppm %u already read\n", l_Z_ppm);
-               return OPJ_FALSE;
-       }
-       
-       l_cp->ppm_markers[l_Z_ppm].m_data = (OPJ_BYTE *) opj_malloc(p_header_size);
-       if (l_cp->ppm_markers[l_Z_ppm].m_data == NULL) {
-               /* clean up to be done on l_cp destruction */
-               opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read PPM marker\n");
-               return OPJ_FALSE;
-       }
-       l_cp->ppm_markers[l_Z_ppm].m_data_size = p_header_size;
-       memcpy(l_cp->ppm_markers[l_Z_ppm].m_data, p_header_data, p_header_size);
-
-       return OPJ_TRUE;
+static OPJ_BOOL opj_j2k_read_ppm(
+    opj_j2k_t *p_j2k,
+    OPJ_BYTE * p_header_data,
+    OPJ_UINT32 p_header_size,
+    opj_event_mgr_t * p_manager)
+{
+    opj_cp_t *l_cp = 00;
+    OPJ_UINT32 l_Z_ppm;
+
+    /* preconditions */
+    assert(p_header_data != 00);
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+
+    /* We need to have the Z_ppm element + 1 byte of Nppm/Ippm at minimum */
+    if (p_header_size < 2) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading PPM marker\n");
+        return OPJ_FALSE;
+    }
+
+    l_cp = &(p_j2k->m_cp);
+    l_cp->ppm = 1;
+
+    opj_read_bytes(p_header_data, &l_Z_ppm, 1);             /* Z_ppm */
+    ++p_header_data;
+    --p_header_size;
+
+    /* check allocation needed */
+    if (l_cp->ppm_markers == NULL) { /* first PPM marker */
+        OPJ_UINT32 l_newCount = l_Z_ppm + 1U; /* can't overflow, l_Z_ppm is UINT8 */
+        assert(l_cp->ppm_markers_count == 0U);
+
+        l_cp->ppm_markers = (opj_ppx *) opj_calloc(l_newCount, sizeof(opj_ppx));
+        if (l_cp->ppm_markers == NULL) {
+            opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read PPM marker\n");
+            return OPJ_FALSE;
+        }
+        l_cp->ppm_markers_count = l_newCount;
+    } else if (l_cp->ppm_markers_count <= l_Z_ppm) {
+        OPJ_UINT32 l_newCount = l_Z_ppm + 1U; /* can't overflow, l_Z_ppm is UINT8 */
+        opj_ppx *new_ppm_markers;
+        new_ppm_markers = (opj_ppx *) opj_realloc(l_cp->ppm_markers,
+                          l_newCount * sizeof(opj_ppx));
+        if (new_ppm_markers == NULL) {
+            /* clean up to be done on l_cp destruction */
+            opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read PPM marker\n");
+            return OPJ_FALSE;
+        }
+        l_cp->ppm_markers = new_ppm_markers;
+        memset(l_cp->ppm_markers + l_cp->ppm_markers_count, 0,
+               (l_newCount - l_cp->ppm_markers_count) * sizeof(opj_ppx));
+        l_cp->ppm_markers_count = l_newCount;
+    }
+
+    if (l_cp->ppm_markers[l_Z_ppm].m_data != NULL) {
+        /* clean up to be done on l_cp destruction */
+        opj_event_msg(p_manager, EVT_ERROR, "Zppm %u already read\n", l_Z_ppm);
+        return OPJ_FALSE;
+    }
+
+    l_cp->ppm_markers[l_Z_ppm].m_data = (OPJ_BYTE *) opj_malloc(p_header_size);
+    if (l_cp->ppm_markers[l_Z_ppm].m_data == NULL) {
+        /* clean up to be done on l_cp destruction */
+        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read PPM marker\n");
+        return OPJ_FALSE;
+    }
+    l_cp->ppm_markers[l_Z_ppm].m_data_size = p_header_size;
+    memcpy(l_cp->ppm_markers[l_Z_ppm].m_data, p_header_data, p_header_size);
+
+    return OPJ_TRUE;
 }
 
 /**
@@ -3642,135 +3810,136 @@ static OPJ_BOOL opj_j2k_read_ppm (
  * @param       p_cp      main coding parameters.
  * @param       p_manager the user event manager.
  */
-static OPJ_BOOL opj_j2k_merge_ppm ( opj_cp_t *p_cp, opj_event_mgr_t * p_manager )
-{
-       OPJ_UINT32 i, l_ppm_data_size, l_N_ppm_remaining;
-       
-       /* preconditions */
-       assert(p_cp != 00);
-       assert(p_manager != 00);
-       assert(p_cp->ppm_buffer == NULL);
-       
-       if (p_cp->ppm == 0U) {
-               return OPJ_TRUE;
-       }
-       
-       l_ppm_data_size = 0U;
-       l_N_ppm_remaining = 0U;
-       for (i = 0U; i < p_cp->ppm_markers_count; ++i) {
-               if (p_cp->ppm_markers[i].m_data != NULL) { /* standard doesn't seem to require contiguous Zppm */
-                       OPJ_UINT32 l_N_ppm;
-                       OPJ_UINT32 l_data_size = p_cp->ppm_markers[i].m_data_size;
-                       const OPJ_BYTE* l_data = p_cp->ppm_markers[i].m_data;
-                       
-                       if (l_N_ppm_remaining >= l_data_size) {
-                               l_N_ppm_remaining -= l_data_size;
-                               l_data_size = 0U;
-                       } else {
-                               l_data += l_N_ppm_remaining;
-                               l_data_size -= l_N_ppm_remaining;
-                               l_N_ppm_remaining = 0U;
-                       }
-                       
-                       if (l_data_size > 0U) {
-                               do
-                               {
-                                       /* read Nppm */
-                                       if (l_data_size < 4U) {
-                                               /* clean up to be done on l_cp destruction */
-                                               opj_event_msg(p_manager, EVT_ERROR, "Not enough bytes to read Nppm\n");
-                                               return OPJ_FALSE;
-                                       }
-                                       opj_read_bytes(l_data, &l_N_ppm, 4);
-                                       l_data+=4;
-                                       l_data_size-=4;
-                                       l_ppm_data_size += l_N_ppm; /* can't overflow, max 256 markers of max 65536 bytes, that is when PPM markers are not corrupted which is checked elsewhere */
-                                       
-                                       if (l_data_size >= l_N_ppm) {
-                                               l_data_size -= l_N_ppm;
-                                               l_data += l_N_ppm;
-                                       } else {
-                                               l_N_ppm_remaining = l_N_ppm - l_data_size;
-                                               l_data_size = 0U;
-                                       }
-                               } while (l_data_size > 0U);
-                       }
-               }
-       }
-       
-       if (l_N_ppm_remaining != 0U) {
-               /* clean up to be done on l_cp destruction */
-               opj_event_msg(p_manager, EVT_ERROR, "Corrupted PPM markers\n");
-               return OPJ_FALSE;
-       }
-       
-       p_cp->ppm_buffer = (OPJ_BYTE *) opj_malloc(l_ppm_data_size);
-       if (p_cp->ppm_buffer == 00) {
-               opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read PPM marker\n");
-               return OPJ_FALSE;
-       }
-       p_cp->ppm_len = l_ppm_data_size;
-       l_ppm_data_size = 0U;
-       l_N_ppm_remaining = 0U;
-       for (i = 0U; i < p_cp->ppm_markers_count; ++i) {
-               if (p_cp->ppm_markers[i].m_data != NULL) { /* standard doesn't seem to require contiguous Zppm */
-                       OPJ_UINT32 l_N_ppm;
-                       OPJ_UINT32 l_data_size = p_cp->ppm_markers[i].m_data_size;
-                       const OPJ_BYTE* l_data = p_cp->ppm_markers[i].m_data;
-                       
-                       if (l_N_ppm_remaining >= l_data_size) {
-                               memcpy(p_cp->ppm_buffer + l_ppm_data_size, l_data, l_data_size);
-                               l_ppm_data_size += l_data_size;
-                               l_N_ppm_remaining -= l_data_size;
-                               l_data_size = 0U;
-                       } else {
-                               memcpy(p_cp->ppm_buffer + l_ppm_data_size, l_data, l_N_ppm_remaining);
-                               l_ppm_data_size += l_N_ppm_remaining;
-                               l_data += l_N_ppm_remaining;
-                               l_data_size -= l_N_ppm_remaining;
-                               l_N_ppm_remaining = 0U;
-                       }
-
-                       if (l_data_size > 0U) {
-                               do
-                               {
-                                       /* read Nppm */
-                                       if (l_data_size < 4U) {
-                                               /* clean up to be done on l_cp destruction */
-                                               opj_event_msg(p_manager, EVT_ERROR, "Not enough bytes to read Nppm\n");
-                                               return OPJ_FALSE;
-                                       }
-                                       opj_read_bytes(l_data, &l_N_ppm, 4);
-                                       l_data+=4;
-                                       l_data_size-=4;
-                                       
-                                       if (l_data_size >= l_N_ppm) {
-                                               memcpy(p_cp->ppm_buffer + l_ppm_data_size, l_data, l_N_ppm);
-                                               l_ppm_data_size += l_N_ppm;
-                                               l_data_size -= l_N_ppm;
-                                               l_data += l_N_ppm;
-                                       } else {
-                                               memcpy(p_cp->ppm_buffer + l_ppm_data_size, l_data, l_data_size);
-                                               l_ppm_data_size += l_data_size;
-                                               l_N_ppm_remaining = l_N_ppm - l_data_size;
-                                               l_data_size = 0U;
-                                       }
-                               } while (l_data_size > 0U);
-                       }
-                       opj_free(p_cp->ppm_markers[i].m_data);
-                       p_cp->ppm_markers[i].m_data = NULL;
-                       p_cp->ppm_markers[i].m_data_size = 0U;
-               }
-       }
-       
-       p_cp->ppm_data = p_cp->ppm_buffer;
-       p_cp->ppm_data_size = p_cp->ppm_len;
-       
-       p_cp->ppm_markers_count = 0U;
-       opj_free(p_cp->ppm_markers);
-       p_cp->ppm_markers = NULL;
-       
-       return OPJ_TRUE;
+static OPJ_BOOL opj_j2k_merge_ppm(opj_cp_t *p_cp, opj_event_mgr_t * p_manager)
+{
+    OPJ_UINT32 i, l_ppm_data_size, l_N_ppm_remaining;
+
+    /* preconditions */
+    assert(p_cp != 00);
+    assert(p_manager != 00);
+    assert(p_cp->ppm_buffer == NULL);
+
+    if (p_cp->ppm == 0U) {
+        return OPJ_TRUE;
+    }
+
+    l_ppm_data_size = 0U;
+    l_N_ppm_remaining = 0U;
+    for (i = 0U; i < p_cp->ppm_markers_count; ++i) {
+        if (p_cp->ppm_markers[i].m_data !=
+                NULL) { /* standard doesn't seem to require contiguous Zppm */
+            OPJ_UINT32 l_N_ppm;
+            OPJ_UINT32 l_data_size = p_cp->ppm_markers[i].m_data_size;
+            const OPJ_BYTE* l_data = p_cp->ppm_markers[i].m_data;
+
+            if (l_N_ppm_remaining >= l_data_size) {
+                l_N_ppm_remaining -= l_data_size;
+                l_data_size = 0U;
+            } else {
+                l_data += l_N_ppm_remaining;
+                l_data_size -= l_N_ppm_remaining;
+                l_N_ppm_remaining = 0U;
+            }
+
+            if (l_data_size > 0U) {
+                do {
+                    /* read Nppm */
+                    if (l_data_size < 4U) {
+                        /* clean up to be done on l_cp destruction */
+                        opj_event_msg(p_manager, EVT_ERROR, "Not enough bytes to read Nppm\n");
+                        return OPJ_FALSE;
+                    }
+                    opj_read_bytes(l_data, &l_N_ppm, 4);
+                    l_data += 4;
+                    l_data_size -= 4;
+                    l_ppm_data_size +=
+                        l_N_ppm; /* can't overflow, max 256 markers of max 65536 bytes, that is when PPM markers are not corrupted which is checked elsewhere */
+
+                    if (l_data_size >= l_N_ppm) {
+                        l_data_size -= l_N_ppm;
+                        l_data += l_N_ppm;
+                    } else {
+                        l_N_ppm_remaining = l_N_ppm - l_data_size;
+                        l_data_size = 0U;
+                    }
+                } while (l_data_size > 0U);
+            }
+        }
+    }
+
+    if (l_N_ppm_remaining != 0U) {
+        /* clean up to be done on l_cp destruction */
+        opj_event_msg(p_manager, EVT_ERROR, "Corrupted PPM markers\n");
+        return OPJ_FALSE;
+    }
+
+    p_cp->ppm_buffer = (OPJ_BYTE *) opj_malloc(l_ppm_data_size);
+    if (p_cp->ppm_buffer == 00) {
+        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read PPM marker\n");
+        return OPJ_FALSE;
+    }
+    p_cp->ppm_len = l_ppm_data_size;
+    l_ppm_data_size = 0U;
+    l_N_ppm_remaining = 0U;
+    for (i = 0U; i < p_cp->ppm_markers_count; ++i) {
+        if (p_cp->ppm_markers[i].m_data !=
+                NULL) { /* standard doesn't seem to require contiguous Zppm */
+            OPJ_UINT32 l_N_ppm;
+            OPJ_UINT32 l_data_size = p_cp->ppm_markers[i].m_data_size;
+            const OPJ_BYTE* l_data = p_cp->ppm_markers[i].m_data;
+
+            if (l_N_ppm_remaining >= l_data_size) {
+                memcpy(p_cp->ppm_buffer + l_ppm_data_size, l_data, l_data_size);
+                l_ppm_data_size += l_data_size;
+                l_N_ppm_remaining -= l_data_size;
+                l_data_size = 0U;
+            } else {
+                memcpy(p_cp->ppm_buffer + l_ppm_data_size, l_data, l_N_ppm_remaining);
+                l_ppm_data_size += l_N_ppm_remaining;
+                l_data += l_N_ppm_remaining;
+                l_data_size -= l_N_ppm_remaining;
+                l_N_ppm_remaining = 0U;
+            }
+
+            if (l_data_size > 0U) {
+                do {
+                    /* read Nppm */
+                    if (l_data_size < 4U) {
+                        /* clean up to be done on l_cp destruction */
+                        opj_event_msg(p_manager, EVT_ERROR, "Not enough bytes to read Nppm\n");
+                        return OPJ_FALSE;
+                    }
+                    opj_read_bytes(l_data, &l_N_ppm, 4);
+                    l_data += 4;
+                    l_data_size -= 4;
+
+                    if (l_data_size >= l_N_ppm) {
+                        memcpy(p_cp->ppm_buffer + l_ppm_data_size, l_data, l_N_ppm);
+                        l_ppm_data_size += l_N_ppm;
+                        l_data_size -= l_N_ppm;
+                        l_data += l_N_ppm;
+                    } else {
+                        memcpy(p_cp->ppm_buffer + l_ppm_data_size, l_data, l_data_size);
+                        l_ppm_data_size += l_data_size;
+                        l_N_ppm_remaining = l_N_ppm - l_data_size;
+                        l_data_size = 0U;
+                    }
+                } while (l_data_size > 0U);
+            }
+            opj_free(p_cp->ppm_markers[i].m_data);
+            p_cp->ppm_markers[i].m_data = NULL;
+            p_cp->ppm_markers[i].m_data_size = 0U;
+        }
+    }
+
+    p_cp->ppm_data = p_cp->ppm_buffer;
+    p_cp->ppm_data_size = p_cp->ppm_len;
+
+    p_cp->ppm_markers_count = 0U;
+    opj_free(p_cp->ppm_markers);
+    p_cp->ppm_markers = NULL;
+
+    return OPJ_TRUE;
 }
 
 /**
@@ -3781,80 +3950,83 @@ static OPJ_BOOL opj_j2k_merge_ppm ( opj_cp_t *p_cp, opj_event_mgr_t * p_manager
  * @param       p_header_size   the size of the data contained in the PPT marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_ppt (  opj_j2k_t *p_j2k,
-                                    OPJ_BYTE * p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager
-                                    )
+static OPJ_BOOL opj_j2k_read_ppt(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager
+                                )
 {
-       opj_cp_t *l_cp = 00;
-       opj_tcp_t *l_tcp = 00;
-       OPJ_UINT32 l_Z_ppt;
-
-       /* preconditions */
-       assert(p_header_data != 00);
-       assert(p_j2k != 00);
-       assert(p_manager != 00);
-
-       /* We need to have the Z_ppt element + 1 byte of Ippt at minimum */
-       if (p_header_size < 2) {
-               opj_event_msg(p_manager, EVT_ERROR, "Error reading PPT marker\n");
-               return OPJ_FALSE;
-       }
-
-       l_cp = &(p_j2k->m_cp);
-       if (l_cp->ppm){
-               opj_event_msg(p_manager, EVT_ERROR, "Error reading PPT marker: packet header have been previously found in the main header (PPM marker).\n");
-               return OPJ_FALSE;
-       }
-
-       l_tcp = &(l_cp->tcps[p_j2k->m_current_tile_number]);
-       l_tcp->ppt = 1;
-
-       opj_read_bytes(p_header_data,&l_Z_ppt,1);               /* Z_ppt */
-       ++p_header_data;
-       --p_header_size;
-       
-       /* check allocation needed */
-       if (l_tcp->ppt_markers == NULL) { /* first PPT marker */
-               OPJ_UINT32 l_newCount = l_Z_ppt + 1U; /* can't overflow, l_Z_ppt is UINT8 */
-               assert(l_tcp->ppt_markers_count == 0U);
-               
-               l_tcp->ppt_markers = (opj_ppx *) opj_calloc(l_newCount, sizeof(opj_ppx));
-               if (l_tcp->ppt_markers == NULL) {
-                       opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read PPT marker\n");
-                       return OPJ_FALSE;
-               }
-               l_tcp->ppt_markers_count = l_newCount;
-       } else if (l_tcp->ppt_markers_count <= l_Z_ppt) {
-               OPJ_UINT32 l_newCount = l_Z_ppt + 1U; /* can't overflow, l_Z_ppt is UINT8 */
-               opj_ppx *new_ppt_markers;
-               new_ppt_markers = (opj_ppx *) opj_realloc(l_tcp->ppt_markers, l_newCount * sizeof(opj_ppx));
-               if (new_ppt_markers == NULL) {
-                       /* clean up to be done on l_tcp destruction */
-                       opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read PPT marker\n");
-                       return OPJ_FALSE;
-               }
-               l_tcp->ppt_markers = new_ppt_markers;
-               memset(l_tcp->ppt_markers + l_tcp->ppt_markers_count, 0, (l_newCount - l_tcp->ppt_markers_count) * sizeof(opj_ppx));
-               l_tcp->ppt_markers_count = l_newCount;
-       }
-       
-       if (l_tcp->ppt_markers[l_Z_ppt].m_data != NULL) {
-               /* clean up to be done on l_tcp destruction */
-               opj_event_msg(p_manager, EVT_ERROR, "Zppt %u already read\n", l_Z_ppt);
-               return OPJ_FALSE;
-       }
-       
-       l_tcp->ppt_markers[l_Z_ppt].m_data = (OPJ_BYTE *) opj_malloc(p_header_size);
-       if (l_tcp->ppt_markers[l_Z_ppt].m_data == NULL) {
-               /* clean up to be done on l_tcp destruction */
-               opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read PPT marker\n");
-               return OPJ_FALSE;
-       }
-       l_tcp->ppt_markers[l_Z_ppt].m_data_size = p_header_size;
-       memcpy(l_tcp->ppt_markers[l_Z_ppt].m_data, p_header_data, p_header_size);
-       return OPJ_TRUE;
+    opj_cp_t *l_cp = 00;
+    opj_tcp_t *l_tcp = 00;
+    OPJ_UINT32 l_Z_ppt;
+
+    /* preconditions */
+    assert(p_header_data != 00);
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+
+    /* We need to have the Z_ppt element + 1 byte of Ippt at minimum */
+    if (p_header_size < 2) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading PPT marker\n");
+        return OPJ_FALSE;
+    }
+
+    l_cp = &(p_j2k->m_cp);
+    if (l_cp->ppm) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Error reading PPT marker: packet header have been previously found in the main header (PPM marker).\n");
+        return OPJ_FALSE;
+    }
+
+    l_tcp = &(l_cp->tcps[p_j2k->m_current_tile_number]);
+    l_tcp->ppt = 1;
+
+    opj_read_bytes(p_header_data, &l_Z_ppt, 1);             /* Z_ppt */
+    ++p_header_data;
+    --p_header_size;
+
+    /* check allocation needed */
+    if (l_tcp->ppt_markers == NULL) { /* first PPT marker */
+        OPJ_UINT32 l_newCount = l_Z_ppt + 1U; /* can't overflow, l_Z_ppt is UINT8 */
+        assert(l_tcp->ppt_markers_count == 0U);
+
+        l_tcp->ppt_markers = (opj_ppx *) opj_calloc(l_newCount, sizeof(opj_ppx));
+        if (l_tcp->ppt_markers == NULL) {
+            opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read PPT marker\n");
+            return OPJ_FALSE;
+        }
+        l_tcp->ppt_markers_count = l_newCount;
+    } else if (l_tcp->ppt_markers_count <= l_Z_ppt) {
+        OPJ_UINT32 l_newCount = l_Z_ppt + 1U; /* can't overflow, l_Z_ppt is UINT8 */
+        opj_ppx *new_ppt_markers;
+        new_ppt_markers = (opj_ppx *) opj_realloc(l_tcp->ppt_markers,
+                          l_newCount * sizeof(opj_ppx));
+        if (new_ppt_markers == NULL) {
+            /* clean up to be done on l_tcp destruction */
+            opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read PPT marker\n");
+            return OPJ_FALSE;
+        }
+        l_tcp->ppt_markers = new_ppt_markers;
+        memset(l_tcp->ppt_markers + l_tcp->ppt_markers_count, 0,
+               (l_newCount - l_tcp->ppt_markers_count) * sizeof(opj_ppx));
+        l_tcp->ppt_markers_count = l_newCount;
+    }
+
+    if (l_tcp->ppt_markers[l_Z_ppt].m_data != NULL) {
+        /* clean up to be done on l_tcp destruction */
+        opj_event_msg(p_manager, EVT_ERROR, "Zppt %u already read\n", l_Z_ppt);
+        return OPJ_FALSE;
+    }
+
+    l_tcp->ppt_markers[l_Z_ppt].m_data = (OPJ_BYTE *) opj_malloc(p_header_size);
+    if (l_tcp->ppt_markers[l_Z_ppt].m_data == NULL) {
+        /* clean up to be done on l_tcp destruction */
+        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read PPT marker\n");
+        return OPJ_FALSE;
+    }
+    l_tcp->ppt_markers[l_Z_ppt].m_data_size = p_header_size;
+    memcpy(l_tcp->ppt_markers[l_Z_ppt].m_data, p_header_data, p_header_size);
+    return OPJ_TRUE;
 }
 
 /**
@@ -3865,713 +4037,767 @@ static OPJ_BOOL opj_j2k_read_ppt (  opj_j2k_t *p_j2k,
  */
 static OPJ_BOOL opj_j2k_merge_ppt(opj_tcp_t *p_tcp, opj_event_mgr_t * p_manager)
 {
-       OPJ_UINT32 i, l_ppt_data_size;
-       /* preconditions */
-       assert(p_tcp != 00);
-       assert(p_manager != 00);
-       assert(p_tcp->ppt_buffer == NULL);
-       
-       if (p_tcp->ppt == 0U) {
-               return OPJ_TRUE;
-       }
-       
-       l_ppt_data_size = 0U;
-       for (i = 0U; i < p_tcp->ppt_markers_count; ++i) {
-               l_ppt_data_size += p_tcp->ppt_markers[i].m_data_size; /* can't overflow, max 256 markers of max 65536 bytes */
-       }
-       
-       p_tcp->ppt_buffer = (OPJ_BYTE *) opj_malloc(l_ppt_data_size);
-       if (p_tcp->ppt_buffer == 00) {
-               opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read PPT marker\n");
-               return OPJ_FALSE;
-       }
-       p_tcp->ppt_len = l_ppt_data_size;
-       l_ppt_data_size = 0U;
-       for (i = 0U; i < p_tcp->ppt_markers_count; ++i) {
-               if (p_tcp->ppt_markers[i].m_data != NULL) { /* standard doesn't seem to require contiguous Zppt */
-                       memcpy(p_tcp->ppt_buffer + l_ppt_data_size, p_tcp->ppt_markers[i].m_data, p_tcp->ppt_markers[i].m_data_size);
-                       l_ppt_data_size += p_tcp->ppt_markers[i].m_data_size; /* can't overflow, max 256 markers of max 65536 bytes */
-                       
-                       opj_free(p_tcp->ppt_markers[i].m_data);
-                       p_tcp->ppt_markers[i].m_data = NULL;
-                       p_tcp->ppt_markers[i].m_data_size = 0U;
-               }
-       }
-       
-       p_tcp->ppt_markers_count = 0U;
-       opj_free(p_tcp->ppt_markers);
-       p_tcp->ppt_markers = NULL;
-       
-       p_tcp->ppt_data = p_tcp->ppt_buffer;
-       p_tcp->ppt_data_size = p_tcp->ppt_len;
-       return OPJ_TRUE;
-}
-
-static OPJ_BOOL opj_j2k_write_tlm(     opj_j2k_t *p_j2k,
-                                                        opj_stream_private_t *p_stream,
-                                                        opj_event_mgr_t * p_manager
-                            )
-{
-        OPJ_BYTE * l_current_data = 00;
-        OPJ_UINT32 l_tlm_size;
-
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
-
-        l_tlm_size = 6 + (5*p_j2k->m_specific_param.m_encoder.m_total_tile_parts);
-
-        if (l_tlm_size > p_j2k->m_specific_param.m_encoder.m_header_tile_data_size) {
-                OPJ_BYTE *new_header_tile_data = (OPJ_BYTE *) opj_realloc(p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_tlm_size);
-                if (! new_header_tile_data) {
-                        opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data = NULL;
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
-                        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to write TLM marker\n");
-                        return OPJ_FALSE;
-                }
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data;
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_tlm_size;
-        }
+    OPJ_UINT32 i, l_ppt_data_size;
+    /* preconditions */
+    assert(p_tcp != 00);
+    assert(p_manager != 00);
+    assert(p_tcp->ppt_buffer == NULL);
 
-        l_current_data = p_j2k->m_specific_param.m_encoder.m_header_tile_data;
+    if (p_tcp->ppt == 0U) {
+        return OPJ_TRUE;
+    }
 
-        /* change the way data is written to avoid seeking if possible */
-        /* TODO */
-        p_j2k->m_specific_param.m_encoder.m_tlm_start = opj_stream_tell(p_stream);
+    l_ppt_data_size = 0U;
+    for (i = 0U; i < p_tcp->ppt_markers_count; ++i) {
+        l_ppt_data_size +=
+            p_tcp->ppt_markers[i].m_data_size; /* can't overflow, max 256 markers of max 65536 bytes */
+    }
 
-        opj_write_bytes(l_current_data,J2K_MS_TLM,2);                                   /* TLM */
-        l_current_data += 2;
+    p_tcp->ppt_buffer = (OPJ_BYTE *) opj_malloc(l_ppt_data_size);
+    if (p_tcp->ppt_buffer == 00) {
+        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read PPT marker\n");
+        return OPJ_FALSE;
+    }
+    p_tcp->ppt_len = l_ppt_data_size;
+    l_ppt_data_size = 0U;
+    for (i = 0U; i < p_tcp->ppt_markers_count; ++i) {
+        if (p_tcp->ppt_markers[i].m_data !=
+                NULL) { /* standard doesn't seem to require contiguous Zppt */
+            memcpy(p_tcp->ppt_buffer + l_ppt_data_size, p_tcp->ppt_markers[i].m_data,
+                   p_tcp->ppt_markers[i].m_data_size);
+            l_ppt_data_size +=
+                p_tcp->ppt_markers[i].m_data_size; /* can't overflow, max 256 markers of max 65536 bytes */
+
+            opj_free(p_tcp->ppt_markers[i].m_data);
+            p_tcp->ppt_markers[i].m_data = NULL;
+            p_tcp->ppt_markers[i].m_data_size = 0U;
+        }
+    }
 
-        opj_write_bytes(l_current_data,l_tlm_size-2,2);                                 /* Lpoc */
-        l_current_data += 2;
+    p_tcp->ppt_markers_count = 0U;
+    opj_free(p_tcp->ppt_markers);
+    p_tcp->ppt_markers = NULL;
 
-        opj_write_bytes(l_current_data,0,1);                                                    /* Ztlm=0*/
-        ++l_current_data;
+    p_tcp->ppt_data = p_tcp->ppt_buffer;
+    p_tcp->ppt_data_size = p_tcp->ppt_len;
+    return OPJ_TRUE;
+}
 
-        opj_write_bytes(l_current_data,0x50,1);                                                 /* Stlm ST=1(8bits-255 tiles max),SP=1(Ptlm=32bits) */
-        ++l_current_data;
+static OPJ_BOOL opj_j2k_write_tlm(opj_j2k_t *p_j2k,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager
+                                 )
+{
+    OPJ_BYTE * l_current_data = 00;
+    OPJ_UINT32 l_tlm_size;
 
-        /* do nothing on the 5 * l_j2k->m_specific_param.m_encoder.m_total_tile_parts remaining data */
-        if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_header_tile_data,l_tlm_size,p_manager) != l_tlm_size) {
-                return OPJ_FALSE;
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
+
+    l_tlm_size = 6 + (5 * p_j2k->m_specific_param.m_encoder.m_total_tile_parts);
+
+    if (l_tlm_size > p_j2k->m_specific_param.m_encoder.m_header_tile_data_size) {
+        OPJ_BYTE *new_header_tile_data = (OPJ_BYTE *) opj_realloc(
+                                             p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_tlm_size);
+        if (! new_header_tile_data) {
+            opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data = NULL;
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
+            opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to write TLM marker\n");
+            return OPJ_FALSE;
         }
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data;
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_tlm_size;
+    }
 
-        return OPJ_TRUE;
+    l_current_data = p_j2k->m_specific_param.m_encoder.m_header_tile_data;
+
+    /* change the way data is written to avoid seeking if possible */
+    /* TODO */
+    p_j2k->m_specific_param.m_encoder.m_tlm_start = opj_stream_tell(p_stream);
+
+    opj_write_bytes(l_current_data, J2K_MS_TLM,
+                    2);                                   /* TLM */
+    l_current_data += 2;
+
+    opj_write_bytes(l_current_data, l_tlm_size - 2,
+                    2);                                 /* Lpoc */
+    l_current_data += 2;
+
+    opj_write_bytes(l_current_data, 0,
+                    1);                                                    /* Ztlm=0*/
+    ++l_current_data;
+
+    opj_write_bytes(l_current_data, 0x50,
+                    1);                                                 /* Stlm ST=1(8bits-255 tiles max),SP=1(Ptlm=32bits) */
+    ++l_current_data;
+
+    /* do nothing on the 5 * l_j2k->m_specific_param.m_encoder.m_total_tile_parts remaining data */
+    if (opj_stream_write_data(p_stream,
+                              p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_tlm_size,
+                              p_manager) != l_tlm_size) {
+        return OPJ_FALSE;
+    }
+
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_write_sot(     opj_j2k_t *p_j2k,
-                                                        OPJ_BYTE * p_data,
-                                                        OPJ_UINT32 * p_data_written,
-                                                        const opj_stream_private_t *p_stream,
-                                                        opj_event_mgr_t * p_manager
-                            )
+static OPJ_BOOL opj_j2k_write_sot(opj_j2k_t *p_j2k,
+                                  OPJ_BYTE * p_data,
+                                  OPJ_UINT32 * p_data_written,
+                                  const opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager
+                                 )
 {
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
 
-        opj_write_bytes(p_data,J2K_MS_SOT,2);                                   /* SOT */
-        p_data += 2;
+    opj_write_bytes(p_data, J2K_MS_SOT,
+                    2);                                 /* SOT */
+    p_data += 2;
 
-        opj_write_bytes(p_data,10,2);                                                   /* Lsot */
-        p_data += 2;
+    opj_write_bytes(p_data, 10,
+                    2);                                                   /* Lsot */
+    p_data += 2;
 
-        opj_write_bytes(p_data, p_j2k->m_current_tile_number,2);                        /* Isot */
-        p_data += 2;
+    opj_write_bytes(p_data, p_j2k->m_current_tile_number,
+                    2);                        /* Isot */
+    p_data += 2;
 
-        /* Psot  */
-        p_data += 4;
+    /* Psot  */
+    p_data += 4;
 
-        opj_write_bytes(p_data, p_j2k->m_specific_param.m_encoder.m_current_tile_part_number,1);                        /* TPsot */
-        ++p_data;
+    opj_write_bytes(p_data,
+                    p_j2k->m_specific_param.m_encoder.m_current_tile_part_number,
+                    1);                        /* TPsot */
+    ++p_data;
 
-        opj_write_bytes(p_data, p_j2k->m_cp.tcps[p_j2k->m_current_tile_number].m_nb_tile_parts,1);                      /* TNsot */
-        ++p_data;
+    opj_write_bytes(p_data,
+                    p_j2k->m_cp.tcps[p_j2k->m_current_tile_number].m_nb_tile_parts,
+                    1);                      /* TNsot */
+    ++p_data;
 
-        /* UniPG>> */
+    /* UniPG>> */
 #ifdef USE_JPWL
-        /* update markers struct */
-/*
-        OPJ_BOOL res = j2k_add_marker(p_j2k->cstr_info, J2K_MS_SOT, p_j2k->sot_start, len + 2);
-*/
-  assert( 0 && "TODO" );
+    /* update markers struct */
+    /*
+            OPJ_BOOL res = j2k_add_marker(p_j2k->cstr_info, J2K_MS_SOT, p_j2k->sot_start, len + 2);
+    */
+    assert(0 && "TODO");
 #endif /* USE_JPWL */
 
-        * p_data_written = 12;
+    * p_data_written = 12;
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 static OPJ_BOOL opj_j2k_get_sot_values(OPJ_BYTE *  p_header_data,
-                                                                                                                                                        OPJ_UINT32  p_header_size,
-                                                                                                                                                        OPJ_UINT32* p_tile_no,
-                                                                                                                                                        OPJ_UINT32* p_tot_len,
-                                                                                                                                                        OPJ_UINT32* p_current_part,
-                                                                                                                                                        OPJ_UINT32* p_num_parts,
-                                                                                                                                                        opj_event_mgr_t * p_manager )
-{
-       /* preconditions */
-       assert(p_header_data != 00);
-       assert(p_manager != 00);
-       
-       /* Size of this marker is fixed = 12 (we have already read marker and its size)*/
-       if (p_header_size != 8) {
-               opj_event_msg(p_manager, EVT_ERROR, "Error reading SOT marker\n");
-               return OPJ_FALSE;
-       }
-       
-       opj_read_bytes(p_header_data,p_tile_no,2);      /* Isot */
-       p_header_data+=2;
-       opj_read_bytes(p_header_data,p_tot_len,4);      /* Psot */
-       p_header_data+=4;
-       opj_read_bytes(p_header_data,p_current_part,1); /* TPsot */
-       ++p_header_data;
-       opj_read_bytes(p_header_data,p_num_parts ,1);   /* TNsot */
-       ++p_header_data;
-       return OPJ_TRUE;
-}
-
-static OPJ_BOOL opj_j2k_read_sot ( opj_j2k_t *p_j2k,
-                            OPJ_BYTE * p_header_data,
-                            OPJ_UINT32 p_header_size,
-                            opj_event_mgr_t * p_manager )
-{
-        opj_cp_t *l_cp = 00;
-        opj_tcp_t *l_tcp = 00;
-        OPJ_UINT32 l_tot_len, l_num_parts = 0;
-        OPJ_UINT32 l_current_part;
-        OPJ_UINT32 l_tile_x,l_tile_y;
-
-        /* preconditions */
-       
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-       
-        if (! opj_j2k_get_sot_values(p_header_data, p_header_size, &(p_j2k->m_current_tile_number), &l_tot_len, &l_current_part, &l_num_parts, p_manager)) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading SOT marker\n");
-                return OPJ_FALSE;
-        }
+                                       OPJ_UINT32  p_header_size,
+                                       OPJ_UINT32* p_tile_no,
+                                       OPJ_UINT32* p_tot_len,
+                                       OPJ_UINT32* p_current_part,
+                                       OPJ_UINT32* p_num_parts,
+                                       opj_event_mgr_t * p_manager)
+{
+    /* preconditions */
+    assert(p_header_data != 00);
+    assert(p_manager != 00);
+
+    /* Size of this marker is fixed = 12 (we have already read marker and its size)*/
+    if (p_header_size != 8) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading SOT marker\n");
+        return OPJ_FALSE;
+    }
 
-        l_cp = &(p_j2k->m_cp);
+    opj_read_bytes(p_header_data, p_tile_no, 2);    /* Isot */
+    p_header_data += 2;
+    opj_read_bytes(p_header_data, p_tot_len, 4);    /* Psot */
+    p_header_data += 4;
+    opj_read_bytes(p_header_data, p_current_part, 1); /* TPsot */
+    ++p_header_data;
+    opj_read_bytes(p_header_data, p_num_parts, 1);  /* TNsot */
+    ++p_header_data;
+    return OPJ_TRUE;
+}
 
-        /* testcase 2.pdf.SIGFPE.706.1112 */
-        if (p_j2k->m_current_tile_number >= l_cp->tw * l_cp->th) {
-                opj_event_msg(p_manager, EVT_ERROR, "Invalid tile number %d\n", p_j2k->m_current_tile_number);
-                return OPJ_FALSE;
-        }
+static OPJ_BOOL opj_j2k_read_sot(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager)
+{
+    opj_cp_t *l_cp = 00;
+    opj_tcp_t *l_tcp = 00;
+    OPJ_UINT32 l_tot_len, l_num_parts = 0;
+    OPJ_UINT32 l_current_part;
+    OPJ_UINT32 l_tile_x, l_tile_y;
 
-        l_tcp = &l_cp->tcps[p_j2k->m_current_tile_number];
-        l_tile_x = p_j2k->m_current_tile_number % l_cp->tw;
-        l_tile_y = p_j2k->m_current_tile_number / l_cp->tw;
+    /* preconditions */
 
-#ifdef USE_JPWL
-        if (l_cp->correct) {
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-                OPJ_UINT32 tileno = p_j2k->m_current_tile_number;
-                static OPJ_UINT32 backup_tileno = 0;
+    if (! opj_j2k_get_sot_values(p_header_data, p_header_size,
+                                 &(p_j2k->m_current_tile_number), &l_tot_len, &l_current_part, &l_num_parts,
+                                 p_manager)) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading SOT marker\n");
+        return OPJ_FALSE;
+    }
 
-                /* tileno is negative or larger than the number of tiles!!! */
-                if (tileno > (l_cp->tw * l_cp->th)) {
-                        opj_event_msg(p_manager, EVT_ERROR,
-                                        "JPWL: bad tile number (%d out of a maximum of %d)\n",
-                                        tileno, (l_cp->tw * l_cp->th));
-                        if (!JPWL_ASSUME) {
-                                opj_event_msg(p_manager, EVT_ERROR, "JPWL: giving up\n");
-                                return OPJ_FALSE;
-                        }
-                        /* we try to correct */
-                        tileno = backup_tileno;
-                        opj_event_msg(p_manager, EVT_WARNING, "- trying to adjust this\n"
-                                        "- setting tile number to %d\n",
-                                        tileno);
-                }
+    l_cp = &(p_j2k->m_cp);
 
-                /* keep your private count of tiles */
-                backup_tileno++;
-        };
-#endif /* USE_JPWL */
+    /* testcase 2.pdf.SIGFPE.706.1112 */
+    if (p_j2k->m_current_tile_number >= l_cp->tw * l_cp->th) {
+        opj_event_msg(p_manager, EVT_ERROR, "Invalid tile number %d\n",
+                      p_j2k->m_current_tile_number);
+        return OPJ_FALSE;
+    }
 
-        /* look for the tile in the list of already processed tile (in parts). */
-        /* Optimization possible here with a more complex data structure and with the removing of tiles */
-        /* since the time taken by this function can only grow at the time */
+    l_tcp = &l_cp->tcps[p_j2k->m_current_tile_number];
+    l_tile_x = p_j2k->m_current_tile_number % l_cp->tw;
+    l_tile_y = p_j2k->m_current_tile_number / l_cp->tw;
 
-        /* PSot should be equal to zero or >=14 or <= 2^32-1 */
-        if ((l_tot_len !=0 ) && (l_tot_len < 14) )
-        {
-            if (l_tot_len == 12 ) /* MSD: Special case for the PHR data which are read by kakadu*/
-            {
-                opj_event_msg(p_manager, EVT_WARNING, "Empty SOT marker detected: Psot=%d.\n", l_tot_len);
-            }
-            else
-            {
-                opj_event_msg(p_manager, EVT_ERROR, "Psot value is not correct regards to the JPEG2000 norm: %d.\n", l_tot_len);
+#ifdef USE_JPWL
+    if (l_cp->correct) {
+
+        OPJ_UINT32 tileno = p_j2k->m_current_tile_number;
+        static OPJ_UINT32 backup_tileno = 0;
+
+        /* tileno is negative or larger than the number of tiles!!! */
+        if (tileno > (l_cp->tw * l_cp->th)) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "JPWL: bad tile number (%d out of a maximum of %d)\n",
+                          tileno, (l_cp->tw * l_cp->th));
+            if (!JPWL_ASSUME) {
+                opj_event_msg(p_manager, EVT_ERROR, "JPWL: giving up\n");
                 return OPJ_FALSE;
             }
+            /* we try to correct */
+            tileno = backup_tileno;
+            opj_event_msg(p_manager, EVT_WARNING, "- trying to adjust this\n"
+                          "- setting tile number to %d\n",
+                          tileno);
         }
 
-#ifdef USE_JPWL
-        if (l_cp->correct) {
-
-                /* totlen is negative or larger than the bytes left!!! */
-                if (/*(l_tot_len < 0) ||*/ (l_tot_len > p_header_size ) ) { /* FIXME it seems correct; for info in V1 -> (p_stream_numbytesleft(p_stream) + 8))) { */
-                        opj_event_msg(p_manager, EVT_ERROR,
-                                        "JPWL: bad tile byte size (%d bytes against %d bytes left)\n",
-                                        l_tot_len, p_header_size ); /* FIXME it seems correct; for info in V1 -> p_stream_numbytesleft(p_stream) + 8); */
-                        if (!JPWL_ASSUME) {
-                                opj_event_msg(p_manager, EVT_ERROR, "JPWL: giving up\n");
-                                return OPJ_FALSE;
-                        }
-                        /* we try to correct */
-                        l_tot_len = 0;
-                        opj_event_msg(p_manager, EVT_WARNING, "- trying to adjust this\n"
-                                        "- setting Psot to %d => assuming it is the last tile\n",
-                                        l_tot_len);
-                }
-                };
+        /* keep your private count of tiles */
+        backup_tileno++;
+    };
 #endif /* USE_JPWL */
 
-                /* Ref A.4.2: Psot could be equal zero if it is the last tile-part of the codestream.*/
-                if (!l_tot_len) {
-                        opj_event_msg(p_manager, EVT_INFO, "Psot value of the current tile-part is equal to zero, "
-                                        "we assuming it is the last tile-part of the codestream.\n");
-                        p_j2k->m_specific_param.m_decoder.m_last_tile_part = 1;
-                }
-
-                if (l_num_parts != 0) { /* Number of tile-part header is provided by this tile-part header */
-                        l_num_parts += p_j2k->m_specific_param.m_decoder.m_nb_tile_parts_correction;
-                        /* Useful to manage the case of textGBR.jp2 file because two values of TNSot are allowed: the correct numbers of
-                         * tile-parts for that tile and zero (A.4.2 of 15444-1 : 2002). */
-                        if (l_tcp->m_nb_tile_parts) {
-                                if (l_current_part >= l_tcp->m_nb_tile_parts){
-                                        opj_event_msg(p_manager, EVT_ERROR, "In SOT marker, TPSot (%d) is not valid regards to the current "
-                                                        "number of tile-part (%d), giving up\n", l_current_part, l_tcp->m_nb_tile_parts );
-                                        p_j2k->m_specific_param.m_decoder.m_last_tile_part = 1;
-                                        return OPJ_FALSE;
-                                }
-                        }
-                        if( l_current_part >= l_num_parts ) {
-                          /* testcase 451.pdf.SIGSEGV.ce9.3723 */
-                          opj_event_msg(p_manager, EVT_ERROR, "In SOT marker, TPSot (%d) is not valid regards to the current "
-                            "number of tile-part (header) (%d), giving up\n", l_current_part, l_num_parts );
-                          p_j2k->m_specific_param.m_decoder.m_last_tile_part = 1;
-                          return OPJ_FALSE;
-                        }
-                        l_tcp->m_nb_tile_parts = l_num_parts;
-                }
+    /* look for the tile in the list of already processed tile (in parts). */
+    /* Optimization possible here with a more complex data structure and with the removing of tiles */
+    /* since the time taken by this function can only grow at the time */
 
-                /* If know the number of tile part header we will check if we didn't read the last*/
-                if (l_tcp->m_nb_tile_parts) {
-                        if (l_tcp->m_nb_tile_parts == (l_current_part+1)) {
-                                p_j2k->m_specific_param.m_decoder.m_can_decode = 1; /* Process the last tile-part header*/
-                        }
-                }
+    /* PSot should be equal to zero or >=14 or <= 2^32-1 */
+    if ((l_tot_len != 0) && (l_tot_len < 14)) {
+        if (l_tot_len ==
+                12) { /* MSD: Special case for the PHR data which are read by kakadu*/
+            opj_event_msg(p_manager, EVT_WARNING, "Empty SOT marker detected: Psot=%d.\n",
+                          l_tot_len);
+        } else {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Psot value is not correct regards to the JPEG2000 norm: %d.\n", l_tot_len);
+            return OPJ_FALSE;
+        }
+    }
 
-                if (!p_j2k->m_specific_param.m_decoder.m_last_tile_part){
-                        /* Keep the size of data to skip after this marker */
-                        p_j2k->m_specific_param.m_decoder.m_sot_length = l_tot_len - 12; /* SOT_marker_size = 12 */
-                }
-                else {
-                        /* FIXME: need to be computed from the number of bytes remaining in the codestream */
-                        p_j2k->m_specific_param.m_decoder.m_sot_length = 0;
-                }
+#ifdef USE_JPWL
+    if (l_cp->correct) {
+
+        /* totlen is negative or larger than the bytes left!!! */
+        if (/*(l_tot_len < 0) ||*/ (l_tot_len >
+                                    p_header_size)) {   /* FIXME it seems correct; for info in V1 -> (p_stream_numbytesleft(p_stream) + 8))) { */
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "JPWL: bad tile byte size (%d bytes against %d bytes left)\n",
+                          l_tot_len,
+                          p_header_size);  /* FIXME it seems correct; for info in V1 -> p_stream_numbytesleft(p_stream) + 8); */
+            if (!JPWL_ASSUME) {
+                opj_event_msg(p_manager, EVT_ERROR, "JPWL: giving up\n");
+                return OPJ_FALSE;
+            }
+            /* we try to correct */
+            l_tot_len = 0;
+            opj_event_msg(p_manager, EVT_WARNING, "- trying to adjust this\n"
+                          "- setting Psot to %d => assuming it is the last tile\n",
+                          l_tot_len);
+        }
+    };
+#endif /* USE_JPWL */
 
-                p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_TPH;
+    /* Ref A.4.2: Psot could be equal zero if it is the last tile-part of the codestream.*/
+    if (!l_tot_len) {
+        opj_event_msg(p_manager, EVT_INFO,
+                      "Psot value of the current tile-part is equal to zero, "
+                      "we assuming it is the last tile-part of the codestream.\n");
+        p_j2k->m_specific_param.m_decoder.m_last_tile_part = 1;
+    }
 
-                /* Check if the current tile is outside the area we want decode or not corresponding to the tile index*/
-                if (p_j2k->m_specific_param.m_decoder.m_tile_ind_to_dec == -1) {
-                        p_j2k->m_specific_param.m_decoder.m_skip_data =
-                                (l_tile_x < p_j2k->m_specific_param.m_decoder.m_start_tile_x)
-                                ||      (l_tile_x >= p_j2k->m_specific_param.m_decoder.m_end_tile_x)
-                                ||  (l_tile_y < p_j2k->m_specific_param.m_decoder.m_start_tile_y)
-                                ||      (l_tile_y >= p_j2k->m_specific_param.m_decoder.m_end_tile_y);
-                }
-                else {
-                        assert( p_j2k->m_specific_param.m_decoder.m_tile_ind_to_dec >= 0 );
-                        p_j2k->m_specific_param.m_decoder.m_skip_data =
-                                (p_j2k->m_current_tile_number != (OPJ_UINT32)p_j2k->m_specific_param.m_decoder.m_tile_ind_to_dec);
-                }
-
-                /* Index */
-                if (p_j2k->cstr_index)
-                {
-                        assert(p_j2k->cstr_index->tile_index != 00);
-                        p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tileno = p_j2k->m_current_tile_number;
-                        p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].current_tpsno = l_current_part;
-
-                        if (l_num_parts != 0){
-                                p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].nb_tps = l_num_parts;
-                                p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].current_nb_tps = l_num_parts;
-
-                                if (!p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index) {
-                                        p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index =
-                                                (opj_tp_index_t*)opj_calloc(l_num_parts, sizeof(opj_tp_index_t));
-                                        if (!p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index) {
-                                                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read SOT marker. Tile index allocation failed\n");
-                                                return OPJ_FALSE;
-                                                                                                                                                               }
-                                }
-                                else {
-                                        opj_tp_index_t *new_tp_index = (opj_tp_index_t *) opj_realloc(
-                                                        p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index, l_num_parts* sizeof(opj_tp_index_t));
-                                        if (! new_tp_index) {
-                                                opj_free(p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index);
-                                                p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index = NULL;
-                                                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read SOT marker. Tile index allocation failed\n");
-                                                return OPJ_FALSE;
-                                        }
-                                        p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index = new_tp_index;
-                                }
-                        }
-                        else{
-                                /*if (!p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index)*/ {
-
-                                        if (!p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index) {
-                                                p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].current_nb_tps = 10;
-                                                p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index =
-                                                        (opj_tp_index_t*)opj_calloc( p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].current_nb_tps,
-                                                                        sizeof(opj_tp_index_t));
-                                                                                                                                                                                               if (!p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index) {
-                                                        p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].current_nb_tps = 0;
-                                                        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read SOT marker. Tile index allocation failed\n");
-                                                        return OPJ_FALSE;
-                                                                                                                                                                       }
-                                        }
-
-                                        if ( l_current_part >= p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].current_nb_tps ){
-                                                opj_tp_index_t *new_tp_index;
-                                                p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].current_nb_tps = l_current_part + 1;
-                                                new_tp_index = (opj_tp_index_t *) opj_realloc(
-                                                                p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index,
-                                                                p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].current_nb_tps * sizeof(opj_tp_index_t));
-                                                if (! new_tp_index) {
-                                                        opj_free(p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index);
-                                                        p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index = NULL;
-                                                        p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].current_nb_tps = 0;
-                                                        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read SOT marker. Tile index allocation failed\n");
-                                                        return OPJ_FALSE;
-                                                }
-                                                p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index = new_tp_index;
-                                        }
-                                }
-
-                        }
-
-                }
-
-                /* FIXME move this onto a separate method to call before reading any SOT, remove part about main_end header, use a index struct inside p_j2k */
-                /* if (p_j2k->cstr_info) {
-                   if (l_tcp->first) {
-                   if (tileno == 0) {
-                   p_j2k->cstr_info->main_head_end = p_stream_tell(p_stream) - 13;
-                   }
-
-                   p_j2k->cstr_info->tile[tileno].tileno = tileno;
-                   p_j2k->cstr_info->tile[tileno].start_pos = p_stream_tell(p_stream) - 12;
-                   p_j2k->cstr_info->tile[tileno].end_pos = p_j2k->cstr_info->tile[tileno].start_pos + totlen - 1;
-                   p_j2k->cstr_info->tile[tileno].num_tps = numparts;
-
-                   if (numparts) {
-                   p_j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_malloc(numparts * sizeof(opj_tp_info_t));
-                   }
-                   else {
-                   p_j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_malloc(10 * sizeof(opj_tp_info_t)); // Fixme (10)
-                   }
-                   }
-                   else {
-                   p_j2k->cstr_info->tile[tileno].end_pos += totlen;
-                   }
-
-                   p_j2k->cstr_info->tile[tileno].tp[partno].tp_start_pos = p_stream_tell(p_stream) - 12;
-                   p_j2k->cstr_info->tile[tileno].tp[partno].tp_end_pos =
-                   p_j2k->cstr_info->tile[tileno].tp[partno].tp_start_pos + totlen - 1;
-                   }*/
-                return OPJ_TRUE;
+    if (l_num_parts !=
+            0) { /* Number of tile-part header is provided by this tile-part header */
+        l_num_parts += p_j2k->m_specific_param.m_decoder.m_nb_tile_parts_correction;
+        /* Useful to manage the case of textGBR.jp2 file because two values of TNSot are allowed: the correct numbers of
+         * tile-parts for that tile and zero (A.4.2 of 15444-1 : 2002). */
+        if (l_tcp->m_nb_tile_parts) {
+            if (l_current_part >= l_tcp->m_nb_tile_parts) {
+                opj_event_msg(p_manager, EVT_ERROR,
+                              "In SOT marker, TPSot (%d) is not valid regards to the current "
+                              "number of tile-part (%d), giving up\n", l_current_part,
+                              l_tcp->m_nb_tile_parts);
+                p_j2k->m_specific_param.m_decoder.m_last_tile_part = 1;
+                return OPJ_FALSE;
+            }
         }
+        if (l_current_part >= l_num_parts) {
+            /* testcase 451.pdf.SIGSEGV.ce9.3723 */
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "In SOT marker, TPSot (%d) is not valid regards to the current "
+                          "number of tile-part (header) (%d), giving up\n", l_current_part, l_num_parts);
+            p_j2k->m_specific_param.m_decoder.m_last_tile_part = 1;
+            return OPJ_FALSE;
+        }
+        l_tcp->m_nb_tile_parts = l_num_parts;
+    }
 
-static OPJ_BOOL opj_j2k_write_sod(     opj_j2k_t *p_j2k,
-                                                        opj_tcd_t * p_tile_coder,
-                                                        OPJ_BYTE * p_data,
-                                                        OPJ_UINT32 * p_data_written,
-                                                        OPJ_UINT32 p_total_data_size,
-                                                        const opj_stream_private_t *p_stream,
-                                                        opj_event_mgr_t * p_manager
-                            )
-{
-        opj_codestream_info_t *l_cstr_info = 00;
-        OPJ_UINT32 l_remaining_data;
-
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
+    /* If know the number of tile part header we will check if we didn't read the last*/
+    if (l_tcp->m_nb_tile_parts) {
+        if (l_tcp->m_nb_tile_parts == (l_current_part + 1)) {
+            p_j2k->m_specific_param.m_decoder.m_can_decode =
+                1; /* Process the last tile-part header*/
+        }
+    }
 
-        opj_write_bytes(p_data,J2K_MS_SOD,2);                                   /* SOD */
-        p_data += 2;
+    if (!p_j2k->m_specific_param.m_decoder.m_last_tile_part) {
+        /* Keep the size of data to skip after this marker */
+        p_j2k->m_specific_param.m_decoder.m_sot_length = l_tot_len -
+                12; /* SOT_marker_size = 12 */
+    } else {
+        /* FIXME: need to be computed from the number of bytes remaining in the codestream */
+        p_j2k->m_specific_param.m_decoder.m_sot_length = 0;
+    }
 
-        /* make room for the EOF marker */
-        l_remaining_data =  p_total_data_size - 4;
+    p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_TPH;
 
-        /* update tile coder */
-        p_tile_coder->tp_num = p_j2k->m_specific_param.m_encoder.m_current_poc_tile_part_number ;
-        p_tile_coder->cur_tp_num = p_j2k->m_specific_param.m_encoder.m_current_tile_part_number;
+    /* Check if the current tile is outside the area we want decode or not corresponding to the tile index*/
+    if (p_j2k->m_specific_param.m_decoder.m_tile_ind_to_dec == -1) {
+        p_j2k->m_specific_param.m_decoder.m_skip_data =
+            (l_tile_x < p_j2k->m_specific_param.m_decoder.m_start_tile_x)
+            || (l_tile_x >= p_j2k->m_specific_param.m_decoder.m_end_tile_x)
+            || (l_tile_y < p_j2k->m_specific_param.m_decoder.m_start_tile_y)
+            || (l_tile_y >= p_j2k->m_specific_param.m_decoder.m_end_tile_y);
+    } else {
+        assert(p_j2k->m_specific_param.m_decoder.m_tile_ind_to_dec >= 0);
+        p_j2k->m_specific_param.m_decoder.m_skip_data =
+            (p_j2k->m_current_tile_number != (OPJ_UINT32)
+             p_j2k->m_specific_param.m_decoder.m_tile_ind_to_dec);
+    }
 
-         /* INDEX >> */
-        /* TODO mergeV2: check this part which use cstr_info */
-        /*l_cstr_info = p_j2k->cstr_info;
-        if (l_cstr_info) {
-                if (!p_j2k->m_specific_param.m_encoder.m_current_tile_part_number ) {
-                        //TODO cstr_info->tile[p_j2k->m_current_tile_number].end_header = p_stream_tell(p_stream) + p_j2k->pos_correction - 1;
-                        l_cstr_info->tile[p_j2k->m_current_tile_number].tileno = p_j2k->m_current_tile_number;
+    /* Index */
+    if (p_j2k->cstr_index) {
+        assert(p_j2k->cstr_index->tile_index != 00);
+        p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tileno =
+            p_j2k->m_current_tile_number;
+        p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].current_tpsno =
+            l_current_part;
+
+        if (l_num_parts != 0) {
+            p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].nb_tps =
+                l_num_parts;
+            p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].current_nb_tps =
+                l_num_parts;
+
+            if (!p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index) {
+                p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index =
+                    (opj_tp_index_t*)opj_calloc(l_num_parts, sizeof(opj_tp_index_t));
+                if (!p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index) {
+                    opj_event_msg(p_manager, EVT_ERROR,
+                                  "Not enough memory to read SOT marker. Tile index allocation failed\n");
+                    return OPJ_FALSE;
                 }
-                else {*/
-                        /*
-                        TODO
-                        if
-                                (cstr_info->tile[p_j2k->m_current_tile_number].packet[cstr_info->packno - 1].end_pos < p_stream_tell(p_stream))
-                        {
-                                cstr_info->tile[p_j2k->m_current_tile_number].packet[cstr_info->packno].start_pos = p_stream_tell(p_stream);
-                        }*/
-                /*}*/
-                /* UniPG>> */
-#ifdef USE_JPWL
-                /* update markers struct */
-                /*OPJ_BOOL res = j2k_add_marker(p_j2k->cstr_info, J2K_MS_SOD, p_j2k->sod_start, 2);
-*/
-  assert( 0 && "TODO" );
-#endif /* USE_JPWL */
-                /* <<UniPG */
-        /*}*/
-        /* << INDEX */
-
-        if (p_j2k->m_specific_param.m_encoder.m_current_tile_part_number == 0) {
-                p_tile_coder->tcd_image->tiles->packno = 0;
-                if (l_cstr_info) {
-                        l_cstr_info->packno = 0;
+            } else {
+                opj_tp_index_t *new_tp_index = (opj_tp_index_t *) opj_realloc(
+                                                   p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index,
+                                                   l_num_parts * sizeof(opj_tp_index_t));
+                if (! new_tp_index) {
+                    opj_free(p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index);
+                    p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index = NULL;
+                    opj_event_msg(p_manager, EVT_ERROR,
+                                  "Not enough memory to read SOT marker. Tile index allocation failed\n");
+                    return OPJ_FALSE;
+                }
+                p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index =
+                    new_tp_index;
+            }
+        } else {
+            /*if (!p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index)*/ {
+
+                if (!p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index) {
+                    p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].current_nb_tps = 10;
+                    p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index =
+                        (opj_tp_index_t*)opj_calloc(
+                            p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].current_nb_tps,
+                            sizeof(opj_tp_index_t));
+                    if (!p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index) {
+                        p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].current_nb_tps = 0;
+                        opj_event_msg(p_manager, EVT_ERROR,
+                                      "Not enough memory to read SOT marker. Tile index allocation failed\n");
+                        return OPJ_FALSE;
+                    }
                 }
-        }
 
-        *p_data_written = 0;
+                if (l_current_part >=
+                        p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].current_nb_tps) {
+                    opj_tp_index_t *new_tp_index;
+                    p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].current_nb_tps =
+                        l_current_part + 1;
+                    new_tp_index = (opj_tp_index_t *) opj_realloc(
+                                       p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index,
+                                       p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].current_nb_tps *
+                                       sizeof(opj_tp_index_t));
+                    if (! new_tp_index) {
+                        opj_free(p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index);
+                        p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index = NULL;
+                        p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].current_nb_tps = 0;
+                        opj_event_msg(p_manager, EVT_ERROR,
+                                      "Not enough memory to read SOT marker. Tile index allocation failed\n");
+                        return OPJ_FALSE;
+                    }
+                    p_j2k->cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index =
+                        new_tp_index;
+                }
+            }
 
-        if (! opj_tcd_encode_tile(p_tile_coder, p_j2k->m_current_tile_number, p_data, p_data_written, l_remaining_data , l_cstr_info)) {
-                opj_event_msg(p_manager, EVT_ERROR, "Cannot encode tile\n");
-                return OPJ_FALSE;
         }
 
-        *p_data_written += 2;
+    }
 
-        return OPJ_TRUE;
+    /* FIXME move this onto a separate method to call before reading any SOT, remove part about main_end header, use a index struct inside p_j2k */
+    /* if (p_j2k->cstr_info) {
+       if (l_tcp->first) {
+       if (tileno == 0) {
+       p_j2k->cstr_info->main_head_end = p_stream_tell(p_stream) - 13;
+       }
+
+       p_j2k->cstr_info->tile[tileno].tileno = tileno;
+       p_j2k->cstr_info->tile[tileno].start_pos = p_stream_tell(p_stream) - 12;
+       p_j2k->cstr_info->tile[tileno].end_pos = p_j2k->cstr_info->tile[tileno].start_pos + totlen - 1;
+       p_j2k->cstr_info->tile[tileno].num_tps = numparts;
+
+       if (numparts) {
+       p_j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_malloc(numparts * sizeof(opj_tp_info_t));
+       }
+       else {
+       p_j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_malloc(10 * sizeof(opj_tp_info_t)); // Fixme (10)
+       }
+       }
+       else {
+       p_j2k->cstr_info->tile[tileno].end_pos += totlen;
+       }
+
+       p_j2k->cstr_info->tile[tileno].tp[partno].tp_start_pos = p_stream_tell(p_stream) - 12;
+       p_j2k->cstr_info->tile[tileno].tp[partno].tp_end_pos =
+       p_j2k->cstr_info->tile[tileno].tp[partno].tp_start_pos + totlen - 1;
+       }*/
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_read_sod (opj_j2k_t *p_j2k,
-                           opj_stream_private_t *p_stream,
-                                                   opj_event_mgr_t * p_manager
-                           )
+static OPJ_BOOL opj_j2k_write_sod(opj_j2k_t *p_j2k,
+                                  opj_tcd_t * p_tile_coder,
+                                  OPJ_BYTE * p_data,
+                                  OPJ_UINT32 * p_data_written,
+                                  OPJ_UINT32 p_total_data_size,
+                                  const opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager
+                                 )
 {
-        OPJ_SIZE_T l_current_read_size;
-        opj_codestream_index_t * l_cstr_index = 00;
-        OPJ_BYTE ** l_current_data = 00;
-        opj_tcp_t * l_tcp = 00;
-        OPJ_UINT32 * l_tile_len = 00;
-        OPJ_BOOL l_sot_length_pb_detected = OPJ_FALSE;
-
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
-
-        l_tcp = &(p_j2k->m_cp.tcps[p_j2k->m_current_tile_number]);
-
-        if (p_j2k->m_specific_param.m_decoder.m_last_tile_part) {
-                /* opj_stream_get_number_byte_left returns OPJ_OFF_T
-                // but we are in the last tile part,
-                // so its result will fit on OPJ_UINT32 unless we find
-                // a file with a single tile part of more than 4 GB...*/
-                p_j2k->m_specific_param.m_decoder.m_sot_length = (OPJ_UINT32)(opj_stream_get_number_byte_left(p_stream) - 2);
-        }
-        else {
-            /* Check to avoid pass the limit of OPJ_UINT32 */
-            if (p_j2k->m_specific_param.m_decoder.m_sot_length >= 2 )
-                p_j2k->m_specific_param.m_decoder.m_sot_length -= 2;
-            else {
-                /* MSD: case commented to support empty SOT marker (PHR data) */
+    opj_codestream_info_t *l_cstr_info = 00;
+    OPJ_UINT32 l_remaining_data;
+
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
+
+    opj_write_bytes(p_data, J2K_MS_SOD,
+                    2);                                 /* SOD */
+    p_data += 2;
+
+    /* make room for the EOF marker */
+    l_remaining_data =  p_total_data_size - 4;
+
+    /* update tile coder */
+    p_tile_coder->tp_num =
+        p_j2k->m_specific_param.m_encoder.m_current_poc_tile_part_number ;
+    p_tile_coder->cur_tp_num =
+        p_j2k->m_specific_param.m_encoder.m_current_tile_part_number;
+
+    /* INDEX >> */
+    /* TODO mergeV2: check this part which use cstr_info */
+    /*l_cstr_info = p_j2k->cstr_info;
+    if (l_cstr_info) {
+            if (!p_j2k->m_specific_param.m_encoder.m_current_tile_part_number ) {
+                    //TODO cstr_info->tile[p_j2k->m_current_tile_number].end_header = p_stream_tell(p_stream) + p_j2k->pos_correction - 1;
+                    l_cstr_info->tile[p_j2k->m_current_tile_number].tileno = p_j2k->m_current_tile_number;
             }
-        }
-
-        l_current_data = &(l_tcp->m_data);
-        l_tile_len = &l_tcp->m_data_size;
+            else {*/
+    /*
+    TODO
+    if
+            (cstr_info->tile[p_j2k->m_current_tile_number].packet[cstr_info->packno - 1].end_pos < p_stream_tell(p_stream))
+    {
+            cstr_info->tile[p_j2k->m_current_tile_number].packet[cstr_info->packno].start_pos = p_stream_tell(p_stream);
+    }*/
+    /*}*/
+    /* UniPG>> */
+#ifdef USE_JPWL
+    /* update markers struct */
+    /*OPJ_BOOL res = j2k_add_marker(p_j2k->cstr_info, J2K_MS_SOD, p_j2k->sod_start, 2);
+    */
+    assert(0 && "TODO");
+#endif /* USE_JPWL */
+    /* <<UniPG */
+    /*}*/
+    /* << INDEX */
 
-        /* Patch to support new PHR data */
-        if (p_j2k->m_specific_param.m_decoder.m_sot_length) {
-            /* If we are here, we'll try to read the data after allocation */
-            /* Check enough bytes left in stream before allocation */
-            if ((OPJ_OFF_T)p_j2k->m_specific_param.m_decoder.m_sot_length > opj_stream_get_number_byte_left(p_stream)) {
-                opj_event_msg(p_manager, EVT_ERROR, "Tile part length size inconsistent with stream length\n");
-                return OPJ_FALSE;
-            }
-            if (! *l_current_data) {
-                /* LH: oddly enough, in this path, l_tile_len!=0.
-                 * TODO: If this was consistent, we could simplify the code to only use realloc(), as realloc(0,...) default to malloc(0,...).
-                 */
-                *l_current_data = (OPJ_BYTE*) opj_malloc(p_j2k->m_specific_param.m_decoder.m_sot_length);
-            }
-            else {
-                OPJ_BYTE *l_new_current_data = (OPJ_BYTE *) opj_realloc(*l_current_data, *l_tile_len + p_j2k->m_specific_param.m_decoder.m_sot_length);
-                if (! l_new_current_data) {
-                        opj_free(*l_current_data);
-                        /*nothing more is done as l_current_data will be set to null, and just
-                          afterward we enter in the error path
-                          and the actual tile_len is updated (committed) at the end of the
-                          function. */
-                }
-                *l_current_data = l_new_current_data;
-            }
-            
-            if (*l_current_data == 00) {
-                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to decode tile\n");
-                return OPJ_FALSE;
-            }
-        }
-        else {
-            l_sot_length_pb_detected = OPJ_TRUE;
+    if (p_j2k->m_specific_param.m_encoder.m_current_tile_part_number == 0) {
+        p_tile_coder->tcd_image->tiles->packno = 0;
+        if (l_cstr_info) {
+            l_cstr_info->packno = 0;
         }
+    }
 
-        /* Index */
-        l_cstr_index = p_j2k->cstr_index;
-        if (l_cstr_index) {
-                OPJ_OFF_T l_current_pos = opj_stream_tell(p_stream) - 2;
+    *p_data_written = 0;
 
-                OPJ_UINT32 l_current_tile_part = l_cstr_index->tile_index[p_j2k->m_current_tile_number].current_tpsno;
-                l_cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index[l_current_tile_part].end_header =
-                                l_current_pos;
-                l_cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index[l_current_tile_part].end_pos =
-                                l_current_pos + p_j2k->m_specific_param.m_decoder.m_sot_length + 2;
+    if (! opj_tcd_encode_tile(p_tile_coder, p_j2k->m_current_tile_number, p_data,
+                              p_data_written, l_remaining_data, l_cstr_info)) {
+        opj_event_msg(p_manager, EVT_ERROR, "Cannot encode tile\n");
+        return OPJ_FALSE;
+    }
 
-                if (OPJ_FALSE == opj_j2k_add_tlmarker(p_j2k->m_current_tile_number,
-                                        l_cstr_index,
-                                        J2K_MS_SOD,
-                                        l_current_pos,
-                                        p_j2k->m_specific_param.m_decoder.m_sot_length + 2)) {
-                        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to add tl marker\n");
-                        return OPJ_FALSE;
-                }
+    *p_data_written += 2;
+
+    return OPJ_TRUE;
+}
 
-                /*l_cstr_index->packno = 0;*/
+static OPJ_BOOL opj_j2k_read_sod(opj_j2k_t *p_j2k,
+                                 opj_stream_private_t *p_stream,
+                                 opj_event_mgr_t * p_manager
+                                )
+{
+    OPJ_SIZE_T l_current_read_size;
+    opj_codestream_index_t * l_cstr_index = 00;
+    OPJ_BYTE ** l_current_data = 00;
+    opj_tcp_t * l_tcp = 00;
+    OPJ_UINT32 * l_tile_len = 00;
+    OPJ_BOOL l_sot_length_pb_detected = OPJ_FALSE;
+
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
+
+    l_tcp = &(p_j2k->m_cp.tcps[p_j2k->m_current_tile_number]);
+
+    if (p_j2k->m_specific_param.m_decoder.m_last_tile_part) {
+        /* opj_stream_get_number_byte_left returns OPJ_OFF_T
+        // but we are in the last tile part,
+        // so its result will fit on OPJ_UINT32 unless we find
+        // a file with a single tile part of more than 4 GB...*/
+        p_j2k->m_specific_param.m_decoder.m_sot_length = (OPJ_UINT32)(
+                    opj_stream_get_number_byte_left(p_stream) - 2);
+    } else {
+        /* Check to avoid pass the limit of OPJ_UINT32 */
+        if (p_j2k->m_specific_param.m_decoder.m_sot_length >= 2) {
+            p_j2k->m_specific_param.m_decoder.m_sot_length -= 2;
+        } else {
+            /* MSD: case commented to support empty SOT marker (PHR data) */
         }
+    }
 
-        /* Patch to support new PHR data */
-        if (!l_sot_length_pb_detected) {
-            l_current_read_size = opj_stream_read_data(
-                        p_stream,
-                        *l_current_data + *l_tile_len,
-                        p_j2k->m_specific_param.m_decoder.m_sot_length,
-                        p_manager);
+    l_current_data = &(l_tcp->m_data);
+    l_tile_len = &l_tcp->m_data_size;
+
+    /* Patch to support new PHR data */
+    if (p_j2k->m_specific_param.m_decoder.m_sot_length) {
+        /* If we are here, we'll try to read the data after allocation */
+        /* Check enough bytes left in stream before allocation */
+        if ((OPJ_OFF_T)p_j2k->m_specific_param.m_decoder.m_sot_length >
+                opj_stream_get_number_byte_left(p_stream)) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Tile part length size inconsistent with stream length\n");
+            return OPJ_FALSE;
         }
-        else
-        {
-            l_current_read_size = 0;
+        if (! *l_current_data) {
+            /* LH: oddly enough, in this path, l_tile_len!=0.
+             * TODO: If this was consistent, we could simplify the code to only use realloc(), as realloc(0,...) default to malloc(0,...).
+             */
+            *l_current_data = (OPJ_BYTE*) opj_malloc(
+                                  p_j2k->m_specific_param.m_decoder.m_sot_length);
+        } else {
+            OPJ_BYTE *l_new_current_data = (OPJ_BYTE *) opj_realloc(*l_current_data,
+                                           *l_tile_len + p_j2k->m_specific_param.m_decoder.m_sot_length);
+            if (! l_new_current_data) {
+                opj_free(*l_current_data);
+                /*nothing more is done as l_current_data will be set to null, and just
+                  afterward we enter in the error path
+                  and the actual tile_len is updated (committed) at the end of the
+                  function. */
+            }
+            *l_current_data = l_new_current_data;
         }
 
-        if (l_current_read_size != p_j2k->m_specific_param.m_decoder.m_sot_length) {
-                p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_NEOC;
+        if (*l_current_data == 00) {
+            opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to decode tile\n");
+            return OPJ_FALSE;
         }
-        else {
-                p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_TPHSOT;
+    } else {
+        l_sot_length_pb_detected = OPJ_TRUE;
+    }
+
+    /* Index */
+    l_cstr_index = p_j2k->cstr_index;
+    if (l_cstr_index) {
+        OPJ_OFF_T l_current_pos = opj_stream_tell(p_stream) - 2;
+
+        OPJ_UINT32 l_current_tile_part =
+            l_cstr_index->tile_index[p_j2k->m_current_tile_number].current_tpsno;
+        l_cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index[l_current_tile_part].end_header
+            =
+                l_current_pos;
+        l_cstr_index->tile_index[p_j2k->m_current_tile_number].tp_index[l_current_tile_part].end_pos
+            =
+                l_current_pos + p_j2k->m_specific_param.m_decoder.m_sot_length + 2;
+
+        if (OPJ_FALSE == opj_j2k_add_tlmarker(p_j2k->m_current_tile_number,
+                                              l_cstr_index,
+                                              J2K_MS_SOD,
+                                              l_current_pos,
+                                              p_j2k->m_specific_param.m_decoder.m_sot_length + 2)) {
+            opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to add tl marker\n");
+            return OPJ_FALSE;
         }
 
-        *l_tile_len += (OPJ_UINT32)l_current_read_size;
+        /*l_cstr_index->packno = 0;*/
+    }
 
-        return OPJ_TRUE;
+    /* Patch to support new PHR data */
+    if (!l_sot_length_pb_detected) {
+        l_current_read_size = opj_stream_read_data(
+                                  p_stream,
+                                  *l_current_data + *l_tile_len,
+                                  p_j2k->m_specific_param.m_decoder.m_sot_length,
+                                  p_manager);
+    } else {
+        l_current_read_size = 0;
+    }
+
+    if (l_current_read_size != p_j2k->m_specific_param.m_decoder.m_sot_length) {
+        p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_NEOC;
+    } else {
+        p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_TPHSOT;
+    }
+
+    *l_tile_len += (OPJ_UINT32)l_current_read_size;
+
+    return OPJ_TRUE;
 }
 
 static OPJ_BOOL opj_j2k_write_rgn(opj_j2k_t *p_j2k,
-                            OPJ_UINT32 p_tile_no,
-                            OPJ_UINT32 p_comp_no,
-                            OPJ_UINT32 nb_comps,
-                            opj_stream_private_t *p_stream,
-                            opj_event_mgr_t * p_manager
-                            )
+                                  OPJ_UINT32 p_tile_no,
+                                  OPJ_UINT32 p_comp_no,
+                                  OPJ_UINT32 nb_comps,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager
+                                 )
 {
-        OPJ_BYTE * l_current_data = 00;
-        OPJ_UINT32 l_rgn_size;
-        opj_cp_t *l_cp = 00;
-        opj_tcp_t *l_tcp = 00;
-        opj_tccp_t *l_tccp = 00;
-        OPJ_UINT32 l_comp_room;
+    OPJ_BYTE * l_current_data = 00;
+    OPJ_UINT32 l_rgn_size;
+    opj_cp_t *l_cp = 00;
+    opj_tcp_t *l_tcp = 00;
+    opj_tccp_t *l_tccp = 00;
+    OPJ_UINT32 l_comp_room;
 
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
 
-        l_cp = &(p_j2k->m_cp);
-        l_tcp = &l_cp->tcps[p_tile_no];
-        l_tccp = &l_tcp->tccps[p_comp_no];
+    l_cp = &(p_j2k->m_cp);
+    l_tcp = &l_cp->tcps[p_tile_no];
+    l_tccp = &l_tcp->tccps[p_comp_no];
 
-        if (nb_comps <= 256) {
-                l_comp_room = 1;
-        }
-        else {
-                l_comp_room = 2;
-        }
+    if (nb_comps <= 256) {
+        l_comp_room = 1;
+    } else {
+        l_comp_room = 2;
+    }
 
-        l_rgn_size = 6 + l_comp_room;
+    l_rgn_size = 6 + l_comp_room;
 
-        l_current_data = p_j2k->m_specific_param.m_encoder.m_header_tile_data;
+    l_current_data = p_j2k->m_specific_param.m_encoder.m_header_tile_data;
 
-        opj_write_bytes(l_current_data,J2K_MS_RGN,2);                                   /* RGN  */
-        l_current_data += 2;
+    opj_write_bytes(l_current_data, J2K_MS_RGN,
+                    2);                                   /* RGN  */
+    l_current_data += 2;
 
-        opj_write_bytes(l_current_data,l_rgn_size-2,2);                                 /* Lrgn */
-        l_current_data += 2;
+    opj_write_bytes(l_current_data, l_rgn_size - 2,
+                    2);                                 /* Lrgn */
+    l_current_data += 2;
 
-        opj_write_bytes(l_current_data,p_comp_no,l_comp_room);                          /* Crgn */
-        l_current_data+=l_comp_room;
+    opj_write_bytes(l_current_data, p_comp_no,
+                    l_comp_room);                          /* Crgn */
+    l_current_data += l_comp_room;
 
-        opj_write_bytes(l_current_data, 0,1);                                           /* Srgn */
-        ++l_current_data;
+    opj_write_bytes(l_current_data, 0,
+                    1);                                           /* Srgn */
+    ++l_current_data;
 
-        opj_write_bytes(l_current_data, (OPJ_UINT32)l_tccp->roishift,1);                            /* SPrgn */
-        ++l_current_data;
+    opj_write_bytes(l_current_data, (OPJ_UINT32)l_tccp->roishift,
+                    1);                            /* SPrgn */
+    ++l_current_data;
 
-        if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_header_tile_data,l_rgn_size,p_manager) != l_rgn_size) {
-                return OPJ_FALSE;
-        }
+    if (opj_stream_write_data(p_stream,
+                              p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_rgn_size,
+                              p_manager) != l_rgn_size) {
+        return OPJ_FALSE;
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_write_eoc(     opj_j2k_t *p_j2k,
-                            opj_stream_private_t *p_stream,
-                            opj_event_mgr_t * p_manager
-                            )
+static OPJ_BOOL opj_j2k_write_eoc(opj_j2k_t *p_j2k,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager
+                                 )
 {
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
 
-        opj_write_bytes(p_j2k->m_specific_param.m_encoder.m_header_tile_data,J2K_MS_EOC,2);                                     /* EOC */
+    opj_write_bytes(p_j2k->m_specific_param.m_encoder.m_header_tile_data,
+                    J2K_MS_EOC, 2);                                    /* EOC */
 
-/* UniPG>> */
+    /* UniPG>> */
 #ifdef USE_JPWL
-        /* update markers struct */
-        /*
-        OPJ_BOOL res = j2k_add_marker(p_j2k->cstr_info, J2K_MS_EOC, p_stream_tell(p_stream) - 2, 2);
-*/
+    /* update markers struct */
+    /*
+    OPJ_BOOL res = j2k_add_marker(p_j2k->cstr_info, J2K_MS_EOC, p_stream_tell(p_stream) - 2, 2);
+    */
 #endif /* USE_JPWL */
 
-        if ( opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_header_tile_data,2,p_manager) != 2) {
-                return OPJ_FALSE;
-        }
+    if (opj_stream_write_data(p_stream,
+                              p_j2k->m_specific_param.m_encoder.m_header_tile_data, 2, p_manager) != 2) {
+        return OPJ_FALSE;
+    }
 
-        if ( ! opj_stream_flush(p_stream,p_manager) ) {
-                return OPJ_FALSE;
-        }
+    if (! opj_stream_flush(p_stream, p_manager)) {
+        return OPJ_FALSE;
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 /**
@@ -4582,596 +4808,616 @@ static OPJ_BOOL opj_j2k_write_eoc(     opj_j2k_t *p_j2k,
  * @param       p_header_size   the size of the data contained in the POC marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_rgn (opj_j2k_t *p_j2k,
-                                  OPJ_BYTE * p_header_data,
-                                  OPJ_UINT32 p_header_size,
-                                  opj_event_mgr_t * p_manager
-                                  )
+static OPJ_BOOL opj_j2k_read_rgn(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager
+                                )
 {
-        OPJ_UINT32 l_nb_comp;
-        opj_image_t * l_image = 00;
+    OPJ_UINT32 l_nb_comp;
+    opj_image_t * l_image = 00;
 
-        opj_cp_t *l_cp = 00;
-        opj_tcp_t *l_tcp = 00;
-        OPJ_UINT32 l_comp_room, l_comp_no, l_roi_sty;
+    opj_cp_t *l_cp = 00;
+    opj_tcp_t *l_tcp = 00;
+    OPJ_UINT32 l_comp_room, l_comp_no, l_roi_sty;
 
-        /* preconditions*/
-        assert(p_header_data != 00);
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
+    /* preconditions*/
+    assert(p_header_data != 00);
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-        l_image = p_j2k->m_private_image;
-        l_nb_comp = l_image->numcomps;
+    l_image = p_j2k->m_private_image;
+    l_nb_comp = l_image->numcomps;
 
-        if (l_nb_comp <= 256) {
-                l_comp_room = 1; }
-        else {
-                l_comp_room = 2; }
+    if (l_nb_comp <= 256) {
+        l_comp_room = 1;
+    } else {
+        l_comp_room = 2;
+    }
 
-        if (p_header_size != 2 + l_comp_room) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading RGN marker\n");
-                return OPJ_FALSE;
-        }
+    if (p_header_size != 2 + l_comp_room) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading RGN marker\n");
+        return OPJ_FALSE;
+    }
 
-        l_cp = &(p_j2k->m_cp);
-        l_tcp = (p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_TPH) ?
-                                &l_cp->tcps[p_j2k->m_current_tile_number] :
-                                p_j2k->m_specific_param.m_decoder.m_default_tcp;
+    l_cp = &(p_j2k->m_cp);
+    l_tcp = (p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_TPH) ?
+            &l_cp->tcps[p_j2k->m_current_tile_number] :
+            p_j2k->m_specific_param.m_decoder.m_default_tcp;
 
-        opj_read_bytes(p_header_data,&l_comp_no,l_comp_room);           /* Crgn */
-        p_header_data+=l_comp_room;
-        opj_read_bytes(p_header_data,&l_roi_sty,1);                                     /* Srgn */
-        ++p_header_data;
+    opj_read_bytes(p_header_data, &l_comp_no, l_comp_room);         /* Crgn */
+    p_header_data += l_comp_room;
+    opj_read_bytes(p_header_data, &l_roi_sty,
+                   1);                                     /* Srgn */
+    ++p_header_data;
 
 #ifdef USE_JPWL
-        if (l_cp->correct) {
-                /* totlen is negative or larger than the bytes left!!! */
-                if (l_comp_room >= l_nb_comp) {
-                        opj_event_msg(p_manager, EVT_ERROR,
-                                "JPWL: bad component number in RGN (%d when there are only %d)\n",
-                                l_comp_room, l_nb_comp);
-                        if (!JPWL_ASSUME) {
-                                opj_event_msg(p_manager, EVT_ERROR, "JPWL: giving up\n");
-                                return OPJ_FALSE;
-                        }
-                }
-        };
-#endif /* USE_JPWL */
-
-        /* testcase 3635.pdf.asan.77.2930 */
-        if (l_comp_no >= l_nb_comp) {
-                opj_event_msg(p_manager, EVT_ERROR,
-                        "bad component number in RGN (%d when there are only %d)\n",
-                        l_comp_no, l_nb_comp);
+    if (l_cp->correct) {
+        /* totlen is negative or larger than the bytes left!!! */
+        if (l_comp_room >= l_nb_comp) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "JPWL: bad component number in RGN (%d when there are only %d)\n",
+                          l_comp_room, l_nb_comp);
+            if (!JPWL_ASSUME) {
+                opj_event_msg(p_manager, EVT_ERROR, "JPWL: giving up\n");
                 return OPJ_FALSE;
+            }
         }
+    };
+#endif /* USE_JPWL */
 
-        opj_read_bytes(p_header_data,(OPJ_UINT32 *) (&(l_tcp->tccps[l_comp_no].roishift)),1);   /* SPrgn */
-        ++p_header_data;
+    /* testcase 3635.pdf.asan.77.2930 */
+    if (l_comp_no >= l_nb_comp) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "bad component number in RGN (%d when there are only %d)\n",
+                      l_comp_no, l_nb_comp);
+        return OPJ_FALSE;
+    }
 
-        return OPJ_TRUE;
+    opj_read_bytes(p_header_data,
+                   (OPJ_UINT32 *)(&(l_tcp->tccps[l_comp_no].roishift)), 1);  /* SPrgn */
+    ++p_header_data;
+
+    return OPJ_TRUE;
 
 }
 
-static OPJ_FLOAT32 opj_j2k_get_tp_stride (opj_tcp_t * p_tcp)
+static OPJ_FLOAT32 opj_j2k_get_tp_stride(opj_tcp_t * p_tcp)
 {
-        return (OPJ_FLOAT32) ((p_tcp->m_nb_tile_parts - 1) * 14);
+    return (OPJ_FLOAT32)((p_tcp->m_nb_tile_parts - 1) * 14);
 }
 
-static OPJ_FLOAT32 opj_j2k_get_default_stride (opj_tcp_t * p_tcp)
+static OPJ_FLOAT32 opj_j2k_get_default_stride(opj_tcp_t * p_tcp)
 {
     (void)p_tcp;
     return 0;
 }
 
-static OPJ_BOOL opj_j2k_update_rates(  opj_j2k_t *p_j2k,
-                                                            opj_stream_private_t *p_stream,
-                                                            opj_event_mgr_t * p_manager )
-{
-        opj_cp_t * l_cp = 00;
-        opj_image_t * l_image = 00;
-        opj_tcp_t * l_tcp = 00;
-        opj_image_comp_t * l_img_comp = 00;
-
-        OPJ_UINT32 i,j,k;
-        OPJ_INT32 l_x0,l_y0,l_x1,l_y1;
-        OPJ_FLOAT32 * l_rates = 0;
-        OPJ_FLOAT32 l_sot_remove;
-        OPJ_UINT32 l_bits_empty, l_size_pixel;
-        OPJ_UINT32 l_tile_size = 0;
-        OPJ_UINT32 l_last_res;
-        OPJ_FLOAT32 (* l_tp_stride_func)(opj_tcp_t *) = 00;
-
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
-
-        l_cp = &(p_j2k->m_cp);
-        l_image = p_j2k->m_private_image;
-        l_tcp = l_cp->tcps;
-
-        l_bits_empty = 8 * l_image->comps->dx * l_image->comps->dy;
-        l_size_pixel = l_image->numcomps * l_image->comps->prec;
-        l_sot_remove = (OPJ_FLOAT32) opj_stream_tell(p_stream) / (OPJ_FLOAT32)(l_cp->th * l_cp->tw);
-
-        if (l_cp->m_specific_param.m_enc.m_tp_on) {
-                l_tp_stride_func = opj_j2k_get_tp_stride;
-        }
-        else {
-                l_tp_stride_func = opj_j2k_get_default_stride;
-        }
-
-        for (i=0;i<l_cp->th;++i) {
-                for (j=0;j<l_cp->tw;++j) {
-                        OPJ_FLOAT32 l_offset = (OPJ_FLOAT32)(*l_tp_stride_func)(l_tcp) / (OPJ_FLOAT32)l_tcp->numlayers;
-
-                        /* 4 borders of the tile rescale on the image if necessary */
-                        l_x0 = opj_int_max((OPJ_INT32)(l_cp->tx0 + j * l_cp->tdx), (OPJ_INT32)l_image->x0);
-                        l_y0 = opj_int_max((OPJ_INT32)(l_cp->ty0 + i * l_cp->tdy), (OPJ_INT32)l_image->y0);
-                        l_x1 = opj_int_min((OPJ_INT32)(l_cp->tx0 + (j + 1) * l_cp->tdx), (OPJ_INT32)l_image->x1);
-                        l_y1 = opj_int_min((OPJ_INT32)(l_cp->ty0 + (i + 1) * l_cp->tdy), (OPJ_INT32)l_image->y1);
-
-                        l_rates = l_tcp->rates;
-
-                        /* Modification of the RATE >> */
-                        if (*l_rates > 0.0f) {
-                                *l_rates =              (( (OPJ_FLOAT32) (l_size_pixel * (OPJ_UINT32)(l_x1 - l_x0) * (OPJ_UINT32)(l_y1 - l_y0)))
-                                                                /
-                                                                ((*l_rates) * (OPJ_FLOAT32)l_bits_empty)
-                                                                )
-                                                                -
-                                                                l_offset;
-                        }
+static OPJ_BOOL opj_j2k_update_rates(opj_j2k_t *p_j2k,
+                                     opj_stream_private_t *p_stream,
+                                     opj_event_mgr_t * p_manager)
+{
+    opj_cp_t * l_cp = 00;
+    opj_image_t * l_image = 00;
+    opj_tcp_t * l_tcp = 00;
+    opj_image_comp_t * l_img_comp = 00;
+
+    OPJ_UINT32 i, j, k;
+    OPJ_INT32 l_x0, l_y0, l_x1, l_y1;
+    OPJ_FLOAT32 * l_rates = 0;
+    OPJ_FLOAT32 l_sot_remove;
+    OPJ_UINT32 l_bits_empty, l_size_pixel;
+    OPJ_UINT32 l_tile_size = 0;
+    OPJ_UINT32 l_last_res;
+    OPJ_FLOAT32(* l_tp_stride_func)(opj_tcp_t *) = 00;
+
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
+
+    l_cp = &(p_j2k->m_cp);
+    l_image = p_j2k->m_private_image;
+    l_tcp = l_cp->tcps;
+
+    l_bits_empty = 8 * l_image->comps->dx * l_image->comps->dy;
+    l_size_pixel = l_image->numcomps * l_image->comps->prec;
+    l_sot_remove = (OPJ_FLOAT32) opj_stream_tell(p_stream) / (OPJ_FLOAT32)(
+                       l_cp->th * l_cp->tw);
+
+    if (l_cp->m_specific_param.m_enc.m_tp_on) {
+        l_tp_stride_func = opj_j2k_get_tp_stride;
+    } else {
+        l_tp_stride_func = opj_j2k_get_default_stride;
+    }
+
+    for (i = 0; i < l_cp->th; ++i) {
+        for (j = 0; j < l_cp->tw; ++j) {
+            OPJ_FLOAT32 l_offset = (OPJ_FLOAT32)(*l_tp_stride_func)(l_tcp) /
+                                   (OPJ_FLOAT32)l_tcp->numlayers;
+
+            /* 4 borders of the tile rescale on the image if necessary */
+            l_x0 = opj_int_max((OPJ_INT32)(l_cp->tx0 + j * l_cp->tdx),
+                               (OPJ_INT32)l_image->x0);
+            l_y0 = opj_int_max((OPJ_INT32)(l_cp->ty0 + i * l_cp->tdy),
+                               (OPJ_INT32)l_image->y0);
+            l_x1 = opj_int_min((OPJ_INT32)(l_cp->tx0 + (j + 1) * l_cp->tdx),
+                               (OPJ_INT32)l_image->x1);
+            l_y1 = opj_int_min((OPJ_INT32)(l_cp->ty0 + (i + 1) * l_cp->tdy),
+                               (OPJ_INT32)l_image->y1);
+
+            l_rates = l_tcp->rates;
+
+            /* Modification of the RATE >> */
+            if (*l_rates > 0.0f) {
+                *l_rates = (((OPJ_FLOAT32)(l_size_pixel * (OPJ_UINT32)(l_x1 - l_x0) *
+                                           (OPJ_UINT32)(l_y1 - l_y0)))
+                            /
+                            ((*l_rates) * (OPJ_FLOAT32)l_bits_empty)
+                           )
+                           -
+                           l_offset;
+            }
 
-                        ++l_rates;
+            ++l_rates;
 
-                        for (k = 1; k < l_tcp->numlayers; ++k) {
-                                if (*l_rates > 0.0f) {
-                                        *l_rates =              (( (OPJ_FLOAT32) (l_size_pixel * (OPJ_UINT32)(l_x1 - l_x0) * (OPJ_UINT32)(l_y1 - l_y0)))
-                                                                        /
-                                                                                ((*l_rates) * (OPJ_FLOAT32)l_bits_empty)
-                                                                        )
-                                                                        -
-                                                                        l_offset;
-                                }
+            for (k = 1; k < l_tcp->numlayers; ++k) {
+                if (*l_rates > 0.0f) {
+                    *l_rates = (((OPJ_FLOAT32)(l_size_pixel * (OPJ_UINT32)(l_x1 - l_x0) *
+                                               (OPJ_UINT32)(l_y1 - l_y0)))
+                                /
+                                ((*l_rates) * (OPJ_FLOAT32)l_bits_empty)
+                               )
+                               -
+                               l_offset;
+                }
 
-                                ++l_rates;
-                        }
+                ++l_rates;
+            }
 
-                        ++l_tcp;
+            ++l_tcp;
 
-                }
         }
+    }
 
-        l_tcp = l_cp->tcps;
-
-        for (i=0;i<l_cp->th;++i) {
-                for     (j=0;j<l_cp->tw;++j) {
-                        l_rates = l_tcp->rates;
+    l_tcp = l_cp->tcps;
 
-                        if (*l_rates > 0.0f) {
-                                *l_rates -= l_sot_remove;
+    for (i = 0; i < l_cp->th; ++i) {
+        for (j = 0; j < l_cp->tw; ++j) {
+            l_rates = l_tcp->rates;
 
-                                if (*l_rates < 30.0f) {
-                                        *l_rates = 30.0f;
-                                }
-                        }
+            if (*l_rates > 0.0f) {
+                *l_rates -= l_sot_remove;
 
-                        ++l_rates;
+                if (*l_rates < 30.0f) {
+                    *l_rates = 30.0f;
+                }
+            }
 
-                        l_last_res = l_tcp->numlayers - 1;
+            ++l_rates;
 
-                        for (k = 1; k < l_last_res; ++k) {
+            l_last_res = l_tcp->numlayers - 1;
 
-                                if (*l_rates > 0.0f) {
-                                        *l_rates -= l_sot_remove;
+            for (k = 1; k < l_last_res; ++k) {
 
-                                        if (*l_rates < *(l_rates - 1) + 10.0f) {
-                                                *l_rates  = (*(l_rates - 1)) + 20.0f;
-                                        }
-                                }
+                if (*l_rates > 0.0f) {
+                    *l_rates -= l_sot_remove;
 
-                                ++l_rates;
-                        }
+                    if (*l_rates < * (l_rates - 1) + 10.0f) {
+                        *l_rates  = (*(l_rates - 1)) + 20.0f;
+                    }
+                }
 
-                        if (*l_rates > 0.0f) {
-                                *l_rates -= (l_sot_remove + 2.f);
+                ++l_rates;
+            }
 
-                                if (*l_rates < *(l_rates - 1) + 10.0f) {
-                                        *l_rates  = (*(l_rates - 1)) + 20.0f;
-                                }
-                        }
+            if (*l_rates > 0.0f) {
+                *l_rates -= (l_sot_remove + 2.f);
 
-                        ++l_tcp;
+                if (*l_rates < * (l_rates - 1) + 10.0f) {
+                    *l_rates  = (*(l_rates - 1)) + 20.0f;
                 }
-        }
+            }
 
-        l_img_comp = l_image->comps;
-        l_tile_size = 0;
+            ++l_tcp;
+        }
+    }
 
-        for (i=0;i<l_image->numcomps;++i) {
-                l_tile_size += (        opj_uint_ceildiv(l_cp->tdx,l_img_comp->dx)
-                                                        *
-                                                        opj_uint_ceildiv(l_cp->tdy,l_img_comp->dy)
-                                                        *
-                                                        l_img_comp->prec
-                                                );
+    l_img_comp = l_image->comps;
+    l_tile_size = 0;
 
-                ++l_img_comp;
-        }
+    for (i = 0; i < l_image->numcomps; ++i) {
+        l_tile_size += (opj_uint_ceildiv(l_cp->tdx, l_img_comp->dx)
+                        *
+                        opj_uint_ceildiv(l_cp->tdy, l_img_comp->dy)
+                        *
+                        l_img_comp->prec
+                       );
 
-        l_tile_size = (OPJ_UINT32) (l_tile_size * 0.1625); /* 1.3/8 = 0.1625 */
+        ++l_img_comp;
+    }
 
-        l_tile_size += opj_j2k_get_specific_header_sizes(p_j2k);
+    l_tile_size = (OPJ_UINT32)(l_tile_size * 0.1625);  /* 1.3/8 = 0.1625 */
 
-        p_j2k->m_specific_param.m_encoder.m_encoded_tile_size = l_tile_size;
-        p_j2k->m_specific_param.m_encoder.m_encoded_tile_data =
-                        (OPJ_BYTE *) opj_malloc(p_j2k->m_specific_param.m_encoder.m_encoded_tile_size);
-        if (p_j2k->m_specific_param.m_encoder.m_encoded_tile_data == 00) {
-                return OPJ_FALSE;
-        }
+    l_tile_size += opj_j2k_get_specific_header_sizes(p_j2k);
 
-        if (OPJ_IS_CINEMA(l_cp->rsiz)) {
-                p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_buffer =
-                                (OPJ_BYTE *) opj_malloc(5*p_j2k->m_specific_param.m_encoder.m_total_tile_parts);
-                if (! p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_buffer) {
-                        return OPJ_FALSE;
-                }
+    p_j2k->m_specific_param.m_encoder.m_encoded_tile_size = l_tile_size;
+    p_j2k->m_specific_param.m_encoder.m_encoded_tile_data =
+        (OPJ_BYTE *) opj_malloc(p_j2k->m_specific_param.m_encoder.m_encoded_tile_size);
+    if (p_j2k->m_specific_param.m_encoder.m_encoded_tile_data == 00) {
+        return OPJ_FALSE;
+    }
 
-                p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_current =
-                                p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_buffer;
+    if (OPJ_IS_CINEMA(l_cp->rsiz)) {
+        p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_buffer =
+            (OPJ_BYTE *) opj_malloc(5 *
+                                    p_j2k->m_specific_param.m_encoder.m_total_tile_parts);
+        if (! p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_buffer) {
+            return OPJ_FALSE;
         }
 
-        return OPJ_TRUE;
+        p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_current =
+            p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_buffer;
+    }
+
+    return OPJ_TRUE;
 }
 
 #if 0
-static OPJ_BOOL opj_j2k_read_eoc (     opj_j2k_t *p_j2k,
-                                                        opj_stream_private_t *p_stream,
-                                                        opj_event_mgr_t * p_manager )
+static OPJ_BOOL opj_j2k_read_eoc(opj_j2k_t *p_j2k,
+                                 opj_stream_private_t *p_stream,
+                                 opj_event_mgr_t * p_manager)
 {
-        OPJ_UINT32 i;
-        opj_tcd_t * l_tcd = 00;
-        OPJ_UINT32 l_nb_tiles;
-        opj_tcp_t * l_tcp = 00;
-        OPJ_BOOL l_success;
-
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
-
-        l_nb_tiles = p_j2k->m_cp.th * p_j2k->m_cp.tw;
-        l_tcp = p_j2k->m_cp.tcps;
+    OPJ_UINT32 i;
+    opj_tcd_t * l_tcd = 00;
+    OPJ_UINT32 l_nb_tiles;
+    opj_tcp_t * l_tcp = 00;
+    OPJ_BOOL l_success;
+
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
+
+    l_nb_tiles = p_j2k->m_cp.th * p_j2k->m_cp.tw;
+    l_tcp = p_j2k->m_cp.tcps;
+
+    l_tcd = opj_tcd_create(OPJ_TRUE);
+    if (l_tcd == 00) {
+        opj_event_msg(p_manager, EVT_ERROR, "Cannot decode tile, memory error\n");
+        return OPJ_FALSE;
+    }
 
-        l_tcd = opj_tcd_create(OPJ_TRUE);
-        if (l_tcd == 00) {
+    for (i = 0; i < l_nb_tiles; ++i) {
+        if (l_tcp->m_data) {
+            if (! opj_tcd_init_decode_tile(l_tcd, i)) {
+                opj_tcd_destroy(l_tcd);
                 opj_event_msg(p_manager, EVT_ERROR, "Cannot decode tile, memory error\n");
                 return OPJ_FALSE;
-        }
-
-        for (i = 0; i < l_nb_tiles; ++i) {
-                if (l_tcp->m_data) {
-                        if (! opj_tcd_init_decode_tile(l_tcd, i)) {
-                                opj_tcd_destroy(l_tcd);
-                                opj_event_msg(p_manager, EVT_ERROR, "Cannot decode tile, memory error\n");
-                                return OPJ_FALSE;
-                        }
-
-                        l_success = opj_tcd_decode_tile(l_tcd, l_tcp->m_data, l_tcp->m_data_size, i, p_j2k->cstr_index);
-                        /* cleanup */
+            }
 
-                        if (! l_success) {
-                                p_j2k->m_specific_param.m_decoder.m_state |= J2K_STATE_ERR;
-                                break;
-                        }
-                }
+            l_success = opj_tcd_decode_tile(l_tcd, l_tcp->m_data, l_tcp->m_data_size, i,
+                                            p_j2k->cstr_index);
+            /* cleanup */
 
-                opj_j2k_tcp_destroy(l_tcp);
-                ++l_tcp;
+            if (! l_success) {
+                p_j2k->m_specific_param.m_decoder.m_state |= J2K_STATE_ERR;
+                break;
+            }
         }
 
-        opj_tcd_destroy(l_tcd);
-        return OPJ_TRUE;
+        opj_j2k_tcp_destroy(l_tcp);
+        ++l_tcp;
+    }
+
+    opj_tcd_destroy(l_tcd);
+    return OPJ_TRUE;
 }
 #endif
 
 static OPJ_BOOL opj_j2k_get_end_header(opj_j2k_t *p_j2k,
-                                                        struct opj_stream_private *p_stream,
-                                                        struct opj_event_mgr * p_manager )
+                                       struct opj_stream_private *p_stream,
+                                       struct opj_event_mgr * p_manager)
 {
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
 
-        p_j2k->cstr_index->main_head_end = opj_stream_tell(p_stream);
+    p_j2k->cstr_index->main_head_end = opj_stream_tell(p_stream);
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_write_mct_data_group(  opj_j2k_t *p_j2k,
-                                                                        struct opj_stream_private *p_stream,
-                                                                        struct opj_event_mgr * p_manager )
+static OPJ_BOOL opj_j2k_write_mct_data_group(opj_j2k_t *p_j2k,
+        struct opj_stream_private *p_stream,
+        struct opj_event_mgr * p_manager)
 {
-        OPJ_UINT32 i;
-        opj_simple_mcc_decorrelation_data_t * l_mcc_record;
-        opj_mct_data_t * l_mct_record;
-        opj_tcp_t * l_tcp;
-
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_stream != 00);
-        assert(p_manager != 00);
+    OPJ_UINT32 i;
+    opj_simple_mcc_decorrelation_data_t * l_mcc_record;
+    opj_mct_data_t * l_mct_record;
+    opj_tcp_t * l_tcp;
 
-        if (! opj_j2k_write_cbd(p_j2k,p_stream,p_manager)) {
-                return OPJ_FALSE;
-        }
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_stream != 00);
+    assert(p_manager != 00);
 
-        l_tcp = &(p_j2k->m_cp.tcps[p_j2k->m_current_tile_number]);
-        l_mct_record = l_tcp->m_mct_records;
+    if (! opj_j2k_write_cbd(p_j2k, p_stream, p_manager)) {
+        return OPJ_FALSE;
+    }
 
-        for (i=0;i<l_tcp->m_nb_mct_records;++i) {
+    l_tcp = &(p_j2k->m_cp.tcps[p_j2k->m_current_tile_number]);
+    l_mct_record = l_tcp->m_mct_records;
 
-                if (! opj_j2k_write_mct_record(p_j2k,l_mct_record,p_stream,p_manager)) {
-                        return OPJ_FALSE;
-                }
+    for (i = 0; i < l_tcp->m_nb_mct_records; ++i) {
 
-                ++l_mct_record;
+        if (! opj_j2k_write_mct_record(p_j2k, l_mct_record, p_stream, p_manager)) {
+            return OPJ_FALSE;
         }
 
-        l_mcc_record = l_tcp->m_mcc_records;
+        ++l_mct_record;
+    }
 
-        for     (i=0;i<l_tcp->m_nb_mcc_records;++i) {
+    l_mcc_record = l_tcp->m_mcc_records;
 
-                if (! opj_j2k_write_mcc_record(p_j2k,l_mcc_record,p_stream,p_manager)) {
-                        return OPJ_FALSE;
-                }
+    for (i = 0; i < l_tcp->m_nb_mcc_records; ++i) {
 
-                ++l_mcc_record;
+        if (! opj_j2k_write_mcc_record(p_j2k, l_mcc_record, p_stream, p_manager)) {
+            return OPJ_FALSE;
         }
 
-        if (! opj_j2k_write_mco(p_j2k,p_stream,p_manager)) {
-                return OPJ_FALSE;
-        }
+        ++l_mcc_record;
+    }
 
-        return OPJ_TRUE;
-}
+    if (! opj_j2k_write_mco(p_j2k, p_stream, p_manager)) {
+        return OPJ_FALSE;
+    }
 
-static OPJ_BOOL opj_j2k_write_all_coc(
-       opj_j2k_t *p_j2k,
-       struct opj_stream_private *p_stream,
-       struct opj_event_mgr * p_manager )
-{
-       OPJ_UINT32 compno;
-       
-       /* preconditions */
-       assert(p_j2k != 00);
-       assert(p_manager != 00);
-       assert(p_stream != 00);
-       
-       for (compno = 1; compno < p_j2k->m_private_image->numcomps; ++compno)
-       {
-               /* cod is first component of first tile */
-               if (! opj_j2k_compare_coc(p_j2k, 0, compno)) {
-                       if (! opj_j2k_write_coc(p_j2k,compno,p_stream, p_manager)) {
-                               return OPJ_FALSE;
-                       }
-               }
-       }
-       
-       return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_write_all_qcc(
-       opj_j2k_t *p_j2k,
-       struct opj_stream_private *p_stream,
-       struct opj_event_mgr * p_manager )
-{
-       OPJ_UINT32 compno;
-       
-       /* preconditions */
-       assert(p_j2k != 00);
-       assert(p_manager != 00);
-       assert(p_stream != 00);
-       
-       for (compno = 1; compno < p_j2k->m_private_image->numcomps; ++compno)
-       {
-               /* qcd is first component of first tile */
-               if (! opj_j2k_compare_qcc(p_j2k, 0, compno)) {
-                       if (! opj_j2k_write_qcc(p_j2k,compno,p_stream, p_manager)) {
-                               return OPJ_FALSE;
-                       }
-               }
-       }
-       return OPJ_TRUE;
-}
-
-static OPJ_BOOL opj_j2k_write_regions( opj_j2k_t *p_j2k,
-                                                        struct opj_stream_private *p_stream,
-                                                        struct opj_event_mgr * p_manager )
+static OPJ_BOOL opj_j2k_write_all_coc(
+    opj_j2k_t *p_j2k,
+    struct opj_stream_private *p_stream,
+    struct opj_event_mgr * p_manager)
 {
-        OPJ_UINT32 compno;
-        const opj_tccp_t *l_tccp = 00;
+    OPJ_UINT32 compno;
 
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
 
-        l_tccp = p_j2k->m_cp.tcps->tccps;
+    for (compno = 1; compno < p_j2k->m_private_image->numcomps; ++compno) {
+        /* cod is first component of first tile */
+        if (! opj_j2k_compare_coc(p_j2k, 0, compno)) {
+            if (! opj_j2k_write_coc(p_j2k, compno, p_stream, p_manager)) {
+                return OPJ_FALSE;
+            }
+        }
+    }
 
-        for (compno = 0; compno < p_j2k->m_private_image->numcomps; ++compno)  {
-                if (l_tccp->roishift) {
+    return OPJ_TRUE;
+}
 
-                        if (! opj_j2k_write_rgn(p_j2k,0,compno,p_j2k->m_private_image->numcomps,p_stream,p_manager)) {
-                                return OPJ_FALSE;
-                        }
-                }
+static OPJ_BOOL opj_j2k_write_all_qcc(
+    opj_j2k_t *p_j2k,
+    struct opj_stream_private *p_stream,
+    struct opj_event_mgr * p_manager)
+{
+    OPJ_UINT32 compno;
 
-                ++l_tccp;
-        }
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
 
-        return OPJ_TRUE;
+    for (compno = 1; compno < p_j2k->m_private_image->numcomps; ++compno) {
+        /* qcd is first component of first tile */
+        if (! opj_j2k_compare_qcc(p_j2k, 0, compno)) {
+            if (! opj_j2k_write_qcc(p_j2k, compno, p_stream, p_manager)) {
+                return OPJ_FALSE;
+            }
+        }
+    }
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_write_epc(     opj_j2k_t *p_j2k,
-                                                struct opj_stream_private *p_stream,
-                                                struct opj_event_mgr * p_manager )
+static OPJ_BOOL opj_j2k_write_regions(opj_j2k_t *p_j2k,
+                                      struct opj_stream_private *p_stream,
+                                      struct opj_event_mgr * p_manager)
 {
-        opj_codestream_index_t * l_cstr_index = 00;
+    OPJ_UINT32 compno;
+    const opj_tccp_t *l_tccp = 00;
+
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
+
+    l_tccp = p_j2k->m_cp.tcps->tccps;
 
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
+    for (compno = 0; compno < p_j2k->m_private_image->numcomps; ++compno)  {
+        if (l_tccp->roishift) {
 
-        l_cstr_index = p_j2k->cstr_index;
-        if (l_cstr_index) {
-                l_cstr_index->codestream_size = (OPJ_UINT64)opj_stream_tell(p_stream);
-                /* UniPG>> */
-                /* The following adjustment is done to adjust the codestream size */
-                /* if SOD is not at 0 in the buffer. Useful in case of JP2, where */
-                /* the first bunch of bytes is not in the codestream              */
-                l_cstr_index->codestream_size -= (OPJ_UINT64)l_cstr_index->main_head_start;
-                /* <<UniPG */
+            if (! opj_j2k_write_rgn(p_j2k, 0, compno, p_j2k->m_private_image->numcomps,
+                                    p_stream, p_manager)) {
+                return OPJ_FALSE;
+            }
         }
 
+        ++l_tccp;
+    }
+
+    return OPJ_TRUE;
+}
+
+static OPJ_BOOL opj_j2k_write_epc(opj_j2k_t *p_j2k,
+                                  struct opj_stream_private *p_stream,
+                                  struct opj_event_mgr * p_manager)
+{
+    opj_codestream_index_t * l_cstr_index = 00;
+
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
+
+    l_cstr_index = p_j2k->cstr_index;
+    if (l_cstr_index) {
+        l_cstr_index->codestream_size = (OPJ_UINT64)opj_stream_tell(p_stream);
+        /* UniPG>> */
+        /* The following adjustment is done to adjust the codestream size */
+        /* if SOD is not at 0 in the buffer. Useful in case of JP2, where */
+        /* the first bunch of bytes is not in the codestream              */
+        l_cstr_index->codestream_size -= (OPJ_UINT64)l_cstr_index->main_head_start;
+        /* <<UniPG */
+    }
+
 #ifdef USE_JPWL
-        /* preparation of JPWL marker segments */
+    /* preparation of JPWL marker segments */
 #if 0
-        if(cp->epc_on) {
+    if (cp->epc_on) {
 
-                /* encode according to JPWL */
-                jpwl_encode(p_j2k, p_stream, image);
+        /* encode according to JPWL */
+        jpwl_encode(p_j2k, p_stream, image);
 
-        }
+    }
 #endif
-  assert( 0 && "TODO" );
+    assert(0 && "TODO");
 #endif /* USE_JPWL */
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_read_unk (     opj_j2k_t *p_j2k,
-                                                        opj_stream_private_t *p_stream,
-                                                        OPJ_UINT32 *output_marker,
-                                                        opj_event_mgr_t * p_manager
-                                                        )
+static OPJ_BOOL opj_j2k_read_unk(opj_j2k_t *p_j2k,
+                                 opj_stream_private_t *p_stream,
+                                 OPJ_UINT32 *output_marker,
+                                 opj_event_mgr_t * p_manager
+                                )
 {
-        OPJ_UINT32 l_unknown_marker;
-        const opj_dec_memory_marker_handler_t * l_marker_handler;
-        OPJ_UINT32 l_size_unk = 2;
+    OPJ_UINT32 l_unknown_marker;
+    const opj_dec_memory_marker_handler_t * l_marker_handler;
+    OPJ_UINT32 l_size_unk = 2;
 
-        /* preconditions*/
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
+    /* preconditions*/
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
 
-        opj_event_msg(p_manager, EVT_WARNING, "Unknown marker\n");
+    opj_event_msg(p_manager, EVT_WARNING, "Unknown marker\n");
 
-               for (;;) {
-                /* Try to read 2 bytes (the next marker ID) from stream and copy them into the buffer*/
-                if (opj_stream_read_data(p_stream,p_j2k->m_specific_param.m_decoder.m_header_data,2,p_manager) != 2) {
-                        opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
-                        return OPJ_FALSE;
-                }
+    for (;;) {
+        /* Try to read 2 bytes (the next marker ID) from stream and copy them into the buffer*/
+        if (opj_stream_read_data(p_stream,
+                                 p_j2k->m_specific_param.m_decoder.m_header_data, 2, p_manager) != 2) {
+            opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
+            return OPJ_FALSE;
+        }
 
-                /* read 2 bytes as the new marker ID*/
-                opj_read_bytes(p_j2k->m_specific_param.m_decoder.m_header_data,&l_unknown_marker,2);
+        /* read 2 bytes as the new marker ID*/
+        opj_read_bytes(p_j2k->m_specific_param.m_decoder.m_header_data,
+                       &l_unknown_marker, 2);
 
-                if (!(l_unknown_marker < 0xff00)) {
+        if (!(l_unknown_marker < 0xff00)) {
 
-                        /* Get the marker handler from the marker ID*/
-                        l_marker_handler = opj_j2k_get_marker_handler(l_unknown_marker);
+            /* Get the marker handler from the marker ID*/
+            l_marker_handler = opj_j2k_get_marker_handler(l_unknown_marker);
 
-                        if (!(p_j2k->m_specific_param.m_decoder.m_state & l_marker_handler->states)) {
-                                opj_event_msg(p_manager, EVT_ERROR, "Marker is not compliant with its position\n");
-                                return OPJ_FALSE;
-                        }
-                        else {
-                                if (l_marker_handler->id != J2K_MS_UNK) {
-                                        /* Add the marker to the codestream index*/
-                                        if (l_marker_handler->id != J2K_MS_SOT)
-                                        {
-                                                OPJ_BOOL res = opj_j2k_add_mhmarker(p_j2k->cstr_index, J2K_MS_UNK,
-                                                                (OPJ_UINT32) opj_stream_tell(p_stream) - l_size_unk,
-                                                                l_size_unk);
-                                                if (res == OPJ_FALSE) {
-                                                        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to add mh marker\n");
-                                                        return OPJ_FALSE;
-                                                }
-                                        }
-                                        break; /* next marker is known and well located */
-                                }
-                                else
-                                        l_size_unk += 2;
+            if (!(p_j2k->m_specific_param.m_decoder.m_state & l_marker_handler->states)) {
+                opj_event_msg(p_manager, EVT_ERROR,
+                              "Marker is not compliant with its position\n");
+                return OPJ_FALSE;
+            } else {
+                if (l_marker_handler->id != J2K_MS_UNK) {
+                    /* Add the marker to the codestream index*/
+                    if (l_marker_handler->id != J2K_MS_SOT) {
+                        OPJ_BOOL res = opj_j2k_add_mhmarker(p_j2k->cstr_index, J2K_MS_UNK,
+                                                            (OPJ_UINT32) opj_stream_tell(p_stream) - l_size_unk,
+                                                            l_size_unk);
+                        if (res == OPJ_FALSE) {
+                            opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to add mh marker\n");
+                            return OPJ_FALSE;
                         }
+                    }
+                    break; /* next marker is known and well located */
+                } else {
+                    l_size_unk += 2;
                 }
+            }
         }
+    }
 
-        *output_marker = l_marker_handler->id ;
+    *output_marker = l_marker_handler->id ;
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_write_mct_record(      opj_j2k_t *p_j2k,
-                                                                opj_mct_data_t * p_mct_record,
-                                                                struct opj_stream_private *p_stream,
-                                                                struct opj_event_mgr * p_manager )
+static OPJ_BOOL opj_j2k_write_mct_record(opj_j2k_t *p_j2k,
+        opj_mct_data_t * p_mct_record,
+        struct opj_stream_private *p_stream,
+        struct opj_event_mgr * p_manager)
 {
-        OPJ_UINT32 l_mct_size;
-        OPJ_BYTE * l_current_data = 00;
-        OPJ_UINT32 l_tmp;
+    OPJ_UINT32 l_mct_size;
+    OPJ_BYTE * l_current_data = 00;
+    OPJ_UINT32 l_tmp;
 
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
 
-        l_mct_size = 10 + p_mct_record->m_data_size;
+    l_mct_size = 10 + p_mct_record->m_data_size;
 
-        if (l_mct_size > p_j2k->m_specific_param.m_encoder.m_header_tile_data_size) {
-                OPJ_BYTE *new_header_tile_data = (OPJ_BYTE *) opj_realloc(p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_mct_size);
-                if (! new_header_tile_data) {
-                        opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data = NULL;
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
-                        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to write MCT marker\n");
-                        return OPJ_FALSE;
-                }
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data;
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_mct_size;
+    if (l_mct_size > p_j2k->m_specific_param.m_encoder.m_header_tile_data_size) {
+        OPJ_BYTE *new_header_tile_data = (OPJ_BYTE *) opj_realloc(
+                                             p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_mct_size);
+        if (! new_header_tile_data) {
+            opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data = NULL;
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
+            opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to write MCT marker\n");
+            return OPJ_FALSE;
         }
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data;
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_mct_size;
+    }
 
-        l_current_data = p_j2k->m_specific_param.m_encoder.m_header_tile_data;
+    l_current_data = p_j2k->m_specific_param.m_encoder.m_header_tile_data;
 
-        opj_write_bytes(l_current_data,J2K_MS_MCT,2);                                   /* MCT */
-        l_current_data += 2;
+    opj_write_bytes(l_current_data, J2K_MS_MCT,
+                    2);                                   /* MCT */
+    l_current_data += 2;
 
-        opj_write_bytes(l_current_data,l_mct_size-2,2);                                 /* Lmct */
-        l_current_data += 2;
+    opj_write_bytes(l_current_data, l_mct_size - 2,
+                    2);                                 /* Lmct */
+    l_current_data += 2;
 
-        opj_write_bytes(l_current_data,0,2);                                                    /* Zmct */
-        l_current_data += 2;
+    opj_write_bytes(l_current_data, 0,
+                    2);                                                    /* Zmct */
+    l_current_data += 2;
 
-        /* only one marker atm */
-        l_tmp = (p_mct_record->m_index & 0xff) | (p_mct_record->m_array_type << 8) | (p_mct_record->m_element_type << 10);
+    /* only one marker atm */
+    l_tmp = (p_mct_record->m_index & 0xff) | (p_mct_record->m_array_type << 8) |
+            (p_mct_record->m_element_type << 10);
 
-        opj_write_bytes(l_current_data,l_tmp,2);
-        l_current_data += 2;
+    opj_write_bytes(l_current_data, l_tmp, 2);
+    l_current_data += 2;
 
-        opj_write_bytes(l_current_data,0,2);                                                    /* Ymct */
-        l_current_data+=2;
+    opj_write_bytes(l_current_data, 0,
+                    2);                                                    /* Ymct */
+    l_current_data += 2;
 
-        memcpy(l_current_data,p_mct_record->m_data,p_mct_record->m_data_size);
+    memcpy(l_current_data, p_mct_record->m_data, p_mct_record->m_data_size);
 
-        if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_header_tile_data,l_mct_size,p_manager) != l_mct_size) {
-                return OPJ_FALSE;
-        }
+    if (opj_stream_write_data(p_stream,
+                              p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_mct_size,
+                              p_manager) != l_mct_size) {
+        return OPJ_FALSE;
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 /**
@@ -5182,490 +5428,525 @@ static OPJ_BOOL opj_j2k_write_mct_record(      opj_j2k_t *p_j2k,
  * @param       p_header_size   the size of the data contained in the MCT marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_mct (      opj_j2k_t *p_j2k,
-                                                                    OPJ_BYTE * p_header_data,
-                                                                    OPJ_UINT32 p_header_size,
-                                                                    opj_event_mgr_t * p_manager
-                                    )
+static OPJ_BOOL opj_j2k_read_mct(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager
+                                )
 {
-        OPJ_UINT32 i;
-        opj_tcp_t *l_tcp = 00;
-        OPJ_UINT32 l_tmp;
-        OPJ_UINT32 l_indix;
-        opj_mct_data_t * l_mct_data;
+    OPJ_UINT32 i;
+    opj_tcp_t *l_tcp = 00;
+    OPJ_UINT32 l_tmp;
+    OPJ_UINT32 l_indix;
+    opj_mct_data_t * l_mct_data;
 
-        /* preconditions */
-        assert(p_header_data != 00);
-        assert(p_j2k != 00);
+    /* preconditions */
+    assert(p_header_data != 00);
+    assert(p_j2k != 00);
 
-        l_tcp = p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_TPH ?
-                        &p_j2k->m_cp.tcps[p_j2k->m_current_tile_number] :
-                        p_j2k->m_specific_param.m_decoder.m_default_tcp;
+    l_tcp = p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_TPH ?
+            &p_j2k->m_cp.tcps[p_j2k->m_current_tile_number] :
+            p_j2k->m_specific_param.m_decoder.m_default_tcp;
 
-        if (p_header_size < 2) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading MCT marker\n");
-                return OPJ_FALSE;
-        }
+    if (p_header_size < 2) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading MCT marker\n");
+        return OPJ_FALSE;
+    }
 
-        /* first marker */
-        opj_read_bytes(p_header_data,&l_tmp,2);                         /* Zmct */
-        p_header_data += 2;
-        if (l_tmp != 0) {
-                opj_event_msg(p_manager, EVT_WARNING, "Cannot take in charge mct data within multiple MCT records\n");
-                return OPJ_TRUE;
-        }
+    /* first marker */
+    opj_read_bytes(p_header_data, &l_tmp, 2);                       /* Zmct */
+    p_header_data += 2;
+    if (l_tmp != 0) {
+        opj_event_msg(p_manager, EVT_WARNING,
+                      "Cannot take in charge mct data within multiple MCT records\n");
+        return OPJ_TRUE;
+    }
 
-        if(p_header_size <= 6) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading MCT marker\n");
-                return OPJ_FALSE;
-        }
+    if (p_header_size <= 6) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading MCT marker\n");
+        return OPJ_FALSE;
+    }
 
-        /* Imct -> no need for other values, take the first, type is double with decorrelation x0000 1101 0000 0000*/
-        opj_read_bytes(p_header_data,&l_tmp,2);                         /* Imct */
-        p_header_data += 2;
+    /* Imct -> no need for other values, take the first, type is double with decorrelation x0000 1101 0000 0000*/
+    opj_read_bytes(p_header_data, &l_tmp, 2);                       /* Imct */
+    p_header_data += 2;
 
-        l_indix = l_tmp & 0xff;
-        l_mct_data = l_tcp->m_mct_records;
+    l_indix = l_tmp & 0xff;
+    l_mct_data = l_tcp->m_mct_records;
 
-        for (i=0;i<l_tcp->m_nb_mct_records;++i) {
-                if (l_mct_data->m_index == l_indix) {
-                        break;
-                }
-                ++l_mct_data;
+    for (i = 0; i < l_tcp->m_nb_mct_records; ++i) {
+        if (l_mct_data->m_index == l_indix) {
+            break;
         }
+        ++l_mct_data;
+    }
 
-        /* NOT FOUND */
-        if (i == l_tcp->m_nb_mct_records) {
-                if (l_tcp->m_nb_mct_records == l_tcp->m_nb_max_mct_records) {
-                        opj_mct_data_t *new_mct_records;
-                        l_tcp->m_nb_max_mct_records += OPJ_J2K_MCT_DEFAULT_NB_RECORDS;
-
-                        new_mct_records = (opj_mct_data_t *) opj_realloc(l_tcp->m_mct_records, l_tcp->m_nb_max_mct_records * sizeof(opj_mct_data_t));
-                        if (! new_mct_records) {
-                                opj_free(l_tcp->m_mct_records);
-                                l_tcp->m_mct_records = NULL;
-                                l_tcp->m_nb_max_mct_records = 0;
-                                l_tcp->m_nb_mct_records = 0;
-                                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read MCT marker\n");
-                                return OPJ_FALSE;
-                        }
-                        l_tcp->m_mct_records = new_mct_records;
-                        l_mct_data = l_tcp->m_mct_records + l_tcp->m_nb_mct_records;
-                        memset(l_mct_data ,0,(l_tcp->m_nb_max_mct_records - l_tcp->m_nb_mct_records) * sizeof(opj_mct_data_t));
-                }
-
-                l_mct_data = l_tcp->m_mct_records + l_tcp->m_nb_mct_records;
-                ++l_tcp->m_nb_mct_records;
+    /* NOT FOUND */
+    if (i == l_tcp->m_nb_mct_records) {
+        if (l_tcp->m_nb_mct_records == l_tcp->m_nb_max_mct_records) {
+            opj_mct_data_t *new_mct_records;
+            l_tcp->m_nb_max_mct_records += OPJ_J2K_MCT_DEFAULT_NB_RECORDS;
+
+            new_mct_records = (opj_mct_data_t *) opj_realloc(l_tcp->m_mct_records,
+                              l_tcp->m_nb_max_mct_records * sizeof(opj_mct_data_t));
+            if (! new_mct_records) {
+                opj_free(l_tcp->m_mct_records);
+                l_tcp->m_mct_records = NULL;
+                l_tcp->m_nb_max_mct_records = 0;
+                l_tcp->m_nb_mct_records = 0;
+                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read MCT marker\n");
+                return OPJ_FALSE;
+            }
+            l_tcp->m_mct_records = new_mct_records;
+            l_mct_data = l_tcp->m_mct_records + l_tcp->m_nb_mct_records;
+            memset(l_mct_data, 0, (l_tcp->m_nb_max_mct_records - l_tcp->m_nb_mct_records) *
+                   sizeof(opj_mct_data_t));
         }
 
-        if (l_mct_data->m_data) {
-                opj_free(l_mct_data->m_data);
-                l_mct_data->m_data = 00;
-        }
+        l_mct_data = l_tcp->m_mct_records + l_tcp->m_nb_mct_records;
+        ++l_tcp->m_nb_mct_records;
+    }
 
-        l_mct_data->m_index = l_indix;
-        l_mct_data->m_array_type = (J2K_MCT_ARRAY_TYPE)((l_tmp  >> 8) & 3);
-        l_mct_data->m_element_type = (J2K_MCT_ELEMENT_TYPE)((l_tmp  >> 10) & 3);
+    if (l_mct_data->m_data) {
+        opj_free(l_mct_data->m_data);
+        l_mct_data->m_data = 00;
+    }
 
-        opj_read_bytes(p_header_data,&l_tmp,2);                         /* Ymct */
-        p_header_data+=2;
-        if (l_tmp != 0) {
-                opj_event_msg(p_manager, EVT_WARNING, "Cannot take in charge multiple MCT markers\n");
-                return OPJ_TRUE;
-        }
+    l_mct_data->m_index = l_indix;
+    l_mct_data->m_array_type = (J2K_MCT_ARRAY_TYPE)((l_tmp  >> 8) & 3);
+    l_mct_data->m_element_type = (J2K_MCT_ELEMENT_TYPE)((l_tmp  >> 10) & 3);
 
-        p_header_size -= 6;
+    opj_read_bytes(p_header_data, &l_tmp, 2);                       /* Ymct */
+    p_header_data += 2;
+    if (l_tmp != 0) {
+        opj_event_msg(p_manager, EVT_WARNING,
+                      "Cannot take in charge multiple MCT markers\n");
+        return OPJ_TRUE;
+    }
 
-        l_mct_data->m_data = (OPJ_BYTE*)opj_malloc(p_header_size);
-        if (! l_mct_data->m_data) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading MCT marker\n");
-                return OPJ_FALSE;
-        }
-        memcpy(l_mct_data->m_data,p_header_data,p_header_size);
+    p_header_size -= 6;
 
-        l_mct_data->m_data_size = p_header_size;
+    l_mct_data->m_data = (OPJ_BYTE*)opj_malloc(p_header_size);
+    if (! l_mct_data->m_data) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading MCT marker\n");
+        return OPJ_FALSE;
+    }
+    memcpy(l_mct_data->m_data, p_header_data, p_header_size);
 
-        return OPJ_TRUE;
+    l_mct_data->m_data_size = p_header_size;
+
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_write_mcc_record(      opj_j2k_t *p_j2k,
-                                                                struct opj_simple_mcc_decorrelation_data * p_mcc_record,
-                                                                struct opj_stream_private *p_stream,
-                                                                struct opj_event_mgr * p_manager )
+static OPJ_BOOL opj_j2k_write_mcc_record(opj_j2k_t *p_j2k,
+        struct opj_simple_mcc_decorrelation_data * p_mcc_record,
+        struct opj_stream_private *p_stream,
+        struct opj_event_mgr * p_manager)
 {
-        OPJ_UINT32 i;
-        OPJ_UINT32 l_mcc_size;
-        OPJ_BYTE * l_current_data = 00;
-        OPJ_UINT32 l_nb_bytes_for_comp;
-        OPJ_UINT32 l_mask;
-        OPJ_UINT32 l_tmcc;
-
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
-
-        if (p_mcc_record->m_nb_comps > 255 ) {
+    OPJ_UINT32 i;
+    OPJ_UINT32 l_mcc_size;
+    OPJ_BYTE * l_current_data = 00;
+    OPJ_UINT32 l_nb_bytes_for_comp;
+    OPJ_UINT32 l_mask;
+    OPJ_UINT32 l_tmcc;
+
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
+
+    if (p_mcc_record->m_nb_comps > 255) {
         l_nb_bytes_for_comp = 2;
-                l_mask = 0x8000;
-        }
-        else {
-                l_nb_bytes_for_comp = 1;
-                l_mask = 0;
-        }
-
-        l_mcc_size = p_mcc_record->m_nb_comps * 2 * l_nb_bytes_for_comp + 19;
-        if (l_mcc_size > p_j2k->m_specific_param.m_encoder.m_header_tile_data_size)
-        {
-                OPJ_BYTE *new_header_tile_data = (OPJ_BYTE *) opj_realloc(p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_mcc_size);
-                if (! new_header_tile_data) {
-                        opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data = NULL;
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
-                        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to write MCC marker\n");
-                        return OPJ_FALSE;
-                }
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data;
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_mcc_size;
+        l_mask = 0x8000;
+    } else {
+        l_nb_bytes_for_comp = 1;
+        l_mask = 0;
+    }
+
+    l_mcc_size = p_mcc_record->m_nb_comps * 2 * l_nb_bytes_for_comp + 19;
+    if (l_mcc_size > p_j2k->m_specific_param.m_encoder.m_header_tile_data_size) {
+        OPJ_BYTE *new_header_tile_data = (OPJ_BYTE *) opj_realloc(
+                                             p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_mcc_size);
+        if (! new_header_tile_data) {
+            opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data = NULL;
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
+            opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to write MCC marker\n");
+            return OPJ_FALSE;
         }
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data;
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_mcc_size;
+    }
 
-        l_current_data = p_j2k->m_specific_param.m_encoder.m_header_tile_data;
+    l_current_data = p_j2k->m_specific_param.m_encoder.m_header_tile_data;
 
-        opj_write_bytes(l_current_data,J2K_MS_MCC,2);                                   /* MCC */
-        l_current_data += 2;
+    opj_write_bytes(l_current_data, J2K_MS_MCC,
+                    2);                                   /* MCC */
+    l_current_data += 2;
 
-        opj_write_bytes(l_current_data,l_mcc_size-2,2);                                 /* Lmcc */
-        l_current_data += 2;
+    opj_write_bytes(l_current_data, l_mcc_size - 2,
+                    2);                                 /* Lmcc */
+    l_current_data += 2;
 
-        /* first marker */
-        opj_write_bytes(l_current_data,0,2);                                    /* Zmcc */
-        l_current_data += 2;
+    /* first marker */
+    opj_write_bytes(l_current_data, 0,
+                    2);                                  /* Zmcc */
+    l_current_data += 2;
 
-        opj_write_bytes(l_current_data,p_mcc_record->m_index,1);                                        /* Imcc -> no need for other values, take the first */
-        ++l_current_data;
+    opj_write_bytes(l_current_data, p_mcc_record->m_index,
+                    1);                                        /* Imcc -> no need for other values, take the first */
+    ++l_current_data;
 
-        /* only one marker atm */
-        opj_write_bytes(l_current_data,0,2);                                    /* Ymcc */
-        l_current_data+=2;
+    /* only one marker atm */
+    opj_write_bytes(l_current_data, 0,
+                    2);                                  /* Ymcc */
+    l_current_data += 2;
 
-        opj_write_bytes(l_current_data,1,2);                                    /* Qmcc -> number of collections -> 1 */
-        l_current_data+=2;
+    opj_write_bytes(l_current_data, 1,
+                    2);                                  /* Qmcc -> number of collections -> 1 */
+    l_current_data += 2;
 
-        opj_write_bytes(l_current_data,0x1,1);                                  /* Xmcci type of component transformation -> array based decorrelation */
-        ++l_current_data;
+    opj_write_bytes(l_current_data, 0x1,
+                    1);                                /* Xmcci type of component transformation -> array based decorrelation */
+    ++l_current_data;
 
-        opj_write_bytes(l_current_data,p_mcc_record->m_nb_comps | l_mask,2);    /* Nmcci number of input components involved and size for each component offset = 8 bits */
-        l_current_data+=2;
+    opj_write_bytes(l_current_data, p_mcc_record->m_nb_comps | l_mask,
+                    2);  /* Nmcci number of input components involved and size for each component offset = 8 bits */
+    l_current_data += 2;
 
-        for (i=0;i<p_mcc_record->m_nb_comps;++i) {
-                opj_write_bytes(l_current_data,i,l_nb_bytes_for_comp);                          /* Cmccij Component offset*/
-                l_current_data+=l_nb_bytes_for_comp;
-        }
+    for (i = 0; i < p_mcc_record->m_nb_comps; ++i) {
+        opj_write_bytes(l_current_data, i,
+                        l_nb_bytes_for_comp);                          /* Cmccij Component offset*/
+        l_current_data += l_nb_bytes_for_comp;
+    }
 
-        opj_write_bytes(l_current_data,p_mcc_record->m_nb_comps|l_mask,2);      /* Mmcci number of output components involved and size for each component offset = 8 bits */
-        l_current_data+=2;
+    opj_write_bytes(l_current_data, p_mcc_record->m_nb_comps | l_mask,
+                    2);  /* Mmcci number of output components involved and size for each component offset = 8 bits */
+    l_current_data += 2;
 
-        for (i=0;i<p_mcc_record->m_nb_comps;++i)
-        {
-                opj_write_bytes(l_current_data,i,l_nb_bytes_for_comp);                          /* Wmccij Component offset*/
-                l_current_data+=l_nb_bytes_for_comp;
-        }
+    for (i = 0; i < p_mcc_record->m_nb_comps; ++i) {
+        opj_write_bytes(l_current_data, i,
+                        l_nb_bytes_for_comp);                          /* Wmccij Component offset*/
+        l_current_data += l_nb_bytes_for_comp;
+    }
 
-        l_tmcc = ((!p_mcc_record->m_is_irreversible) & 1U) << 16;
+    l_tmcc = ((!p_mcc_record->m_is_irreversible) & 1U) << 16;
 
-        if (p_mcc_record->m_decorrelation_array) {
-                l_tmcc |= p_mcc_record->m_decorrelation_array->m_index;
-        }
+    if (p_mcc_record->m_decorrelation_array) {
+        l_tmcc |= p_mcc_record->m_decorrelation_array->m_index;
+    }
 
-        if (p_mcc_record->m_offset_array) {
-                l_tmcc |= ((p_mcc_record->m_offset_array->m_index)<<8);
-        }
+    if (p_mcc_record->m_offset_array) {
+        l_tmcc |= ((p_mcc_record->m_offset_array->m_index) << 8);
+    }
 
-        opj_write_bytes(l_current_data,l_tmcc,3);       /* Tmcci : use MCT defined as number 1 and irreversible array based. */
-        l_current_data+=3;
+    opj_write_bytes(l_current_data, l_tmcc,
+                    3);     /* Tmcci : use MCT defined as number 1 and irreversible array based. */
+    l_current_data += 3;
 
-        if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_header_tile_data,l_mcc_size,p_manager) != l_mcc_size) {
-                return OPJ_FALSE;
-        }
+    if (opj_stream_write_data(p_stream,
+                              p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_mcc_size,
+                              p_manager) != l_mcc_size) {
+        return OPJ_FALSE;
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_read_mcc (     opj_j2k_t *p_j2k,
-                                                OPJ_BYTE * p_header_data,
-                                                OPJ_UINT32 p_header_size,
-                                                opj_event_mgr_t * p_manager )
-{
-        OPJ_UINT32 i,j;
-        OPJ_UINT32 l_tmp;
-        OPJ_UINT32 l_indix;
-        opj_tcp_t * l_tcp;
-        opj_simple_mcc_decorrelation_data_t * l_mcc_record;
-        opj_mct_data_t * l_mct_data;
-        OPJ_UINT32 l_nb_collections;
-        OPJ_UINT32 l_nb_comps;
-        OPJ_UINT32 l_nb_bytes_by_comp;
-        OPJ_BOOL l_new_mcc = OPJ_FALSE;
+static OPJ_BOOL opj_j2k_read_mcc(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager)
+{
+    OPJ_UINT32 i, j;
+    OPJ_UINT32 l_tmp;
+    OPJ_UINT32 l_indix;
+    opj_tcp_t * l_tcp;
+    opj_simple_mcc_decorrelation_data_t * l_mcc_record;
+    opj_mct_data_t * l_mct_data;
+    OPJ_UINT32 l_nb_collections;
+    OPJ_UINT32 l_nb_comps;
+    OPJ_UINT32 l_nb_bytes_by_comp;
+    OPJ_BOOL l_new_mcc = OPJ_FALSE;
+
+    /* preconditions */
+    assert(p_header_data != 00);
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+
+    l_tcp = p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_TPH ?
+            &p_j2k->m_cp.tcps[p_j2k->m_current_tile_number] :
+            p_j2k->m_specific_param.m_decoder.m_default_tcp;
+
+    if (p_header_size < 2) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading MCC marker\n");
+        return OPJ_FALSE;
+    }
+
+    /* first marker */
+    opj_read_bytes(p_header_data, &l_tmp, 2);                       /* Zmcc */
+    p_header_data += 2;
+    if (l_tmp != 0) {
+        opj_event_msg(p_manager, EVT_WARNING,
+                      "Cannot take in charge multiple data spanning\n");
+        return OPJ_TRUE;
+    }
 
-        /* preconditions */
-        assert(p_header_data != 00);
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
+    if (p_header_size < 7) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading MCC marker\n");
+        return OPJ_FALSE;
+    }
 
-        l_tcp = p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_TPH ?
-                        &p_j2k->m_cp.tcps[p_j2k->m_current_tile_number] :
-                        p_j2k->m_specific_param.m_decoder.m_default_tcp;
+    opj_read_bytes(p_header_data, &l_indix,
+                   1); /* Imcc -> no need for other values, take the first */
+    ++p_header_data;
 
-        if (p_header_size < 2) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading MCC marker\n");
-                return OPJ_FALSE;
-        }
+    l_mcc_record = l_tcp->m_mcc_records;
 
-        /* first marker */
-        opj_read_bytes(p_header_data,&l_tmp,2);                         /* Zmcc */
-        p_header_data += 2;
-        if (l_tmp != 0) {
-                opj_event_msg(p_manager, EVT_WARNING, "Cannot take in charge multiple data spanning\n");
-                return OPJ_TRUE;
+    for (i = 0; i < l_tcp->m_nb_mcc_records; ++i) {
+        if (l_mcc_record->m_index == l_indix) {
+            break;
         }
+        ++l_mcc_record;
+    }
 
-        if (p_header_size < 7) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading MCC marker\n");
+    /** NOT FOUND */
+    if (i == l_tcp->m_nb_mcc_records) {
+        if (l_tcp->m_nb_mcc_records == l_tcp->m_nb_max_mcc_records) {
+            opj_simple_mcc_decorrelation_data_t *new_mcc_records;
+            l_tcp->m_nb_max_mcc_records += OPJ_J2K_MCC_DEFAULT_NB_RECORDS;
+
+            new_mcc_records = (opj_simple_mcc_decorrelation_data_t *) opj_realloc(
+                                  l_tcp->m_mcc_records, l_tcp->m_nb_max_mcc_records * sizeof(
+                                      opj_simple_mcc_decorrelation_data_t));
+            if (! new_mcc_records) {
+                opj_free(l_tcp->m_mcc_records);
+                l_tcp->m_mcc_records = NULL;
+                l_tcp->m_nb_max_mcc_records = 0;
+                l_tcp->m_nb_mcc_records = 0;
+                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read MCC marker\n");
                 return OPJ_FALSE;
+            }
+            l_tcp->m_mcc_records = new_mcc_records;
+            l_mcc_record = l_tcp->m_mcc_records + l_tcp->m_nb_mcc_records;
+            memset(l_mcc_record, 0, (l_tcp->m_nb_max_mcc_records - l_tcp->m_nb_mcc_records)
+                   * sizeof(opj_simple_mcc_decorrelation_data_t));
         }
+        l_mcc_record = l_tcp->m_mcc_records + l_tcp->m_nb_mcc_records;
+        l_new_mcc = OPJ_TRUE;
+    }
+    l_mcc_record->m_index = l_indix;
 
-        opj_read_bytes(p_header_data,&l_indix,1); /* Imcc -> no need for other values, take the first */
-        ++p_header_data;
-
-        l_mcc_record = l_tcp->m_mcc_records;
+    /* only one marker atm */
+    opj_read_bytes(p_header_data, &l_tmp, 2);                       /* Ymcc */
+    p_header_data += 2;
+    if (l_tmp != 0) {
+        opj_event_msg(p_manager, EVT_WARNING,
+                      "Cannot take in charge multiple data spanning\n");
+        return OPJ_TRUE;
+    }
 
-        for(i=0;i<l_tcp->m_nb_mcc_records;++i) {
-                if (l_mcc_record->m_index == l_indix) {
-                        break;
-                }
-                ++l_mcc_record;
-        }
-
-        /** NOT FOUND */
-        if (i == l_tcp->m_nb_mcc_records) {
-                if (l_tcp->m_nb_mcc_records == l_tcp->m_nb_max_mcc_records) {
-                        opj_simple_mcc_decorrelation_data_t *new_mcc_records;
-                        l_tcp->m_nb_max_mcc_records += OPJ_J2K_MCC_DEFAULT_NB_RECORDS;
-
-                        new_mcc_records = (opj_simple_mcc_decorrelation_data_t *) opj_realloc(
-                                        l_tcp->m_mcc_records, l_tcp->m_nb_max_mcc_records * sizeof(opj_simple_mcc_decorrelation_data_t));
-                        if (! new_mcc_records) {
-                                opj_free(l_tcp->m_mcc_records);
-                                l_tcp->m_mcc_records = NULL;
-                                l_tcp->m_nb_max_mcc_records = 0;
-                                l_tcp->m_nb_mcc_records = 0;
-                                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read MCC marker\n");
-                                return OPJ_FALSE;
-                        }
-                        l_tcp->m_mcc_records = new_mcc_records;
-                        l_mcc_record = l_tcp->m_mcc_records + l_tcp->m_nb_mcc_records;
-                        memset(l_mcc_record,0,(l_tcp->m_nb_max_mcc_records-l_tcp->m_nb_mcc_records) * sizeof(opj_simple_mcc_decorrelation_data_t));
-                }
-                l_mcc_record = l_tcp->m_mcc_records + l_tcp->m_nb_mcc_records;
-                l_new_mcc = OPJ_TRUE;
-        }
-        l_mcc_record->m_index = l_indix;
+    opj_read_bytes(p_header_data, &l_nb_collections,
+                   2);                              /* Qmcc -> number of collections -> 1 */
+    p_header_data += 2;
 
-        /* only one marker atm */
-        opj_read_bytes(p_header_data,&l_tmp,2);                         /* Ymcc */
-        p_header_data+=2;
-        if (l_tmp != 0) {
-                opj_event_msg(p_manager, EVT_WARNING, "Cannot take in charge multiple data spanning\n");
-                return OPJ_TRUE;
-        }
+    if (l_nb_collections > 1) {
+        opj_event_msg(p_manager, EVT_WARNING,
+                      "Cannot take in charge multiple collections\n");
+        return OPJ_TRUE;
+    }
 
-        opj_read_bytes(p_header_data,&l_nb_collections,2);                              /* Qmcc -> number of collections -> 1 */
-        p_header_data+=2;
+    p_header_size -= 7;
 
-        if (l_nb_collections > 1) {
-                opj_event_msg(p_manager, EVT_WARNING, "Cannot take in charge multiple collections\n");
-                return OPJ_TRUE;
+    for (i = 0; i < l_nb_collections; ++i) {
+        if (p_header_size < 3) {
+            opj_event_msg(p_manager, EVT_ERROR, "Error reading MCC marker\n");
+            return OPJ_FALSE;
         }
 
-        p_header_size -= 7;
-
-        for (i=0;i<l_nb_collections;++i) {
-                if (p_header_size < 3) {
-                        opj_event_msg(p_manager, EVT_ERROR, "Error reading MCC marker\n");
-                        return OPJ_FALSE;
-                }
+        opj_read_bytes(p_header_data, &l_tmp,
+                       1); /* Xmcci type of component transformation -> array based decorrelation */
+        ++p_header_data;
 
-                opj_read_bytes(p_header_data,&l_tmp,1); /* Xmcci type of component transformation -> array based decorrelation */
-                ++p_header_data;
+        if (l_tmp != 1) {
+            opj_event_msg(p_manager, EVT_WARNING,
+                          "Cannot take in charge collections other than array decorrelation\n");
+            return OPJ_TRUE;
+        }
 
-                if (l_tmp != 1) {
-                        opj_event_msg(p_manager, EVT_WARNING, "Cannot take in charge collections other than array decorrelation\n");
-                        return OPJ_TRUE;
-                }
+        opj_read_bytes(p_header_data, &l_nb_comps, 2);
 
-                opj_read_bytes(p_header_data,&l_nb_comps,2);
+        p_header_data += 2;
+        p_header_size -= 3;
 
-                p_header_data+=2;
-                p_header_size-=3;
+        l_nb_bytes_by_comp = 1 + (l_nb_comps >> 15);
+        l_mcc_record->m_nb_comps = l_nb_comps & 0x7fff;
 
-                l_nb_bytes_by_comp = 1 + (l_nb_comps>>15);
-                l_mcc_record->m_nb_comps = l_nb_comps & 0x7fff;
+        if (p_header_size < (l_nb_bytes_by_comp * l_mcc_record->m_nb_comps + 2)) {
+            opj_event_msg(p_manager, EVT_ERROR, "Error reading MCC marker\n");
+            return OPJ_FALSE;
+        }
 
-                if (p_header_size < (l_nb_bytes_by_comp * l_mcc_record->m_nb_comps + 2)) {
-                        opj_event_msg(p_manager, EVT_ERROR, "Error reading MCC marker\n");
-                        return OPJ_FALSE;
-                }
+        p_header_size -= (l_nb_bytes_by_comp * l_mcc_record->m_nb_comps + 2);
 
-                p_header_size -= (l_nb_bytes_by_comp * l_mcc_record->m_nb_comps + 2);
+        for (j = 0; j < l_mcc_record->m_nb_comps; ++j) {
+            opj_read_bytes(p_header_data, &l_tmp,
+                           l_nb_bytes_by_comp);      /* Cmccij Component offset*/
+            p_header_data += l_nb_bytes_by_comp;
 
-                for (j=0;j<l_mcc_record->m_nb_comps;++j) {
-                        opj_read_bytes(p_header_data,&l_tmp,l_nb_bytes_by_comp);        /* Cmccij Component offset*/
-                        p_header_data+=l_nb_bytes_by_comp;
+            if (l_tmp != j) {
+                opj_event_msg(p_manager, EVT_WARNING,
+                              "Cannot take in charge collections with indix shuffle\n");
+                return OPJ_TRUE;
+            }
+        }
 
-                        if (l_tmp != j) {
-                                opj_event_msg(p_manager, EVT_WARNING, "Cannot take in charge collections with indix shuffle\n");
-                                return OPJ_TRUE;
-                        }
-                }
+        opj_read_bytes(p_header_data, &l_nb_comps, 2);
+        p_header_data += 2;
 
-                opj_read_bytes(p_header_data,&l_nb_comps,2);
-                p_header_data+=2;
+        l_nb_bytes_by_comp = 1 + (l_nb_comps >> 15);
+        l_nb_comps &= 0x7fff;
 
-                l_nb_bytes_by_comp = 1 + (l_nb_comps>>15);
-                l_nb_comps &= 0x7fff;
+        if (l_nb_comps != l_mcc_record->m_nb_comps) {
+            opj_event_msg(p_manager, EVT_WARNING,
+                          "Cannot take in charge collections without same number of indixes\n");
+            return OPJ_TRUE;
+        }
 
-                if (l_nb_comps != l_mcc_record->m_nb_comps) {
-                        opj_event_msg(p_manager, EVT_WARNING, "Cannot take in charge collections without same number of indixes\n");
-                        return OPJ_TRUE;
-                }
+        if (p_header_size < (l_nb_bytes_by_comp * l_mcc_record->m_nb_comps + 3)) {
+            opj_event_msg(p_manager, EVT_ERROR, "Error reading MCC marker\n");
+            return OPJ_FALSE;
+        }
 
-                if (p_header_size < (l_nb_bytes_by_comp * l_mcc_record->m_nb_comps + 3)) {
-                        opj_event_msg(p_manager, EVT_ERROR, "Error reading MCC marker\n");
-                        return OPJ_FALSE;
-                }
+        p_header_size -= (l_nb_bytes_by_comp * l_mcc_record->m_nb_comps + 3);
 
-                p_header_size -= (l_nb_bytes_by_comp * l_mcc_record->m_nb_comps + 3);
+        for (j = 0; j < l_mcc_record->m_nb_comps; ++j) {
+            opj_read_bytes(p_header_data, &l_tmp,
+                           l_nb_bytes_by_comp);      /* Wmccij Component offset*/
+            p_header_data += l_nb_bytes_by_comp;
 
-                for (j=0;j<l_mcc_record->m_nb_comps;++j) {
-                        opj_read_bytes(p_header_data,&l_tmp,l_nb_bytes_by_comp);        /* Wmccij Component offset*/
-                        p_header_data+=l_nb_bytes_by_comp;
+            if (l_tmp != j) {
+                opj_event_msg(p_manager, EVT_WARNING,
+                              "Cannot take in charge collections with indix shuffle\n");
+                return OPJ_TRUE;
+            }
+        }
 
-                        if (l_tmp != j) {
-                                opj_event_msg(p_manager, EVT_WARNING, "Cannot take in charge collections with indix shuffle\n");
-                                return OPJ_TRUE;
-                        }
-                }
+        opj_read_bytes(p_header_data, &l_tmp, 3); /* Wmccij Component offset*/
+        p_header_data += 3;
 
-                opj_read_bytes(p_header_data,&l_tmp,3); /* Wmccij Component offset*/
-                p_header_data += 3;
-
-                l_mcc_record->m_is_irreversible = ! ((l_tmp>>16) & 1);
-                l_mcc_record->m_decorrelation_array = 00;
-                l_mcc_record->m_offset_array = 00;
-
-                l_indix = l_tmp & 0xff;
-                if (l_indix != 0) {
-                        l_mct_data = l_tcp->m_mct_records;
-                        for (j=0;j<l_tcp->m_nb_mct_records;++j) {
-                                if (l_mct_data->m_index == l_indix) {
-                                        l_mcc_record->m_decorrelation_array = l_mct_data;
-                                        break;
-                                }
-                                ++l_mct_data;
-                        }
+        l_mcc_record->m_is_irreversible = !((l_tmp >> 16) & 1);
+        l_mcc_record->m_decorrelation_array = 00;
+        l_mcc_record->m_offset_array = 00;
 
-                        if (l_mcc_record->m_decorrelation_array == 00) {
-                                opj_event_msg(p_manager, EVT_ERROR, "Error reading MCC marker\n");
-                                return OPJ_FALSE;
-                        }
+        l_indix = l_tmp & 0xff;
+        if (l_indix != 0) {
+            l_mct_data = l_tcp->m_mct_records;
+            for (j = 0; j < l_tcp->m_nb_mct_records; ++j) {
+                if (l_mct_data->m_index == l_indix) {
+                    l_mcc_record->m_decorrelation_array = l_mct_data;
+                    break;
                 }
+                ++l_mct_data;
+            }
 
-                l_indix = (l_tmp >> 8) & 0xff;
-                if (l_indix != 0) {
-                        l_mct_data = l_tcp->m_mct_records;
-                        for (j=0;j<l_tcp->m_nb_mct_records;++j) {
-                                if (l_mct_data->m_index == l_indix) {
-                                        l_mcc_record->m_offset_array = l_mct_data;
-                                        break;
-                                }
-                                ++l_mct_data;
-                        }
+            if (l_mcc_record->m_decorrelation_array == 00) {
+                opj_event_msg(p_manager, EVT_ERROR, "Error reading MCC marker\n");
+                return OPJ_FALSE;
+            }
+        }
 
-                        if (l_mcc_record->m_offset_array == 00) {
-                                opj_event_msg(p_manager, EVT_ERROR, "Error reading MCC marker\n");
-                                return OPJ_FALSE;
-                        }
+        l_indix = (l_tmp >> 8) & 0xff;
+        if (l_indix != 0) {
+            l_mct_data = l_tcp->m_mct_records;
+            for (j = 0; j < l_tcp->m_nb_mct_records; ++j) {
+                if (l_mct_data->m_index == l_indix) {
+                    l_mcc_record->m_offset_array = l_mct_data;
+                    break;
                 }
-        }
+                ++l_mct_data;
+            }
 
-        if (p_header_size != 0) {
+            if (l_mcc_record->m_offset_array == 00) {
                 opj_event_msg(p_manager, EVT_ERROR, "Error reading MCC marker\n");
                 return OPJ_FALSE;
+            }
         }
+    }
 
-        if (l_new_mcc) {
-                ++l_tcp->m_nb_mcc_records;
-        }
+    if (p_header_size != 0) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading MCC marker\n");
+        return OPJ_FALSE;
+    }
 
-        return OPJ_TRUE;
+    if (l_new_mcc) {
+        ++l_tcp->m_nb_mcc_records;
+    }
+
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_write_mco(     opj_j2k_t *p_j2k,
-                                                struct opj_stream_private *p_stream,
-                                                struct opj_event_mgr * p_manager
-                                  )
+static OPJ_BOOL opj_j2k_write_mco(opj_j2k_t *p_j2k,
+                                  struct opj_stream_private *p_stream,
+                                  struct opj_event_mgr * p_manager
+                                 )
 {
-        OPJ_BYTE * l_current_data = 00;
-        OPJ_UINT32 l_mco_size;
-        opj_tcp_t * l_tcp = 00;
-        opj_simple_mcc_decorrelation_data_t * l_mcc_record;
-        OPJ_UINT32 i;
+    OPJ_BYTE * l_current_data = 00;
+    OPJ_UINT32 l_mco_size;
+    opj_tcp_t * l_tcp = 00;
+    opj_simple_mcc_decorrelation_data_t * l_mcc_record;
+    OPJ_UINT32 i;
 
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
-
-        l_tcp =&(p_j2k->m_cp.tcps[p_j2k->m_current_tile_number]);
-       
-        l_mco_size = 5 + l_tcp->m_nb_mcc_records;
-        if (l_mco_size > p_j2k->m_specific_param.m_encoder.m_header_tile_data_size) {
-
-                OPJ_BYTE *new_header_tile_data = (OPJ_BYTE *) opj_realloc(p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_mco_size);
-                if (! new_header_tile_data) {
-                        opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data = NULL;
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
-                        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to write MCO marker\n");
-                        return OPJ_FALSE;
-                }
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data;
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_mco_size;
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
+
+    l_tcp = &(p_j2k->m_cp.tcps[p_j2k->m_current_tile_number]);
+
+    l_mco_size = 5 + l_tcp->m_nb_mcc_records;
+    if (l_mco_size > p_j2k->m_specific_param.m_encoder.m_header_tile_data_size) {
+
+        OPJ_BYTE *new_header_tile_data = (OPJ_BYTE *) opj_realloc(
+                                             p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_mco_size);
+        if (! new_header_tile_data) {
+            opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data = NULL;
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
+            opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to write MCO marker\n");
+            return OPJ_FALSE;
         }
-        l_current_data = p_j2k->m_specific_param.m_encoder.m_header_tile_data;
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data;
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_mco_size;
+    }
+    l_current_data = p_j2k->m_specific_param.m_encoder.m_header_tile_data;
 
 
-        opj_write_bytes(l_current_data,J2K_MS_MCO,2);                   /* MCO */
-        l_current_data += 2;
+    opj_write_bytes(l_current_data, J2K_MS_MCO, 2);                 /* MCO */
+    l_current_data += 2;
 
-        opj_write_bytes(l_current_data,l_mco_size-2,2);                 /* Lmco */
-        l_current_data += 2;
+    opj_write_bytes(l_current_data, l_mco_size - 2, 2);             /* Lmco */
+    l_current_data += 2;
 
-        opj_write_bytes(l_current_data,l_tcp->m_nb_mcc_records,1);      /* Nmco : only one transform stage*/
-        ++l_current_data;
+    opj_write_bytes(l_current_data, l_tcp->m_nb_mcc_records,
+                    1);    /* Nmco : only one transform stage*/
+    ++l_current_data;
 
-        l_mcc_record = l_tcp->m_mcc_records;
-        for (i=0;i<l_tcp->m_nb_mcc_records;++i) {
-                opj_write_bytes(l_current_data,l_mcc_record->m_index,1);/* Imco -> use the mcc indicated by 1*/
-                ++l_current_data;
-                ++l_mcc_record;
-        }
+    l_mcc_record = l_tcp->m_mcc_records;
+    for (i = 0; i < l_tcp->m_nb_mcc_records; ++i) {
+        opj_write_bytes(l_current_data, l_mcc_record->m_index,
+                        1); /* Imco -> use the mcc indicated by 1*/
+        ++l_current_data;
+        ++l_mcc_record;
+    }
 
-        if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_header_tile_data,l_mco_size,p_manager) != l_mco_size) {
-                return OPJ_FALSE;
-        }
+    if (opj_stream_write_data(p_stream,
+                              p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_mco_size,
+                              p_manager) != l_mco_size) {
+        return OPJ_FALSE;
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 /**
@@ -5676,208 +5957,219 @@ static OPJ_BOOL opj_j2k_write_mco(     opj_j2k_t *p_j2k,
  * @param       p_header_size   the size of the data contained in the MCO marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_mco (      opj_j2k_t *p_j2k,
-                                                                    OPJ_BYTE * p_header_data,
-                                                                    OPJ_UINT32 p_header_size,
-                                                                    opj_event_mgr_t * p_manager
-                                    )
+static OPJ_BOOL opj_j2k_read_mco(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager
+                                )
 {
-        OPJ_UINT32 l_tmp, i;
-        OPJ_UINT32 l_nb_stages;
-        opj_tcp_t * l_tcp;
-        opj_tccp_t * l_tccp;
-        opj_image_t * l_image;
+    OPJ_UINT32 l_tmp, i;
+    OPJ_UINT32 l_nb_stages;
+    opj_tcp_t * l_tcp;
+    opj_tccp_t * l_tccp;
+    opj_image_t * l_image;
 
-        /* preconditions */
-        assert(p_header_data != 00);
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
+    /* preconditions */
+    assert(p_header_data != 00);
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-        l_image = p_j2k->m_private_image;
-        l_tcp = p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_TPH ?
-                        &p_j2k->m_cp.tcps[p_j2k->m_current_tile_number] :
-                        p_j2k->m_specific_param.m_decoder.m_default_tcp;
+    l_image = p_j2k->m_private_image;
+    l_tcp = p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_TPH ?
+            &p_j2k->m_cp.tcps[p_j2k->m_current_tile_number] :
+            p_j2k->m_specific_param.m_decoder.m_default_tcp;
 
-        if (p_header_size < 1) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading MCO marker\n");
-                return OPJ_FALSE;
-        }
+    if (p_header_size < 1) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading MCO marker\n");
+        return OPJ_FALSE;
+    }
 
-        opj_read_bytes(p_header_data,&l_nb_stages,1);                           /* Nmco : only one transform stage*/
-        ++p_header_data;
+    opj_read_bytes(p_header_data, &l_nb_stages,
+                   1);                         /* Nmco : only one transform stage*/
+    ++p_header_data;
 
-        if (l_nb_stages > 1) {
-                opj_event_msg(p_manager, EVT_WARNING, "Cannot take in charge multiple transformation stages.\n");
-                return OPJ_TRUE;
-        }
+    if (l_nb_stages > 1) {
+        opj_event_msg(p_manager, EVT_WARNING,
+                      "Cannot take in charge multiple transformation stages.\n");
+        return OPJ_TRUE;
+    }
 
-        if (p_header_size != l_nb_stages + 1) {
-                opj_event_msg(p_manager, EVT_WARNING, "Error reading MCO marker\n");
-                return OPJ_FALSE;
-        }
+    if (p_header_size != l_nb_stages + 1) {
+        opj_event_msg(p_manager, EVT_WARNING, "Error reading MCO marker\n");
+        return OPJ_FALSE;
+    }
 
-        l_tccp = l_tcp->tccps;
+    l_tccp = l_tcp->tccps;
 
-        for (i=0;i<l_image->numcomps;++i) {
-                l_tccp->m_dc_level_shift = 0;
-                ++l_tccp;
-        }
+    for (i = 0; i < l_image->numcomps; ++i) {
+        l_tccp->m_dc_level_shift = 0;
+        ++l_tccp;
+    }
 
-        if (l_tcp->m_mct_decoding_matrix) {
-                opj_free(l_tcp->m_mct_decoding_matrix);
-                l_tcp->m_mct_decoding_matrix = 00;
-        }
+    if (l_tcp->m_mct_decoding_matrix) {
+        opj_free(l_tcp->m_mct_decoding_matrix);
+        l_tcp->m_mct_decoding_matrix = 00;
+    }
 
-        for (i=0;i<l_nb_stages;++i) {
-                opj_read_bytes(p_header_data,&l_tmp,1);
-                ++p_header_data;
+    for (i = 0; i < l_nb_stages; ++i) {
+        opj_read_bytes(p_header_data, &l_tmp, 1);
+        ++p_header_data;
 
-                if (! opj_j2k_add_mct(l_tcp,p_j2k->m_private_image,l_tmp)) {
-                        return OPJ_FALSE;
-                }
+        if (! opj_j2k_add_mct(l_tcp, p_j2k->m_private_image, l_tmp)) {
+            return OPJ_FALSE;
         }
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_add_mct(opj_tcp_t * p_tcp, opj_image_t * p_image, OPJ_UINT32 p_index)
+static OPJ_BOOL opj_j2k_add_mct(opj_tcp_t * p_tcp, opj_image_t * p_image,
+                                OPJ_UINT32 p_index)
 {
-        OPJ_UINT32 i;
-        opj_simple_mcc_decorrelation_data_t * l_mcc_record;
-        opj_mct_data_t * l_deco_array, * l_offset_array;
-        OPJ_UINT32 l_data_size,l_mct_size, l_offset_size;
-        OPJ_UINT32 l_nb_elem;
-        OPJ_UINT32 * l_offset_data, * l_current_offset_data;
-        opj_tccp_t * l_tccp;
-
-        /* preconditions */
-        assert(p_tcp != 00);
+    OPJ_UINT32 i;
+    opj_simple_mcc_decorrelation_data_t * l_mcc_record;
+    opj_mct_data_t * l_deco_array, * l_offset_array;
+    OPJ_UINT32 l_data_size, l_mct_size, l_offset_size;
+    OPJ_UINT32 l_nb_elem;
+    OPJ_UINT32 * l_offset_data, * l_current_offset_data;
+    opj_tccp_t * l_tccp;
 
-        l_mcc_record = p_tcp->m_mcc_records;
+    /* preconditions */
+    assert(p_tcp != 00);
 
-        for (i=0;i<p_tcp->m_nb_mcc_records;++i) {
-                if (l_mcc_record->m_index == p_index) {
-                        break;
-                }
-        }
+    l_mcc_record = p_tcp->m_mcc_records;
 
-        if (i==p_tcp->m_nb_mcc_records) {
-                /** element discarded **/
-                return OPJ_TRUE;
+    for (i = 0; i < p_tcp->m_nb_mcc_records; ++i) {
+        if (l_mcc_record->m_index == p_index) {
+            break;
         }
+    }
 
-        if (l_mcc_record->m_nb_comps != p_image->numcomps) {
-                /** do not support number of comps != image */
-                return OPJ_TRUE;
-        }
+    if (i == p_tcp->m_nb_mcc_records) {
+        /** element discarded **/
+        return OPJ_TRUE;
+    }
 
-        l_deco_array = l_mcc_record->m_decorrelation_array;
+    if (l_mcc_record->m_nb_comps != p_image->numcomps) {
+        /** do not support number of comps != image */
+        return OPJ_TRUE;
+    }
 
-        if (l_deco_array) {
-                l_data_size = MCT_ELEMENT_SIZE[l_deco_array->m_element_type] * p_image->numcomps * p_image->numcomps;
-                if (l_deco_array->m_data_size != l_data_size) {
-                        return OPJ_FALSE;
-                }
+    l_deco_array = l_mcc_record->m_decorrelation_array;
 
-                l_nb_elem = p_image->numcomps * p_image->numcomps;
-                l_mct_size = l_nb_elem * (OPJ_UINT32)sizeof(OPJ_FLOAT32);
-                p_tcp->m_mct_decoding_matrix = (OPJ_FLOAT32*)opj_malloc(l_mct_size);
+    if (l_deco_array) {
+        l_data_size = MCT_ELEMENT_SIZE[l_deco_array->m_element_type] * p_image->numcomps
+                      * p_image->numcomps;
+        if (l_deco_array->m_data_size != l_data_size) {
+            return OPJ_FALSE;
+        }
 
-                if (! p_tcp->m_mct_decoding_matrix ) {
-                        return OPJ_FALSE;
-                }
+        l_nb_elem = p_image->numcomps * p_image->numcomps;
+        l_mct_size = l_nb_elem * (OPJ_UINT32)sizeof(OPJ_FLOAT32);
+        p_tcp->m_mct_decoding_matrix = (OPJ_FLOAT32*)opj_malloc(l_mct_size);
 
-                j2k_mct_read_functions_to_float[l_deco_array->m_element_type](l_deco_array->m_data,p_tcp->m_mct_decoding_matrix,l_nb_elem);
+        if (! p_tcp->m_mct_decoding_matrix) {
+            return OPJ_FALSE;
         }
 
-        l_offset_array = l_mcc_record->m_offset_array;
+        j2k_mct_read_functions_to_float[l_deco_array->m_element_type](
+            l_deco_array->m_data, p_tcp->m_mct_decoding_matrix, l_nb_elem);
+    }
 
-        if (l_offset_array) {
-                l_data_size = MCT_ELEMENT_SIZE[l_offset_array->m_element_type] * p_image->numcomps;
-                if (l_offset_array->m_data_size != l_data_size) {
-                        return OPJ_FALSE;
-                }
+    l_offset_array = l_mcc_record->m_offset_array;
 
-                l_nb_elem = p_image->numcomps;
-                l_offset_size = l_nb_elem * (OPJ_UINT32)sizeof(OPJ_UINT32);
-                l_offset_data = (OPJ_UINT32*)opj_malloc(l_offset_size);
+    if (l_offset_array) {
+        l_data_size = MCT_ELEMENT_SIZE[l_offset_array->m_element_type] *
+                      p_image->numcomps;
+        if (l_offset_array->m_data_size != l_data_size) {
+            return OPJ_FALSE;
+        }
 
-                if (! l_offset_data ) {
-                        return OPJ_FALSE;
-                }
+        l_nb_elem = p_image->numcomps;
+        l_offset_size = l_nb_elem * (OPJ_UINT32)sizeof(OPJ_UINT32);
+        l_offset_data = (OPJ_UINT32*)opj_malloc(l_offset_size);
 
-                j2k_mct_read_functions_to_int32[l_offset_array->m_element_type](l_offset_array->m_data,l_offset_data,l_nb_elem);
+        if (! l_offset_data) {
+            return OPJ_FALSE;
+        }
 
-                l_tccp = p_tcp->tccps;
-                l_current_offset_data = l_offset_data;
+        j2k_mct_read_functions_to_int32[l_offset_array->m_element_type](
+            l_offset_array->m_data, l_offset_data, l_nb_elem);
 
-                for (i=0;i<p_image->numcomps;++i) {
-                        l_tccp->m_dc_level_shift = (OPJ_INT32)*(l_current_offset_data++);
-                        ++l_tccp;
-                }
+        l_tccp = p_tcp->tccps;
+        l_current_offset_data = l_offset_data;
 
-                opj_free(l_offset_data);
+        for (i = 0; i < p_image->numcomps; ++i) {
+            l_tccp->m_dc_level_shift = (OPJ_INT32) * (l_current_offset_data++);
+            ++l_tccp;
         }
 
-        return OPJ_TRUE;
+        opj_free(l_offset_data);
+    }
+
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_write_cbd( opj_j2k_t *p_j2k,
-                                                struct opj_stream_private *p_stream,
-                                                struct opj_event_mgr * p_manager )
+static OPJ_BOOL opj_j2k_write_cbd(opj_j2k_t *p_j2k,
+                                  struct opj_stream_private *p_stream,
+                                  struct opj_event_mgr * p_manager)
 {
-        OPJ_UINT32 i;
-        OPJ_UINT32 l_cbd_size;
-        OPJ_BYTE * l_current_data = 00;
-        opj_image_t *l_image = 00;
-        opj_image_comp_t * l_comp = 00;
-
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
-
-        l_image = p_j2k->m_private_image;
-        l_cbd_size = 6 + p_j2k->m_private_image->numcomps;
-
-        if (l_cbd_size > p_j2k->m_specific_param.m_encoder.m_header_tile_data_size) {
-                OPJ_BYTE *new_header_tile_data = (OPJ_BYTE *) opj_realloc(p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_cbd_size);
-                if (! new_header_tile_data) {
-                        opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data = NULL;
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
-                        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to write CBD marker\n");
-                        return OPJ_FALSE;
-                }
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data;
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_cbd_size;
+    OPJ_UINT32 i;
+    OPJ_UINT32 l_cbd_size;
+    OPJ_BYTE * l_current_data = 00;
+    opj_image_t *l_image = 00;
+    opj_image_comp_t * l_comp = 00;
+
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
+
+    l_image = p_j2k->m_private_image;
+    l_cbd_size = 6 + p_j2k->m_private_image->numcomps;
+
+    if (l_cbd_size > p_j2k->m_specific_param.m_encoder.m_header_tile_data_size) {
+        OPJ_BYTE *new_header_tile_data = (OPJ_BYTE *) opj_realloc(
+                                             p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_cbd_size);
+        if (! new_header_tile_data) {
+            opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data = NULL;
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
+            opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to write CBD marker\n");
+            return OPJ_FALSE;
         }
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data;
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_cbd_size;
+    }
 
-        l_current_data = p_j2k->m_specific_param.m_encoder.m_header_tile_data;
+    l_current_data = p_j2k->m_specific_param.m_encoder.m_header_tile_data;
 
-        opj_write_bytes(l_current_data,J2K_MS_CBD,2);                   /* CBD */
-        l_current_data += 2;
+    opj_write_bytes(l_current_data, J2K_MS_CBD, 2);                 /* CBD */
+    l_current_data += 2;
 
-        opj_write_bytes(l_current_data,l_cbd_size-2,2);                 /* L_CBD */
-        l_current_data += 2;
+    opj_write_bytes(l_current_data, l_cbd_size - 2, 2);             /* L_CBD */
+    l_current_data += 2;
 
-        opj_write_bytes(l_current_data,l_image->numcomps, 2);           /* Ncbd */
-        l_current_data+=2;
+    opj_write_bytes(l_current_data, l_image->numcomps, 2);          /* Ncbd */
+    l_current_data += 2;
 
-        l_comp = l_image->comps;
+    l_comp = l_image->comps;
 
-        for (i=0;i<l_image->numcomps;++i) {
-                opj_write_bytes(l_current_data, (l_comp->sgnd << 7) | (l_comp->prec - 1), 1);           /* Component bit depth */
-                ++l_current_data;
+    for (i = 0; i < l_image->numcomps; ++i) {
+        opj_write_bytes(l_current_data, (l_comp->sgnd << 7) | (l_comp->prec - 1),
+                        1);           /* Component bit depth */
+        ++l_current_data;
 
-                ++l_comp;
-        }
+        ++l_comp;
+    }
 
-        if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_header_tile_data,l_cbd_size,p_manager) != l_cbd_size) {
-                return OPJ_FALSE;
-        }
+    if (opj_stream_write_data(p_stream,
+                              p_j2k->m_specific_param.m_encoder.m_header_tile_data, l_cbd_size,
+                              p_manager) != l_cbd_size) {
+        return OPJ_FALSE;
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 /**
@@ -5887,47 +6179,49 @@ static OPJ_BOOL opj_j2k_write_cbd( opj_j2k_t *p_j2k,
  * @param       p_header_size   the size of the data contained in the CBD marker.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_read_cbd (      opj_j2k_t *p_j2k,
-                                                                OPJ_BYTE * p_header_data,
-                                                                OPJ_UINT32 p_header_size,
-                                                                opj_event_mgr_t * p_manager
-                                    )
+static OPJ_BOOL opj_j2k_read_cbd(opj_j2k_t *p_j2k,
+                                 OPJ_BYTE * p_header_data,
+                                 OPJ_UINT32 p_header_size,
+                                 opj_event_mgr_t * p_manager
+                                )
 {
-        OPJ_UINT32 l_nb_comp,l_num_comp;
-        OPJ_UINT32 l_comp_def;
-        OPJ_UINT32 i;
-        opj_image_comp_t * l_comp = 00;
+    OPJ_UINT32 l_nb_comp, l_num_comp;
+    OPJ_UINT32 l_comp_def;
+    OPJ_UINT32 i;
+    opj_image_comp_t * l_comp = 00;
 
-        /* preconditions */
-        assert(p_header_data != 00);
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
+    /* preconditions */
+    assert(p_header_data != 00);
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-        l_num_comp = p_j2k->m_private_image->numcomps;
+    l_num_comp = p_j2k->m_private_image->numcomps;
 
-        if (p_header_size != (p_j2k->m_private_image->numcomps + 2)) {
-                opj_event_msg(p_manager, EVT_ERROR, "Crror reading CBD marker\n");
-                return OPJ_FALSE;
-        }
+    if (p_header_size != (p_j2k->m_private_image->numcomps + 2)) {
+        opj_event_msg(p_manager, EVT_ERROR, "Crror reading CBD marker\n");
+        return OPJ_FALSE;
+    }
 
-        opj_read_bytes(p_header_data,&l_nb_comp,2);                             /* Ncbd */
-        p_header_data+=2;
+    opj_read_bytes(p_header_data, &l_nb_comp,
+                   2);                           /* Ncbd */
+    p_header_data += 2;
 
-        if (l_nb_comp != l_num_comp) {
-                opj_event_msg(p_manager, EVT_ERROR, "Crror reading CBD marker\n");
-                return OPJ_FALSE;
-        }
+    if (l_nb_comp != l_num_comp) {
+        opj_event_msg(p_manager, EVT_ERROR, "Crror reading CBD marker\n");
+        return OPJ_FALSE;
+    }
 
-        l_comp = p_j2k->m_private_image->comps;
-        for (i=0;i<l_num_comp;++i) {
-                opj_read_bytes(p_header_data,&l_comp_def,1);                    /* Component bit depth */
-                ++p_header_data;
-        l_comp->sgnd = (l_comp_def>>7) & 1;
-                l_comp->prec = (l_comp_def&0x7f) + 1;
-                ++l_comp;
-        }
+    l_comp = p_j2k->m_private_image->comps;
+    for (i = 0; i < l_num_comp; ++i) {
+        opj_read_bytes(p_header_data, &l_comp_def,
+                       1);                  /* Component bit depth */
+        ++p_header_data;
+        l_comp->sgnd = (l_comp_def >> 7) & 1;
+        l_comp->prec = (l_comp_def & 0x7f) + 1;
+        ++l_comp;
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 /* ----------------------------------------------------------------------- */
@@ -5936,44 +6230,44 @@ static OPJ_BOOL opj_j2k_read_cbd (      opj_j2k_t *p_j2k,
 
 void opj_j2k_setup_decoder(opj_j2k_t *j2k, opj_dparameters_t *parameters)
 {
-        if(j2k && parameters) {
-                j2k->m_cp.m_specific_param.m_dec.m_layer = parameters->cp_layer;
-                j2k->m_cp.m_specific_param.m_dec.m_reduce = parameters->cp_reduce;
+    if (j2k && parameters) {
+        j2k->m_cp.m_specific_param.m_dec.m_layer = parameters->cp_layer;
+        j2k->m_cp.m_specific_param.m_dec.m_reduce = parameters->cp_reduce;
 
 #ifdef USE_JPWL
-                j2k->m_cp.correct = parameters->jpwl_correct;
-                j2k->m_cp.exp_comps = parameters->jpwl_exp_comps;
-                j2k->m_cp.max_tiles = parameters->jpwl_max_tiles;
+        j2k->m_cp.correct = parameters->jpwl_correct;
+        j2k->m_cp.exp_comps = parameters->jpwl_exp_comps;
+        j2k->m_cp.max_tiles = parameters->jpwl_max_tiles;
 #endif /* USE_JPWL */
-        }
+    }
 }
 
 OPJ_BOOL opj_j2k_set_threads(opj_j2k_t *j2k, OPJ_UINT32 num_threads)
 {
-        if( opj_has_thread_support() )
-        {
-            opj_thread_pool_destroy(j2k->m_tp);
-            j2k->m_tp = NULL;
-            if (num_threads <= (OPJ_UINT32)INT_MAX ) {
-                j2k->m_tp = opj_thread_pool_create((int)num_threads);
-            }
-            if( j2k->m_tp == NULL )
-            {
-                j2k->m_tp = opj_thread_pool_create(0);
-                return OPJ_FALSE;
-            }
-            return OPJ_TRUE;
+    if (opj_has_thread_support()) {
+        opj_thread_pool_destroy(j2k->m_tp);
+        j2k->m_tp = NULL;
+        if (num_threads <= (OPJ_UINT32)INT_MAX) {
+            j2k->m_tp = opj_thread_pool_create((int)num_threads);
         }
-        return OPJ_FALSE;
+        if (j2k->m_tp == NULL) {
+            j2k->m_tp = opj_thread_pool_create(0);
+            return OPJ_FALSE;
+        }
+        return OPJ_TRUE;
+    }
+    return OPJ_FALSE;
 }
 
 static int opj_j2k_get_default_thread_count()
 {
     const char* num_threads = getenv("OPJ_NUM_THREADS");
-    if( num_threads == NULL || !opj_has_thread_support() )
+    if (num_threads == NULL || !opj_has_thread_support()) {
         return 0;
-    if( strcmp(num_threads, "ALL_CPUS") == 0 )
+    }
+    if (strcmp(num_threads, "ALL_CPUS") == 0) {
         return opj_get_num_cpus();
+    }
     return atoi(num_threads);
 }
 
@@ -5983,61 +6277,62 @@ static int opj_j2k_get_default_thread_count()
 
 opj_j2k_t* opj_j2k_create_compress(void)
 {
-        opj_j2k_t *l_j2k = (opj_j2k_t*) opj_calloc(1,sizeof(opj_j2k_t));
-        if (!l_j2k) {
-                return NULL;
-        }
+    opj_j2k_t *l_j2k = (opj_j2k_t*) opj_calloc(1, sizeof(opj_j2k_t));
+    if (!l_j2k) {
+        return NULL;
+    }
 
 
-        l_j2k->m_is_decoder = 0;
-        l_j2k->m_cp.m_is_decoder = 0;
+    l_j2k->m_is_decoder = 0;
+    l_j2k->m_cp.m_is_decoder = 0;
 
-        l_j2k->m_specific_param.m_encoder.m_header_tile_data = (OPJ_BYTE *) opj_malloc(OPJ_J2K_DEFAULT_HEADER_SIZE);
-        if (! l_j2k->m_specific_param.m_encoder.m_header_tile_data) {
-                opj_j2k_destroy(l_j2k);
-                return NULL;
-        }
+    l_j2k->m_specific_param.m_encoder.m_header_tile_data = (OPJ_BYTE *) opj_malloc(
+                OPJ_J2K_DEFAULT_HEADER_SIZE);
+    if (! l_j2k->m_specific_param.m_encoder.m_header_tile_data) {
+        opj_j2k_destroy(l_j2k);
+        return NULL;
+    }
 
-        l_j2k->m_specific_param.m_encoder.m_header_tile_data_size = OPJ_J2K_DEFAULT_HEADER_SIZE;
+    l_j2k->m_specific_param.m_encoder.m_header_tile_data_size =
+        OPJ_J2K_DEFAULT_HEADER_SIZE;
 
-        /* validation list creation*/
-        l_j2k->m_validation_list = opj_procedure_list_create();
-        if (! l_j2k->m_validation_list) {
-                opj_j2k_destroy(l_j2k);
-                return NULL;
-        }
+    /* validation list creation*/
+    l_j2k->m_validation_list = opj_procedure_list_create();
+    if (! l_j2k->m_validation_list) {
+        opj_j2k_destroy(l_j2k);
+        return NULL;
+    }
 
-        /* execution list creation*/
-        l_j2k->m_procedure_list = opj_procedure_list_create();
-        if (! l_j2k->m_procedure_list) {
-                opj_j2k_destroy(l_j2k);
-                return NULL;
-        }
+    /* execution list creation*/
+    l_j2k->m_procedure_list = opj_procedure_list_create();
+    if (! l_j2k->m_procedure_list) {
+        opj_j2k_destroy(l_j2k);
+        return NULL;
+    }
 
-        l_j2k->m_tp = opj_thread_pool_create(opj_j2k_get_default_thread_count());
-        if( !l_j2k->m_tp )
-        {
-            l_j2k->m_tp = opj_thread_pool_create(0);
-        }
-        if( !l_j2k->m_tp )
-        {
-            opj_j2k_destroy(l_j2k);
-            return NULL;
-        }
+    l_j2k->m_tp = opj_thread_pool_create(opj_j2k_get_default_thread_count());
+    if (!l_j2k->m_tp) {
+        l_j2k->m_tp = opj_thread_pool_create(0);
+    }
+    if (!l_j2k->m_tp) {
+        opj_j2k_destroy(l_j2k);
+        return NULL;
+    }
 
-        return l_j2k;
+    return l_j2k;
 }
 
-static int opj_j2k_initialise_4K_poc(opj_poc_t *POC, int numres){
+static int opj_j2k_initialise_4K_poc(opj_poc_t *POC, int numres)
+{
     POC[0].tile  = 1;
     POC[0].resno0  = 0;
     POC[0].compno0 = 0;
     POC[0].layno1  = 1;
-    POC[0].resno1  = (OPJ_UINT32)(numres-1);
+    POC[0].resno1  = (OPJ_UINT32)(numres - 1);
     POC[0].compno1 = 3;
     POC[0].prg1 = OPJ_CPRL;
     POC[1].tile  = 1;
-    POC[1].resno0  = (OPJ_UINT32)(numres-1);
+    POC[1].resno0  = (OPJ_UINT32)(numres - 1);
     POC[1].compno0 = 0;
     POC[1].layno1  = 1;
     POC[1].resno1  = (OPJ_UINT32)numres;
@@ -6046,15 +6341,16 @@ static int opj_j2k_initialise_4K_poc(opj_poc_t *POC, int numres){
     return 2;
 }
 
-static void opj_j2k_set_cinema_parameters(opj_cparameters_t *parameters, opj_image_t *image, opj_event_mgr_t *p_manager)
+static void opj_j2k_set_cinema_parameters(opj_cparameters_t *parameters,
+        opj_image_t *image, opj_event_mgr_t *p_manager)
 {
     /* Configure cinema parameters */
     int i;
 
     /* No tiling */
     parameters->tile_size_on = OPJ_FALSE;
-    parameters->cp_tdx=1;
-    parameters->cp_tdy=1;
+    parameters->cp_tdx = 1;
+    parameters->cp_tdy = 1;
 
     /* One tile part for each component */
     parameters->tp_flag = 'C';
@@ -6084,43 +6380,44 @@ static void opj_j2k_set_cinema_parameters(opj_cparameters_t *parameters, opj_ima
     parameters->irreversible = 1;
 
     /* Number of layers */
-    if (parameters->tcp_numlayers > 1){
+    if (parameters->tcp_numlayers > 1) {
         opj_event_msg(p_manager, EVT_WARNING,
-                "JPEG 2000 Profile-3 and 4 (2k/4k dc profile) requires:\n"
-                "1 single quality layer"
-                "-> Number of layers forced to 1 (rather than %d)\n"
-                "-> Rate of the last layer (%3.1f) will be used",
-                parameters->tcp_numlayers, parameters->tcp_rates[parameters->tcp_numlayers-1]);
-        parameters->tcp_rates[0] = parameters->tcp_rates[parameters->tcp_numlayers-1];
+                      "JPEG 2000 Profile-3 and 4 (2k/4k dc profile) requires:\n"
+                      "1 single quality layer"
+                      "-> Number of layers forced to 1 (rather than %d)\n"
+                      "-> Rate of the last layer (%3.1f) will be used",
+                      parameters->tcp_numlayers,
+                      parameters->tcp_rates[parameters->tcp_numlayers - 1]);
+        parameters->tcp_rates[0] = parameters->tcp_rates[parameters->tcp_numlayers - 1];
         parameters->tcp_numlayers = 1;
     }
 
     /* Resolution levels */
-    switch (parameters->rsiz){
+    switch (parameters->rsiz) {
     case OPJ_PROFILE_CINEMA_2K:
-        if(parameters->numresolution > 6){
+        if (parameters->numresolution > 6) {
             opj_event_msg(p_manager, EVT_WARNING,
-                    "JPEG 2000 Profile-3 (2k dc profile) requires:\n"
-                    "Number of decomposition levels <= 5\n"
-                    "-> Number of decomposition levels forced to 5 (rather than %d)\n",
-                    parameters->numresolution+1);
+                          "JPEG 2000 Profile-3 (2k dc profile) requires:\n"
+                          "Number of decomposition levels <= 5\n"
+                          "-> Number of decomposition levels forced to 5 (rather than %d)\n",
+                          parameters->numresolution + 1);
             parameters->numresolution = 6;
         }
         break;
     case OPJ_PROFILE_CINEMA_4K:
-        if(parameters->numresolution < 2){
+        if (parameters->numresolution < 2) {
             opj_event_msg(p_manager, EVT_WARNING,
-                    "JPEG 2000 Profile-4 (4k dc profile) requires:\n"
-                    "Number of decomposition levels >= 1 && <= 6\n"
-                    "-> Number of decomposition levels forced to 1 (rather than %d)\n",
-                    parameters->numresolution+1);
+                          "JPEG 2000 Profile-4 (4k dc profile) requires:\n"
+                          "Number of decomposition levels >= 1 && <= 6\n"
+                          "-> Number of decomposition levels forced to 1 (rather than %d)\n",
+                          parameters->numresolution + 1);
             parameters->numresolution = 1;
-        }else if(parameters->numresolution > 7){
+        } else if (parameters->numresolution > 7) {
             opj_event_msg(p_manager, EVT_WARNING,
-                    "JPEG 2000 Profile-4 (4k dc profile) requires:\n"
-                    "Number of decomposition levels >= 1 && <= 6\n"
-                    "-> Number of decomposition levels forced to 6 (rather than %d)\n",
-                    parameters->numresolution+1);
+                          "JPEG 2000 Profile-4 (4k dc profile) requires:\n"
+                          "Number of decomposition levels >= 1 && <= 6\n"
+                          "-> Number of decomposition levels forced to 6 (rather than %d)\n",
+                          parameters->numresolution + 1);
             parameters->numresolution = 7;
         }
         break;
@@ -6130,8 +6427,8 @@ static void opj_j2k_set_cinema_parameters(opj_cparameters_t *parameters, opj_ima
 
     /* Precincts */
     parameters->csty |= 0x01;
-    parameters->res_spec = parameters->numresolution-1;
-    for (i = 0; i<parameters->res_spec; i++) {
+    parameters->res_spec = parameters->numresolution - 1;
+    for (i = 0; i < parameters->res_spec; i++) {
         parameters->prcw_init[i] = 256;
         parameters->prch_init[i] = 256;
     }
@@ -6141,7 +6438,8 @@ static void opj_j2k_set_cinema_parameters(opj_cparameters_t *parameters, opj_ima
 
     /* Progression order changes for 4K, disallowed for 2K */
     if (parameters->rsiz == OPJ_PROFILE_CINEMA_4K) {
-        parameters->numpocs = (OPJ_UINT32)opj_j2k_initialise_4K_poc(parameters->POC,parameters->numresolution);
+        parameters->numpocs = (OPJ_UINT32)opj_j2k_initialise_4K_poc(parameters->POC,
+                              parameters->numresolution);
     } else {
         parameters->numpocs = 0;
     }
@@ -6178,63 +6476,66 @@ static void opj_j2k_set_cinema_parameters(opj_cparameters_t *parameters, opj_ima
         parameters->max_comp_size = OPJ_CINEMA_24_COMP;
     }
 
-    parameters->tcp_rates[0] = (OPJ_FLOAT32) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec)/
-            (OPJ_FLOAT32)(((OPJ_UINT32)parameters->max_cs_size) * 8 * image->comps[0].dx * image->comps[0].dy);
+    parameters->tcp_rates[0] = (OPJ_FLOAT32)(image->numcomps * image->comps[0].w *
+                               image->comps[0].h * image->comps[0].prec) /
+                               (OPJ_FLOAT32)(((OPJ_UINT32)parameters->max_cs_size) * 8 * image->comps[0].dx *
+                                       image->comps[0].dy);
 
 }
 
-static OPJ_BOOL opj_j2k_is_cinema_compliant(opj_image_t *image, OPJ_UINT16 rsiz, opj_event_mgr_t *p_manager)
+static OPJ_BOOL opj_j2k_is_cinema_compliant(opj_image_t *image, OPJ_UINT16 rsiz,
+        opj_event_mgr_t *p_manager)
 {
     OPJ_UINT32 i;
 
     /* Number of components */
-    if (image->numcomps != 3){
+    if (image->numcomps != 3) {
         opj_event_msg(p_manager, EVT_WARNING,
-                "JPEG 2000 Profile-3 (2k dc profile) requires:\n"
-                "3 components"
-                "-> Number of components of input image (%d) is not compliant\n"
-                "-> Non-profile-3 codestream will be generated\n",
-                image->numcomps);
+                      "JPEG 2000 Profile-3 (2k dc profile) requires:\n"
+                      "3 components"
+                      "-> Number of components of input image (%d) is not compliant\n"
+                      "-> Non-profile-3 codestream will be generated\n",
+                      image->numcomps);
         return OPJ_FALSE;
     }
 
     /* Bitdepth */
     for (i = 0; i < image->numcomps; i++) {
-        if ((image->comps[i].bpp != 12) | (image->comps[i].sgnd)){
+        if ((image->comps[i].bpp != 12) | (image->comps[i].sgnd)) {
             char signed_str[] = "signed";
             char unsigned_str[] = "unsigned";
-            char *tmp_str = image->comps[i].sgnd?signed_str:unsigned_str;
+            char *tmp_str = image->comps[i].sgnd ? signed_str : unsigned_str;
             opj_event_msg(p_manager, EVT_WARNING,
-                    "JPEG 2000 Profile-3 (2k dc profile) requires:\n"
-                    "Precision of each component shall be 12 bits unsigned"
-                    "-> At least component %d of input image (%d bits, %s) is not compliant\n"
-                    "-> Non-profile-3 codestream will be generated\n",
-                    i,image->comps[i].bpp, tmp_str);
+                          "JPEG 2000 Profile-3 (2k dc profile) requires:\n"
+                          "Precision of each component shall be 12 bits unsigned"
+                          "-> At least component %d of input image (%d bits, %s) is not compliant\n"
+                          "-> Non-profile-3 codestream will be generated\n",
+                          i, image->comps[i].bpp, tmp_str);
             return OPJ_FALSE;
         }
     }
 
     /* Image size */
-    switch (rsiz){
+    switch (rsiz) {
     case OPJ_PROFILE_CINEMA_2K:
-        if (((image->comps[0].w > 2048) | (image->comps[0].h > 1080))){
+        if (((image->comps[0].w > 2048) | (image->comps[0].h > 1080))) {
             opj_event_msg(p_manager, EVT_WARNING,
-                    "JPEG 2000 Profile-3 (2k dc profile) requires:\n"
-                    "width <= 2048 and height <= 1080\n"
-                    "-> Input image size %d x %d is not compliant\n"
-                    "-> Non-profile-3 codestream will be generated\n",
-                    image->comps[0].w,image->comps[0].h);
+                          "JPEG 2000 Profile-3 (2k dc profile) requires:\n"
+                          "width <= 2048 and height <= 1080\n"
+                          "-> Input image size %d x %d is not compliant\n"
+                          "-> Non-profile-3 codestream will be generated\n",
+                          image->comps[0].w, image->comps[0].h);
             return OPJ_FALSE;
         }
         break;
     case OPJ_PROFILE_CINEMA_4K:
-        if (((image->comps[0].w > 4096) | (image->comps[0].h > 2160))){
+        if (((image->comps[0].w > 4096) | (image->comps[0].h > 2160))) {
             opj_event_msg(p_manager, EVT_WARNING,
-                    "JPEG 2000 Profile-4 (4k dc profile) requires:\n"
-                    "width <= 4096 and height <= 2160\n"
-                    "-> Image size %d x %d is not compliant\n"
-                    "-> Non-profile-4 codestream will be generated\n",
-                    image->comps[0].w,image->comps[0].h);
+                          "JPEG 2000 Profile-4 (4k dc profile) requires:\n"
+                          "width <= 4096 and height <= 2160\n"
+                          "-> Image size %d x %d is not compliant\n"
+                          "-> Non-profile-4 codestream will be generated\n",
+                          image->comps[0].w, image->comps[0].h);
             return OPJ_FALSE;
         }
         break;
@@ -6245,573 +6546,619 @@ static OPJ_BOOL opj_j2k_is_cinema_compliant(opj_image_t *image, OPJ_UINT16 rsiz,
     return OPJ_TRUE;
 }
 
-OPJ_BOOL opj_j2k_setup_encoder(     opj_j2k_t *p_j2k,
-                                                    opj_cparameters_t *parameters,
-                                                    opj_image_t *image,
-                                                    opj_event_mgr_t * p_manager)
+OPJ_BOOL opj_j2k_setup_encoder(opj_j2k_t *p_j2k,
+                               opj_cparameters_t *parameters,
+                               opj_image_t *image,
+                               opj_event_mgr_t * p_manager)
 {
-        OPJ_UINT32 i, j, tileno, numpocs_tile;
-        opj_cp_t *cp = 00;
-
-        if(!p_j2k || !parameters || ! image) {
-                return OPJ_FALSE;
-        }
-
-        if ((parameters->numresolution <= 0) || (parameters->numresolution > OPJ_J2K_MAXRLVLS)) {
-            opj_event_msg(p_manager, EVT_ERROR, "Invalid number of resolutions : %d not in range [1,%d]\n", parameters->numresolution, OPJ_J2K_MAXRLVLS);
-            return OPJ_FALSE;
-        }
+    OPJ_UINT32 i, j, tileno, numpocs_tile;
+    opj_cp_t *cp = 00;
 
-        /* keep a link to cp so that we can destroy it later in j2k_destroy_compress */
-        cp = &(p_j2k->m_cp);
+    if (!p_j2k || !parameters || ! image) {
+        return OPJ_FALSE;
+    }
 
-        /* set default values for cp */
-        cp->tw = 1;
-        cp->th = 1;
+    if ((parameters->numresolution <= 0) ||
+            (parameters->numresolution > OPJ_J2K_MAXRLVLS)) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Invalid number of resolutions : %d not in range [1,%d]\n",
+                      parameters->numresolution, OPJ_J2K_MAXRLVLS);
+        return OPJ_FALSE;
+    }
 
-        /* FIXME ADE: to be removed once deprecated cp_cinema and cp_rsiz have been removed */
-        if (parameters->rsiz == OPJ_PROFILE_NONE) { /* consider deprecated fields only if RSIZ has not been set */
-            OPJ_BOOL deprecated_used = OPJ_FALSE;
-            switch (parameters->cp_cinema){
-            case OPJ_CINEMA2K_24:
-                parameters->rsiz = OPJ_PROFILE_CINEMA_2K;
-                parameters->max_cs_size = OPJ_CINEMA_24_CS;
-                parameters->max_comp_size = OPJ_CINEMA_24_COMP;
-                deprecated_used = OPJ_TRUE;
-                break;
-            case OPJ_CINEMA2K_48:
-                parameters->rsiz = OPJ_PROFILE_CINEMA_2K;
-                parameters->max_cs_size = OPJ_CINEMA_48_CS;
-                parameters->max_comp_size = OPJ_CINEMA_48_COMP;
-                deprecated_used = OPJ_TRUE;
-                break;
-            case OPJ_CINEMA4K_24:
-                parameters->rsiz = OPJ_PROFILE_CINEMA_4K;
-                parameters->max_cs_size = OPJ_CINEMA_24_CS;
-                parameters->max_comp_size = OPJ_CINEMA_24_COMP;
-                deprecated_used = OPJ_TRUE;
-                break;
-            case OPJ_OFF:
-            default:
-                break;
-            }
-            switch (parameters->cp_rsiz){
-            case OPJ_CINEMA2K:
-                parameters->rsiz = OPJ_PROFILE_CINEMA_2K;
-                deprecated_used = OPJ_TRUE;
-                break;
-            case OPJ_CINEMA4K:
-                parameters->rsiz = OPJ_PROFILE_CINEMA_4K;
-                deprecated_used = OPJ_TRUE;
-                break;
-            case OPJ_MCT:
-                parameters->rsiz = OPJ_PROFILE_PART2 | OPJ_EXTENSION_MCT;
-                deprecated_used = OPJ_TRUE;
-            case OPJ_STD_RSIZ:
-            default:
-                break;
-            }
-            if (deprecated_used) {
-                opj_event_msg(p_manager, EVT_WARNING,
-                        "Deprecated fields cp_cinema or cp_rsiz are used\n"
-                        "Please consider using only the rsiz field\n"
-                        "See openjpeg.h documentation for more details\n");
-            }
+    /* keep a link to cp so that we can destroy it later in j2k_destroy_compress */
+    cp = &(p_j2k->m_cp);
+
+    /* set default values for cp */
+    cp->tw = 1;
+    cp->th = 1;
+
+    /* FIXME ADE: to be removed once deprecated cp_cinema and cp_rsiz have been removed */
+    if (parameters->rsiz ==
+            OPJ_PROFILE_NONE) { /* consider deprecated fields only if RSIZ has not been set */
+        OPJ_BOOL deprecated_used = OPJ_FALSE;
+        switch (parameters->cp_cinema) {
+        case OPJ_CINEMA2K_24:
+            parameters->rsiz = OPJ_PROFILE_CINEMA_2K;
+            parameters->max_cs_size = OPJ_CINEMA_24_CS;
+            parameters->max_comp_size = OPJ_CINEMA_24_COMP;
+            deprecated_used = OPJ_TRUE;
+            break;
+        case OPJ_CINEMA2K_48:
+            parameters->rsiz = OPJ_PROFILE_CINEMA_2K;
+            parameters->max_cs_size = OPJ_CINEMA_48_CS;
+            parameters->max_comp_size = OPJ_CINEMA_48_COMP;
+            deprecated_used = OPJ_TRUE;
+            break;
+        case OPJ_CINEMA4K_24:
+            parameters->rsiz = OPJ_PROFILE_CINEMA_4K;
+            parameters->max_cs_size = OPJ_CINEMA_24_CS;
+            parameters->max_comp_size = OPJ_CINEMA_24_COMP;
+            deprecated_used = OPJ_TRUE;
+            break;
+        case OPJ_OFF:
+        default:
+            break;
+        }
+        switch (parameters->cp_rsiz) {
+        case OPJ_CINEMA2K:
+            parameters->rsiz = OPJ_PROFILE_CINEMA_2K;
+            deprecated_used = OPJ_TRUE;
+            break;
+        case OPJ_CINEMA4K:
+            parameters->rsiz = OPJ_PROFILE_CINEMA_4K;
+            deprecated_used = OPJ_TRUE;
+            break;
+        case OPJ_MCT:
+            parameters->rsiz = OPJ_PROFILE_PART2 | OPJ_EXTENSION_MCT;
+            deprecated_used = OPJ_TRUE;
+        case OPJ_STD_RSIZ:
+        default:
+            break;
+        }
+        if (deprecated_used) {
+            opj_event_msg(p_manager, EVT_WARNING,
+                          "Deprecated fields cp_cinema or cp_rsiz are used\n"
+                          "Please consider using only the rsiz field\n"
+                          "See openjpeg.h documentation for more details\n");
         }
+    }
 
-        /* see if max_codestream_size does limit input rate */
-        if (parameters->max_cs_size <= 0) {
-            if (parameters->tcp_rates[parameters->tcp_numlayers-1] > 0) {
-                OPJ_FLOAT32 temp_size;
-                temp_size =(OPJ_FLOAT32)(image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec)/
-                        (parameters->tcp_rates[parameters->tcp_numlayers-1] * 8 * (OPJ_FLOAT32)image->comps[0].dx * (OPJ_FLOAT32)image->comps[0].dy);
-                parameters->max_cs_size = (int) floor(temp_size);
-            } else {
-                parameters->max_cs_size = 0;
-            }
+    /* see if max_codestream_size does limit input rate */
+    if (parameters->max_cs_size <= 0) {
+        if (parameters->tcp_rates[parameters->tcp_numlayers - 1] > 0) {
+            OPJ_FLOAT32 temp_size;
+            temp_size = (OPJ_FLOAT32)(image->numcomps * image->comps[0].w *
+                                      image->comps[0].h * image->comps[0].prec) /
+                        (parameters->tcp_rates[parameters->tcp_numlayers - 1] * 8 *
+                         (OPJ_FLOAT32)image->comps[0].dx * (OPJ_FLOAT32)image->comps[0].dy);
+            parameters->max_cs_size = (int) floor(temp_size);
         } else {
-            OPJ_FLOAT32 temp_rate;
-            OPJ_BOOL cap = OPJ_FALSE;
-            temp_rate = (OPJ_FLOAT32) (image->numcomps * image->comps[0].w * image->comps[0].h * image->comps[0].prec)/
-                    (OPJ_FLOAT32)(((OPJ_UINT32)parameters->max_cs_size) * 8 * image->comps[0].dx * image->comps[0].dy);
-            for (i = 0; i < (OPJ_UINT32) parameters->tcp_numlayers; i++) {
-                if (parameters->tcp_rates[i] < temp_rate) {
-                    parameters->tcp_rates[i] = temp_rate;
-                    cap = OPJ_TRUE;
-                }
-            }
-            if (cap) {
-                opj_event_msg(p_manager, EVT_WARNING,
-                        "The desired maximum codestream size has limited\n"
-                        "at least one of the desired quality layers\n");
+            parameters->max_cs_size = 0;
+        }
+    } else {
+        OPJ_FLOAT32 temp_rate;
+        OPJ_BOOL cap = OPJ_FALSE;
+        temp_rate = (OPJ_FLOAT32)(image->numcomps * image->comps[0].w *
+                                  image->comps[0].h * image->comps[0].prec) /
+                    (OPJ_FLOAT32)(((OPJ_UINT32)parameters->max_cs_size) * 8 * image->comps[0].dx *
+                                  image->comps[0].dy);
+        for (i = 0; i < (OPJ_UINT32) parameters->tcp_numlayers; i++) {
+            if (parameters->tcp_rates[i] < temp_rate) {
+                parameters->tcp_rates[i] = temp_rate;
+                cap = OPJ_TRUE;
             }
         }
+        if (cap) {
+            opj_event_msg(p_manager, EVT_WARNING,
+                          "The desired maximum codestream size has limited\n"
+                          "at least one of the desired quality layers\n");
+        }
+    }
 
-        /* Manage profiles and applications and set RSIZ */
-        /* set cinema parameters if required */
-        if (OPJ_IS_CINEMA(parameters->rsiz)){
-            if ((parameters->rsiz == OPJ_PROFILE_CINEMA_S2K)
-                    || (parameters->rsiz == OPJ_PROFILE_CINEMA_S4K)){
-                opj_event_msg(p_manager, EVT_WARNING,
-                        "JPEG 2000 Scalable Digital Cinema profiles not yet supported\n");
-                parameters->rsiz = OPJ_PROFILE_NONE;
-            } else {
-                opj_j2k_set_cinema_parameters(parameters,image,p_manager);
-                if (!opj_j2k_is_cinema_compliant(image,parameters->rsiz,p_manager)) {
-                    parameters->rsiz = OPJ_PROFILE_NONE;
-                }
-            }
-        } else if (OPJ_IS_STORAGE(parameters->rsiz)) {
+    /* Manage profiles and applications and set RSIZ */
+    /* set cinema parameters if required */
+    if (OPJ_IS_CINEMA(parameters->rsiz)) {
+        if ((parameters->rsiz == OPJ_PROFILE_CINEMA_S2K)
+                || (parameters->rsiz == OPJ_PROFILE_CINEMA_S4K)) {
             opj_event_msg(p_manager, EVT_WARNING,
-                    "JPEG 2000 Long Term Storage profile not yet supported\n");
+                          "JPEG 2000 Scalable Digital Cinema profiles not yet supported\n");
             parameters->rsiz = OPJ_PROFILE_NONE;
-        } else if (OPJ_IS_BROADCAST(parameters->rsiz)) {
+        } else {
+            opj_j2k_set_cinema_parameters(parameters, image, p_manager);
+            if (!opj_j2k_is_cinema_compliant(image, parameters->rsiz, p_manager)) {
+                parameters->rsiz = OPJ_PROFILE_NONE;
+            }
+        }
+    } else if (OPJ_IS_STORAGE(parameters->rsiz)) {
+        opj_event_msg(p_manager, EVT_WARNING,
+                      "JPEG 2000 Long Term Storage profile not yet supported\n");
+        parameters->rsiz = OPJ_PROFILE_NONE;
+    } else if (OPJ_IS_BROADCAST(parameters->rsiz)) {
+        opj_event_msg(p_manager, EVT_WARNING,
+                      "JPEG 2000 Broadcast profiles not yet supported\n");
+        parameters->rsiz = OPJ_PROFILE_NONE;
+    } else if (OPJ_IS_IMF(parameters->rsiz)) {
+        opj_event_msg(p_manager, EVT_WARNING,
+                      "JPEG 2000 IMF profiles not yet supported\n");
+        parameters->rsiz = OPJ_PROFILE_NONE;
+    } else if (OPJ_IS_PART2(parameters->rsiz)) {
+        if (parameters->rsiz == ((OPJ_PROFILE_PART2) | (OPJ_EXTENSION_NONE))) {
             opj_event_msg(p_manager, EVT_WARNING,
-                    "JPEG 2000 Broadcast profiles not yet supported\n");
+                          "JPEG 2000 Part-2 profile defined\n"
+                          "but no Part-2 extension enabled.\n"
+                          "Profile set to NONE.\n");
             parameters->rsiz = OPJ_PROFILE_NONE;
-        } else if (OPJ_IS_IMF(parameters->rsiz)) {
+        } else if (parameters->rsiz != ((OPJ_PROFILE_PART2) | (OPJ_EXTENSION_MCT))) {
             opj_event_msg(p_manager, EVT_WARNING,
-                    "JPEG 2000 IMF profiles not yet supported\n");
+                          "Unsupported Part-2 extension enabled\n"
+                          "Profile set to NONE.\n");
             parameters->rsiz = OPJ_PROFILE_NONE;
-        } else if (OPJ_IS_PART2(parameters->rsiz)) {
-            if (parameters->rsiz == ((OPJ_PROFILE_PART2) | (OPJ_EXTENSION_NONE))) {
-                opj_event_msg(p_manager, EVT_WARNING,
-                              "JPEG 2000 Part-2 profile defined\n"
-                              "but no Part-2 extension enabled.\n"
-                              "Profile set to NONE.\n");
-                parameters->rsiz = OPJ_PROFILE_NONE;
-            } else if (parameters->rsiz != ((OPJ_PROFILE_PART2) | (OPJ_EXTENSION_MCT))) {
-                opj_event_msg(p_manager, EVT_WARNING,
-                              "Unsupported Part-2 extension enabled\n"
-                              "Profile set to NONE.\n");
-                parameters->rsiz = OPJ_PROFILE_NONE;
-            }
         }
+    }
 
-        /*
-        copy user encoding parameters
-        */
-        cp->m_specific_param.m_enc.m_max_comp_size = (OPJ_UINT32)parameters->max_comp_size;
-        cp->rsiz = parameters->rsiz;
-        cp->m_specific_param.m_enc.m_disto_alloc = (OPJ_UINT32)parameters->cp_disto_alloc & 1u;
-        cp->m_specific_param.m_enc.m_fixed_alloc = (OPJ_UINT32)parameters->cp_fixed_alloc & 1u;
-        cp->m_specific_param.m_enc.m_fixed_quality = (OPJ_UINT32)parameters->cp_fixed_quality & 1u;
-
-        /* mod fixed_quality */
-        if (parameters->cp_fixed_alloc && parameters->cp_matrice) {
-                size_t array_size = (size_t)parameters->tcp_numlayers * (size_t)parameters->numresolution * 3 * sizeof(OPJ_INT32);
-                cp->m_specific_param.m_enc.m_matrice = (OPJ_INT32 *) opj_malloc(array_size);
-                                                               if (!cp->m_specific_param.m_enc.m_matrice) {
-                                                                       opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to allocate copy of user encoding parameters matrix \n");
-                                                                       return OPJ_FALSE;
-                                                               }
-                memcpy(cp->m_specific_param.m_enc.m_matrice, parameters->cp_matrice, array_size);
-        }
-
-        /* tiles */
-        cp->tdx = (OPJ_UINT32)parameters->cp_tdx;
-        cp->tdy = (OPJ_UINT32)parameters->cp_tdy;
-
-        /* tile offset */
-        cp->tx0 = (OPJ_UINT32)parameters->cp_tx0;
-        cp->ty0 = (OPJ_UINT32)parameters->cp_ty0;
-
-        /* comment string */
-        if(parameters->cp_comment) {
-                cp->comment = (char*)opj_malloc(strlen(parameters->cp_comment) + 1U);
-                                                               if(!cp->comment) {
-                                                                       opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to allocate copy of comment string\n");
-                                                                       return OPJ_FALSE;
-                                                               }
-                strcpy(cp->comment, parameters->cp_comment);
-        } else {
-                /* Create default comment for codestream */
-                const char comment[] = "Created by OpenJPEG version ";
-                const size_t clen = strlen(comment);
-                const char *version = opj_version();
+    /*
+    copy user encoding parameters
+    */
+    cp->m_specific_param.m_enc.m_max_comp_size = (OPJ_UINT32)
+            parameters->max_comp_size;
+    cp->rsiz = parameters->rsiz;
+    cp->m_specific_param.m_enc.m_disto_alloc = (OPJ_UINT32)
+            parameters->cp_disto_alloc & 1u;
+    cp->m_specific_param.m_enc.m_fixed_alloc = (OPJ_UINT32)
+            parameters->cp_fixed_alloc & 1u;
+    cp->m_specific_param.m_enc.m_fixed_quality = (OPJ_UINT32)
+            parameters->cp_fixed_quality & 1u;
+
+    /* mod fixed_quality */
+    if (parameters->cp_fixed_alloc && parameters->cp_matrice) {
+        size_t array_size = (size_t)parameters->tcp_numlayers *
+                            (size_t)parameters->numresolution * 3 * sizeof(OPJ_INT32);
+        cp->m_specific_param.m_enc.m_matrice = (OPJ_INT32 *) opj_malloc(array_size);
+        if (!cp->m_specific_param.m_enc.m_matrice) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Not enough memory to allocate copy of user encoding parameters matrix \n");
+            return OPJ_FALSE;
+        }
+        memcpy(cp->m_specific_param.m_enc.m_matrice, parameters->cp_matrice,
+               array_size);
+    }
 
-                /* UniPG>> */
-#ifdef USE_JPWL
-                cp->comment = (char*)opj_malloc(clen+strlen(version)+11);
-                                                               if(!cp->comment) {
-                                                                       opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to allocate comment string\n");
-                                                                       return OPJ_FALSE;
-                                                               }
-                sprintf(cp->comment,"%s%s with JPWL", comment, version);
-#else
-                cp->comment = (char*)opj_malloc(clen+strlen(version)+1);
-                                                               if(!cp->comment) {
-                                                                       opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to allocate comment string\n");
-                                                                       return OPJ_FALSE;
-                                                               }
-                sprintf(cp->comment,"%s%s", comment, version);
-#endif
-                /* <<UniPG */
-                               }
+    /* tiles */
+    cp->tdx = (OPJ_UINT32)parameters->cp_tdx;
+    cp->tdy = (OPJ_UINT32)parameters->cp_tdy;
 
-        /*
-        calculate other encoding parameters
-        */
+    /* tile offset */
+    cp->tx0 = (OPJ_UINT32)parameters->cp_tx0;
+    cp->ty0 = (OPJ_UINT32)parameters->cp_ty0;
 
-        if (parameters->tile_size_on) {
-                cp->tw = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)(image->x1 - cp->tx0), (OPJ_INT32)cp->tdx);
-                cp->th = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)(image->y1 - cp->ty0), (OPJ_INT32)cp->tdy);
-        } else {
-                cp->tdx = image->x1 - cp->tx0;
-                cp->tdy = image->y1 - cp->ty0;
+    /* comment string */
+    if (parameters->cp_comment) {
+        cp->comment = (char*)opj_malloc(strlen(parameters->cp_comment) + 1U);
+        if (!cp->comment) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Not enough memory to allocate copy of comment string\n");
+            return OPJ_FALSE;
         }
+        strcpy(cp->comment, parameters->cp_comment);
+    } else {
+        /* Create default comment for codestream */
+        const char comment[] = "Created by OpenJPEG version ";
+        const size_t clen = strlen(comment);
+        const char *version = opj_version();
 
-        if (parameters->tp_on) {
-                cp->m_specific_param.m_enc.m_tp_flag = (OPJ_BYTE)parameters->tp_flag;
-                cp->m_specific_param.m_enc.m_tp_on = 1;
+        /* UniPG>> */
+#ifdef USE_JPWL
+        cp->comment = (char*)opj_malloc(clen + strlen(version) + 11);
+        if (!cp->comment) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Not enough memory to allocate comment string\n");
+            return OPJ_FALSE;
+        }
+        sprintf(cp->comment, "%s%s with JPWL", comment, version);
+#else
+        cp->comment = (char*)opj_malloc(clen + strlen(version) + 1);
+        if (!cp->comment) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Not enough memory to allocate comment string\n");
+            return OPJ_FALSE;
         }
+        sprintf(cp->comment, "%s%s", comment, version);
+#endif
+        /* <<UniPG */
+    }
 
-#ifdef USE_JPWL
-        /*
-        calculate JPWL encoding parameters
-        */
+    /*
+    calculate other encoding parameters
+    */
 
-        if (parameters->jpwl_epc_on) {
-                OPJ_INT32 i;
+    if (parameters->tile_size_on) {
+        cp->tw = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)(image->x1 - cp->tx0),
+                                             (OPJ_INT32)cp->tdx);
+        cp->th = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)(image->y1 - cp->ty0),
+                                             (OPJ_INT32)cp->tdy);
+    } else {
+        cp->tdx = image->x1 - cp->tx0;
+        cp->tdy = image->y1 - cp->ty0;
+    }
 
-                /* set JPWL on */
-                cp->epc_on = OPJ_TRUE;
-                cp->info_on = OPJ_FALSE; /* no informative technique */
+    if (parameters->tp_on) {
+        cp->m_specific_param.m_enc.m_tp_flag = (OPJ_BYTE)parameters->tp_flag;
+        cp->m_specific_param.m_enc.m_tp_on = 1;
+    }
 
-                /* set EPB on */
-                if ((parameters->jpwl_hprot_MH > 0) || (parameters->jpwl_hprot_TPH[0] > 0)) {
-                        cp->epb_on = OPJ_TRUE;
+#ifdef USE_JPWL
+    /*
+    calculate JPWL encoding parameters
+    */
 
-                        cp->hprot_MH = parameters->jpwl_hprot_MH;
-                        for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) {
-                                cp->hprot_TPH_tileno[i] = parameters->jpwl_hprot_TPH_tileno[i];
-                                cp->hprot_TPH[i] = parameters->jpwl_hprot_TPH[i];
-                        }
-                        /* if tile specs are not specified, copy MH specs */
-                        if (cp->hprot_TPH[0] == -1) {
-                                cp->hprot_TPH_tileno[0] = 0;
-                                cp->hprot_TPH[0] = parameters->jpwl_hprot_MH;
-                        }
-                        for (i = 0; i < JPWL_MAX_NO_PACKSPECS; i++) {
-                                cp->pprot_tileno[i] = parameters->jpwl_pprot_tileno[i];
-                                cp->pprot_packno[i] = parameters->jpwl_pprot_packno[i];
-                                cp->pprot[i] = parameters->jpwl_pprot[i];
-                        }
-                }
+    if (parameters->jpwl_epc_on) {
+        OPJ_INT32 i;
 
-                /* set ESD writing */
-                if ((parameters->jpwl_sens_size == 1) || (parameters->jpwl_sens_size == 2)) {
-                        cp->esd_on = OPJ_TRUE;
+        /* set JPWL on */
+        cp->epc_on = OPJ_TRUE;
+        cp->info_on = OPJ_FALSE; /* no informative technique */
 
-                        cp->sens_size = parameters->jpwl_sens_size;
-                        cp->sens_addr = parameters->jpwl_sens_addr;
-                        cp->sens_range = parameters->jpwl_sens_range;
+        /* set EPB on */
+        if ((parameters->jpwl_hprot_MH > 0) || (parameters->jpwl_hprot_TPH[0] > 0)) {
+            cp->epb_on = OPJ_TRUE;
 
-                        cp->sens_MH = parameters->jpwl_sens_MH;
-                        for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) {
-                                cp->sens_TPH_tileno[i] = parameters->jpwl_sens_TPH_tileno[i];
-                                cp->sens_TPH[i] = parameters->jpwl_sens_TPH[i];
-                        }
-                }
+            cp->hprot_MH = parameters->jpwl_hprot_MH;
+            for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) {
+                cp->hprot_TPH_tileno[i] = parameters->jpwl_hprot_TPH_tileno[i];
+                cp->hprot_TPH[i] = parameters->jpwl_hprot_TPH[i];
+            }
+            /* if tile specs are not specified, copy MH specs */
+            if (cp->hprot_TPH[0] == -1) {
+                cp->hprot_TPH_tileno[0] = 0;
+                cp->hprot_TPH[0] = parameters->jpwl_hprot_MH;
+            }
+            for (i = 0; i < JPWL_MAX_NO_PACKSPECS; i++) {
+                cp->pprot_tileno[i] = parameters->jpwl_pprot_tileno[i];
+                cp->pprot_packno[i] = parameters->jpwl_pprot_packno[i];
+                cp->pprot[i] = parameters->jpwl_pprot[i];
+            }
+        }
 
-                /* always set RED writing to false: we are at the encoder */
-                cp->red_on = OPJ_FALSE;
+        /* set ESD writing */
+        if ((parameters->jpwl_sens_size == 1) || (parameters->jpwl_sens_size == 2)) {
+            cp->esd_on = OPJ_TRUE;
 
-        } else {
-                cp->epc_on = OPJ_FALSE;
-        }
-#endif /* USE_JPWL */
+            cp->sens_size = parameters->jpwl_sens_size;
+            cp->sens_addr = parameters->jpwl_sens_addr;
+            cp->sens_range = parameters->jpwl_sens_range;
 
-        /* initialize the mutiple tiles */
-        /* ---------------------------- */
-        cp->tcps = (opj_tcp_t*) opj_calloc(cp->tw * cp->th, sizeof(opj_tcp_t));
-        if (!cp->tcps) {
-                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to allocate tile coding parameters\n");
-                return OPJ_FALSE;
+            cp->sens_MH = parameters->jpwl_sens_MH;
+            for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) {
+                cp->sens_TPH_tileno[i] = parameters->jpwl_sens_TPH_tileno[i];
+                cp->sens_TPH[i] = parameters->jpwl_sens_TPH[i];
+            }
         }
-        if (parameters->numpocs) {
-                /* initialisation of POC */
-                opj_j2k_check_poc_val(parameters->POC,parameters->numpocs, (OPJ_UINT32)parameters->numresolution, image->numcomps, (OPJ_UINT32)parameters->tcp_numlayers, p_manager);
-                /* TODO MSD use the return value*/
-        }
-
-        for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
-                opj_tcp_t *tcp = &cp->tcps[tileno];
-                tcp->numlayers = (OPJ_UINT32)parameters->tcp_numlayers;
-
-                for (j = 0; j < tcp->numlayers; j++) {
-                        if(OPJ_IS_CINEMA(cp->rsiz)){
-                                if (cp->m_specific_param.m_enc.m_fixed_quality) {
-                                        tcp->distoratio[j] = parameters->tcp_distoratio[j];
-                                }
-                                tcp->rates[j] = parameters->tcp_rates[j];
-                        }else{
-                                if (cp->m_specific_param.m_enc.m_fixed_quality) {       /* add fixed_quality */
-                                        tcp->distoratio[j] = parameters->tcp_distoratio[j];
-                                } else {
-                                        tcp->rates[j] = parameters->tcp_rates[j];
-                                }
-                        }
-                }
 
-                tcp->csty = (OPJ_UINT32)parameters->csty;
-                tcp->prg = parameters->prog_order;
-                tcp->mct = (OPJ_UINT32)parameters->tcp_mct;
-
-                numpocs_tile = 0;
-                tcp->POC = 0;
-
-                if (parameters->numpocs) {
-                        /* initialisation of POC */
-                        tcp->POC = 1;
-                        for (i = 0; i < parameters->numpocs; i++) {
-                                if (tileno + 1 == parameters->POC[i].tile )  {
-                                        opj_poc_t *tcp_poc = &tcp->pocs[numpocs_tile];
-
-                                        tcp_poc->resno0         = parameters->POC[numpocs_tile].resno0;
-                                        tcp_poc->compno0        = parameters->POC[numpocs_tile].compno0;
-                                        tcp_poc->layno1         = parameters->POC[numpocs_tile].layno1;
-                                        tcp_poc->resno1         = parameters->POC[numpocs_tile].resno1;
-                                        tcp_poc->compno1        = parameters->POC[numpocs_tile].compno1;
-                                        tcp_poc->prg1           = parameters->POC[numpocs_tile].prg1;
-                                        tcp_poc->tile           = parameters->POC[numpocs_tile].tile;
-
-                                        numpocs_tile++;
-                                }
-                        }
-
-                        tcp->numpocs = numpocs_tile -1 ;
-                }else{
-                        tcp->numpocs = 0;
-                }
+        /* always set RED writing to false: we are at the encoder */
+        cp->red_on = OPJ_FALSE;
 
-                tcp->tccps = (opj_tccp_t*) opj_calloc(image->numcomps, sizeof(opj_tccp_t));
-                if (!tcp->tccps) {
-                        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to allocate tile component coding parameters\n");
-                        return OPJ_FALSE;
+    } else {
+        cp->epc_on = OPJ_FALSE;
+    }
+#endif /* USE_JPWL */
+
+    /* initialize the mutiple tiles */
+    /* ---------------------------- */
+    cp->tcps = (opj_tcp_t*) opj_calloc(cp->tw * cp->th, sizeof(opj_tcp_t));
+    if (!cp->tcps) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Not enough memory to allocate tile coding parameters\n");
+        return OPJ_FALSE;
+    }
+    if (parameters->numpocs) {
+        /* initialisation of POC */
+        opj_j2k_check_poc_val(parameters->POC, parameters->numpocs,
+                              (OPJ_UINT32)parameters->numresolution, image->numcomps,
+                              (OPJ_UINT32)parameters->tcp_numlayers, p_manager);
+        /* TODO MSD use the return value*/
+    }
+
+    for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
+        opj_tcp_t *tcp = &cp->tcps[tileno];
+        tcp->numlayers = (OPJ_UINT32)parameters->tcp_numlayers;
+
+        for (j = 0; j < tcp->numlayers; j++) {
+            if (OPJ_IS_CINEMA(cp->rsiz)) {
+                if (cp->m_specific_param.m_enc.m_fixed_quality) {
+                    tcp->distoratio[j] = parameters->tcp_distoratio[j];
                 }
-                if (parameters->mct_data) {
-                      
-                    OPJ_UINT32 lMctSize = image->numcomps * image->numcomps * (OPJ_UINT32)sizeof(OPJ_FLOAT32);
-                    OPJ_FLOAT32 * lTmpBuf = (OPJ_FLOAT32*)opj_malloc(lMctSize);
-                    OPJ_INT32 * l_dc_shift = (OPJ_INT32 *) ((OPJ_BYTE *) parameters->mct_data + lMctSize);
-
-                                                                               if (!lTmpBuf) {
-                            opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to allocate temp buffer\n");
-                            return OPJ_FALSE;
-                    }
+                tcp->rates[j] = parameters->tcp_rates[j];
+            } else {
+                if (cp->m_specific_param.m_enc.m_fixed_quality) {       /* add fixed_quality */
+                    tcp->distoratio[j] = parameters->tcp_distoratio[j];
+                } else {
+                    tcp->rates[j] = parameters->tcp_rates[j];
+                }
+            }
+        }
 
-                    tcp->mct = 2;
-                    tcp->m_mct_coding_matrix = (OPJ_FLOAT32*)opj_malloc(lMctSize);
-                                                                               if (! tcp->m_mct_coding_matrix) {
-                            opj_free(lTmpBuf);
-                                                                                                               lTmpBuf = NULL;
-                            opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to allocate encoder MCT coding matrix \n");
-                            return OPJ_FALSE;
-                    }
-                    memcpy(tcp->m_mct_coding_matrix,parameters->mct_data,lMctSize);
-                    memcpy(lTmpBuf,parameters->mct_data,lMctSize);
-
-                    tcp->m_mct_decoding_matrix = (OPJ_FLOAT32*)opj_malloc(lMctSize);
-                                                                               if (! tcp->m_mct_decoding_matrix) {
-                                                                                                               opj_free(lTmpBuf);
-                                                                                                               lTmpBuf = NULL;
-                            opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to allocate encoder MCT decoding matrix \n");
-                            return OPJ_FALSE;
-                    }
-                    if(opj_matrix_inversion_f(lTmpBuf,(tcp->m_mct_decoding_matrix),image->numcomps) == OPJ_FALSE) {
-                            opj_free(lTmpBuf);
-                                                                                                               lTmpBuf = NULL;
-                            opj_event_msg(p_manager, EVT_ERROR, "Failed to inverse encoder MCT decoding matrix \n");
-                            return OPJ_FALSE;
-                                                                               }
-
-                    tcp->mct_norms = (OPJ_FLOAT64*)
-                                    opj_malloc(image->numcomps * sizeof(OPJ_FLOAT64));
-                                                                               if (! tcp->mct_norms) {
-                            opj_free(lTmpBuf);
-                                                                                                               lTmpBuf = NULL;
-                            opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to allocate encoder MCT norms \n");
-                            return OPJ_FALSE;
-                    }
-                    opj_calculate_norms(tcp->mct_norms,image->numcomps,tcp->m_mct_decoding_matrix);
-                    opj_free(lTmpBuf);
+        tcp->csty = (OPJ_UINT32)parameters->csty;
+        tcp->prg = parameters->prog_order;
+        tcp->mct = (OPJ_UINT32)parameters->tcp_mct;
 
-                    for (i = 0; i < image->numcomps; i++) {
-                            opj_tccp_t *tccp = &tcp->tccps[i];
-                            tccp->m_dc_level_shift = l_dc_shift[i];
-                    }
+        numpocs_tile = 0;
+        tcp->POC = 0;
 
-                    if (opj_j2k_setup_mct_encoding(tcp,image) == OPJ_FALSE) {
-                        /* free will be handled by opj_j2k_destroy */
-                                                                                               opj_event_msg(p_manager, EVT_ERROR, "Failed to setup j2k mct encoding\n");
-                        return OPJ_FALSE;
-                    }
+        if (parameters->numpocs) {
+            /* initialisation of POC */
+            tcp->POC = 1;
+            for (i = 0; i < parameters->numpocs; i++) {
+                if (tileno + 1 == parameters->POC[i].tile)  {
+                    opj_poc_t *tcp_poc = &tcp->pocs[numpocs_tile];
+
+                    tcp_poc->resno0         = parameters->POC[numpocs_tile].resno0;
+                    tcp_poc->compno0        = parameters->POC[numpocs_tile].compno0;
+                    tcp_poc->layno1         = parameters->POC[numpocs_tile].layno1;
+                    tcp_poc->resno1         = parameters->POC[numpocs_tile].resno1;
+                    tcp_poc->compno1        = parameters->POC[numpocs_tile].compno1;
+                    tcp_poc->prg1           = parameters->POC[numpocs_tile].prg1;
+                    tcp_poc->tile           = parameters->POC[numpocs_tile].tile;
+
+                    numpocs_tile++;
+                }
+            }
+
+            tcp->numpocs = numpocs_tile - 1 ;
+        } else {
+            tcp->numpocs = 0;
+        }
+
+        tcp->tccps = (opj_tccp_t*) opj_calloc(image->numcomps, sizeof(opj_tccp_t));
+        if (!tcp->tccps) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Not enough memory to allocate tile component coding parameters\n");
+            return OPJ_FALSE;
+        }
+        if (parameters->mct_data) {
+
+            OPJ_UINT32 lMctSize = image->numcomps * image->numcomps * (OPJ_UINT32)sizeof(
+                                      OPJ_FLOAT32);
+            OPJ_FLOAT32 * lTmpBuf = (OPJ_FLOAT32*)opj_malloc(lMctSize);
+            OPJ_INT32 * l_dc_shift = (OPJ_INT32 *)((OPJ_BYTE *) parameters->mct_data +
+                                                   lMctSize);
+
+            if (!lTmpBuf) {
+                opj_event_msg(p_manager, EVT_ERROR,
+                              "Not enough memory to allocate temp buffer\n");
+                return OPJ_FALSE;
+            }
+
+            tcp->mct = 2;
+            tcp->m_mct_coding_matrix = (OPJ_FLOAT32*)opj_malloc(lMctSize);
+            if (! tcp->m_mct_coding_matrix) {
+                opj_free(lTmpBuf);
+                lTmpBuf = NULL;
+                opj_event_msg(p_manager, EVT_ERROR,
+                              "Not enough memory to allocate encoder MCT coding matrix \n");
+                return OPJ_FALSE;
+            }
+            memcpy(tcp->m_mct_coding_matrix, parameters->mct_data, lMctSize);
+            memcpy(lTmpBuf, parameters->mct_data, lMctSize);
+
+            tcp->m_mct_decoding_matrix = (OPJ_FLOAT32*)opj_malloc(lMctSize);
+            if (! tcp->m_mct_decoding_matrix) {
+                opj_free(lTmpBuf);
+                lTmpBuf = NULL;
+                opj_event_msg(p_manager, EVT_ERROR,
+                              "Not enough memory to allocate encoder MCT decoding matrix \n");
+                return OPJ_FALSE;
+            }
+            if (opj_matrix_inversion_f(lTmpBuf, (tcp->m_mct_decoding_matrix),
+                                       image->numcomps) == OPJ_FALSE) {
+                opj_free(lTmpBuf);
+                lTmpBuf = NULL;
+                opj_event_msg(p_manager, EVT_ERROR,
+                              "Failed to inverse encoder MCT decoding matrix \n");
+                return OPJ_FALSE;
+            }
+
+            tcp->mct_norms = (OPJ_FLOAT64*)
+                             opj_malloc(image->numcomps * sizeof(OPJ_FLOAT64));
+            if (! tcp->mct_norms) {
+                opj_free(lTmpBuf);
+                lTmpBuf = NULL;
+                opj_event_msg(p_manager, EVT_ERROR,
+                              "Not enough memory to allocate encoder MCT norms \n");
+                return OPJ_FALSE;
+            }
+            opj_calculate_norms(tcp->mct_norms, image->numcomps,
+                                tcp->m_mct_decoding_matrix);
+            opj_free(lTmpBuf);
+
+            for (i = 0; i < image->numcomps; i++) {
+                opj_tccp_t *tccp = &tcp->tccps[i];
+                tccp->m_dc_level_shift = l_dc_shift[i];
+            }
+
+            if (opj_j2k_setup_mct_encoding(tcp, image) == OPJ_FALSE) {
+                /* free will be handled by opj_j2k_destroy */
+                opj_event_msg(p_manager, EVT_ERROR, "Failed to setup j2k mct encoding\n");
+                return OPJ_FALSE;
+            }
+        } else {
+            if (tcp->mct == 1 && image->numcomps >= 3) { /* RGB->YCC MCT is enabled */
+                if ((image->comps[0].dx != image->comps[1].dx) ||
+                        (image->comps[0].dx != image->comps[2].dx) ||
+                        (image->comps[0].dy != image->comps[1].dy) ||
+                        (image->comps[0].dy != image->comps[2].dy)) {
+                    opj_event_msg(p_manager, EVT_WARNING,
+                                  "Cannot perform MCT on components with different sizes. Disabling MCT.\n");
+                    tcp->mct = 0;
+                }
+            }
+            for (i = 0; i < image->numcomps; i++) {
+                opj_tccp_t *tccp = &tcp->tccps[i];
+                opj_image_comp_t * l_comp = &(image->comps[i]);
+
+                if (! l_comp->sgnd) {
+                    tccp->m_dc_level_shift = 1 << (l_comp->prec - 1);
                 }
-                else {
-                    if(tcp->mct==1 && image->numcomps >= 3) { /* RGB->YCC MCT is enabled */
-                        if ((image->comps[0].dx != image->comps[1].dx) ||
-                                (image->comps[0].dx != image->comps[2].dx) ||
-                                (image->comps[0].dy != image->comps[1].dy) ||
-                                (image->comps[0].dy != image->comps[2].dy)) {
-                            opj_event_msg(p_manager, EVT_WARNING, "Cannot perform MCT on components with different sizes. Disabling MCT.\n");
-                            tcp->mct = 0;
+            }
+        }
+
+        for (i = 0; i < image->numcomps; i++) {
+            opj_tccp_t *tccp = &tcp->tccps[i];
+
+            tccp->csty = parameters->csty &
+                         0x01;   /* 0 => one precinct || 1 => custom precinct  */
+            tccp->numresolutions = (OPJ_UINT32)parameters->numresolution;
+            tccp->cblkw = (OPJ_UINT32)opj_int_floorlog2(parameters->cblockw_init);
+            tccp->cblkh = (OPJ_UINT32)opj_int_floorlog2(parameters->cblockh_init);
+            tccp->cblksty = (OPJ_UINT32)parameters->mode;
+            tccp->qmfbid = parameters->irreversible ? 0 : 1;
+            tccp->qntsty = parameters->irreversible ? J2K_CCP_QNTSTY_SEQNT :
+                           J2K_CCP_QNTSTY_NOQNT;
+            tccp->numgbits = 2;
+
+            if ((OPJ_INT32)i == parameters->roi_compno) {
+                tccp->roishift = parameters->roi_shift;
+            } else {
+                tccp->roishift = 0;
+            }
+
+            if (parameters->csty & J2K_CCP_CSTY_PRT) {
+                OPJ_INT32 p = 0, it_res;
+                assert(tccp->numresolutions > 0);
+                for (it_res = (OPJ_INT32)tccp->numresolutions - 1; it_res >= 0; it_res--) {
+                    if (p < parameters->res_spec) {
+
+                        if (parameters->prcw_init[p] < 1) {
+                            tccp->prcw[it_res] = 1;
+                        } else {
+                            tccp->prcw[it_res] = (OPJ_UINT32)opj_int_floorlog2(parameters->prcw_init[p]);
                         }
-                    }
-                        for (i = 0; i < image->numcomps; i++) {
-                                opj_tccp_t *tccp = &tcp->tccps[i];
-                                opj_image_comp_t * l_comp = &(image->comps[i]);
 
-                                if (! l_comp->sgnd) {
-                                        tccp->m_dc_level_shift = 1 << (l_comp->prec - 1);
-                                }
+                        if (parameters->prch_init[p] < 1) {
+                            tccp->prch[it_res] = 1;
+                        } else {
+                            tccp->prch[it_res] = (OPJ_UINT32)opj_int_floorlog2(parameters->prch_init[p]);
                         }
-                }
 
-                for (i = 0; i < image->numcomps; i++) {
-                        opj_tccp_t *tccp = &tcp->tccps[i];
+                    } else {
+                        OPJ_INT32 res_spec = parameters->res_spec;
+                        OPJ_INT32 size_prcw = 0;
+                        OPJ_INT32 size_prch = 0;
+
+                        assert(res_spec > 0); /* issue 189 */
+                        size_prcw = parameters->prcw_init[res_spec - 1] >> (p - (res_spec - 1));
+                        size_prch = parameters->prch_init[res_spec - 1] >> (p - (res_spec - 1));
 
-                        tccp->csty = parameters->csty & 0x01;   /* 0 => one precinct || 1 => custom precinct  */
-                        tccp->numresolutions = (OPJ_UINT32)parameters->numresolution;
-                        tccp->cblkw = (OPJ_UINT32)opj_int_floorlog2(parameters->cblockw_init);
-                        tccp->cblkh = (OPJ_UINT32)opj_int_floorlog2(parameters->cblockh_init);
-                        tccp->cblksty = (OPJ_UINT32)parameters->mode;
-                        tccp->qmfbid = parameters->irreversible ? 0 : 1;
-                        tccp->qntsty = parameters->irreversible ? J2K_CCP_QNTSTY_SEQNT : J2K_CCP_QNTSTY_NOQNT;
-                        tccp->numgbits = 2;
 
-                        if ((OPJ_INT32)i == parameters->roi_compno) {
-                                tccp->roishift = parameters->roi_shift;
+                        if (size_prcw < 1) {
+                            tccp->prcw[it_res] = 1;
                         } else {
-                                tccp->roishift = 0;
+                            tccp->prcw[it_res] = (OPJ_UINT32)opj_int_floorlog2(size_prcw);
                         }
 
-                                if (parameters->csty & J2K_CCP_CSTY_PRT) {
-                                        OPJ_INT32 p = 0, it_res;
-                                        assert( tccp->numresolutions > 0 );
-                                        for (it_res = (OPJ_INT32)tccp->numresolutions - 1; it_res >= 0; it_res--) {
-                                                if (p < parameters->res_spec) {
-
-                                                        if (parameters->prcw_init[p] < 1) {
-                                                                tccp->prcw[it_res] = 1;
-                                                        } else {
-                                                                tccp->prcw[it_res] = (OPJ_UINT32)opj_int_floorlog2(parameters->prcw_init[p]);
-                                                        }
-
-                                                        if (parameters->prch_init[p] < 1) {
-                                                                tccp->prch[it_res] = 1;
-                                                        }else {
-                                                                tccp->prch[it_res] = (OPJ_UINT32)opj_int_floorlog2(parameters->prch_init[p]);
-                                                        }
-
-                                                } else {
-                                                        OPJ_INT32 res_spec = parameters->res_spec;
-                                                        OPJ_INT32 size_prcw = 0;
-                                                        OPJ_INT32 size_prch = 0;
-
-                                                        assert(res_spec>0); /* issue 189 */
-                                                        size_prcw = parameters->prcw_init[res_spec - 1] >> (p - (res_spec - 1));
-                                                        size_prch = parameters->prch_init[res_spec - 1] >> (p - (res_spec - 1));
-
-
-                                                        if (size_prcw < 1) {
-                                                                tccp->prcw[it_res] = 1;
-                                                        } else {
-                                                                tccp->prcw[it_res] = (OPJ_UINT32)opj_int_floorlog2(size_prcw);
-                                                        }
-
-                                                        if (size_prch < 1) {
-                                                                tccp->prch[it_res] = 1;
-                                                        } else {
-                                                                tccp->prch[it_res] = (OPJ_UINT32)opj_int_floorlog2(size_prch);
-                                                        }
-                                                }
-                                                p++;
-                                                /*printf("\nsize precinct for level %d : %d,%d\n", it_res,tccp->prcw[it_res], tccp->prch[it_res]); */
-                                        }       /*end for*/
-                                } else {
-                                        for (j = 0; j < tccp->numresolutions; j++) {
-                                                tccp->prcw[j] = 15;
-                                                tccp->prch[j] = 15;
-                                        }
-                                }
-
-                        opj_dwt_calc_explicit_stepsizes(tccp, image->comps[i].prec);
+                        if (size_prch < 1) {
+                            tccp->prch[it_res] = 1;
+                        } else {
+                            tccp->prch[it_res] = (OPJ_UINT32)opj_int_floorlog2(size_prch);
+                        }
+                    }
+                    p++;
+                    /*printf("\nsize precinct for level %d : %d,%d\n", it_res,tccp->prcw[it_res], tccp->prch[it_res]); */
+                }       /*end for*/
+            } else {
+                for (j = 0; j < tccp->numresolutions; j++) {
+                    tccp->prcw[j] = 15;
+                    tccp->prch[j] = 15;
                 }
-        }
+            }
 
-        if (parameters->mct_data) {
-                opj_free(parameters->mct_data);
-                parameters->mct_data = 00;
+            opj_dwt_calc_explicit_stepsizes(tccp, image->comps[i].prec);
         }
-        return OPJ_TRUE;
-}
+    }
 
-static OPJ_BOOL opj_j2k_add_mhmarker(opj_codestream_index_t *cstr_index, OPJ_UINT32 type, OPJ_OFF_T pos, OPJ_UINT32 len)
-{
-        assert(cstr_index != 00);
+    if (parameters->mct_data) {
+        opj_free(parameters->mct_data);
+        parameters->mct_data = 00;
+    }
+    return OPJ_TRUE;
+}
 
-        /* expand the list? */
-        if ((cstr_index->marknum + 1) > cstr_index->maxmarknum) {
-                opj_marker_info_t *new_marker;
-                cstr_index->maxmarknum = (OPJ_UINT32)(100 + (OPJ_FLOAT32) cstr_index->maxmarknum);
-                new_marker = (opj_marker_info_t *) opj_realloc(cstr_index->marker, cstr_index->maxmarknum *sizeof(opj_marker_info_t));
-                if (! new_marker) {
-                        opj_free(cstr_index->marker);
-                        cstr_index->marker = NULL;
-                        cstr_index->maxmarknum = 0;
-                        cstr_index->marknum = 0;
-                        /* opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to add mh marker\n"); */
-                        return OPJ_FALSE;
-                }
-                cstr_index->marker = new_marker;
+static OPJ_BOOL opj_j2k_add_mhmarker(opj_codestream_index_t *cstr_index,
+                                     OPJ_UINT32 type, OPJ_OFF_T pos, OPJ_UINT32 len)
+{
+    assert(cstr_index != 00);
+
+    /* expand the list? */
+    if ((cstr_index->marknum + 1) > cstr_index->maxmarknum) {
+        opj_marker_info_t *new_marker;
+        cstr_index->maxmarknum = (OPJ_UINT32)(100 + (OPJ_FLOAT32)
+                                              cstr_index->maxmarknum);
+        new_marker = (opj_marker_info_t *) opj_realloc(cstr_index->marker,
+                     cstr_index->maxmarknum * sizeof(opj_marker_info_t));
+        if (! new_marker) {
+            opj_free(cstr_index->marker);
+            cstr_index->marker = NULL;
+            cstr_index->maxmarknum = 0;
+            cstr_index->marknum = 0;
+            /* opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to add mh marker\n"); */
+            return OPJ_FALSE;
         }
+        cstr_index->marker = new_marker;
+    }
 
-        /* add the marker */
-        cstr_index->marker[cstr_index->marknum].type = (OPJ_UINT16)type;
-        cstr_index->marker[cstr_index->marknum].pos = (OPJ_INT32)pos;
-        cstr_index->marker[cstr_index->marknum].len = (OPJ_INT32)len;
-        cstr_index->marknum++;
-        return OPJ_TRUE;
+    /* add the marker */
+    cstr_index->marker[cstr_index->marknum].type = (OPJ_UINT16)type;
+    cstr_index->marker[cstr_index->marknum].pos = (OPJ_INT32)pos;
+    cstr_index->marker[cstr_index->marknum].len = (OPJ_INT32)len;
+    cstr_index->marknum++;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_add_tlmarker(OPJ_UINT32 tileno, opj_codestream_index_t *cstr_index, OPJ_UINT32 type, OPJ_OFF_T pos, OPJ_UINT32 len)
-{
-        assert(cstr_index != 00);
-        assert(cstr_index->tile_index != 00);
-
-        /* expand the list? */
-        if ((cstr_index->tile_index[tileno].marknum + 1) > cstr_index->tile_index[tileno].maxmarknum) {
-                opj_marker_info_t *new_marker;
-                cstr_index->tile_index[tileno].maxmarknum = (OPJ_UINT32)(100 + (OPJ_FLOAT32) cstr_index->tile_index[tileno].maxmarknum);
-                new_marker = (opj_marker_info_t *) opj_realloc(
-                                cstr_index->tile_index[tileno].marker,
-                                cstr_index->tile_index[tileno].maxmarknum *sizeof(opj_marker_info_t));
-                if (! new_marker) {
-                        opj_free(cstr_index->tile_index[tileno].marker);
-                        cstr_index->tile_index[tileno].marker = NULL;
-                        cstr_index->tile_index[tileno].maxmarknum = 0;
-                        cstr_index->tile_index[tileno].marknum = 0;
-                        /* opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to add tl marker\n"); */
-                        return OPJ_FALSE;
-                }
-                cstr_index->tile_index[tileno].marker = new_marker;
+static OPJ_BOOL opj_j2k_add_tlmarker(OPJ_UINT32 tileno,
+                                     opj_codestream_index_t *cstr_index, OPJ_UINT32 type, OPJ_OFF_T pos,
+                                     OPJ_UINT32 len)
+{
+    assert(cstr_index != 00);
+    assert(cstr_index->tile_index != 00);
+
+    /* expand the list? */
+    if ((cstr_index->tile_index[tileno].marknum + 1) >
+            cstr_index->tile_index[tileno].maxmarknum) {
+        opj_marker_info_t *new_marker;
+        cstr_index->tile_index[tileno].maxmarknum = (OPJ_UINT32)(100 +
+                (OPJ_FLOAT32) cstr_index->tile_index[tileno].maxmarknum);
+        new_marker = (opj_marker_info_t *) opj_realloc(
+                         cstr_index->tile_index[tileno].marker,
+                         cstr_index->tile_index[tileno].maxmarknum * sizeof(opj_marker_info_t));
+        if (! new_marker) {
+            opj_free(cstr_index->tile_index[tileno].marker);
+            cstr_index->tile_index[tileno].marker = NULL;
+            cstr_index->tile_index[tileno].maxmarknum = 0;
+            cstr_index->tile_index[tileno].marknum = 0;
+            /* opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to add tl marker\n"); */
+            return OPJ_FALSE;
         }
+        cstr_index->tile_index[tileno].marker = new_marker;
+    }
 
-        /* add the marker */
-        cstr_index->tile_index[tileno].marker[cstr_index->tile_index[tileno].marknum].type = (OPJ_UINT16)type;
-        cstr_index->tile_index[tileno].marker[cstr_index->tile_index[tileno].marknum].pos = (OPJ_INT32)pos;
-        cstr_index->tile_index[tileno].marker[cstr_index->tile_index[tileno].marknum].len = (OPJ_INT32)len;
-        cstr_index->tile_index[tileno].marknum++;
-
-        if (type == J2K_MS_SOT) {
-                OPJ_UINT32 l_current_tile_part = cstr_index->tile_index[tileno].current_tpsno;
+    /* add the marker */
+    cstr_index->tile_index[tileno].marker[cstr_index->tile_index[tileno].marknum].type
+        = (OPJ_UINT16)type;
+    cstr_index->tile_index[tileno].marker[cstr_index->tile_index[tileno].marknum].pos
+        = (OPJ_INT32)pos;
+    cstr_index->tile_index[tileno].marker[cstr_index->tile_index[tileno].marknum].len
+        = (OPJ_INT32)len;
+    cstr_index->tile_index[tileno].marknum++;
 
-                if (cstr_index->tile_index[tileno].tp_index)
-                        cstr_index->tile_index[tileno].tp_index[l_current_tile_part].start_pos = pos;
+    if (type == J2K_MS_SOT) {
+        OPJ_UINT32 l_current_tile_part = cstr_index->tile_index[tileno].current_tpsno;
 
+        if (cstr_index->tile_index[tileno].tp_index) {
+            cstr_index->tile_index[tileno].tp_index[l_current_tile_part].start_pos = pos;
         }
-        return OPJ_TRUE;
+
+    }
+    return OPJ_TRUE;
 }
 
 /*
@@ -6823,7 +7170,7 @@ static OPJ_BOOL opj_j2k_add_tlmarker(OPJ_UINT32 tileno, opj_codestream_index_t *
 OPJ_BOOL opj_j2k_end_decompress(opj_j2k_t *p_j2k,
                                 opj_stream_private_t *p_stream,
                                 opj_event_mgr_t * p_manager
-                                )
+                               )
 {
     (void)p_j2k;
     (void)p_stream;
@@ -6831,2684 +7178,2790 @@ OPJ_BOOL opj_j2k_end_decompress(opj_j2k_t *p_j2k,
     return OPJ_TRUE;
 }
 
-OPJ_BOOL opj_j2k_read_header(   opj_stream_private_t *p_stream,
-                                                            opj_j2k_t* p_j2k,
-                                                            opj_image_t** p_image,
-                                                            opj_event_mgr_t* p_manager )
+OPJ_BOOL opj_j2k_read_header(opj_stream_private_t *p_stream,
+                             opj_j2k_t* p_j2k,
+                             opj_image_t** p_image,
+                             opj_event_mgr_t* p_manager)
 {
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_stream != 00);
-        assert(p_manager != 00);
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_stream != 00);
+    assert(p_manager != 00);
 
-        /* create an empty image header */
-        p_j2k->m_private_image = opj_image_create0();
-        if (! p_j2k->m_private_image) {
-                return OPJ_FALSE;
-        }
+    /* create an empty image header */
+    p_j2k->m_private_image = opj_image_create0();
+    if (! p_j2k->m_private_image) {
+        return OPJ_FALSE;
+    }
 
-        /* customization of the validation */
-        if (! opj_j2k_setup_decoding_validation(p_j2k, p_manager)) {
-                opj_image_destroy(p_j2k->m_private_image);
-                p_j2k->m_private_image = NULL;
-                return OPJ_FALSE;
-        }
+    /* customization of the validation */
+    if (! opj_j2k_setup_decoding_validation(p_j2k, p_manager)) {
+        opj_image_destroy(p_j2k->m_private_image);
+        p_j2k->m_private_image = NULL;
+        return OPJ_FALSE;
+    }
 
-        /* validation of the parameters codec */
-        if (! opj_j2k_exec(p_j2k, p_j2k->m_validation_list, p_stream,p_manager)) {
-                opj_image_destroy(p_j2k->m_private_image);
-                p_j2k->m_private_image = NULL;
-                return OPJ_FALSE;
-        }
+    /* validation of the parameters codec */
+    if (! opj_j2k_exec(p_j2k, p_j2k->m_validation_list, p_stream, p_manager)) {
+        opj_image_destroy(p_j2k->m_private_image);
+        p_j2k->m_private_image = NULL;
+        return OPJ_FALSE;
+    }
 
-        /* customization of the encoding */
-        if (! opj_j2k_setup_header_reading(p_j2k, p_manager)) {
-                opj_image_destroy(p_j2k->m_private_image);
-                p_j2k->m_private_image = NULL;
-                return OPJ_FALSE;
-        }
+    /* customization of the encoding */
+    if (! opj_j2k_setup_header_reading(p_j2k, p_manager)) {
+        opj_image_destroy(p_j2k->m_private_image);
+        p_j2k->m_private_image = NULL;
+        return OPJ_FALSE;
+    }
 
-        /* read header */
-        if (! opj_j2k_exec (p_j2k,p_j2k->m_procedure_list,p_stream,p_manager)) {
-                opj_image_destroy(p_j2k->m_private_image);
-                p_j2k->m_private_image = NULL;
-                return OPJ_FALSE;
-        }
+    /* read header */
+    if (! opj_j2k_exec(p_j2k, p_j2k->m_procedure_list, p_stream, p_manager)) {
+        opj_image_destroy(p_j2k->m_private_image);
+        p_j2k->m_private_image = NULL;
+        return OPJ_FALSE;
+    }
 
-        *p_image = opj_image_create0();
-        if (! (*p_image)) {
-                return OPJ_FALSE;
-        }
+    *p_image = opj_image_create0();
+    if (!(*p_image)) {
+        return OPJ_FALSE;
+    }
 
-        /* Copy codestream image information to the output image */
-        opj_copy_image_header(p_j2k->m_private_image, *p_image);
+    /* Copy codestream image information to the output image */
+    opj_copy_image_header(p_j2k->m_private_image, *p_image);
 
     /*Allocate and initialize some elements of codestrem index*/
-        if (!opj_j2k_allocate_tile_element_cstr_index(p_j2k)){
-                return OPJ_FALSE;
-        }
+    if (!opj_j2k_allocate_tile_element_cstr_index(p_j2k)) {
+        return OPJ_FALSE;
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_setup_header_reading (opj_j2k_t *p_j2k, opj_event_mgr_t * p_manager)
+static OPJ_BOOL opj_j2k_setup_header_reading(opj_j2k_t *p_j2k,
+        opj_event_mgr_t * p_manager)
 {
-        /* preconditions*/
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
+    /* preconditions*/
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-        if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)opj_j2k_read_header_procedure, p_manager)) {
-                return OPJ_FALSE;
-        }
+    if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,
+                                           (opj_procedure)opj_j2k_read_header_procedure, p_manager)) {
+        return OPJ_FALSE;
+    }
 
-        /* DEVELOPER CORNER, add your custom procedures */
-        if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)opj_j2k_copy_default_tcp_and_create_tcd, p_manager))  {
-                return OPJ_FALSE;
-        }
-       
-        return OPJ_TRUE;
+    /* DEVELOPER CORNER, add your custom procedures */
+    if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,
+                                           (opj_procedure)opj_j2k_copy_default_tcp_and_create_tcd, p_manager))  {
+        return OPJ_FALSE;
+    }
+
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_setup_decoding_validation (opj_j2k_t *p_j2k, opj_event_mgr_t * p_manager)
+static OPJ_BOOL opj_j2k_setup_decoding_validation(opj_j2k_t *p_j2k,
+        opj_event_mgr_t * p_manager)
 {
-        /* preconditions*/
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
+    /* preconditions*/
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-        if (! opj_procedure_list_add_procedure(p_j2k->m_validation_list,(opj_procedure)opj_j2k_build_decoder, p_manager)) {
-                return OPJ_FALSE;
-        }
-        if (! opj_procedure_list_add_procedure(p_j2k->m_validation_list,(opj_procedure)opj_j2k_decoding_validation, p_manager)) {
-                return OPJ_FALSE;
-        }
+    if (! opj_procedure_list_add_procedure(p_j2k->m_validation_list,
+                                           (opj_procedure)opj_j2k_build_decoder, p_manager)) {
+        return OPJ_FALSE;
+    }
+    if (! opj_procedure_list_add_procedure(p_j2k->m_validation_list,
+                                           (opj_procedure)opj_j2k_decoding_validation, p_manager)) {
+        return OPJ_FALSE;
+    }
 
-        /* DEVELOPER CORNER, add your custom validation procedure */
-        return OPJ_TRUE;
+    /* DEVELOPER CORNER, add your custom validation procedure */
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_mct_validation (       opj_j2k_t * p_j2k,
-                                                                opj_stream_private_t *p_stream,
-                                                                opj_event_mgr_t * p_manager )
+static OPJ_BOOL opj_j2k_mct_validation(opj_j2k_t * p_j2k,
+                                       opj_stream_private_t *p_stream,
+                                       opj_event_mgr_t * p_manager)
 {
-        OPJ_BOOL l_is_valid = OPJ_TRUE;
-        OPJ_UINT32 i,j;
+    OPJ_BOOL l_is_valid = OPJ_TRUE;
+    OPJ_UINT32 i, j;
 
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_stream != 00);
-        assert(p_manager != 00);
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_stream != 00);
+    assert(p_manager != 00);
 
-        if ((p_j2k->m_cp.rsiz & 0x8200) == 0x8200) {
-                OPJ_UINT32 l_nb_tiles = p_j2k->m_cp.th * p_j2k->m_cp.tw;
-                opj_tcp_t * l_tcp = p_j2k->m_cp.tcps;
+    if ((p_j2k->m_cp.rsiz & 0x8200) == 0x8200) {
+        OPJ_UINT32 l_nb_tiles = p_j2k->m_cp.th * p_j2k->m_cp.tw;
+        opj_tcp_t * l_tcp = p_j2k->m_cp.tcps;
 
-                for (i=0;i<l_nb_tiles;++i) {
-                        if (l_tcp->mct == 2) {
-                                opj_tccp_t * l_tccp = l_tcp->tccps;
-                                l_is_valid &= (l_tcp->m_mct_coding_matrix != 00);
+        for (i = 0; i < l_nb_tiles; ++i) {
+            if (l_tcp->mct == 2) {
+                opj_tccp_t * l_tccp = l_tcp->tccps;
+                l_is_valid &= (l_tcp->m_mct_coding_matrix != 00);
 
-                                for (j=0;j<p_j2k->m_private_image->numcomps;++j) {
-                                        l_is_valid &= ! (l_tccp->qmfbid & 1);
-                                        ++l_tccp;
-                                }
-                        }
-                        ++l_tcp;
+                for (j = 0; j < p_j2k->m_private_image->numcomps; ++j) {
+                    l_is_valid &= !(l_tccp->qmfbid & 1);
+                    ++l_tccp;
                 }
+            }
+            ++l_tcp;
         }
+    }
 
-        return l_is_valid;
+    return l_is_valid;
 }
 
 OPJ_BOOL opj_j2k_setup_mct_encoding(opj_tcp_t * p_tcp, opj_image_t * p_image)
 {
-        OPJ_UINT32 i;
-        OPJ_UINT32 l_indix = 1;
-        opj_mct_data_t * l_mct_deco_data = 00,* l_mct_offset_data = 00;
-        opj_simple_mcc_decorrelation_data_t * l_mcc_data;
-        OPJ_UINT32 l_mct_size,l_nb_elem;
-        OPJ_FLOAT32 * l_data, * l_current_data;
-        opj_tccp_t * l_tccp;
-
-        /* preconditions */
-        assert(p_tcp != 00);
-
-        if (p_tcp->mct != 2) {
-                return OPJ_TRUE;
-        }
-
-        if (p_tcp->m_mct_decoding_matrix) {
-                if (p_tcp->m_nb_mct_records == p_tcp->m_nb_max_mct_records) {
-                        opj_mct_data_t *new_mct_records;
-                        p_tcp->m_nb_max_mct_records += OPJ_J2K_MCT_DEFAULT_NB_RECORDS;
+    OPJ_UINT32 i;
+    OPJ_UINT32 l_indix = 1;
+    opj_mct_data_t * l_mct_deco_data = 00, * l_mct_offset_data = 00;
+    opj_simple_mcc_decorrelation_data_t * l_mcc_data;
+    OPJ_UINT32 l_mct_size, l_nb_elem;
+    OPJ_FLOAT32 * l_data, * l_current_data;
+    opj_tccp_t * l_tccp;
 
-                        new_mct_records = (opj_mct_data_t *) opj_realloc(p_tcp->m_mct_records, p_tcp->m_nb_max_mct_records * sizeof(opj_mct_data_t));
-                        if (! new_mct_records) {
-                                opj_free(p_tcp->m_mct_records);
-                                p_tcp->m_mct_records = NULL;
-                                p_tcp->m_nb_max_mct_records = 0;
-                                p_tcp->m_nb_mct_records = 0;
-                                /* opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to setup mct encoding\n"); */
-                                return OPJ_FALSE;
-                        }
-                        p_tcp->m_mct_records = new_mct_records;
-                        l_mct_deco_data = p_tcp->m_mct_records + p_tcp->m_nb_mct_records;
+    /* preconditions */
+    assert(p_tcp != 00);
 
-                        memset(l_mct_deco_data ,0,(p_tcp->m_nb_max_mct_records - p_tcp->m_nb_mct_records) * sizeof(opj_mct_data_t));
-                }
-                l_mct_deco_data = p_tcp->m_mct_records + p_tcp->m_nb_mct_records;
+    if (p_tcp->mct != 2) {
+        return OPJ_TRUE;
+    }
 
-                if (l_mct_deco_data->m_data) {
-                        opj_free(l_mct_deco_data->m_data);
-                        l_mct_deco_data->m_data = 00;
-                }
+    if (p_tcp->m_mct_decoding_matrix) {
+        if (p_tcp->m_nb_mct_records == p_tcp->m_nb_max_mct_records) {
+            opj_mct_data_t *new_mct_records;
+            p_tcp->m_nb_max_mct_records += OPJ_J2K_MCT_DEFAULT_NB_RECORDS;
+
+            new_mct_records = (opj_mct_data_t *) opj_realloc(p_tcp->m_mct_records,
+                              p_tcp->m_nb_max_mct_records * sizeof(opj_mct_data_t));
+            if (! new_mct_records) {
+                opj_free(p_tcp->m_mct_records);
+                p_tcp->m_mct_records = NULL;
+                p_tcp->m_nb_max_mct_records = 0;
+                p_tcp->m_nb_mct_records = 0;
+                /* opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to setup mct encoding\n"); */
+                return OPJ_FALSE;
+            }
+            p_tcp->m_mct_records = new_mct_records;
+            l_mct_deco_data = p_tcp->m_mct_records + p_tcp->m_nb_mct_records;
 
-                l_mct_deco_data->m_index = l_indix++;
-                l_mct_deco_data->m_array_type = MCT_TYPE_DECORRELATION;
-                l_mct_deco_data->m_element_type = MCT_TYPE_FLOAT;
-                l_nb_elem = p_image->numcomps * p_image->numcomps;
-                l_mct_size = l_nb_elem * MCT_ELEMENT_SIZE[l_mct_deco_data->m_element_type];
-                l_mct_deco_data->m_data = (OPJ_BYTE*)opj_malloc(l_mct_size );
+            memset(l_mct_deco_data, 0,
+                   (p_tcp->m_nb_max_mct_records - p_tcp->m_nb_mct_records) * sizeof(
+                       opj_mct_data_t));
+        }
+        l_mct_deco_data = p_tcp->m_mct_records + p_tcp->m_nb_mct_records;
 
-                if (! l_mct_deco_data->m_data) {
-                        return OPJ_FALSE;
-                }
+        if (l_mct_deco_data->m_data) {
+            opj_free(l_mct_deco_data->m_data);
+            l_mct_deco_data->m_data = 00;
+        }
 
-                j2k_mct_write_functions_from_float[l_mct_deco_data->m_element_type](p_tcp->m_mct_decoding_matrix,l_mct_deco_data->m_data,l_nb_elem);
+        l_mct_deco_data->m_index = l_indix++;
+        l_mct_deco_data->m_array_type = MCT_TYPE_DECORRELATION;
+        l_mct_deco_data->m_element_type = MCT_TYPE_FLOAT;
+        l_nb_elem = p_image->numcomps * p_image->numcomps;
+        l_mct_size = l_nb_elem * MCT_ELEMENT_SIZE[l_mct_deco_data->m_element_type];
+        l_mct_deco_data->m_data = (OPJ_BYTE*)opj_malloc(l_mct_size);
 
-                l_mct_deco_data->m_data_size = l_mct_size;
-                ++p_tcp->m_nb_mct_records;
+        if (! l_mct_deco_data->m_data) {
+            return OPJ_FALSE;
         }
 
-        if (p_tcp->m_nb_mct_records == p_tcp->m_nb_max_mct_records) {
-                opj_mct_data_t *new_mct_records;
-                p_tcp->m_nb_max_mct_records += OPJ_J2K_MCT_DEFAULT_NB_RECORDS;
-                new_mct_records = (opj_mct_data_t *) opj_realloc(p_tcp->m_mct_records, p_tcp->m_nb_max_mct_records * sizeof(opj_mct_data_t));
-                if (! new_mct_records) {
-                        opj_free(p_tcp->m_mct_records);
-                        p_tcp->m_mct_records = NULL;
-                        p_tcp->m_nb_max_mct_records = 0;
-                        p_tcp->m_nb_mct_records = 0;
-                        /* opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to setup mct encoding\n"); */
-                        return OPJ_FALSE;
-                }
-                p_tcp->m_mct_records = new_mct_records;
-                l_mct_offset_data = p_tcp->m_mct_records + p_tcp->m_nb_mct_records;
+        j2k_mct_write_functions_from_float[l_mct_deco_data->m_element_type](
+            p_tcp->m_mct_decoding_matrix, l_mct_deco_data->m_data, l_nb_elem);
 
-                memset(l_mct_offset_data ,0,(p_tcp->m_nb_max_mct_records - p_tcp->m_nb_mct_records) * sizeof(opj_mct_data_t));
+        l_mct_deco_data->m_data_size = l_mct_size;
+        ++p_tcp->m_nb_mct_records;
+    }
 
-                if (l_mct_deco_data) {
-                        l_mct_deco_data = l_mct_offset_data - 1;
-                }
+    if (p_tcp->m_nb_mct_records == p_tcp->m_nb_max_mct_records) {
+        opj_mct_data_t *new_mct_records;
+        p_tcp->m_nb_max_mct_records += OPJ_J2K_MCT_DEFAULT_NB_RECORDS;
+        new_mct_records = (opj_mct_data_t *) opj_realloc(p_tcp->m_mct_records,
+                          p_tcp->m_nb_max_mct_records * sizeof(opj_mct_data_t));
+        if (! new_mct_records) {
+            opj_free(p_tcp->m_mct_records);
+            p_tcp->m_mct_records = NULL;
+            p_tcp->m_nb_max_mct_records = 0;
+            p_tcp->m_nb_mct_records = 0;
+            /* opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to setup mct encoding\n"); */
+            return OPJ_FALSE;
         }
-
+        p_tcp->m_mct_records = new_mct_records;
         l_mct_offset_data = p_tcp->m_mct_records + p_tcp->m_nb_mct_records;
 
-        if (l_mct_offset_data->m_data) {
-                opj_free(l_mct_offset_data->m_data);
-                l_mct_offset_data->m_data = 00;
+        memset(l_mct_offset_data, 0,
+               (p_tcp->m_nb_max_mct_records - p_tcp->m_nb_mct_records) * sizeof(
+                   opj_mct_data_t));
+
+        if (l_mct_deco_data) {
+            l_mct_deco_data = l_mct_offset_data - 1;
         }
+    }
 
-        l_mct_offset_data->m_index = l_indix++;
-        l_mct_offset_data->m_array_type = MCT_TYPE_OFFSET;
-        l_mct_offset_data->m_element_type = MCT_TYPE_FLOAT;
-        l_nb_elem = p_image->numcomps;
-        l_mct_size = l_nb_elem * MCT_ELEMENT_SIZE[l_mct_offset_data->m_element_type];
-        l_mct_offset_data->m_data = (OPJ_BYTE*)opj_malloc(l_mct_size );
+    l_mct_offset_data = p_tcp->m_mct_records + p_tcp->m_nb_mct_records;
 
-        if (! l_mct_offset_data->m_data) {
-                return OPJ_FALSE;
-        }
+    if (l_mct_offset_data->m_data) {
+        opj_free(l_mct_offset_data->m_data);
+        l_mct_offset_data->m_data = 00;
+    }
 
-        l_data = (OPJ_FLOAT32*)opj_malloc(l_nb_elem * sizeof(OPJ_FLOAT32));
-        if (! l_data) {
-                opj_free(l_mct_offset_data->m_data);
-                l_mct_offset_data->m_data = 00;
-                return OPJ_FALSE;
-        }
+    l_mct_offset_data->m_index = l_indix++;
+    l_mct_offset_data->m_array_type = MCT_TYPE_OFFSET;
+    l_mct_offset_data->m_element_type = MCT_TYPE_FLOAT;
+    l_nb_elem = p_image->numcomps;
+    l_mct_size = l_nb_elem * MCT_ELEMENT_SIZE[l_mct_offset_data->m_element_type];
+    l_mct_offset_data->m_data = (OPJ_BYTE*)opj_malloc(l_mct_size);
 
-        l_tccp = p_tcp->tccps;
-        l_current_data = l_data;
+    if (! l_mct_offset_data->m_data) {
+        return OPJ_FALSE;
+    }
 
-        for (i=0;i<l_nb_elem;++i) {
-                *(l_current_data++) = (OPJ_FLOAT32) (l_tccp->m_dc_level_shift);
-                ++l_tccp;
-        }
+    l_data = (OPJ_FLOAT32*)opj_malloc(l_nb_elem * sizeof(OPJ_FLOAT32));
+    if (! l_data) {
+        opj_free(l_mct_offset_data->m_data);
+        l_mct_offset_data->m_data = 00;
+        return OPJ_FALSE;
+    }
 
-        j2k_mct_write_functions_from_float[l_mct_offset_data->m_element_type](l_data,l_mct_offset_data->m_data,l_nb_elem);
+    l_tccp = p_tcp->tccps;
+    l_current_data = l_data;
 
-        opj_free(l_data);
+    for (i = 0; i < l_nb_elem; ++i) {
+        *(l_current_data++) = (OPJ_FLOAT32)(l_tccp->m_dc_level_shift);
+        ++l_tccp;
+    }
 
-        l_mct_offset_data->m_data_size = l_mct_size;
+    j2k_mct_write_functions_from_float[l_mct_offset_data->m_element_type](l_data,
+            l_mct_offset_data->m_data, l_nb_elem);
 
-        ++p_tcp->m_nb_mct_records;
+    opj_free(l_data);
 
-        if (p_tcp->m_nb_mcc_records == p_tcp->m_nb_max_mcc_records) {
-                opj_simple_mcc_decorrelation_data_t *new_mcc_records;
-                p_tcp->m_nb_max_mcc_records += OPJ_J2K_MCT_DEFAULT_NB_RECORDS;
-                new_mcc_records = (opj_simple_mcc_decorrelation_data_t *) opj_realloc(
-                                p_tcp->m_mcc_records, p_tcp->m_nb_max_mcc_records * sizeof(opj_simple_mcc_decorrelation_data_t));
-                if (! new_mcc_records) {
-                        opj_free(p_tcp->m_mcc_records);
-                        p_tcp->m_mcc_records = NULL;
-                        p_tcp->m_nb_max_mcc_records = 0;
-                        p_tcp->m_nb_mcc_records = 0;
-                        /* opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to setup mct encoding\n"); */
-                        return OPJ_FALSE;
-                }
-                p_tcp->m_mcc_records = new_mcc_records;
-                l_mcc_data = p_tcp->m_mcc_records + p_tcp->m_nb_mcc_records;
-                memset(l_mcc_data ,0,(p_tcp->m_nb_max_mcc_records - p_tcp->m_nb_mcc_records) * sizeof(opj_simple_mcc_decorrelation_data_t));
+    l_mct_offset_data->m_data_size = l_mct_size;
 
-        }
+    ++p_tcp->m_nb_mct_records;
 
+    if (p_tcp->m_nb_mcc_records == p_tcp->m_nb_max_mcc_records) {
+        opj_simple_mcc_decorrelation_data_t *new_mcc_records;
+        p_tcp->m_nb_max_mcc_records += OPJ_J2K_MCT_DEFAULT_NB_RECORDS;
+        new_mcc_records = (opj_simple_mcc_decorrelation_data_t *) opj_realloc(
+                              p_tcp->m_mcc_records, p_tcp->m_nb_max_mcc_records * sizeof(
+                                  opj_simple_mcc_decorrelation_data_t));
+        if (! new_mcc_records) {
+            opj_free(p_tcp->m_mcc_records);
+            p_tcp->m_mcc_records = NULL;
+            p_tcp->m_nb_max_mcc_records = 0;
+            p_tcp->m_nb_mcc_records = 0;
+            /* opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to setup mct encoding\n"); */
+            return OPJ_FALSE;
+        }
+        p_tcp->m_mcc_records = new_mcc_records;
         l_mcc_data = p_tcp->m_mcc_records + p_tcp->m_nb_mcc_records;
-        l_mcc_data->m_decorrelation_array = l_mct_deco_data;
-        l_mcc_data->m_is_irreversible = 1;
-        l_mcc_data->m_nb_comps = p_image->numcomps;
-        l_mcc_data->m_index = l_indix++;
-        l_mcc_data->m_offset_array = l_mct_offset_data;
-        ++p_tcp->m_nb_mcc_records;
+        memset(l_mcc_data, 0, (p_tcp->m_nb_max_mcc_records - p_tcp->m_nb_mcc_records) *
+               sizeof(opj_simple_mcc_decorrelation_data_t));
 
-        return OPJ_TRUE;
+    }
+
+    l_mcc_data = p_tcp->m_mcc_records + p_tcp->m_nb_mcc_records;
+    l_mcc_data->m_decorrelation_array = l_mct_deco_data;
+    l_mcc_data->m_is_irreversible = 1;
+    l_mcc_data->m_nb_comps = p_image->numcomps;
+    l_mcc_data->m_index = l_indix++;
+    l_mcc_data->m_offset_array = l_mct_offset_data;
+    ++p_tcp->m_nb_mcc_records;
+
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_build_decoder (opj_j2k_t * p_j2k,
-                                                            opj_stream_private_t *p_stream,
-                                                            opj_event_mgr_t * p_manager )
+static OPJ_BOOL opj_j2k_build_decoder(opj_j2k_t * p_j2k,
+                                      opj_stream_private_t *p_stream,
+                                      opj_event_mgr_t * p_manager)
 {
-        /* add here initialization of cp
-           copy paste of setup_decoder */
-  (void)p_j2k;
-  (void)p_stream;
-  (void)p_manager;
-        return OPJ_TRUE;
+    /* add here initialization of cp
+       copy paste of setup_decoder */
+    (void)p_j2k;
+    (void)p_stream;
+    (void)p_manager;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_build_encoder (opj_j2k_t * p_j2k,
-                                                        opj_stream_private_t *p_stream,
-                                                        opj_event_mgr_t * p_manager )
+static OPJ_BOOL opj_j2k_build_encoder(opj_j2k_t * p_j2k,
+                                      opj_stream_private_t *p_stream,
+                                      opj_event_mgr_t * p_manager)
 {
-        /* add here initialization of cp
-           copy paste of setup_encoder */
-  (void)p_j2k;
-  (void)p_stream;
-  (void)p_manager;
-        return OPJ_TRUE;
+    /* add here initialization of cp
+       copy paste of setup_encoder */
+    (void)p_j2k;
+    (void)p_stream;
+    (void)p_manager;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_encoding_validation (  opj_j2k_t * p_j2k,
-                                                                            opj_stream_private_t *p_stream,
-                                                                            opj_event_mgr_t * p_manager )
+static OPJ_BOOL opj_j2k_encoding_validation(opj_j2k_t * p_j2k,
+        opj_stream_private_t *p_stream,
+        opj_event_mgr_t * p_manager)
 {
-        OPJ_BOOL l_is_valid = OPJ_TRUE;
+    OPJ_BOOL l_is_valid = OPJ_TRUE;
 
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_stream != 00);
-        assert(p_manager != 00);
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_stream != 00);
+    assert(p_manager != 00);
 
-        /* STATE checking */
-        /* make sure the state is at 0 */
-        l_is_valid &= (p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_NONE);
+    /* STATE checking */
+    /* make sure the state is at 0 */
+    l_is_valid &= (p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_NONE);
 
-        /* POINTER validation */
-        /* make sure a p_j2k codec is present */
-        l_is_valid &= (p_j2k->m_procedure_list != 00);
-        /* make sure a validation list is present */
-        l_is_valid &= (p_j2k->m_validation_list != 00);
+    /* POINTER validation */
+    /* make sure a p_j2k codec is present */
+    l_is_valid &= (p_j2k->m_procedure_list != 00);
+    /* make sure a validation list is present */
+    l_is_valid &= (p_j2k->m_validation_list != 00);
 
-        /* ISO 15444-1:2004 states between 1 & 33 (0 -> 32) */
-        /* 33 (32) would always fail the check below (if a cast to 64bits was done) */
-        /* FIXME Shall we change OPJ_J2K_MAXRLVLS to 32 ? */
-        if ((p_j2k->m_cp.tcps->tccps->numresolutions <= 0) || (p_j2k->m_cp.tcps->tccps->numresolutions > 32)) {
-                opj_event_msg(p_manager, EVT_ERROR, "Number of resolutions is too high in comparison to the size of tiles\n");
-                return OPJ_FALSE;
-        }
+    /* ISO 15444-1:2004 states between 1 & 33 (0 -> 32) */
+    /* 33 (32) would always fail the check below (if a cast to 64bits was done) */
+    /* FIXME Shall we change OPJ_J2K_MAXRLVLS to 32 ? */
+    if ((p_j2k->m_cp.tcps->tccps->numresolutions <= 0) ||
+            (p_j2k->m_cp.tcps->tccps->numresolutions > 32)) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Number of resolutions is too high in comparison to the size of tiles\n");
+        return OPJ_FALSE;
+    }
 
-        if ((p_j2k->m_cp.tdx) < (OPJ_UINT32) (1 << (p_j2k->m_cp.tcps->tccps->numresolutions - 1U))) {
-                opj_event_msg(p_manager, EVT_ERROR, "Number of resolutions is too high in comparison to the size of tiles\n");
-                return OPJ_FALSE;
-        }
+    if ((p_j2k->m_cp.tdx) < (OPJ_UINT32)(1 <<
+                                         (p_j2k->m_cp.tcps->tccps->numresolutions - 1U))) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Number of resolutions is too high in comparison to the size of tiles\n");
+        return OPJ_FALSE;
+    }
 
-        if ((p_j2k->m_cp.tdy) < (OPJ_UINT32) (1 << (p_j2k->m_cp.tcps->tccps->numresolutions - 1U))) {
-                opj_event_msg(p_manager, EVT_ERROR, "Number of resolutions is too high in comparison to the size of tiles\n");
-                return OPJ_FALSE;
-        }
+    if ((p_j2k->m_cp.tdy) < (OPJ_UINT32)(1 <<
+                                         (p_j2k->m_cp.tcps->tccps->numresolutions - 1U))) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Number of resolutions is too high in comparison to the size of tiles\n");
+        return OPJ_FALSE;
+    }
 
-        /* PARAMETER VALIDATION */
-        return l_is_valid;
+    /* PARAMETER VALIDATION */
+    return l_is_valid;
 }
 
-static OPJ_BOOL opj_j2k_decoding_validation (  opj_j2k_t *p_j2k,
-                                        opj_stream_private_t *p_stream,
-                                        opj_event_mgr_t * p_manager
-                                        )
+static OPJ_BOOL opj_j2k_decoding_validation(opj_j2k_t *p_j2k,
+        opj_stream_private_t *p_stream,
+        opj_event_mgr_t * p_manager
+                                           )
 {
-        OPJ_BOOL l_is_valid = OPJ_TRUE;
+    OPJ_BOOL l_is_valid = OPJ_TRUE;
 
-        /* preconditions*/
-        assert(p_j2k != 00);
-        assert(p_stream != 00);
-        assert(p_manager != 00);
+    /* preconditions*/
+    assert(p_j2k != 00);
+    assert(p_stream != 00);
+    assert(p_manager != 00);
 
-        /* STATE checking */
-        /* make sure the state is at 0 */
+    /* STATE checking */
+    /* make sure the state is at 0 */
 #ifdef TODO_MSD
-        l_is_valid &= (p_j2k->m_specific_param.m_decoder.m_state == J2K_DEC_STATE_NONE);
+    l_is_valid &= (p_j2k->m_specific_param.m_decoder.m_state == J2K_DEC_STATE_NONE);
 #endif
-        l_is_valid &= (p_j2k->m_specific_param.m_decoder.m_state == 0x0000);
+    l_is_valid &= (p_j2k->m_specific_param.m_decoder.m_state == 0x0000);
 
-        /* POINTER validation */
-        /* make sure a p_j2k codec is present */
-        /* make sure a procedure list is present */
-        l_is_valid &= (p_j2k->m_procedure_list != 00);
-        /* make sure a validation list is present */
-        l_is_valid &= (p_j2k->m_validation_list != 00);
+    /* POINTER validation */
+    /* make sure a p_j2k codec is present */
+    /* make sure a procedure list is present */
+    l_is_valid &= (p_j2k->m_procedure_list != 00);
+    /* make sure a validation list is present */
+    l_is_valid &= (p_j2k->m_validation_list != 00);
 
-        /* PARAMETER VALIDATION */
-        return l_is_valid;
+    /* PARAMETER VALIDATION */
+    return l_is_valid;
 }
 
-static OPJ_BOOL opj_j2k_read_header_procedure( opj_j2k_t *p_j2k,
-                                                                            opj_stream_private_t *p_stream,
-                                                                            opj_event_mgr_t * p_manager)
+static OPJ_BOOL opj_j2k_read_header_procedure(opj_j2k_t *p_j2k,
+        opj_stream_private_t *p_stream,
+        opj_event_mgr_t * p_manager)
 {
-        OPJ_UINT32 l_current_marker;
-        OPJ_UINT32 l_marker_size;
-        const opj_dec_memory_marker_handler_t * l_marker_handler = 00;
-        OPJ_BOOL l_has_siz = 0;
-        OPJ_BOOL l_has_cod = 0;
-        OPJ_BOOL l_has_qcd = 0;
+    OPJ_UINT32 l_current_marker;
+    OPJ_UINT32 l_marker_size;
+    const opj_dec_memory_marker_handler_t * l_marker_handler = 00;
+    OPJ_BOOL l_has_siz = 0;
+    OPJ_BOOL l_has_cod = 0;
+    OPJ_BOOL l_has_qcd = 0;
 
-        /* preconditions */
-        assert(p_stream != 00);
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
+    /* preconditions */
+    assert(p_stream != 00);
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-        /*  We enter in the main header */
-        p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_MHSOC;
+    /*  We enter in the main header */
+    p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_MHSOC;
 
-        /* Try to read the SOC marker, the codestream must begin with SOC marker */
-        if (! opj_j2k_read_soc(p_j2k,p_stream,p_manager)) {
-                opj_event_msg(p_manager, EVT_ERROR, "Expected a SOC marker \n");
-                return OPJ_FALSE;
-        }
+    /* Try to read the SOC marker, the codestream must begin with SOC marker */
+    if (! opj_j2k_read_soc(p_j2k, p_stream, p_manager)) {
+        opj_event_msg(p_manager, EVT_ERROR, "Expected a SOC marker \n");
+        return OPJ_FALSE;
+    }
 
-        /* Try to read 2 bytes (the next marker ID) from stream and copy them into the buffer */
-        if (opj_stream_read_data(p_stream,p_j2k->m_specific_param.m_decoder.m_header_data,2,p_manager) != 2) {
-                opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
-                return OPJ_FALSE;
-        }
-
-        /* Read 2 bytes as the new marker ID */
-        opj_read_bytes(p_j2k->m_specific_param.m_decoder.m_header_data,&l_current_marker,2);
-
-        /* Try to read until the SOT is detected */
-        while (l_current_marker != J2K_MS_SOT) {
-
-                /* Check if the current marker ID is valid */
-                if (l_current_marker < 0xff00) {
-                        opj_event_msg(p_manager, EVT_ERROR, "A marker ID was expected (0xff--) instead of %.8x\n", l_current_marker);
-                        return OPJ_FALSE;
-                }
-
-                /* Get the marker handler from the marker ID */
-                l_marker_handler = opj_j2k_get_marker_handler(l_current_marker);
+    /* Try to read 2 bytes (the next marker ID) from stream and copy them into the buffer */
+    if (opj_stream_read_data(p_stream,
+                             p_j2k->m_specific_param.m_decoder.m_header_data, 2, p_manager) != 2) {
+        opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
+        return OPJ_FALSE;
+    }
 
-                /* Manage case where marker is unknown */
-                if (l_marker_handler->id == J2K_MS_UNK) {
-                        if (! opj_j2k_read_unk(p_j2k, p_stream, &l_current_marker, p_manager)){
-                                opj_event_msg(p_manager, EVT_ERROR, "Unknow marker have been detected and generated error.\n");
-                                return OPJ_FALSE;
-                        }
+    /* Read 2 bytes as the new marker ID */
+    opj_read_bytes(p_j2k->m_specific_param.m_decoder.m_header_data,
+                   &l_current_marker, 2);
 
-                        if (l_current_marker == J2K_MS_SOT)
-                                break; /* SOT marker is detected main header is completely read */
-                        else    /* Get the marker handler from the marker ID */
-                                l_marker_handler = opj_j2k_get_marker_handler(l_current_marker);
-                }
+    /* Try to read until the SOT is detected */
+    while (l_current_marker != J2K_MS_SOT) {
 
-                if (l_marker_handler->id == J2K_MS_SIZ) {
-                    /* Mark required SIZ marker as found */
-                    l_has_siz = 1;
-                }
-                if (l_marker_handler->id == J2K_MS_COD) {
-                    /* Mark required COD marker as found */
-                    l_has_cod = 1;
-                }
-                if (l_marker_handler->id == J2K_MS_QCD) {
-                    /* Mark required QCD marker as found */
-                    l_has_qcd = 1;
-                }
+        /* Check if the current marker ID is valid */
+        if (l_current_marker < 0xff00) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "A marker ID was expected (0xff--) instead of %.8x\n", l_current_marker);
+            return OPJ_FALSE;
+        }
 
-                /* Check if the marker is known and if it is the right place to find it */
-                if (! (p_j2k->m_specific_param.m_decoder.m_state & l_marker_handler->states) ) {
-                        opj_event_msg(p_manager, EVT_ERROR, "Marker is not compliant with its position\n");
-                        return OPJ_FALSE;
-                }
+        /* Get the marker handler from the marker ID */
+        l_marker_handler = opj_j2k_get_marker_handler(l_current_marker);
 
-                /* Try to read 2 bytes (the marker size) from stream and copy them into the buffer */
-                if (opj_stream_read_data(p_stream,p_j2k->m_specific_param.m_decoder.m_header_data,2,p_manager) != 2) {
-                        opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
-                        return OPJ_FALSE;
-                }
+        /* Manage case where marker is unknown */
+        if (l_marker_handler->id == J2K_MS_UNK) {
+            if (! opj_j2k_read_unk(p_j2k, p_stream, &l_current_marker, p_manager)) {
+                opj_event_msg(p_manager, EVT_ERROR,
+                              "Unknow marker have been detected and generated error.\n");
+                return OPJ_FALSE;
+            }
 
-                /* read 2 bytes as the marker size */
-                opj_read_bytes(p_j2k->m_specific_param.m_decoder.m_header_data,&l_marker_size,2);
-                l_marker_size -= 2; /* Subtract the size of the marker ID already read */
-
-                /* Check if the marker size is compatible with the header data size */
-                if (l_marker_size > p_j2k->m_specific_param.m_decoder.m_header_data_size) {
-                        OPJ_BYTE *new_header_data = (OPJ_BYTE *) opj_realloc(p_j2k->m_specific_param.m_decoder.m_header_data, l_marker_size);
-                        if (! new_header_data) {
-                                opj_free(p_j2k->m_specific_param.m_decoder.m_header_data);
-                                p_j2k->m_specific_param.m_decoder.m_header_data = NULL;
-                                p_j2k->m_specific_param.m_decoder.m_header_data_size = 0;
-                                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read header\n");
-                                return OPJ_FALSE;
-                        }
-                        p_j2k->m_specific_param.m_decoder.m_header_data = new_header_data;
-                        p_j2k->m_specific_param.m_decoder.m_header_data_size = l_marker_size;
-                }
+            if (l_current_marker == J2K_MS_SOT) {
+                break;    /* SOT marker is detected main header is completely read */
+            } else { /* Get the marker handler from the marker ID */
+                l_marker_handler = opj_j2k_get_marker_handler(l_current_marker);
+            }
+        }
 
-                /* Try to read the rest of the marker segment from stream and copy them into the buffer */
-                if (opj_stream_read_data(p_stream,p_j2k->m_specific_param.m_decoder.m_header_data,l_marker_size,p_manager) != l_marker_size) {
-                        opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
-                        return OPJ_FALSE;
-                }
+        if (l_marker_handler->id == J2K_MS_SIZ) {
+            /* Mark required SIZ marker as found */
+            l_has_siz = 1;
+        }
+        if (l_marker_handler->id == J2K_MS_COD) {
+            /* Mark required COD marker as found */
+            l_has_cod = 1;
+        }
+        if (l_marker_handler->id == J2K_MS_QCD) {
+            /* Mark required QCD marker as found */
+            l_has_qcd = 1;
+        }
 
-                /* Read the marker segment with the correct marker handler */
-                if (! (*(l_marker_handler->handler))(p_j2k,p_j2k->m_specific_param.m_decoder.m_header_data,l_marker_size,p_manager)) {
-                        opj_event_msg(p_manager, EVT_ERROR, "Marker handler function failed to read the marker segment\n");
-                        return OPJ_FALSE;
-                }
+        /* Check if the marker is known and if it is the right place to find it */
+        if (!(p_j2k->m_specific_param.m_decoder.m_state & l_marker_handler->states)) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Marker is not compliant with its position\n");
+            return OPJ_FALSE;
+        }
 
-                /* Add the marker to the codestream index*/
-                if (OPJ_FALSE == opj_j2k_add_mhmarker(
-                                        p_j2k->cstr_index,
-                                        l_marker_handler->id,
-                                        (OPJ_UINT32) opj_stream_tell(p_stream) - l_marker_size - 4,
-                                        l_marker_size + 4 )) {
-                        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to add mh marker\n");
-                        return OPJ_FALSE;
-                }
+        /* Try to read 2 bytes (the marker size) from stream and copy them into the buffer */
+        if (opj_stream_read_data(p_stream,
+                                 p_j2k->m_specific_param.m_decoder.m_header_data, 2, p_manager) != 2) {
+            opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
+            return OPJ_FALSE;
+        }
 
-                /* Try to read 2 bytes (the next marker ID) from stream and copy them into the buffer */
-                if (opj_stream_read_data(p_stream,p_j2k->m_specific_param.m_decoder.m_header_data,2,p_manager) != 2) {
-                        opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
-                        return OPJ_FALSE;
-                }
+        /* read 2 bytes as the marker size */
+        opj_read_bytes(p_j2k->m_specific_param.m_decoder.m_header_data, &l_marker_size,
+                       2);
+        l_marker_size -= 2; /* Subtract the size of the marker ID already read */
 
-                /* read 2 bytes as the new marker ID */
-                opj_read_bytes(p_j2k->m_specific_param.m_decoder.m_header_data,&l_current_marker,2);
+        /* Check if the marker size is compatible with the header data size */
+        if (l_marker_size > p_j2k->m_specific_param.m_decoder.m_header_data_size) {
+            OPJ_BYTE *new_header_data = (OPJ_BYTE *) opj_realloc(
+                                            p_j2k->m_specific_param.m_decoder.m_header_data, l_marker_size);
+            if (! new_header_data) {
+                opj_free(p_j2k->m_specific_param.m_decoder.m_header_data);
+                p_j2k->m_specific_param.m_decoder.m_header_data = NULL;
+                p_j2k->m_specific_param.m_decoder.m_header_data_size = 0;
+                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read header\n");
+                return OPJ_FALSE;
+            }
+            p_j2k->m_specific_param.m_decoder.m_header_data = new_header_data;
+            p_j2k->m_specific_param.m_decoder.m_header_data_size = l_marker_size;
         }
 
-        if (l_has_siz == 0) {
-            opj_event_msg(p_manager, EVT_ERROR, "required SIZ marker not found in main header\n");
+        /* Try to read the rest of the marker segment from stream and copy them into the buffer */
+        if (opj_stream_read_data(p_stream,
+                                 p_j2k->m_specific_param.m_decoder.m_header_data, l_marker_size,
+                                 p_manager) != l_marker_size) {
+            opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
             return OPJ_FALSE;
         }
-        if (l_has_cod == 0) {
-            opj_event_msg(p_manager, EVT_ERROR, "required COD marker not found in main header\n");
+
+        /* Read the marker segment with the correct marker handler */
+        if (!(*(l_marker_handler->handler))(p_j2k,
+                                            p_j2k->m_specific_param.m_decoder.m_header_data, l_marker_size, p_manager)) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Marker handler function failed to read the marker segment\n");
             return OPJ_FALSE;
         }
-        if (l_has_qcd == 0) {
-            opj_event_msg(p_manager, EVT_ERROR, "required QCD marker not found in main header\n");
+
+        /* Add the marker to the codestream index*/
+        if (OPJ_FALSE == opj_j2k_add_mhmarker(
+                    p_j2k->cstr_index,
+                    l_marker_handler->id,
+                    (OPJ_UINT32) opj_stream_tell(p_stream) - l_marker_size - 4,
+                    l_marker_size + 4)) {
+            opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to add mh marker\n");
             return OPJ_FALSE;
         }
-       
-        if (! opj_j2k_merge_ppm(&(p_j2k->m_cp), p_manager)) {
-            opj_event_msg(p_manager, EVT_ERROR, "Failed to merge PPM data\n");
+
+        /* Try to read 2 bytes (the next marker ID) from stream and copy them into the buffer */
+        if (opj_stream_read_data(p_stream,
+                                 p_j2k->m_specific_param.m_decoder.m_header_data, 2, p_manager) != 2) {
+            opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
             return OPJ_FALSE;
         }
 
-        opj_event_msg(p_manager, EVT_INFO, "Main header has been correctly decoded.\n");
+        /* read 2 bytes as the new marker ID */
+        opj_read_bytes(p_j2k->m_specific_param.m_decoder.m_header_data,
+                       &l_current_marker, 2);
+    }
 
-        /* Position of the last element if the main header */
-        p_j2k->cstr_index->main_head_end = (OPJ_UINT32) opj_stream_tell(p_stream) - 2;
+    if (l_has_siz == 0) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "required SIZ marker not found in main header\n");
+        return OPJ_FALSE;
+    }
+    if (l_has_cod == 0) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "required COD marker not found in main header\n");
+        return OPJ_FALSE;
+    }
+    if (l_has_qcd == 0) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "required QCD marker not found in main header\n");
+        return OPJ_FALSE;
+    }
 
-        /* Next step: read a tile-part header */
-        p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_TPHSOT;
+    if (! opj_j2k_merge_ppm(&(p_j2k->m_cp), p_manager)) {
+        opj_event_msg(p_manager, EVT_ERROR, "Failed to merge PPM data\n");
+        return OPJ_FALSE;
+    }
 
-        return OPJ_TRUE;
+    opj_event_msg(p_manager, EVT_INFO, "Main header has been correctly decoded.\n");
+
+    /* Position of the last element if the main header */
+    p_j2k->cstr_index->main_head_end = (OPJ_UINT32) opj_stream_tell(p_stream) - 2;
+
+    /* Next step: read a tile-part header */
+    p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_TPHSOT;
+
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_exec ( opj_j2k_t * p_j2k,
-                                        opj_procedure_list_t * p_procedure_list,
-                                        opj_stream_private_t *p_stream,
-                                        opj_event_mgr_t * p_manager )
+static OPJ_BOOL opj_j2k_exec(opj_j2k_t * p_j2k,
+                             opj_procedure_list_t * p_procedure_list,
+                             opj_stream_private_t *p_stream,
+                             opj_event_mgr_t * p_manager)
 {
-        OPJ_BOOL (** l_procedure) (opj_j2k_t * ,opj_stream_private_t *,opj_event_mgr_t *) = 00;
-        OPJ_BOOL l_result = OPJ_TRUE;
-        OPJ_UINT32 l_nb_proc, i;
+    OPJ_BOOL(** l_procedure)(opj_j2k_t *, opj_stream_private_t *,
+                             opj_event_mgr_t *) = 00;
+    OPJ_BOOL l_result = OPJ_TRUE;
+    OPJ_UINT32 l_nb_proc, i;
 
-        /* preconditions*/
-        assert(p_procedure_list != 00);
-        assert(p_j2k != 00);
-        assert(p_stream != 00);
-        assert(p_manager != 00);
+    /* preconditions*/
+    assert(p_procedure_list != 00);
+    assert(p_j2k != 00);
+    assert(p_stream != 00);
+    assert(p_manager != 00);
 
-        l_nb_proc = opj_procedure_list_get_nb_procedures(p_procedure_list);
-        l_procedure = (OPJ_BOOL (**) (opj_j2k_t * ,opj_stream_private_t *,opj_event_mgr_t *)) opj_procedure_list_get_first_procedure(p_procedure_list);
+    l_nb_proc = opj_procedure_list_get_nb_procedures(p_procedure_list);
+    l_procedure = (OPJ_BOOL(**)(opj_j2k_t *, opj_stream_private_t *,
+                                opj_event_mgr_t *)) opj_procedure_list_get_first_procedure(p_procedure_list);
 
-        for     (i=0;i<l_nb_proc;++i) {
-                l_result = l_result && ((*l_procedure) (p_j2k,p_stream,p_manager));
-                ++l_procedure;
-        }
+    for (i = 0; i < l_nb_proc; ++i) {
+        l_result = l_result && ((*l_procedure)(p_j2k, p_stream, p_manager));
+        ++l_procedure;
+    }
 
-        /* and clear the procedure list at the end.*/
-        opj_procedure_list_clear(p_procedure_list);
-        return l_result;
+    /* and clear the procedure list at the end.*/
+    opj_procedure_list_clear(p_procedure_list);
+    return l_result;
 }
 
 /* FIXME DOC*/
-static OPJ_BOOL opj_j2k_copy_default_tcp_and_create_tcd (       opj_j2k_t * p_j2k,
-                                                            opj_stream_private_t *p_stream,
-                                                            opj_event_mgr_t * p_manager
-                                                            )
-{
-        opj_tcp_t * l_tcp = 00;
-        opj_tcp_t * l_default_tcp = 00;
-        OPJ_UINT32 l_nb_tiles;
-        OPJ_UINT32 i,j;
-        opj_tccp_t *l_current_tccp = 00;
-        OPJ_UINT32 l_tccp_size;
-        OPJ_UINT32 l_mct_size;
-        opj_image_t * l_image;
-        OPJ_UINT32 l_mcc_records_size,l_mct_records_size;
-        opj_mct_data_t * l_src_mct_rec, *l_dest_mct_rec;
-        opj_simple_mcc_decorrelation_data_t * l_src_mcc_rec, *l_dest_mcc_rec;
-        OPJ_UINT32 l_offset;
-
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_stream != 00);
-        assert(p_manager != 00);
-
-        l_image = p_j2k->m_private_image;
-        l_nb_tiles = p_j2k->m_cp.th * p_j2k->m_cp.tw;
-        l_tcp = p_j2k->m_cp.tcps;
-        l_tccp_size = l_image->numcomps * (OPJ_UINT32)sizeof(opj_tccp_t);
-        l_default_tcp = p_j2k->m_specific_param.m_decoder.m_default_tcp;
-        l_mct_size = l_image->numcomps * l_image->numcomps * (OPJ_UINT32)sizeof(OPJ_FLOAT32);
-
-        /* For each tile */
-        for (i=0; i<l_nb_tiles; ++i) {
-                /* keep the tile-compo coding parameters pointer of the current tile coding parameters*/
-                l_current_tccp = l_tcp->tccps;
-                /*Copy default coding parameters into the current tile coding parameters*/
-                memcpy(l_tcp, l_default_tcp, sizeof(opj_tcp_t));
-                /* Initialize some values of the current tile coding parameters*/
-                l_tcp->cod = 0;
-                l_tcp->ppt = 0;
-                l_tcp->ppt_data = 00;
-                /* Remove memory not owned by this tile in case of early error return. */
-                l_tcp->m_mct_decoding_matrix = 00;
-                l_tcp->m_nb_max_mct_records = 0;
-                l_tcp->m_mct_records = 00;
-                l_tcp->m_nb_max_mcc_records = 0;
-                l_tcp->m_mcc_records = 00;
-                /* Reconnect the tile-compo coding parameters pointer to the current tile coding parameters*/
-                l_tcp->tccps = l_current_tccp;
-
-                /* Get the mct_decoding_matrix of the dflt_tile_cp and copy them into the current tile cp*/
-                if (l_default_tcp->m_mct_decoding_matrix) {
-                        l_tcp->m_mct_decoding_matrix = (OPJ_FLOAT32*)opj_malloc(l_mct_size);
-                        if (! l_tcp->m_mct_decoding_matrix ) {
-                                return OPJ_FALSE;
-                        }
-                        memcpy(l_tcp->m_mct_decoding_matrix,l_default_tcp->m_mct_decoding_matrix,l_mct_size);
-                }
-
-                /* Get the mct_record of the dflt_tile_cp and copy them into the current tile cp*/
-                l_mct_records_size = l_default_tcp->m_nb_max_mct_records * (OPJ_UINT32)sizeof(opj_mct_data_t);
-                l_tcp->m_mct_records = (opj_mct_data_t*)opj_malloc(l_mct_records_size);
-                if (! l_tcp->m_mct_records) {
-                        return OPJ_FALSE;
-                }
-                memcpy(l_tcp->m_mct_records, l_default_tcp->m_mct_records,l_mct_records_size);
-
-                /* Copy the mct record data from dflt_tile_cp to the current tile*/
-                l_src_mct_rec = l_default_tcp->m_mct_records;
-                l_dest_mct_rec = l_tcp->m_mct_records;
+static OPJ_BOOL opj_j2k_copy_default_tcp_and_create_tcd(opj_j2k_t * p_j2k,
+        opj_stream_private_t *p_stream,
+        opj_event_mgr_t * p_manager
+                                                       )
+{
+    opj_tcp_t * l_tcp = 00;
+    opj_tcp_t * l_default_tcp = 00;
+    OPJ_UINT32 l_nb_tiles;
+    OPJ_UINT32 i, j;
+    opj_tccp_t *l_current_tccp = 00;
+    OPJ_UINT32 l_tccp_size;
+    OPJ_UINT32 l_mct_size;
+    opj_image_t * l_image;
+    OPJ_UINT32 l_mcc_records_size, l_mct_records_size;
+    opj_mct_data_t * l_src_mct_rec, *l_dest_mct_rec;
+    opj_simple_mcc_decorrelation_data_t * l_src_mcc_rec, *l_dest_mcc_rec;
+    OPJ_UINT32 l_offset;
+
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_stream != 00);
+    assert(p_manager != 00);
+
+    l_image = p_j2k->m_private_image;
+    l_nb_tiles = p_j2k->m_cp.th * p_j2k->m_cp.tw;
+    l_tcp = p_j2k->m_cp.tcps;
+    l_tccp_size = l_image->numcomps * (OPJ_UINT32)sizeof(opj_tccp_t);
+    l_default_tcp = p_j2k->m_specific_param.m_decoder.m_default_tcp;
+    l_mct_size = l_image->numcomps * l_image->numcomps * (OPJ_UINT32)sizeof(
+                     OPJ_FLOAT32);
+
+    /* For each tile */
+    for (i = 0; i < l_nb_tiles; ++i) {
+        /* keep the tile-compo coding parameters pointer of the current tile coding parameters*/
+        l_current_tccp = l_tcp->tccps;
+        /*Copy default coding parameters into the current tile coding parameters*/
+        memcpy(l_tcp, l_default_tcp, sizeof(opj_tcp_t));
+        /* Initialize some values of the current tile coding parameters*/
+        l_tcp->cod = 0;
+        l_tcp->ppt = 0;
+        l_tcp->ppt_data = 00;
+        /* Remove memory not owned by this tile in case of early error return. */
+        l_tcp->m_mct_decoding_matrix = 00;
+        l_tcp->m_nb_max_mct_records = 0;
+        l_tcp->m_mct_records = 00;
+        l_tcp->m_nb_max_mcc_records = 0;
+        l_tcp->m_mcc_records = 00;
+        /* Reconnect the tile-compo coding parameters pointer to the current tile coding parameters*/
+        l_tcp->tccps = l_current_tccp;
+
+        /* Get the mct_decoding_matrix of the dflt_tile_cp and copy them into the current tile cp*/
+        if (l_default_tcp->m_mct_decoding_matrix) {
+            l_tcp->m_mct_decoding_matrix = (OPJ_FLOAT32*)opj_malloc(l_mct_size);
+            if (! l_tcp->m_mct_decoding_matrix) {
+                return OPJ_FALSE;
+            }
+            memcpy(l_tcp->m_mct_decoding_matrix, l_default_tcp->m_mct_decoding_matrix,
+                   l_mct_size);
+        }
 
-                for (j=0;j<l_default_tcp->m_nb_mct_records;++j) {
+        /* Get the mct_record of the dflt_tile_cp and copy them into the current tile cp*/
+        l_mct_records_size = l_default_tcp->m_nb_max_mct_records * (OPJ_UINT32)sizeof(
+                                 opj_mct_data_t);
+        l_tcp->m_mct_records = (opj_mct_data_t*)opj_malloc(l_mct_records_size);
+        if (! l_tcp->m_mct_records) {
+            return OPJ_FALSE;
+        }
+        memcpy(l_tcp->m_mct_records, l_default_tcp->m_mct_records, l_mct_records_size);
 
-                        if (l_src_mct_rec->m_data) {
+        /* Copy the mct record data from dflt_tile_cp to the current tile*/
+        l_src_mct_rec = l_default_tcp->m_mct_records;
+        l_dest_mct_rec = l_tcp->m_mct_records;
 
-                                l_dest_mct_rec->m_data = (OPJ_BYTE*) opj_malloc(l_src_mct_rec->m_data_size);
-                                if(! l_dest_mct_rec->m_data) {
-                                        return OPJ_FALSE;
-                                }
-                                memcpy(l_dest_mct_rec->m_data,l_src_mct_rec->m_data,l_src_mct_rec->m_data_size);
-                        }
+        for (j = 0; j < l_default_tcp->m_nb_mct_records; ++j) {
 
-                        ++l_src_mct_rec;
-                        ++l_dest_mct_rec;
-                        /* Update with each pass to free exactly what has been allocated on early return. */
-                        l_tcp->m_nb_max_mct_records += 1;
-                }
+            if (l_src_mct_rec->m_data) {
 
-                /* Get the mcc_record of the dflt_tile_cp and copy them into the current tile cp*/
-                l_mcc_records_size = l_default_tcp->m_nb_max_mcc_records * (OPJ_UINT32)sizeof(opj_simple_mcc_decorrelation_data_t);
-                l_tcp->m_mcc_records = (opj_simple_mcc_decorrelation_data_t*) opj_malloc(l_mcc_records_size);
-                if (! l_tcp->m_mcc_records) {
-                        return OPJ_FALSE;
+                l_dest_mct_rec->m_data = (OPJ_BYTE*) opj_malloc(l_src_mct_rec->m_data_size);
+                if (! l_dest_mct_rec->m_data) {
+                    return OPJ_FALSE;
                 }
-                memcpy(l_tcp->m_mcc_records,l_default_tcp->m_mcc_records,l_mcc_records_size);
-                l_tcp->m_nb_max_mcc_records = l_default_tcp->m_nb_max_mcc_records;
+                memcpy(l_dest_mct_rec->m_data, l_src_mct_rec->m_data,
+                       l_src_mct_rec->m_data_size);
+            }
 
-                /* Copy the mcc record data from dflt_tile_cp to the current tile*/
-                l_src_mcc_rec = l_default_tcp->m_mcc_records;
-                l_dest_mcc_rec = l_tcp->m_mcc_records;
+            ++l_src_mct_rec;
+            ++l_dest_mct_rec;
+            /* Update with each pass to free exactly what has been allocated on early return. */
+            l_tcp->m_nb_max_mct_records += 1;
+        }
 
-                for (j=0;j<l_default_tcp->m_nb_max_mcc_records;++j) {
+        /* Get the mcc_record of the dflt_tile_cp and copy them into the current tile cp*/
+        l_mcc_records_size = l_default_tcp->m_nb_max_mcc_records * (OPJ_UINT32)sizeof(
+                                 opj_simple_mcc_decorrelation_data_t);
+        l_tcp->m_mcc_records = (opj_simple_mcc_decorrelation_data_t*) opj_malloc(
+                                   l_mcc_records_size);
+        if (! l_tcp->m_mcc_records) {
+            return OPJ_FALSE;
+        }
+        memcpy(l_tcp->m_mcc_records, l_default_tcp->m_mcc_records, l_mcc_records_size);
+        l_tcp->m_nb_max_mcc_records = l_default_tcp->m_nb_max_mcc_records;
 
-                        if (l_src_mcc_rec->m_decorrelation_array) {
-                                l_offset = (OPJ_UINT32)(l_src_mcc_rec->m_decorrelation_array - l_default_tcp->m_mct_records);
-                                l_dest_mcc_rec->m_decorrelation_array = l_tcp->m_mct_records + l_offset;
-                        }
+        /* Copy the mcc record data from dflt_tile_cp to the current tile*/
+        l_src_mcc_rec = l_default_tcp->m_mcc_records;
+        l_dest_mcc_rec = l_tcp->m_mcc_records;
 
-                        if (l_src_mcc_rec->m_offset_array) {
-                                l_offset = (OPJ_UINT32)(l_src_mcc_rec->m_offset_array - l_default_tcp->m_mct_records);
-                                l_dest_mcc_rec->m_offset_array = l_tcp->m_mct_records + l_offset;
-                        }
+        for (j = 0; j < l_default_tcp->m_nb_max_mcc_records; ++j) {
 
-                        ++l_src_mcc_rec;
-                        ++l_dest_mcc_rec;
-                }
+            if (l_src_mcc_rec->m_decorrelation_array) {
+                l_offset = (OPJ_UINT32)(l_src_mcc_rec->m_decorrelation_array -
+                                        l_default_tcp->m_mct_records);
+                l_dest_mcc_rec->m_decorrelation_array = l_tcp->m_mct_records + l_offset;
+            }
 
-                /* Copy all the dflt_tile_compo_cp to the current tile cp */
-                memcpy(l_current_tccp,l_default_tcp->tccps,l_tccp_size);
+            if (l_src_mcc_rec->m_offset_array) {
+                l_offset = (OPJ_UINT32)(l_src_mcc_rec->m_offset_array -
+                                        l_default_tcp->m_mct_records);
+                l_dest_mcc_rec->m_offset_array = l_tcp->m_mct_records + l_offset;
+            }
 
-                /* Move to next tile cp*/
-                ++l_tcp;
+            ++l_src_mcc_rec;
+            ++l_dest_mcc_rec;
         }
 
-        /* Create the current tile decoder*/
-        p_j2k->m_tcd = (opj_tcd_t*)opj_tcd_create(OPJ_TRUE); /* FIXME why a cast ? */
-        if (! p_j2k->m_tcd ) {
-                return OPJ_FALSE;
-        }
+        /* Copy all the dflt_tile_compo_cp to the current tile cp */
+        memcpy(l_current_tccp, l_default_tcp->tccps, l_tccp_size);
 
-        if ( !opj_tcd_init(p_j2k->m_tcd, l_image, &(p_j2k->m_cp), p_j2k->m_tp) ) {
-                opj_tcd_destroy(p_j2k->m_tcd);
-                p_j2k->m_tcd = 00;
-                opj_event_msg(p_manager, EVT_ERROR, "Cannot decode tile, memory error\n");
-                return OPJ_FALSE;
-        }
+        /* Move to next tile cp*/
+        ++l_tcp;
+    }
 
-        return OPJ_TRUE;
+    /* Create the current tile decoder*/
+    p_j2k->m_tcd = (opj_tcd_t*)opj_tcd_create(OPJ_TRUE); /* FIXME why a cast ? */
+    if (! p_j2k->m_tcd) {
+        return OPJ_FALSE;
+    }
+
+    if (!opj_tcd_init(p_j2k->m_tcd, l_image, &(p_j2k->m_cp), p_j2k->m_tp)) {
+        opj_tcd_destroy(p_j2k->m_tcd);
+        p_j2k->m_tcd = 00;
+        opj_event_msg(p_manager, EVT_ERROR, "Cannot decode tile, memory error\n");
+        return OPJ_FALSE;
+    }
+
+    return OPJ_TRUE;
 }
 
-static const opj_dec_memory_marker_handler_t * opj_j2k_get_marker_handler (OPJ_UINT32 p_id)
+static const opj_dec_memory_marker_handler_t * opj_j2k_get_marker_handler(
+    OPJ_UINT32 p_id)
 {
-        const opj_dec_memory_marker_handler_t *e;
-        for (e = j2k_memory_marker_handler_tab; e->id != 0; ++e) {
-                if (e->id == p_id) {
-                        break; /* we find a handler corresponding to the marker ID*/
-                }
+    const opj_dec_memory_marker_handler_t *e;
+    for (e = j2k_memory_marker_handler_tab; e->id != 0; ++e) {
+        if (e->id == p_id) {
+            break; /* we find a handler corresponding to the marker ID*/
         }
-        return e;
+    }
+    return e;
 }
 
-void opj_j2k_destroy (opj_j2k_t *p_j2k)
+void opj_j2k_destroy(opj_j2k_t *p_j2k)
 {
-        if (p_j2k == 00) {
-                return;
-        }
+    if (p_j2k == 00) {
+        return;
+    }
 
-        if (p_j2k->m_is_decoder) {
+    if (p_j2k->m_is_decoder) {
 
-                if (p_j2k->m_specific_param.m_decoder.m_default_tcp != 00) {
-                        opj_j2k_tcp_destroy(p_j2k->m_specific_param.m_decoder.m_default_tcp);
-                        opj_free(p_j2k->m_specific_param.m_decoder.m_default_tcp);
-                        p_j2k->m_specific_param.m_decoder.m_default_tcp = 00;
-                }
+        if (p_j2k->m_specific_param.m_decoder.m_default_tcp != 00) {
+            opj_j2k_tcp_destroy(p_j2k->m_specific_param.m_decoder.m_default_tcp);
+            opj_free(p_j2k->m_specific_param.m_decoder.m_default_tcp);
+            p_j2k->m_specific_param.m_decoder.m_default_tcp = 00;
+        }
 
-                if (p_j2k->m_specific_param.m_decoder.m_header_data != 00) {
-                        opj_free(p_j2k->m_specific_param.m_decoder.m_header_data);
-                        p_j2k->m_specific_param.m_decoder.m_header_data = 00;
-                        p_j2k->m_specific_param.m_decoder.m_header_data_size = 0;
-                }
+        if (p_j2k->m_specific_param.m_decoder.m_header_data != 00) {
+            opj_free(p_j2k->m_specific_param.m_decoder.m_header_data);
+            p_j2k->m_specific_param.m_decoder.m_header_data = 00;
+            p_j2k->m_specific_param.m_decoder.m_header_data_size = 0;
         }
-        else {
+    } else {
 
-                if (p_j2k->m_specific_param.m_encoder.m_encoded_tile_data) {
-                        opj_free(p_j2k->m_specific_param.m_encoder.m_encoded_tile_data);
-                        p_j2k->m_specific_param.m_encoder.m_encoded_tile_data = 00;
-                }
+        if (p_j2k->m_specific_param.m_encoder.m_encoded_tile_data) {
+            opj_free(p_j2k->m_specific_param.m_encoder.m_encoded_tile_data);
+            p_j2k->m_specific_param.m_encoder.m_encoded_tile_data = 00;
+        }
 
-                if (p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_buffer) {
-                        opj_free(p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_buffer);
-                        p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_buffer = 00;
-                        p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_current = 00;
-                }
+        if (p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_buffer) {
+            opj_free(p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_buffer);
+            p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_buffer = 00;
+            p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_current = 00;
+        }
 
-                if (p_j2k->m_specific_param.m_encoder.m_header_tile_data) {
-                        opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data = 00;
-                        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
-                }
+        if (p_j2k->m_specific_param.m_encoder.m_header_tile_data) {
+            opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data = 00;
+            p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
         }
+    }
 
-        opj_tcd_destroy(p_j2k->m_tcd);
+    opj_tcd_destroy(p_j2k->m_tcd);
 
-        opj_j2k_cp_destroy(&(p_j2k->m_cp));
-        memset(&(p_j2k->m_cp),0,sizeof(opj_cp_t));
+    opj_j2k_cp_destroy(&(p_j2k->m_cp));
+    memset(&(p_j2k->m_cp), 0, sizeof(opj_cp_t));
 
-        opj_procedure_list_destroy(p_j2k->m_procedure_list);
-        p_j2k->m_procedure_list = 00;
+    opj_procedure_list_destroy(p_j2k->m_procedure_list);
+    p_j2k->m_procedure_list = 00;
 
-        opj_procedure_list_destroy(p_j2k->m_validation_list);
-        p_j2k->m_procedure_list = 00;
+    opj_procedure_list_destroy(p_j2k->m_validation_list);
+    p_j2k->m_procedure_list = 00;
 
-        j2k_destroy_cstr_index(p_j2k->cstr_index);
-        p_j2k->cstr_index = NULL;
+    j2k_destroy_cstr_index(p_j2k->cstr_index);
+    p_j2k->cstr_index = NULL;
 
-        opj_image_destroy(p_j2k->m_private_image);
-        p_j2k->m_private_image = NULL;
+    opj_image_destroy(p_j2k->m_private_image);
+    p_j2k->m_private_image = NULL;
 
-        opj_image_destroy(p_j2k->m_output_image);
-        p_j2k->m_output_image = NULL;
+    opj_image_destroy(p_j2k->m_output_image);
+    p_j2k->m_output_image = NULL;
 
-        opj_thread_pool_destroy(p_j2k->m_tp);
-        p_j2k->m_tp = NULL;
+    opj_thread_pool_destroy(p_j2k->m_tp);
+    p_j2k->m_tp = NULL;
 
-        opj_free(p_j2k);
+    opj_free(p_j2k);
 }
 
-void j2k_destroy_cstr_index (opj_codestream_index_t *p_cstr_ind)
+void j2k_destroy_cstr_index(opj_codestream_index_t *p_cstr_ind)
 {
-        if (p_cstr_ind) {
-
-                if (p_cstr_ind->marker) {
-                        opj_free(p_cstr_ind->marker);
-                        p_cstr_ind->marker = NULL;
-                }
+    if (p_cstr_ind) {
 
-                if (p_cstr_ind->tile_index) {
-                        OPJ_UINT32 it_tile = 0;
+        if (p_cstr_ind->marker) {
+            opj_free(p_cstr_ind->marker);
+            p_cstr_ind->marker = NULL;
+        }
 
-                        for (it_tile=0; it_tile < p_cstr_ind->nb_of_tiles; it_tile++) {
+        if (p_cstr_ind->tile_index) {
+            OPJ_UINT32 it_tile = 0;
 
-                                if(p_cstr_ind->tile_index[it_tile].packet_index) {
-                                        opj_free(p_cstr_ind->tile_index[it_tile].packet_index);
-                                        p_cstr_ind->tile_index[it_tile].packet_index = NULL;
-                                }
+            for (it_tile = 0; it_tile < p_cstr_ind->nb_of_tiles; it_tile++) {
 
-                                if(p_cstr_ind->tile_index[it_tile].tp_index){
-                                        opj_free(p_cstr_ind->tile_index[it_tile].tp_index);
-                                        p_cstr_ind->tile_index[it_tile].tp_index = NULL;
-                                }
+                if (p_cstr_ind->tile_index[it_tile].packet_index) {
+                    opj_free(p_cstr_ind->tile_index[it_tile].packet_index);
+                    p_cstr_ind->tile_index[it_tile].packet_index = NULL;
+                }
 
-                                if(p_cstr_ind->tile_index[it_tile].marker){
-                                        opj_free(p_cstr_ind->tile_index[it_tile].marker);
-                                        p_cstr_ind->tile_index[it_tile].marker = NULL;
+                if (p_cstr_ind->tile_index[it_tile].tp_index) {
+                    opj_free(p_cstr_ind->tile_index[it_tile].tp_index);
+                    p_cstr_ind->tile_index[it_tile].tp_index = NULL;
+                }
 
-                                }
-                        }
+                if (p_cstr_ind->tile_index[it_tile].marker) {
+                    opj_free(p_cstr_ind->tile_index[it_tile].marker);
+                    p_cstr_ind->tile_index[it_tile].marker = NULL;
 
-                        opj_free( p_cstr_ind->tile_index);
-                        p_cstr_ind->tile_index = NULL;
                 }
+            }
 
-                opj_free(p_cstr_ind);
-        }
-}
-
-static void opj_j2k_tcp_destroy (opj_tcp_t *p_tcp)
-{
-       if (p_tcp == 00) {
-               return;
-       }
-       
-       if (p_tcp->ppt_markers != 00) {
-               OPJ_UINT32 i;
-               for (i = 0U; i < p_tcp->ppt_markers_count; ++i) {
-                       if (p_tcp->ppt_markers[i].m_data != NULL) {
-                               opj_free(p_tcp->ppt_markers[i].m_data);
-                       }
-               }
-               p_tcp->ppt_markers_count = 0U;
-               opj_free(p_tcp->ppt_markers);
-               p_tcp->ppt_markers = NULL;
-       }
-       
-       if (p_tcp->ppt_buffer != 00) {
-               opj_free(p_tcp->ppt_buffer);
-               p_tcp->ppt_buffer = 00;
-       }
-       
-       if (p_tcp->tccps != 00) {
-               opj_free(p_tcp->tccps);
-               p_tcp->tccps = 00;
-       }
-       
-       if (p_tcp->m_mct_coding_matrix != 00) {
-               opj_free(p_tcp->m_mct_coding_matrix);
-               p_tcp->m_mct_coding_matrix = 00;
-       }
-       
-       if (p_tcp->m_mct_decoding_matrix != 00) {
-               opj_free(p_tcp->m_mct_decoding_matrix);
-               p_tcp->m_mct_decoding_matrix = 00;
-       }
-       
-       if (p_tcp->m_mcc_records) {
-               opj_free(p_tcp->m_mcc_records);
-               p_tcp->m_mcc_records = 00;
-               p_tcp->m_nb_max_mcc_records = 0;
-               p_tcp->m_nb_mcc_records = 0;
-       }
-       
-       if (p_tcp->m_mct_records) {
-               opj_mct_data_t * l_mct_data = p_tcp->m_mct_records;
-               OPJ_UINT32 i;
-               
-               for (i=0;i<p_tcp->m_nb_mct_records;++i) {
-                       if (l_mct_data->m_data) {
-                               opj_free(l_mct_data->m_data);
-                               l_mct_data->m_data = 00;
-                       }
-                       
-                       ++l_mct_data;
-               }
-               
-               opj_free(p_tcp->m_mct_records);
-               p_tcp->m_mct_records = 00;
-       }
-
-       if (p_tcp->mct_norms != 00) {
-               opj_free(p_tcp->mct_norms);
-               p_tcp->mct_norms = 00;
-       }
-
-       opj_j2k_tcp_data_destroy(p_tcp);
-
-}
-
-static void opj_j2k_tcp_data_destroy (opj_tcp_t *p_tcp)
-{
-        if (p_tcp->m_data) {
-                opj_free(p_tcp->m_data);
-                p_tcp->m_data = NULL;
-                p_tcp->m_data_size = 0;
-        }
-}
-
-static void opj_j2k_cp_destroy (opj_cp_t *p_cp)
-{
-       OPJ_UINT32 l_nb_tiles;
-       opj_tcp_t * l_current_tile = 00;
-
-       if (p_cp == 00)
-       {
-               return;
-       }
-       if (p_cp->tcps != 00)
-       {
-               OPJ_UINT32 i;
-               l_current_tile = p_cp->tcps;
-               l_nb_tiles = p_cp->th * p_cp->tw;
-               
-               for (i = 0U; i < l_nb_tiles; ++i)
-               {
-                       opj_j2k_tcp_destroy(l_current_tile);
-                       ++l_current_tile;
-               }
-               opj_free(p_cp->tcps);
-               p_cp->tcps = 00;
-       }
-       if (p_cp->ppm_markers != 00) {
-               OPJ_UINT32 i;
-               for (i = 0U; i < p_cp->ppm_markers_count; ++i) {
-                       if (p_cp->ppm_markers[i].m_data != NULL) {
-                               opj_free(p_cp->ppm_markers[i].m_data);
-                       }
-               }
-               p_cp->ppm_markers_count = 0U;
-               opj_free(p_cp->ppm_markers);
-               p_cp->ppm_markers = NULL;
-       }
-       opj_free(p_cp->ppm_buffer);
-       p_cp->ppm_buffer = 00;
-       p_cp->ppm_data = NULL; /* ppm_data belongs to the allocated buffer pointed by ppm_buffer */
-       opj_free(p_cp->comment);
-       p_cp->comment = 00;
-       if (! p_cp->m_is_decoder)
-       {
-               opj_free(p_cp->m_specific_param.m_enc.m_matrice);
-               p_cp->m_specific_param.m_enc.m_matrice = 00;
-       }
-}
-
-static OPJ_BOOL opj_j2k_need_nb_tile_parts_correction(opj_stream_private_t *p_stream, OPJ_UINT32 tile_no, OPJ_BOOL* p_correction_needed, opj_event_mgr_t * p_manager )
-{
-       OPJ_BYTE   l_header_data[10];
-       OPJ_OFF_T  l_stream_pos_backup;
-       OPJ_UINT32 l_current_marker;
-       OPJ_UINT32 l_marker_size;
-       OPJ_UINT32 l_tile_no, l_tot_len, l_current_part, l_num_parts;
-       
-       /* initialize to no correction needed */
-       *p_correction_needed = OPJ_FALSE;
-       
-       if (!opj_stream_has_seek(p_stream)) {
-               /* We can't do much in this case, seek is needed */
-               return OPJ_TRUE;
-       }
-       
-       l_stream_pos_backup = opj_stream_tell(p_stream);
-       if (l_stream_pos_backup == -1) {
-               /* let's do nothing */
-               return OPJ_TRUE;
-       }
-       
-       for (;;) {
-               /* Try to read 2 bytes (the next marker ID) from stream and copy them into the buffer */
-               if (opj_stream_read_data(p_stream,l_header_data, 2, p_manager) != 2) {
-                       /* assume all is OK */
-                       if (! opj_stream_seek(p_stream, l_stream_pos_backup, p_manager)) {
-                               return OPJ_FALSE;
-                       }
-                       return OPJ_TRUE;
-               }
-               
-               /* Read 2 bytes from buffer as the new marker ID */
-               opj_read_bytes(l_header_data, &l_current_marker, 2);
-               
-               if (l_current_marker != J2K_MS_SOT) {
-                       /* assume all is OK */
-                       if (! opj_stream_seek(p_stream, l_stream_pos_backup, p_manager)) {
-                               return OPJ_FALSE;
-                       }
-                       return OPJ_TRUE;
-               }
-               
-               /* Try to read 2 bytes (the marker size) from stream and copy them into the buffer */
-               if (opj_stream_read_data(p_stream, l_header_data, 2, p_manager) != 2) {
-                       opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
-                       return OPJ_FALSE;
-               }
-               
-               /* Read 2 bytes from the buffer as the marker size */
-               opj_read_bytes(l_header_data, &l_marker_size, 2);
-               
-               /* Check marker size for SOT Marker */
-               if (l_marker_size != 10) {
-                       opj_event_msg(p_manager, EVT_ERROR, "Inconsistent marker size\n");
-                       return OPJ_FALSE;
-               }
-               l_marker_size -= 2;
-               
-               if (opj_stream_read_data(p_stream, l_header_data, l_marker_size, p_manager) != l_marker_size) {
-                       opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
-                       return OPJ_FALSE;
-               }
-               
-               if (! opj_j2k_get_sot_values(l_header_data, l_marker_size, &l_tile_no, &l_tot_len, &l_current_part, &l_num_parts, p_manager)) {
-                       return OPJ_FALSE;
-               }
-               
-               if (l_tile_no == tile_no) {
-                       /* we found what we were looking for */
-                       break;
-               }
-               
-               if ((l_tot_len == 0U) || (l_tot_len < 14U)) {
-                       /* last SOT until EOC or invalid Psot value */
-                       /* assume all is OK */
-                       if (! opj_stream_seek(p_stream, l_stream_pos_backup, p_manager)) {
-                               return OPJ_FALSE;
-                       }
-                       return OPJ_TRUE;
-               }
-               l_tot_len -= 12U;
-               /* look for next SOT marker */
-               if (opj_stream_skip(p_stream, (OPJ_OFF_T)(l_tot_len), p_manager) != (OPJ_OFF_T)(l_tot_len)) {
-                       /* assume all is OK */
-                       if (! opj_stream_seek(p_stream, l_stream_pos_backup, p_manager)) {
-                               return OPJ_FALSE;
-                       }
-                       return OPJ_TRUE;
-               }
-       }
-       
-       /* check for correction */
-       if (l_current_part == l_num_parts) {
-               *p_correction_needed = OPJ_TRUE;
-       }
-       
-       if (! opj_stream_seek(p_stream, l_stream_pos_backup, p_manager)) {
-               return OPJ_FALSE;
-       }
-       return OPJ_TRUE;
-}
-
-OPJ_BOOL opj_j2k_read_tile_header(      opj_j2k_t * p_j2k,
-                                                                    OPJ_UINT32 * p_tile_index,
-                                                                    OPJ_UINT32 * p_data_size,
-                                                                    OPJ_INT32 * p_tile_x0, OPJ_INT32 * p_tile_y0,
-                                                                    OPJ_INT32 * p_tile_x1, OPJ_INT32 * p_tile_y1,
-                                                                    OPJ_UINT32 * p_nb_comps,
-                                                                    OPJ_BOOL * p_go_on,
-                                                                    opj_stream_private_t *p_stream,
-                                                                    opj_event_mgr_t * p_manager )
-{
-        OPJ_UINT32 l_current_marker = J2K_MS_SOT;
-        OPJ_UINT32 l_marker_size;
-        const opj_dec_memory_marker_handler_t * l_marker_handler = 00;
-        opj_tcp_t * l_tcp = NULL;
-
-        /* preconditions */
-        assert(p_stream != 00);
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-
-        /* Reach the End Of Codestream ?*/
-        if (p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_EOC){
-                l_current_marker = J2K_MS_EOC;
-        }
-        /* We need to encounter a SOT marker (a new tile-part header) */
-        else if (p_j2k->m_specific_param.m_decoder.m_state != J2K_STATE_TPHSOT){
-                return OPJ_FALSE;
+            opj_free(p_cstr_ind->tile_index);
+            p_cstr_ind->tile_index = NULL;
         }
 
-        /* Read into the codestream until reach the EOC or ! can_decode ??? FIXME */
-        while ( (!p_j2k->m_specific_param.m_decoder.m_can_decode) && (l_current_marker != J2K_MS_EOC) ) {
-
-                /* Try to read until the Start Of Data is detected */
-                while (l_current_marker != J2K_MS_SOD) {
-                    
-                    if(opj_stream_get_number_byte_left(p_stream) == 0)
-                    {
-                        p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_NEOC;
-                        break;
-                    }
-
-                        /* Try to read 2 bytes (the marker size) from stream and copy them into the buffer */
-                        if (opj_stream_read_data(p_stream,p_j2k->m_specific_param.m_decoder.m_header_data,2,p_manager) != 2) {
-                                opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
-                                return OPJ_FALSE;
-                        }
+        opj_free(p_cstr_ind);
+    }
+}
 
-                        /* Read 2 bytes from the buffer as the marker size */
-                        opj_read_bytes(p_j2k->m_specific_param.m_decoder.m_header_data,&l_marker_size,2);
+static void opj_j2k_tcp_destroy(opj_tcp_t *p_tcp)
+{
+    if (p_tcp == 00) {
+        return;
+    }
 
-                        /* Check marker size (does not include marker ID but includes marker size) */
-                        if (l_marker_size < 2) {
-                                opj_event_msg(p_manager, EVT_ERROR, "Inconsistent marker size\n");
-                                return OPJ_FALSE;
-                        }
+    if (p_tcp->ppt_markers != 00) {
+        OPJ_UINT32 i;
+        for (i = 0U; i < p_tcp->ppt_markers_count; ++i) {
+            if (p_tcp->ppt_markers[i].m_data != NULL) {
+                opj_free(p_tcp->ppt_markers[i].m_data);
+            }
+        }
+        p_tcp->ppt_markers_count = 0U;
+        opj_free(p_tcp->ppt_markers);
+        p_tcp->ppt_markers = NULL;
+    }
 
-                        /* cf. https://code.google.com/p/openjpeg/issues/detail?id=226 */
-                        if (l_current_marker == 0x8080 && opj_stream_get_number_byte_left(p_stream) == 0) {
-                                p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_NEOC;
-                                break;
-                        }
+    if (p_tcp->ppt_buffer != 00) {
+        opj_free(p_tcp->ppt_buffer);
+        p_tcp->ppt_buffer = 00;
+    }
 
-                        /* Why this condition? FIXME */
-                        if (p_j2k->m_specific_param.m_decoder.m_state & J2K_STATE_TPH){
-                                p_j2k->m_specific_param.m_decoder.m_sot_length -= (l_marker_size + 2);
-                        }
-                        l_marker_size -= 2; /* Subtract the size of the marker ID already read */
+    if (p_tcp->tccps != 00) {
+        opj_free(p_tcp->tccps);
+        p_tcp->tccps = 00;
+    }
 
-                        /* Get the marker handler from the marker ID */
-                        l_marker_handler = opj_j2k_get_marker_handler(l_current_marker);
+    if (p_tcp->m_mct_coding_matrix != 00) {
+        opj_free(p_tcp->m_mct_coding_matrix);
+        p_tcp->m_mct_coding_matrix = 00;
+    }
 
-                        /* Check if the marker is known and if it is the right place to find it */
-                        if (! (p_j2k->m_specific_param.m_decoder.m_state & l_marker_handler->states) ) {
-                                opj_event_msg(p_manager, EVT_ERROR, "Marker is not compliant with its position\n");
-                                return OPJ_FALSE;
-                        }
-/* FIXME manage case of unknown marker as in the main header ? */
-
-                        /* Check if the marker size is compatible with the header data size */
-                        if (l_marker_size > p_j2k->m_specific_param.m_decoder.m_header_data_size) {
-                                OPJ_BYTE *new_header_data = NULL;
-                                /* If we are here, this means we consider this marker as known & we will read it */
-                                /* Check enough bytes left in stream before allocation */
-                                if ((OPJ_OFF_T)l_marker_size >  opj_stream_get_number_byte_left(p_stream)) {
-                                        opj_event_msg(p_manager, EVT_ERROR, "Marker size inconsistent with stream length\n");
-                                        return OPJ_FALSE;
-                                }
-                                new_header_data = (OPJ_BYTE *) opj_realloc(p_j2k->m_specific_param.m_decoder.m_header_data, l_marker_size);
-                                if (! new_header_data) {
-                                        opj_free(p_j2k->m_specific_param.m_decoder.m_header_data);
-                                        p_j2k->m_specific_param.m_decoder.m_header_data = NULL;
-                                        p_j2k->m_specific_param.m_decoder.m_header_data_size = 0;
-                                        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read header\n");
-                                        return OPJ_FALSE;
-                                }
-                                p_j2k->m_specific_param.m_decoder.m_header_data = new_header_data;
-                                p_j2k->m_specific_param.m_decoder.m_header_data_size = l_marker_size;
-                        }
+    if (p_tcp->m_mct_decoding_matrix != 00) {
+        opj_free(p_tcp->m_mct_decoding_matrix);
+        p_tcp->m_mct_decoding_matrix = 00;
+    }
 
-                        /* Try to read the rest of the marker segment from stream and copy them into the buffer */
-                        if (opj_stream_read_data(p_stream,p_j2k->m_specific_param.m_decoder.m_header_data,l_marker_size,p_manager) != l_marker_size) {
-                                opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
-                                return OPJ_FALSE;
-                        }
+    if (p_tcp->m_mcc_records) {
+        opj_free(p_tcp->m_mcc_records);
+        p_tcp->m_mcc_records = 00;
+        p_tcp->m_nb_max_mcc_records = 0;
+        p_tcp->m_nb_mcc_records = 0;
+    }
 
-                        if (!l_marker_handler->handler) {
-                                /* See issue #175 */
-                                opj_event_msg(p_manager, EVT_ERROR, "Not sure how that happened.\n");
-                                return OPJ_FALSE;
-                        }
-                        /* Read the marker segment with the correct marker handler */
-                        if (! (*(l_marker_handler->handler))(p_j2k,p_j2k->m_specific_param.m_decoder.m_header_data,l_marker_size,p_manager)) {
-                                opj_event_msg(p_manager, EVT_ERROR, "Fail to read the current marker segment (%#x)\n", l_current_marker);
-                                return OPJ_FALSE;
-                        }
+    if (p_tcp->m_mct_records) {
+        opj_mct_data_t * l_mct_data = p_tcp->m_mct_records;
+        OPJ_UINT32 i;
 
-                        /* Add the marker to the codestream index*/
-                        if (OPJ_FALSE == opj_j2k_add_tlmarker(p_j2k->m_current_tile_number,
-                                                p_j2k->cstr_index,
-                                                l_marker_handler->id,
-                                                (OPJ_UINT32) opj_stream_tell(p_stream) - l_marker_size - 4,
-                                                l_marker_size + 4 )) {
-                                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to add tl marker\n");
-                                return OPJ_FALSE;
-                        }
+        for (i = 0; i < p_tcp->m_nb_mct_records; ++i) {
+            if (l_mct_data->m_data) {
+                opj_free(l_mct_data->m_data);
+                l_mct_data->m_data = 00;
+            }
 
-                        /* Keep the position of the last SOT marker read */
-                        if ( l_marker_handler->id == J2K_MS_SOT ) {
-                                OPJ_UINT32 sot_pos = (OPJ_UINT32) opj_stream_tell(p_stream) - l_marker_size - 4 ;
-                                if (sot_pos > p_j2k->m_specific_param.m_decoder.m_last_sot_read_pos)
-                                {
-                                        p_j2k->m_specific_param.m_decoder.m_last_sot_read_pos = sot_pos;
-                                }
-                        }
+            ++l_mct_data;
+        }
 
-                        if (p_j2k->m_specific_param.m_decoder.m_skip_data) {
-                                /* Skip the rest of the tile part header*/
-                                if (opj_stream_skip(p_stream,p_j2k->m_specific_param.m_decoder.m_sot_length,p_manager) != p_j2k->m_specific_param.m_decoder.m_sot_length) {
-                                        opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
-                                        return OPJ_FALSE;
-                                }
-                                l_current_marker = J2K_MS_SOD; /* Normally we reached a SOD */
-                        }
-                        else {
-                                /* Try to read 2 bytes (the next marker ID) from stream and copy them into the buffer*/
-                                if (opj_stream_read_data(p_stream,p_j2k->m_specific_param.m_decoder.m_header_data,2,p_manager) != 2) {
-                                        opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
-                                        return OPJ_FALSE;
-                                }
-                                /* Read 2 bytes from the buffer as the new marker ID */
-                                opj_read_bytes(p_j2k->m_specific_param.m_decoder.m_header_data,&l_current_marker,2);
-                        }
-                }
-                if(opj_stream_get_number_byte_left(p_stream) == 0
-                    && p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_NEOC)
-                    break;
+        opj_free(p_tcp->m_mct_records);
+        p_tcp->m_mct_records = 00;
+    }
 
-                /* If we didn't skip data before, we need to read the SOD marker*/
-                if (! p_j2k->m_specific_param.m_decoder.m_skip_data) {
-                        /* Try to read the SOD marker and skip data ? FIXME */
-                        if (! opj_j2k_read_sod(p_j2k, p_stream, p_manager)) {
-                                return OPJ_FALSE;
-                        }
-                        if (p_j2k->m_specific_param.m_decoder.m_can_decode && !p_j2k->m_specific_param.m_decoder.m_nb_tile_parts_correction_checked) {
-                                /* Issue 254 */
-                                OPJ_BOOL l_correction_needed;
-                                                                                                       
-                                p_j2k->m_specific_param.m_decoder.m_nb_tile_parts_correction_checked = 1;
-                                if(!opj_j2k_need_nb_tile_parts_correction(p_stream, p_j2k->m_current_tile_number, &l_correction_needed, p_manager)) {
-                                        opj_event_msg(p_manager, EVT_ERROR, "opj_j2k_apply_nb_tile_parts_correction error\n");
-                                        return OPJ_FALSE;
-                                }
-                                if (l_correction_needed) {
-                                        OPJ_UINT32 l_nb_tiles = p_j2k->m_cp.tw * p_j2k->m_cp.th;
-                                        OPJ_UINT32 l_tile_no;
-
-                                        p_j2k->m_specific_param.m_decoder.m_can_decode = 0;
-                                        p_j2k->m_specific_param.m_decoder.m_nb_tile_parts_correction = 1;
-                                        /* correct tiles */
-                                        for (l_tile_no = 0U; l_tile_no < l_nb_tiles; ++l_tile_no) {
-                                                if (p_j2k->m_cp.tcps[l_tile_no].m_nb_tile_parts != 0U) {
-                                                        p_j2k->m_cp.tcps[l_tile_no].m_nb_tile_parts+=1;
-                                                }
-                                        }
-                                        opj_event_msg(p_manager, EVT_WARNING, "Non conformant codestream TPsot==TNsot.\n");
-                                }
-                        }
-                        if (! p_j2k->m_specific_param.m_decoder.m_can_decode){
-                                /* Try to read 2 bytes (the next marker ID) from stream and copy them into the buffer */
-                                if (opj_stream_read_data(p_stream,p_j2k->m_specific_param.m_decoder.m_header_data,2,p_manager) != 2) {
-                                        opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
-                                        return OPJ_FALSE;
-                                }
-
-                                /* Read 2 bytes from buffer as the new marker ID */
-                                opj_read_bytes(p_j2k->m_specific_param.m_decoder.m_header_data,&l_current_marker,2);
-                        }
-                }
-                else {
-                        /* Indicate we will try to read a new tile-part header*/
-                        p_j2k->m_specific_param.m_decoder.m_skip_data = 0;
-                        p_j2k->m_specific_param.m_decoder.m_can_decode = 0;
-                        p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_TPHSOT;
-
-                        /* Try to read 2 bytes (the next marker ID) from stream and copy them into the buffer */
-                        if (opj_stream_read_data(p_stream,p_j2k->m_specific_param.m_decoder.m_header_data,2,p_manager) != 2) {
-                                opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
-                                return OPJ_FALSE;
-                        }
+    if (p_tcp->mct_norms != 00) {
+        opj_free(p_tcp->mct_norms);
+        p_tcp->mct_norms = 00;
+    }
 
-                        /* Read 2 bytes from buffer as the new marker ID */
-                        opj_read_bytes(p_j2k->m_specific_param.m_decoder.m_header_data,&l_current_marker,2);
-                }
-        }
+    opj_j2k_tcp_data_destroy(p_tcp);
 
-        /* Current marker is the EOC marker ?*/
-        if (l_current_marker == J2K_MS_EOC) {
-                if (p_j2k->m_specific_param.m_decoder.m_state != J2K_STATE_EOC ){
-                        p_j2k->m_current_tile_number = 0;
-                        p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_EOC;
-                }
-        }
+}
 
-        /* FIXME DOC ???*/
-        if ( ! p_j2k->m_specific_param.m_decoder.m_can_decode) {
-                OPJ_UINT32 l_nb_tiles = p_j2k->m_cp.th * p_j2k->m_cp.tw;
-                l_tcp = p_j2k->m_cp.tcps + p_j2k->m_current_tile_number;
+static void opj_j2k_tcp_data_destroy(opj_tcp_t *p_tcp)
+{
+    if (p_tcp->m_data) {
+        opj_free(p_tcp->m_data);
+        p_tcp->m_data = NULL;
+        p_tcp->m_data_size = 0;
+    }
+}
 
-                while( (p_j2k->m_current_tile_number < l_nb_tiles) && (l_tcp->m_data == 00) ) {
-                        ++p_j2k->m_current_tile_number;
-                        ++l_tcp;
-                }
+static void opj_j2k_cp_destroy(opj_cp_t *p_cp)
+{
+    OPJ_UINT32 l_nb_tiles;
+    opj_tcp_t * l_current_tile = 00;
 
-                if (p_j2k->m_current_tile_number == l_nb_tiles) {
-                        *p_go_on = OPJ_FALSE;
-                        return OPJ_TRUE;
-                }
-        }
+    if (p_cp == 00) {
+        return;
+    }
+    if (p_cp->tcps != 00) {
+        OPJ_UINT32 i;
+        l_current_tile = p_cp->tcps;
+        l_nb_tiles = p_cp->th * p_cp->tw;
 
-        if (! opj_j2k_merge_ppt(p_j2k->m_cp.tcps + p_j2k->m_current_tile_number, p_manager)) {
-                opj_event_msg(p_manager, EVT_ERROR, "Failed to merge PPT data\n");
-                return OPJ_FALSE;
+        for (i = 0U; i < l_nb_tiles; ++i) {
+            opj_j2k_tcp_destroy(l_current_tile);
+            ++l_current_tile;
         }
-        /*FIXME ???*/
-        if (! opj_tcd_init_decode_tile(p_j2k->m_tcd, p_j2k->m_current_tile_number, p_manager)) {
-                opj_event_msg(p_manager, EVT_ERROR, "Cannot decode tile, memory error\n");
-                return OPJ_FALSE;
+        opj_free(p_cp->tcps);
+        p_cp->tcps = 00;
+    }
+    if (p_cp->ppm_markers != 00) {
+        OPJ_UINT32 i;
+        for (i = 0U; i < p_cp->ppm_markers_count; ++i) {
+            if (p_cp->ppm_markers[i].m_data != NULL) {
+                opj_free(p_cp->ppm_markers[i].m_data);
+            }
         }
+        p_cp->ppm_markers_count = 0U;
+        opj_free(p_cp->ppm_markers);
+        p_cp->ppm_markers = NULL;
+    }
+    opj_free(p_cp->ppm_buffer);
+    p_cp->ppm_buffer = 00;
+    p_cp->ppm_data =
+        NULL; /* ppm_data belongs to the allocated buffer pointed by ppm_buffer */
+    opj_free(p_cp->comment);
+    p_cp->comment = 00;
+    if (! p_cp->m_is_decoder) {
+        opj_free(p_cp->m_specific_param.m_enc.m_matrice);
+        p_cp->m_specific_param.m_enc.m_matrice = 00;
+    }
+}
 
-        opj_event_msg(p_manager, EVT_INFO, "Header of tile %d / %d has been read.\n",
-                        p_j2k->m_current_tile_number+1, (p_j2k->m_cp.th * p_j2k->m_cp.tw));
+static OPJ_BOOL opj_j2k_need_nb_tile_parts_correction(opj_stream_private_t
+        *p_stream, OPJ_UINT32 tile_no, OPJ_BOOL* p_correction_needed,
+        opj_event_mgr_t * p_manager)
+{
+    OPJ_BYTE   l_header_data[10];
+    OPJ_OFF_T  l_stream_pos_backup;
+    OPJ_UINT32 l_current_marker;
+    OPJ_UINT32 l_marker_size;
+    OPJ_UINT32 l_tile_no, l_tot_len, l_current_part, l_num_parts;
 
-        *p_tile_index = p_j2k->m_current_tile_number;
-        *p_go_on = OPJ_TRUE;
-        *p_data_size = opj_tcd_get_decoded_tile_size(p_j2k->m_tcd);
-        *p_tile_x0 = p_j2k->m_tcd->tcd_image->tiles->x0;
-        *p_tile_y0 = p_j2k->m_tcd->tcd_image->tiles->y0;
-        *p_tile_x1 = p_j2k->m_tcd->tcd_image->tiles->x1;
-        *p_tile_y1 = p_j2k->m_tcd->tcd_image->tiles->y1;
-        *p_nb_comps = p_j2k->m_tcd->tcd_image->tiles->numcomps;
+    /* initialize to no correction needed */
+    *p_correction_needed = OPJ_FALSE;
 
-         p_j2k->m_specific_param.m_decoder.m_state |= 0x0080;/* FIXME J2K_DEC_STATE_DATA;*/
+    if (!opj_stream_has_seek(p_stream)) {
+        /* We can't do much in this case, seek is needed */
+        return OPJ_TRUE;
+    }
 
+    l_stream_pos_backup = opj_stream_tell(p_stream);
+    if (l_stream_pos_backup == -1) {
+        /* let's do nothing */
         return OPJ_TRUE;
-}
+    }
 
-OPJ_BOOL opj_j2k_decode_tile (  opj_j2k_t * p_j2k,
-                                                        OPJ_UINT32 p_tile_index,
-                                                        OPJ_BYTE * p_data,
-                                                        OPJ_UINT32 p_data_size,
-                                                        opj_stream_private_t *p_stream,
-                                                        opj_event_mgr_t * p_manager )
-{
-        OPJ_UINT32 l_current_marker;
-        OPJ_BYTE l_data [2];
-        opj_tcp_t * l_tcp;
+    for (;;) {
+        /* Try to read 2 bytes (the next marker ID) from stream and copy them into the buffer */
+        if (opj_stream_read_data(p_stream, l_header_data, 2, p_manager) != 2) {
+            /* assume all is OK */
+            if (! opj_stream_seek(p_stream, l_stream_pos_backup, p_manager)) {
+                return OPJ_FALSE;
+            }
+            return OPJ_TRUE;
+        }
 
-        /* preconditions */
-        assert(p_stream != 00);
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
+        /* Read 2 bytes from buffer as the new marker ID */
+        opj_read_bytes(l_header_data, &l_current_marker, 2);
 
-        if ( !(p_j2k->m_specific_param.m_decoder.m_state & 0x0080/*FIXME J2K_DEC_STATE_DATA*/)
-                || (p_tile_index != p_j2k->m_current_tile_number) ) {
+        if (l_current_marker != J2K_MS_SOT) {
+            /* assume all is OK */
+            if (! opj_stream_seek(p_stream, l_stream_pos_backup, p_manager)) {
                 return OPJ_FALSE;
+            }
+            return OPJ_TRUE;
         }
 
-        l_tcp = &(p_j2k->m_cp.tcps[p_tile_index]);
-        if (! l_tcp->m_data) {
-                opj_j2k_tcp_destroy(l_tcp);
-                return OPJ_FALSE;
+        /* Try to read 2 bytes (the marker size) from stream and copy them into the buffer */
+        if (opj_stream_read_data(p_stream, l_header_data, 2, p_manager) != 2) {
+            opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
+            return OPJ_FALSE;
         }
 
-        if (! opj_tcd_decode_tile(      p_j2k->m_tcd,
-                                                                l_tcp->m_data,
-                                                                l_tcp->m_data_size,
-                                                                p_tile_index,
-                                                                p_j2k->cstr_index, p_manager) ) {
-                opj_j2k_tcp_destroy(l_tcp);
-                p_j2k->m_specific_param.m_decoder.m_state |= 0x8000;/*FIXME J2K_DEC_STATE_ERR;*/
-                opj_event_msg(p_manager, EVT_ERROR, "Failed to decode.\n");
-                return OPJ_FALSE;
+        /* Read 2 bytes from the buffer as the marker size */
+        opj_read_bytes(l_header_data, &l_marker_size, 2);
+
+        /* Check marker size for SOT Marker */
+        if (l_marker_size != 10) {
+            opj_event_msg(p_manager, EVT_ERROR, "Inconsistent marker size\n");
+            return OPJ_FALSE;
         }
+        l_marker_size -= 2;
 
-        if (! opj_tcd_update_tile_data(p_j2k->m_tcd,p_data,p_data_size)) {
-                return OPJ_FALSE;
+        if (opj_stream_read_data(p_stream, l_header_data, l_marker_size,
+                                 p_manager) != l_marker_size) {
+            opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
+            return OPJ_FALSE;
         }
 
-        /* To avoid to destroy the tcp which can be useful when we try to decode a tile decoded before (cf j2k_random_tile_access)
-         * we destroy just the data which will be re-read in read_tile_header*/
-        /*opj_j2k_tcp_destroy(l_tcp);
-        p_j2k->m_tcd->tcp = 0;*/
-        opj_j2k_tcp_data_destroy(l_tcp);
+        if (! opj_j2k_get_sot_values(l_header_data, l_marker_size, &l_tile_no,
+                                     &l_tot_len, &l_current_part, &l_num_parts, p_manager)) {
+            return OPJ_FALSE;
+        }
 
-        p_j2k->m_specific_param.m_decoder.m_can_decode = 0;
-        p_j2k->m_specific_param.m_decoder.m_state &= (~ (0x0080u));/* FIXME J2K_DEC_STATE_DATA);*/
+        if (l_tile_no == tile_no) {
+            /* we found what we were looking for */
+            break;
+        }
 
-        if(opj_stream_get_number_byte_left(p_stream) == 0 
-            && p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_NEOC){
+        if ((l_tot_len == 0U) || (l_tot_len < 14U)) {
+            /* last SOT until EOC or invalid Psot value */
+            /* assume all is OK */
+            if (! opj_stream_seek(p_stream, l_stream_pos_backup, p_manager)) {
+                return OPJ_FALSE;
+            }
             return OPJ_TRUE;
         }
+        l_tot_len -= 12U;
+        /* look for next SOT marker */
+        if (opj_stream_skip(p_stream, (OPJ_OFF_T)(l_tot_len),
+                            p_manager) != (OPJ_OFF_T)(l_tot_len)) {
+            /* assume all is OK */
+            if (! opj_stream_seek(p_stream, l_stream_pos_backup, p_manager)) {
+                return OPJ_FALSE;
+            }
+            return OPJ_TRUE;
+        }
+    }
 
-        if (p_j2k->m_specific_param.m_decoder.m_state != 0x0100){ /*FIXME J2K_DEC_STATE_EOC)*/
-                if (opj_stream_read_data(p_stream,l_data,2,p_manager) != 2) {
-                        opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
-                        return OPJ_FALSE;
-                }
+    /* check for correction */
+    if (l_current_part == l_num_parts) {
+        *p_correction_needed = OPJ_TRUE;
+    }
 
-                opj_read_bytes(l_data,&l_current_marker,2);
-
-                if (l_current_marker == J2K_MS_EOC) {
-                        p_j2k->m_current_tile_number = 0;
-                        p_j2k->m_specific_param.m_decoder.m_state =  0x0100;/*FIXME J2K_DEC_STATE_EOC;*/
-                }
-                else if (l_current_marker != J2K_MS_SOT)
-                {       
-                        if(opj_stream_get_number_byte_left(p_stream) == 0) {
-                            p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_NEOC;
-                            opj_event_msg(p_manager, EVT_WARNING, "Stream does not end with EOC\n");
-                            return OPJ_TRUE;
-                        }
-                        opj_event_msg(p_manager, EVT_ERROR, "Stream too short, expected SOT\n");
-                        return OPJ_FALSE;
-                }
-        }
-
-        return OPJ_TRUE;
+    if (! opj_stream_seek(p_stream, l_stream_pos_backup, p_manager)) {
+        return OPJ_FALSE;
+    }
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_update_image_data (opj_tcd_t * p_tcd, OPJ_BYTE * p_data, opj_image_t* p_output_image)
+OPJ_BOOL opj_j2k_read_tile_header(opj_j2k_t * p_j2k,
+                                  OPJ_UINT32 * p_tile_index,
+                                  OPJ_UINT32 * p_data_size,
+                                  OPJ_INT32 * p_tile_x0, OPJ_INT32 * p_tile_y0,
+                                  OPJ_INT32 * p_tile_x1, OPJ_INT32 * p_tile_y1,
+                                  OPJ_UINT32 * p_nb_comps,
+                                  OPJ_BOOL * p_go_on,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager)
 {
-        OPJ_UINT32 i,j,k = 0;
-        OPJ_UINT32 l_width_src,l_height_src;
-        OPJ_UINT32 l_width_dest,l_height_dest;
-        OPJ_INT32 l_offset_x0_src, l_offset_y0_src, l_offset_x1_src, l_offset_y1_src;
-        OPJ_SIZE_T l_start_offset_src, l_line_offset_src, l_end_offset_src ;
-        OPJ_UINT32 l_start_x_dest , l_start_y_dest;
-        OPJ_UINT32 l_x0_dest, l_y0_dest, l_x1_dest, l_y1_dest;
-        OPJ_SIZE_T l_start_offset_dest, l_line_offset_dest;
+    OPJ_UINT32 l_current_marker = J2K_MS_SOT;
+    OPJ_UINT32 l_marker_size;
+    const opj_dec_memory_marker_handler_t * l_marker_handler = 00;
+    opj_tcp_t * l_tcp = NULL;
 
-        opj_image_comp_t * l_img_comp_src = 00;
-        opj_image_comp_t * l_img_comp_dest = 00;
+    /* preconditions */
+    assert(p_stream != 00);
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-        opj_tcd_tilecomp_t * l_tilec = 00;
-        opj_image_t * l_image_src = 00;
-        OPJ_UINT32 l_size_comp, l_remaining;
-        OPJ_INT32 * l_dest_ptr;
-        opj_tcd_resolution_t* l_res= 00;
+    /* Reach the End Of Codestream ?*/
+    if (p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_EOC) {
+        l_current_marker = J2K_MS_EOC;
+    }
+    /* We need to encounter a SOT marker (a new tile-part header) */
+    else if (p_j2k->m_specific_param.m_decoder.m_state != J2K_STATE_TPHSOT) {
+        return OPJ_FALSE;
+    }
 
-        l_tilec = p_tcd->tcd_image->tiles->comps;
-        l_image_src = p_tcd->image;
-        l_img_comp_src = l_image_src->comps;
+    /* Read into the codestream until reach the EOC or ! can_decode ??? FIXME */
+    while ((!p_j2k->m_specific_param.m_decoder.m_can_decode) &&
+            (l_current_marker != J2K_MS_EOC)) {
 
-        l_img_comp_dest = p_output_image->comps;
+        /* Try to read until the Start Of Data is detected */
+        while (l_current_marker != J2K_MS_SOD) {
 
-        for (i=0; i<l_image_src->numcomps; i++) {
+            if (opj_stream_get_number_byte_left(p_stream) == 0) {
+                p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_NEOC;
+                break;
+            }
 
-                /* Allocate output component buffer if necessary */
-                if (!l_img_comp_dest->data) {
-                        OPJ_SIZE_T l_width = l_img_comp_dest->w;
-                        OPJ_SIZE_T l_height = l_img_comp_dest->h;
+            /* Try to read 2 bytes (the marker size) from stream and copy them into the buffer */
+            if (opj_stream_read_data(p_stream,
+                                     p_j2k->m_specific_param.m_decoder.m_header_data, 2, p_manager) != 2) {
+                opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
+                return OPJ_FALSE;
+            }
 
-                        if ((l_height == 0U) || (l_width > (SIZE_MAX / l_height))) {
-                                /* would overflow */
-                                return OPJ_FALSE;
-                        }
-                        l_img_comp_dest->data = (OPJ_INT32*) opj_calloc(l_width * l_height, sizeof(OPJ_INT32));
-                        if (! l_img_comp_dest->data) {
-                                return OPJ_FALSE;
-                        }
-                }
+            /* Read 2 bytes from the buffer as the marker size */
+            opj_read_bytes(p_j2k->m_specific_param.m_decoder.m_header_data, &l_marker_size,
+                           2);
+
+            /* Check marker size (does not include marker ID but includes marker size) */
+            if (l_marker_size < 2) {
+                opj_event_msg(p_manager, EVT_ERROR, "Inconsistent marker size\n");
+                return OPJ_FALSE;
+            }
 
-                /* Copy info from decoded comp image to output image */
-                l_img_comp_dest->resno_decoded = l_img_comp_src->resno_decoded;
+            /* cf. https://code.google.com/p/openjpeg/issues/detail?id=226 */
+            if (l_current_marker == 0x8080 &&
+                    opj_stream_get_number_byte_left(p_stream) == 0) {
+                p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_NEOC;
+                break;
+            }
 
-                /*-----*/
-                /* Compute the precision of the output buffer */
-                l_size_comp = l_img_comp_src->prec >> 3; /*(/ 8)*/
-                l_remaining = l_img_comp_src->prec & 7;  /* (%8) */
-                l_res = l_tilec->resolutions + l_img_comp_src->resno_decoded;
+            /* Why this condition? FIXME */
+            if (p_j2k->m_specific_param.m_decoder.m_state & J2K_STATE_TPH) {
+                p_j2k->m_specific_param.m_decoder.m_sot_length -= (l_marker_size + 2);
+            }
+            l_marker_size -= 2; /* Subtract the size of the marker ID already read */
 
-                if (l_remaining) {
-                        ++l_size_comp;
-                }
+            /* Get the marker handler from the marker ID */
+            l_marker_handler = opj_j2k_get_marker_handler(l_current_marker);
 
-                if (l_size_comp == 3) {
-                        l_size_comp = 4;
+            /* Check if the marker is known and if it is the right place to find it */
+            if (!(p_j2k->m_specific_param.m_decoder.m_state & l_marker_handler->states)) {
+                opj_event_msg(p_manager, EVT_ERROR,
+                              "Marker is not compliant with its position\n");
+                return OPJ_FALSE;
+            }
+            /* FIXME manage case of unknown marker as in the main header ? */
+
+            /* Check if the marker size is compatible with the header data size */
+            if (l_marker_size > p_j2k->m_specific_param.m_decoder.m_header_data_size) {
+                OPJ_BYTE *new_header_data = NULL;
+                /* If we are here, this means we consider this marker as known & we will read it */
+                /* Check enough bytes left in stream before allocation */
+                if ((OPJ_OFF_T)l_marker_size >  opj_stream_get_number_byte_left(p_stream)) {
+                    opj_event_msg(p_manager, EVT_ERROR,
+                                  "Marker size inconsistent with stream length\n");
+                    return OPJ_FALSE;
                 }
-                /*-----*/
-
-                /* Current tile component size*/
-                /*if (i == 0) {
-                fprintf(stdout, "SRC: l_res_x0=%d, l_res_x1=%d, l_res_y0=%d, l_res_y1=%d\n",
-                                l_res->x0, l_res->x1, l_res->y0, l_res->y1);
-                }*/
-
-                l_width_src = (OPJ_UINT32)(l_res->x1 - l_res->x0);
-                l_height_src = (OPJ_UINT32)(l_res->y1 - l_res->y0);
-
-                /* Border of the current output component*/
-                l_x0_dest = opj_uint_ceildivpow2(l_img_comp_dest->x0, l_img_comp_dest->factor);
-                l_y0_dest = opj_uint_ceildivpow2(l_img_comp_dest->y0, l_img_comp_dest->factor);
-                l_x1_dest = l_x0_dest + l_img_comp_dest->w; /* can't overflow given that image->x1 is uint32 */
-                l_y1_dest = l_y0_dest + l_img_comp_dest->h;
-
-                /*if (i == 0) {
-                fprintf(stdout, "DEST: l_x0_dest=%d, l_x1_dest=%d, l_y0_dest=%d, l_y1_dest=%d (%d)\n",
-                                l_x0_dest, l_x1_dest, l_y0_dest, l_y1_dest, l_img_comp_dest->factor );
-                }*/
-
-                /*-----*/
-                /* Compute the area (l_offset_x0_src, l_offset_y0_src, l_offset_x1_src, l_offset_y1_src)
-                 * of the input buffer (decoded tile component) which will be move
-                 * in the output buffer. Compute the area of the output buffer (l_start_x_dest,
-                 * l_start_y_dest, l_width_dest, l_height_dest)  which will be modified
-                 * by this input area.
-                 * */
-                assert( l_res->x0 >= 0);
-                assert( l_res->x1 >= 0);
-                if ( l_x0_dest < (OPJ_UINT32)l_res->x0 ) {
-                        l_start_x_dest = (OPJ_UINT32)l_res->x0 - l_x0_dest;
-                        l_offset_x0_src = 0;
-
-                        if ( l_x1_dest >= (OPJ_UINT32)l_res->x1 ) {
-                                l_width_dest = l_width_src;
-                                l_offset_x1_src = 0;
-                        }
-                        else {
-                                l_width_dest = l_x1_dest - (OPJ_UINT32)l_res->x0 ;
-                                l_offset_x1_src = (OPJ_INT32)(l_width_src - l_width_dest);
-                        }
+                new_header_data = (OPJ_BYTE *) opj_realloc(
+                                      p_j2k->m_specific_param.m_decoder.m_header_data, l_marker_size);
+                if (! new_header_data) {
+                    opj_free(p_j2k->m_specific_param.m_decoder.m_header_data);
+                    p_j2k->m_specific_param.m_decoder.m_header_data = NULL;
+                    p_j2k->m_specific_param.m_decoder.m_header_data_size = 0;
+                    opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to read header\n");
+                    return OPJ_FALSE;
                 }
-                else {
-                        l_start_x_dest = 0U;
-                        l_offset_x0_src = (OPJ_INT32)l_x0_dest - l_res->x0;
+                p_j2k->m_specific_param.m_decoder.m_header_data = new_header_data;
+                p_j2k->m_specific_param.m_decoder.m_header_data_size = l_marker_size;
+            }
 
-                        if ( l_x1_dest >= (OPJ_UINT32)l_res->x1 ) {
-                                l_width_dest = l_width_src - (OPJ_UINT32)l_offset_x0_src;
-                                l_offset_x1_src = 0;
-                        }
-                        else {
-                                l_width_dest = l_img_comp_dest->w ;
-                                l_offset_x1_src = l_res->x1 - (OPJ_INT32)l_x1_dest;
-                        }
-                }
+            /* Try to read the rest of the marker segment from stream and copy them into the buffer */
+            if (opj_stream_read_data(p_stream,
+                                     p_j2k->m_specific_param.m_decoder.m_header_data, l_marker_size,
+                                     p_manager) != l_marker_size) {
+                opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
+                return OPJ_FALSE;
+            }
+
+            if (!l_marker_handler->handler) {
+                /* See issue #175 */
+                opj_event_msg(p_manager, EVT_ERROR, "Not sure how that happened.\n");
+                return OPJ_FALSE;
+            }
+            /* Read the marker segment with the correct marker handler */
+            if (!(*(l_marker_handler->handler))(p_j2k,
+                                                p_j2k->m_specific_param.m_decoder.m_header_data, l_marker_size, p_manager)) {
+                opj_event_msg(p_manager, EVT_ERROR,
+                              "Fail to read the current marker segment (%#x)\n", l_current_marker);
+                return OPJ_FALSE;
+            }
 
-                if ( l_y0_dest < (OPJ_UINT32)l_res->y0 ) {
-                        l_start_y_dest = (OPJ_UINT32)l_res->y0 - l_y0_dest;
-                        l_offset_y0_src = 0;
+            /* Add the marker to the codestream index*/
+            if (OPJ_FALSE == opj_j2k_add_tlmarker(p_j2k->m_current_tile_number,
+                                                  p_j2k->cstr_index,
+                                                  l_marker_handler->id,
+                                                  (OPJ_UINT32) opj_stream_tell(p_stream) - l_marker_size - 4,
+                                                  l_marker_size + 4)) {
+                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to add tl marker\n");
+                return OPJ_FALSE;
+            }
 
-                        if ( l_y1_dest >= (OPJ_UINT32)l_res->y1 ) {
-                                l_height_dest = l_height_src;
-                                l_offset_y1_src = 0;
-                        }
-                        else {
-                                l_height_dest = l_y1_dest - (OPJ_UINT32)l_res->y0 ;
-                                l_offset_y1_src =  (OPJ_INT32)(l_height_src - l_height_dest);
-                        }
+            /* Keep the position of the last SOT marker read */
+            if (l_marker_handler->id == J2K_MS_SOT) {
+                OPJ_UINT32 sot_pos = (OPJ_UINT32) opj_stream_tell(p_stream) - l_marker_size - 4
+                                     ;
+                if (sot_pos > p_j2k->m_specific_param.m_decoder.m_last_sot_read_pos) {
+                    p_j2k->m_specific_param.m_decoder.m_last_sot_read_pos = sot_pos;
                 }
-                else {
-                        l_start_y_dest = 0U;
-                        l_offset_y0_src = (OPJ_INT32)l_y0_dest - l_res->y0;
+            }
 
-                        if ( l_y1_dest >= (OPJ_UINT32)l_res->y1 ) {
-                                l_height_dest = l_height_src - (OPJ_UINT32)l_offset_y0_src;
-                                l_offset_y1_src = 0;
-                        }
-                        else {
-                                l_height_dest = l_img_comp_dest->h ;
-                                l_offset_y1_src = l_res->y1 - (OPJ_INT32)l_y1_dest;
-                        }
+            if (p_j2k->m_specific_param.m_decoder.m_skip_data) {
+                /* Skip the rest of the tile part header*/
+                if (opj_stream_skip(p_stream, p_j2k->m_specific_param.m_decoder.m_sot_length,
+                                    p_manager) != p_j2k->m_specific_param.m_decoder.m_sot_length) {
+                    opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
+                    return OPJ_FALSE;
+                }
+                l_current_marker = J2K_MS_SOD; /* Normally we reached a SOD */
+            } else {
+                /* Try to read 2 bytes (the next marker ID) from stream and copy them into the buffer*/
+                if (opj_stream_read_data(p_stream,
+                                         p_j2k->m_specific_param.m_decoder.m_header_data, 2, p_manager) != 2) {
+                    opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
+                    return OPJ_FALSE;
                 }
+                /* Read 2 bytes from the buffer as the new marker ID */
+                opj_read_bytes(p_j2k->m_specific_param.m_decoder.m_header_data,
+                               &l_current_marker, 2);
+            }
+        }
+        if (opj_stream_get_number_byte_left(p_stream) == 0
+                && p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_NEOC) {
+            break;
+        }
 
-                if( (l_offset_x0_src < 0 ) || (l_offset_y0_src < 0 ) || (l_offset_x1_src < 0 ) || (l_offset_y1_src < 0 ) ){
-                        return OPJ_FALSE;
+        /* If we didn't skip data before, we need to read the SOD marker*/
+        if (! p_j2k->m_specific_param.m_decoder.m_skip_data) {
+            /* Try to read the SOD marker and skip data ? FIXME */
+            if (! opj_j2k_read_sod(p_j2k, p_stream, p_manager)) {
+                return OPJ_FALSE;
+            }
+            if (p_j2k->m_specific_param.m_decoder.m_can_decode &&
+                    !p_j2k->m_specific_param.m_decoder.m_nb_tile_parts_correction_checked) {
+                /* Issue 254 */
+                OPJ_BOOL l_correction_needed;
+
+                p_j2k->m_specific_param.m_decoder.m_nb_tile_parts_correction_checked = 1;
+                if (!opj_j2k_need_nb_tile_parts_correction(p_stream,
+                        p_j2k->m_current_tile_number, &l_correction_needed, p_manager)) {
+                    opj_event_msg(p_manager, EVT_ERROR,
+                                  "opj_j2k_apply_nb_tile_parts_correction error\n");
+                    return OPJ_FALSE;
                 }
-                /* testcase 2977.pdf.asan.67.2198 */
-                if ((OPJ_INT32)l_width_dest < 0 || (OPJ_INT32)l_height_dest < 0) {
-                        return OPJ_FALSE;
+                if (l_correction_needed) {
+                    OPJ_UINT32 l_nb_tiles = p_j2k->m_cp.tw * p_j2k->m_cp.th;
+                    OPJ_UINT32 l_tile_no;
+
+                    p_j2k->m_specific_param.m_decoder.m_can_decode = 0;
+                    p_j2k->m_specific_param.m_decoder.m_nb_tile_parts_correction = 1;
+                    /* correct tiles */
+                    for (l_tile_no = 0U; l_tile_no < l_nb_tiles; ++l_tile_no) {
+                        if (p_j2k->m_cp.tcps[l_tile_no].m_nb_tile_parts != 0U) {
+                            p_j2k->m_cp.tcps[l_tile_no].m_nb_tile_parts += 1;
+                        }
+                    }
+                    opj_event_msg(p_manager, EVT_WARNING,
+                                  "Non conformant codestream TPsot==TNsot.\n");
                 }
-                /*-----*/
-
-                /* Compute the input buffer offset */
-                l_start_offset_src = (OPJ_SIZE_T)l_offset_x0_src + (OPJ_SIZE_T)l_offset_y0_src * (OPJ_SIZE_T)l_width_src;
-                l_line_offset_src  = (OPJ_SIZE_T)l_offset_x1_src + (OPJ_SIZE_T)l_offset_x0_src;
-                l_end_offset_src   = (OPJ_SIZE_T)l_offset_y1_src * (OPJ_SIZE_T)l_width_src - (OPJ_SIZE_T)l_offset_x0_src;
-
-                /* Compute the output buffer offset */
-                l_start_offset_dest = (OPJ_SIZE_T)l_start_x_dest + (OPJ_SIZE_T)l_start_y_dest * (OPJ_SIZE_T)l_img_comp_dest->w;
-                l_line_offset_dest  = (OPJ_SIZE_T)l_img_comp_dest->w - (OPJ_SIZE_T)l_width_dest;
-
-                /* Move the output buffer to the first place where we will write*/
-                l_dest_ptr = l_img_comp_dest->data + l_start_offset_dest;
-
-                /*if (i == 0) {
-                        fprintf(stdout, "COMPO[%d]:\n",i);
-                        fprintf(stdout, "SRC: l_start_x_src=%d, l_start_y_src=%d, l_width_src=%d, l_height_src=%d\n"
-                                        "\t tile offset:%d, %d, %d, %d\n"
-                                        "\t buffer offset: %d; %d, %d\n",
-                                        l_res->x0, l_res->y0, l_width_src, l_height_src,
-                                        l_offset_x0_src, l_offset_y0_src, l_offset_x1_src, l_offset_y1_src,
-                                        l_start_offset_src, l_line_offset_src, l_end_offset_src);
-
-                        fprintf(stdout, "DEST: l_start_x_dest=%d, l_start_y_dest=%d, l_width_dest=%d, l_height_dest=%d\n"
-                                        "\t start offset: %d, line offset= %d\n",
-                                        l_start_x_dest, l_start_y_dest, l_width_dest, l_height_dest, l_start_offset_dest, l_line_offset_dest);
-                }*/
-
-                switch (l_size_comp) {
-                        case 1:
-                                {
-                                        OPJ_CHAR * l_src_ptr = (OPJ_CHAR*) p_data;
-                                        l_src_ptr += l_start_offset_src; /* Move to the first place where we will read*/
-
-                                        if (l_img_comp_src->sgnd) {
-                                                for (j = 0 ; j < l_height_dest ; ++j) {
-                                                        for ( k = 0 ; k < l_width_dest ; ++k) {
-                                                                *(l_dest_ptr++) = (OPJ_INT32) (*(l_src_ptr++)); /* Copy only the data needed for the output image */
-                                                        }
-
-                                                        l_dest_ptr+= l_line_offset_dest; /* Move to the next place where we will write */
-                                                        l_src_ptr += l_line_offset_src ; /* Move to the next place where we will read */
-                                                }
-                                        }
-                                        else {
-                                                for ( j = 0 ; j < l_height_dest ; ++j ) {
-                                                        for ( k = 0 ; k < l_width_dest ; ++k) {
-                                                                *(l_dest_ptr++) = (OPJ_INT32) ((*(l_src_ptr++))&0xff);
-                                                        }
-
-                                                        l_dest_ptr+= l_line_offset_dest;
-                                                        l_src_ptr += l_line_offset_src;
-                                                }
-                                        }
-
-                                        l_src_ptr += l_end_offset_src; /* Move to the end of this component-part of the input buffer */
-                                        p_data = (OPJ_BYTE*) l_src_ptr; /* Keep the current position for the next component-part */
-                                }
-                                break;
-                        case 2:
-                                {
-                                        OPJ_INT16 * l_src_ptr = (OPJ_INT16 *) p_data;
-                                        l_src_ptr += l_start_offset_src;
-
-                                        if (l_img_comp_src->sgnd) {
-                                                for (j=0;j<l_height_dest;++j) {
-                                                        for (k=0;k<l_width_dest;++k) {
-                                                                *(l_dest_ptr++) = *(l_src_ptr++);
-                                                        }
-
-                                                        l_dest_ptr+= l_line_offset_dest;
-                                                        l_src_ptr += l_line_offset_src ;
-                                                }
-                                        }
-                                        else {
-                                                for (j=0;j<l_height_dest;++j) {
-                                                        for (k=0;k<l_width_dest;++k) {
-                                                                *(l_dest_ptr++) = (*(l_src_ptr++))&0xffff;
-                                                        }
-
-                                                        l_dest_ptr+= l_line_offset_dest;
-                                                        l_src_ptr += l_line_offset_src ;
-                                                }
-                                        }
-
-                                        l_src_ptr += l_end_offset_src;
-                                        p_data = (OPJ_BYTE*) l_src_ptr;
-                                }
-                                break;
-                        case 4:
-                                {
-                                        OPJ_INT32 * l_src_ptr = (OPJ_INT32 *) p_data;
-                                        l_src_ptr += l_start_offset_src;
-
-                                        for (j=0;j<l_height_dest;++j) {
-                                                for (k=0;k<l_width_dest;++k) {
-                                                        *(l_dest_ptr++) = (*(l_src_ptr++));
-                                                }
-
-                                                l_dest_ptr+= l_line_offset_dest;
-                                                l_src_ptr += l_line_offset_src ;
-                                        }
-
-                                        l_src_ptr += l_end_offset_src;
-                                        p_data = (OPJ_BYTE*) l_src_ptr;
-                                }
-                                break;
+            }
+            if (! p_j2k->m_specific_param.m_decoder.m_can_decode) {
+                /* Try to read 2 bytes (the next marker ID) from stream and copy them into the buffer */
+                if (opj_stream_read_data(p_stream,
+                                         p_j2k->m_specific_param.m_decoder.m_header_data, 2, p_manager) != 2) {
+                    opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
+                    return OPJ_FALSE;
                 }
 
-                ++l_img_comp_dest;
-                ++l_img_comp_src;
-                ++l_tilec;
+                /* Read 2 bytes from buffer as the new marker ID */
+                opj_read_bytes(p_j2k->m_specific_param.m_decoder.m_header_data,
+                               &l_current_marker, 2);
+            }
+        } else {
+            /* Indicate we will try to read a new tile-part header*/
+            p_j2k->m_specific_param.m_decoder.m_skip_data = 0;
+            p_j2k->m_specific_param.m_decoder.m_can_decode = 0;
+            p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_TPHSOT;
+
+            /* Try to read 2 bytes (the next marker ID) from stream and copy them into the buffer */
+            if (opj_stream_read_data(p_stream,
+                                     p_j2k->m_specific_param.m_decoder.m_header_data, 2, p_manager) != 2) {
+                opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
+                return OPJ_FALSE;
+            }
+
+            /* Read 2 bytes from buffer as the new marker ID */
+            opj_read_bytes(p_j2k->m_specific_param.m_decoder.m_header_data,
+                           &l_current_marker, 2);
         }
+    }
 
-        return OPJ_TRUE;
+    /* Current marker is the EOC marker ?*/
+    if (l_current_marker == J2K_MS_EOC) {
+        if (p_j2k->m_specific_param.m_decoder.m_state != J2K_STATE_EOC) {
+            p_j2k->m_current_tile_number = 0;
+            p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_EOC;
+        }
+    }
+
+    /* FIXME DOC ???*/
+    if (! p_j2k->m_specific_param.m_decoder.m_can_decode) {
+        OPJ_UINT32 l_nb_tiles = p_j2k->m_cp.th * p_j2k->m_cp.tw;
+        l_tcp = p_j2k->m_cp.tcps + p_j2k->m_current_tile_number;
+
+        while ((p_j2k->m_current_tile_number < l_nb_tiles) && (l_tcp->m_data == 00)) {
+            ++p_j2k->m_current_tile_number;
+            ++l_tcp;
+        }
+
+        if (p_j2k->m_current_tile_number == l_nb_tiles) {
+            *p_go_on = OPJ_FALSE;
+            return OPJ_TRUE;
+        }
+    }
+
+    if (! opj_j2k_merge_ppt(p_j2k->m_cp.tcps + p_j2k->m_current_tile_number,
+                            p_manager)) {
+        opj_event_msg(p_manager, EVT_ERROR, "Failed to merge PPT data\n");
+        return OPJ_FALSE;
+    }
+    /*FIXME ???*/
+    if (! opj_tcd_init_decode_tile(p_j2k->m_tcd, p_j2k->m_current_tile_number,
+                                   p_manager)) {
+        opj_event_msg(p_manager, EVT_ERROR, "Cannot decode tile, memory error\n");
+        return OPJ_FALSE;
+    }
+
+    opj_event_msg(p_manager, EVT_INFO, "Header of tile %d / %d has been read.\n",
+                  p_j2k->m_current_tile_number + 1, (p_j2k->m_cp.th * p_j2k->m_cp.tw));
+
+    *p_tile_index = p_j2k->m_current_tile_number;
+    *p_go_on = OPJ_TRUE;
+    *p_data_size = opj_tcd_get_decoded_tile_size(p_j2k->m_tcd);
+    *p_tile_x0 = p_j2k->m_tcd->tcd_image->tiles->x0;
+    *p_tile_y0 = p_j2k->m_tcd->tcd_image->tiles->y0;
+    *p_tile_x1 = p_j2k->m_tcd->tcd_image->tiles->x1;
+    *p_tile_y1 = p_j2k->m_tcd->tcd_image->tiles->y1;
+    *p_nb_comps = p_j2k->m_tcd->tcd_image->tiles->numcomps;
+
+    p_j2k->m_specific_param.m_decoder.m_state |=
+        0x0080;/* FIXME J2K_DEC_STATE_DATA;*/
+
+    return OPJ_TRUE;
 }
 
-OPJ_BOOL opj_j2k_set_decode_area(       opj_j2k_t *p_j2k,
-                                                                    opj_image_t* p_image,
-                                                                    OPJ_INT32 p_start_x, OPJ_INT32 p_start_y,
-                                                                    OPJ_INT32 p_end_x, OPJ_INT32 p_end_y,
-                                                                    opj_event_mgr_t * p_manager )
+OPJ_BOOL opj_j2k_decode_tile(opj_j2k_t * p_j2k,
+                             OPJ_UINT32 p_tile_index,
+                             OPJ_BYTE * p_data,
+                             OPJ_UINT32 p_data_size,
+                             opj_stream_private_t *p_stream,
+                             opj_event_mgr_t * p_manager)
 {
-        opj_cp_t * l_cp = &(p_j2k->m_cp);
-        opj_image_t * l_image = p_j2k->m_private_image;
+    OPJ_UINT32 l_current_marker;
+    OPJ_BYTE l_data [2];
+    opj_tcp_t * l_tcp;
 
-        OPJ_UINT32 it_comp;
-        OPJ_INT32 l_comp_x1, l_comp_y1;
-        opj_image_comp_t* l_img_comp = NULL;
+    /* preconditions */
+    assert(p_stream != 00);
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-        /* Check if we are read the main header */
-        if (p_j2k->m_specific_param.m_decoder.m_state != J2K_STATE_TPHSOT) { /* FIXME J2K_DEC_STATE_TPHSOT)*/
-                opj_event_msg(p_manager, EVT_ERROR, "Need to decode the main header before begin to decode the remaining codestream");
-                return OPJ_FALSE;
-        }
+    if (!(p_j2k->m_specific_param.m_decoder.m_state &
+            0x0080/*FIXME J2K_DEC_STATE_DATA*/)
+            || (p_tile_index != p_j2k->m_current_tile_number)) {
+        return OPJ_FALSE;
+    }
 
-        if ( !p_start_x && !p_start_y && !p_end_x && !p_end_y){
-                opj_event_msg(p_manager, EVT_INFO, "No decoded area parameters, set the decoded area to the whole image\n");
+    l_tcp = &(p_j2k->m_cp.tcps[p_tile_index]);
+    if (! l_tcp->m_data) {
+        opj_j2k_tcp_destroy(l_tcp);
+        return OPJ_FALSE;
+    }
 
-                p_j2k->m_specific_param.m_decoder.m_start_tile_x = 0;
-                p_j2k->m_specific_param.m_decoder.m_start_tile_y = 0;
-                p_j2k->m_specific_param.m_decoder.m_end_tile_x = l_cp->tw;
-                p_j2k->m_specific_param.m_decoder.m_end_tile_y = l_cp->th;
+    if (! opj_tcd_decode_tile(p_j2k->m_tcd,
+                              l_tcp->m_data,
+                              l_tcp->m_data_size,
+                              p_tile_index,
+                              p_j2k->cstr_index, p_manager)) {
+        opj_j2k_tcp_destroy(l_tcp);
+        p_j2k->m_specific_param.m_decoder.m_state |= 0x8000;/*FIXME J2K_DEC_STATE_ERR;*/
+        opj_event_msg(p_manager, EVT_ERROR, "Failed to decode.\n");
+        return OPJ_FALSE;
+    }
+
+    if (! opj_tcd_update_tile_data(p_j2k->m_tcd, p_data, p_data_size)) {
+        return OPJ_FALSE;
+    }
+
+    /* To avoid to destroy the tcp which can be useful when we try to decode a tile decoded before (cf j2k_random_tile_access)
+     * we destroy just the data which will be re-read in read_tile_header*/
+    /*opj_j2k_tcp_destroy(l_tcp);
+    p_j2k->m_tcd->tcp = 0;*/
+    opj_j2k_tcp_data_destroy(l_tcp);
+
+    p_j2k->m_specific_param.m_decoder.m_can_decode = 0;
+    p_j2k->m_specific_param.m_decoder.m_state &= (~
+            (0x0080u)); /* FIXME J2K_DEC_STATE_DATA);*/
+
+    if (opj_stream_get_number_byte_left(p_stream) == 0
+            && p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_NEOC) {
+        return OPJ_TRUE;
+    }
+
+    if (p_j2k->m_specific_param.m_decoder.m_state !=
+            0x0100) { /*FIXME J2K_DEC_STATE_EOC)*/
+        if (opj_stream_read_data(p_stream, l_data, 2, p_manager) != 2) {
+            opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
+            return OPJ_FALSE;
+        }
 
+        opj_read_bytes(l_data, &l_current_marker, 2);
+
+        if (l_current_marker == J2K_MS_EOC) {
+            p_j2k->m_current_tile_number = 0;
+            p_j2k->m_specific_param.m_decoder.m_state =  0x0100;/*FIXME J2K_DEC_STATE_EOC;*/
+        } else if (l_current_marker != J2K_MS_SOT) {
+            if (opj_stream_get_number_byte_left(p_stream) == 0) {
+                p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_NEOC;
+                opj_event_msg(p_manager, EVT_WARNING, "Stream does not end with EOC\n");
                 return OPJ_TRUE;
+            }
+            opj_event_msg(p_manager, EVT_ERROR, "Stream too short, expected SOT\n");
+            return OPJ_FALSE;
         }
+    }
 
-        /* ----- */
-        /* Check if the positions provided by the user are correct */
+    return OPJ_TRUE;
+}
 
-        /* Left */
-        assert(p_start_x >= 0 );
-        assert(p_start_y >= 0 );
+static OPJ_BOOL opj_j2k_update_image_data(opj_tcd_t * p_tcd, OPJ_BYTE * p_data,
+        opj_image_t* p_output_image)
+{
+    OPJ_UINT32 i, j, k = 0;
+    OPJ_UINT32 l_width_src, l_height_src;
+    OPJ_UINT32 l_width_dest, l_height_dest;
+    OPJ_INT32 l_offset_x0_src, l_offset_y0_src, l_offset_x1_src, l_offset_y1_src;
+    OPJ_SIZE_T l_start_offset_src, l_line_offset_src, l_end_offset_src ;
+    OPJ_UINT32 l_start_x_dest, l_start_y_dest;
+    OPJ_UINT32 l_x0_dest, l_y0_dest, l_x1_dest, l_y1_dest;
+    OPJ_SIZE_T l_start_offset_dest, l_line_offset_dest;
 
-        if ((OPJ_UINT32)p_start_x > l_image->x1 ) {
-                opj_event_msg(p_manager, EVT_ERROR,
-                        "Left position of the decoded area (region_x0=%d) is outside the image area (Xsiz=%d).\n",
-                        p_start_x, l_image->x1);
+    opj_image_comp_t * l_img_comp_src = 00;
+    opj_image_comp_t * l_img_comp_dest = 00;
+
+    opj_tcd_tilecomp_t * l_tilec = 00;
+    opj_image_t * l_image_src = 00;
+    OPJ_UINT32 l_size_comp, l_remaining;
+    OPJ_INT32 * l_dest_ptr;
+    opj_tcd_resolution_t* l_res = 00;
+
+    l_tilec = p_tcd->tcd_image->tiles->comps;
+    l_image_src = p_tcd->image;
+    l_img_comp_src = l_image_src->comps;
+
+    l_img_comp_dest = p_output_image->comps;
+
+    for (i = 0; i < l_image_src->numcomps; i++) {
+
+        /* Allocate output component buffer if necessary */
+        if (!l_img_comp_dest->data) {
+            OPJ_SIZE_T l_width = l_img_comp_dest->w;
+            OPJ_SIZE_T l_height = l_img_comp_dest->h;
+
+            if ((l_height == 0U) || (l_width > (SIZE_MAX / l_height))) {
+                /* would overflow */
                 return OPJ_FALSE;
+            }
+            l_img_comp_dest->data = (OPJ_INT32*) opj_calloc(l_width * l_height,
+                                    sizeof(OPJ_INT32));
+            if (! l_img_comp_dest->data) {
+                return OPJ_FALSE;
+            }
         }
-        else if ((OPJ_UINT32)p_start_x < l_image->x0){
-                opj_event_msg(p_manager, EVT_WARNING,
-                                "Left position of the decoded area (region_x0=%d) is outside the image area (XOsiz=%d).\n",
-                                p_start_x, l_image->x0);
-                p_j2k->m_specific_param.m_decoder.m_start_tile_x = 0;
-                p_image->x0 = l_image->x0;
-        }
-        else {
-                p_j2k->m_specific_param.m_decoder.m_start_tile_x = ((OPJ_UINT32)p_start_x - l_cp->tx0) / l_cp->tdx;
-                p_image->x0 = (OPJ_UINT32)p_start_x;
+
+        /* Copy info from decoded comp image to output image */
+        l_img_comp_dest->resno_decoded = l_img_comp_src->resno_decoded;
+
+        /*-----*/
+        /* Compute the precision of the output buffer */
+        l_size_comp = l_img_comp_src->prec >> 3; /*(/ 8)*/
+        l_remaining = l_img_comp_src->prec & 7;  /* (%8) */
+        l_res = l_tilec->resolutions + l_img_comp_src->resno_decoded;
+
+        if (l_remaining) {
+            ++l_size_comp;
         }
 
-        /* Up */
-        if ((OPJ_UINT32)p_start_y > l_image->y1){
-                opj_event_msg(p_manager, EVT_ERROR,
-                                "Up position of the decoded area (region_y0=%d) is outside the image area (Ysiz=%d).\n",
-                                p_start_y, l_image->y1);
-                return OPJ_FALSE;
+        if (l_size_comp == 3) {
+            l_size_comp = 4;
         }
-        else if ((OPJ_UINT32)p_start_y < l_image->y0){
-                opj_event_msg(p_manager, EVT_WARNING,
-                                "Up position of the decoded area (region_y0=%d) is outside the image area (YOsiz=%d).\n",
-                                p_start_y, l_image->y0);
-                p_j2k->m_specific_param.m_decoder.m_start_tile_y = 0;
-                p_image->y0 = l_image->y0;
+        /*-----*/
+
+        /* Current tile component size*/
+        /*if (i == 0) {
+        fprintf(stdout, "SRC: l_res_x0=%d, l_res_x1=%d, l_res_y0=%d, l_res_y1=%d\n",
+                        l_res->x0, l_res->x1, l_res->y0, l_res->y1);
+        }*/
+
+        l_width_src = (OPJ_UINT32)(l_res->x1 - l_res->x0);
+        l_height_src = (OPJ_UINT32)(l_res->y1 - l_res->y0);
+
+        /* Border of the current output component*/
+        l_x0_dest = opj_uint_ceildivpow2(l_img_comp_dest->x0, l_img_comp_dest->factor);
+        l_y0_dest = opj_uint_ceildivpow2(l_img_comp_dest->y0, l_img_comp_dest->factor);
+        l_x1_dest = l_x0_dest +
+                    l_img_comp_dest->w; /* can't overflow given that image->x1 is uint32 */
+        l_y1_dest = l_y0_dest + l_img_comp_dest->h;
+
+        /*if (i == 0) {
+        fprintf(stdout, "DEST: l_x0_dest=%d, l_x1_dest=%d, l_y0_dest=%d, l_y1_dest=%d (%d)\n",
+                        l_x0_dest, l_x1_dest, l_y0_dest, l_y1_dest, l_img_comp_dest->factor );
+        }*/
+
+        /*-----*/
+        /* Compute the area (l_offset_x0_src, l_offset_y0_src, l_offset_x1_src, l_offset_y1_src)
+         * of the input buffer (decoded tile component) which will be move
+         * in the output buffer. Compute the area of the output buffer (l_start_x_dest,
+         * l_start_y_dest, l_width_dest, l_height_dest)  which will be modified
+         * by this input area.
+         * */
+        assert(l_res->x0 >= 0);
+        assert(l_res->x1 >= 0);
+        if (l_x0_dest < (OPJ_UINT32)l_res->x0) {
+            l_start_x_dest = (OPJ_UINT32)l_res->x0 - l_x0_dest;
+            l_offset_x0_src = 0;
+
+            if (l_x1_dest >= (OPJ_UINT32)l_res->x1) {
+                l_width_dest = l_width_src;
+                l_offset_x1_src = 0;
+            } else {
+                l_width_dest = l_x1_dest - (OPJ_UINT32)l_res->x0 ;
+                l_offset_x1_src = (OPJ_INT32)(l_width_src - l_width_dest);
+            }
+        } else {
+            l_start_x_dest = 0U;
+            l_offset_x0_src = (OPJ_INT32)l_x0_dest - l_res->x0;
+
+            if (l_x1_dest >= (OPJ_UINT32)l_res->x1) {
+                l_width_dest = l_width_src - (OPJ_UINT32)l_offset_x0_src;
+                l_offset_x1_src = 0;
+            } else {
+                l_width_dest = l_img_comp_dest->w ;
+                l_offset_x1_src = l_res->x1 - (OPJ_INT32)l_x1_dest;
+            }
         }
-        else {
-                p_j2k->m_specific_param.m_decoder.m_start_tile_y = ((OPJ_UINT32)p_start_y - l_cp->ty0) / l_cp->tdy;
-                p_image->y0 = (OPJ_UINT32)p_start_y;
+
+        if (l_y0_dest < (OPJ_UINT32)l_res->y0) {
+            l_start_y_dest = (OPJ_UINT32)l_res->y0 - l_y0_dest;
+            l_offset_y0_src = 0;
+
+            if (l_y1_dest >= (OPJ_UINT32)l_res->y1) {
+                l_height_dest = l_height_src;
+                l_offset_y1_src = 0;
+            } else {
+                l_height_dest = l_y1_dest - (OPJ_UINT32)l_res->y0 ;
+                l_offset_y1_src = (OPJ_INT32)(l_height_src - l_height_dest);
+            }
+        } else {
+            l_start_y_dest = 0U;
+            l_offset_y0_src = (OPJ_INT32)l_y0_dest - l_res->y0;
+
+            if (l_y1_dest >= (OPJ_UINT32)l_res->y1) {
+                l_height_dest = l_height_src - (OPJ_UINT32)l_offset_y0_src;
+                l_offset_y1_src = 0;
+            } else {
+                l_height_dest = l_img_comp_dest->h ;
+                l_offset_y1_src = l_res->y1 - (OPJ_INT32)l_y1_dest;
+            }
         }
 
-        /* Right */
-        assert((OPJ_UINT32)p_end_x > 0);
-        assert((OPJ_UINT32)p_end_y > 0);
-        if ((OPJ_UINT32)p_end_x < l_image->x0) {
-                opj_event_msg(p_manager, EVT_ERROR,
-                        "Right position of the decoded area (region_x1=%d) is outside the image area (XOsiz=%d).\n",
-                        p_end_x, l_image->x0);
-                return OPJ_FALSE;
+        if ((l_offset_x0_src < 0) || (l_offset_y0_src < 0) || (l_offset_x1_src < 0) ||
+                (l_offset_y1_src < 0)) {
+            return OPJ_FALSE;
         }
-        else if ((OPJ_UINT32)p_end_x > l_image->x1) {
-                opj_event_msg(p_manager, EVT_WARNING,
-                        "Right position of the decoded area (region_x1=%d) is outside the image area (Xsiz=%d).\n",
-                        p_end_x, l_image->x1);
-                p_j2k->m_specific_param.m_decoder.m_end_tile_x = l_cp->tw;
-                p_image->x1 = l_image->x1;
+        /* testcase 2977.pdf.asan.67.2198 */
+        if ((OPJ_INT32)l_width_dest < 0 || (OPJ_INT32)l_height_dest < 0) {
+            return OPJ_FALSE;
         }
-        else {
-                p_j2k->m_specific_param.m_decoder.m_end_tile_x = (OPJ_UINT32)opj_int_ceildiv(p_end_x - (OPJ_INT32)l_cp->tx0, (OPJ_INT32)l_cp->tdx);
-                p_image->x1 = (OPJ_UINT32)p_end_x;
+        /*-----*/
+
+        /* Compute the input buffer offset */
+        l_start_offset_src = (OPJ_SIZE_T)l_offset_x0_src + (OPJ_SIZE_T)l_offset_y0_src
+                             * (OPJ_SIZE_T)l_width_src;
+        l_line_offset_src  = (OPJ_SIZE_T)l_offset_x1_src + (OPJ_SIZE_T)l_offset_x0_src;
+        l_end_offset_src   = (OPJ_SIZE_T)l_offset_y1_src * (OPJ_SIZE_T)l_width_src -
+                             (OPJ_SIZE_T)l_offset_x0_src;
+
+        /* Compute the output buffer offset */
+        l_start_offset_dest = (OPJ_SIZE_T)l_start_x_dest + (OPJ_SIZE_T)l_start_y_dest
+                              * (OPJ_SIZE_T)l_img_comp_dest->w;
+        l_line_offset_dest  = (OPJ_SIZE_T)l_img_comp_dest->w - (OPJ_SIZE_T)l_width_dest;
+
+        /* Move the output buffer to the first place where we will write*/
+        l_dest_ptr = l_img_comp_dest->data + l_start_offset_dest;
+
+        /*if (i == 0) {
+                fprintf(stdout, "COMPO[%d]:\n",i);
+                fprintf(stdout, "SRC: l_start_x_src=%d, l_start_y_src=%d, l_width_src=%d, l_height_src=%d\n"
+                                "\t tile offset:%d, %d, %d, %d\n"
+                                "\t buffer offset: %d; %d, %d\n",
+                                l_res->x0, l_res->y0, l_width_src, l_height_src,
+                                l_offset_x0_src, l_offset_y0_src, l_offset_x1_src, l_offset_y1_src,
+                                l_start_offset_src, l_line_offset_src, l_end_offset_src);
+
+                fprintf(stdout, "DEST: l_start_x_dest=%d, l_start_y_dest=%d, l_width_dest=%d, l_height_dest=%d\n"
+                                "\t start offset: %d, line offset= %d\n",
+                                l_start_x_dest, l_start_y_dest, l_width_dest, l_height_dest, l_start_offset_dest, l_line_offset_dest);
+        }*/
+
+        switch (l_size_comp) {
+        case 1: {
+            OPJ_CHAR * l_src_ptr = (OPJ_CHAR*) p_data;
+            l_src_ptr += l_start_offset_src; /* Move to the first place where we will read*/
+
+            if (l_img_comp_src->sgnd) {
+                for (j = 0 ; j < l_height_dest ; ++j) {
+                    for (k = 0 ; k < l_width_dest ; ++k) {
+                        *(l_dest_ptr++) = (OPJ_INT32)(*
+                                                      (l_src_ptr++));  /* Copy only the data needed for the output image */
+                    }
+
+                    l_dest_ptr +=
+                        l_line_offset_dest; /* Move to the next place where we will write */
+                    l_src_ptr += l_line_offset_src ; /* Move to the next place where we will read */
+                }
+            } else {
+                for (j = 0 ; j < l_height_dest ; ++j) {
+                    for (k = 0 ; k < l_width_dest ; ++k) {
+                        *(l_dest_ptr++) = (OPJ_INT32)((*(l_src_ptr++)) & 0xff);
+                    }
+
+                    l_dest_ptr += l_line_offset_dest;
+                    l_src_ptr += l_line_offset_src;
+                }
+            }
+
+            l_src_ptr +=
+                l_end_offset_src; /* Move to the end of this component-part of the input buffer */
+            p_data = (OPJ_BYTE*)
+                     l_src_ptr; /* Keep the current position for the next component-part */
         }
+        break;
+        case 2: {
+            OPJ_INT16 * l_src_ptr = (OPJ_INT16 *) p_data;
+            l_src_ptr += l_start_offset_src;
+
+            if (l_img_comp_src->sgnd) {
+                for (j = 0; j < l_height_dest; ++j) {
+                    for (k = 0; k < l_width_dest; ++k) {
+                        *(l_dest_ptr++) = *(l_src_ptr++);
+                    }
 
-        /* Bottom */
-        if ((OPJ_UINT32)p_end_y < l_image->y0) {
-                opj_event_msg(p_manager, EVT_ERROR,
-                        "Bottom position of the decoded area (region_y1=%d) is outside the image area (YOsiz=%d).\n",
-                        p_end_y, l_image->y0);
-                return OPJ_FALSE;
+                    l_dest_ptr += l_line_offset_dest;
+                    l_src_ptr += l_line_offset_src ;
+                }
+            } else {
+                for (j = 0; j < l_height_dest; ++j) {
+                    for (k = 0; k < l_width_dest; ++k) {
+                        *(l_dest_ptr++) = (*(l_src_ptr++)) & 0xffff;
+                    }
+
+                    l_dest_ptr += l_line_offset_dest;
+                    l_src_ptr += l_line_offset_src ;
+                }
+            }
+
+            l_src_ptr += l_end_offset_src;
+            p_data = (OPJ_BYTE*) l_src_ptr;
         }
-        if ((OPJ_UINT32)p_end_y > l_image->y1){
-                opj_event_msg(p_manager, EVT_WARNING,
-                        "Bottom position of the decoded area (region_y1=%d) is outside the image area (Ysiz=%d).\n",
-                        p_end_y, l_image->y1);
-                p_j2k->m_specific_param.m_decoder.m_end_tile_y = l_cp->th;
-                p_image->y1 = l_image->y1;
+        break;
+        case 4: {
+            OPJ_INT32 * l_src_ptr = (OPJ_INT32 *) p_data;
+            l_src_ptr += l_start_offset_src;
+
+            for (j = 0; j < l_height_dest; ++j) {
+                for (k = 0; k < l_width_dest; ++k) {
+                    *(l_dest_ptr++) = (*(l_src_ptr++));
+                }
+
+                l_dest_ptr += l_line_offset_dest;
+                l_src_ptr += l_line_offset_src ;
+            }
+
+            l_src_ptr += l_end_offset_src;
+            p_data = (OPJ_BYTE*) l_src_ptr;
         }
-        else{
-                p_j2k->m_specific_param.m_decoder.m_end_tile_y = (OPJ_UINT32)opj_int_ceildiv(p_end_y - (OPJ_INT32)l_cp->ty0, (OPJ_INT32)l_cp->tdy);
-                p_image->y1 = (OPJ_UINT32)p_end_y;
+        break;
         }
-        /* ----- */
 
-        p_j2k->m_specific_param.m_decoder.m_discard_tiles = 1;
+        ++l_img_comp_dest;
+        ++l_img_comp_src;
+        ++l_tilec;
+    }
 
-        l_img_comp = p_image->comps;
-        for (it_comp=0; it_comp < p_image->numcomps; ++it_comp)
-        {
-                OPJ_INT32 l_h,l_w;
+    return OPJ_TRUE;
+}
 
-                l_img_comp->x0 = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)p_image->x0, (OPJ_INT32)l_img_comp->dx);
-                l_img_comp->y0 = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)p_image->y0, (OPJ_INT32)l_img_comp->dy);
-                l_comp_x1 = opj_int_ceildiv((OPJ_INT32)p_image->x1, (OPJ_INT32)l_img_comp->dx);
-                l_comp_y1 = opj_int_ceildiv((OPJ_INT32)p_image->y1, (OPJ_INT32)l_img_comp->dy);
+OPJ_BOOL opj_j2k_set_decode_area(opj_j2k_t *p_j2k,
+                                 opj_image_t* p_image,
+                                 OPJ_INT32 p_start_x, OPJ_INT32 p_start_y,
+                                 OPJ_INT32 p_end_x, OPJ_INT32 p_end_y,
+                                 opj_event_mgr_t * p_manager)
+{
+    opj_cp_t * l_cp = &(p_j2k->m_cp);
+    opj_image_t * l_image = p_j2k->m_private_image;
 
-                l_w = opj_int_ceildivpow2(l_comp_x1, (OPJ_INT32)l_img_comp->factor)
-                                - opj_int_ceildivpow2((OPJ_INT32)l_img_comp->x0, (OPJ_INT32)l_img_comp->factor);
-                if (l_w < 0){
-                        opj_event_msg(p_manager, EVT_ERROR,
-                                "Size x of the decoded component image is incorrect (comp[%d].w=%d).\n",
-                                it_comp, l_w);
-                        return OPJ_FALSE;
-                }
-                l_img_comp->w = (OPJ_UINT32)l_w;
+    OPJ_UINT32 it_comp;
+    OPJ_INT32 l_comp_x1, l_comp_y1;
+    opj_image_comp_t* l_img_comp = NULL;
 
-                l_h = opj_int_ceildivpow2(l_comp_y1, (OPJ_INT32)l_img_comp->factor)
-                                - opj_int_ceildivpow2((OPJ_INT32)l_img_comp->y0, (OPJ_INT32)l_img_comp->factor);
-                if (l_h < 0){
-                        opj_event_msg(p_manager, EVT_ERROR,
-                                "Size y of the decoded component image is incorrect (comp[%d].h=%d).\n",
-                                it_comp, l_h);
-                        return OPJ_FALSE;
-                }
-                l_img_comp->h = (OPJ_UINT32)l_h;
+    /* Check if we are read the main header */
+    if (p_j2k->m_specific_param.m_decoder.m_state !=
+            J2K_STATE_TPHSOT) { /* FIXME J2K_DEC_STATE_TPHSOT)*/
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Need to decode the main header before begin to decode the remaining codestream");
+        return OPJ_FALSE;
+    }
 
-                l_img_comp++;
-        }
+    if (!p_start_x && !p_start_y && !p_end_x && !p_end_y) {
+        opj_event_msg(p_manager, EVT_INFO,
+                      "No decoded area parameters, set the decoded area to the whole image\n");
 
-        opj_event_msg( p_manager, EVT_INFO,"Setting decoding area to %d,%d,%d,%d\n",
-                        p_image->x0, p_image->y0, p_image->x1, p_image->y1);
+        p_j2k->m_specific_param.m_decoder.m_start_tile_x = 0;
+        p_j2k->m_specific_param.m_decoder.m_start_tile_y = 0;
+        p_j2k->m_specific_param.m_decoder.m_end_tile_x = l_cp->tw;
+        p_j2k->m_specific_param.m_decoder.m_end_tile_y = l_cp->th;
 
         return OPJ_TRUE;
+    }
+
+    /* ----- */
+    /* Check if the positions provided by the user are correct */
+
+    /* Left */
+    assert(p_start_x >= 0);
+    assert(p_start_y >= 0);
+
+    if ((OPJ_UINT32)p_start_x > l_image->x1) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Left position of the decoded area (region_x0=%d) is outside the image area (Xsiz=%d).\n",
+                      p_start_x, l_image->x1);
+        return OPJ_FALSE;
+    } else if ((OPJ_UINT32)p_start_x < l_image->x0) {
+        opj_event_msg(p_manager, EVT_WARNING,
+                      "Left position of the decoded area (region_x0=%d) is outside the image area (XOsiz=%d).\n",
+                      p_start_x, l_image->x0);
+        p_j2k->m_specific_param.m_decoder.m_start_tile_x = 0;
+        p_image->x0 = l_image->x0;
+    } else {
+        p_j2k->m_specific_param.m_decoder.m_start_tile_x = ((OPJ_UINT32)p_start_x -
+                l_cp->tx0) / l_cp->tdx;
+        p_image->x0 = (OPJ_UINT32)p_start_x;
+    }
+
+    /* Up */
+    if ((OPJ_UINT32)p_start_y > l_image->y1) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Up position of the decoded area (region_y0=%d) is outside the image area (Ysiz=%d).\n",
+                      p_start_y, l_image->y1);
+        return OPJ_FALSE;
+    } else if ((OPJ_UINT32)p_start_y < l_image->y0) {
+        opj_event_msg(p_manager, EVT_WARNING,
+                      "Up position of the decoded area (region_y0=%d) is outside the image area (YOsiz=%d).\n",
+                      p_start_y, l_image->y0);
+        p_j2k->m_specific_param.m_decoder.m_start_tile_y = 0;
+        p_image->y0 = l_image->y0;
+    } else {
+        p_j2k->m_specific_param.m_decoder.m_start_tile_y = ((OPJ_UINT32)p_start_y -
+                l_cp->ty0) / l_cp->tdy;
+        p_image->y0 = (OPJ_UINT32)p_start_y;
+    }
+
+    /* Right */
+    assert((OPJ_UINT32)p_end_x > 0);
+    assert((OPJ_UINT32)p_end_y > 0);
+    if ((OPJ_UINT32)p_end_x < l_image->x0) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Right position of the decoded area (region_x1=%d) is outside the image area (XOsiz=%d).\n",
+                      p_end_x, l_image->x0);
+        return OPJ_FALSE;
+    } else if ((OPJ_UINT32)p_end_x > l_image->x1) {
+        opj_event_msg(p_manager, EVT_WARNING,
+                      "Right position of the decoded area (region_x1=%d) is outside the image area (Xsiz=%d).\n",
+                      p_end_x, l_image->x1);
+        p_j2k->m_specific_param.m_decoder.m_end_tile_x = l_cp->tw;
+        p_image->x1 = l_image->x1;
+    } else {
+        p_j2k->m_specific_param.m_decoder.m_end_tile_x = (OPJ_UINT32)opj_int_ceildiv(
+                    p_end_x - (OPJ_INT32)l_cp->tx0, (OPJ_INT32)l_cp->tdx);
+        p_image->x1 = (OPJ_UINT32)p_end_x;
+    }
+
+    /* Bottom */
+    if ((OPJ_UINT32)p_end_y < l_image->y0) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Bottom position of the decoded area (region_y1=%d) is outside the image area (YOsiz=%d).\n",
+                      p_end_y, l_image->y0);
+        return OPJ_FALSE;
+    }
+    if ((OPJ_UINT32)p_end_y > l_image->y1) {
+        opj_event_msg(p_manager, EVT_WARNING,
+                      "Bottom position of the decoded area (region_y1=%d) is outside the image area (Ysiz=%d).\n",
+                      p_end_y, l_image->y1);
+        p_j2k->m_specific_param.m_decoder.m_end_tile_y = l_cp->th;
+        p_image->y1 = l_image->y1;
+    } else {
+        p_j2k->m_specific_param.m_decoder.m_end_tile_y = (OPJ_UINT32)opj_int_ceildiv(
+                    p_end_y - (OPJ_INT32)l_cp->ty0, (OPJ_INT32)l_cp->tdy);
+        p_image->y1 = (OPJ_UINT32)p_end_y;
+    }
+    /* ----- */
+
+    p_j2k->m_specific_param.m_decoder.m_discard_tiles = 1;
+
+    l_img_comp = p_image->comps;
+    for (it_comp = 0; it_comp < p_image->numcomps; ++it_comp) {
+        OPJ_INT32 l_h, l_w;
+
+        l_img_comp->x0 = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)p_image->x0,
+                         (OPJ_INT32)l_img_comp->dx);
+        l_img_comp->y0 = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)p_image->y0,
+                         (OPJ_INT32)l_img_comp->dy);
+        l_comp_x1 = opj_int_ceildiv((OPJ_INT32)p_image->x1, (OPJ_INT32)l_img_comp->dx);
+        l_comp_y1 = opj_int_ceildiv((OPJ_INT32)p_image->y1, (OPJ_INT32)l_img_comp->dy);
+
+        l_w = opj_int_ceildivpow2(l_comp_x1, (OPJ_INT32)l_img_comp->factor)
+              - opj_int_ceildivpow2((OPJ_INT32)l_img_comp->x0, (OPJ_INT32)l_img_comp->factor);
+        if (l_w < 0) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Size x of the decoded component image is incorrect (comp[%d].w=%d).\n",
+                          it_comp, l_w);
+            return OPJ_FALSE;
+        }
+        l_img_comp->w = (OPJ_UINT32)l_w;
+
+        l_h = opj_int_ceildivpow2(l_comp_y1, (OPJ_INT32)l_img_comp->factor)
+              - opj_int_ceildivpow2((OPJ_INT32)l_img_comp->y0, (OPJ_INT32)l_img_comp->factor);
+        if (l_h < 0) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Size y of the decoded component image is incorrect (comp[%d].h=%d).\n",
+                          it_comp, l_h);
+            return OPJ_FALSE;
+        }
+        l_img_comp->h = (OPJ_UINT32)l_h;
+
+        l_img_comp++;
+    }
+
+    opj_event_msg(p_manager, EVT_INFO, "Setting decoding area to %d,%d,%d,%d\n",
+                  p_image->x0, p_image->y0, p_image->x1, p_image->y1);
+
+    return OPJ_TRUE;
 }
 
 opj_j2k_t* opj_j2k_create_decompress(void)
 {
-        opj_j2k_t *l_j2k = (opj_j2k_t*) opj_calloc(1,sizeof(opj_j2k_t));
-        if (!l_j2k) {
-                return 00;
-        }
+    opj_j2k_t *l_j2k = (opj_j2k_t*) opj_calloc(1, sizeof(opj_j2k_t));
+    if (!l_j2k) {
+        return 00;
+    }
 
-        l_j2k->m_is_decoder = 1;
-        l_j2k->m_cp.m_is_decoder = 1;
+    l_j2k->m_is_decoder = 1;
+    l_j2k->m_cp.m_is_decoder = 1;
 
 #ifdef OPJ_DISABLE_TPSOT_FIX
-        l_j2k->m_specific_param.m_decoder.m_nb_tile_parts_correction_checked = 1;
+    l_j2k->m_specific_param.m_decoder.m_nb_tile_parts_correction_checked = 1;
 #endif
 
-        l_j2k->m_specific_param.m_decoder.m_default_tcp = (opj_tcp_t*) opj_calloc(1,sizeof(opj_tcp_t));
-        if (!l_j2k->m_specific_param.m_decoder.m_default_tcp) {
-                opj_j2k_destroy(l_j2k);
-                return 00;
-        }
+    l_j2k->m_specific_param.m_decoder.m_default_tcp = (opj_tcp_t*) opj_calloc(1,
+            sizeof(opj_tcp_t));
+    if (!l_j2k->m_specific_param.m_decoder.m_default_tcp) {
+        opj_j2k_destroy(l_j2k);
+        return 00;
+    }
 
-        l_j2k->m_specific_param.m_decoder.m_header_data = (OPJ_BYTE *) opj_calloc(1,OPJ_J2K_DEFAULT_HEADER_SIZE);
-        if (! l_j2k->m_specific_param.m_decoder.m_header_data) {
-                opj_j2k_destroy(l_j2k);
-                return 00;
-        }
+    l_j2k->m_specific_param.m_decoder.m_header_data = (OPJ_BYTE *) opj_calloc(1,
+            OPJ_J2K_DEFAULT_HEADER_SIZE);
+    if (! l_j2k->m_specific_param.m_decoder.m_header_data) {
+        opj_j2k_destroy(l_j2k);
+        return 00;
+    }
 
-        l_j2k->m_specific_param.m_decoder.m_header_data_size = OPJ_J2K_DEFAULT_HEADER_SIZE;
+    l_j2k->m_specific_param.m_decoder.m_header_data_size =
+        OPJ_J2K_DEFAULT_HEADER_SIZE;
 
-        l_j2k->m_specific_param.m_decoder.m_tile_ind_to_dec = -1 ;
+    l_j2k->m_specific_param.m_decoder.m_tile_ind_to_dec = -1 ;
 
-        l_j2k->m_specific_param.m_decoder.m_last_sot_read_pos = 0 ;
+    l_j2k->m_specific_param.m_decoder.m_last_sot_read_pos = 0 ;
 
-        /* codestream index creation */
-        l_j2k->cstr_index = opj_j2k_create_cstr_index();
-        if (!l_j2k->cstr_index){
-                opj_j2k_destroy(l_j2k);
-                return 00;
-        }
+    /* codestream index creation */
+    l_j2k->cstr_index = opj_j2k_create_cstr_index();
+    if (!l_j2k->cstr_index) {
+        opj_j2k_destroy(l_j2k);
+        return 00;
+    }
 
-        /* validation list creation */
-        l_j2k->m_validation_list = opj_procedure_list_create();
-        if (! l_j2k->m_validation_list) {
-                opj_j2k_destroy(l_j2k);
-                return 00;
-        }
+    /* validation list creation */
+    l_j2k->m_validation_list = opj_procedure_list_create();
+    if (! l_j2k->m_validation_list) {
+        opj_j2k_destroy(l_j2k);
+        return 00;
+    }
+
+    /* execution list creation */
+    l_j2k->m_procedure_list = opj_procedure_list_create();
+    if (! l_j2k->m_procedure_list) {
+        opj_j2k_destroy(l_j2k);
+        return 00;
+    }
+
+    l_j2k->m_tp = opj_thread_pool_create(opj_j2k_get_default_thread_count());
+    if (!l_j2k->m_tp) {
+        l_j2k->m_tp = opj_thread_pool_create(0);
+    }
+    if (!l_j2k->m_tp) {
+        opj_j2k_destroy(l_j2k);
+        return NULL;
+    }
+
+    return l_j2k;
+}
+
+static opj_codestream_index_t* opj_j2k_create_cstr_index(void)
+{
+    opj_codestream_index_t* cstr_index = (opj_codestream_index_t*)
+                                         opj_calloc(1, sizeof(opj_codestream_index_t));
+    if (!cstr_index) {
+        return NULL;
+    }
 
-        /* execution list creation */
-        l_j2k->m_procedure_list = opj_procedure_list_create();
-        if (! l_j2k->m_procedure_list) {
-                opj_j2k_destroy(l_j2k);
-                return 00;
+    cstr_index->maxmarknum = 100;
+    cstr_index->marknum = 0;
+    cstr_index->marker = (opj_marker_info_t*)
+                         opj_calloc(cstr_index->maxmarknum, sizeof(opj_marker_info_t));
+    if (!cstr_index-> marker) {
+        opj_free(cstr_index);
+        return NULL;
+    }
+
+    cstr_index->tile_index = NULL;
+
+    return cstr_index;
+}
+
+static OPJ_UINT32 opj_j2k_get_SPCod_SPCoc_size(opj_j2k_t *p_j2k,
+        OPJ_UINT32 p_tile_no,
+        OPJ_UINT32 p_comp_no)
+{
+    opj_cp_t *l_cp = 00;
+    opj_tcp_t *l_tcp = 00;
+    opj_tccp_t *l_tccp = 00;
+
+    /* preconditions */
+    assert(p_j2k != 00);
+
+    l_cp = &(p_j2k->m_cp);
+    l_tcp = &l_cp->tcps[p_tile_no];
+    l_tccp = &l_tcp->tccps[p_comp_no];
+
+    /* preconditions again */
+    assert(p_tile_no < (l_cp->tw * l_cp->th));
+    assert(p_comp_no < p_j2k->m_private_image->numcomps);
+
+    if (l_tccp->csty & J2K_CCP_CSTY_PRT) {
+        return 5 + l_tccp->numresolutions;
+    } else {
+        return 5;
+    }
+}
+
+static OPJ_BOOL opj_j2k_compare_SPCod_SPCoc(opj_j2k_t *p_j2k,
+        OPJ_UINT32 p_tile_no, OPJ_UINT32 p_first_comp_no, OPJ_UINT32 p_second_comp_no)
+{
+    OPJ_UINT32 i;
+    opj_cp_t *l_cp = NULL;
+    opj_tcp_t *l_tcp = NULL;
+    opj_tccp_t *l_tccp0 = NULL;
+    opj_tccp_t *l_tccp1 = NULL;
+
+    /* preconditions */
+    assert(p_j2k != 00);
+
+    l_cp = &(p_j2k->m_cp);
+    l_tcp = &l_cp->tcps[p_tile_no];
+    l_tccp0 = &l_tcp->tccps[p_first_comp_no];
+    l_tccp1 = &l_tcp->tccps[p_second_comp_no];
+
+    if (l_tccp0->numresolutions != l_tccp1->numresolutions) {
+        return OPJ_FALSE;
+    }
+    if (l_tccp0->cblkw != l_tccp1->cblkw) {
+        return OPJ_FALSE;
+    }
+    if (l_tccp0->cblkh != l_tccp1->cblkh) {
+        return OPJ_FALSE;
+    }
+    if (l_tccp0->cblksty != l_tccp1->cblksty) {
+        return OPJ_FALSE;
+    }
+    if (l_tccp0->qmfbid != l_tccp1->qmfbid) {
+        return OPJ_FALSE;
+    }
+    if ((l_tccp0->csty & J2K_CCP_CSTY_PRT) != (l_tccp1->csty & J2K_CCP_CSTY_PRT)) {
+        return OPJ_FALSE;
+    }
+
+    for (i = 0U; i < l_tccp0->numresolutions; ++i) {
+        if (l_tccp0->prcw[i] != l_tccp1->prcw[i]) {
+            return OPJ_FALSE;
         }
+        if (l_tccp0->prch[i] != l_tccp1->prch[i]) {
+            return OPJ_FALSE;
+        }
+    }
+    return OPJ_TRUE;
+}
+
+static OPJ_BOOL opj_j2k_write_SPCod_SPCoc(opj_j2k_t *p_j2k,
+        OPJ_UINT32 p_tile_no,
+        OPJ_UINT32 p_comp_no,
+        OPJ_BYTE * p_data,
+        OPJ_UINT32 * p_header_size,
+        struct opj_event_mgr * p_manager)
+{
+    OPJ_UINT32 i;
+    opj_cp_t *l_cp = 00;
+    opj_tcp_t *l_tcp = 00;
+    opj_tccp_t *l_tccp = 00;
+
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_header_size != 00);
+    assert(p_manager != 00);
+    assert(p_data != 00);
+
+    l_cp = &(p_j2k->m_cp);
+    l_tcp = &l_cp->tcps[p_tile_no];
+    l_tccp = &l_tcp->tccps[p_comp_no];
+
+    /* preconditions again */
+    assert(p_tile_no < (l_cp->tw * l_cp->th));
+    assert(p_comp_no < (p_j2k->m_private_image->numcomps));
+
+    if (*p_header_size < 5) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error writing SPCod SPCoc element\n");
+        return OPJ_FALSE;
+    }
+
+    opj_write_bytes(p_data, l_tccp->numresolutions - 1, 1); /* SPcoc (D) */
+    ++p_data;
+
+    opj_write_bytes(p_data, l_tccp->cblkw - 2, 1);                  /* SPcoc (E) */
+    ++p_data;
+
+    opj_write_bytes(p_data, l_tccp->cblkh - 2, 1);                  /* SPcoc (F) */
+    ++p_data;
+
+    opj_write_bytes(p_data, l_tccp->cblksty,
+                    1);                            /* SPcoc (G) */
+    ++p_data;
 
-        l_j2k->m_tp = opj_thread_pool_create(opj_j2k_get_default_thread_count());
-        if( !l_j2k->m_tp )
-        {
-            l_j2k->m_tp = opj_thread_pool_create(0);
+    opj_write_bytes(p_data, l_tccp->qmfbid,
+                    1);                             /* SPcoc (H) */
+    ++p_data;
+
+    *p_header_size = *p_header_size - 5;
+
+    if (l_tccp->csty & J2K_CCP_CSTY_PRT) {
+
+        if (*p_header_size < l_tccp->numresolutions) {
+            opj_event_msg(p_manager, EVT_ERROR, "Error writing SPCod SPCoc element\n");
+            return OPJ_FALSE;
         }
-        if( !l_j2k->m_tp )
-        {
-            opj_j2k_destroy(l_j2k);
-            return NULL;
+
+        for (i = 0; i < l_tccp->numresolutions; ++i) {
+            opj_write_bytes(p_data, l_tccp->prcw[i] + (l_tccp->prch[i] << 4),
+                            1);   /* SPcoc (I_i) */
+            ++p_data;
         }
 
-        return l_j2k;
+        *p_header_size = *p_header_size - l_tccp->numresolutions;
+    }
+
+    return OPJ_TRUE;
 }
 
-static opj_codestream_index_t* opj_j2k_create_cstr_index(void)
+static OPJ_BOOL opj_j2k_read_SPCod_SPCoc(opj_j2k_t *p_j2k,
+        OPJ_UINT32 compno,
+        OPJ_BYTE * p_header_data,
+        OPJ_UINT32 * p_header_size,
+        opj_event_mgr_t * p_manager)
 {
-        opj_codestream_index_t* cstr_index = (opj_codestream_index_t*)
-                        opj_calloc(1,sizeof(opj_codestream_index_t));
-        if (!cstr_index)
-                return NULL;
+    OPJ_UINT32 i, l_tmp;
+    opj_cp_t *l_cp = NULL;
+    opj_tcp_t *l_tcp = NULL;
+    opj_tccp_t *l_tccp = NULL;
+    OPJ_BYTE * l_current_ptr = NULL;
 
-        cstr_index->maxmarknum = 100;
-        cstr_index->marknum = 0;
-        cstr_index->marker = (opj_marker_info_t*)
-                        opj_calloc(cstr_index->maxmarknum, sizeof(opj_marker_info_t));
-        if (!cstr_index-> marker) {
-                opj_free(cstr_index);
-                return NULL;
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_header_data != 00);
+
+    l_cp = &(p_j2k->m_cp);
+    l_tcp = (p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_TPH) ?
+            &l_cp->tcps[p_j2k->m_current_tile_number] :
+            p_j2k->m_specific_param.m_decoder.m_default_tcp;
+
+    /* precondition again */
+    assert(compno < p_j2k->m_private_image->numcomps);
+
+    l_tccp = &l_tcp->tccps[compno];
+    l_current_ptr = p_header_data;
+
+    /* make sure room is sufficient */
+    if (*p_header_size < 5) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading SPCod SPCoc element\n");
+        return OPJ_FALSE;
+    }
+
+    opj_read_bytes(l_current_ptr, &l_tccp->numresolutions,
+                   1);              /* SPcox (D) */
+    ++l_tccp->numresolutions;                                                                               /* tccp->numresolutions = read() + 1 */
+    if (l_tccp->numresolutions > OPJ_J2K_MAXRLVLS) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Invalid value for numresolutions : %d, max value is set in openjpeg.h at %d\n",
+                      l_tccp->numresolutions, OPJ_J2K_MAXRLVLS);
+        return OPJ_FALSE;
+    }
+    ++l_current_ptr;
+
+    /* If user wants to remove more resolutions than the codestream contains, return error */
+    if (l_cp->m_specific_param.m_dec.m_reduce >= l_tccp->numresolutions) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Error decoding component %d.\nThe number of resolutions to remove is higher than the number "
+                      "of resolutions of this component\nModify the cp_reduce parameter.\n\n",
+                      compno);
+        p_j2k->m_specific_param.m_decoder.m_state |=
+            0x8000;/* FIXME J2K_DEC_STATE_ERR;*/
+        return OPJ_FALSE;
+    }
+
+    opj_read_bytes(l_current_ptr, &l_tccp->cblkw, 1);               /* SPcoc (E) */
+    ++l_current_ptr;
+    l_tccp->cblkw += 2;
+
+    opj_read_bytes(l_current_ptr, &l_tccp->cblkh, 1);               /* SPcoc (F) */
+    ++l_current_ptr;
+    l_tccp->cblkh += 2;
+
+    if ((l_tccp->cblkw > 10) || (l_tccp->cblkh > 10) ||
+            ((l_tccp->cblkw + l_tccp->cblkh) > 12)) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Error reading SPCod SPCoc element, Invalid cblkw/cblkh combination\n");
+        return OPJ_FALSE;
+    }
+
+
+    opj_read_bytes(l_current_ptr, &l_tccp->cblksty, 1);             /* SPcoc (G) */
+    ++l_current_ptr;
+    if (l_tccp->cblksty & 0xC0U) { /* 2 msb are reserved, assume we can't read */
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Error reading SPCod SPCoc element, Invalid code-block style found\n");
+        return OPJ_FALSE;
+    }
+
+    opj_read_bytes(l_current_ptr, &l_tccp->qmfbid, 1);              /* SPcoc (H) */
+    ++l_current_ptr;
+
+    *p_header_size = *p_header_size - 5;
+
+    /* use custom precinct size ? */
+    if (l_tccp->csty & J2K_CCP_CSTY_PRT) {
+        if (*p_header_size < l_tccp->numresolutions) {
+            opj_event_msg(p_manager, EVT_ERROR, "Error reading SPCod SPCoc element\n");
+            return OPJ_FALSE;
         }
 
-        cstr_index->tile_index = NULL;
-
-        return cstr_index;
-}
-
-static OPJ_UINT32 opj_j2k_get_SPCod_SPCoc_size (       opj_j2k_t *p_j2k,
-                                                                                OPJ_UINT32 p_tile_no,
-                                                                                OPJ_UINT32 p_comp_no )
-{
-        opj_cp_t *l_cp = 00;
-        opj_tcp_t *l_tcp = 00;
-        opj_tccp_t *l_tccp = 00;
-
-        /* preconditions */
-        assert(p_j2k != 00);
-
-        l_cp = &(p_j2k->m_cp);
-        l_tcp = &l_cp->tcps[p_tile_no];
-        l_tccp = &l_tcp->tccps[p_comp_no];
-
-        /* preconditions again */
-        assert(p_tile_no < (l_cp->tw * l_cp->th));
-        assert(p_comp_no < p_j2k->m_private_image->numcomps);
-
-        if (l_tccp->csty & J2K_CCP_CSTY_PRT) {
-                return 5 + l_tccp->numresolutions;
-        }
-        else {
-                return 5;
-        }
-}
-
-static OPJ_BOOL opj_j2k_compare_SPCod_SPCoc(opj_j2k_t *p_j2k, OPJ_UINT32 p_tile_no, OPJ_UINT32 p_first_comp_no, OPJ_UINT32 p_second_comp_no)
-{
-       OPJ_UINT32 i;
-       opj_cp_t *l_cp = NULL;
-       opj_tcp_t *l_tcp = NULL;
-       opj_tccp_t *l_tccp0 = NULL;
-       opj_tccp_t *l_tccp1 = NULL;
-       
-       /* preconditions */
-       assert(p_j2k != 00);
-       
-       l_cp = &(p_j2k->m_cp);
-       l_tcp = &l_cp->tcps[p_tile_no];
-       l_tccp0 = &l_tcp->tccps[p_first_comp_no];
-       l_tccp1 = &l_tcp->tccps[p_second_comp_no];
-       
-       if (l_tccp0->numresolutions != l_tccp1->numresolutions) {
-               return OPJ_FALSE;
-       }
-       if (l_tccp0->cblkw != l_tccp1->cblkw) {
-               return OPJ_FALSE;
-       }
-       if (l_tccp0->cblkh != l_tccp1->cblkh) {
-               return OPJ_FALSE;
-       }
-       if (l_tccp0->cblksty != l_tccp1->cblksty) {
-               return OPJ_FALSE;
-       }
-       if (l_tccp0->qmfbid != l_tccp1->qmfbid) {
-               return OPJ_FALSE;
-       }
-       if ((l_tccp0->csty & J2K_CCP_CSTY_PRT) != (l_tccp1->csty & J2K_CCP_CSTY_PRT)) {
-               return OPJ_FALSE;
-       }
-       
-       for (i = 0U; i < l_tccp0->numresolutions; ++i) {
-               if (l_tccp0->prcw[i] != l_tccp1->prcw[i]) {
-                       return OPJ_FALSE;
-               }
-               if (l_tccp0->prch[i] != l_tccp1->prch[i]) {
-                       return OPJ_FALSE;
-               }
-       }
-       return OPJ_TRUE;
-}
-
-static OPJ_BOOL opj_j2k_write_SPCod_SPCoc(     opj_j2k_t *p_j2k,
-                                                                    OPJ_UINT32 p_tile_no,
-                                                                    OPJ_UINT32 p_comp_no,
-                                                                    OPJ_BYTE * p_data,
-                                                                    OPJ_UINT32 * p_header_size,
-                                                                    struct opj_event_mgr * p_manager )
-{
-        OPJ_UINT32 i;
-        opj_cp_t *l_cp = 00;
-        opj_tcp_t *l_tcp = 00;
-        opj_tccp_t *l_tccp = 00;
-
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_header_size != 00);
-        assert(p_manager != 00);
-        assert(p_data != 00);
-
-        l_cp = &(p_j2k->m_cp);
-        l_tcp = &l_cp->tcps[p_tile_no];
-        l_tccp = &l_tcp->tccps[p_comp_no];
-
-        /* preconditions again */
-        assert(p_tile_no < (l_cp->tw * l_cp->th));
-        assert(p_comp_no <(p_j2k->m_private_image->numcomps));
-
-        if (*p_header_size < 5) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error writing SPCod SPCoc element\n");
+        for (i = 0; i < l_tccp->numresolutions; ++i) {
+            opj_read_bytes(l_current_ptr, &l_tmp, 1);               /* SPcoc (I_i) */
+            ++l_current_ptr;
+            /* Precinct exponent 0 is only allowed for lowest resolution level (Table A.21) */
+            if ((i != 0) && (((l_tmp & 0xf) == 0) || ((l_tmp >> 4) == 0))) {
+                opj_event_msg(p_manager, EVT_ERROR, "Invalid precinct size\n");
                 return OPJ_FALSE;
+            }
+            l_tccp->prcw[i] = l_tmp & 0xf;
+            l_tccp->prch[i] = l_tmp >> 4;
         }
 
-        opj_write_bytes(p_data,l_tccp->numresolutions - 1, 1);  /* SPcoc (D) */
-        ++p_data;
+        *p_header_size = *p_header_size - l_tccp->numresolutions;
+    } else {
+        /* set default size for the precinct width and height */
+        for (i = 0; i < l_tccp->numresolutions; ++i) {
+            l_tccp->prcw[i] = 15;
+            l_tccp->prch[i] = 15;
+        }
+    }
 
-        opj_write_bytes(p_data,l_tccp->cblkw - 2, 1);                   /* SPcoc (E) */
-        ++p_data;
+#ifdef WIP_REMOVE_MSD
+    /* INDEX >> */
+    if (p_j2k->cstr_info && compno == 0) {
+        OPJ_UINT32 l_data_size = l_tccp->numresolutions * sizeof(OPJ_UINT32);
+
+        p_j2k->cstr_info->tile[p_j2k->m_current_tile_number].tccp_info[compno].cblkh =
+            l_tccp->cblkh;
+        p_j2k->cstr_info->tile[p_j2k->m_current_tile_number].tccp_info[compno].cblkw =
+            l_tccp->cblkw;
+        p_j2k->cstr_info->tile[p_j2k->m_current_tile_number].tccp_info[compno].numresolutions
+            = l_tccp->numresolutions;
+        p_j2k->cstr_info->tile[p_j2k->m_current_tile_number].tccp_info[compno].cblksty =
+            l_tccp->cblksty;
+        p_j2k->cstr_info->tile[p_j2k->m_current_tile_number].tccp_info[compno].qmfbid =
+            l_tccp->qmfbid;
+
+        memcpy(p_j2k->cstr_info->tile[p_j2k->m_current_tile_number].pdx, l_tccp->prcw,
+               l_data_size);
+        memcpy(p_j2k->cstr_info->tile[p_j2k->m_current_tile_number].pdy, l_tccp->prch,
+               l_data_size);
+    }
+    /* << INDEX */
+#endif
 
-        opj_write_bytes(p_data,l_tccp->cblkh - 2, 1);                   /* SPcoc (F) */
-        ++p_data;
+    return OPJ_TRUE;
+}
 
-        opj_write_bytes(p_data,l_tccp->cblksty, 1);                             /* SPcoc (G) */
-        ++p_data;
+static void opj_j2k_copy_tile_component_parameters(opj_j2k_t *p_j2k)
+{
+    /* loop */
+    OPJ_UINT32 i;
+    opj_cp_t *l_cp = NULL;
+    opj_tcp_t *l_tcp = NULL;
+    opj_tccp_t *l_ref_tccp = NULL, *l_copied_tccp = NULL;
+    OPJ_UINT32 l_prc_size;
+
+    /* preconditions */
+    assert(p_j2k != 00);
+
+    l_cp = &(p_j2k->m_cp);
+    l_tcp = (p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_TPH)
+            ? /* FIXME J2K_DEC_STATE_TPH*/
+            &l_cp->tcps[p_j2k->m_current_tile_number] :
+            p_j2k->m_specific_param.m_decoder.m_default_tcp;
+
+    l_ref_tccp = &l_tcp->tccps[0];
+    l_copied_tccp = l_ref_tccp + 1;
+    l_prc_size = l_ref_tccp->numresolutions * (OPJ_UINT32)sizeof(OPJ_UINT32);
+
+    for (i = 1; i < p_j2k->m_private_image->numcomps; ++i) {
+        l_copied_tccp->numresolutions = l_ref_tccp->numresolutions;
+        l_copied_tccp->cblkw = l_ref_tccp->cblkw;
+        l_copied_tccp->cblkh = l_ref_tccp->cblkh;
+        l_copied_tccp->cblksty = l_ref_tccp->cblksty;
+        l_copied_tccp->qmfbid = l_ref_tccp->qmfbid;
+        memcpy(l_copied_tccp->prcw, l_ref_tccp->prcw, l_prc_size);
+        memcpy(l_copied_tccp->prch, l_ref_tccp->prch, l_prc_size);
+        ++l_copied_tccp;
+    }
+}
 
-        opj_write_bytes(p_data,l_tccp->qmfbid, 1);                              /* SPcoc (H) */
-        ++p_data;
+static OPJ_UINT32 opj_j2k_get_SQcd_SQcc_size(opj_j2k_t *p_j2k,
+        OPJ_UINT32 p_tile_no,
+        OPJ_UINT32 p_comp_no)
+{
+    OPJ_UINT32 l_num_bands;
 
-        *p_header_size = *p_header_size - 5;
+    opj_cp_t *l_cp = 00;
+    opj_tcp_t *l_tcp = 00;
+    opj_tccp_t *l_tccp = 00;
 
-        if (l_tccp->csty & J2K_CCP_CSTY_PRT) {
+    /* preconditions */
+    assert(p_j2k != 00);
 
-                if (*p_header_size < l_tccp->numresolutions) {
-                        opj_event_msg(p_manager, EVT_ERROR, "Error writing SPCod SPCoc element\n");
-                        return OPJ_FALSE;
-                }
+    l_cp = &(p_j2k->m_cp);
+    l_tcp = &l_cp->tcps[p_tile_no];
+    l_tccp = &l_tcp->tccps[p_comp_no];
 
-                for (i = 0; i < l_tccp->numresolutions; ++i) {
-                        opj_write_bytes(p_data,l_tccp->prcw[i] + (l_tccp->prch[i] << 4), 1);    /* SPcoc (I_i) */
-                        ++p_data;
-                }
+    /* preconditions again */
+    assert(p_tile_no < l_cp->tw * l_cp->th);
+    assert(p_comp_no < p_j2k->m_private_image->numcomps);
 
-                *p_header_size = *p_header_size - l_tccp->numresolutions;
-        }
+    l_num_bands = (l_tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) ? 1 :
+                  (l_tccp->numresolutions * 3 - 2);
 
-        return OPJ_TRUE;
+    if (l_tccp->qntsty == J2K_CCP_QNTSTY_NOQNT)  {
+        return 1 + l_num_bands;
+    } else {
+        return 1 + 2 * l_num_bands;
+    }
 }
 
-static OPJ_BOOL opj_j2k_read_SPCod_SPCoc(  opj_j2k_t *p_j2k,
-                                                                OPJ_UINT32 compno,
-                                                                OPJ_BYTE * p_header_data,
-                                                                OPJ_UINT32 * p_header_size,
-                                                                opj_event_mgr_t * p_manager)
+static OPJ_BOOL opj_j2k_compare_SQcd_SQcc(opj_j2k_t *p_j2k,
+        OPJ_UINT32 p_tile_no, OPJ_UINT32 p_first_comp_no, OPJ_UINT32 p_second_comp_no)
 {
-        OPJ_UINT32 i, l_tmp;
-        opj_cp_t *l_cp = NULL;
-        opj_tcp_t *l_tcp = NULL;
-        opj_tccp_t *l_tccp = NULL;
-        OPJ_BYTE * l_current_ptr = NULL;
-
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_header_data != 00);
+    opj_cp_t *l_cp = NULL;
+    opj_tcp_t *l_tcp = NULL;
+    opj_tccp_t *l_tccp0 = NULL;
+    opj_tccp_t *l_tccp1 = NULL;
+    OPJ_UINT32 l_band_no, l_num_bands;
 
-        l_cp = &(p_j2k->m_cp);
-        l_tcp = (p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_TPH) ?
-                                &l_cp->tcps[p_j2k->m_current_tile_number] :
-                                p_j2k->m_specific_param.m_decoder.m_default_tcp;
+    /* preconditions */
+    assert(p_j2k != 00);
 
-        /* precondition again */
-        assert(compno < p_j2k->m_private_image->numcomps);
+    l_cp = &(p_j2k->m_cp);
+    l_tcp = &l_cp->tcps[p_tile_no];
+    l_tccp0 = &l_tcp->tccps[p_first_comp_no];
+    l_tccp1 = &l_tcp->tccps[p_second_comp_no];
 
-        l_tccp = &l_tcp->tccps[compno];
-        l_current_ptr = p_header_data;
-
-        /* make sure room is sufficient */
-        if (*p_header_size < 5) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading SPCod SPCoc element\n");
-                return OPJ_FALSE;
+    if (l_tccp0->qntsty != l_tccp1->qntsty) {
+        return OPJ_FALSE;
+    }
+    if (l_tccp0->numgbits != l_tccp1->numgbits) {
+        return OPJ_FALSE;
+    }
+    if (l_tccp0->qntsty == J2K_CCP_QNTSTY_SIQNT) {
+        l_num_bands = 1U;
+    } else {
+        l_num_bands = l_tccp0->numresolutions * 3U - 2U;
+        if (l_num_bands != (l_tccp1->numresolutions * 3U - 2U)) {
+            return OPJ_FALSE;
         }
+    }
 
-        opj_read_bytes(l_current_ptr, &l_tccp->numresolutions ,1);              /* SPcox (D) */
-        ++l_tccp->numresolutions;                                                                               /* tccp->numresolutions = read() + 1 */
-        if (l_tccp->numresolutions > OPJ_J2K_MAXRLVLS) {
-                opj_event_msg(p_manager, EVT_ERROR,
-                              "Invalid value for numresolutions : %d, max value is set in openjpeg.h at %d\n",
-                              l_tccp->numresolutions, OPJ_J2K_MAXRLVLS);
-                return OPJ_FALSE;
+    for (l_band_no = 0; l_band_no < l_num_bands; ++l_band_no) {
+        if (l_tccp0->stepsizes[l_band_no].expn != l_tccp1->stepsizes[l_band_no].expn) {
+            return OPJ_FALSE;
         }
-        ++l_current_ptr;
-
-        /* If user wants to remove more resolutions than the codestream contains, return error */
-        if (l_cp->m_specific_param.m_dec.m_reduce >= l_tccp->numresolutions) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error decoding component %d.\nThe number of resolutions to remove is higher than the number "
-                                        "of resolutions of this component\nModify the cp_reduce parameter.\n\n", compno);
-                p_j2k->m_specific_param.m_decoder.m_state |= 0x8000;/* FIXME J2K_DEC_STATE_ERR;*/
+    }
+    if (l_tccp0->qntsty != J2K_CCP_QNTSTY_NOQNT) {
+        for (l_band_no = 0; l_band_no < l_num_bands; ++l_band_no) {
+            if (l_tccp0->stepsizes[l_band_no].mant != l_tccp1->stepsizes[l_band_no].mant) {
                 return OPJ_FALSE;
+            }
         }
+    }
+    return OPJ_TRUE;
+}
 
-        opj_read_bytes(l_current_ptr,&l_tccp->cblkw ,1);                /* SPcoc (E) */
-        ++l_current_ptr;
-        l_tccp->cblkw += 2;
 
-        opj_read_bytes(l_current_ptr,&l_tccp->cblkh ,1);                /* SPcoc (F) */
-        ++l_current_ptr;
-        l_tccp->cblkh += 2;
+static OPJ_BOOL opj_j2k_write_SQcd_SQcc(opj_j2k_t *p_j2k,
+                                        OPJ_UINT32 p_tile_no,
+                                        OPJ_UINT32 p_comp_no,
+                                        OPJ_BYTE * p_data,
+                                        OPJ_UINT32 * p_header_size,
+                                        struct opj_event_mgr * p_manager)
+{
+    OPJ_UINT32 l_header_size;
+    OPJ_UINT32 l_band_no, l_num_bands;
+    OPJ_UINT32 l_expn, l_mant;
 
-        if ((l_tccp->cblkw > 10) || (l_tccp->cblkh > 10) || ((l_tccp->cblkw + l_tccp->cblkh) > 12)) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading SPCod SPCoc element, Invalid cblkw/cblkh combination\n");
-                return OPJ_FALSE;
-        }
-       
+    opj_cp_t *l_cp = 00;
+    opj_tcp_t *l_tcp = 00;
+    opj_tccp_t *l_tccp = 00;
 
-        opj_read_bytes(l_current_ptr,&l_tccp->cblksty ,1);              /* SPcoc (G) */
-        ++l_current_ptr;
-        if (l_tccp->cblksty & 0xC0U) { /* 2 msb are reserved, assume we can't read */
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading SPCod SPCoc element, Invalid code-block style found\n");
-                return OPJ_FALSE;
-        }
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_header_size != 00);
+    assert(p_manager != 00);
+    assert(p_data != 00);
 
-        opj_read_bytes(l_current_ptr,&l_tccp->qmfbid ,1);               /* SPcoc (H) */
-        ++l_current_ptr;
+    l_cp = &(p_j2k->m_cp);
+    l_tcp = &l_cp->tcps[p_tile_no];
+    l_tccp = &l_tcp->tccps[p_comp_no];
 
-        *p_header_size = *p_header_size - 5;
+    /* preconditions again */
+    assert(p_tile_no < l_cp->tw * l_cp->th);
+    assert(p_comp_no < p_j2k->m_private_image->numcomps);
 
-        /* use custom precinct size ? */
-        if (l_tccp->csty & J2K_CCP_CSTY_PRT) {
-                if (*p_header_size < l_tccp->numresolutions) {
-                        opj_event_msg(p_manager, EVT_ERROR, "Error reading SPCod SPCoc element\n");
-                        return OPJ_FALSE;
-                }
+    l_num_bands = (l_tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) ? 1 :
+                  (l_tccp->numresolutions * 3 - 2);
 
-                for     (i = 0; i < l_tccp->numresolutions; ++i) {
-                        opj_read_bytes(l_current_ptr,&l_tmp ,1);                /* SPcoc (I_i) */
-                        ++l_current_ptr;
-                        /* Precinct exponent 0 is only allowed for lowest resolution level (Table A.21) */
-                        if ((i != 0) && (((l_tmp & 0xf) == 0) || ((l_tmp >> 4) == 0))) {
-                                opj_event_msg(p_manager, EVT_ERROR, "Invalid precinct size\n");
-                                return OPJ_FALSE;
-                        }
-                        l_tccp->prcw[i] = l_tmp & 0xf;
-                        l_tccp->prch[i] = l_tmp >> 4;
-                }
+    if (l_tccp->qntsty == J2K_CCP_QNTSTY_NOQNT)  {
+        l_header_size = 1 + l_num_bands;
 
-                *p_header_size = *p_header_size - l_tccp->numresolutions;
-        }
-        else {
-                /* set default size for the precinct width and height */
-                for     (i = 0; i < l_tccp->numresolutions; ++i) {
-                        l_tccp->prcw[i] = 15;
-                        l_tccp->prch[i] = 15;
-                }
+        if (*p_header_size < l_header_size) {
+            opj_event_msg(p_manager, EVT_ERROR, "Error writing SQcd SQcc element\n");
+            return OPJ_FALSE;
         }
 
-#ifdef WIP_REMOVE_MSD
-        /* INDEX >> */
-        if (p_j2k->cstr_info && compno == 0) {
-                OPJ_UINT32 l_data_size = l_tccp->numresolutions * sizeof(OPJ_UINT32);
-
-                p_j2k->cstr_info->tile[p_j2k->m_current_tile_number].tccp_info[compno].cblkh = l_tccp->cblkh;
-                p_j2k->cstr_info->tile[p_j2k->m_current_tile_number].tccp_info[compno].cblkw = l_tccp->cblkw;
-                p_j2k->cstr_info->tile[p_j2k->m_current_tile_number].tccp_info[compno].numresolutions = l_tccp->numresolutions;
-                p_j2k->cstr_info->tile[p_j2k->m_current_tile_number].tccp_info[compno].cblksty = l_tccp->cblksty;
-                p_j2k->cstr_info->tile[p_j2k->m_current_tile_number].tccp_info[compno].qmfbid = l_tccp->qmfbid;
+        opj_write_bytes(p_data, l_tccp->qntsty + (l_tccp->numgbits << 5),
+                        1);   /* Sqcx */
+        ++p_data;
 
-                memcpy(p_j2k->cstr_info->tile[p_j2k->m_current_tile_number].pdx,l_tccp->prcw, l_data_size);
-                memcpy(p_j2k->cstr_info->tile[p_j2k->m_current_tile_number].pdy,l_tccp->prch, l_data_size);
+        for (l_band_no = 0; l_band_no < l_num_bands; ++l_band_no) {
+            l_expn = (OPJ_UINT32)l_tccp->stepsizes[l_band_no].expn;
+            opj_write_bytes(p_data, l_expn << 3, 1);        /* SPqcx_i */
+            ++p_data;
         }
-        /* << INDEX */
-#endif
-
-        return OPJ_TRUE;
-}
-
-static void opj_j2k_copy_tile_component_parameters( opj_j2k_t *p_j2k )
-{
-        /* loop */
-        OPJ_UINT32 i;
-        opj_cp_t *l_cp = NULL;
-        opj_tcp_t *l_tcp = NULL;
-        opj_tccp_t *l_ref_tccp = NULL, *l_copied_tccp = NULL;
-        OPJ_UINT32 l_prc_size;
-
-        /* preconditions */
-        assert(p_j2k != 00);
-
-        l_cp = &(p_j2k->m_cp);
-        l_tcp = (p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_TPH) ? /* FIXME J2K_DEC_STATE_TPH*/
-                                &l_cp->tcps[p_j2k->m_current_tile_number] :
-                                p_j2k->m_specific_param.m_decoder.m_default_tcp;
-
-        l_ref_tccp = &l_tcp->tccps[0];
-        l_copied_tccp = l_ref_tccp + 1;
-        l_prc_size = l_ref_tccp->numresolutions * (OPJ_UINT32)sizeof(OPJ_UINT32);
-
-        for     (i=1; i<p_j2k->m_private_image->numcomps; ++i) {
-                l_copied_tccp->numresolutions = l_ref_tccp->numresolutions;
-                l_copied_tccp->cblkw = l_ref_tccp->cblkw;
-                l_copied_tccp->cblkh = l_ref_tccp->cblkh;
-                l_copied_tccp->cblksty = l_ref_tccp->cblksty;
-                l_copied_tccp->qmfbid = l_ref_tccp->qmfbid;
-                memcpy(l_copied_tccp->prcw,l_ref_tccp->prcw,l_prc_size);
-                memcpy(l_copied_tccp->prch,l_ref_tccp->prch,l_prc_size);
-                ++l_copied_tccp;
-        }
-}
-
-static OPJ_UINT32 opj_j2k_get_SQcd_SQcc_size ( opj_j2k_t *p_j2k,
-                                                                        OPJ_UINT32 p_tile_no,
-                                                                        OPJ_UINT32 p_comp_no )
-{
-        OPJ_UINT32 l_num_bands;
-
-        opj_cp_t *l_cp = 00;
-        opj_tcp_t *l_tcp = 00;
-        opj_tccp_t *l_tccp = 00;
-
-        /* preconditions */
-        assert(p_j2k != 00);
-
-        l_cp = &(p_j2k->m_cp);
-        l_tcp = &l_cp->tcps[p_tile_no];
-        l_tccp = &l_tcp->tccps[p_comp_no];
-
-        /* preconditions again */
-        assert(p_tile_no < l_cp->tw * l_cp->th);
-        assert(p_comp_no < p_j2k->m_private_image->numcomps);
-
-        l_num_bands = (l_tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) ? 1 : (l_tccp->numresolutions * 3 - 2);
-
-        if (l_tccp->qntsty == J2K_CCP_QNTSTY_NOQNT)  {
-                return 1 + l_num_bands;
-        }
-        else {
-                return 1 + 2*l_num_bands;
-        }
-}
-
-static OPJ_BOOL opj_j2k_compare_SQcd_SQcc(opj_j2k_t *p_j2k, OPJ_UINT32 p_tile_no, OPJ_UINT32 p_first_comp_no, OPJ_UINT32 p_second_comp_no)
-{
-       opj_cp_t *l_cp = NULL;
-       opj_tcp_t *l_tcp = NULL;
-       opj_tccp_t *l_tccp0 = NULL;
-       opj_tccp_t *l_tccp1 = NULL;
-       OPJ_UINT32 l_band_no, l_num_bands;
-       
-       /* preconditions */
-       assert(p_j2k != 00);
-       
-       l_cp = &(p_j2k->m_cp);
-       l_tcp = &l_cp->tcps[p_tile_no];
-       l_tccp0 = &l_tcp->tccps[p_first_comp_no];
-       l_tccp1 = &l_tcp->tccps[p_second_comp_no];
-       
-       if (l_tccp0->qntsty != l_tccp1->qntsty ) {
-               return OPJ_FALSE;
-       }
-       if (l_tccp0->numgbits != l_tccp1->numgbits ) {
-               return OPJ_FALSE;
-       }
-       if (l_tccp0->qntsty == J2K_CCP_QNTSTY_SIQNT) {
-               l_num_bands = 1U;
-       } else {
-               l_num_bands = l_tccp0->numresolutions * 3U - 2U;
-               if (l_num_bands != (l_tccp1->numresolutions * 3U - 2U)) {
-                       return OPJ_FALSE;
-               }
-       }
-       
-       for (l_band_no = 0; l_band_no < l_num_bands; ++l_band_no) {
-               if (l_tccp0->stepsizes[l_band_no].expn != l_tccp1->stepsizes[l_band_no].expn ) {
-                       return OPJ_FALSE;
-               }
-       }
-       if (l_tccp0->qntsty != J2K_CCP_QNTSTY_NOQNT)
-       {
-               for (l_band_no = 0; l_band_no < l_num_bands; ++l_band_no) {
-                       if (l_tccp0->stepsizes[l_band_no].mant != l_tccp1->stepsizes[l_band_no].mant ) {
-                               return OPJ_FALSE;
-                       }
-               }
-       }
-       return OPJ_TRUE;
-}
-
-
-static OPJ_BOOL opj_j2k_write_SQcd_SQcc(       opj_j2k_t *p_j2k,
-                                                                OPJ_UINT32 p_tile_no,
-                                                                OPJ_UINT32 p_comp_no,
-                                                                OPJ_BYTE * p_data,
-                                                                OPJ_UINT32 * p_header_size,
-                                                                struct opj_event_mgr * p_manager )
-{
-        OPJ_UINT32 l_header_size;
-        OPJ_UINT32 l_band_no, l_num_bands;
-        OPJ_UINT32 l_expn,l_mant;
-
-        opj_cp_t *l_cp = 00;
-        opj_tcp_t *l_tcp = 00;
-        opj_tccp_t *l_tccp = 00;
-
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_header_size != 00);
-        assert(p_manager != 00);
-        assert(p_data != 00);
-
-        l_cp = &(p_j2k->m_cp);
-        l_tcp = &l_cp->tcps[p_tile_no];
-        l_tccp = &l_tcp->tccps[p_comp_no];
-
-        /* preconditions again */
-        assert(p_tile_no < l_cp->tw * l_cp->th);
-        assert(p_comp_no <p_j2k->m_private_image->numcomps);
-
-        l_num_bands = (l_tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) ? 1 : (l_tccp->numresolutions * 3 - 2);
-
-        if (l_tccp->qntsty == J2K_CCP_QNTSTY_NOQNT)  {
-                l_header_size = 1 + l_num_bands;
-
-                if (*p_header_size < l_header_size) {
-                        opj_event_msg(p_manager, EVT_ERROR, "Error writing SQcd SQcc element\n");
-                        return OPJ_FALSE;
-                }
-
-                opj_write_bytes(p_data,l_tccp->qntsty + (l_tccp->numgbits << 5), 1);    /* Sqcx */
-                ++p_data;
+    } else {
+        l_header_size = 1 + 2 * l_num_bands;
 
-                for (l_band_no = 0; l_band_no < l_num_bands; ++l_band_no) {
-                        l_expn = (OPJ_UINT32)l_tccp->stepsizes[l_band_no].expn;
-                        opj_write_bytes(p_data, l_expn << 3, 1);        /* SPqcx_i */
-                        ++p_data;
-                }
+        if (*p_header_size < l_header_size) {
+            opj_event_msg(p_manager, EVT_ERROR, "Error writing SQcd SQcc element\n");
+            return OPJ_FALSE;
         }
-        else {
-                l_header_size = 1 + 2*l_num_bands;
 
-                if (*p_header_size < l_header_size) {
-                        opj_event_msg(p_manager, EVT_ERROR, "Error writing SQcd SQcc element\n");
-                        return OPJ_FALSE;
-                }
-
-                opj_write_bytes(p_data,l_tccp->qntsty + (l_tccp->numgbits << 5), 1);    /* Sqcx */
-                ++p_data;
+        opj_write_bytes(p_data, l_tccp->qntsty + (l_tccp->numgbits << 5),
+                        1);   /* Sqcx */
+        ++p_data;
 
-                for (l_band_no = 0; l_band_no < l_num_bands; ++l_band_no) {
-                        l_expn = (OPJ_UINT32)l_tccp->stepsizes[l_band_no].expn;
-                        l_mant = (OPJ_UINT32)l_tccp->stepsizes[l_band_no].mant;
+        for (l_band_no = 0; l_band_no < l_num_bands; ++l_band_no) {
+            l_expn = (OPJ_UINT32)l_tccp->stepsizes[l_band_no].expn;
+            l_mant = (OPJ_UINT32)l_tccp->stepsizes[l_band_no].mant;
 
-                        opj_write_bytes(p_data, (l_expn << 11) + l_mant, 2);    /* SPqcx_i */
-                        p_data += 2;
-                }
+            opj_write_bytes(p_data, (l_expn << 11) + l_mant, 2);    /* SPqcx_i */
+            p_data += 2;
         }
+    }
 
-        *p_header_size = *p_header_size - l_header_size;
+    *p_header_size = *p_header_size - l_header_size;
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 static OPJ_BOOL opj_j2k_read_SQcd_SQcc(opj_j2k_t *p_j2k,
-                                                            OPJ_UINT32 p_comp_no,
-                                                            OPJ_BYTE* p_header_data,
-                                                            OPJ_UINT32 * p_header_size,
-                                                            opj_event_mgr_t * p_manager
-                                                            )
-{
-        /* loop*/
-        OPJ_UINT32 l_band_no;
-        opj_cp_t *l_cp = 00;
-        opj_tcp_t *l_tcp = 00;
-        opj_tccp_t *l_tccp = 00;
-        OPJ_BYTE * l_current_ptr = 00;
-        OPJ_UINT32 l_tmp, l_num_band;
-
-        /* preconditions*/
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_header_data != 00);
-
-        l_cp = &(p_j2k->m_cp);
-        /* come from tile part header or main header ?*/
-        l_tcp = (p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_TPH) ? /*FIXME J2K_DEC_STATE_TPH*/
-                                &l_cp->tcps[p_j2k->m_current_tile_number] :
-                                p_j2k->m_specific_param.m_decoder.m_default_tcp;
-
-        /* precondition again*/
-        assert(p_comp_no <  p_j2k->m_private_image->numcomps);
-
-        l_tccp = &l_tcp->tccps[p_comp_no];
-        l_current_ptr = p_header_data;
-
-        if (*p_header_size < 1) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error reading SQcd or SQcc element\n");
-                return OPJ_FALSE;
-        }
-        *p_header_size -= 1;
+                                       OPJ_UINT32 p_comp_no,
+                                       OPJ_BYTE* p_header_data,
+                                       OPJ_UINT32 * p_header_size,
+                                       opj_event_mgr_t * p_manager
+                                      )
+{
+    /* loop*/
+    OPJ_UINT32 l_band_no;
+    opj_cp_t *l_cp = 00;
+    opj_tcp_t *l_tcp = 00;
+    opj_tccp_t *l_tccp = 00;
+    OPJ_BYTE * l_current_ptr = 00;
+    OPJ_UINT32 l_tmp, l_num_band;
+
+    /* preconditions*/
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_header_data != 00);
+
+    l_cp = &(p_j2k->m_cp);
+    /* come from tile part header or main header ?*/
+    l_tcp = (p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_TPH)
+            ? /*FIXME J2K_DEC_STATE_TPH*/
+            &l_cp->tcps[p_j2k->m_current_tile_number] :
+            p_j2k->m_specific_param.m_decoder.m_default_tcp;
+
+    /* precondition again*/
+    assert(p_comp_no <  p_j2k->m_private_image->numcomps);
+
+    l_tccp = &l_tcp->tccps[p_comp_no];
+    l_current_ptr = p_header_data;
+
+    if (*p_header_size < 1) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error reading SQcd or SQcc element\n");
+        return OPJ_FALSE;
+    }
+    *p_header_size -= 1;
 
-        opj_read_bytes(l_current_ptr, &l_tmp ,1);                       /* Sqcx */
-        ++l_current_ptr;
+    opj_read_bytes(l_current_ptr, &l_tmp, 1);                       /* Sqcx */
+    ++l_current_ptr;
 
-        l_tccp->qntsty = l_tmp & 0x1f;
-        l_tccp->numgbits = l_tmp >> 5;
-        if (l_tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) {
+    l_tccp->qntsty = l_tmp & 0x1f;
+    l_tccp->numgbits = l_tmp >> 5;
+    if (l_tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) {
         l_num_band = 1;
-        }
-        else {
-                l_num_band = (l_tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) ?
-                        (*p_header_size) :
-                        (*p_header_size) / 2;
+    } else {
+        l_num_band = (l_tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) ?
+                     (*p_header_size) :
+                     (*p_header_size) / 2;
 
-                if( l_num_band > OPJ_J2K_MAXBANDS ) {
-                        opj_event_msg(p_manager, EVT_WARNING, "While reading CCP_QNTSTY element inside QCD or QCC marker segment, "
-                                "number of subbands (%d) is greater to OPJ_J2K_MAXBANDS (%d). So we limit the number of elements stored to "
-                                "OPJ_J2K_MAXBANDS (%d) and skip the rest. \n", l_num_band, OPJ_J2K_MAXBANDS, OPJ_J2K_MAXBANDS);
-                        /*return OPJ_FALSE;*/
-                }
+        if (l_num_band > OPJ_J2K_MAXBANDS) {
+            opj_event_msg(p_manager, EVT_WARNING,
+                          "While reading CCP_QNTSTY element inside QCD or QCC marker segment, "
+                          "number of subbands (%d) is greater to OPJ_J2K_MAXBANDS (%d). So we limit the number of elements stored to "
+                          "OPJ_J2K_MAXBANDS (%d) and skip the rest. \n", l_num_band, OPJ_J2K_MAXBANDS,
+                          OPJ_J2K_MAXBANDS);
+            /*return OPJ_FALSE;*/
         }
+    }
 
 #ifdef USE_JPWL
-        if (l_cp->correct) {
-
-                /* if JPWL is on, we check whether there are too many subbands */
-                if (/*(l_num_band < 0) ||*/ (l_num_band >= OPJ_J2K_MAXBANDS)) {
-                        opj_event_msg(p_manager, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
-                                "JPWL: bad number of subbands in Sqcx (%d)\n",
-                                l_num_band);
-                        if (!JPWL_ASSUME) {
-                                opj_event_msg(p_manager, EVT_ERROR, "JPWL: giving up\n");
-                                return OPJ_FALSE;
-                        }
-                        /* we try to correct */
-                        l_num_band = 1;
-                        opj_event_msg(p_manager, EVT_WARNING, "- trying to adjust them\n"
-                                "- setting number of bands to %d => HYPOTHESIS!!!\n",
-                                l_num_band);
-                };
+    if (l_cp->correct) {
 
+        /* if JPWL is on, we check whether there are too many subbands */
+        if (/*(l_num_band < 0) ||*/ (l_num_band >= OPJ_J2K_MAXBANDS)) {
+            opj_event_msg(p_manager, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
+                          "JPWL: bad number of subbands in Sqcx (%d)\n",
+                          l_num_band);
+            if (!JPWL_ASSUME) {
+                opj_event_msg(p_manager, EVT_ERROR, "JPWL: giving up\n");
+                return OPJ_FALSE;
+            }
+            /* we try to correct */
+            l_num_band = 1;
+            opj_event_msg(p_manager, EVT_WARNING, "- trying to adjust them\n"
+                          "- setting number of bands to %d => HYPOTHESIS!!!\n",
+                          l_num_band);
         };
+
+    };
 #endif /* USE_JPWL */
 
-        if (l_tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) {
-                for     (l_band_no = 0; l_band_no < l_num_band; l_band_no++) {
-                        opj_read_bytes(l_current_ptr, &l_tmp ,1);                       /* SPqcx_i */
-                        ++l_current_ptr;
-                        if (l_band_no < OPJ_J2K_MAXBANDS){
-                                l_tccp->stepsizes[l_band_no].expn = (OPJ_INT32)(l_tmp >> 3);
-                                l_tccp->stepsizes[l_band_no].mant = 0;
-                        }
-                }
-                *p_header_size = *p_header_size - l_num_band;
-        }
-        else {
-                for     (l_band_no = 0; l_band_no < l_num_band; l_band_no++) {
-                        opj_read_bytes(l_current_ptr, &l_tmp ,2);                       /* SPqcx_i */
-                        l_current_ptr+=2;
-                        if (l_band_no < OPJ_J2K_MAXBANDS){
-                                l_tccp->stepsizes[l_band_no].expn = (OPJ_INT32)(l_tmp >> 11);
-                                l_tccp->stepsizes[l_band_no].mant = l_tmp & 0x7ff;
-                        }
-                }
-                *p_header_size = *p_header_size - 2*l_num_band;
+    if (l_tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) {
+        for (l_band_no = 0; l_band_no < l_num_band; l_band_no++) {
+            opj_read_bytes(l_current_ptr, &l_tmp, 1);                       /* SPqcx_i */
+            ++l_current_ptr;
+            if (l_band_no < OPJ_J2K_MAXBANDS) {
+                l_tccp->stepsizes[l_band_no].expn = (OPJ_INT32)(l_tmp >> 3);
+                l_tccp->stepsizes[l_band_no].mant = 0;
+            }
+        }
+        *p_header_size = *p_header_size - l_num_band;
+    } else {
+        for (l_band_no = 0; l_band_no < l_num_band; l_band_no++) {
+            opj_read_bytes(l_current_ptr, &l_tmp, 2);                       /* SPqcx_i */
+            l_current_ptr += 2;
+            if (l_band_no < OPJ_J2K_MAXBANDS) {
+                l_tccp->stepsizes[l_band_no].expn = (OPJ_INT32)(l_tmp >> 11);
+                l_tccp->stepsizes[l_band_no].mant = l_tmp & 0x7ff;
+            }
         }
+        *p_header_size = *p_header_size - 2 * l_num_band;
+    }
 
-        /* Add Antonin : if scalar_derived -> compute other stepsizes */
-        if (l_tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) {
-                for (l_band_no = 1; l_band_no < OPJ_J2K_MAXBANDS; l_band_no++) {
-                        l_tccp->stepsizes[l_band_no].expn =
-                                ((OPJ_INT32)(l_tccp->stepsizes[0].expn) - (OPJ_INT32)((l_band_no - 1) / 3) > 0) ?
-                                        (OPJ_INT32)(l_tccp->stepsizes[0].expn) - (OPJ_INT32)((l_band_no - 1) / 3) : 0;
-                        l_tccp->stepsizes[l_band_no].mant = l_tccp->stepsizes[0].mant;
-                }
+    /* Add Antonin : if scalar_derived -> compute other stepsizes */
+    if (l_tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) {
+        for (l_band_no = 1; l_band_no < OPJ_J2K_MAXBANDS; l_band_no++) {
+            l_tccp->stepsizes[l_band_no].expn =
+                ((OPJ_INT32)(l_tccp->stepsizes[0].expn) - (OPJ_INT32)((l_band_no - 1) / 3) > 0)
+                ?
+                (OPJ_INT32)(l_tccp->stepsizes[0].expn) - (OPJ_INT32)((l_band_no - 1) / 3) : 0;
+            l_tccp->stepsizes[l_band_no].mant = l_tccp->stepsizes[0].mant;
         }
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static void opj_j2k_copy_tile_quantization_parameters( opj_j2k_t *p_j2k )
+static void opj_j2k_copy_tile_quantization_parameters(opj_j2k_t *p_j2k)
 {
-        OPJ_UINT32 i;
-        opj_cp_t *l_cp = NULL;
-        opj_tcp_t *l_tcp = NULL;
-        opj_tccp_t *l_ref_tccp = NULL;
-        opj_tccp_t *l_copied_tccp = NULL;
-        OPJ_UINT32 l_size;
-
-        /* preconditions */
-        assert(p_j2k != 00);
-
-        l_cp = &(p_j2k->m_cp);
-        l_tcp = p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_TPH ?
-                        &l_cp->tcps[p_j2k->m_current_tile_number] :
-                        p_j2k->m_specific_param.m_decoder.m_default_tcp;
-
-        l_ref_tccp = &l_tcp->tccps[0];
-        l_copied_tccp = l_ref_tccp + 1;
-        l_size = OPJ_J2K_MAXBANDS * sizeof(opj_stepsize_t);
-
-        for     (i=1;i<p_j2k->m_private_image->numcomps;++i) {
-                l_copied_tccp->qntsty = l_ref_tccp->qntsty;
-                l_copied_tccp->numgbits = l_ref_tccp->numgbits;
-                memcpy(l_copied_tccp->stepsizes,l_ref_tccp->stepsizes,l_size);
-                ++l_copied_tccp;
-        }
-}
-
-static void opj_j2k_dump_tile_info( opj_tcp_t * l_default_tile,OPJ_INT32 numcomps,FILE* out_stream)
-{
-        if (l_default_tile)
-        {
-                OPJ_INT32 compno;
-
-                fprintf(out_stream, "\t default tile {\n");
-                fprintf(out_stream, "\t\t csty=%#x\n", l_default_tile->csty);
-                fprintf(out_stream, "\t\t prg=%#x\n", l_default_tile->prg);
-                fprintf(out_stream, "\t\t numlayers=%d\n", l_default_tile->numlayers);
-                fprintf(out_stream, "\t\t mct=%x\n", l_default_tile->mct);
-
-                for (compno = 0; compno < numcomps; compno++) {
-                        opj_tccp_t *l_tccp = &(l_default_tile->tccps[compno]);
-                        OPJ_UINT32 resno;
-      OPJ_INT32 bandno, numbands;
-
-                        /* coding style*/
-                        fprintf(out_stream, "\t\t comp %d {\n", compno);
-                        fprintf(out_stream, "\t\t\t csty=%#x\n", l_tccp->csty);
-                        fprintf(out_stream, "\t\t\t numresolutions=%d\n", l_tccp->numresolutions);
-                        fprintf(out_stream, "\t\t\t cblkw=2^%d\n", l_tccp->cblkw);
-                        fprintf(out_stream, "\t\t\t cblkh=2^%d\n", l_tccp->cblkh);
-                        fprintf(out_stream, "\t\t\t cblksty=%#x\n", l_tccp->cblksty);
-                        fprintf(out_stream, "\t\t\t qmfbid=%d\n", l_tccp->qmfbid);
-
-                        fprintf(out_stream, "\t\t\t preccintsize (w,h)=");
-                        for (resno = 0; resno < l_tccp->numresolutions; resno++) {
-                                fprintf(out_stream, "(%d,%d) ", l_tccp->prcw[resno], l_tccp->prch[resno]);
-                        }
-                        fprintf(out_stream, "\n");
-
-                        /* quantization style*/
-                        fprintf(out_stream, "\t\t\t qntsty=%d\n", l_tccp->qntsty);
-                        fprintf(out_stream, "\t\t\t numgbits=%d\n", l_tccp->numgbits);
-                        fprintf(out_stream, "\t\t\t stepsizes (m,e)=");
-                        numbands = (l_tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) ? 1 : (OPJ_INT32)l_tccp->numresolutions * 3 - 2;
-                        for (bandno = 0; bandno < numbands; bandno++) {
-                                fprintf(out_stream, "(%d,%d) ", l_tccp->stepsizes[bandno].mant,
-                                        l_tccp->stepsizes[bandno].expn);
-                        }
-                        fprintf(out_stream, "\n");
+    OPJ_UINT32 i;
+    opj_cp_t *l_cp = NULL;
+    opj_tcp_t *l_tcp = NULL;
+    opj_tccp_t *l_ref_tccp = NULL;
+    opj_tccp_t *l_copied_tccp = NULL;
+    OPJ_UINT32 l_size;
+
+    /* preconditions */
+    assert(p_j2k != 00);
+
+    l_cp = &(p_j2k->m_cp);
+    l_tcp = p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_TPH ?
+            &l_cp->tcps[p_j2k->m_current_tile_number] :
+            p_j2k->m_specific_param.m_decoder.m_default_tcp;
+
+    l_ref_tccp = &l_tcp->tccps[0];
+    l_copied_tccp = l_ref_tccp + 1;
+    l_size = OPJ_J2K_MAXBANDS * sizeof(opj_stepsize_t);
+
+    for (i = 1; i < p_j2k->m_private_image->numcomps; ++i) {
+        l_copied_tccp->qntsty = l_ref_tccp->qntsty;
+        l_copied_tccp->numgbits = l_ref_tccp->numgbits;
+        memcpy(l_copied_tccp->stepsizes, l_ref_tccp->stepsizes, l_size);
+        ++l_copied_tccp;
+    }
+}
+
+static void opj_j2k_dump_tile_info(opj_tcp_t * l_default_tile,
+                                   OPJ_INT32 numcomps, FILE* out_stream)
+{
+    if (l_default_tile) {
+        OPJ_INT32 compno;
 
-                        /* RGN value*/
-                        fprintf(out_stream, "\t\t\t roishift=%d\n", l_tccp->roishift);
+        fprintf(out_stream, "\t default tile {\n");
+        fprintf(out_stream, "\t\t csty=%#x\n", l_default_tile->csty);
+        fprintf(out_stream, "\t\t prg=%#x\n", l_default_tile->prg);
+        fprintf(out_stream, "\t\t numlayers=%d\n", l_default_tile->numlayers);
+        fprintf(out_stream, "\t\t mct=%x\n", l_default_tile->mct);
 
-                        fprintf(out_stream, "\t\t }\n");
-                } /*end of component of default tile*/
-                fprintf(out_stream, "\t }\n"); /*end of default tile*/
+        for (compno = 0; compno < numcomps; compno++) {
+            opj_tccp_t *l_tccp = &(l_default_tile->tccps[compno]);
+            OPJ_UINT32 resno;
+            OPJ_INT32 bandno, numbands;
+
+            /* coding style*/
+            fprintf(out_stream, "\t\t comp %d {\n", compno);
+            fprintf(out_stream, "\t\t\t csty=%#x\n", l_tccp->csty);
+            fprintf(out_stream, "\t\t\t numresolutions=%d\n", l_tccp->numresolutions);
+            fprintf(out_stream, "\t\t\t cblkw=2^%d\n", l_tccp->cblkw);
+            fprintf(out_stream, "\t\t\t cblkh=2^%d\n", l_tccp->cblkh);
+            fprintf(out_stream, "\t\t\t cblksty=%#x\n", l_tccp->cblksty);
+            fprintf(out_stream, "\t\t\t qmfbid=%d\n", l_tccp->qmfbid);
+
+            fprintf(out_stream, "\t\t\t preccintsize (w,h)=");
+            for (resno = 0; resno < l_tccp->numresolutions; resno++) {
+                fprintf(out_stream, "(%d,%d) ", l_tccp->prcw[resno], l_tccp->prch[resno]);
             }
+            fprintf(out_stream, "\n");
+
+            /* quantization style*/
+            fprintf(out_stream, "\t\t\t qntsty=%d\n", l_tccp->qntsty);
+            fprintf(out_stream, "\t\t\t numgbits=%d\n", l_tccp->numgbits);
+            fprintf(out_stream, "\t\t\t stepsizes (m,e)=");
+            numbands = (l_tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) ? 1 :
+                       (OPJ_INT32)l_tccp->numresolutions * 3 - 2;
+            for (bandno = 0; bandno < numbands; bandno++) {
+                fprintf(out_stream, "(%d,%d) ", l_tccp->stepsizes[bandno].mant,
+                        l_tccp->stepsizes[bandno].expn);
+            }
+            fprintf(out_stream, "\n");
+
+            /* RGN value*/
+            fprintf(out_stream, "\t\t\t roishift=%d\n", l_tccp->roishift);
+
+            fprintf(out_stream, "\t\t }\n");
+        } /*end of component of default tile*/
+        fprintf(out_stream, "\t }\n"); /*end of default tile*/
+    }
 }
 
-void j2k_dump (opj_j2k_t* p_j2k, OPJ_INT32 flag, FILE* out_stream)
+void j2k_dump(opj_j2k_t* p_j2k, OPJ_INT32 flag, FILE* out_stream)
 {
-        /* Check if the flag is compatible with j2k file*/
-        if ( (flag & OPJ_JP2_INFO) || (flag & OPJ_JP2_IND)){
-                fprintf(out_stream, "Wrong flag\n");
-                return;
-        }
+    /* Check if the flag is compatible with j2k file*/
+    if ((flag & OPJ_JP2_INFO) || (flag & OPJ_JP2_IND)) {
+        fprintf(out_stream, "Wrong flag\n");
+        return;
+    }
 
-        /* Dump the image_header */
-        if (flag & OPJ_IMG_INFO){
-                if (p_j2k->m_private_image)
-                        j2k_dump_image_header(p_j2k->m_private_image, 0, out_stream);
+    /* Dump the image_header */
+    if (flag & OPJ_IMG_INFO) {
+        if (p_j2k->m_private_image) {
+            j2k_dump_image_header(p_j2k->m_private_image, 0, out_stream);
         }
+    }
 
-        /* Dump the codestream info from main header */
-        if (flag & OPJ_J2K_MH_INFO){
-                if (p_j2k->m_private_image)
-                        opj_j2k_dump_MH_info(p_j2k, out_stream);
+    /* Dump the codestream info from main header */
+    if (flag & OPJ_J2K_MH_INFO) {
+        if (p_j2k->m_private_image) {
+            opj_j2k_dump_MH_info(p_j2k, out_stream);
         }
-        /* Dump all tile/codestream info */
-        if (flag & OPJ_J2K_TCH_INFO){
-          OPJ_UINT32 l_nb_tiles = p_j2k->m_cp.th * p_j2k->m_cp.tw;
-          OPJ_UINT32 i;
-          opj_tcp_t * l_tcp = p_j2k->m_cp.tcps;
-          if (p_j2k->m_private_image) {
-            for (i=0;i<l_nb_tiles;++i) {
-              opj_j2k_dump_tile_info( l_tcp,(OPJ_INT32)p_j2k->m_private_image->numcomps, out_stream);
-              ++l_tcp;
+    }
+    /* Dump all tile/codestream info */
+    if (flag & OPJ_J2K_TCH_INFO) {
+        OPJ_UINT32 l_nb_tiles = p_j2k->m_cp.th * p_j2k->m_cp.tw;
+        OPJ_UINT32 i;
+        opj_tcp_t * l_tcp = p_j2k->m_cp.tcps;
+        if (p_j2k->m_private_image) {
+            for (i = 0; i < l_nb_tiles; ++i) {
+                opj_j2k_dump_tile_info(l_tcp, (OPJ_INT32)p_j2k->m_private_image->numcomps,
+                                       out_stream);
+                ++l_tcp;
             }
-          }
         }
+    }
 
-        /* Dump the codestream info of the current tile */
-        if (flag & OPJ_J2K_TH_INFO){
+    /* Dump the codestream info of the current tile */
+    if (flag & OPJ_J2K_TH_INFO) {
 
-        }
+    }
 
-        /* Dump the codestream index from main header */
-        if (flag & OPJ_J2K_MH_IND){
-                opj_j2k_dump_MH_index(p_j2k, out_stream);
-        }
+    /* Dump the codestream index from main header */
+    if (flag & OPJ_J2K_MH_IND) {
+        opj_j2k_dump_MH_index(p_j2k, out_stream);
+    }
 
-        /* Dump the codestream index of the current tile */
-        if (flag & OPJ_J2K_TH_IND){
+    /* Dump the codestream index of the current tile */
+    if (flag & OPJ_J2K_TH_IND) {
 
-        }
+    }
 
 }
 
 static void opj_j2k_dump_MH_index(opj_j2k_t* p_j2k, FILE* out_stream)
 {
-        opj_codestream_index_t* cstr_index = p_j2k->cstr_index;
-        OPJ_UINT32 it_marker, it_tile, it_tile_part;
+    opj_codestream_index_t* cstr_index = p_j2k->cstr_index;
+    OPJ_UINT32 it_marker, it_tile, it_tile_part;
 
-        fprintf(out_stream, "Codestream index from main header: {\n");
+    fprintf(out_stream, "Codestream index from main header: {\n");
 
-        fprintf(out_stream, "\t Main header start position=%" PRIi64 "\n"
-                                    "\t Main header end position=%" PRIi64 "\n",
-                        cstr_index->main_head_start, cstr_index->main_head_end);
+    fprintf(out_stream, "\t Main header start position=%" PRIi64 "\n"
+            "\t Main header end position=%" PRIi64 "\n",
+            cstr_index->main_head_start, cstr_index->main_head_end);
 
-        fprintf(out_stream, "\t Marker list: {\n");
+    fprintf(out_stream, "\t Marker list: {\n");
 
-        if (cstr_index->marker){
-                for (it_marker=0; it_marker < cstr_index->marknum ; it_marker++){
-                        fprintf(out_stream, "\t\t type=%#x, pos=%" PRIi64 ", len=%d\n",
-                                        cstr_index->marker[it_marker].type,
-                                        cstr_index->marker[it_marker].pos,
-                                        cstr_index->marker[it_marker].len );
-                }
+    if (cstr_index->marker) {
+        for (it_marker = 0; it_marker < cstr_index->marknum ; it_marker++) {
+            fprintf(out_stream, "\t\t type=%#x, pos=%" PRIi64 ", len=%d\n",
+                    cstr_index->marker[it_marker].type,
+                    cstr_index->marker[it_marker].pos,
+                    cstr_index->marker[it_marker].len);
         }
+    }
 
-        fprintf(out_stream, "\t }\n");
+    fprintf(out_stream, "\t }\n");
 
-        if (cstr_index->tile_index){
+    if (cstr_index->tile_index) {
 
         /* Simple test to avoid to write empty information*/
         OPJ_UINT32 l_acc_nb_of_tile_part = 0;
-        for (it_tile=0; it_tile < cstr_index->nb_of_tiles ; it_tile++){
-                        l_acc_nb_of_tile_part += cstr_index->tile_index[it_tile].nb_tps;
+        for (it_tile = 0; it_tile < cstr_index->nb_of_tiles ; it_tile++) {
+            l_acc_nb_of_tile_part += cstr_index->tile_index[it_tile].nb_tps;
         }
 
-        if (l_acc_nb_of_tile_part)
-        {
+        if (l_acc_nb_of_tile_part) {
             fprintf(out_stream, "\t Tile index: {\n");
 
-                    for (it_tile=0; it_tile < cstr_index->nb_of_tiles ; it_tile++){
-                            OPJ_UINT32 nb_of_tile_part = cstr_index->tile_index[it_tile].nb_tps;
-
-                            fprintf(out_stream, "\t\t nb of tile-part in tile [%d]=%d\n", it_tile, nb_of_tile_part);
-
-                            if (cstr_index->tile_index[it_tile].tp_index){
-                                    for (it_tile_part =0; it_tile_part < nb_of_tile_part; it_tile_part++){
-                                            fprintf(out_stream, "\t\t\t tile-part[%d]: star_pos=%" PRIi64 ", end_header=%" PRIi64 ", end_pos=%" PRIi64 ".\n",
-                                                            it_tile_part,
-                                                            cstr_index->tile_index[it_tile].tp_index[it_tile_part].start_pos,
-                                                            cstr_index->tile_index[it_tile].tp_index[it_tile_part].end_header,
-                                                            cstr_index->tile_index[it_tile].tp_index[it_tile_part].end_pos);
-                                    }
-                            }
-
-                            if (cstr_index->tile_index[it_tile].marker){
-                                    for (it_marker=0; it_marker < cstr_index->tile_index[it_tile].marknum ; it_marker++){
-                                            fprintf(out_stream, "\t\t type=%#x, pos=%" PRIi64 ", len=%d\n",
-                                                            cstr_index->tile_index[it_tile].marker[it_marker].type,
-                                                            cstr_index->tile_index[it_tile].marker[it_marker].pos,
-                                                            cstr_index->tile_index[it_tile].marker[it_marker].len );
-                                    }
-                            }
+            for (it_tile = 0; it_tile < cstr_index->nb_of_tiles ; it_tile++) {
+                OPJ_UINT32 nb_of_tile_part = cstr_index->tile_index[it_tile].nb_tps;
+
+                fprintf(out_stream, "\t\t nb of tile-part in tile [%d]=%d\n", it_tile,
+                        nb_of_tile_part);
+
+                if (cstr_index->tile_index[it_tile].tp_index) {
+                    for (it_tile_part = 0; it_tile_part < nb_of_tile_part; it_tile_part++) {
+                        fprintf(out_stream, "\t\t\t tile-part[%d]: star_pos=%" PRIi64 ", end_header=%"
+                                PRIi64 ", end_pos=%" PRIi64 ".\n",
+                                it_tile_part,
+                                cstr_index->tile_index[it_tile].tp_index[it_tile_part].start_pos,
+                                cstr_index->tile_index[it_tile].tp_index[it_tile_part].end_header,
+                                cstr_index->tile_index[it_tile].tp_index[it_tile_part].end_pos);
                     }
-                    fprintf(out_stream,"\t }\n");
-        }
+                }
+
+                if (cstr_index->tile_index[it_tile].marker) {
+                    for (it_marker = 0; it_marker < cstr_index->tile_index[it_tile].marknum ;
+                            it_marker++) {
+                        fprintf(out_stream, "\t\t type=%#x, pos=%" PRIi64 ", len=%d\n",
+                                cstr_index->tile_index[it_tile].marker[it_marker].type,
+                                cstr_index->tile_index[it_tile].marker[it_marker].pos,
+                                cstr_index->tile_index[it_tile].marker[it_marker].len);
+                    }
+                }
+            }
+            fprintf(out_stream, "\t }\n");
         }
+    }
 
-        fprintf(out_stream,"}\n");
+    fprintf(out_stream, "}\n");
 
 }
 
@@ -9516,1462 +9969,1575 @@ static void opj_j2k_dump_MH_index(opj_j2k_t* p_j2k, FILE* out_stream)
 static void opj_j2k_dump_MH_info(opj_j2k_t* p_j2k, FILE* out_stream)
 {
 
-        fprintf(out_stream, "Codestream info from main header: {\n");
+    fprintf(out_stream, "Codestream info from main header: {\n");
 
-        fprintf(out_stream, "\t tx0=%d, ty0=%d\n", p_j2k->m_cp.tx0, p_j2k->m_cp.ty0);
-        fprintf(out_stream, "\t tdx=%d, tdy=%d\n", p_j2k->m_cp.tdx, p_j2k->m_cp.tdy);
-        fprintf(out_stream, "\t tw=%d, th=%d\n", p_j2k->m_cp.tw, p_j2k->m_cp.th);
-        opj_j2k_dump_tile_info(p_j2k->m_specific_param.m_decoder.m_default_tcp,(OPJ_INT32)p_j2k->m_private_image->numcomps, out_stream);
-        fprintf(out_stream, "}\n");
+    fprintf(out_stream, "\t tx0=%d, ty0=%d\n", p_j2k->m_cp.tx0, p_j2k->m_cp.ty0);
+    fprintf(out_stream, "\t tdx=%d, tdy=%d\n", p_j2k->m_cp.tdx, p_j2k->m_cp.tdy);
+    fprintf(out_stream, "\t tw=%d, th=%d\n", p_j2k->m_cp.tw, p_j2k->m_cp.th);
+    opj_j2k_dump_tile_info(p_j2k->m_specific_param.m_decoder.m_default_tcp,
+                           (OPJ_INT32)p_j2k->m_private_image->numcomps, out_stream);
+    fprintf(out_stream, "}\n");
 }
 
-void j2k_dump_image_header(opj_image_t* img_header, OPJ_BOOL dev_dump_flag, FILE* out_stream)
+void j2k_dump_image_header(opj_image_t* img_header, OPJ_BOOL dev_dump_flag,
+                           FILE* out_stream)
 {
-        char tab[2];
+    char tab[2];
 
-        if (dev_dump_flag){
-                fprintf(stdout, "[DEV] Dump an image_header struct {\n");
-                tab[0] = '\0';
-        }
-        else {
-                fprintf(out_stream, "Image info {\n");
-                tab[0] = '\t';tab[1] = '\0';
-        }
+    if (dev_dump_flag) {
+        fprintf(stdout, "[DEV] Dump an image_header struct {\n");
+        tab[0] = '\0';
+    } else {
+        fprintf(out_stream, "Image info {\n");
+        tab[0] = '\t';
+        tab[1] = '\0';
+    }
 
-        fprintf(out_stream, "%s x0=%d, y0=%d\n", tab, img_header->x0, img_header->y0);
-        fprintf(out_stream,     "%s x1=%d, y1=%d\n", tab, img_header->x1, img_header->y1);
-        fprintf(out_stream, "%s numcomps=%d\n", tab, img_header->numcomps);
+    fprintf(out_stream, "%s x0=%d, y0=%d\n", tab, img_header->x0, img_header->y0);
+    fprintf(out_stream,     "%s x1=%d, y1=%d\n", tab, img_header->x1,
+            img_header->y1);
+    fprintf(out_stream, "%s numcomps=%d\n", tab, img_header->numcomps);
 
-        if (img_header->comps){
-                OPJ_UINT32 compno;
-                for (compno = 0; compno < img_header->numcomps; compno++) {
-                        fprintf(out_stream, "%s\t component %d {\n", tab, compno);
-                        j2k_dump_image_comp_header(&(img_header->comps[compno]), dev_dump_flag, out_stream);
-                        fprintf(out_stream,"%s}\n",tab);
-                }
+    if (img_header->comps) {
+        OPJ_UINT32 compno;
+        for (compno = 0; compno < img_header->numcomps; compno++) {
+            fprintf(out_stream, "%s\t component %d {\n", tab, compno);
+            j2k_dump_image_comp_header(&(img_header->comps[compno]), dev_dump_flag,
+                                       out_stream);
+            fprintf(out_stream, "%s}\n", tab);
         }
+    }
 
-        fprintf(out_stream, "}\n");
+    fprintf(out_stream, "}\n");
 }
 
-void j2k_dump_image_comp_header(opj_image_comp_t* comp_header, OPJ_BOOL dev_dump_flag, FILE* out_stream)
+void j2k_dump_image_comp_header(opj_image_comp_t* comp_header,
+                                OPJ_BOOL dev_dump_flag, FILE* out_stream)
 {
-        char tab[3];
+    char tab[3];
 
-        if (dev_dump_flag){
-                fprintf(stdout, "[DEV] Dump an image_comp_header struct {\n");
-                tab[0] = '\0';
-        }       else {
-                tab[0] = '\t';tab[1] = '\t';tab[2] = '\0';
-        }
+    if (dev_dump_flag) {
+        fprintf(stdout, "[DEV] Dump an image_comp_header struct {\n");
+        tab[0] = '\0';
+    }       else {
+        tab[0] = '\t';
+        tab[1] = '\t';
+        tab[2] = '\0';
+    }
 
-        fprintf(out_stream, "%s dx=%d, dy=%d\n", tab, comp_header->dx, comp_header->dy);
-        fprintf(out_stream, "%s prec=%d\n", tab, comp_header->prec);
-        fprintf(out_stream, "%s sgnd=%d\n", tab, comp_header->sgnd);
+    fprintf(out_stream, "%s dx=%d, dy=%d\n", tab, comp_header->dx, comp_header->dy);
+    fprintf(out_stream, "%s prec=%d\n", tab, comp_header->prec);
+    fprintf(out_stream, "%s sgnd=%d\n", tab, comp_header->sgnd);
 
-        if (dev_dump_flag)
-                fprintf(out_stream, "}\n");
+    if (dev_dump_flag) {
+        fprintf(out_stream, "}\n");
+    }
 }
 
 opj_codestream_info_v2_t* j2k_get_cstr_info(opj_j2k_t* p_j2k)
 {
-        OPJ_UINT32 compno;
-        OPJ_UINT32 numcomps = p_j2k->m_private_image->numcomps;
-        opj_tcp_t *l_default_tile;
-        opj_codestream_info_v2_t* cstr_info = (opj_codestream_info_v2_t*) opj_calloc(1,sizeof(opj_codestream_info_v2_t));
-               if (!cstr_info)
-                       return NULL;
-
-        cstr_info->nbcomps = p_j2k->m_private_image->numcomps;
-
-        cstr_info->tx0 = p_j2k->m_cp.tx0;
-        cstr_info->ty0 = p_j2k->m_cp.ty0;
-        cstr_info->tdx = p_j2k->m_cp.tdx;
-        cstr_info->tdy = p_j2k->m_cp.tdy;
-        cstr_info->tw = p_j2k->m_cp.tw;
-        cstr_info->th = p_j2k->m_cp.th;
-
-        cstr_info->tile_info = NULL; /* Not fill from the main header*/
+    OPJ_UINT32 compno;
+    OPJ_UINT32 numcomps = p_j2k->m_private_image->numcomps;
+    opj_tcp_t *l_default_tile;
+    opj_codestream_info_v2_t* cstr_info = (opj_codestream_info_v2_t*) opj_calloc(1,
+                                          sizeof(opj_codestream_info_v2_t));
+    if (!cstr_info) {
+        return NULL;
+    }
 
-        l_default_tile = p_j2k->m_specific_param.m_decoder.m_default_tcp;
+    cstr_info->nbcomps = p_j2k->m_private_image->numcomps;
 
-        cstr_info->m_default_tile_info.csty = l_default_tile->csty;
-        cstr_info->m_default_tile_info.prg = l_default_tile->prg;
-        cstr_info->m_default_tile_info.numlayers = l_default_tile->numlayers;
-        cstr_info->m_default_tile_info.mct = l_default_tile->mct;
+    cstr_info->tx0 = p_j2k->m_cp.tx0;
+    cstr_info->ty0 = p_j2k->m_cp.ty0;
+    cstr_info->tdx = p_j2k->m_cp.tdx;
+    cstr_info->tdy = p_j2k->m_cp.tdy;
+    cstr_info->tw = p_j2k->m_cp.tw;
+    cstr_info->th = p_j2k->m_cp.th;
 
-        cstr_info->m_default_tile_info.tccp_info = (opj_tccp_info_t*) opj_calloc(cstr_info->nbcomps, sizeof(opj_tccp_info_t));
-               if (!cstr_info->m_default_tile_info.tccp_info)
-               {
-                       opj_destroy_cstr_info(&cstr_info);
-                       return NULL;
-               }
+    cstr_info->tile_info = NULL; /* Not fill from the main header*/
 
-        for (compno = 0; compno < numcomps; compno++) {
-                opj_tccp_t *l_tccp = &(l_default_tile->tccps[compno]);
-                opj_tccp_info_t *l_tccp_info = &(cstr_info->m_default_tile_info.tccp_info[compno]);
-                OPJ_INT32 bandno, numbands;
-
-                /* coding style*/
-                l_tccp_info->csty = l_tccp->csty;
-                l_tccp_info->numresolutions = l_tccp->numresolutions;
-                l_tccp_info->cblkw = l_tccp->cblkw;
-                l_tccp_info->cblkh = l_tccp->cblkh;
-                l_tccp_info->cblksty = l_tccp->cblksty;
-                l_tccp_info->qmfbid = l_tccp->qmfbid;
-                if (l_tccp->numresolutions < OPJ_J2K_MAXRLVLS)
-                {
-                        memcpy(l_tccp_info->prch, l_tccp->prch, l_tccp->numresolutions);
-                        memcpy(l_tccp_info->prcw, l_tccp->prcw, l_tccp->numresolutions);
-                }
+    l_default_tile = p_j2k->m_specific_param.m_decoder.m_default_tcp;
 
-                /* quantization style*/
-                l_tccp_info->qntsty = l_tccp->qntsty;
-                l_tccp_info->numgbits = l_tccp->numgbits;
+    cstr_info->m_default_tile_info.csty = l_default_tile->csty;
+    cstr_info->m_default_tile_info.prg = l_default_tile->prg;
+    cstr_info->m_default_tile_info.numlayers = l_default_tile->numlayers;
+    cstr_info->m_default_tile_info.mct = l_default_tile->mct;
 
-                numbands = (l_tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) ? 1 : (OPJ_INT32)l_tccp->numresolutions * 3 - 2;
-                if (numbands < OPJ_J2K_MAXBANDS) {
-                        for (bandno = 0; bandno < numbands; bandno++) {
-                                l_tccp_info->stepsizes_mant[bandno] = (OPJ_UINT32)l_tccp->stepsizes[bandno].mant;
-                                l_tccp_info->stepsizes_expn[bandno] = (OPJ_UINT32)l_tccp->stepsizes[bandno].expn;
-                        }
-                }
+    cstr_info->m_default_tile_info.tccp_info = (opj_tccp_info_t*) opj_calloc(
+                cstr_info->nbcomps, sizeof(opj_tccp_info_t));
+    if (!cstr_info->m_default_tile_info.tccp_info) {
+        opj_destroy_cstr_info(&cstr_info);
+        return NULL;
+    }
 
-                /* RGN value*/
-                l_tccp_info->roishift = l_tccp->roishift;
+    for (compno = 0; compno < numcomps; compno++) {
+        opj_tccp_t *l_tccp = &(l_default_tile->tccps[compno]);
+        opj_tccp_info_t *l_tccp_info = &
+                                       (cstr_info->m_default_tile_info.tccp_info[compno]);
+        OPJ_INT32 bandno, numbands;
+
+        /* coding style*/
+        l_tccp_info->csty = l_tccp->csty;
+        l_tccp_info->numresolutions = l_tccp->numresolutions;
+        l_tccp_info->cblkw = l_tccp->cblkw;
+        l_tccp_info->cblkh = l_tccp->cblkh;
+        l_tccp_info->cblksty = l_tccp->cblksty;
+        l_tccp_info->qmfbid = l_tccp->qmfbid;
+        if (l_tccp->numresolutions < OPJ_J2K_MAXRLVLS) {
+            memcpy(l_tccp_info->prch, l_tccp->prch, l_tccp->numresolutions);
+            memcpy(l_tccp_info->prcw, l_tccp->prcw, l_tccp->numresolutions);
+        }
+
+        /* quantization style*/
+        l_tccp_info->qntsty = l_tccp->qntsty;
+        l_tccp_info->numgbits = l_tccp->numgbits;
+
+        numbands = (l_tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) ? 1 :
+                   (OPJ_INT32)l_tccp->numresolutions * 3 - 2;
+        if (numbands < OPJ_J2K_MAXBANDS) {
+            for (bandno = 0; bandno < numbands; bandno++) {
+                l_tccp_info->stepsizes_mant[bandno] = (OPJ_UINT32)
+                                                      l_tccp->stepsizes[bandno].mant;
+                l_tccp_info->stepsizes_expn[bandno] = (OPJ_UINT32)
+                                                      l_tccp->stepsizes[bandno].expn;
+            }
         }
 
-        return cstr_info;
+        /* RGN value*/
+        l_tccp_info->roishift = l_tccp->roishift;
+    }
+
+    return cstr_info;
 }
 
 opj_codestream_index_t* j2k_get_cstr_index(opj_j2k_t* p_j2k)
 {
-        opj_codestream_index_t* l_cstr_index = (opj_codestream_index_t*)
-                        opj_calloc(1,sizeof(opj_codestream_index_t));
-        if (!l_cstr_index)
-                return NULL;
+    opj_codestream_index_t* l_cstr_index = (opj_codestream_index_t*)
+                                           opj_calloc(1, sizeof(opj_codestream_index_t));
+    if (!l_cstr_index) {
+        return NULL;
+    }
 
-        l_cstr_index->main_head_start = p_j2k->cstr_index->main_head_start;
-        l_cstr_index->main_head_end = p_j2k->cstr_index->main_head_end;
-        l_cstr_index->codestream_size = p_j2k->cstr_index->codestream_size;
+    l_cstr_index->main_head_start = p_j2k->cstr_index->main_head_start;
+    l_cstr_index->main_head_end = p_j2k->cstr_index->main_head_end;
+    l_cstr_index->codestream_size = p_j2k->cstr_index->codestream_size;
 
-        l_cstr_index->marknum = p_j2k->cstr_index->marknum;
-        l_cstr_index->marker = (opj_marker_info_t*)opj_malloc(l_cstr_index->marknum*sizeof(opj_marker_info_t));
-        if (!l_cstr_index->marker){
-                opj_free( l_cstr_index);
-                return NULL;
-        }
+    l_cstr_index->marknum = p_j2k->cstr_index->marknum;
+    l_cstr_index->marker = (opj_marker_info_t*)opj_malloc(l_cstr_index->marknum *
+                           sizeof(opj_marker_info_t));
+    if (!l_cstr_index->marker) {
+        opj_free(l_cstr_index);
+        return NULL;
+    }
 
-        if (p_j2k->cstr_index->marker)
-                memcpy(l_cstr_index->marker, p_j2k->cstr_index->marker, l_cstr_index->marknum * sizeof(opj_marker_info_t) );
-        else{
-                opj_free(l_cstr_index->marker);
-                l_cstr_index->marker = NULL;
-        }
+    if (p_j2k->cstr_index->marker) {
+        memcpy(l_cstr_index->marker, p_j2k->cstr_index->marker,
+               l_cstr_index->marknum * sizeof(opj_marker_info_t));
+    } else {
+        opj_free(l_cstr_index->marker);
+        l_cstr_index->marker = NULL;
+    }
 
-        l_cstr_index->nb_of_tiles = p_j2k->cstr_index->nb_of_tiles;
-        l_cstr_index->tile_index = (opj_tile_index_t*)opj_calloc(l_cstr_index->nb_of_tiles, sizeof(opj_tile_index_t) );
-        if (!l_cstr_index->tile_index){
-                opj_free( l_cstr_index->marker);
-                opj_free( l_cstr_index);
-                return NULL;
-        }
+    l_cstr_index->nb_of_tiles = p_j2k->cstr_index->nb_of_tiles;
+    l_cstr_index->tile_index = (opj_tile_index_t*)opj_calloc(
+                                   l_cstr_index->nb_of_tiles, sizeof(opj_tile_index_t));
+    if (!l_cstr_index->tile_index) {
+        opj_free(l_cstr_index->marker);
+        opj_free(l_cstr_index);
+        return NULL;
+    }
 
-        if (!p_j2k->cstr_index->tile_index){
-                opj_free(l_cstr_index->tile_index);
-                l_cstr_index->tile_index = NULL;
-        }
-        else {
-                OPJ_UINT32 it_tile = 0;
-                for (it_tile = 0; it_tile < l_cstr_index->nb_of_tiles; it_tile++ ){
+    if (!p_j2k->cstr_index->tile_index) {
+        opj_free(l_cstr_index->tile_index);
+        l_cstr_index->tile_index = NULL;
+    } else {
+        OPJ_UINT32 it_tile = 0;
+        for (it_tile = 0; it_tile < l_cstr_index->nb_of_tiles; it_tile++) {
 
-                        /* Tile Marker*/
-                        l_cstr_index->tile_index[it_tile].marknum = p_j2k->cstr_index->tile_index[it_tile].marknum;
+            /* Tile Marker*/
+            l_cstr_index->tile_index[it_tile].marknum =
+                p_j2k->cstr_index->tile_index[it_tile].marknum;
 
-                        l_cstr_index->tile_index[it_tile].marker =
-                                (opj_marker_info_t*)opj_malloc(l_cstr_index->tile_index[it_tile].marknum*sizeof(opj_marker_info_t));
+            l_cstr_index->tile_index[it_tile].marker =
+                (opj_marker_info_t*)opj_malloc(l_cstr_index->tile_index[it_tile].marknum *
+                                               sizeof(opj_marker_info_t));
 
-                        if (!l_cstr_index->tile_index[it_tile].marker) {
-                                OPJ_UINT32 it_tile_free;
+            if (!l_cstr_index->tile_index[it_tile].marker) {
+                OPJ_UINT32 it_tile_free;
 
-                                for (it_tile_free=0; it_tile_free < it_tile; it_tile_free++){
-                                        opj_free(l_cstr_index->tile_index[it_tile_free].marker);
-                                }
+                for (it_tile_free = 0; it_tile_free < it_tile; it_tile_free++) {
+                    opj_free(l_cstr_index->tile_index[it_tile_free].marker);
+                }
 
-                                opj_free( l_cstr_index->tile_index);
-                                opj_free( l_cstr_index->marker);
-                                opj_free( l_cstr_index);
-                                return NULL;
-                        }
+                opj_free(l_cstr_index->tile_index);
+                opj_free(l_cstr_index->marker);
+                opj_free(l_cstr_index);
+                return NULL;
+            }
 
-                        if (p_j2k->cstr_index->tile_index[it_tile].marker)
-                                memcpy( l_cstr_index->tile_index[it_tile].marker,
-                                                p_j2k->cstr_index->tile_index[it_tile].marker,
-                                                l_cstr_index->tile_index[it_tile].marknum * sizeof(opj_marker_info_t) );
-                        else{
-                                opj_free(l_cstr_index->tile_index[it_tile].marker);
-                                l_cstr_index->tile_index[it_tile].marker = NULL;
-                        }
+            if (p_j2k->cstr_index->tile_index[it_tile].marker)
+                memcpy(l_cstr_index->tile_index[it_tile].marker,
+                       p_j2k->cstr_index->tile_index[it_tile].marker,
+                       l_cstr_index->tile_index[it_tile].marknum * sizeof(opj_marker_info_t));
+            else {
+                opj_free(l_cstr_index->tile_index[it_tile].marker);
+                l_cstr_index->tile_index[it_tile].marker = NULL;
+            }
 
-                        /* Tile part index*/
-                        l_cstr_index->tile_index[it_tile].nb_tps = p_j2k->cstr_index->tile_index[it_tile].nb_tps;
+            /* Tile part index*/
+            l_cstr_index->tile_index[it_tile].nb_tps =
+                p_j2k->cstr_index->tile_index[it_tile].nb_tps;
 
-                        l_cstr_index->tile_index[it_tile].tp_index =
-                                (opj_tp_index_t*)opj_malloc(l_cstr_index->tile_index[it_tile].nb_tps*sizeof(opj_tp_index_t));
+            l_cstr_index->tile_index[it_tile].tp_index =
+                (opj_tp_index_t*)opj_malloc(l_cstr_index->tile_index[it_tile].nb_tps * sizeof(
+                                                opj_tp_index_t));
 
-                        if(!l_cstr_index->tile_index[it_tile].tp_index){
-                                OPJ_UINT32 it_tile_free;
+            if (!l_cstr_index->tile_index[it_tile].tp_index) {
+                OPJ_UINT32 it_tile_free;
 
-                                for (it_tile_free=0; it_tile_free < it_tile; it_tile_free++){
-                                        opj_free(l_cstr_index->tile_index[it_tile_free].marker);
-                                        opj_free(l_cstr_index->tile_index[it_tile_free].tp_index);
-                                }
+                for (it_tile_free = 0; it_tile_free < it_tile; it_tile_free++) {
+                    opj_free(l_cstr_index->tile_index[it_tile_free].marker);
+                    opj_free(l_cstr_index->tile_index[it_tile_free].tp_index);
+                }
 
-                                opj_free( l_cstr_index->tile_index);
-                                opj_free( l_cstr_index->marker);
-                                opj_free( l_cstr_index);
-                                return NULL;
-                        }
+                opj_free(l_cstr_index->tile_index);
+                opj_free(l_cstr_index->marker);
+                opj_free(l_cstr_index);
+                return NULL;
+            }
 
-                        if (p_j2k->cstr_index->tile_index[it_tile].tp_index){
-                                memcpy( l_cstr_index->tile_index[it_tile].tp_index,
-                                                p_j2k->cstr_index->tile_index[it_tile].tp_index,
-                                                l_cstr_index->tile_index[it_tile].nb_tps * sizeof(opj_tp_index_t) );
-                        }
-                        else{
-                                opj_free(l_cstr_index->tile_index[it_tile].tp_index);
-                                l_cstr_index->tile_index[it_tile].tp_index = NULL;
-                        }
+            if (p_j2k->cstr_index->tile_index[it_tile].tp_index) {
+                memcpy(l_cstr_index->tile_index[it_tile].tp_index,
+                       p_j2k->cstr_index->tile_index[it_tile].tp_index,
+                       l_cstr_index->tile_index[it_tile].nb_tps * sizeof(opj_tp_index_t));
+            } else {
+                opj_free(l_cstr_index->tile_index[it_tile].tp_index);
+                l_cstr_index->tile_index[it_tile].tp_index = NULL;
+            }
 
-                        /* Packet index (NOT USED)*/
-                        l_cstr_index->tile_index[it_tile].nb_packet = 0;
-                        l_cstr_index->tile_index[it_tile].packet_index = NULL;
+            /* Packet index (NOT USED)*/
+            l_cstr_index->tile_index[it_tile].nb_packet = 0;
+            l_cstr_index->tile_index[it_tile].packet_index = NULL;
 
-                }
         }
+    }
 
-        return l_cstr_index;
+    return l_cstr_index;
 }
 
 static OPJ_BOOL opj_j2k_allocate_tile_element_cstr_index(opj_j2k_t *p_j2k)
 {
-        OPJ_UINT32 it_tile=0;
+    OPJ_UINT32 it_tile = 0;
 
-        p_j2k->cstr_index->nb_of_tiles = p_j2k->m_cp.tw * p_j2k->m_cp.th;
-        p_j2k->cstr_index->tile_index = (opj_tile_index_t*)opj_calloc(p_j2k->cstr_index->nb_of_tiles, sizeof(opj_tile_index_t));
-        if (!p_j2k->cstr_index->tile_index)
-                return OPJ_FALSE;
+    p_j2k->cstr_index->nb_of_tiles = p_j2k->m_cp.tw * p_j2k->m_cp.th;
+    p_j2k->cstr_index->tile_index = (opj_tile_index_t*)opj_calloc(
+                                        p_j2k->cstr_index->nb_of_tiles, sizeof(opj_tile_index_t));
+    if (!p_j2k->cstr_index->tile_index) {
+        return OPJ_FALSE;
+    }
 
-        for (it_tile=0; it_tile < p_j2k->cstr_index->nb_of_tiles; it_tile++){
-                p_j2k->cstr_index->tile_index[it_tile].maxmarknum = 100;
-                p_j2k->cstr_index->tile_index[it_tile].marknum = 0;
-                p_j2k->cstr_index->tile_index[it_tile].marker = (opj_marker_info_t*)
-                                opj_calloc(p_j2k->cstr_index->tile_index[it_tile].maxmarknum, sizeof(opj_marker_info_t));
-                if (!p_j2k->cstr_index->tile_index[it_tile].marker)
-                        return OPJ_FALSE;
+    for (it_tile = 0; it_tile < p_j2k->cstr_index->nb_of_tiles; it_tile++) {
+        p_j2k->cstr_index->tile_index[it_tile].maxmarknum = 100;
+        p_j2k->cstr_index->tile_index[it_tile].marknum = 0;
+        p_j2k->cstr_index->tile_index[it_tile].marker = (opj_marker_info_t*)
+                opj_calloc(p_j2k->cstr_index->tile_index[it_tile].maxmarknum,
+                           sizeof(opj_marker_info_t));
+        if (!p_j2k->cstr_index->tile_index[it_tile].marker) {
+            return OPJ_FALSE;
         }
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_decode_tiles ( opj_j2k_t *p_j2k,
-                                                            opj_stream_private_t *p_stream,
-                                                            opj_event_mgr_t * p_manager)
+static OPJ_BOOL opj_j2k_decode_tiles(opj_j2k_t *p_j2k,
+                                     opj_stream_private_t *p_stream,
+                                     opj_event_mgr_t * p_manager)
 {
-        OPJ_BOOL l_go_on = OPJ_TRUE;
-        OPJ_UINT32 l_current_tile_no;
-        OPJ_UINT32 l_data_size,l_max_data_size;
-        OPJ_INT32 l_tile_x0,l_tile_y0,l_tile_x1,l_tile_y1;
-        OPJ_UINT32 l_nb_comps;
-        OPJ_BYTE * l_current_data;
-        OPJ_UINT32 nr_tiles = 0;
+    OPJ_BOOL l_go_on = OPJ_TRUE;
+    OPJ_UINT32 l_current_tile_no;
+    OPJ_UINT32 l_data_size, l_max_data_size;
+    OPJ_INT32 l_tile_x0, l_tile_y0, l_tile_x1, l_tile_y1;
+    OPJ_UINT32 l_nb_comps;
+    OPJ_BYTE * l_current_data;
+    OPJ_UINT32 nr_tiles = 0;
 
-        l_current_data = (OPJ_BYTE*)opj_malloc(1000);
-        if (! l_current_data) {
-                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to decode tiles\n");
-                return OPJ_FALSE;
+    l_current_data = (OPJ_BYTE*)opj_malloc(1000);
+    if (! l_current_data) {
+        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to decode tiles\n");
+        return OPJ_FALSE;
+    }
+    l_max_data_size = 1000;
+
+    for (;;) {
+        if (! opj_j2k_read_tile_header(p_j2k,
+                                       &l_current_tile_no,
+                                       &l_data_size,
+                                       &l_tile_x0, &l_tile_y0,
+                                       &l_tile_x1, &l_tile_y1,
+                                       &l_nb_comps,
+                                       &l_go_on,
+                                       p_stream,
+                                       p_manager)) {
+            opj_free(l_current_data);
+            return OPJ_FALSE;
         }
-        l_max_data_size = 1000;
-
-               for (;;) {
-                if (! opj_j2k_read_tile_header( p_j2k,
-                                        &l_current_tile_no,
-                                        &l_data_size,
-                                        &l_tile_x0, &l_tile_y0,
-                                        &l_tile_x1, &l_tile_y1,
-                                        &l_nb_comps,
-                                        &l_go_on,
-                                        p_stream,
-                                        p_manager)) {
-                        opj_free(l_current_data);
-                        return OPJ_FALSE;
-                }
 
-                if (! l_go_on) {
-                        break;
-                }
+        if (! l_go_on) {
+            break;
+        }
 
-                if (l_data_size > l_max_data_size) {
-                        OPJ_BYTE *l_new_current_data = (OPJ_BYTE *) opj_realloc(l_current_data, l_data_size);
-                        if (! l_new_current_data) {
-                                opj_free(l_current_data);
-                                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to decode tile %d/%d\n", l_current_tile_no +1, p_j2k->m_cp.th * p_j2k->m_cp.tw);
-                                return OPJ_FALSE;
-                        }
-                        l_current_data = l_new_current_data;
-                        l_max_data_size = l_data_size;
-                }
+        if (l_data_size > l_max_data_size) {
+            OPJ_BYTE *l_new_current_data = (OPJ_BYTE *) opj_realloc(l_current_data,
+                                           l_data_size);
+            if (! l_new_current_data) {
+                opj_free(l_current_data);
+                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to decode tile %d/%d\n",
+                              l_current_tile_no + 1, p_j2k->m_cp.th * p_j2k->m_cp.tw);
+                return OPJ_FALSE;
+            }
+            l_current_data = l_new_current_data;
+            l_max_data_size = l_data_size;
+        }
 
-                if (! opj_j2k_decode_tile(p_j2k,l_current_tile_no,l_current_data,l_data_size,p_stream,p_manager)) {
-                        opj_free(l_current_data);
-                        opj_event_msg(p_manager, EVT_ERROR, "Failed to decode tile %d/%d\n", l_current_tile_no +1, p_j2k->m_cp.th * p_j2k->m_cp.tw);
-                        return OPJ_FALSE;
-                }
-                opj_event_msg(p_manager, EVT_INFO, "Tile %d/%d has been decoded.\n", l_current_tile_no +1, p_j2k->m_cp.th * p_j2k->m_cp.tw);
+        if (! opj_j2k_decode_tile(p_j2k, l_current_tile_no, l_current_data, l_data_size,
+                                  p_stream, p_manager)) {
+            opj_free(l_current_data);
+            opj_event_msg(p_manager, EVT_ERROR, "Failed to decode tile %d/%d\n",
+                          l_current_tile_no + 1, p_j2k->m_cp.th * p_j2k->m_cp.tw);
+            return OPJ_FALSE;
+        }
+        opj_event_msg(p_manager, EVT_INFO, "Tile %d/%d has been decoded.\n",
+                      l_current_tile_no + 1, p_j2k->m_cp.th * p_j2k->m_cp.tw);
 
-                if (! opj_j2k_update_image_data(p_j2k->m_tcd,l_current_data, p_j2k->m_output_image)) {
-                        opj_free(l_current_data);
-                        return OPJ_FALSE;
-                }
-                opj_event_msg(p_manager, EVT_INFO, "Image data has been updated with tile %d.\n\n", l_current_tile_no + 1);
-                
-                if(opj_stream_get_number_byte_left(p_stream) == 0  
-                    && p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_NEOC)
-                    break;
-                if(++nr_tiles ==  p_j2k->m_cp.th * p_j2k->m_cp.tw) 
-                    break;
+        if (! opj_j2k_update_image_data(p_j2k->m_tcd, l_current_data,
+                                        p_j2k->m_output_image)) {
+            opj_free(l_current_data);
+            return OPJ_FALSE;
         }
+        opj_event_msg(p_manager, EVT_INFO,
+                      "Image data has been updated with tile %d.\n\n", l_current_tile_no + 1);
+
+        if (opj_stream_get_number_byte_left(p_stream) == 0
+                && p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_NEOC) {
+            break;
+        }
+        if (++nr_tiles ==  p_j2k->m_cp.th * p_j2k->m_cp.tw) {
+            break;
+        }
+    }
 
-        opj_free(l_current_data);
+    opj_free(l_current_data);
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 /**
  * Sets up the procedures to do on decoding data. Developpers wanting to extend the library can add their own reading procedures.
  */
-static OPJ_BOOL opj_j2k_setup_decoding (opj_j2k_t *p_j2k, opj_event_mgr_t * p_manager)
+static OPJ_BOOL opj_j2k_setup_decoding(opj_j2k_t *p_j2k,
+                                       opj_event_mgr_t * p_manager)
 {
-        /* preconditions*/
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
+    /* preconditions*/
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-        if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)opj_j2k_decode_tiles, p_manager)) {
-                return OPJ_FALSE;
-        }
-        /* DEVELOPER CORNER, add your custom procedures */
+    if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,
+                                           (opj_procedure)opj_j2k_decode_tiles, p_manager)) {
+        return OPJ_FALSE;
+    }
+    /* DEVELOPER CORNER, add your custom procedures */
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 /*
  * Read and decode one tile.
  */
-static OPJ_BOOL opj_j2k_decode_one_tile (       opj_j2k_t *p_j2k,
-                                                                            opj_stream_private_t *p_stream,
-                                                                            opj_event_mgr_t * p_manager)
-{
-        OPJ_BOOL l_go_on = OPJ_TRUE;
-        OPJ_UINT32 l_current_tile_no;
-        OPJ_UINT32 l_tile_no_to_dec;
-        OPJ_UINT32 l_data_size,l_max_data_size;
-        OPJ_INT32 l_tile_x0,l_tile_y0,l_tile_x1,l_tile_y1;
-        OPJ_UINT32 l_nb_comps;
-        OPJ_BYTE * l_current_data;
-
-        l_current_data = (OPJ_BYTE*)opj_malloc(1000);
-        if (! l_current_data) {
-                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to decode one tile\n");
-                return OPJ_FALSE;
-        }
-        l_max_data_size = 1000;
+static OPJ_BOOL opj_j2k_decode_one_tile(opj_j2k_t *p_j2k,
+                                        opj_stream_private_t *p_stream,
+                                        opj_event_mgr_t * p_manager)
+{
+    OPJ_BOOL l_go_on = OPJ_TRUE;
+    OPJ_UINT32 l_current_tile_no;
+    OPJ_UINT32 l_tile_no_to_dec;
+    OPJ_UINT32 l_data_size, l_max_data_size;
+    OPJ_INT32 l_tile_x0, l_tile_y0, l_tile_x1, l_tile_y1;
+    OPJ_UINT32 l_nb_comps;
+    OPJ_BYTE * l_current_data;
+
+    l_current_data = (OPJ_BYTE*)opj_malloc(1000);
+    if (! l_current_data) {
+        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to decode one tile\n");
+        return OPJ_FALSE;
+    }
+    l_max_data_size = 1000;
 
-        /*Allocate and initialize some elements of codestrem index if not already done*/
-        if( !p_j2k->cstr_index->tile_index)
-        {
-                if (!opj_j2k_allocate_tile_element_cstr_index(p_j2k)){
-                        opj_free(l_current_data);
-                        return OPJ_FALSE;
-                }
+    /*Allocate and initialize some elements of codestrem index if not already done*/
+    if (!p_j2k->cstr_index->tile_index) {
+        if (!opj_j2k_allocate_tile_element_cstr_index(p_j2k)) {
+            opj_free(l_current_data);
+            return OPJ_FALSE;
         }
-        /* Move into the codestream to the first SOT used to decode the desired tile */
-        l_tile_no_to_dec = (OPJ_UINT32)p_j2k->m_specific_param.m_decoder.m_tile_ind_to_dec;
-        if (p_j2k->cstr_index->tile_index)
-                if(p_j2k->cstr_index->tile_index->tp_index)
-                {
-                        if ( ! p_j2k->cstr_index->tile_index[l_tile_no_to_dec].nb_tps) {
-                                /* the index for this tile has not been built,
-                                 *  so move to the last SOT read */
-                                if ( !(opj_stream_read_seek(p_stream, p_j2k->m_specific_param.m_decoder.m_last_sot_read_pos+2, p_manager)) ){
-                                        opj_event_msg(p_manager, EVT_ERROR, "Problem with seek function\n");
-                                        opj_free(l_current_data);
-                                        return OPJ_FALSE;
-                                }
-                        }
-                        else{
-                                if ( !(opj_stream_read_seek(p_stream, p_j2k->cstr_index->tile_index[l_tile_no_to_dec].tp_index[0].start_pos+2, p_manager)) ) {
-                                        opj_event_msg(p_manager, EVT_ERROR, "Problem with seek function\n");
-                                        opj_free(l_current_data);
-                                        return OPJ_FALSE;
-                                }
-                        }
-                        /* Special case if we have previously read the EOC marker (if the previous tile getted is the last ) */
-                        if(p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_EOC)
-                                p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_TPHSOT;
+    }
+    /* Move into the codestream to the first SOT used to decode the desired tile */
+    l_tile_no_to_dec = (OPJ_UINT32)
+                       p_j2k->m_specific_param.m_decoder.m_tile_ind_to_dec;
+    if (p_j2k->cstr_index->tile_index)
+        if (p_j2k->cstr_index->tile_index->tp_index) {
+            if (! p_j2k->cstr_index->tile_index[l_tile_no_to_dec].nb_tps) {
+                /* the index for this tile has not been built,
+                 *  so move to the last SOT read */
+                if (!(opj_stream_read_seek(p_stream,
+                                           p_j2k->m_specific_param.m_decoder.m_last_sot_read_pos + 2, p_manager))) {
+                    opj_event_msg(p_manager, EVT_ERROR, "Problem with seek function\n");
+                    opj_free(l_current_data);
+                    return OPJ_FALSE;
                 }
-
-               for (;;) {
-                if (! opj_j2k_read_tile_header( p_j2k,
-                                        &l_current_tile_no,
-                                        &l_data_size,
-                                        &l_tile_x0, &l_tile_y0,
-                                        &l_tile_x1, &l_tile_y1,
-                                        &l_nb_comps,
-                                        &l_go_on,
-                                        p_stream,
-                                        p_manager)) {
-                        opj_free(l_current_data);
-                        return OPJ_FALSE;
+            } else {
+                if (!(opj_stream_read_seek(p_stream,
+                                           p_j2k->cstr_index->tile_index[l_tile_no_to_dec].tp_index[0].start_pos + 2,
+                                           p_manager))) {
+                    opj_event_msg(p_manager, EVT_ERROR, "Problem with seek function\n");
+                    opj_free(l_current_data);
+                    return OPJ_FALSE;
                 }
+            }
+            /* Special case if we have previously read the EOC marker (if the previous tile getted is the last ) */
+            if (p_j2k->m_specific_param.m_decoder.m_state == J2K_STATE_EOC) {
+                p_j2k->m_specific_param.m_decoder.m_state = J2K_STATE_TPHSOT;
+            }
+        }
 
-                if (! l_go_on) {
-                        break;
-                }
+    for (;;) {
+        if (! opj_j2k_read_tile_header(p_j2k,
+                                       &l_current_tile_no,
+                                       &l_data_size,
+                                       &l_tile_x0, &l_tile_y0,
+                                       &l_tile_x1, &l_tile_y1,
+                                       &l_nb_comps,
+                                       &l_go_on,
+                                       p_stream,
+                                       p_manager)) {
+            opj_free(l_current_data);
+            return OPJ_FALSE;
+        }
 
-                if (l_data_size > l_max_data_size) {
-                        OPJ_BYTE *l_new_current_data = (OPJ_BYTE *) opj_realloc(l_current_data, l_data_size);
-                        if (! l_new_current_data) {
-                                opj_free(l_current_data);
-                                l_current_data = NULL;
-                                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to decode tile %d/%d\n", l_current_tile_no+1, p_j2k->m_cp.th * p_j2k->m_cp.tw);
-                                return OPJ_FALSE;
-                        }
-                        l_current_data = l_new_current_data;
-                        l_max_data_size = l_data_size;
-                }
+        if (! l_go_on) {
+            break;
+        }
 
-                if (! opj_j2k_decode_tile(p_j2k,l_current_tile_no,l_current_data,l_data_size,p_stream,p_manager)) {
-                        opj_free(l_current_data);
-                        return OPJ_FALSE;
-                }
-                opj_event_msg(p_manager, EVT_INFO, "Tile %d/%d has been decoded.\n", l_current_tile_no+1, p_j2k->m_cp.th * p_j2k->m_cp.tw);
+        if (l_data_size > l_max_data_size) {
+            OPJ_BYTE *l_new_current_data = (OPJ_BYTE *) opj_realloc(l_current_data,
+                                           l_data_size);
+            if (! l_new_current_data) {
+                opj_free(l_current_data);
+                l_current_data = NULL;
+                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to decode tile %d/%d\n",
+                              l_current_tile_no + 1, p_j2k->m_cp.th * p_j2k->m_cp.tw);
+                return OPJ_FALSE;
+            }
+            l_current_data = l_new_current_data;
+            l_max_data_size = l_data_size;
+        }
 
-                if (! opj_j2k_update_image_data(p_j2k->m_tcd,l_current_data, p_j2k->m_output_image)) {
-                        opj_free(l_current_data);
-                        return OPJ_FALSE;
-                }
-                opj_event_msg(p_manager, EVT_INFO, "Image data has been updated with tile %d.\n\n", l_current_tile_no+1);
-
-                if(l_current_tile_no == l_tile_no_to_dec)
-                {
-                        /* move into the codestream to the first SOT (FIXME or not move?)*/
-                        if (!(opj_stream_read_seek(p_stream, p_j2k->cstr_index->main_head_end + 2, p_manager) ) ) {
-                                opj_event_msg(p_manager, EVT_ERROR, "Problem with seek function\n");
-                                opj_free(l_current_data);
-                                return OPJ_FALSE;
-                        }
-                        break;
-                }
-                else {
-                        opj_event_msg(p_manager, EVT_WARNING, "Tile read, decoded and updated is not the desired one (%d vs %d).\n", l_current_tile_no+1, l_tile_no_to_dec+1);
-                }
+        if (! opj_j2k_decode_tile(p_j2k, l_current_tile_no, l_current_data, l_data_size,
+                                  p_stream, p_manager)) {
+            opj_free(l_current_data);
+            return OPJ_FALSE;
+        }
+        opj_event_msg(p_manager, EVT_INFO, "Tile %d/%d has been decoded.\n",
+                      l_current_tile_no + 1, p_j2k->m_cp.th * p_j2k->m_cp.tw);
 
+        if (! opj_j2k_update_image_data(p_j2k->m_tcd, l_current_data,
+                                        p_j2k->m_output_image)) {
+            opj_free(l_current_data);
+            return OPJ_FALSE;
         }
+        opj_event_msg(p_manager, EVT_INFO,
+                      "Image data has been updated with tile %d.\n\n", l_current_tile_no + 1);
 
-        opj_free(l_current_data);
+        if (l_current_tile_no == l_tile_no_to_dec) {
+            /* move into the codestream to the first SOT (FIXME or not move?)*/
+            if (!(opj_stream_read_seek(p_stream, p_j2k->cstr_index->main_head_end + 2,
+                                       p_manager))) {
+                opj_event_msg(p_manager, EVT_ERROR, "Problem with seek function\n");
+                opj_free(l_current_data);
+                return OPJ_FALSE;
+            }
+            break;
+        } else {
+            opj_event_msg(p_manager, EVT_WARNING,
+                          "Tile read, decoded and updated is not the desired one (%d vs %d).\n",
+                          l_current_tile_no + 1, l_tile_no_to_dec + 1);
+        }
 
-        return OPJ_TRUE;
+    }
+
+    opj_free(l_current_data);
+
+    return OPJ_TRUE;
 }
 
 /**
  * Sets up the procedures to do on decoding one tile. Developpers wanting to extend the library can add their own reading procedures.
  */
-static OPJ_BOOL opj_j2k_setup_decoding_tile (opj_j2k_t *p_j2k, opj_event_mgr_t * p_manager)
+static OPJ_BOOL opj_j2k_setup_decoding_tile(opj_j2k_t *p_j2k,
+        opj_event_mgr_t * p_manager)
 {
-        /* preconditions*/
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
+    /* preconditions*/
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-        if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)opj_j2k_decode_one_tile, p_manager)) {
-                return OPJ_FALSE;
-        }
-        /* DEVELOPER CORNER, add your custom procedures */
+    if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,
+                                           (opj_procedure)opj_j2k_decode_one_tile, p_manager)) {
+        return OPJ_FALSE;
+    }
+    /* DEVELOPER CORNER, add your custom procedures */
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 OPJ_BOOL opj_j2k_decode(opj_j2k_t * p_j2k,
-                                                opj_stream_private_t * p_stream,
-                                                opj_image_t * p_image,
-                                                opj_event_mgr_t * p_manager)
+                        opj_stream_private_t * p_stream,
+                        opj_image_t * p_image,
+                        opj_event_mgr_t * p_manager)
 {
-        OPJ_UINT32 compno;
+    OPJ_UINT32 compno;
 
-        if (!p_image)
-                return OPJ_FALSE;
-       
-        p_j2k->m_output_image = opj_image_create0();
-        if (! (p_j2k->m_output_image)) {
-                return OPJ_FALSE;
-        }
-        opj_copy_image_header(p_image, p_j2k->m_output_image);
+    if (!p_image) {
+        return OPJ_FALSE;
+    }
+
+    p_j2k->m_output_image = opj_image_create0();
+    if (!(p_j2k->m_output_image)) {
+        return OPJ_FALSE;
+    }
+    opj_copy_image_header(p_image, p_j2k->m_output_image);
 
-        /* customization of the decoding */
-        opj_j2k_setup_decoding(p_j2k, p_manager);
+    /* customization of the decoding */
+    opj_j2k_setup_decoding(p_j2k, p_manager);
 
-        /* Decode the codestream */
-        if (! opj_j2k_exec (p_j2k,p_j2k->m_procedure_list,p_stream,p_manager)) {
-                opj_image_destroy(p_j2k->m_private_image);
-                p_j2k->m_private_image = NULL;
-                return OPJ_FALSE;
-        }
+    /* Decode the codestream */
+    if (! opj_j2k_exec(p_j2k, p_j2k->m_procedure_list, p_stream, p_manager)) {
+        opj_image_destroy(p_j2k->m_private_image);
+        p_j2k->m_private_image = NULL;
+        return OPJ_FALSE;
+    }
 
-        /* Move data and copy one information from codec to output image*/
-        for (compno = 0; compno < p_image->numcomps; compno++) {
-                p_image->comps[compno].resno_decoded = p_j2k->m_output_image->comps[compno].resno_decoded;
-                p_image->comps[compno].data = p_j2k->m_output_image->comps[compno].data;
+    /* Move data and copy one information from codec to output image*/
+    for (compno = 0; compno < p_image->numcomps; compno++) {
+        p_image->comps[compno].resno_decoded =
+            p_j2k->m_output_image->comps[compno].resno_decoded;
+        p_image->comps[compno].data = p_j2k->m_output_image->comps[compno].data;
 #if 0
-                char fn[256];
-                sprintf( fn, "/tmp/%d.raw", compno );
-                FILE *debug = fopen( fn, "wb" );
-                fwrite( p_image->comps[compno].data, sizeof(OPJ_INT32), p_image->comps[compno].w * p_image->comps[compno].h, debug );
-                fclose( debug );
+        char fn[256];
+        sprintf(fn, "/tmp/%d.raw", compno);
+        FILE *debug = fopen(fn, "wb");
+        fwrite(p_image->comps[compno].data, sizeof(OPJ_INT32),
+               p_image->comps[compno].w * p_image->comps[compno].h, debug);
+        fclose(debug);
 #endif
-                p_j2k->m_output_image->comps[compno].data = NULL;
-        }
+        p_j2k->m_output_image->comps[compno].data = NULL;
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-OPJ_BOOL opj_j2k_get_tile(      opj_j2k_t *p_j2k,
-                                                    opj_stream_private_t *p_stream,
-                                                    opj_image_t* p_image,
-                                                    opj_event_mgr_t * p_manager,
-                                                    OPJ_UINT32 tile_index )
+OPJ_BOOL opj_j2k_get_tile(opj_j2k_t *p_j2k,
+                          opj_stream_private_t *p_stream,
+                          opj_image_t* p_image,
+                          opj_event_mgr_t * p_manager,
+                          OPJ_UINT32 tile_index)
 {
-        OPJ_UINT32 compno;
-        OPJ_UINT32 l_tile_x, l_tile_y;
-        opj_image_comp_t* l_img_comp;
+    OPJ_UINT32 compno;
+    OPJ_UINT32 l_tile_x, l_tile_y;
+    opj_image_comp_t* l_img_comp;
 
-        if (!p_image) {
-                opj_event_msg(p_manager, EVT_ERROR, "We need an image previously created.\n");
-                return OPJ_FALSE;
-        }
+    if (!p_image) {
+        opj_event_msg(p_manager, EVT_ERROR, "We need an image previously created.\n");
+        return OPJ_FALSE;
+    }
 
-        if ( /*(tile_index < 0) &&*/ (tile_index >= p_j2k->m_cp.tw * p_j2k->m_cp.th) ){
-                opj_event_msg(p_manager, EVT_ERROR, "Tile index provided by the user is incorrect %d (max = %d) \n", tile_index, (p_j2k->m_cp.tw * p_j2k->m_cp.th) - 1);
-                return OPJ_FALSE;
-        }
+    if (/*(tile_index < 0) &&*/ (tile_index >= p_j2k->m_cp.tw * p_j2k->m_cp.th)) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Tile index provided by the user is incorrect %d (max = %d) \n", tile_index,
+                      (p_j2k->m_cp.tw * p_j2k->m_cp.th) - 1);
+        return OPJ_FALSE;
+    }
 
-        /* Compute the dimension of the desired tile*/
-        l_tile_x = tile_index % p_j2k->m_cp.tw;
-        l_tile_y = tile_index / p_j2k->m_cp.tw;
+    /* Compute the dimension of the desired tile*/
+    l_tile_x = tile_index % p_j2k->m_cp.tw;
+    l_tile_y = tile_index / p_j2k->m_cp.tw;
 
-        p_image->x0 = l_tile_x * p_j2k->m_cp.tdx + p_j2k->m_cp.tx0;
-        if (p_image->x0 < p_j2k->m_private_image->x0)
-                p_image->x0 = p_j2k->m_private_image->x0;
-        p_image->x1 = (l_tile_x + 1) * p_j2k->m_cp.tdx + p_j2k->m_cp.tx0;
-        if (p_image->x1 > p_j2k->m_private_image->x1)
-                p_image->x1 = p_j2k->m_private_image->x1;
+    p_image->x0 = l_tile_x * p_j2k->m_cp.tdx + p_j2k->m_cp.tx0;
+    if (p_image->x0 < p_j2k->m_private_image->x0) {
+        p_image->x0 = p_j2k->m_private_image->x0;
+    }
+    p_image->x1 = (l_tile_x + 1) * p_j2k->m_cp.tdx + p_j2k->m_cp.tx0;
+    if (p_image->x1 > p_j2k->m_private_image->x1) {
+        p_image->x1 = p_j2k->m_private_image->x1;
+    }
 
-        p_image->y0 = l_tile_y * p_j2k->m_cp.tdy + p_j2k->m_cp.ty0;
-        if (p_image->y0 < p_j2k->m_private_image->y0)
-                p_image->y0 = p_j2k->m_private_image->y0;
-        p_image->y1 = (l_tile_y + 1) * p_j2k->m_cp.tdy + p_j2k->m_cp.ty0;
-        if (p_image->y1 > p_j2k->m_private_image->y1)
-                p_image->y1 = p_j2k->m_private_image->y1;
+    p_image->y0 = l_tile_y * p_j2k->m_cp.tdy + p_j2k->m_cp.ty0;
+    if (p_image->y0 < p_j2k->m_private_image->y0) {
+        p_image->y0 = p_j2k->m_private_image->y0;
+    }
+    p_image->y1 = (l_tile_y + 1) * p_j2k->m_cp.tdy + p_j2k->m_cp.ty0;
+    if (p_image->y1 > p_j2k->m_private_image->y1) {
+        p_image->y1 = p_j2k->m_private_image->y1;
+    }
 
-        l_img_comp = p_image->comps;
-        for (compno=0; compno < p_image->numcomps; ++compno)
-        {
-                OPJ_INT32 l_comp_x1, l_comp_y1;
+    l_img_comp = p_image->comps;
+    for (compno = 0; compno < p_image->numcomps; ++compno) {
+        OPJ_INT32 l_comp_x1, l_comp_y1;
 
-                l_img_comp->factor = p_j2k->m_private_image->comps[compno].factor;
+        l_img_comp->factor = p_j2k->m_private_image->comps[compno].factor;
 
-                l_img_comp->x0 = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)p_image->x0, (OPJ_INT32)l_img_comp->dx);
-                l_img_comp->y0 = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)p_image->y0, (OPJ_INT32)l_img_comp->dy);
-                l_comp_x1 = opj_int_ceildiv((OPJ_INT32)p_image->x1, (OPJ_INT32)l_img_comp->dx);
-                l_comp_y1 = opj_int_ceildiv((OPJ_INT32)p_image->y1, (OPJ_INT32)l_img_comp->dy);
+        l_img_comp->x0 = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)p_image->x0,
+                         (OPJ_INT32)l_img_comp->dx);
+        l_img_comp->y0 = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)p_image->y0,
+                         (OPJ_INT32)l_img_comp->dy);
+        l_comp_x1 = opj_int_ceildiv((OPJ_INT32)p_image->x1, (OPJ_INT32)l_img_comp->dx);
+        l_comp_y1 = opj_int_ceildiv((OPJ_INT32)p_image->y1, (OPJ_INT32)l_img_comp->dy);
 
-                l_img_comp->w = (OPJ_UINT32)(opj_int_ceildivpow2(l_comp_x1, (OPJ_INT32)l_img_comp->factor) - opj_int_ceildivpow2((OPJ_INT32)l_img_comp->x0, (OPJ_INT32)l_img_comp->factor));
-                l_img_comp->h = (OPJ_UINT32)(opj_int_ceildivpow2(l_comp_y1, (OPJ_INT32)l_img_comp->factor) - opj_int_ceildivpow2((OPJ_INT32)l_img_comp->y0, (OPJ_INT32)l_img_comp->factor));
+        l_img_comp->w = (OPJ_UINT32)(opj_int_ceildivpow2(l_comp_x1,
+                                     (OPJ_INT32)l_img_comp->factor) - opj_int_ceildivpow2((OPJ_INT32)l_img_comp->x0,
+                                             (OPJ_INT32)l_img_comp->factor));
+        l_img_comp->h = (OPJ_UINT32)(opj_int_ceildivpow2(l_comp_y1,
+                                     (OPJ_INT32)l_img_comp->factor) - opj_int_ceildivpow2((OPJ_INT32)l_img_comp->y0,
+                                             (OPJ_INT32)l_img_comp->factor));
 
-                l_img_comp++;
-        }
+        l_img_comp++;
+    }
 
-        /* Destroy the previous output image*/
-        if (p_j2k->m_output_image)
-                opj_image_destroy(p_j2k->m_output_image);
+    /* Destroy the previous output image*/
+    if (p_j2k->m_output_image) {
+        opj_image_destroy(p_j2k->m_output_image);
+    }
 
-        /* Create the ouput image from the information previously computed*/
-        p_j2k->m_output_image = opj_image_create0();
-        if (! (p_j2k->m_output_image)) {
-                return OPJ_FALSE;
-        }
-        opj_copy_image_header(p_image, p_j2k->m_output_image);
+    /* Create the ouput image from the information previously computed*/
+    p_j2k->m_output_image = opj_image_create0();
+    if (!(p_j2k->m_output_image)) {
+        return OPJ_FALSE;
+    }
+    opj_copy_image_header(p_image, p_j2k->m_output_image);
 
-        p_j2k->m_specific_param.m_decoder.m_tile_ind_to_dec = (OPJ_INT32)tile_index;
+    p_j2k->m_specific_param.m_decoder.m_tile_ind_to_dec = (OPJ_INT32)tile_index;
 
-        /* customization of the decoding */
-        opj_j2k_setup_decoding_tile(p_j2k, p_manager);
+    /* customization of the decoding */
+    opj_j2k_setup_decoding_tile(p_j2k, p_manager);
 
-        /* Decode the codestream */
-        if (! opj_j2k_exec (p_j2k,p_j2k->m_procedure_list,p_stream,p_manager)) {
-                opj_image_destroy(p_j2k->m_private_image);
-                p_j2k->m_private_image = NULL;
-                return OPJ_FALSE;
-        }
+    /* Decode the codestream */
+    if (! opj_j2k_exec(p_j2k, p_j2k->m_procedure_list, p_stream, p_manager)) {
+        opj_image_destroy(p_j2k->m_private_image);
+        p_j2k->m_private_image = NULL;
+        return OPJ_FALSE;
+    }
 
-        /* Move data and copy one information from codec to output image*/
-        for (compno = 0; compno < p_image->numcomps; compno++) {
-                p_image->comps[compno].resno_decoded = p_j2k->m_output_image->comps[compno].resno_decoded;
+    /* Move data and copy one information from codec to output image*/
+    for (compno = 0; compno < p_image->numcomps; compno++) {
+        p_image->comps[compno].resno_decoded =
+            p_j2k->m_output_image->comps[compno].resno_decoded;
 
-                if (p_image->comps[compno].data)
-                        opj_free(p_image->comps[compno].data);
+        if (p_image->comps[compno].data) {
+            opj_free(p_image->comps[compno].data);
+        }
 
-                p_image->comps[compno].data = p_j2k->m_output_image->comps[compno].data;
+        p_image->comps[compno].data = p_j2k->m_output_image->comps[compno].data;
 
-                p_j2k->m_output_image->comps[compno].data = NULL;
-        }
+        p_j2k->m_output_image->comps[compno].data = NULL;
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 OPJ_BOOL opj_j2k_set_decoded_resolution_factor(opj_j2k_t *p_j2k,
-                                               OPJ_UINT32 res_factor,
-                                               opj_event_mgr_t * p_manager)
-{
-        OPJ_UINT32 it_comp;
-
-        p_j2k->m_cp.m_specific_param.m_dec.m_reduce = res_factor;
-
-        if (p_j2k->m_private_image) {
-                if (p_j2k->m_private_image->comps) {
-                        if (p_j2k->m_specific_param.m_decoder.m_default_tcp) {
-                                if (p_j2k->m_specific_param.m_decoder.m_default_tcp->tccps) {
-                                        for (it_comp = 0 ; it_comp < p_j2k->m_private_image->numcomps; it_comp++) {
-                                                OPJ_UINT32 max_res = p_j2k->m_specific_param.m_decoder.m_default_tcp->tccps[it_comp].numresolutions;
-                                                if ( res_factor >= max_res){
-                                                        opj_event_msg(p_manager, EVT_ERROR, "Resolution factor is greater than the maximum resolution in the component.\n");
-                                                        return OPJ_FALSE;
-                                                }
-                                                p_j2k->m_private_image->comps[it_comp].factor = res_factor;
-                                        }
-                                        return OPJ_TRUE;
-                                }
+        OPJ_UINT32 res_factor,
+        opj_event_mgr_t * p_manager)
+{
+    OPJ_UINT32 it_comp;
+
+    p_j2k->m_cp.m_specific_param.m_dec.m_reduce = res_factor;
+
+    if (p_j2k->m_private_image) {
+        if (p_j2k->m_private_image->comps) {
+            if (p_j2k->m_specific_param.m_decoder.m_default_tcp) {
+                if (p_j2k->m_specific_param.m_decoder.m_default_tcp->tccps) {
+                    for (it_comp = 0 ; it_comp < p_j2k->m_private_image->numcomps; it_comp++) {
+                        OPJ_UINT32 max_res =
+                            p_j2k->m_specific_param.m_decoder.m_default_tcp->tccps[it_comp].numresolutions;
+                        if (res_factor >= max_res) {
+                            opj_event_msg(p_manager, EVT_ERROR,
+                                          "Resolution factor is greater than the maximum resolution in the component.\n");
+                            return OPJ_FALSE;
                         }
+                        p_j2k->m_private_image->comps[it_comp].factor = res_factor;
+                    }
+                    return OPJ_TRUE;
                 }
+            }
         }
+    }
 
-        return OPJ_FALSE;
+    return OPJ_FALSE;
 }
 
 OPJ_BOOL opj_j2k_encode(opj_j2k_t * p_j2k,
                         opj_stream_private_t *p_stream,
-                        opj_event_mgr_t * p_manager )
-{
-        OPJ_UINT32 i, j;
-        OPJ_UINT32 l_nb_tiles;
-        OPJ_UINT32 l_max_tile_size = 0, l_current_tile_size;
-        OPJ_BYTE * l_current_data = 00;
-        OPJ_BOOL l_reuse_data = OPJ_FALSE;
-        opj_tcd_t* p_tcd = 00;
-
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_stream != 00);
-        assert(p_manager != 00);
-       
-        p_tcd = p_j2k->m_tcd;
-
-        l_nb_tiles = p_j2k->m_cp.th * p_j2k->m_cp.tw;
-        if (l_nb_tiles == 1) {
-                l_reuse_data = OPJ_TRUE;
+                        opj_event_mgr_t * p_manager)
+{
+    OPJ_UINT32 i, j;
+    OPJ_UINT32 l_nb_tiles;
+    OPJ_UINT32 l_max_tile_size = 0, l_current_tile_size;
+    OPJ_BYTE * l_current_data = 00;
+    OPJ_BOOL l_reuse_data = OPJ_FALSE;
+    opj_tcd_t* p_tcd = 00;
+
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_stream != 00);
+    assert(p_manager != 00);
+
+    p_tcd = p_j2k->m_tcd;
+
+    l_nb_tiles = p_j2k->m_cp.th * p_j2k->m_cp.tw;
+    if (l_nb_tiles == 1) {
+        l_reuse_data = OPJ_TRUE;
 #ifdef __SSE__
-                for (j=0;j<p_j2k->m_tcd->image->numcomps;++j) {
-                        opj_image_comp_t * l_img_comp = p_tcd->image->comps + j;
-                        if (((size_t)l_img_comp->data & 0xFU) != 0U) { /* tile data shall be aligned on 16 bytes */
-                                                                                                       l_reuse_data = OPJ_FALSE;
-                        }
-                }
+        for (j = 0; j < p_j2k->m_tcd->image->numcomps; ++j) {
+            opj_image_comp_t * l_img_comp = p_tcd->image->comps + j;
+            if (((size_t)l_img_comp->data & 0xFU) !=
+                    0U) { /* tile data shall be aligned on 16 bytes */
+                l_reuse_data = OPJ_FALSE;
+            }
+        }
 #endif
+    }
+    for (i = 0; i < l_nb_tiles; ++i) {
+        if (! opj_j2k_pre_write_tile(p_j2k, i, p_stream, p_manager)) {
+            if (l_current_data) {
+                opj_free(l_current_data);
+            }
+            return OPJ_FALSE;
         }
-        for (i=0;i<l_nb_tiles;++i) {
-                if (! opj_j2k_pre_write_tile(p_j2k,i,p_stream,p_manager)) {
-                        if (l_current_data) {
-                                opj_free(l_current_data);
-                        }
-                        return OPJ_FALSE;
-                }
 
-                /* if we only have one tile, then simply set tile component data equal to image component data */
-                /* otherwise, allocate the data */
-                for (j=0;j<p_j2k->m_tcd->image->numcomps;++j) {
-                        opj_tcd_tilecomp_t* l_tilec = p_tcd->tcd_image->tiles->comps + j;
-                        if (l_reuse_data) {
-                                                                                                       opj_image_comp_t * l_img_comp = p_tcd->image->comps + j;
-                                                                                                       l_tilec->data  =  l_img_comp->data;
-                                                                                                       l_tilec->ownsData = OPJ_FALSE;
-                        } else {
-                                                                                                       if(! opj_alloc_tile_component_data(l_tilec)) {
-                                                                                                               opj_event_msg(p_manager, EVT_ERROR, "Error allocating tile component data." );
-                                                                                                               if (l_current_data) {
-                                                                                                                       opj_free(l_current_data);
-                                                                                                               }
-                                                                                                               return OPJ_FALSE;
-                                                                                                       }
-                        }
+        /* if we only have one tile, then simply set tile component data equal to image component data */
+        /* otherwise, allocate the data */
+        for (j = 0; j < p_j2k->m_tcd->image->numcomps; ++j) {
+            opj_tcd_tilecomp_t* l_tilec = p_tcd->tcd_image->tiles->comps + j;
+            if (l_reuse_data) {
+                opj_image_comp_t * l_img_comp = p_tcd->image->comps + j;
+                l_tilec->data  =  l_img_comp->data;
+                l_tilec->ownsData = OPJ_FALSE;
+            } else {
+                if (! opj_alloc_tile_component_data(l_tilec)) {
+                    opj_event_msg(p_manager, EVT_ERROR, "Error allocating tile component data.");
+                    if (l_current_data) {
+                        opj_free(l_current_data);
+                    }
+                    return OPJ_FALSE;
                 }
-                l_current_tile_size = opj_tcd_get_encoded_tile_size(p_j2k->m_tcd);
-                if (!l_reuse_data) {
-                        if (l_current_tile_size > l_max_tile_size) {
-                                                                                                       OPJ_BYTE *l_new_current_data = (OPJ_BYTE *) opj_realloc(l_current_data, l_current_tile_size);
-                                                                                                       if (! l_new_current_data) {
-                                                                                                               if (l_current_data) {
-                                                                                                                       opj_free(l_current_data);
-                                                                                                               }
-                                                                                                               opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to encode all tiles\n");
-                                                                                                               return OPJ_FALSE;
-                                                                                                                               }
-                                                                                                                               l_current_data = l_new_current_data;
-                                                                                                                               l_max_tile_size = l_current_tile_size;
-                        }
-
-                        /* copy image data (32 bit) to l_current_data as contiguous, all-component, zero offset buffer */
-                        /* 32 bit components @ 8 bit precision get converted to 8 bit */
-                        /* 32 bit components @ 16 bit precision get converted to 16 bit */
-                        opj_j2k_get_tile_data(p_j2k->m_tcd,l_current_data);
-
-                        /* now copy this data into the tile component */
-                        if (! opj_tcd_copy_tile_data(p_j2k->m_tcd,l_current_data,l_current_tile_size)) {
-                                                                                                                               opj_event_msg(p_manager, EVT_ERROR, "Size mismatch between tile data and sent data." );
-                                                                                                                               opj_free(l_current_data);
-                                                                                                                               return OPJ_FALSE;
-                        }
+            }
+        }
+        l_current_tile_size = opj_tcd_get_encoded_tile_size(p_j2k->m_tcd);
+        if (!l_reuse_data) {
+            if (l_current_tile_size > l_max_tile_size) {
+                OPJ_BYTE *l_new_current_data = (OPJ_BYTE *) opj_realloc(l_current_data,
+                                               l_current_tile_size);
+                if (! l_new_current_data) {
+                    if (l_current_data) {
+                        opj_free(l_current_data);
+                    }
+                    opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to encode all tiles\n");
+                    return OPJ_FALSE;
                 }
+                l_current_data = l_new_current_data;
+                l_max_tile_size = l_current_tile_size;
+            }
 
-                if (! opj_j2k_post_write_tile (p_j2k,p_stream,p_manager)) {
-                        if (l_current_data) {
-                                opj_free(l_current_data);
-                        }
-                        return OPJ_FALSE;
-                }
+            /* copy image data (32 bit) to l_current_data as contiguous, all-component, zero offset buffer */
+            /* 32 bit components @ 8 bit precision get converted to 8 bit */
+            /* 32 bit components @ 16 bit precision get converted to 16 bit */
+            opj_j2k_get_tile_data(p_j2k->m_tcd, l_current_data);
+
+            /* now copy this data into the tile component */
+            if (! opj_tcd_copy_tile_data(p_j2k->m_tcd, l_current_data,
+                                         l_current_tile_size)) {
+                opj_event_msg(p_manager, EVT_ERROR,
+                              "Size mismatch between tile data and sent data.");
+                opj_free(l_current_data);
+                return OPJ_FALSE;
+            }
         }
 
-        if (l_current_data) {
+        if (! opj_j2k_post_write_tile(p_j2k, p_stream, p_manager)) {
+            if (l_current_data) {
                 opj_free(l_current_data);
+            }
+            return OPJ_FALSE;
         }
-        return OPJ_TRUE;
+    }
+
+    if (l_current_data) {
+        opj_free(l_current_data);
+    }
+    return OPJ_TRUE;
 }
 
-OPJ_BOOL opj_j2k_end_compress(  opj_j2k_t *p_j2k,
-                                                        opj_stream_private_t *p_stream,
-                                                        opj_event_mgr_t * p_manager)
+OPJ_BOOL opj_j2k_end_compress(opj_j2k_t *p_j2k,
+                              opj_stream_private_t *p_stream,
+                              opj_event_mgr_t * p_manager)
 {
-        /* customization of the encoding */
-        if (! opj_j2k_setup_end_compress(p_j2k, p_manager)) {
-                return OPJ_FALSE;
-        }
+    /* customization of the encoding */
+    if (! opj_j2k_setup_end_compress(p_j2k, p_manager)) {
+        return OPJ_FALSE;
+    }
 
-        if (! opj_j2k_exec (p_j2k, p_j2k->m_procedure_list, p_stream, p_manager))
-        {
-                return OPJ_FALSE;
-        }
+    if (! opj_j2k_exec(p_j2k, p_j2k->m_procedure_list, p_stream, p_manager)) {
+        return OPJ_FALSE;
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 OPJ_BOOL opj_j2k_start_compress(opj_j2k_t *p_j2k,
-                                                            opj_stream_private_t *p_stream,
-                                                            opj_image_t * p_image,
-                                                            opj_event_mgr_t * p_manager)
-{
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_stream != 00);
-        assert(p_manager != 00);
-
-        p_j2k->m_private_image = opj_image_create0();
-        if (! p_j2k->m_private_image) {
-                opj_event_msg(p_manager, EVT_ERROR, "Failed to allocate image header." );
-                return OPJ_FALSE;
-        }
-        opj_copy_image_header(p_image, p_j2k->m_private_image);
+                                opj_stream_private_t *p_stream,
+                                opj_image_t * p_image,
+                                opj_event_mgr_t * p_manager)
+{
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_stream != 00);
+    assert(p_manager != 00);
 
-        /* TODO_MSD: Find a better way */
-        if (p_image->comps) {
-                OPJ_UINT32 it_comp;
-                for (it_comp = 0 ; it_comp < p_image->numcomps; it_comp++) {
-                        if (p_image->comps[it_comp].data) {
-                                p_j2k->m_private_image->comps[it_comp].data =p_image->comps[it_comp].data;
-                                p_image->comps[it_comp].data = NULL;
+    p_j2k->m_private_image = opj_image_create0();
+    if (! p_j2k->m_private_image) {
+        opj_event_msg(p_manager, EVT_ERROR, "Failed to allocate image header.");
+        return OPJ_FALSE;
+    }
+    opj_copy_image_header(p_image, p_j2k->m_private_image);
 
-                        }
-                }
-        }
+    /* TODO_MSD: Find a better way */
+    if (p_image->comps) {
+        OPJ_UINT32 it_comp;
+        for (it_comp = 0 ; it_comp < p_image->numcomps; it_comp++) {
+            if (p_image->comps[it_comp].data) {
+                p_j2k->m_private_image->comps[it_comp].data = p_image->comps[it_comp].data;
+                p_image->comps[it_comp].data = NULL;
 
-        /* customization of the validation */
-        if (! opj_j2k_setup_encoding_validation (p_j2k, p_manager)) {
-                return OPJ_FALSE;
+            }
         }
+    }
 
-        /* validation of the parameters codec */
-        if (! opj_j2k_exec(p_j2k,p_j2k->m_validation_list,p_stream,p_manager)) {
-                return OPJ_FALSE;
-        }
+    /* customization of the validation */
+    if (! opj_j2k_setup_encoding_validation(p_j2k, p_manager)) {
+        return OPJ_FALSE;
+    }
 
-        /* customization of the encoding */
-        if (! opj_j2k_setup_header_writing(p_j2k, p_manager)) {
-                return OPJ_FALSE;
-        }
+    /* validation of the parameters codec */
+    if (! opj_j2k_exec(p_j2k, p_j2k->m_validation_list, p_stream, p_manager)) {
+        return OPJ_FALSE;
+    }
 
-        /* write header */
-        if (! opj_j2k_exec (p_j2k,p_j2k->m_procedure_list,p_stream,p_manager)) {
-                return OPJ_FALSE;
-        }
+    /* customization of the encoding */
+    if (! opj_j2k_setup_header_writing(p_j2k, p_manager)) {
+        return OPJ_FALSE;
+    }
 
-        return OPJ_TRUE;
+    /* write header */
+    if (! opj_j2k_exec(p_j2k, p_j2k->m_procedure_list, p_stream, p_manager)) {
+        return OPJ_FALSE;
+    }
+
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_pre_write_tile (       opj_j2k_t * p_j2k,
-                                                                OPJ_UINT32 p_tile_index,
-                                                                opj_stream_private_t *p_stream,
-                                                                opj_event_mgr_t * p_manager )
+static OPJ_BOOL opj_j2k_pre_write_tile(opj_j2k_t * p_j2k,
+                                       OPJ_UINT32 p_tile_index,
+                                       opj_stream_private_t *p_stream,
+                                       opj_event_mgr_t * p_manager)
 {
-  (void)p_stream;
-        if (p_tile_index != p_j2k->m_current_tile_number) {
-                opj_event_msg(p_manager, EVT_ERROR, "The given tile index does not match." );
-                return OPJ_FALSE;
-        }
+    (void)p_stream;
+    if (p_tile_index != p_j2k->m_current_tile_number) {
+        opj_event_msg(p_manager, EVT_ERROR, "The given tile index does not match.");
+        return OPJ_FALSE;
+    }
 
-        opj_event_msg(p_manager, EVT_INFO, "tile number %d / %d\n", p_j2k->m_current_tile_number + 1, p_j2k->m_cp.tw * p_j2k->m_cp.th);
+    opj_event_msg(p_manager, EVT_INFO, "tile number %d / %d\n",
+                  p_j2k->m_current_tile_number + 1, p_j2k->m_cp.tw * p_j2k->m_cp.th);
 
-        p_j2k->m_specific_param.m_encoder.m_current_tile_part_number = 0;
-        p_j2k->m_tcd->cur_totnum_tp = p_j2k->m_cp.tcps[p_tile_index].m_nb_tile_parts;
-        p_j2k->m_specific_param.m_encoder.m_current_poc_tile_part_number = 0;
+    p_j2k->m_specific_param.m_encoder.m_current_tile_part_number = 0;
+    p_j2k->m_tcd->cur_totnum_tp = p_j2k->m_cp.tcps[p_tile_index].m_nb_tile_parts;
+    p_j2k->m_specific_param.m_encoder.m_current_poc_tile_part_number = 0;
 
-        /* initialisation before tile encoding  */
-        if (! opj_tcd_init_encode_tile(p_j2k->m_tcd, p_j2k->m_current_tile_number, p_manager)) {
-                return OPJ_FALSE;
-        }
+    /* initialisation before tile encoding  */
+    if (! opj_tcd_init_encode_tile(p_j2k->m_tcd, p_j2k->m_current_tile_number,
+                                   p_manager)) {
+        return OPJ_FALSE;
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 static void opj_get_tile_dimensions(opj_image_t * l_image,
-                             opj_tcd_tilecomp_t * l_tilec,
-                             opj_image_comp_t * l_img_comp,
-                             OPJ_UINT32* l_size_comp,
-                             OPJ_UINT32* l_width,
-                             OPJ_UINT32* l_height,
-                             OPJ_UINT32* l_offset_x,
-                             OPJ_UINT32* l_offset_y,
-                             OPJ_UINT32* l_image_width,
-                             OPJ_UINT32* l_stride,
-                             OPJ_UINT32* l_tile_offset) {
-       OPJ_UINT32 l_remaining;
-       *l_size_comp = l_img_comp->prec >> 3; /* (/8) */
-       l_remaining = l_img_comp->prec & 7;  /* (%8) */
-       if (l_remaining) {
-               *l_size_comp += 1;
-       }
-
-       if (*l_size_comp == 3) {
-               *l_size_comp = 4;
-       }
-
-       *l_width  = (OPJ_UINT32)(l_tilec->x1 - l_tilec->x0);
-       *l_height = (OPJ_UINT32)(l_tilec->y1 - l_tilec->y0);
-       *l_offset_x = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)l_image->x0, (OPJ_INT32)l_img_comp->dx);
-       *l_offset_y = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)l_image->y0, (OPJ_INT32)l_img_comp->dy);
-       *l_image_width = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)l_image->x1 - (OPJ_INT32)l_image->x0, (OPJ_INT32)l_img_comp->dx);
-       *l_stride = *l_image_width - *l_width;
-       *l_tile_offset = ((OPJ_UINT32)l_tilec->x0 - *l_offset_x) + ((OPJ_UINT32)l_tilec->y0 - *l_offset_y) * *l_image_width;
-}
-
-static void opj_j2k_get_tile_data (opj_tcd_t * p_tcd, OPJ_BYTE * p_data)
-{
-        OPJ_UINT32 i,j,k = 0;
-
-        for (i=0;i<p_tcd->image->numcomps;++i) {
-                opj_image_t * l_image =  p_tcd->image;
-                OPJ_INT32 * l_src_ptr;
-                opj_tcd_tilecomp_t * l_tilec = p_tcd->tcd_image->tiles->comps + i;
-                opj_image_comp_t * l_img_comp = l_image->comps + i;
-                OPJ_UINT32 l_size_comp,l_width,l_height,l_offset_x,l_offset_y, l_image_width,l_stride,l_tile_offset;
-
-                opj_get_tile_dimensions(l_image,
-                                        l_tilec,
-                                        l_img_comp,
-                                        &l_size_comp,
-                                        &l_width,
-                                        &l_height,
-                                        &l_offset_x,
-                                        &l_offset_y,
-                                        &l_image_width,
-                                        &l_stride,
-                                        &l_tile_offset);
-
-                l_src_ptr = l_img_comp->data + l_tile_offset;
-
-                switch (l_size_comp) {
-                        case 1:
-                                {
-                                        OPJ_CHAR * l_dest_ptr = (OPJ_CHAR*) p_data;
-                                        if (l_img_comp->sgnd) {
-                                                for     (j=0;j<l_height;++j) {
-                                                        for (k=0;k<l_width;++k) {
-                                                                *(l_dest_ptr) = (OPJ_CHAR) (*l_src_ptr);
-                                                                ++l_dest_ptr;
-                                                                ++l_src_ptr;
-                                                        }
-                                                        l_src_ptr += l_stride;
-                                                }
-                                        }
-                                        else {
-                                                for (j=0;j<l_height;++j) {
-                                                        for (k=0;k<l_width;++k) {
-                                                                *(l_dest_ptr) = (OPJ_CHAR)((*l_src_ptr)&0xff);
-                                                                ++l_dest_ptr;
-                                                                ++l_src_ptr;
-                                                        }
-                                                        l_src_ptr += l_stride;
-                                                }
-                                        }
-
-                                        p_data = (OPJ_BYTE*) l_dest_ptr;
-                                }
-                                break;
-                        case 2:
-                                {
-                                        OPJ_INT16 * l_dest_ptr = (OPJ_INT16 *) p_data;
-                                        if (l_img_comp->sgnd) {
-                                                for (j=0;j<l_height;++j) {
-                                                        for (k=0;k<l_width;++k) {
-                                                                *(l_dest_ptr++) = (OPJ_INT16) (*(l_src_ptr++));
-                                                        }
-                                                        l_src_ptr += l_stride;
-                                                }
-                                        }
-                                        else {
-                                                for (j=0;j<l_height;++j) {
-                                                        for (k=0;k<l_width;++k) {
-                                                                *(l_dest_ptr++) = (OPJ_INT16)((*(l_src_ptr++)) & 0xffff);
-                                                        }
-                                                        l_src_ptr += l_stride;
-                                                }
-                                        }
-
-                                        p_data = (OPJ_BYTE*) l_dest_ptr;
-                                }
-                                break;
-                        case 4:
-                                {
-                                        OPJ_INT32 * l_dest_ptr = (OPJ_INT32 *) p_data;
-                                        for (j=0;j<l_height;++j) {
-                                                for (k=0;k<l_width;++k) {
-                                                        *(l_dest_ptr++) = *(l_src_ptr++);
-                                                }
-                                                l_src_ptr += l_stride;
-                                        }
-
-                                        p_data = (OPJ_BYTE*) l_dest_ptr;
-                                }
-                                break;
+                                    opj_tcd_tilecomp_t * l_tilec,
+                                    opj_image_comp_t * l_img_comp,
+                                    OPJ_UINT32* l_size_comp,
+                                    OPJ_UINT32* l_width,
+                                    OPJ_UINT32* l_height,
+                                    OPJ_UINT32* l_offset_x,
+                                    OPJ_UINT32* l_offset_y,
+                                    OPJ_UINT32* l_image_width,
+                                    OPJ_UINT32* l_stride,
+                                    OPJ_UINT32* l_tile_offset)
+{
+    OPJ_UINT32 l_remaining;
+    *l_size_comp = l_img_comp->prec >> 3; /* (/8) */
+    l_remaining = l_img_comp->prec & 7;  /* (%8) */
+    if (l_remaining) {
+        *l_size_comp += 1;
+    }
+
+    if (*l_size_comp == 3) {
+        *l_size_comp = 4;
+    }
+
+    *l_width  = (OPJ_UINT32)(l_tilec->x1 - l_tilec->x0);
+    *l_height = (OPJ_UINT32)(l_tilec->y1 - l_tilec->y0);
+    *l_offset_x = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)l_image->x0,
+                  (OPJ_INT32)l_img_comp->dx);
+    *l_offset_y = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)l_image->y0,
+                  (OPJ_INT32)l_img_comp->dy);
+    *l_image_width = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)l_image->x1 -
+                     (OPJ_INT32)l_image->x0, (OPJ_INT32)l_img_comp->dx);
+    *l_stride = *l_image_width - *l_width;
+    *l_tile_offset = ((OPJ_UINT32)l_tilec->x0 - *l_offset_x) + ((
+                         OPJ_UINT32)l_tilec->y0 - *l_offset_y) * *l_image_width;
+}
+
+static void opj_j2k_get_tile_data(opj_tcd_t * p_tcd, OPJ_BYTE * p_data)
+{
+    OPJ_UINT32 i, j, k = 0;
+
+    for (i = 0; i < p_tcd->image->numcomps; ++i) {
+        opj_image_t * l_image =  p_tcd->image;
+        OPJ_INT32 * l_src_ptr;
+        opj_tcd_tilecomp_t * l_tilec = p_tcd->tcd_image->tiles->comps + i;
+        opj_image_comp_t * l_img_comp = l_image->comps + i;
+        OPJ_UINT32 l_size_comp, l_width, l_height, l_offset_x, l_offset_y,
+                   l_image_width, l_stride, l_tile_offset;
+
+        opj_get_tile_dimensions(l_image,
+                                l_tilec,
+                                l_img_comp,
+                                &l_size_comp,
+                                &l_width,
+                                &l_height,
+                                &l_offset_x,
+                                &l_offset_y,
+                                &l_image_width,
+                                &l_stride,
+                                &l_tile_offset);
+
+        l_src_ptr = l_img_comp->data + l_tile_offset;
+
+        switch (l_size_comp) {
+        case 1: {
+            OPJ_CHAR * l_dest_ptr = (OPJ_CHAR*) p_data;
+            if (l_img_comp->sgnd) {
+                for (j = 0; j < l_height; ++j) {
+                    for (k = 0; k < l_width; ++k) {
+                        *(l_dest_ptr) = (OPJ_CHAR)(*l_src_ptr);
+                        ++l_dest_ptr;
+                        ++l_src_ptr;
+                    }
+                    l_src_ptr += l_stride;
+                }
+            } else {
+                for (j = 0; j < l_height; ++j) {
+                    for (k = 0; k < l_width; ++k) {
+                        *(l_dest_ptr) = (OPJ_CHAR)((*l_src_ptr) & 0xff);
+                        ++l_dest_ptr;
+                        ++l_src_ptr;
+                    }
+                    l_src_ptr += l_stride;
+                }
+            }
+
+            p_data = (OPJ_BYTE*) l_dest_ptr;
+        }
+        break;
+        case 2: {
+            OPJ_INT16 * l_dest_ptr = (OPJ_INT16 *) p_data;
+            if (l_img_comp->sgnd) {
+                for (j = 0; j < l_height; ++j) {
+                    for (k = 0; k < l_width; ++k) {
+                        *(l_dest_ptr++) = (OPJ_INT16)(*(l_src_ptr++));
+                    }
+                    l_src_ptr += l_stride;
+                }
+            } else {
+                for (j = 0; j < l_height; ++j) {
+                    for (k = 0; k < l_width; ++k) {
+                        *(l_dest_ptr++) = (OPJ_INT16)((*(l_src_ptr++)) & 0xffff);
+                    }
+                    l_src_ptr += l_stride;
+                }
+            }
+
+            p_data = (OPJ_BYTE*) l_dest_ptr;
+        }
+        break;
+        case 4: {
+            OPJ_INT32 * l_dest_ptr = (OPJ_INT32 *) p_data;
+            for (j = 0; j < l_height; ++j) {
+                for (k = 0; k < l_width; ++k) {
+                    *(l_dest_ptr++) = *(l_src_ptr++);
                 }
+                l_src_ptr += l_stride;
+            }
+
+            p_data = (OPJ_BYTE*) l_dest_ptr;
+        }
+        break;
         }
+    }
 }
 
-static OPJ_BOOL opj_j2k_post_write_tile (      opj_j2k_t * p_j2k,
-                                                                opj_stream_private_t *p_stream,
-                                                                opj_event_mgr_t * p_manager )
+static OPJ_BOOL opj_j2k_post_write_tile(opj_j2k_t * p_j2k,
+                                        opj_stream_private_t *p_stream,
+                                        opj_event_mgr_t * p_manager)
 {
-        OPJ_UINT32 l_nb_bytes_written;
-        OPJ_BYTE * l_current_data = 00;
-        OPJ_UINT32 l_tile_size = 0;
-        OPJ_UINT32 l_available_data;
+    OPJ_UINT32 l_nb_bytes_written;
+    OPJ_BYTE * l_current_data = 00;
+    OPJ_UINT32 l_tile_size = 0;
+    OPJ_UINT32 l_available_data;
 
-        /* preconditions */
-        assert(p_j2k->m_specific_param.m_encoder.m_encoded_tile_data);
+    /* preconditions */
+    assert(p_j2k->m_specific_param.m_encoder.m_encoded_tile_data);
 
-        l_tile_size = p_j2k->m_specific_param.m_encoder.m_encoded_tile_size;
-        l_available_data = l_tile_size;
-        l_current_data = p_j2k->m_specific_param.m_encoder.m_encoded_tile_data;
+    l_tile_size = p_j2k->m_specific_param.m_encoder.m_encoded_tile_size;
+    l_available_data = l_tile_size;
+    l_current_data = p_j2k->m_specific_param.m_encoder.m_encoded_tile_data;
 
-        l_nb_bytes_written = 0;
-        if (! opj_j2k_write_first_tile_part(p_j2k,l_current_data,&l_nb_bytes_written,l_available_data,p_stream,p_manager)) {
-                return OPJ_FALSE;
-        }
-        l_current_data += l_nb_bytes_written;
-        l_available_data -= l_nb_bytes_written;
+    l_nb_bytes_written = 0;
+    if (! opj_j2k_write_first_tile_part(p_j2k, l_current_data, &l_nb_bytes_written,
+                                        l_available_data, p_stream, p_manager)) {
+        return OPJ_FALSE;
+    }
+    l_current_data += l_nb_bytes_written;
+    l_available_data -= l_nb_bytes_written;
 
-        l_nb_bytes_written = 0;
-        if (! opj_j2k_write_all_tile_parts(p_j2k,l_current_data,&l_nb_bytes_written,l_available_data,p_stream,p_manager)) {
-                return OPJ_FALSE;
-        }
+    l_nb_bytes_written = 0;
+    if (! opj_j2k_write_all_tile_parts(p_j2k, l_current_data, &l_nb_bytes_written,
+                                       l_available_data, p_stream, p_manager)) {
+        return OPJ_FALSE;
+    }
 
-        l_available_data -= l_nb_bytes_written;
-        l_nb_bytes_written = l_tile_size - l_available_data;
+    l_available_data -= l_nb_bytes_written;
+    l_nb_bytes_written = l_tile_size - l_available_data;
 
-        if ( opj_stream_write_data(     p_stream,
-                                                                p_j2k->m_specific_param.m_encoder.m_encoded_tile_data,
-                                                                l_nb_bytes_written,p_manager) != l_nb_bytes_written) {
-                return OPJ_FALSE;
-        }
+    if (opj_stream_write_data(p_stream,
+                              p_j2k->m_specific_param.m_encoder.m_encoded_tile_data,
+                              l_nb_bytes_written, p_manager) != l_nb_bytes_written) {
+        return OPJ_FALSE;
+    }
 
-        ++p_j2k->m_current_tile_number;
+    ++p_j2k->m_current_tile_number;
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_setup_end_compress (opj_j2k_t *p_j2k, opj_event_mgr_t * p_manager)
+static OPJ_BOOL opj_j2k_setup_end_compress(opj_j2k_t *p_j2k,
+        opj_event_mgr_t * p_manager)
 {
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-        /* DEVELOPER CORNER, insert your custom procedures */
-        if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)opj_j2k_write_eoc, p_manager)) {
-                return OPJ_FALSE;
-        }
+    /* DEVELOPER CORNER, insert your custom procedures */
+    if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,
+                                           (opj_procedure)opj_j2k_write_eoc, p_manager)) {
+        return OPJ_FALSE;
+    }
 
-        if (OPJ_IS_CINEMA(p_j2k->m_cp.rsiz)) {
-                if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)opj_j2k_write_updated_tlm, p_manager)) {
-                        return OPJ_FALSE;
-                }
+    if (OPJ_IS_CINEMA(p_j2k->m_cp.rsiz)) {
+        if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,
+                                               (opj_procedure)opj_j2k_write_updated_tlm, p_manager)) {
+            return OPJ_FALSE;
         }
+    }
 
-        if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)opj_j2k_write_epc, p_manager)) {
-                return OPJ_FALSE;
-        }
-        if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)opj_j2k_end_encoding, p_manager)) {
-                return OPJ_FALSE;
-        }
-        if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)opj_j2k_destroy_header_memory, p_manager)) {
-                return OPJ_FALSE;
-        }
-        return OPJ_TRUE;
+    if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,
+                                           (opj_procedure)opj_j2k_write_epc, p_manager)) {
+        return OPJ_FALSE;
+    }
+    if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,
+                                           (opj_procedure)opj_j2k_end_encoding, p_manager)) {
+        return OPJ_FALSE;
+    }
+    if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,
+                                           (opj_procedure)opj_j2k_destroy_header_memory, p_manager)) {
+        return OPJ_FALSE;
+    }
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_setup_encoding_validation (opj_j2k_t *p_j2k, opj_event_mgr_t * p_manager)
+static OPJ_BOOL opj_j2k_setup_encoding_validation(opj_j2k_t *p_j2k,
+        opj_event_mgr_t * p_manager)
 {
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-        if (! opj_procedure_list_add_procedure(p_j2k->m_validation_list, (opj_procedure)opj_j2k_build_encoder, p_manager)) {
-                return OPJ_FALSE;
-        }
-        if (! opj_procedure_list_add_procedure(p_j2k->m_validation_list, (opj_procedure)opj_j2k_encoding_validation, p_manager)) {
-                return OPJ_FALSE;
-                               }
+    if (! opj_procedure_list_add_procedure(p_j2k->m_validation_list,
+                                           (opj_procedure)opj_j2k_build_encoder, p_manager)) {
+        return OPJ_FALSE;
+    }
+    if (! opj_procedure_list_add_procedure(p_j2k->m_validation_list,
+                                           (opj_procedure)opj_j2k_encoding_validation, p_manager)) {
+        return OPJ_FALSE;
+    }
 
-        /* DEVELOPER CORNER, add your custom validation procedure */
-        if (! opj_procedure_list_add_procedure(p_j2k->m_validation_list, (opj_procedure)opj_j2k_mct_validation, p_manager)) {
-                return OPJ_FALSE;
-        }
-       
-        return OPJ_TRUE;
+    /* DEVELOPER CORNER, add your custom validation procedure */
+    if (! opj_procedure_list_add_procedure(p_j2k->m_validation_list,
+                                           (opj_procedure)opj_j2k_mct_validation, p_manager)) {
+        return OPJ_FALSE;
+    }
+
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_setup_header_writing (opj_j2k_t *p_j2k, opj_event_mgr_t * p_manager)
+static OPJ_BOOL opj_j2k_setup_header_writing(opj_j2k_t *p_j2k,
+        opj_event_mgr_t * p_manager)
 {
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-
-        if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)opj_j2k_init_info, p_manager)) {
-                return OPJ_FALSE;
-        }
-        if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)opj_j2k_write_soc, p_manager)) {
-                return OPJ_FALSE;
-        }
-        if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)opj_j2k_write_siz, p_manager)) {
-                return OPJ_FALSE;
-        }
-        if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)opj_j2k_write_cod, p_manager)) {
-                return OPJ_FALSE;
-        }
-        if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)opj_j2k_write_qcd, p_manager)) {
-                return OPJ_FALSE;
-        }
-        if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)opj_j2k_write_all_coc, p_manager)) {
-                return OPJ_FALSE;
-        }
-        if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)opj_j2k_write_all_qcc, p_manager)) {
-                return OPJ_FALSE;
-        }
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
 
-        if (OPJ_IS_CINEMA(p_j2k->m_cp.rsiz)) {
-                if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)opj_j2k_write_tlm, p_manager)) {
-                        return OPJ_FALSE;
-                }
+    if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,
+                                           (opj_procedure)opj_j2k_init_info, p_manager)) {
+        return OPJ_FALSE;
+    }
+    if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,
+                                           (opj_procedure)opj_j2k_write_soc, p_manager)) {
+        return OPJ_FALSE;
+    }
+    if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,
+                                           (opj_procedure)opj_j2k_write_siz, p_manager)) {
+        return OPJ_FALSE;
+    }
+    if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,
+                                           (opj_procedure)opj_j2k_write_cod, p_manager)) {
+        return OPJ_FALSE;
+    }
+    if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,
+                                           (opj_procedure)opj_j2k_write_qcd, p_manager)) {
+        return OPJ_FALSE;
+    }
+    if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,
+                                           (opj_procedure)opj_j2k_write_all_coc, p_manager)) {
+        return OPJ_FALSE;
+    }
+    if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,
+                                           (opj_procedure)opj_j2k_write_all_qcc, p_manager)) {
+        return OPJ_FALSE;
+    }
 
-                if (p_j2k->m_cp.rsiz == OPJ_PROFILE_CINEMA_4K) {
-                        if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)opj_j2k_write_poc, p_manager)) {
-                                return OPJ_FALSE;
-                        }
-                }
+    if (OPJ_IS_CINEMA(p_j2k->m_cp.rsiz)) {
+        if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,
+                                               (opj_procedure)opj_j2k_write_tlm, p_manager)) {
+            return OPJ_FALSE;
         }
 
-        if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)opj_j2k_write_regions, p_manager)) {
+        if (p_j2k->m_cp.rsiz == OPJ_PROFILE_CINEMA_4K) {
+            if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,
+                                                   (opj_procedure)opj_j2k_write_poc, p_manager)) {
                 return OPJ_FALSE;
+            }
         }
+    }
 
-        if (p_j2k->m_cp.comment != 00)  {
-                if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)opj_j2k_write_com, p_manager)) {
-                        return OPJ_FALSE;
-                }
-        }
+    if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,
+                                           (opj_procedure)opj_j2k_write_regions, p_manager)) {
+        return OPJ_FALSE;
+    }
 
-        /* DEVELOPER CORNER, insert your custom procedures */
-        if (p_j2k->m_cp.rsiz & OPJ_EXTENSION_MCT) {
-                if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)opj_j2k_write_mct_data_group, p_manager)) {
-                        return OPJ_FALSE;
-                }
+    if (p_j2k->m_cp.comment != 00)  {
+        if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,
+                                               (opj_procedure)opj_j2k_write_com, p_manager)) {
+            return OPJ_FALSE;
         }
-        /* End of Developer Corner */
+    }
 
-        if (p_j2k->cstr_index) {
-                if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)opj_j2k_get_end_header, p_manager)) {
-                        return OPJ_FALSE;
-                }
+    /* DEVELOPER CORNER, insert your custom procedures */
+    if (p_j2k->m_cp.rsiz & OPJ_EXTENSION_MCT) {
+        if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,
+                                               (opj_procedure)opj_j2k_write_mct_data_group, p_manager)) {
+            return OPJ_FALSE;
         }
+    }
+    /* End of Developer Corner */
 
-        if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)opj_j2k_create_tcd, p_manager)) {
-                return OPJ_FALSE;
-        }
-        if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,(opj_procedure)opj_j2k_update_rates, p_manager)) {
-                return OPJ_FALSE;
+    if (p_j2k->cstr_index) {
+        if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,
+                                               (opj_procedure)opj_j2k_get_end_header, p_manager)) {
+            return OPJ_FALSE;
         }
+    }
 
-        return OPJ_TRUE;
+    if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,
+                                           (opj_procedure)opj_j2k_create_tcd, p_manager)) {
+        return OPJ_FALSE;
+    }
+    if (! opj_procedure_list_add_procedure(p_j2k->m_procedure_list,
+                                           (opj_procedure)opj_j2k_update_rates, p_manager)) {
+        return OPJ_FALSE;
+    }
+
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_write_first_tile_part (opj_j2k_t *p_j2k,
-                                                                        OPJ_BYTE * p_data,
-                                                                        OPJ_UINT32 * p_data_written,
-                                                                        OPJ_UINT32 p_total_data_size,
-                                                                        opj_stream_private_t *p_stream,
-                                                                        struct opj_event_mgr * p_manager )
+static OPJ_BOOL opj_j2k_write_first_tile_part(opj_j2k_t *p_j2k,
+        OPJ_BYTE * p_data,
+        OPJ_UINT32 * p_data_written,
+        OPJ_UINT32 p_total_data_size,
+        opj_stream_private_t *p_stream,
+        struct opj_event_mgr * p_manager)
 {
-        OPJ_UINT32 l_nb_bytes_written = 0;
-        OPJ_UINT32 l_current_nb_bytes_written;
-        OPJ_BYTE * l_begin_data = 00;
+    OPJ_UINT32 l_nb_bytes_written = 0;
+    OPJ_UINT32 l_current_nb_bytes_written;
+    OPJ_BYTE * l_begin_data = 00;
 
-        opj_tcd_t * l_tcd = 00;
-        opj_cp_t * l_cp = 00;
+    opj_tcd_t * l_tcd = 00;
+    opj_cp_t * l_cp = 00;
 
-        l_tcd = p_j2k->m_tcd;
-        l_cp = &(p_j2k->m_cp);
+    l_tcd = p_j2k->m_tcd;
+    l_cp = &(p_j2k->m_cp);
 
-        l_tcd->cur_pino = 0;
+    l_tcd->cur_pino = 0;
 
-        /*Get number of tile parts*/
-        p_j2k->m_specific_param.m_encoder.m_current_poc_tile_part_number = 0;
+    /*Get number of tile parts*/
+    p_j2k->m_specific_param.m_encoder.m_current_poc_tile_part_number = 0;
 
-        /* INDEX >> */
-        /* << INDEX */
+    /* INDEX >> */
+    /* << INDEX */
 
-        l_current_nb_bytes_written = 0;
-        l_begin_data = p_data;
-        if (! opj_j2k_write_sot(p_j2k,p_data,&l_current_nb_bytes_written,p_stream,p_manager))
-        {
-                return OPJ_FALSE;
-        }
+    l_current_nb_bytes_written = 0;
+    l_begin_data = p_data;
+    if (! opj_j2k_write_sot(p_j2k, p_data, &l_current_nb_bytes_written, p_stream,
+                            p_manager)) {
+        return OPJ_FALSE;
+    }
 
-        l_nb_bytes_written += l_current_nb_bytes_written;
-        p_data += l_current_nb_bytes_written;
-        p_total_data_size -= l_current_nb_bytes_written;
+    l_nb_bytes_written += l_current_nb_bytes_written;
+    p_data += l_current_nb_bytes_written;
+    p_total_data_size -= l_current_nb_bytes_written;
 
-        if (!OPJ_IS_CINEMA(l_cp->rsiz)) {
+    if (!OPJ_IS_CINEMA(l_cp->rsiz)) {
 #if 0
-                for (compno = 1; compno < p_j2k->m_private_image->numcomps; compno++) {
-                        l_current_nb_bytes_written = 0;
-                        opj_j2k_write_coc_in_memory(p_j2k,compno,p_data,&l_current_nb_bytes_written,p_manager);
-                        l_nb_bytes_written += l_current_nb_bytes_written;
-                        p_data += l_current_nb_bytes_written;
-                        p_total_data_size -= l_current_nb_bytes_written;
-
-                        l_current_nb_bytes_written = 0;
-                        opj_j2k_write_qcc_in_memory(p_j2k,compno,p_data,&l_current_nb_bytes_written,p_manager);
-                        l_nb_bytes_written += l_current_nb_bytes_written;
-                        p_data += l_current_nb_bytes_written;
-                        p_total_data_size -= l_current_nb_bytes_written;
-                }
+        for (compno = 1; compno < p_j2k->m_private_image->numcomps; compno++) {
+            l_current_nb_bytes_written = 0;
+            opj_j2k_write_coc_in_memory(p_j2k, compno, p_data, &l_current_nb_bytes_written,
+                                        p_manager);
+            l_nb_bytes_written += l_current_nb_bytes_written;
+            p_data += l_current_nb_bytes_written;
+            p_total_data_size -= l_current_nb_bytes_written;
+
+            l_current_nb_bytes_written = 0;
+            opj_j2k_write_qcc_in_memory(p_j2k, compno, p_data, &l_current_nb_bytes_written,
+                                        p_manager);
+            l_nb_bytes_written += l_current_nb_bytes_written;
+            p_data += l_current_nb_bytes_written;
+            p_total_data_size -= l_current_nb_bytes_written;
+        }
 #endif
-                if (l_cp->tcps[p_j2k->m_current_tile_number].numpocs) {
-                        l_current_nb_bytes_written = 0;
-                        opj_j2k_write_poc_in_memory(p_j2k,p_data,&l_current_nb_bytes_written,p_manager);
-                        l_nb_bytes_written += l_current_nb_bytes_written;
-                        p_data += l_current_nb_bytes_written;
-                        p_total_data_size -= l_current_nb_bytes_written;
-                }
+        if (l_cp->tcps[p_j2k->m_current_tile_number].numpocs) {
+            l_current_nb_bytes_written = 0;
+            opj_j2k_write_poc_in_memory(p_j2k, p_data, &l_current_nb_bytes_written,
+                                        p_manager);
+            l_nb_bytes_written += l_current_nb_bytes_written;
+            p_data += l_current_nb_bytes_written;
+            p_total_data_size -= l_current_nb_bytes_written;
         }
+    }
 
-        l_current_nb_bytes_written = 0;
-        if (! opj_j2k_write_sod(p_j2k,l_tcd,p_data,&l_current_nb_bytes_written,p_total_data_size,p_stream,p_manager)) {
-                return OPJ_FALSE;
-        }
+    l_current_nb_bytes_written = 0;
+    if (! opj_j2k_write_sod(p_j2k, l_tcd, p_data, &l_current_nb_bytes_written,
+                            p_total_data_size, p_stream, p_manager)) {
+        return OPJ_FALSE;
+    }
 
-        l_nb_bytes_written += l_current_nb_bytes_written;
-        * p_data_written = l_nb_bytes_written;
+    l_nb_bytes_written += l_current_nb_bytes_written;
+    * p_data_written = l_nb_bytes_written;
 
-        /* Writing Psot in SOT marker */
-        opj_write_bytes(l_begin_data + 6,l_nb_bytes_written,4);                                 /* PSOT */
+    /* Writing Psot in SOT marker */
+    opj_write_bytes(l_begin_data + 6, l_nb_bytes_written,
+                    4);                                 /* PSOT */
 
-        if (OPJ_IS_CINEMA(l_cp->rsiz)){
-                opj_j2k_update_tlm(p_j2k,l_nb_bytes_written);
-        }
+    if (OPJ_IS_CINEMA(l_cp->rsiz)) {
+        opj_j2k_update_tlm(p_j2k, l_nb_bytes_written);
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_write_all_tile_parts(  opj_j2k_t *p_j2k,
-                                                                        OPJ_BYTE * p_data,
-                                                                        OPJ_UINT32 * p_data_written,
-                                                                        OPJ_UINT32 p_total_data_size,
-                                                                        opj_stream_private_t *p_stream,
-                                                                        struct opj_event_mgr * p_manager
-                                                                )
-{
-        OPJ_UINT32 tilepartno=0;
-        OPJ_UINT32 l_nb_bytes_written = 0;
-        OPJ_UINT32 l_current_nb_bytes_written;
-        OPJ_UINT32 l_part_tile_size;
-        OPJ_UINT32 tot_num_tp;
-        OPJ_UINT32 pino;
-
-        OPJ_BYTE * l_begin_data;
-        opj_tcp_t *l_tcp = 00;
-        opj_tcd_t * l_tcd = 00;
-        opj_cp_t * l_cp = 00;
-
-        l_tcd = p_j2k->m_tcd;
-        l_cp = &(p_j2k->m_cp);
-        l_tcp = l_cp->tcps + p_j2k->m_current_tile_number;
-
-        /*Get number of tile parts*/
-        tot_num_tp = opj_j2k_get_num_tp(l_cp,0,p_j2k->m_current_tile_number);
-
-        /* start writing remaining tile parts */
-        ++p_j2k->m_specific_param.m_encoder.m_current_tile_part_number;
-        for (tilepartno = 1; tilepartno < tot_num_tp ; ++tilepartno) {
-                p_j2k->m_specific_param.m_encoder.m_current_poc_tile_part_number = tilepartno;
-                l_current_nb_bytes_written = 0;
-                l_part_tile_size = 0;
-                l_begin_data = p_data;
-
-                if (! opj_j2k_write_sot(p_j2k,p_data,&l_current_nb_bytes_written,p_stream,p_manager)) {
-                        return OPJ_FALSE;
-                }
+static OPJ_BOOL opj_j2k_write_all_tile_parts(opj_j2k_t *p_j2k,
+        OPJ_BYTE * p_data,
+        OPJ_UINT32 * p_data_written,
+        OPJ_UINT32 p_total_data_size,
+        opj_stream_private_t *p_stream,
+        struct opj_event_mgr * p_manager
+                                            )
+{
+    OPJ_UINT32 tilepartno = 0;
+    OPJ_UINT32 l_nb_bytes_written = 0;
+    OPJ_UINT32 l_current_nb_bytes_written;
+    OPJ_UINT32 l_part_tile_size;
+    OPJ_UINT32 tot_num_tp;
+    OPJ_UINT32 pino;
+
+    OPJ_BYTE * l_begin_data;
+    opj_tcp_t *l_tcp = 00;
+    opj_tcd_t * l_tcd = 00;
+    opj_cp_t * l_cp = 00;
+
+    l_tcd = p_j2k->m_tcd;
+    l_cp = &(p_j2k->m_cp);
+    l_tcp = l_cp->tcps + p_j2k->m_current_tile_number;
+
+    /*Get number of tile parts*/
+    tot_num_tp = opj_j2k_get_num_tp(l_cp, 0, p_j2k->m_current_tile_number);
+
+    /* start writing remaining tile parts */
+    ++p_j2k->m_specific_param.m_encoder.m_current_tile_part_number;
+    for (tilepartno = 1; tilepartno < tot_num_tp ; ++tilepartno) {
+        p_j2k->m_specific_param.m_encoder.m_current_poc_tile_part_number = tilepartno;
+        l_current_nb_bytes_written = 0;
+        l_part_tile_size = 0;
+        l_begin_data = p_data;
 
-                l_nb_bytes_written += l_current_nb_bytes_written;
-                p_data += l_current_nb_bytes_written;
-                p_total_data_size -= l_current_nb_bytes_written;
-                l_part_tile_size += l_current_nb_bytes_written;
+        if (! opj_j2k_write_sot(p_j2k, p_data, &l_current_nb_bytes_written, p_stream,
+                                p_manager)) {
+            return OPJ_FALSE;
+        }
 
-                l_current_nb_bytes_written = 0;
-                if (! opj_j2k_write_sod(p_j2k,l_tcd,p_data,&l_current_nb_bytes_written,p_total_data_size,p_stream,p_manager)) {
-                        return OPJ_FALSE;
-                }
+        l_nb_bytes_written += l_current_nb_bytes_written;
+        p_data += l_current_nb_bytes_written;
+        p_total_data_size -= l_current_nb_bytes_written;
+        l_part_tile_size += l_current_nb_bytes_written;
 
-                p_data += l_current_nb_bytes_written;
-                l_nb_bytes_written += l_current_nb_bytes_written;
-                p_total_data_size -= l_current_nb_bytes_written;
-                l_part_tile_size += l_current_nb_bytes_written;
+        l_current_nb_bytes_written = 0;
+        if (! opj_j2k_write_sod(p_j2k, l_tcd, p_data, &l_current_nb_bytes_written,
+                                p_total_data_size, p_stream, p_manager)) {
+            return OPJ_FALSE;
+        }
 
-                /* Writing Psot in SOT marker */
-                opj_write_bytes(l_begin_data + 6,l_part_tile_size,4);                                   /* PSOT */
+        p_data += l_current_nb_bytes_written;
+        l_nb_bytes_written += l_current_nb_bytes_written;
+        p_total_data_size -= l_current_nb_bytes_written;
+        l_part_tile_size += l_current_nb_bytes_written;
 
-                if (OPJ_IS_CINEMA(l_cp->rsiz)) {
-                        opj_j2k_update_tlm(p_j2k,l_part_tile_size);
-                }
+        /* Writing Psot in SOT marker */
+        opj_write_bytes(l_begin_data + 6, l_part_tile_size,
+                        4);                                   /* PSOT */
 
-                ++p_j2k->m_specific_param.m_encoder.m_current_tile_part_number;
+        if (OPJ_IS_CINEMA(l_cp->rsiz)) {
+            opj_j2k_update_tlm(p_j2k, l_part_tile_size);
         }
 
-        for (pino = 1; pino <= l_tcp->numpocs; ++pino) {
-                l_tcd->cur_pino = pino;
+        ++p_j2k->m_specific_param.m_encoder.m_current_tile_part_number;
+    }
 
-                /*Get number of tile parts*/
-                tot_num_tp = opj_j2k_get_num_tp(l_cp,pino,p_j2k->m_current_tile_number);
-                for (tilepartno = 0; tilepartno < tot_num_tp ; ++tilepartno) {
-                        p_j2k->m_specific_param.m_encoder.m_current_poc_tile_part_number = tilepartno;
-                        l_current_nb_bytes_written = 0;
-                        l_part_tile_size = 0;
-                        l_begin_data = p_data;
+    for (pino = 1; pino <= l_tcp->numpocs; ++pino) {
+        l_tcd->cur_pino = pino;
 
-                        if (! opj_j2k_write_sot(p_j2k,p_data,&l_current_nb_bytes_written,p_stream,p_manager)) {
-                                return OPJ_FALSE;
-                        }
+        /*Get number of tile parts*/
+        tot_num_tp = opj_j2k_get_num_tp(l_cp, pino, p_j2k->m_current_tile_number);
+        for (tilepartno = 0; tilepartno < tot_num_tp ; ++tilepartno) {
+            p_j2k->m_specific_param.m_encoder.m_current_poc_tile_part_number = tilepartno;
+            l_current_nb_bytes_written = 0;
+            l_part_tile_size = 0;
+            l_begin_data = p_data;
 
-                        l_nb_bytes_written += l_current_nb_bytes_written;
-                        p_data += l_current_nb_bytes_written;
-                        p_total_data_size -= l_current_nb_bytes_written;
-                        l_part_tile_size += l_current_nb_bytes_written;
+            if (! opj_j2k_write_sot(p_j2k, p_data, &l_current_nb_bytes_written, p_stream,
+                                    p_manager)) {
+                return OPJ_FALSE;
+            }
 
-                        l_current_nb_bytes_written = 0;
+            l_nb_bytes_written += l_current_nb_bytes_written;
+            p_data += l_current_nb_bytes_written;
+            p_total_data_size -= l_current_nb_bytes_written;
+            l_part_tile_size += l_current_nb_bytes_written;
 
-                        if (! opj_j2k_write_sod(p_j2k,l_tcd,p_data,&l_current_nb_bytes_written,p_total_data_size,p_stream,p_manager)) {
-                                return OPJ_FALSE;
-                        }
+            l_current_nb_bytes_written = 0;
 
-                        l_nb_bytes_written += l_current_nb_bytes_written;
-                        p_data += l_current_nb_bytes_written;
-                        p_total_data_size -= l_current_nb_bytes_written;
-                        l_part_tile_size += l_current_nb_bytes_written;
+            if (! opj_j2k_write_sod(p_j2k, l_tcd, p_data, &l_current_nb_bytes_written,
+                                    p_total_data_size, p_stream, p_manager)) {
+                return OPJ_FALSE;
+            }
 
-                        /* Writing Psot in SOT marker */
-                        opj_write_bytes(l_begin_data + 6,l_part_tile_size,4);                                   /* PSOT */
+            l_nb_bytes_written += l_current_nb_bytes_written;
+            p_data += l_current_nb_bytes_written;
+            p_total_data_size -= l_current_nb_bytes_written;
+            l_part_tile_size += l_current_nb_bytes_written;
 
-                        if (OPJ_IS_CINEMA(l_cp->rsiz)) {
-                                opj_j2k_update_tlm(p_j2k,l_part_tile_size);
-                        }
+            /* Writing Psot in SOT marker */
+            opj_write_bytes(l_begin_data + 6, l_part_tile_size,
+                            4);                                   /* PSOT */
 
-                        ++p_j2k->m_specific_param.m_encoder.m_current_tile_part_number;
-                }
+            if (OPJ_IS_CINEMA(l_cp->rsiz)) {
+                opj_j2k_update_tlm(p_j2k, l_part_tile_size);
+            }
+
+            ++p_j2k->m_specific_param.m_encoder.m_current_tile_part_number;
         }
+    }
 
-        *p_data_written = l_nb_bytes_written;
+    *p_data_written = l_nb_bytes_written;
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_write_updated_tlm( opj_j2k_t *p_j2k,
-                                                                    struct opj_stream_private *p_stream,
-                                                                    struct opj_event_mgr * p_manager )
+static OPJ_BOOL opj_j2k_write_updated_tlm(opj_j2k_t *p_j2k,
+        struct opj_stream_private *p_stream,
+        struct opj_event_mgr * p_manager)
 {
-        OPJ_UINT32 l_tlm_size;
-        OPJ_OFF_T l_tlm_position, l_current_position;
+    OPJ_UINT32 l_tlm_size;
+    OPJ_OFF_T l_tlm_position, l_current_position;
 
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
 
-        l_tlm_size = 5 * p_j2k->m_specific_param.m_encoder.m_total_tile_parts;
-        l_tlm_position = 6 + p_j2k->m_specific_param.m_encoder.m_tlm_start;
-        l_current_position = opj_stream_tell(p_stream);
+    l_tlm_size = 5 * p_j2k->m_specific_param.m_encoder.m_total_tile_parts;
+    l_tlm_position = 6 + p_j2k->m_specific_param.m_encoder.m_tlm_start;
+    l_current_position = opj_stream_tell(p_stream);
 
-        if (! opj_stream_seek(p_stream,l_tlm_position,p_manager)) {
-                return OPJ_FALSE;
-        }
+    if (! opj_stream_seek(p_stream, l_tlm_position, p_manager)) {
+        return OPJ_FALSE;
+    }
 
-        if (opj_stream_write_data(p_stream,p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_buffer,l_tlm_size,p_manager) != l_tlm_size) {
-                return OPJ_FALSE;
-        }
+    if (opj_stream_write_data(p_stream,
+                              p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_buffer, l_tlm_size,
+                              p_manager) != l_tlm_size) {
+        return OPJ_FALSE;
+    }
 
-        if (! opj_stream_seek(p_stream,l_current_position,p_manager)) {
-                return OPJ_FALSE;
-        }
+    if (! opj_stream_seek(p_stream, l_current_position, p_manager)) {
+        return OPJ_FALSE;
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_end_encoding(  opj_j2k_t *p_j2k,
-                                                        struct opj_stream_private *p_stream,
-                                                        struct opj_event_mgr * p_manager )
+static OPJ_BOOL opj_j2k_end_encoding(opj_j2k_t *p_j2k,
+                                     struct opj_stream_private *p_stream,
+                                     struct opj_event_mgr * p_manager)
 {
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
 
-        opj_tcd_destroy(p_j2k->m_tcd);
-        p_j2k->m_tcd = 00;
+    opj_tcd_destroy(p_j2k->m_tcd);
+    p_j2k->m_tcd = 00;
 
-        if (p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_buffer) {
-                opj_free(p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_buffer);
-                p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_buffer = 0;
-                p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_current = 0;
-        }
+    if (p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_buffer) {
+        opj_free(p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_buffer);
+        p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_buffer = 0;
+        p_j2k->m_specific_param.m_encoder.m_tlm_sot_offsets_current = 0;
+    }
 
-        if (p_j2k->m_specific_param.m_encoder.m_encoded_tile_data) {
-                opj_free(p_j2k->m_specific_param.m_encoder.m_encoded_tile_data);
-                p_j2k->m_specific_param.m_encoder.m_encoded_tile_data = 0;
-        }
+    if (p_j2k->m_specific_param.m_encoder.m_encoded_tile_data) {
+        opj_free(p_j2k->m_specific_param.m_encoder.m_encoded_tile_data);
+        p_j2k->m_specific_param.m_encoder.m_encoded_tile_data = 0;
+    }
 
-        p_j2k->m_specific_param.m_encoder.m_encoded_tile_size = 0;
+    p_j2k->m_specific_param.m_encoder.m_encoded_tile_size = 0;
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 /**
  * Destroys the memory associated with the decoding of headers.
  */
-static OPJ_BOOL opj_j2k_destroy_header_memory ( opj_j2k_t * p_j2k,
-                                                opj_stream_private_t *p_stream,
-                                                opj_event_mgr_t * p_manager
-                                                )
-{
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_stream != 00);
-        assert(p_manager != 00);
-
-        if (p_j2k->m_specific_param.m_encoder.m_header_tile_data) {
-                opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
-                p_j2k->m_specific_param.m_encoder.m_header_tile_data = 0;
-        }
+static OPJ_BOOL opj_j2k_destroy_header_memory(opj_j2k_t * p_j2k,
+        opj_stream_private_t *p_stream,
+        opj_event_mgr_t * p_manager
+                                             )
+{
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_stream != 00);
+    assert(p_manager != 00);
+
+    if (p_j2k->m_specific_param.m_encoder.m_header_tile_data) {
+        opj_free(p_j2k->m_specific_param.m_encoder.m_header_tile_data);
+        p_j2k->m_specific_param.m_encoder.m_header_tile_data = 0;
+    }
 
-        p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
+    p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = 0;
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_j2k_init_info(     opj_j2k_t *p_j2k,
-                                                struct opj_stream_private *p_stream,
-                                                struct opj_event_mgr * p_manager )
+static OPJ_BOOL opj_j2k_init_info(opj_j2k_t *p_j2k,
+                                  struct opj_stream_private *p_stream,
+                                  struct opj_event_mgr * p_manager)
 {
-        opj_codestream_info_t * l_cstr_info = 00;
+    opj_codestream_info_t * l_cstr_info = 00;
 
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
-  (void)l_cstr_info;
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
+    (void)l_cstr_info;
 
-        /* TODO mergeV2: check this part which use cstr_info */
-        /*l_cstr_info = p_j2k->cstr_info;
+    /* TODO mergeV2: check this part which use cstr_info */
+    /*l_cstr_info = p_j2k->cstr_info;
 
-        if (l_cstr_info)  {
-                OPJ_UINT32 compno;
-                l_cstr_info->tile = (opj_tile_info_t *) opj_malloc(p_j2k->m_cp.tw * p_j2k->m_cp.th * sizeof(opj_tile_info_t));
+    if (l_cstr_info)  {
+            OPJ_UINT32 compno;
+            l_cstr_info->tile = (opj_tile_info_t *) opj_malloc(p_j2k->m_cp.tw * p_j2k->m_cp.th * sizeof(opj_tile_info_t));
 
-                l_cstr_info->image_w = p_j2k->m_image->x1 - p_j2k->m_image->x0;
-                l_cstr_info->image_h = p_j2k->m_image->y1 - p_j2k->m_image->y0;
+            l_cstr_info->image_w = p_j2k->m_image->x1 - p_j2k->m_image->x0;
+            l_cstr_info->image_h = p_j2k->m_image->y1 - p_j2k->m_image->y0;
 
-                l_cstr_info->prog = (&p_j2k->m_cp.tcps[0])->prg;
+            l_cstr_info->prog = (&p_j2k->m_cp.tcps[0])->prg;
 
-                l_cstr_info->tw = p_j2k->m_cp.tw;
-                l_cstr_info->th = p_j2k->m_cp.th;
+            l_cstr_info->tw = p_j2k->m_cp.tw;
+            l_cstr_info->th = p_j2k->m_cp.th;
 
-                l_cstr_info->tile_x = p_j2k->m_cp.tdx;*/        /* new version parser */
-                /*l_cstr_info->tile_y = p_j2k->m_cp.tdy;*/      /* new version parser */
-                /*l_cstr_info->tile_Ox = p_j2k->m_cp.tx0;*/     /* new version parser */
-                /*l_cstr_info->tile_Oy = p_j2k->m_cp.ty0;*/     /* new version parser */
+            l_cstr_info->tile_x = p_j2k->m_cp.tdx;*/        /* new version parser */
+    /*l_cstr_info->tile_y = p_j2k->m_cp.tdy;*/      /* new version parser */
+    /*l_cstr_info->tile_Ox = p_j2k->m_cp.tx0;*/     /* new version parser */
+    /*l_cstr_info->tile_Oy = p_j2k->m_cp.ty0;*/     /* new version parser */
 
-                /*l_cstr_info->numcomps = p_j2k->m_image->numcomps;
+    /*l_cstr_info->numcomps = p_j2k->m_image->numcomps;
 
-                l_cstr_info->numlayers = (&p_j2k->m_cp.tcps[0])->numlayers;
+    l_cstr_info->numlayers = (&p_j2k->m_cp.tcps[0])->numlayers;
 
-                l_cstr_info->numdecompos = (OPJ_INT32*) opj_malloc(p_j2k->m_image->numcomps * sizeof(OPJ_INT32));
+    l_cstr_info->numdecompos = (OPJ_INT32*) opj_malloc(p_j2k->m_image->numcomps * sizeof(OPJ_INT32));
 
-                for (compno=0; compno < p_j2k->m_image->numcomps; compno++) {
-                        l_cstr_info->numdecompos[compno] = (&p_j2k->m_cp.tcps[0])->tccps->numresolutions - 1;
-                }
+    for (compno=0; compno < p_j2k->m_image->numcomps; compno++) {
+            l_cstr_info->numdecompos[compno] = (&p_j2k->m_cp.tcps[0])->tccps->numresolutions - 1;
+    }
 
-                l_cstr_info->D_max = 0.0;       */      /* ADD Marcela */
+    l_cstr_info->D_max = 0.0;       */      /* ADD Marcela */
 
-                /*l_cstr_info->main_head_start = opj_stream_tell(p_stream);*/ /* position of SOC */
+    /*l_cstr_info->main_head_start = opj_stream_tell(p_stream);*/ /* position of SOC */
 
-                /*l_cstr_info->maxmarknum = 100;
-                l_cstr_info->marker = (opj_marker_info_t *) opj_malloc(l_cstr_info->maxmarknum * sizeof(opj_marker_info_t));
-                l_cstr_info->marknum = 0;
-        }*/
+    /*l_cstr_info->maxmarknum = 100;
+    l_cstr_info->marker = (opj_marker_info_t *) opj_malloc(l_cstr_info->maxmarknum * sizeof(opj_marker_info_t));
+    l_cstr_info->marknum = 0;
+    }*/
 
-        return opj_j2k_calculate_tp(p_j2k,&(p_j2k->m_cp),&p_j2k->m_specific_param.m_encoder.m_total_tile_parts,p_j2k->m_private_image,p_manager);
+    return opj_j2k_calculate_tp(p_j2k, &(p_j2k->m_cp),
+                                &p_j2k->m_specific_param.m_encoder.m_total_tile_parts, p_j2k->m_private_image,
+                                p_manager);
 }
 
 /**
@@ -10981,65 +11547,68 @@ static OPJ_BOOL opj_j2k_init_info(     opj_j2k_t *p_j2k,
  * @param       p_j2k                   J2K codec.
  * @param       p_manager               the user event manager.
 */
-static OPJ_BOOL opj_j2k_create_tcd(     opj_j2k_t *p_j2k,
-                                                                    opj_stream_private_t *p_stream,
-                                                                    opj_event_mgr_t * p_manager
-                                    )
+static OPJ_BOOL opj_j2k_create_tcd(opj_j2k_t *p_j2k,
+                                   opj_stream_private_t *p_stream,
+                                   opj_event_mgr_t * p_manager
+                                  )
 {
-        /* preconditions */
-        assert(p_j2k != 00);
-        assert(p_manager != 00);
-        assert(p_stream != 00);
+    /* preconditions */
+    assert(p_j2k != 00);
+    assert(p_manager != 00);
+    assert(p_stream != 00);
 
-        p_j2k->m_tcd = opj_tcd_create(OPJ_FALSE);
+    p_j2k->m_tcd = opj_tcd_create(OPJ_FALSE);
 
-        if (! p_j2k->m_tcd) {
-                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to create Tile Coder\n");
-                return OPJ_FALSE;
-        }
+    if (! p_j2k->m_tcd) {
+        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to create Tile Coder\n");
+        return OPJ_FALSE;
+    }
 
-        if (!opj_tcd_init(p_j2k->m_tcd,p_j2k->m_private_image,&p_j2k->m_cp, p_j2k->m_tp)) {
-                opj_tcd_destroy(p_j2k->m_tcd);
-                p_j2k->m_tcd = 00;
-                return OPJ_FALSE;
-        }
+    if (!opj_tcd_init(p_j2k->m_tcd, p_j2k->m_private_image, &p_j2k->m_cp,
+                      p_j2k->m_tp)) {
+        opj_tcd_destroy(p_j2k->m_tcd);
+        p_j2k->m_tcd = 00;
+        return OPJ_FALSE;
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-OPJ_BOOL opj_j2k_write_tile (opj_j2k_t * p_j2k,
-                                                 OPJ_UINT32 p_tile_index,
-                                                 OPJ_BYTE * p_data,
-                                                 OPJ_UINT32 p_data_size,
-                                                 opj_stream_private_t *p_stream,
-                                                 opj_event_mgr_t * p_manager )
+OPJ_BOOL opj_j2k_write_tile(opj_j2k_t * p_j2k,
+                            OPJ_UINT32 p_tile_index,
+                            OPJ_BYTE * p_data,
+                            OPJ_UINT32 p_data_size,
+                            opj_stream_private_t *p_stream,
+                            opj_event_mgr_t * p_manager)
 {
-        if (! opj_j2k_pre_write_tile(p_j2k,p_tile_index,p_stream,p_manager)) {
-                opj_event_msg(p_manager, EVT_ERROR, "Error while opj_j2k_pre_write_tile with tile index = %d\n", p_tile_index);
+    if (! opj_j2k_pre_write_tile(p_j2k, p_tile_index, p_stream, p_manager)) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Error while opj_j2k_pre_write_tile with tile index = %d\n", p_tile_index);
+        return OPJ_FALSE;
+    } else {
+        OPJ_UINT32 j;
+        /* Allocate data */
+        for (j = 0; j < p_j2k->m_tcd->image->numcomps; ++j) {
+            opj_tcd_tilecomp_t* l_tilec = p_j2k->m_tcd->tcd_image->tiles->comps + j;
+
+            if (! opj_alloc_tile_component_data(l_tilec)) {
+                opj_event_msg(p_manager, EVT_ERROR, "Error allocating tile component data.");
                 return OPJ_FALSE;
+            }
         }
-        else {
-                OPJ_UINT32 j;
-                /* Allocate data */
-                for (j=0;j<p_j2k->m_tcd->image->numcomps;++j) {
-                        opj_tcd_tilecomp_t* l_tilec = p_j2k->m_tcd->tcd_image->tiles->comps + j;
-
-                        if(! opj_alloc_tile_component_data(l_tilec)) {
-                                                                                                       opj_event_msg(p_manager, EVT_ERROR, "Error allocating tile component data." );
-                                return OPJ_FALSE;
-                        }
-                }
 
-                /* now copy data into the tile component */
-                if (! opj_tcd_copy_tile_data(p_j2k->m_tcd,p_data,p_data_size)) {
-                        opj_event_msg(p_manager, EVT_ERROR, "Size mismatch between tile data and sent data." );
-                        return OPJ_FALSE;
-                }
-                if (! opj_j2k_post_write_tile(p_j2k,p_stream,p_manager)) {
-                        opj_event_msg(p_manager, EVT_ERROR, "Error while opj_j2k_post_write_tile with tile index = %d\n", p_tile_index);
-                        return OPJ_FALSE;
-                }
+        /* now copy data into the tile component */
+        if (! opj_tcd_copy_tile_data(p_j2k->m_tcd, p_data, p_data_size)) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Size mismatch between tile data and sent data.");
+            return OPJ_FALSE;
+        }
+        if (! opj_j2k_post_write_tile(p_j2k, p_stream, p_manager)) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Error while opj_j2k_post_write_tile with tile index = %d\n", p_tile_index);
+            return OPJ_FALSE;
         }
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
index ea81d0f5d61bf6fb1ac8f4ecc3d82eec7971d925..84dd5004a6d0f173ca4e7bec4eb790a2108ef097 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,11 +8,11 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * Copyright (c) 2010-2011, Kaori Hagihara
- * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR 
+ * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR
  * Copyright (c) 2012, CS Systemes d'Information, France
  * All rights reserved.
  *
@@ -42,7 +42,7 @@
 /** @defgroup JP2 JP2 - JPEG-2000 file format reader/writer */
 /*@{*/
 
-#define OPJ_BOX_SIZE   1024
+#define OPJ_BOX_SIZE    1024
 
 /** @name Local static functions */
 /*@{*/
 /**
  * Reads a IHDR box - Image Header box
  *
- * @param      p_image_header_data                     pointer to actual data (already read from file)
- * @param      jp2                                                     the jpeg2000 file codec.
- * @param      p_image_header_size                     the size of the image header
- * @param      p_manager                                       the user event manager.
+ * @param   p_image_header_data         pointer to actual data (already read from file)
+ * @param   jp2                         the jpeg2000 file codec.
+ * @param   p_image_header_size         the size of the image header
+ * @param   p_manager                   the user event manager.
  *
- * @return     true if the image header is valid, false else.
+ * @return  true if the image header is valid, false else.
  */
-static OPJ_BOOL opj_jp2_read_ihdr(  opj_jp2_t *jp2,
-                                    OPJ_BYTE *p_image_header_data,
-                                    OPJ_UINT32 p_image_header_size,
-                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_jp2_read_ihdr(opj_jp2_t *jp2,
+                                  OPJ_BYTE *p_image_header_data,
+                                  OPJ_UINT32 p_image_header_size,
+                                  opj_event_mgr_t * p_manager);
 
 /**
  * Writes the Image Header box - Image Header box.
  *
- * @param jp2                                  jpeg2000 file codec.
- * @param p_nb_bytes_written   pointer to store the nb of bytes written by the function.
+ * @param jp2                   jpeg2000 file codec.
+ * @param p_nb_bytes_written    pointer to store the nb of bytes written by the function.
  *
- * @return     the data being copied.
+ * @return  the data being copied.
 */
 static OPJ_BYTE * opj_jp2_write_ihdr(opj_jp2_t *jp2,
-                                     OPJ_UINT32 * p_nb_bytes_written );
+                                     OPJ_UINT32 * p_nb_bytes_written);
 
 /**
  * Writes the Bit per Component box.
  *
- * @param      jp2                                             jpeg2000 file codec.
- * @param      p_nb_bytes_written              pointer to store the nb of bytes written by the function.
+ * @param   jp2                     jpeg2000 file codec.
+ * @param   p_nb_bytes_written      pointer to store the nb of bytes written by the function.
  *
- * @return     the data being copied.
+ * @return  the data being copied.
 */
-static OPJ_BYTE * opj_jp2_write_bpcc(  opj_jp2_t *jp2,
-                                                                       OPJ_UINT32 * p_nb_bytes_written );
+static OPJ_BYTE * opj_jp2_write_bpcc(opj_jp2_t *jp2,
+                                     OPJ_UINT32 * p_nb_bytes_written);
 
 /**
  * Reads a Bit per Component box.
  *
- * @param      p_bpc_header_data                       pointer to actual data (already read from file)
- * @param      jp2                                                     the jpeg2000 file codec.
- * @param      p_bpc_header_size                       the size of the bpc header
- * @param      p_manager                                       the user event manager.
+ * @param   p_bpc_header_data           pointer to actual data (already read from file)
+ * @param   jp2                         the jpeg2000 file codec.
+ * @param   p_bpc_header_size           the size of the bpc header
+ * @param   p_manager                   the user event manager.
  *
- * @return     true if the bpc header is valid, false else.
+ * @return  true if the bpc header is valid, false else.
  */
-static OPJ_BOOL opj_jp2_read_bpcc(  opj_jp2_t *jp2,
-                                    OPJ_BYTE * p_bpc_header_data,
-                                    OPJ_UINT32 p_bpc_header_size,
-                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_jp2_read_bpcc(opj_jp2_t *jp2,
+                                  OPJ_BYTE * p_bpc_header_data,
+                                  OPJ_UINT32 p_bpc_header_size,
+                                  opj_event_mgr_t * p_manager);
 
-static OPJ_BOOL opj_jp2_read_cdef(     opj_jp2_t * jp2,
-                                    OPJ_BYTE * p_cdef_header_data,
-                                                                       OPJ_UINT32 p_cdef_header_size,
-                                                                       opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_jp2_read_cdef(opj_jp2_t * jp2,
+                                  OPJ_BYTE * p_cdef_header_data,
+                                  OPJ_UINT32 p_cdef_header_size,
+                                  opj_event_mgr_t * p_manager);
 
-static void opj_jp2_apply_cdef(opj_image_t *image, opj_jp2_color_t *color, opj_event_mgr_t *);
+static void opj_jp2_apply_cdef(opj_image_t *image, opj_jp2_color_t *color,
+                               opj_event_mgr_t *);
 
 /**
  * Writes the Channel Definition box.
  *
- * @param jp2                                  jpeg2000 file codec.
- * @param p_nb_bytes_written   pointer to store the nb of bytes written by the function.
+ * @param jp2                   jpeg2000 file codec.
+ * @param p_nb_bytes_written    pointer to store the nb of bytes written by the function.
  *
- * @return     the data being copied.
+ * @return  the data being copied.
  */
-static OPJ_BYTE * opj_jp2_write_cdef(   opj_jp2_t *jp2,
-                                                                                                                                                OPJ_UINT32 * p_nb_bytes_written );
+static OPJ_BYTE * opj_jp2_write_cdef(opj_jp2_t *jp2,
+                                     OPJ_UINT32 * p_nb_bytes_written);
 
 /**
  * Writes the Colour Specification box.
  *
- * @param jp2                                  jpeg2000 file codec.
- * @param p_nb_bytes_written   pointer to store the nb of bytes written by the function.
+ * @param jp2                   jpeg2000 file codec.
+ * @param p_nb_bytes_written    pointer to store the nb of bytes written by the function.
  *
- * @return     the data being copied.
+ * @return  the data being copied.
 */
-static OPJ_BYTE * opj_jp2_write_colr(   opj_jp2_t *jp2,
-                                                                           OPJ_UINT32 * p_nb_bytes_written );
+static OPJ_BYTE * opj_jp2_write_colr(opj_jp2_t *jp2,
+                                     OPJ_UINT32 * p_nb_bytes_written);
 
 /**
  * Writes a FTYP box - File type box
  *
- * @param      cio                     the stream to write data to.
- * @param      jp2                     the jpeg2000 file codec.
- * @param      p_manager       the user event manager.
+ * @param   cio         the stream to write data to.
+ * @param   jp2         the jpeg2000 file codec.
+ * @param   p_manager   the user event manager.
  *
- * @return     true if writing was successful.
+ * @return  true if writing was successful.
  */
-static OPJ_BOOL opj_jp2_write_ftyp(    opj_jp2_t *jp2,
-                                                                       opj_stream_private_t *cio,
-                                                                       opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_jp2_write_ftyp(opj_jp2_t *jp2,
+                                   opj_stream_private_t *cio,
+                                   opj_event_mgr_t * p_manager);
 
 /**
  * Reads a a FTYP box - File type box
  *
- * @param      p_header_data   the data contained in the FTYP box.
- * @param      jp2                             the jpeg2000 file codec.
- * @param      p_header_size   the size of the data contained in the FTYP box.
- * @param      p_manager               the user event manager.
+ * @param   p_header_data   the data contained in the FTYP box.
+ * @param   jp2             the jpeg2000 file codec.
+ * @param   p_header_size   the size of the data contained in the FTYP box.
+ * @param   p_manager       the user event manager.
  *
  * @return true if the FTYP box is valid.
  */
-static OPJ_BOOL opj_jp2_read_ftyp(     opj_jp2_t *jp2,
-                                                                       OPJ_BYTE * p_header_data,
-                                                                       OPJ_UINT32 p_header_size,
-                                                                       opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_jp2_read_ftyp(opj_jp2_t *jp2,
+                                  OPJ_BYTE * p_header_data,
+                                  OPJ_UINT32 p_header_size,
+                                  opj_event_mgr_t * p_manager);
 
-static OPJ_BOOL opj_jp2_skip_jp2c(     opj_jp2_t *jp2,
-                                                   opj_stream_private_t *cio,
-                                                   opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_jp2_skip_jp2c(opj_jp2_t *jp2,
+                                  opj_stream_private_t *cio,
+                                  opj_event_mgr_t * p_manager);
 
 /**
  * Reads the Jpeg2000 file Header box - JP2 Header box (warning, this is a super box).
  *
- * @param      p_header_data   the data contained in the file header box.
- * @param      jp2                             the jpeg2000 file codec.
- * @param      p_header_size   the size of the data contained in the file header box.
- * @param      p_manager               the user event manager.
+ * @param   p_header_data   the data contained in the file header box.
+ * @param   jp2             the jpeg2000 file codec.
+ * @param   p_header_size   the size of the data contained in the file header box.
+ * @param   p_manager       the user event manager.
  *
  * @return true if the JP2 Header box was successfully recognized.
 */
-static OPJ_BOOL opj_jp2_read_jp2h(  opj_jp2_t *jp2,
-                                    OPJ_BYTE *p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_jp2_read_jp2h(opj_jp2_t *jp2,
+                                  OPJ_BYTE *p_header_data,
+                                  OPJ_UINT32 p_header_size,
+                                  opj_event_mgr_t * p_manager);
 
 /**
  * Writes the Jpeg2000 file Header box - JP2 Header box (warning, this is a super box).
@@ -187,61 +188,61 @@ static OPJ_BOOL opj_jp2_read_jp2h(  opj_jp2_t *jp2,
  * @return true if writing was successful.
  */
 static OPJ_BOOL opj_jp2_write_jp2h(opj_jp2_t *jp2,
-                                                                                                               opj_stream_private_t *stream,
-                                                                                                               opj_event_mgr_t * p_manager );
+                                   opj_stream_private_t *stream,
+                                   opj_event_mgr_t * p_manager);
 
 /**
  * Writes the Jpeg2000 codestream Header box - JP2C Header box. This function must be called AFTER the coding has been done.
  *
- * @param      cio                     the stream to write data to.
- * @param      jp2                     the jpeg2000 file codec.
- * @param      p_manager       user event manager.
+ * @param   cio         the stream to write data to.
+ * @param   jp2         the jpeg2000 file codec.
+ * @param   p_manager   user event manager.
  *
  * @return true if writing was successful.
 */
-static OPJ_BOOL opj_jp2_write_jp2c(    opj_jp2_t *jp2,
-                                                                   opj_stream_private_t *cio,
-                                                                   opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_jp2_write_jp2c(opj_jp2_t *jp2,
+                                   opj_stream_private_t *cio,
+                                   opj_event_mgr_t * p_manager);
 
 #ifdef USE_JPIP
 /**
  * Write index Finder box
  * @param cio     the stream to write to.
- * @param      jp2                     the jpeg2000 file codec.
- * @param      p_manager       user event manager.
+ * @param   jp2         the jpeg2000 file codec.
+ * @param   p_manager   user event manager.
 */
-static OPJ_BOOL opj_jpip_write_iptr(   opj_jp2_t *jp2,
-                                                                   opj_stream_private_t *cio,
-                                                                   opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_jpip_write_iptr(opj_jp2_t *jp2,
+                                    opj_stream_private_t *cio,
+                                    opj_event_mgr_t * p_manager);
 
 /**
  * Write index Finder box
  * @param cio     the stream to write to.
- * @param      jp2                     the jpeg2000 file codec.
- * @param      p_manager       user event manager.
+ * @param   jp2         the jpeg2000 file codec.
+ * @param   p_manager   user event manager.
  */
 static OPJ_BOOL opj_jpip_write_cidx(opj_jp2_t *jp2,
-  opj_stream_private_t *cio,
-  opj_event_mgr_t * p_manager );
+                                    opj_stream_private_t *cio,
+                                    opj_event_mgr_t * p_manager);
 
 /**
  * Write file Index (superbox)
  * @param cio     the stream to write to.
- * @param      jp2                     the jpeg2000 file codec.
- * @param      p_manager       user event manager.
+ * @param   jp2         the jpeg2000 file codec.
+ * @param   p_manager   user event manager.
  */
 static OPJ_BOOL opj_jpip_write_fidx(opj_jp2_t *jp2,
-  opj_stream_private_t *cio,
-  opj_event_mgr_t * p_manager );
+                                    opj_stream_private_t *cio,
+                                    opj_event_mgr_t * p_manager);
 #endif /* USE_JPIP */
 
 /**
  * Reads a jpeg2000 file signature box.
  *
- * @param      p_header_data   the data contained in the signature box.
- * @param      jp2                             the jpeg2000 file codec.
- * @param      p_header_size   the size of the data contained in the signature box.
- * @param      p_manager               the user event manager.
+ * @param   p_header_data   the data contained in the signature box.
+ * @param   jp2             the jpeg2000 file codec.
+ * @param   p_header_size   the size of the data contained in the signature box.
+ * @param   p_manager       the user event manager.
  *
  * @return true if the file signature box is valid.
  */
@@ -254,14 +255,14 @@ static OPJ_BOOL opj_jp2_read_jp(opj_jp2_t *jp2,
  * Writes a jpeg2000 file signature box.
  *
  * @param cio the stream to write data to.
- * @param      jp2                     the jpeg2000 file codec.
+ * @param   jp2         the jpeg2000 file codec.
  * @param p_manager the user event manager.
  *
  * @return true if writing was successful.
  */
-static OPJ_BOOL opj_jp2_write_jp(      opj_jp2_t *jp2,
-                                                   opj_stream_private_t *cio,
-                                                       opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_jp2_write_jp(opj_jp2_t *jp2,
+                                 opj_stream_private_t *cio,
+                                 opj_event_mgr_t * p_manager);
 
 /**
 Apply collected palette data
@@ -282,10 +283,10 @@ static void opj_jp2_free_pclr(opj_jp2_color_t *color);
  *
  * @return Returns true if successful, returns false otherwise
 */
-static OPJ_BOOL opj_jp2_read_pclr(     opj_jp2_t *jp2,
-                                    OPJ_BYTE * p_pclr_header_data,
-                                    OPJ_UINT32 p_pclr_header_size,
-                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_jp2_read_pclr(opj_jp2_t *jp2,
+                                  OPJ_BYTE * p_pclr_header_data,
+                                  OPJ_UINT32 p_pclr_header_size,
+                                  opj_event_mgr_t * p_manager);
 
 /**
  * Collect component mapping data
@@ -298,25 +299,25 @@ static OPJ_BOOL opj_jp2_read_pclr(        opj_jp2_t *jp2,
  * @return Returns true if successful, returns false otherwise
 */
 
-static OPJ_BOOL opj_jp2_read_cmap(     opj_jp2_t * jp2,
-                                    OPJ_BYTE * p_cmap_header_data,
-                                    OPJ_UINT32 p_cmap_header_size,
-                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_jp2_read_cmap(opj_jp2_t * jp2,
+                                  OPJ_BYTE * p_cmap_header_data,
+                                  OPJ_UINT32 p_cmap_header_size,
+                                  opj_event_mgr_t * p_manager);
 
 /**
  * Reads the Color Specification box.
  *
- * @param      p_colr_header_data                      pointer to actual data (already read from file)
- * @param      jp2                                                     the jpeg2000 file codec.
- * @param      p_colr_header_size                      the size of the color header
- * @param      p_manager                                       the user event manager.
+ * @param   p_colr_header_data          pointer to actual data (already read from file)
+ * @param   jp2                         the jpeg2000 file codec.
+ * @param   p_colr_header_size          the size of the color header
+ * @param   p_manager                   the user event manager.
  *
- * @return     true if the bpc header is valid, false else.
+ * @return  true if the bpc header is valid, false else.
 */
-static OPJ_BOOL opj_jp2_read_colr(  opj_jp2_t *jp2,
-                                    OPJ_BYTE * p_colr_header_data,
-                                    OPJ_UINT32 p_colr_header_size,
-                                    opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_jp2_read_colr(opj_jp2_t *jp2,
+                                  OPJ_BYTE * p_colr_header_data,
+                                  OPJ_UINT32 p_colr_header_size,
+                                  opj_event_mgr_t * p_manager);
 
 /*@}*/
 
@@ -326,13 +327,15 @@ static OPJ_BOOL opj_jp2_read_colr(  opj_jp2_t *jp2,
  * Sets up the procedures to do on writing header after the codestream.
  * Developpers wanting to extend the library can add their own writing procedures.
  */
-static OPJ_BOOL opj_jp2_setup_end_header_writing (opj_jp2_t *jp2, opj_event_mgr_t * p_manager);
+static OPJ_BOOL opj_jp2_setup_end_header_writing(opj_jp2_t *jp2,
+        opj_event_mgr_t * p_manager);
 
 /**
  * Sets up the procedures to do on reading header after the codestream.
  * Developpers wanting to extend the library can add their own writing procedures.
  */
-static OPJ_BOOL opj_jp2_setup_end_header_reading (opj_jp2_t *jp2, opj_event_mgr_t * p_manager);
+static OPJ_BOOL opj_jp2_setup_end_header_reading(opj_jp2_t *jp2,
+        opj_event_mgr_t * p_manager);
 
 /**
  * Reads a jpeg2000 file header structure.
@@ -343,34 +346,34 @@ static OPJ_BOOL opj_jp2_setup_end_header_reading (opj_jp2_t *jp2, opj_event_mgr_
  *
  * @return true if the box is valid.
  */
-static OPJ_BOOL opj_jp2_read_header_procedure(  opj_jp2_t *jp2,
-                                                opj_stream_private_t *stream,
-                                                opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_jp2_read_header_procedure(opj_jp2_t *jp2,
+        opj_stream_private_t *stream,
+        opj_event_mgr_t * p_manager);
 
 /**
  * Excutes the given procedures on the given codec.
  *
- * @param      p_procedure_list        the list of procedures to execute
- * @param      jp2                                     the jpeg2000 file codec to execute the procedures on.
- * @param      stream                                  the stream to execute the procedures on.
- * @param      p_manager                       the user manager.
+ * @param   p_procedure_list    the list of procedures to execute
+ * @param   jp2                 the jpeg2000 file codec to execute the procedures on.
+ * @param   stream                  the stream to execute the procedures on.
+ * @param   p_manager           the user manager.
  *
- * @return     true                            if all the procedures were successfully executed.
+ * @return  true                if all the procedures were successfully executed.
  */
-static OPJ_BOOL opj_jp2_exec (  opj_jp2_t * jp2,
-                                opj_procedure_list_t * p_procedure_list,
-                                opj_stream_private_t *stream,
-                                opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_jp2_exec(opj_jp2_t * jp2,
+                             opj_procedure_list_t * p_procedure_list,
+                             opj_stream_private_t *stream,
+                             opj_event_mgr_t * p_manager);
 
 /**
  * Reads a box header. The box is the way data is packed inside a jpeg2000 file structure.
  *
- * @param      cio                                             the input stream to read data from.
- * @param      box                                             the box structure to fill.
- * @param      p_number_bytes_read             pointer to an int that will store the number of bytes read from the stream (shoul usually be 2).
- * @param      p_manager                               user event manager.
+ * @param   cio                     the input stream to read data from.
+ * @param   box                     the box structure to fill.
+ * @param   p_number_bytes_read     pointer to an int that will store the number of bytes read from the stream (shoul usually be 2).
+ * @param   p_manager               user event manager.
  *
- * @return     true if the box is recognized, false otherwise
+ * @return  true if the box is recognized, false otherwise
 */
 static OPJ_BOOL opj_jp2_read_boxhdr(opj_jp2_box_t *box,
                                     OPJ_UINT32 * p_number_bytes_read,
@@ -381,456 +384,480 @@ static OPJ_BOOL opj_jp2_read_boxhdr(opj_jp2_box_t *box,
  * Sets up the validation ,i.e. adds the procedures to lauch to make sure the codec parameters
  * are valid. Developpers wanting to extend the library can add their own validation procedures.
  */
-static OPJ_BOOL opj_jp2_setup_encoding_validation (opj_jp2_t *jp2, opj_event_mgr_t * p_manager);
+static OPJ_BOOL opj_jp2_setup_encoding_validation(opj_jp2_t *jp2,
+        opj_event_mgr_t * p_manager);
 
 /**
  * Sets up the procedures to do on writing header. Developpers wanting to extend the library can add their own writing procedures.
  */
-static OPJ_BOOL opj_jp2_setup_header_writing (opj_jp2_t *jp2, opj_event_mgr_t * p_manager);
+static OPJ_BOOL opj_jp2_setup_header_writing(opj_jp2_t *jp2,
+        opj_event_mgr_t * p_manager);
 
-static OPJ_BOOL opj_jp2_default_validation (   opj_jp2_t * jp2,
-                                        opj_stream_private_t *cio,
-                                        opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_jp2_default_validation(opj_jp2_t * jp2,
+        opj_stream_private_t *cio,
+        opj_event_mgr_t * p_manager);
 
 /**
  * Finds the image execution function related to the given box id.
  *
- * @param      p_id    the id of the handler to fetch.
+ * @param   p_id    the id of the handler to fetch.
  *
- * @return     the given handler or NULL if it could not be found.
+ * @return  the given handler or NULL if it could not be found.
  */
-static const opj_jp2_header_handler_t * opj_jp2_img_find_handler (OPJ_UINT32 p_id);
+static const opj_jp2_header_handler_t * opj_jp2_img_find_handler(
+    OPJ_UINT32 p_id);
 
 /**
  * Finds the execution function related to the given box id.
  *
- * @param      p_id    the id of the handler to fetch.
+ * @param   p_id    the id of the handler to fetch.
  *
- * @return     the given handler or NULL if it could not be found.
+ * @return  the given handler or NULL if it could not be found.
  */
-static const opj_jp2_header_handler_t * opj_jp2_find_handler (OPJ_UINT32 p_id );
+static const opj_jp2_header_handler_t * opj_jp2_find_handler(OPJ_UINT32 p_id);
 
-static const opj_jp2_header_handler_t jp2_header [] =
-{
-       {JP2_JP,opj_jp2_read_jp},
-       {JP2_FTYP,opj_jp2_read_ftyp},
-       {JP2_JP2H,opj_jp2_read_jp2h}
+static const opj_jp2_header_handler_t jp2_header [] = {
+    {JP2_JP, opj_jp2_read_jp},
+    {JP2_FTYP, opj_jp2_read_ftyp},
+    {JP2_JP2H, opj_jp2_read_jp2h}
 };
 
-static const opj_jp2_header_handler_t jp2_img_header [] =
-{
-       {JP2_IHDR,opj_jp2_read_ihdr},
-       {JP2_COLR,opj_jp2_read_colr},
-       {JP2_BPCC,opj_jp2_read_bpcc},
-       {JP2_PCLR,opj_jp2_read_pclr},
-       {JP2_CMAP,opj_jp2_read_cmap},
-       {JP2_CDEF,opj_jp2_read_cdef}
+static const opj_jp2_header_handler_t jp2_img_header [] = {
+    {JP2_IHDR, opj_jp2_read_ihdr},
+    {JP2_COLR, opj_jp2_read_colr},
+    {JP2_BPCC, opj_jp2_read_bpcc},
+    {JP2_PCLR, opj_jp2_read_pclr},
+    {JP2_CMAP, opj_jp2_read_cmap},
+    {JP2_CDEF, opj_jp2_read_cdef}
 
 };
 
 /**
  * Reads a box header. The box is the way data is packed inside a jpeg2000 file structure. Data is read from a character string
  *
- * @param      box                                             the box structure to fill.
- * @param      p_data                                  the character string to read data from.
- * @param      p_number_bytes_read             pointer to an int that will store the number of bytes read from the stream (shoul usually be 2).
- * @param      p_box_max_size                  the maximum number of bytes in the box.
- * @param      p_manager         FIXME DOC
+ * @param   box                     the box structure to fill.
+ * @param   p_data                  the character string to read data from.
+ * @param   p_number_bytes_read     pointer to an int that will store the number of bytes read from the stream (shoul usually be 2).
+ * @param   p_box_max_size          the maximum number of bytes in the box.
+ * @param   p_manager         FIXME DOC
  *
- * @return     true if the box is recognized, false otherwise
+ * @return  true if the box is recognized, false otherwise
 */
-static OPJ_BOOL opj_jp2_read_boxhdr_char(   opj_jp2_box_t *box,
-                                            OPJ_BYTE * p_data,
-                                            OPJ_UINT32 * p_number_bytes_read,
-                                            OPJ_UINT32 p_box_max_size,
-                                            opj_event_mgr_t * p_manager );
+static OPJ_BOOL opj_jp2_read_boxhdr_char(opj_jp2_box_t *box,
+        OPJ_BYTE * p_data,
+        OPJ_UINT32 * p_number_bytes_read,
+        OPJ_UINT32 p_box_max_size,
+        opj_event_mgr_t * p_manager);
 
 /**
  * Sets up the validation ,i.e. adds the procedures to lauch to make sure the codec parameters
  * are valid. Developpers wanting to extend the library can add their own validation procedures.
  */
-static OPJ_BOOL opj_jp2_setup_decoding_validation (opj_jp2_t *jp2, opj_event_mgr_t * p_manager);
+static OPJ_BOOL opj_jp2_setup_decoding_validation(opj_jp2_t *jp2,
+        opj_event_mgr_t * p_manager);
 
 /**
  * Sets up the procedures to do on reading header.
  * Developpers wanting to extend the library can add their own writing procedures.
  */
-static OPJ_BOOL opj_jp2_setup_header_reading (opj_jp2_t *jp2, opj_event_mgr_t * p_manager);
+static OPJ_BOOL opj_jp2_setup_header_reading(opj_jp2_t *jp2,
+        opj_event_mgr_t * p_manager);
 
 /* ----------------------------------------------------------------------- */
 static OPJ_BOOL opj_jp2_read_boxhdr(opj_jp2_box_t *box,
-                              OPJ_UINT32 * p_number_bytes_read,
-                              opj_stream_private_t *cio,
-                              opj_event_mgr_t * p_manager )
+                                    OPJ_UINT32 * p_number_bytes_read,
+                                    opj_stream_private_t *cio,
+                                    opj_event_mgr_t * p_manager)
 {
-       /* read header from file */
-       OPJ_BYTE l_data_header [8];
-
-       /* preconditions */
-       assert(cio != 00);
-       assert(box != 00);
-       assert(p_number_bytes_read != 00);
-       assert(p_manager != 00);
-
-       *p_number_bytes_read = (OPJ_UINT32)opj_stream_read_data(cio,l_data_header,8,p_manager);
-       if (*p_number_bytes_read != 8) {
-               return OPJ_FALSE;
-       }
-
-       /* process read data */
-       opj_read_bytes(l_data_header,&(box->length), 4);
-       opj_read_bytes(l_data_header+4,&(box->type), 4);
-    
-  if(box->length == 0)/* last box */
-  {
-    const OPJ_OFF_T bleft = opj_stream_get_number_byte_left(cio);
-    if (bleft > (OPJ_OFF_T)(0xFFFFFFFFU - 8U)) {
-      opj_event_msg(p_manager, EVT_ERROR, "Cannot handle box sizes higher than 2^32\n");
-      return OPJ_FALSE;
-    }
-    box->length = (OPJ_UINT32)bleft + 8U;
-    assert( (OPJ_OFF_T)box->length == bleft + 8 );
-    return OPJ_TRUE;
-  }
+    /* read header from file */
+    OPJ_BYTE l_data_header [8];
+
+    /* preconditions */
+    assert(cio != 00);
+    assert(box != 00);
+    assert(p_number_bytes_read != 00);
+    assert(p_manager != 00);
+
+    *p_number_bytes_read = (OPJ_UINT32)opj_stream_read_data(cio, l_data_header, 8,
+                           p_manager);
+    if (*p_number_bytes_read != 8) {
+        return OPJ_FALSE;
+    }
+
+    /* process read data */
+    opj_read_bytes(l_data_header, &(box->length), 4);
+    opj_read_bytes(l_data_header + 4, &(box->type), 4);
+
+    if (box->length == 0) { /* last box */
+        const OPJ_OFF_T bleft = opj_stream_get_number_byte_left(cio);
+        if (bleft > (OPJ_OFF_T)(0xFFFFFFFFU - 8U)) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Cannot handle box sizes higher than 2^32\n");
+            return OPJ_FALSE;
+        }
+        box->length = (OPJ_UINT32)bleft + 8U;
+        assert((OPJ_OFF_T)box->length == bleft + 8);
+        return OPJ_TRUE;
+    }
 
-       /* do we have a "special very large box ?" */
-       /* read then the XLBox */
-       if (box->length == 1) {
-               OPJ_UINT32 l_xl_part_size;
+    /* do we have a "special very large box ?" */
+    /* read then the XLBox */
+    if (box->length == 1) {
+        OPJ_UINT32 l_xl_part_size;
 
-               OPJ_UINT32 l_nb_bytes_read = (OPJ_UINT32)opj_stream_read_data(cio,l_data_header,8,p_manager);
-               if (l_nb_bytes_read != 8) {
-                       if (l_nb_bytes_read > 0) {
-                               *p_number_bytes_read += l_nb_bytes_read;
-                       }
+        OPJ_UINT32 l_nb_bytes_read = (OPJ_UINT32)opj_stream_read_data(cio,
+                                     l_data_header, 8, p_manager);
+        if (l_nb_bytes_read != 8) {
+            if (l_nb_bytes_read > 0) {
+                *p_number_bytes_read += l_nb_bytes_read;
+            }
 
-                       return OPJ_FALSE;
-               }
+            return OPJ_FALSE;
+        }
 
         *p_number_bytes_read = 16;
-               opj_read_bytes(l_data_header,&l_xl_part_size, 4);
-               if (l_xl_part_size != 0) {
-                       opj_event_msg(p_manager, EVT_ERROR, "Cannot handle box sizes higher than 2^32\n");
-                       return OPJ_FALSE;
-               }
-               opj_read_bytes(l_data_header+4,&(box->length), 4);
-       }
+        opj_read_bytes(l_data_header, &l_xl_part_size, 4);
+        if (l_xl_part_size != 0) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Cannot handle box sizes higher than 2^32\n");
+            return OPJ_FALSE;
+        }
+        opj_read_bytes(l_data_header + 4, &(box->length), 4);
+    }
     return OPJ_TRUE;
 }
 
 #if 0
-static void jp2_write_url(opj_cio_t *cio, char *Idx_file) {
-       OPJ_UINT32 i;
-       opj_jp2_box_t box;
-
-       box.init_pos = cio_tell(cio);
-       cio_skip(cio, 4);
-       cio_write(cio, JP2_URL, 4);     /* DBTL */
-       cio_write(cio, 0, 1);           /* VERS */
-       cio_write(cio, 0, 3);           /* FLAG */
-
-       if(Idx_file) {
-               for (i = 0; i < strlen(Idx_file); i++) {
-                       cio_write(cio, Idx_file[i], 1);
-               }
-       }
-
-       box.length = cio_tell(cio) - box.init_pos;
-       cio_seek(cio, box.init_pos);
-       cio_write(cio, box.length, 4);  /* L */
-       cio_seek(cio, box.init_pos + box.length);
+static void jp2_write_url(opj_cio_t *cio, char *Idx_file)
+{
+    OPJ_UINT32 i;
+    opj_jp2_box_t box;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, JP2_URL, 4); /* DBTL */
+    cio_write(cio, 0, 1);       /* VERS */
+    cio_write(cio, 0, 3);       /* FLAG */
+
+    if (Idx_file) {
+        for (i = 0; i < strlen(Idx_file); i++) {
+            cio_write(cio, Idx_file[i], 1);
+        }
+    }
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);  /* L */
+    cio_seek(cio, box.init_pos + box.length);
 }
 #endif
 
-static OPJ_BOOL opj_jp2_read_ihdr( opj_jp2_t *jp2,
-                            OPJ_BYTE *p_image_header_data,
-                            OPJ_UINT32 p_image_header_size,
-                            opj_event_mgr_t * p_manager )
+static OPJ_BOOL opj_jp2_read_ihdr(opj_jp2_t *jp2,
+                                  OPJ_BYTE *p_image_header_data,
+                                  OPJ_UINT32 p_image_header_size,
+                                  opj_event_mgr_t * p_manager)
 {
-       /* preconditions */
-       assert(p_image_header_data != 00);
-       assert(jp2 != 00);
-       assert(p_manager != 00);
-
-       if (jp2->comps != NULL) {
-               opj_event_msg(p_manager, EVT_WARNING, "Ignoring ihdr box. First ihdr box already read\n");
-               return OPJ_TRUE;
-       }
-       
-       if (p_image_header_size != 14) {
-               opj_event_msg(p_manager, EVT_ERROR, "Bad image header box (bad size)\n");
-               return OPJ_FALSE;
-       }
-
-       opj_read_bytes(p_image_header_data,&(jp2->h),4);                        /* HEIGHT */
-       p_image_header_data += 4;
-       opj_read_bytes(p_image_header_data,&(jp2->w),4);                        /* WIDTH */
-       p_image_header_data += 4;
-       opj_read_bytes(p_image_header_data,&(jp2->numcomps),2);         /* NC */
-       p_image_header_data += 2;
-       
-       if ((jp2->numcomps - 1U) >= 16384U) { /* unsigned underflow is well defined: 1U <= jp2->numcomps <= 16384U */
-               opj_event_msg(p_manager, EVT_ERROR, "Invalid number of components (ihdr)\n");
-               return OPJ_FALSE;
-       }
-
-       /* allocate memory for components */
-       jp2->comps = (opj_jp2_comps_t*) opj_calloc(jp2->numcomps, sizeof(opj_jp2_comps_t));
-       if (jp2->comps == 0) {
-               opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to handle image header (ihdr)\n");
-               return OPJ_FALSE;
-       }
-
-       opj_read_bytes(p_image_header_data,&(jp2->bpc),1);                      /* BPC */
-       ++ p_image_header_data;
-
-       opj_read_bytes(p_image_header_data,&(jp2->C),1);                        /* C */
-       ++ p_image_header_data;
-
-       /* Should be equal to 7 cf. chapter about image header box of the norm */
-       if (jp2->C != 7){
-               opj_event_msg(p_manager, EVT_INFO, "JP2 IHDR box: compression type indicate that the file is not a conforming JP2 file (%d) \n", jp2->C);
-       }
-
-       opj_read_bytes(p_image_header_data,&(jp2->UnkC),1);                     /* UnkC */
-       ++ p_image_header_data;
-       opj_read_bytes(p_image_header_data,&(jp2->IPR),1);                      /* IPR */
-       ++ p_image_header_data;
-
-       return OPJ_TRUE;
+    /* preconditions */
+    assert(p_image_header_data != 00);
+    assert(jp2 != 00);
+    assert(p_manager != 00);
+
+    if (jp2->comps != NULL) {
+        opj_event_msg(p_manager, EVT_WARNING,
+                      "Ignoring ihdr box. First ihdr box already read\n");
+        return OPJ_TRUE;
+    }
+
+    if (p_image_header_size != 14) {
+        opj_event_msg(p_manager, EVT_ERROR, "Bad image header box (bad size)\n");
+        return OPJ_FALSE;
+    }
+
+    opj_read_bytes(p_image_header_data, &(jp2->h), 4);          /* HEIGHT */
+    p_image_header_data += 4;
+    opj_read_bytes(p_image_header_data, &(jp2->w), 4);          /* WIDTH */
+    p_image_header_data += 4;
+    opj_read_bytes(p_image_header_data, &(jp2->numcomps), 2);   /* NC */
+    p_image_header_data += 2;
+
+    if ((jp2->numcomps - 1U) >=
+            16384U) { /* unsigned underflow is well defined: 1U <= jp2->numcomps <= 16384U */
+        opj_event_msg(p_manager, EVT_ERROR, "Invalid number of components (ihdr)\n");
+        return OPJ_FALSE;
+    }
+
+    /* allocate memory for components */
+    jp2->comps = (opj_jp2_comps_t*) opj_calloc(jp2->numcomps,
+                 sizeof(opj_jp2_comps_t));
+    if (jp2->comps == 0) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Not enough memory to handle image header (ihdr)\n");
+        return OPJ_FALSE;
+    }
+
+    opj_read_bytes(p_image_header_data, &(jp2->bpc), 1);        /* BPC */
+    ++ p_image_header_data;
+
+    opj_read_bytes(p_image_header_data, &(jp2->C), 1);          /* C */
+    ++ p_image_header_data;
+
+    /* Should be equal to 7 cf. chapter about image header box of the norm */
+    if (jp2->C != 7) {
+        opj_event_msg(p_manager, EVT_INFO,
+                      "JP2 IHDR box: compression type indicate that the file is not a conforming JP2 file (%d) \n",
+                      jp2->C);
+    }
+
+    opj_read_bytes(p_image_header_data, &(jp2->UnkC), 1);       /* UnkC */
+    ++ p_image_header_data;
+    opj_read_bytes(p_image_header_data, &(jp2->IPR), 1);        /* IPR */
+    ++ p_image_header_data;
+
+    return OPJ_TRUE;
 }
 
 static OPJ_BYTE * opj_jp2_write_ihdr(opj_jp2_t *jp2,
-                              OPJ_UINT32 * p_nb_bytes_written
-                              )
+                                     OPJ_UINT32 * p_nb_bytes_written
+                                    )
 {
-       OPJ_BYTE * l_ihdr_data,* l_current_ihdr_ptr;
-       
-       /* preconditions */
-       assert(jp2 != 00);
-       assert(p_nb_bytes_written != 00);
-
-       /* default image header is 22 bytes wide */
-       l_ihdr_data = (OPJ_BYTE *) opj_calloc(1,22);
-       if (l_ihdr_data == 00) {
-               return 00;
-       }
-
-       l_current_ihdr_ptr = l_ihdr_data;
-       
-       opj_write_bytes(l_current_ihdr_ptr,22,4);                               /* write box size */
-       l_current_ihdr_ptr+=4;
-
-       opj_write_bytes(l_current_ihdr_ptr,JP2_IHDR, 4);                /* IHDR */
-       l_current_ihdr_ptr+=4;
-       
-       opj_write_bytes(l_current_ihdr_ptr,jp2->h, 4);          /* HEIGHT */
-       l_current_ihdr_ptr+=4;
-       
-       opj_write_bytes(l_current_ihdr_ptr, jp2->w, 4);         /* WIDTH */
-       l_current_ihdr_ptr+=4;
-       
-       opj_write_bytes(l_current_ihdr_ptr, jp2->numcomps, 2);          /* NC */
-       l_current_ihdr_ptr+=2;
-       
-       opj_write_bytes(l_current_ihdr_ptr, jp2->bpc, 1);               /* BPC */
-       ++l_current_ihdr_ptr;
-       
-       opj_write_bytes(l_current_ihdr_ptr, jp2->C, 1);         /* C : Always 7 */
-       ++l_current_ihdr_ptr;
-       
-       opj_write_bytes(l_current_ihdr_ptr, jp2->UnkC, 1);              /* UnkC, colorspace unknown */
-       ++l_current_ihdr_ptr;
-       
-       opj_write_bytes(l_current_ihdr_ptr, jp2->IPR, 1);               /* IPR, no intellectual property */
-       ++l_current_ihdr_ptr;
-       
-       *p_nb_bytes_written = 22;
-       
-       return l_ihdr_data;
+    OPJ_BYTE * l_ihdr_data, * l_current_ihdr_ptr;
+
+    /* preconditions */
+    assert(jp2 != 00);
+    assert(p_nb_bytes_written != 00);
+
+    /* default image header is 22 bytes wide */
+    l_ihdr_data = (OPJ_BYTE *) opj_calloc(1, 22);
+    if (l_ihdr_data == 00) {
+        return 00;
+    }
+
+    l_current_ihdr_ptr = l_ihdr_data;
+
+    opj_write_bytes(l_current_ihdr_ptr, 22, 4);             /* write box size */
+    l_current_ihdr_ptr += 4;
+
+    opj_write_bytes(l_current_ihdr_ptr, JP2_IHDR, 4);       /* IHDR */
+    l_current_ihdr_ptr += 4;
+
+    opj_write_bytes(l_current_ihdr_ptr, jp2->h, 4);     /* HEIGHT */
+    l_current_ihdr_ptr += 4;
+
+    opj_write_bytes(l_current_ihdr_ptr, jp2->w, 4);     /* WIDTH */
+    l_current_ihdr_ptr += 4;
+
+    opj_write_bytes(l_current_ihdr_ptr, jp2->numcomps, 2);      /* NC */
+    l_current_ihdr_ptr += 2;
+
+    opj_write_bytes(l_current_ihdr_ptr, jp2->bpc, 1);       /* BPC */
+    ++l_current_ihdr_ptr;
+
+    opj_write_bytes(l_current_ihdr_ptr, jp2->C, 1);     /* C : Always 7 */
+    ++l_current_ihdr_ptr;
+
+    opj_write_bytes(l_current_ihdr_ptr, jp2->UnkC,
+                    1);      /* UnkC, colorspace unknown */
+    ++l_current_ihdr_ptr;
+
+    opj_write_bytes(l_current_ihdr_ptr, jp2->IPR,
+                    1);       /* IPR, no intellectual property */
+    ++l_current_ihdr_ptr;
+
+    *p_nb_bytes_written = 22;
+
+    return l_ihdr_data;
 }
 
-static OPJ_BYTE * opj_jp2_write_bpcc(  opj_jp2_t *jp2,
-                                                       OPJ_UINT32 * p_nb_bytes_written
-                                )
+static OPJ_BYTE * opj_jp2_write_bpcc(opj_jp2_t *jp2,
+                                     OPJ_UINT32 * p_nb_bytes_written
+                                    )
 {
-       OPJ_UINT32 i;
-       /* room for 8 bytes for box and 1 byte for each component */
-       OPJ_UINT32 l_bpcc_size;
-       OPJ_BYTE * l_bpcc_data,* l_current_bpcc_ptr;
-       
-       /* preconditions */
-       assert(jp2 != 00);
-       assert(p_nb_bytes_written != 00);
-       l_bpcc_size = 8 + jp2->numcomps;
-
-       l_bpcc_data = (OPJ_BYTE *) opj_calloc(1,l_bpcc_size);
-       if (l_bpcc_data == 00) {
-               return 00;
-       }
-
-       l_current_bpcc_ptr = l_bpcc_data;
-
-       opj_write_bytes(l_current_bpcc_ptr,l_bpcc_size,4);                              /* write box size */
-       l_current_bpcc_ptr += 4;
-       
-       opj_write_bytes(l_current_bpcc_ptr,JP2_BPCC,4);                                 /* BPCC */
-       l_current_bpcc_ptr += 4;
-
-       for (i = 0; i < jp2->numcomps; ++i)  {
-               opj_write_bytes(l_current_bpcc_ptr, jp2->comps[i].bpcc, 1); /* write each component information */
-               ++l_current_bpcc_ptr;
-       }
-
-       *p_nb_bytes_written = l_bpcc_size;
-       
-       return l_bpcc_data;
+    OPJ_UINT32 i;
+    /* room for 8 bytes for box and 1 byte for each component */
+    OPJ_UINT32 l_bpcc_size;
+    OPJ_BYTE * l_bpcc_data, * l_current_bpcc_ptr;
+
+    /* preconditions */
+    assert(jp2 != 00);
+    assert(p_nb_bytes_written != 00);
+    l_bpcc_size = 8 + jp2->numcomps;
+
+    l_bpcc_data = (OPJ_BYTE *) opj_calloc(1, l_bpcc_size);
+    if (l_bpcc_data == 00) {
+        return 00;
+    }
+
+    l_current_bpcc_ptr = l_bpcc_data;
+
+    opj_write_bytes(l_current_bpcc_ptr, l_bpcc_size,
+                    4);            /* write box size */
+    l_current_bpcc_ptr += 4;
+
+    opj_write_bytes(l_current_bpcc_ptr, JP2_BPCC, 4);               /* BPCC */
+    l_current_bpcc_ptr += 4;
+
+    for (i = 0; i < jp2->numcomps; ++i)  {
+        opj_write_bytes(l_current_bpcc_ptr, jp2->comps[i].bpcc,
+                        1); /* write each component information */
+        ++l_current_bpcc_ptr;
+    }
+
+    *p_nb_bytes_written = l_bpcc_size;
+
+    return l_bpcc_data;
 }
 
-static OPJ_BOOL opj_jp2_read_bpcc( opj_jp2_t *jp2,
-                            OPJ_BYTE * p_bpc_header_data,
-                            OPJ_UINT32 p_bpc_header_size,
-                            opj_event_mgr_t * p_manager
-                            )
+static OPJ_BOOL opj_jp2_read_bpcc(opj_jp2_t *jp2,
+                                  OPJ_BYTE * p_bpc_header_data,
+                                  OPJ_UINT32 p_bpc_header_size,
+                                  opj_event_mgr_t * p_manager
+                                 )
 {
-       OPJ_UINT32 i;
-
-       /* preconditions */
-       assert(p_bpc_header_data != 00);
-       assert(jp2 != 00);
-       assert(p_manager != 00);
-
-       
-       if (jp2->bpc != 255 ){
-               opj_event_msg(p_manager, EVT_WARNING, "A BPCC header box is available although BPC given by the IHDR box (%d) indicate components bit depth is constant\n",jp2->bpc);
-       }
-
-       /* and length is relevant */
-       if (p_bpc_header_size != jp2->numcomps) {
-               opj_event_msg(p_manager, EVT_ERROR, "Bad BPCC header box (bad size)\n");
-               return OPJ_FALSE;
-       }
-
-       /* read info for each component */
-       for (i = 0; i < jp2->numcomps; ++i) {
-               opj_read_bytes(p_bpc_header_data,&jp2->comps[i].bpcc ,1);       /* read each BPCC component */
-               ++p_bpc_header_data;
-       }
-
-       return OPJ_TRUE;
+    OPJ_UINT32 i;
+
+    /* preconditions */
+    assert(p_bpc_header_data != 00);
+    assert(jp2 != 00);
+    assert(p_manager != 00);
+
+
+    if (jp2->bpc != 255) {
+        opj_event_msg(p_manager, EVT_WARNING,
+                      "A BPCC header box is available although BPC given by the IHDR box (%d) indicate components bit depth is constant\n",
+                      jp2->bpc);
+    }
+
+    /* and length is relevant */
+    if (p_bpc_header_size != jp2->numcomps) {
+        opj_event_msg(p_manager, EVT_ERROR, "Bad BPCC header box (bad size)\n");
+        return OPJ_FALSE;
+    }
+
+    /* read info for each component */
+    for (i = 0; i < jp2->numcomps; ++i) {
+        opj_read_bytes(p_bpc_header_data, &jp2->comps[i].bpcc,
+                       1);  /* read each BPCC component */
+        ++p_bpc_header_data;
+    }
+
+    return OPJ_TRUE;
 }
-static OPJ_BYTE * opj_jp2_write_cdef(opj_jp2_t *jp2, OPJ_UINT32 * p_nb_bytes_written)
+static OPJ_BYTE * opj_jp2_write_cdef(opj_jp2_t *jp2,
+                                     OPJ_UINT32 * p_nb_bytes_written)
 {
-       /* room for 8 bytes for box, 2 for n */
-       OPJ_UINT32 l_cdef_size = 10;
-       OPJ_BYTE * l_cdef_data,* l_current_cdef_ptr;
-       OPJ_UINT32 l_value;
-       OPJ_UINT16 i;
-
-       /* preconditions */
-       assert(jp2 != 00);
-       assert(p_nb_bytes_written != 00);
-       assert(jp2->color.jp2_cdef != 00);
-       assert(jp2->color.jp2_cdef->info != 00);
-       assert(jp2->color.jp2_cdef->n > 0U);
-
-       l_cdef_size += 6U * jp2->color.jp2_cdef->n;
-
-       l_cdef_data = (OPJ_BYTE *) opj_malloc(l_cdef_size);
-       if (l_cdef_data == 00) {
-               return 00;
-       }
-
-       l_current_cdef_ptr = l_cdef_data;
-       
-       opj_write_bytes(l_current_cdef_ptr,l_cdef_size,4);                      /* write box size */
-       l_current_cdef_ptr += 4;
-
-       opj_write_bytes(l_current_cdef_ptr,JP2_CDEF,4);                                 /* BPCC */
-       l_current_cdef_ptr += 4;
-
-       l_value = jp2->color.jp2_cdef->n;
-       opj_write_bytes(l_current_cdef_ptr,l_value,2);                                  /* N */
-       l_current_cdef_ptr += 2;
-
-       for (i = 0U; i < jp2->color.jp2_cdef->n; ++i) {
-               l_value = jp2->color.jp2_cdef->info[i].cn;
-               opj_write_bytes(l_current_cdef_ptr,l_value,2);                                  /* Cni */
-               l_current_cdef_ptr += 2;
-               l_value = jp2->color.jp2_cdef->info[i].typ;
-               opj_write_bytes(l_current_cdef_ptr,l_value,2);                                  /* Typi */
-               l_current_cdef_ptr += 2;
-               l_value = jp2->color.jp2_cdef->info[i].asoc;
-               opj_write_bytes(l_current_cdef_ptr,l_value,2);                                  /* Asoci */
-               l_current_cdef_ptr += 2;
-       }
-       *p_nb_bytes_written = l_cdef_size;
-
-       return l_cdef_data;
+    /* room for 8 bytes for box, 2 for n */
+    OPJ_UINT32 l_cdef_size = 10;
+    OPJ_BYTE * l_cdef_data, * l_current_cdef_ptr;
+    OPJ_UINT32 l_value;
+    OPJ_UINT16 i;
+
+    /* preconditions */
+    assert(jp2 != 00);
+    assert(p_nb_bytes_written != 00);
+    assert(jp2->color.jp2_cdef != 00);
+    assert(jp2->color.jp2_cdef->info != 00);
+    assert(jp2->color.jp2_cdef->n > 0U);
+
+    l_cdef_size += 6U * jp2->color.jp2_cdef->n;
+
+    l_cdef_data = (OPJ_BYTE *) opj_malloc(l_cdef_size);
+    if (l_cdef_data == 00) {
+        return 00;
+    }
+
+    l_current_cdef_ptr = l_cdef_data;
+
+    opj_write_bytes(l_current_cdef_ptr, l_cdef_size, 4);        /* write box size */
+    l_current_cdef_ptr += 4;
+
+    opj_write_bytes(l_current_cdef_ptr, JP2_CDEF, 4);               /* BPCC */
+    l_current_cdef_ptr += 4;
+
+    l_value = jp2->color.jp2_cdef->n;
+    opj_write_bytes(l_current_cdef_ptr, l_value, 2);                /* N */
+    l_current_cdef_ptr += 2;
+
+    for (i = 0U; i < jp2->color.jp2_cdef->n; ++i) {
+        l_value = jp2->color.jp2_cdef->info[i].cn;
+        opj_write_bytes(l_current_cdef_ptr, l_value, 2);                /* Cni */
+        l_current_cdef_ptr += 2;
+        l_value = jp2->color.jp2_cdef->info[i].typ;
+        opj_write_bytes(l_current_cdef_ptr, l_value, 2);                /* Typi */
+        l_current_cdef_ptr += 2;
+        l_value = jp2->color.jp2_cdef->info[i].asoc;
+        opj_write_bytes(l_current_cdef_ptr, l_value, 2);                /* Asoci */
+        l_current_cdef_ptr += 2;
+    }
+    *p_nb_bytes_written = l_cdef_size;
+
+    return l_cdef_data;
 }
 
-static OPJ_BYTE * opj_jp2_write_colr(  opj_jp2_t *jp2,
-                                                           OPJ_UINT32 * p_nb_bytes_written
-                                )
+static OPJ_BYTE * opj_jp2_write_colr(opj_jp2_t *jp2,
+                                     OPJ_UINT32 * p_nb_bytes_written
+                                    )
 {
-       /* room for 8 bytes for box 3 for common data and variable upon profile*/
-       OPJ_UINT32 l_colr_size = 11;
-       OPJ_BYTE * l_colr_data,* l_current_colr_ptr;
+    /* room for 8 bytes for box 3 for common data and variable upon profile*/
+    OPJ_UINT32 l_colr_size = 11;
+    OPJ_BYTE * l_colr_data, * l_current_colr_ptr;
 
-       /* preconditions */
-       assert(jp2 != 00);
-       assert(p_nb_bytes_written != 00);
+    /* preconditions */
+    assert(jp2 != 00);
+    assert(p_nb_bytes_written != 00);
     assert(jp2->meth == 1 || jp2->meth == 2);
 
-       switch (jp2->meth) { 
-               case 1 :
-                       l_colr_size += 4; /* EnumCS */
-                       break;
-               case 2 :
-            assert(jp2->color.icc_profile_len);        /* ICC profile */
-            l_colr_size += jp2->color.icc_profile_len;
-                       break;
-               default :
-                       return 00;
-       }
-
-       l_colr_data = (OPJ_BYTE *) opj_calloc(1,l_colr_size);
-       if (l_colr_data == 00) {
-               return 00;
-       }
-       
-       l_current_colr_ptr = l_colr_data;
-
-       opj_write_bytes(l_current_colr_ptr,l_colr_size,4);                              /* write box size */
-       l_current_colr_ptr += 4;
-       
-       opj_write_bytes(l_current_colr_ptr,JP2_COLR,4);                                 /* BPCC */
-       l_current_colr_ptr += 4;
-       
-       opj_write_bytes(l_current_colr_ptr, jp2->meth,1);                               /* METH */
-       ++l_current_colr_ptr;
-       
-       opj_write_bytes(l_current_colr_ptr, jp2->precedence,1);                 /* PRECEDENCE */
-       ++l_current_colr_ptr;
-       
-       opj_write_bytes(l_current_colr_ptr, jp2->approx,1);                             /* APPROX */
-       ++l_current_colr_ptr;
-       
-       if (jp2->meth == 1) { /* Meth value is restricted to 1 or 2 (Table I.9 of part 1) */
-        opj_write_bytes(l_current_colr_ptr, jp2->enumcs,4); }       /* EnumCS */
+    switch (jp2->meth) {
+    case 1 :
+        l_colr_size += 4; /* EnumCS */
+        break;
+    case 2 :
+        assert(jp2->color.icc_profile_len); /* ICC profile */
+        l_colr_size += jp2->color.icc_profile_len;
+        break;
+    default :
+        return 00;
+    }
+
+    l_colr_data = (OPJ_BYTE *) opj_calloc(1, l_colr_size);
+    if (l_colr_data == 00) {
+        return 00;
+    }
+
+    l_current_colr_ptr = l_colr_data;
+
+    opj_write_bytes(l_current_colr_ptr, l_colr_size,
+                    4);            /* write box size */
+    l_current_colr_ptr += 4;
+
+    opj_write_bytes(l_current_colr_ptr, JP2_COLR, 4);               /* BPCC */
+    l_current_colr_ptr += 4;
+
+    opj_write_bytes(l_current_colr_ptr, jp2->meth, 1);              /* METH */
+    ++l_current_colr_ptr;
+
+    opj_write_bytes(l_current_colr_ptr, jp2->precedence, 1);        /* PRECEDENCE */
+    ++l_current_colr_ptr;
+
+    opj_write_bytes(l_current_colr_ptr, jp2->approx, 1);            /* APPROX */
+    ++l_current_colr_ptr;
+
+    if (jp2->meth ==
+            1) { /* Meth value is restricted to 1 or 2 (Table I.9 of part 1) */
+        opj_write_bytes(l_current_colr_ptr, jp2->enumcs, 4);
+    }       /* EnumCS */
     else {
         if (jp2->meth == 2) {                                      /* ICC profile */
             OPJ_UINT32 i;
-            for(i = 0; i < jp2->color.icc_profile_len; ++i) {
+            for (i = 0; i < jp2->color.icc_profile_len; ++i) {
                 opj_write_bytes(l_current_colr_ptr, jp2->color.icc_profile_buf[i], 1);
                 ++l_current_colr_ptr;
             }
         }
-       }
+    }
 
-       *p_nb_bytes_written = l_colr_size;
-       
-       return l_colr_data;
+    *p_nb_bytes_written = l_colr_size;
+
+    return l_colr_data;
 }
 
 static void opj_jp2_free_pclr(opj_jp2_color_t *color)
@@ -839,1511 +866,1605 @@ static void opj_jp2_free_pclr(opj_jp2_color_t *color)
     opj_free(color->jp2_pclr->channel_size);
     opj_free(color->jp2_pclr->entries);
 
-       if(color->jp2_pclr->cmap) opj_free(color->jp2_pclr->cmap);
+    if (color->jp2_pclr->cmap) {
+        opj_free(color->jp2_pclr->cmap);
+    }
 
-    opj_free(color->jp2_pclr); color->jp2_pclr = NULL;
+    opj_free(color->jp2_pclr);
+    color->jp2_pclr = NULL;
 }
 
-static OPJ_BOOL opj_jp2_check_color(opj_image_t *image, opj_jp2_color_t *color, opj_event_mgr_t *p_manager)
+static OPJ_BOOL opj_jp2_check_color(opj_image_t *image, opj_jp2_color_t *color,
+                                    opj_event_mgr_t *p_manager)
 {
-       OPJ_UINT16 i;
-
-       /* testcase 4149.pdf.SIGSEGV.cf7.3501 */
-       if (color->jp2_cdef) {
-               opj_jp2_cdef_info_t *info = color->jp2_cdef->info;
-               OPJ_UINT16 n = color->jp2_cdef->n;
-               OPJ_UINT32 nr_channels = image->numcomps; /* FIXME image->numcomps == jp2->numcomps before color is applied ??? */
-
-               /* cdef applies to cmap channels if any */
-               if (color->jp2_pclr && color->jp2_pclr->cmap) {
-                       nr_channels = (OPJ_UINT32)color->jp2_pclr->nr_channels;
-               }
-
-               for (i = 0; i < n; i++) {
-                       if (info[i].cn >= nr_channels) {
-                               opj_event_msg(p_manager, EVT_ERROR, "Invalid component index %d (>= %d).\n", info[i].cn, nr_channels);
-                               return OPJ_FALSE;
-                       }
-                       if (info[i].asoc == 65535U) continue;
-
-                       if (info[i].asoc > 0 && (OPJ_UINT32)(info[i].asoc - 1) >= nr_channels) {
-                               opj_event_msg(p_manager, EVT_ERROR, "Invalid component index %d (>= %d).\n", info[i].asoc - 1, nr_channels);
-                               return OPJ_FALSE;
-                       }
-               }
-
-               /* issue 397 */
-               /* ISO 15444-1 states that if cdef is present, it shall contain a complete list of channel definitions. */
-               while (nr_channels > 0)
-               {
-                       for(i = 0; i < n; ++i) {
-                               if ((OPJ_UINT32)info[i].cn == (nr_channels - 1U)) {
-                                       break;
-                               }
-                       }
-                       if (i == n) {
-                               opj_event_msg(p_manager, EVT_ERROR, "Incomplete channel definitions.\n");
-                               return OPJ_FALSE;
-                       }
-                       --nr_channels;
-               }
-       }
-
-       /* testcases 451.pdf.SIGSEGV.f4c.3723, 451.pdf.SIGSEGV.5b5.3723 and
-          66ea31acbb0f23a2bbc91f64d69a03f5_signal_sigsegv_13937c0_7030_5725.pdf */
-       if (color->jp2_pclr && color->jp2_pclr->cmap) {
-               OPJ_UINT16 nr_channels = color->jp2_pclr->nr_channels;
-               opj_jp2_cmap_comp_t *cmap = color->jp2_pclr->cmap;
-               OPJ_BOOL *pcol_usage, is_sane = OPJ_TRUE;
-
-               /* verify that all original components match an existing one */
-               for (i = 0; i < nr_channels; i++) {
-                       if (cmap[i].cmp >= image->numcomps) {
-                               opj_event_msg(p_manager, EVT_ERROR, "Invalid component index %d (>= %d).\n", cmap[i].cmp, image->numcomps);
-                               is_sane = OPJ_FALSE;
-                       }
-               }
-
-               pcol_usage = (OPJ_BOOL *) opj_calloc(nr_channels, sizeof(OPJ_BOOL));
-               if (!pcol_usage) {
-                       opj_event_msg(p_manager, EVT_ERROR, "Unexpected OOM.\n");
-                       return OPJ_FALSE;
-               }
-               /* verify that no component is targeted more than once */
-               for (i = 0; i < nr_channels; i++) {
-      OPJ_UINT16 pcol = cmap[i].pcol;
-      assert(cmap[i].mtyp == 0 || cmap[i].mtyp == 1);
-                       if (pcol >= nr_channels) {
-                               opj_event_msg(p_manager, EVT_ERROR, "Invalid component/palette index for direct mapping %d.\n", pcol);
-                               is_sane = OPJ_FALSE;
-                       }
-                       else if (pcol_usage[pcol] && cmap[i].mtyp == 1) {
-                               opj_event_msg(p_manager, EVT_ERROR, "Component %d is mapped twice.\n", pcol);
-                               is_sane = OPJ_FALSE;
-                       }
-      else if (cmap[i].mtyp == 0 && cmap[i].pcol != 0) {
-        /* I.5.3.5 PCOL: If the value of the MTYP field for this channel is 0, then
-         * the value of this field shall be 0. */
-                               opj_event_msg(p_manager, EVT_ERROR, "Direct use at #%d however pcol=%d.\n", i, pcol);
-                               is_sane = OPJ_FALSE;
-      }
-                       else
-                               pcol_usage[pcol] = OPJ_TRUE;
-               }
-               /* verify that all components are targeted at least once */
-               for (i = 0; i < nr_channels; i++) {
-                       if (!pcol_usage[i] && cmap[i].mtyp != 0) {
-                               opj_event_msg(p_manager, EVT_ERROR, "Component %d doesn't have a mapping.\n", i);
-                               is_sane = OPJ_FALSE;
-                       }
-               }
-               /* Issue 235/447 weird cmap */
-               if (1 && is_sane && (image->numcomps==1U)) {
-                       for (i = 0; i < nr_channels; i++) {
-                               if (!pcol_usage[i]) {
-                                       is_sane = 0U;
-                                       opj_event_msg(p_manager, EVT_WARNING, "Component mapping seems wrong. Trying to correct.\n", i);
-                                       break;
-                               }
-                       }
-                       if (!is_sane) {
-                               is_sane = OPJ_TRUE;
-                               for (i = 0; i < nr_channels; i++) {
-                                       cmap[i].mtyp = 1U;
-                                       cmap[i].pcol = (OPJ_BYTE) i;
-                               }
-                       }
-               }
-               opj_free(pcol_usage);
-               if (!is_sane) {
-                       return OPJ_FALSE;
-               }
-       }
-
-       return OPJ_TRUE;
+    OPJ_UINT16 i;
+
+    /* testcase 4149.pdf.SIGSEGV.cf7.3501 */
+    if (color->jp2_cdef) {
+        opj_jp2_cdef_info_t *info = color->jp2_cdef->info;
+        OPJ_UINT16 n = color->jp2_cdef->n;
+        OPJ_UINT32 nr_channels =
+            image->numcomps; /* FIXME image->numcomps == jp2->numcomps before color is applied ??? */
+
+        /* cdef applies to cmap channels if any */
+        if (color->jp2_pclr && color->jp2_pclr->cmap) {
+            nr_channels = (OPJ_UINT32)color->jp2_pclr->nr_channels;
+        }
+
+        for (i = 0; i < n; i++) {
+            if (info[i].cn >= nr_channels) {
+                opj_event_msg(p_manager, EVT_ERROR, "Invalid component index %d (>= %d).\n",
+                              info[i].cn, nr_channels);
+                return OPJ_FALSE;
+            }
+            if (info[i].asoc == 65535U) {
+                continue;
+            }
+
+            if (info[i].asoc > 0 && (OPJ_UINT32)(info[i].asoc - 1) >= nr_channels) {
+                opj_event_msg(p_manager, EVT_ERROR, "Invalid component index %d (>= %d).\n",
+                              info[i].asoc - 1, nr_channels);
+                return OPJ_FALSE;
+            }
+        }
+
+        /* issue 397 */
+        /* ISO 15444-1 states that if cdef is present, it shall contain a complete list of channel definitions. */
+        while (nr_channels > 0) {
+            for (i = 0; i < n; ++i) {
+                if ((OPJ_UINT32)info[i].cn == (nr_channels - 1U)) {
+                    break;
+                }
+            }
+            if (i == n) {
+                opj_event_msg(p_manager, EVT_ERROR, "Incomplete channel definitions.\n");
+                return OPJ_FALSE;
+            }
+            --nr_channels;
+        }
+    }
+
+    /* testcases 451.pdf.SIGSEGV.f4c.3723, 451.pdf.SIGSEGV.5b5.3723 and
+       66ea31acbb0f23a2bbc91f64d69a03f5_signal_sigsegv_13937c0_7030_5725.pdf */
+    if (color->jp2_pclr && color->jp2_pclr->cmap) {
+        OPJ_UINT16 nr_channels = color->jp2_pclr->nr_channels;
+        opj_jp2_cmap_comp_t *cmap = color->jp2_pclr->cmap;
+        OPJ_BOOL *pcol_usage, is_sane = OPJ_TRUE;
+
+        /* verify that all original components match an existing one */
+        for (i = 0; i < nr_channels; i++) {
+            if (cmap[i].cmp >= image->numcomps) {
+                opj_event_msg(p_manager, EVT_ERROR, "Invalid component index %d (>= %d).\n",
+                              cmap[i].cmp, image->numcomps);
+                is_sane = OPJ_FALSE;
+            }
+        }
+
+        pcol_usage = (OPJ_BOOL *) opj_calloc(nr_channels, sizeof(OPJ_BOOL));
+        if (!pcol_usage) {
+            opj_event_msg(p_manager, EVT_ERROR, "Unexpected OOM.\n");
+            return OPJ_FALSE;
+        }
+        /* verify that no component is targeted more than once */
+        for (i = 0; i < nr_channels; i++) {
+            OPJ_UINT16 pcol = cmap[i].pcol;
+            assert(cmap[i].mtyp == 0 || cmap[i].mtyp == 1);
+            if (pcol >= nr_channels) {
+                opj_event_msg(p_manager, EVT_ERROR,
+                              "Invalid component/palette index for direct mapping %d.\n", pcol);
+                is_sane = OPJ_FALSE;
+            } else if (pcol_usage[pcol] && cmap[i].mtyp == 1) {
+                opj_event_msg(p_manager, EVT_ERROR, "Component %d is mapped twice.\n", pcol);
+                is_sane = OPJ_FALSE;
+            } else if (cmap[i].mtyp == 0 && cmap[i].pcol != 0) {
+                /* I.5.3.5 PCOL: If the value of the MTYP field for this channel is 0, then
+                 * the value of this field shall be 0. */
+                opj_event_msg(p_manager, EVT_ERROR, "Direct use at #%d however pcol=%d.\n", i,
+                              pcol);
+                is_sane = OPJ_FALSE;
+            } else {
+                pcol_usage[pcol] = OPJ_TRUE;
+            }
+        }
+        /* verify that all components are targeted at least once */
+        for (i = 0; i < nr_channels; i++) {
+            if (!pcol_usage[i] && cmap[i].mtyp != 0) {
+                opj_event_msg(p_manager, EVT_ERROR, "Component %d doesn't have a mapping.\n",
+                              i);
+                is_sane = OPJ_FALSE;
+            }
+        }
+        /* Issue 235/447 weird cmap */
+        if (1 && is_sane && (image->numcomps == 1U)) {
+            for (i = 0; i < nr_channels; i++) {
+                if (!pcol_usage[i]) {
+                    is_sane = 0U;
+                    opj_event_msg(p_manager, EVT_WARNING,
+                                  "Component mapping seems wrong. Trying to correct.\n", i);
+                    break;
+                }
+            }
+            if (!is_sane) {
+                is_sane = OPJ_TRUE;
+                for (i = 0; i < nr_channels; i++) {
+                    cmap[i].mtyp = 1U;
+                    cmap[i].pcol = (OPJ_BYTE) i;
+                }
+            }
+        }
+        opj_free(pcol_usage);
+        if (!is_sane) {
+            return OPJ_FALSE;
+        }
+    }
+
+    return OPJ_TRUE;
 }
 
 /* file9.jp2 */
 static void opj_jp2_apply_pclr(opj_image_t *image, opj_jp2_color_t *color)
 {
-       opj_image_comp_t *old_comps, *new_comps;
-       OPJ_BYTE *channel_size, *channel_sign;
-       OPJ_UINT32 *entries;
-       opj_jp2_cmap_comp_t *cmap;
-       OPJ_INT32 *src, *dst;
-       OPJ_UINT32 j, max;
-       OPJ_UINT16 i, nr_channels, cmp, pcol;
-       OPJ_INT32 k, top_k;
-
-       channel_size = color->jp2_pclr->channel_size;
-       channel_sign = color->jp2_pclr->channel_sign;
-       entries = color->jp2_pclr->entries;
-       cmap = color->jp2_pclr->cmap;
-       nr_channels = color->jp2_pclr->nr_channels;
-
-       old_comps = image->comps;
-       new_comps = (opj_image_comp_t*)
-                       opj_malloc(nr_channels * sizeof(opj_image_comp_t));
-       if (!new_comps) {
-               /* FIXME no error code for opj_jp2_apply_pclr */
-               /* FIXME event manager error callback */
-               return;
-       }
-       for(i = 0; i < nr_channels; ++i) {
-               pcol = cmap[i].pcol; cmp = cmap[i].cmp;
-
-               /* Direct use */
-    if(cmap[i].mtyp == 0){
-      assert( pcol == 0 );
-      new_comps[i] = old_comps[cmp];
-    } else {
-      assert( i == pcol );
-      new_comps[pcol] = old_comps[cmp];
-    }
-
-               /* Palette mapping: */
-               new_comps[i].data = (OPJ_INT32*)
-                               opj_malloc(old_comps[cmp].w * old_comps[cmp].h * sizeof(OPJ_INT32));
-               if (!new_comps[i].data) {
-                       opj_free(new_comps);
-                       new_comps = NULL;
-                       /* FIXME no error code for opj_jp2_apply_pclr */
-                       /* FIXME event manager error callback */
-                       return;
-               }
-               new_comps[i].prec = channel_size[i];
-               new_comps[i].sgnd = channel_sign[i];
-       }
-
-       top_k = color->jp2_pclr->nr_entries - 1;
-
-       for(i = 0; i < nr_channels; ++i) {
-               /* Palette mapping: */
-               cmp = cmap[i].cmp; pcol = cmap[i].pcol;
-               src = old_comps[cmp].data;
-    assert( src );
-               max = new_comps[pcol].w * new_comps[pcol].h;
-
-               /* Direct use: */
-    if(cmap[i].mtyp == 0) {
-      assert( cmp == 0 );
-      dst = new_comps[i].data;
-      assert( dst );
-      for(j = 0; j < max; ++j) {
-        dst[j] = src[j];
-      }
+    opj_image_comp_t *old_comps, *new_comps;
+    OPJ_BYTE *channel_size, *channel_sign;
+    OPJ_UINT32 *entries;
+    opj_jp2_cmap_comp_t *cmap;
+    OPJ_INT32 *src, *dst;
+    OPJ_UINT32 j, max;
+    OPJ_UINT16 i, nr_channels, cmp, pcol;
+    OPJ_INT32 k, top_k;
+
+    channel_size = color->jp2_pclr->channel_size;
+    channel_sign = color->jp2_pclr->channel_sign;
+    entries = color->jp2_pclr->entries;
+    cmap = color->jp2_pclr->cmap;
+    nr_channels = color->jp2_pclr->nr_channels;
+
+    old_comps = image->comps;
+    new_comps = (opj_image_comp_t*)
+                opj_malloc(nr_channels * sizeof(opj_image_comp_t));
+    if (!new_comps) {
+        /* FIXME no error code for opj_jp2_apply_pclr */
+        /* FIXME event manager error callback */
+        return;
+    }
+    for (i = 0; i < nr_channels; ++i) {
+        pcol = cmap[i].pcol;
+        cmp = cmap[i].cmp;
+
+        /* Direct use */
+        if (cmap[i].mtyp == 0) {
+            assert(pcol == 0);
+            new_comps[i] = old_comps[cmp];
+        } else {
+            assert(i == pcol);
+            new_comps[pcol] = old_comps[cmp];
+        }
+
+        /* Palette mapping: */
+        new_comps[i].data = (OPJ_INT32*)
+                            opj_malloc(old_comps[cmp].w * old_comps[cmp].h * sizeof(OPJ_INT32));
+        if (!new_comps[i].data) {
+            opj_free(new_comps);
+            new_comps = NULL;
+            /* FIXME no error code for opj_jp2_apply_pclr */
+            /* FIXME event manager error callback */
+            return;
+        }
+        new_comps[i].prec = channel_size[i];
+        new_comps[i].sgnd = channel_sign[i];
     }
-    else {
-      assert( i == pcol );
-      dst = new_comps[pcol].data;
-      assert( dst );
-      for(j = 0; j < max; ++j) {
-        /* The index */
-        if((k = src[j]) < 0) k = 0; else if(k > top_k) k = top_k;
 
-        /* The colour */
-        dst[j] = (OPJ_INT32)entries[k * nr_channels + pcol];
+    top_k = color->jp2_pclr->nr_entries - 1;
+
+    for (i = 0; i < nr_channels; ++i) {
+        /* Palette mapping: */
+        cmp = cmap[i].cmp;
+        pcol = cmap[i].pcol;
+        src = old_comps[cmp].data;
+        assert(src);
+        max = new_comps[pcol].w * new_comps[pcol].h;
+
+        /* Direct use: */
+        if (cmap[i].mtyp == 0) {
+            assert(cmp == 0);
+            dst = new_comps[i].data;
+            assert(dst);
+            for (j = 0; j < max; ++j) {
+                dst[j] = src[j];
+            }
+        } else {
+            assert(i == pcol);
+            dst = new_comps[pcol].data;
+            assert(dst);
+            for (j = 0; j < max; ++j) {
+                /* The index */
+                if ((k = src[j]) < 0) {
+                    k = 0;
+                } else if (k > top_k) {
+                    k = top_k;
+                }
+
+                /* The colour */
+                dst[j] = (OPJ_INT32)entries[k * nr_channels + pcol];
+            }
         }
     }
-       }
 
-       max = image->numcomps;
-       for(i = 0; i < max; ++i) {
-               if(old_comps[i].data) opj_free(old_comps[i].data);
-       }
+    max = image->numcomps;
+    for (i = 0; i < max; ++i) {
+        if (old_comps[i].data) {
+            opj_free(old_comps[i].data);
+        }
+    }
 
-       opj_free(old_comps);
-       image->comps = new_comps;
-       image->numcomps = nr_channels;
+    opj_free(old_comps);
+    image->comps = new_comps;
+    image->numcomps = nr_channels;
 
-       opj_jp2_free_pclr(color);
+    opj_jp2_free_pclr(color);
 
 }/* apply_pclr() */
 
-static OPJ_BOOL opj_jp2_read_pclr(     opj_jp2_t *jp2,
-                            OPJ_BYTE * p_pclr_header_data,
-                            OPJ_UINT32 p_pclr_header_size,
-                            opj_event_mgr_t * p_manager
-                            )
+static OPJ_BOOL opj_jp2_read_pclr(opj_jp2_t *jp2,
+                                  OPJ_BYTE * p_pclr_header_data,
+                                  OPJ_UINT32 p_pclr_header_size,
+                                  opj_event_mgr_t * p_manager
+                                 )
 {
-       opj_jp2_pclr_t *jp2_pclr;
-       OPJ_BYTE *channel_size, *channel_sign;
-       OPJ_UINT32 *entries;
-       OPJ_UINT16 nr_entries,nr_channels;
-       OPJ_UINT16 i, j;
-       OPJ_UINT32 l_value;
-       OPJ_BYTE *orig_header_data = p_pclr_header_data;
-
-       /* preconditions */
-       assert(p_pclr_header_data != 00);
-       assert(jp2 != 00);
-       assert(p_manager != 00);
+    opj_jp2_pclr_t *jp2_pclr;
+    OPJ_BYTE *channel_size, *channel_sign;
+    OPJ_UINT32 *entries;
+    OPJ_UINT16 nr_entries, nr_channels;
+    OPJ_UINT16 i, j;
+    OPJ_UINT32 l_value;
+    OPJ_BYTE *orig_header_data = p_pclr_header_data;
+
+    /* preconditions */
+    assert(p_pclr_header_data != 00);
+    assert(jp2 != 00);
+    assert(p_manager != 00);
     (void)p_pclr_header_size;
 
-       if(jp2->color.jp2_pclr)
-               return OPJ_FALSE;
-
-       if (p_pclr_header_size < 3)
-               return OPJ_FALSE;
-
-       opj_read_bytes(p_pclr_header_data, &l_value , 2);       /* NE */
-       p_pclr_header_data += 2;
-       nr_entries = (OPJ_UINT16) l_value;
-       if ((nr_entries == 0U) || (nr_entries > 1024U)) {
-               opj_event_msg(p_manager, EVT_ERROR, "Invalid PCLR box. Reports %d entries\n", (int)nr_entries);
-               return OPJ_FALSE;
-       }
-
-       opj_read_bytes(p_pclr_header_data, &l_value , 1);       /* NPC */
-       ++p_pclr_header_data;
-       nr_channels = (OPJ_UINT16) l_value;
-       if (nr_channels == 0U) {
-               opj_event_msg(p_manager, EVT_ERROR, "Invalid PCLR box. Reports 0 palette columns\n");
-               return OPJ_FALSE;
-       }
-
-       if (p_pclr_header_size < 3 + (OPJ_UINT32)nr_channels)
-               return OPJ_FALSE;
-
-       entries = (OPJ_UINT32*) opj_malloc((size_t)nr_channels * nr_entries * sizeof(OPJ_UINT32));
-    if (!entries)
-        return OPJ_FALSE;
-       channel_size = (OPJ_BYTE*) opj_malloc(nr_channels);
-    if (!channel_size)
-    {
+    if (jp2->color.jp2_pclr) {
+        return OPJ_FALSE;
+    }
+
+    if (p_pclr_header_size < 3) {
+        return OPJ_FALSE;
+    }
+
+    opj_read_bytes(p_pclr_header_data, &l_value, 2);    /* NE */
+    p_pclr_header_data += 2;
+    nr_entries = (OPJ_UINT16) l_value;
+    if ((nr_entries == 0U) || (nr_entries > 1024U)) {
+        opj_event_msg(p_manager, EVT_ERROR, "Invalid PCLR box. Reports %d entries\n",
+                      (int)nr_entries);
+        return OPJ_FALSE;
+    }
+
+    opj_read_bytes(p_pclr_header_data, &l_value, 1);    /* NPC */
+    ++p_pclr_header_data;
+    nr_channels = (OPJ_UINT16) l_value;
+    if (nr_channels == 0U) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Invalid PCLR box. Reports 0 palette columns\n");
+        return OPJ_FALSE;
+    }
+
+    if (p_pclr_header_size < 3 + (OPJ_UINT32)nr_channels) {
+        return OPJ_FALSE;
+    }
+
+    entries = (OPJ_UINT32*) opj_malloc((size_t)nr_channels * nr_entries * sizeof(
+                                           OPJ_UINT32));
+    if (!entries) {
+        return OPJ_FALSE;
+    }
+    channel_size = (OPJ_BYTE*) opj_malloc(nr_channels);
+    if (!channel_size) {
         opj_free(entries);
         return OPJ_FALSE;
     }
-       channel_sign = (OPJ_BYTE*) opj_malloc(nr_channels);
-       if (!channel_sign)
-       {
+    channel_sign = (OPJ_BYTE*) opj_malloc(nr_channels);
+    if (!channel_sign) {
         opj_free(entries);
         opj_free(channel_size);
         return OPJ_FALSE;
-       }
+    }
 
-       jp2_pclr = (opj_jp2_pclr_t*)opj_malloc(sizeof(opj_jp2_pclr_t));
-    if (!jp2_pclr)
-    {
+    jp2_pclr = (opj_jp2_pclr_t*)opj_malloc(sizeof(opj_jp2_pclr_t));
+    if (!jp2_pclr) {
         opj_free(entries);
         opj_free(channel_size);
         opj_free(channel_sign);
         return OPJ_FALSE;
     }
 
-       jp2_pclr->channel_sign = channel_sign;
-       jp2_pclr->channel_size = channel_size;
-       jp2_pclr->entries = entries;
-       jp2_pclr->nr_entries = nr_entries;
-       jp2_pclr->nr_channels = (OPJ_BYTE) l_value;
-       jp2_pclr->cmap = NULL;
+    jp2_pclr->channel_sign = channel_sign;
+    jp2_pclr->channel_size = channel_size;
+    jp2_pclr->entries = entries;
+    jp2_pclr->nr_entries = nr_entries;
+    jp2_pclr->nr_channels = (OPJ_BYTE) l_value;
+    jp2_pclr->cmap = NULL;
 
-       jp2->color.jp2_pclr = jp2_pclr;
+    jp2->color.jp2_pclr = jp2_pclr;
 
-       for(i = 0; i < nr_channels; ++i) {
-               opj_read_bytes(p_pclr_header_data, &l_value , 1);       /* Bi */
-               ++p_pclr_header_data;
+    for (i = 0; i < nr_channels; ++i) {
+        opj_read_bytes(p_pclr_header_data, &l_value, 1);    /* Bi */
+        ++p_pclr_header_data;
 
-               channel_size[i] = (OPJ_BYTE)((l_value & 0x7f) + 1);
-               channel_sign[i] = (l_value & 0x80) ? 1 : 0;
-       }
+        channel_size[i] = (OPJ_BYTE)((l_value & 0x7f) + 1);
+        channel_sign[i] = (l_value & 0x80) ? 1 : 0;
+    }
 
-       for(j = 0; j < nr_entries; ++j) {
-               for(i = 0; i < nr_channels; ++i) {
-                       OPJ_UINT32 bytes_to_read = (OPJ_UINT32)((channel_size[i]+7)>>3);
+    for (j = 0; j < nr_entries; ++j) {
+        for (i = 0; i < nr_channels; ++i) {
+            OPJ_UINT32 bytes_to_read = (OPJ_UINT32)((channel_size[i] + 7) >> 3);
 
-                       if (bytes_to_read > sizeof(OPJ_UINT32))
-                               bytes_to_read = sizeof(OPJ_UINT32);
-                       if ((ptrdiff_t)p_pclr_header_size < (ptrdiff_t)(p_pclr_header_data - orig_header_data) + (ptrdiff_t)bytes_to_read)
-                               return OPJ_FALSE;
+            if (bytes_to_read > sizeof(OPJ_UINT32)) {
+                bytes_to_read = sizeof(OPJ_UINT32);
+            }
+            if ((ptrdiff_t)p_pclr_header_size < (ptrdiff_t)(p_pclr_header_data -
+                    orig_header_data) + (ptrdiff_t)bytes_to_read) {
+                return OPJ_FALSE;
+            }
 
-                       opj_read_bytes(p_pclr_header_data, &l_value , bytes_to_read);   /* Cji */
-                       p_pclr_header_data += bytes_to_read;
-                       *entries = (OPJ_UINT32) l_value;
-                       entries++;
-               }
-       }
+            opj_read_bytes(p_pclr_header_data, &l_value, bytes_to_read);    /* Cji */
+            p_pclr_header_data += bytes_to_read;
+            *entries = (OPJ_UINT32) l_value;
+            entries++;
+        }
+    }
 
-       return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_jp2_read_cmap(     opj_jp2_t * jp2,
-                            OPJ_BYTE * p_cmap_header_data,
-                            OPJ_UINT32 p_cmap_header_size,
-                            opj_event_mgr_t * p_manager
-                            )
+static OPJ_BOOL opj_jp2_read_cmap(opj_jp2_t * jp2,
+                                  OPJ_BYTE * p_cmap_header_data,
+                                  OPJ_UINT32 p_cmap_header_size,
+                                  opj_event_mgr_t * p_manager
+                                 )
 {
-       opj_jp2_cmap_comp_t *cmap;
-       OPJ_BYTE i, nr_channels;
-       OPJ_UINT32 l_value;
-
-       /* preconditions */
-       assert(jp2 != 00);
-       assert(p_cmap_header_data != 00);
-       assert(p_manager != 00);
+    opj_jp2_cmap_comp_t *cmap;
+    OPJ_BYTE i, nr_channels;
+    OPJ_UINT32 l_value;
+
+    /* preconditions */
+    assert(jp2 != 00);
+    assert(p_cmap_header_data != 00);
+    assert(p_manager != 00);
     (void)p_cmap_header_size;
 
-       /* Need nr_channels: */
-       if(jp2->color.jp2_pclr == NULL) {
-               opj_event_msg(p_manager, EVT_ERROR, "Need to read a PCLR box before the CMAP box.\n");
-               return OPJ_FALSE;
-       }
+    /* Need nr_channels: */
+    if (jp2->color.jp2_pclr == NULL) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Need to read a PCLR box before the CMAP box.\n");
+        return OPJ_FALSE;
+    }
 
-       /* Part 1, I.5.3.5: 'There shall be at most one Component Mapping box
-        * inside a JP2 Header box' :
-       */
-       if(jp2->color.jp2_pclr->cmap) {
-               opj_event_msg(p_manager, EVT_ERROR, "Only one CMAP box is allowed.\n");
-               return OPJ_FALSE;
-       }
+    /* Part 1, I.5.3.5: 'There shall be at most one Component Mapping box
+     * inside a JP2 Header box' :
+    */
+    if (jp2->color.jp2_pclr->cmap) {
+        opj_event_msg(p_manager, EVT_ERROR, "Only one CMAP box is allowed.\n");
+        return OPJ_FALSE;
+    }
 
-       nr_channels = jp2->color.jp2_pclr->nr_channels;
-       if (p_cmap_header_size < (OPJ_UINT32)nr_channels * 4) {
-               opj_event_msg(p_manager, EVT_ERROR, "Insufficient data for CMAP box.\n");
-               return OPJ_FALSE;
-       }
+    nr_channels = jp2->color.jp2_pclr->nr_channels;
+    if (p_cmap_header_size < (OPJ_UINT32)nr_channels * 4) {
+        opj_event_msg(p_manager, EVT_ERROR, "Insufficient data for CMAP box.\n");
+        return OPJ_FALSE;
+    }
 
-       cmap = (opj_jp2_cmap_comp_t*) opj_malloc(nr_channels * sizeof(opj_jp2_cmap_comp_t));
-    if (!cmap)
+    cmap = (opj_jp2_cmap_comp_t*) opj_malloc(nr_channels * sizeof(
+                opj_jp2_cmap_comp_t));
+    if (!cmap) {
         return OPJ_FALSE;
+    }
 
 
-       for(i = 0; i < nr_channels; ++i) {
-               opj_read_bytes(p_cmap_header_data, &l_value, 2);                        /* CMP^i */
-               p_cmap_header_data +=2;
-               cmap[i].cmp = (OPJ_UINT16) l_value;
+    for (i = 0; i < nr_channels; ++i) {
+        opj_read_bytes(p_cmap_header_data, &l_value, 2);            /* CMP^i */
+        p_cmap_header_data += 2;
+        cmap[i].cmp = (OPJ_UINT16) l_value;
 
-               opj_read_bytes(p_cmap_header_data, &l_value, 1);                        /* MTYP^i */
-               ++p_cmap_header_data;
-               cmap[i].mtyp = (OPJ_BYTE) l_value;
+        opj_read_bytes(p_cmap_header_data, &l_value, 1);            /* MTYP^i */
+        ++p_cmap_header_data;
+        cmap[i].mtyp = (OPJ_BYTE) l_value;
 
-               opj_read_bytes(p_cmap_header_data, &l_value, 1);                        /* PCOL^i */
-               ++p_cmap_header_data;
-               cmap[i].pcol = (OPJ_BYTE) l_value;
-       }
+        opj_read_bytes(p_cmap_header_data, &l_value, 1);            /* PCOL^i */
+        ++p_cmap_header_data;
+        cmap[i].pcol = (OPJ_BYTE) l_value;
+    }
 
-       jp2->color.jp2_pclr->cmap = cmap;
+    jp2->color.jp2_pclr->cmap = cmap;
 
-       return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static void opj_jp2_apply_cdef(opj_image_t *image, opj_jp2_color_t *color, opj_event_mgr_t *manager)
+static void opj_jp2_apply_cdef(opj_image_t *image, opj_jp2_color_t *color,
+                               opj_event_mgr_t *manager)
 {
-       opj_jp2_cdef_info_t *info;
-       OPJ_UINT16 i, n, cn, asoc, acn;
-       
-       info = color->jp2_cdef->info;
-       n = color->jp2_cdef->n;
-       
-       for(i = 0; i < n; ++i)
-       {
-               /* WATCH: acn = asoc - 1 ! */
-               asoc = info[i].asoc;
-               cn = info[i].cn;
-               
-               if( cn >= image->numcomps)
-               {
-                       opj_event_msg(manager, EVT_WARNING, "opj_jp2_apply_cdef: cn=%d, numcomps=%d\n", cn, image->numcomps);
-                       continue;
-               }
-               if(asoc == 0 || asoc == 65535)
-               {
-                       image->comps[cn].alpha = info[i].typ;
-                       continue;
-               }
-               
-               acn = (OPJ_UINT16)(asoc - 1);
-               if( acn >= image->numcomps )
-               {
-                       opj_event_msg(manager, EVT_WARNING, "opj_jp2_apply_cdef: acn=%d, numcomps=%d\n", acn, image->numcomps);
-                       continue;
-               }
-               
-               /* Swap only if color channel */
-               if((cn != acn) && (info[i].typ == 0))
-               {
-                       opj_image_comp_t saved;
-                       OPJ_UINT16 j;
-                       
-                       memcpy(&saved, &image->comps[cn], sizeof(opj_image_comp_t));
-                       memcpy(&image->comps[cn], &image->comps[acn], sizeof(opj_image_comp_t));
-                       memcpy(&image->comps[acn], &saved, sizeof(opj_image_comp_t));
-                       
-                       /* Swap channels in following channel definitions, don't bother with j <= i that are already processed */
-                       for (j = (OPJ_UINT16)(i + 1U); j < n ; ++j)
-                       {
-                               if (info[j].cn == cn) {
-                                       info[j].cn = acn;
-                               }
-                               else if (info[j].cn == acn) {
-                                       info[j].cn = cn;
-                               }
-                               /* asoc is related to color index. Do not update. */
-                       }
-               }
-               
-               image->comps[cn].alpha = info[i].typ;
-       }
-       
-       if(color->jp2_cdef->info) opj_free(color->jp2_cdef->info);
-       
-       opj_free(color->jp2_cdef); color->jp2_cdef = NULL;
-       
+    opj_jp2_cdef_info_t *info;
+    OPJ_UINT16 i, n, cn, asoc, acn;
+
+    info = color->jp2_cdef->info;
+    n = color->jp2_cdef->n;
+
+    for (i = 0; i < n; ++i) {
+        /* WATCH: acn = asoc - 1 ! */
+        asoc = info[i].asoc;
+        cn = info[i].cn;
+
+        if (cn >= image->numcomps) {
+            opj_event_msg(manager, EVT_WARNING, "opj_jp2_apply_cdef: cn=%d, numcomps=%d\n",
+                          cn, image->numcomps);
+            continue;
+        }
+        if (asoc == 0 || asoc == 65535) {
+            image->comps[cn].alpha = info[i].typ;
+            continue;
+        }
+
+        acn = (OPJ_UINT16)(asoc - 1);
+        if (acn >= image->numcomps) {
+            opj_event_msg(manager, EVT_WARNING, "opj_jp2_apply_cdef: acn=%d, numcomps=%d\n",
+                          acn, image->numcomps);
+            continue;
+        }
+
+        /* Swap only if color channel */
+        if ((cn != acn) && (info[i].typ == 0)) {
+            opj_image_comp_t saved;
+            OPJ_UINT16 j;
+
+            memcpy(&saved, &image->comps[cn], sizeof(opj_image_comp_t));
+            memcpy(&image->comps[cn], &image->comps[acn], sizeof(opj_image_comp_t));
+            memcpy(&image->comps[acn], &saved, sizeof(opj_image_comp_t));
+
+            /* Swap channels in following channel definitions, don't bother with j <= i that are already processed */
+            for (j = (OPJ_UINT16)(i + 1U); j < n ; ++j) {
+                if (info[j].cn == cn) {
+                    info[j].cn = acn;
+                } else if (info[j].cn == acn) {
+                    info[j].cn = cn;
+                }
+                /* asoc is related to color index. Do not update. */
+            }
+        }
+
+        image->comps[cn].alpha = info[i].typ;
+    }
+
+    if (color->jp2_cdef->info) {
+        opj_free(color->jp2_cdef->info);
+    }
+
+    opj_free(color->jp2_cdef);
+    color->jp2_cdef = NULL;
+
 }/* jp2_apply_cdef() */
 
-static OPJ_BOOL opj_jp2_read_cdef(     opj_jp2_t * jp2,
-                            OPJ_BYTE * p_cdef_header_data,
-                                                       OPJ_UINT32 p_cdef_header_size,
-                                                       opj_event_mgr_t * p_manager
-                            )
+static OPJ_BOOL opj_jp2_read_cdef(opj_jp2_t * jp2,
+                                  OPJ_BYTE * p_cdef_header_data,
+                                  OPJ_UINT32 p_cdef_header_size,
+                                  opj_event_mgr_t * p_manager
+                                 )
 {
-       opj_jp2_cdef_info_t *cdef_info;
-       OPJ_UINT16 i;
-       OPJ_UINT32 l_value;
-
-       /* preconditions */
-       assert(jp2 != 00);
-       assert(p_cdef_header_data != 00);
-       assert(p_manager != 00);
+    opj_jp2_cdef_info_t *cdef_info;
+    OPJ_UINT16 i;
+    OPJ_UINT32 l_value;
+
+    /* preconditions */
+    assert(jp2 != 00);
+    assert(p_cdef_header_data != 00);
+    assert(p_manager != 00);
     (void)p_cdef_header_size;
 
-       /* Part 1, I.5.3.6: 'The shall be at most one Channel Definition box
-        * inside a JP2 Header box.'*/
-       if(jp2->color.jp2_cdef) return OPJ_FALSE;
-
-       if (p_cdef_header_size < 2) {
-               opj_event_msg(p_manager, EVT_ERROR, "Insufficient data for CDEF box.\n");
-               return OPJ_FALSE;
-       }
-
-       opj_read_bytes(p_cdef_header_data,&l_value ,2);                 /* N */
-       p_cdef_header_data+= 2;
-
-       if ( (OPJ_UINT16)l_value == 0){ /* szukw000: FIXME */
-               opj_event_msg(p_manager, EVT_ERROR, "Number of channel description is equal to zero in CDEF box.\n");
-               return OPJ_FALSE;
-       }
-
-       if (p_cdef_header_size < 2 + (OPJ_UINT32)(OPJ_UINT16)l_value * 6) {
-               opj_event_msg(p_manager, EVT_ERROR, "Insufficient data for CDEF box.\n");
-               return OPJ_FALSE;
-       }
-
-       cdef_info = (opj_jp2_cdef_info_t*) opj_malloc(l_value * sizeof(opj_jp2_cdef_info_t));
-       if (!cdef_info)
-               return OPJ_FALSE;
-
-       jp2->color.jp2_cdef = (opj_jp2_cdef_t*)opj_malloc(sizeof(opj_jp2_cdef_t));
-       if(!jp2->color.jp2_cdef)
-       {
-               opj_free(cdef_info);
-               return OPJ_FALSE;
-       }
-       jp2->color.jp2_cdef->info = cdef_info;
-       jp2->color.jp2_cdef->n = (OPJ_UINT16) l_value;
-
-       for(i = 0; i < jp2->color.jp2_cdef->n; ++i) {
-               opj_read_bytes(p_cdef_header_data, &l_value, 2);                        /* Cn^i */
-               p_cdef_header_data +=2;
-               cdef_info[i].cn = (OPJ_UINT16) l_value;
-
-               opj_read_bytes(p_cdef_header_data, &l_value, 2);                        /* Typ^i */
-               p_cdef_header_data +=2;
-               cdef_info[i].typ = (OPJ_UINT16) l_value;
-
-               opj_read_bytes(p_cdef_header_data, &l_value, 2);                        /* Asoc^i */
-               p_cdef_header_data +=2;
-               cdef_info[i].asoc = (OPJ_UINT16) l_value;
-   }
-
-       return OPJ_TRUE;
-}
+    /* Part 1, I.5.3.6: 'The shall be at most one Channel Definition box
+     * inside a JP2 Header box.'*/
+    if (jp2->color.jp2_cdef) {
+        return OPJ_FALSE;
+    }
 
-static OPJ_BOOL opj_jp2_read_colr( opj_jp2_t *jp2,
-                            OPJ_BYTE * p_colr_header_data,
-                            OPJ_UINT32 p_colr_header_size,
-                            opj_event_mgr_t * p_manager
-                            )
-{
-       OPJ_UINT32 l_value;
-
-       /* preconditions */
-       assert(jp2 != 00);
-       assert(p_colr_header_data != 00);
-       assert(p_manager != 00);
-
-       if (p_colr_header_size < 3) {
-               opj_event_msg(p_manager, EVT_ERROR, "Bad COLR header box (bad size)\n");
-               return OPJ_FALSE;
-       }
-
-       /* Part 1, I.5.3.3 : 'A conforming JP2 reader shall ignore all Colour
-        * Specification boxes after the first.'
-       */
-       if(jp2->color.jp2_has_colr) {
-               opj_event_msg(p_manager, EVT_INFO, "A conforming JP2 reader shall ignore all Colour Specification boxes after the first, so we ignore this one.\n");
-               p_colr_header_data += p_colr_header_size;
-               return OPJ_TRUE;
-       }
-
-       opj_read_bytes(p_colr_header_data,&jp2->meth ,1);                       /* METH */
-       ++p_colr_header_data;
-
-       opj_read_bytes(p_colr_header_data,&jp2->precedence ,1);         /* PRECEDENCE */
-       ++p_colr_header_data;
-
-       opj_read_bytes(p_colr_header_data,&jp2->approx ,1);                     /* APPROX */
-       ++p_colr_header_data;
-
-       if (jp2->meth == 1) {
-               if (p_colr_header_size < 7) {
-                       opj_event_msg(p_manager, EVT_ERROR, "Bad COLR header box (bad size: %d)\n", p_colr_header_size);
-                       return OPJ_FALSE;
-               }
-               if ((p_colr_header_size > 7) && (jp2->enumcs != 14)) { /* handled below for CIELab) */
-                       /* testcase Altona_Technical_v20_x4.pdf */
-                       opj_event_msg(p_manager, EVT_WARNING, "Bad COLR header box (bad size: %d)\n", p_colr_header_size);
-               }
-
-               opj_read_bytes(p_colr_header_data,&jp2->enumcs ,4);                     /* EnumCS */
-
-               p_colr_header_data += 4;
-
-               if(jp2->enumcs == 14)/* CIELab */
-               {
-                       OPJ_UINT32 *cielab;
-                       OPJ_UINT32 rl, ol, ra, oa, rb, ob, il;
-
-                       cielab = (OPJ_UINT32*)opj_malloc(9 * sizeof(OPJ_UINT32));
-                       if(cielab == NULL){
-                               opj_event_msg(p_manager, EVT_ERROR, "Not enough memory for cielab\n");
-                               return OPJ_FALSE;
-                       }
-                       cielab[0] = 14; /* enumcs */
-                       
-                       /* default values */
-                       rl = ra = rb = ol = oa = ob = 0;
-                       il = 0x00443530; /* D50 */
-                       cielab[1] = 0x44454600;/* DEF */
-
-                       if(p_colr_header_size == 35)
-                       {
-                               opj_read_bytes(p_colr_header_data, &rl, 4);
-                               p_colr_header_data += 4;
-                               opj_read_bytes(p_colr_header_data, &ol, 4);
-                               p_colr_header_data += 4;
-                               opj_read_bytes(p_colr_header_data, &ra, 4);
-                               p_colr_header_data += 4;
-                               opj_read_bytes(p_colr_header_data, &oa, 4);
-                               p_colr_header_data += 4;
-                               opj_read_bytes(p_colr_header_data, &rb, 4);
-                               p_colr_header_data += 4;
-                               opj_read_bytes(p_colr_header_data, &ob, 4);
-                               p_colr_header_data += 4;
-                               opj_read_bytes(p_colr_header_data, &il, 4);
-                               p_colr_header_data += 4;
-                               
-                               cielab[1] = 0;
-                       }
-                       else if(p_colr_header_size != 7)
-                       {
-                               opj_event_msg(p_manager, EVT_WARNING, "Bad COLR header box (CIELab, bad size: %d)\n", p_colr_header_size);
-                       }
-                       cielab[2] = rl; cielab[4] = ra; cielab[6] = rb;
-                       cielab[3] = ol; cielab[5] = oa; cielab[7] = ob;
-                       cielab[8] = il;
-
-                       jp2->color.icc_profile_buf = (OPJ_BYTE*)cielab;
-                       jp2->color.icc_profile_len = 0;
-               }
-               jp2->color.jp2_has_colr = 1;
-       }
-       else if (jp2->meth == 2) {
-               /* ICC profile */
-               OPJ_INT32 it_icc_value = 0;
-               OPJ_INT32 icc_len = (OPJ_INT32)p_colr_header_size - 3;
-
-               jp2->color.icc_profile_len = (OPJ_UINT32)icc_len;
-               jp2->color.icc_profile_buf = (OPJ_BYTE*) opj_calloc(1,(size_t)icc_len);
-               if (!jp2->color.icc_profile_buf)
-               {
-                       jp2->color.icc_profile_len = 0;
-                       return OPJ_FALSE;
-               }
-
-               for (it_icc_value = 0; it_icc_value < icc_len; ++it_icc_value)
-               {
-                       opj_read_bytes(p_colr_header_data,&l_value,1);          /* icc values */
-                       ++p_colr_header_data;
-                       jp2->color.icc_profile_buf[it_icc_value] = (OPJ_BYTE) l_value;
-               }
-           
-               jp2->color.jp2_has_colr = 1;
-       }
-       else if (jp2->meth > 2)
-       {
-               /*      ISO/IEC 15444-1:2004 (E), Table I.9 Legal METH values:
-               conforming JP2 reader shall ignore the entire Colour Specification box.*/
-               opj_event_msg(p_manager, EVT_INFO, "COLR BOX meth value is not a regular value (%d), "
-                       "so we will ignore the entire Colour Specification box. \n", jp2->meth);
-       }
-       return OPJ_TRUE;
-}
+    if (p_cdef_header_size < 2) {
+        opj_event_msg(p_manager, EVT_ERROR, "Insufficient data for CDEF box.\n");
+        return OPJ_FALSE;
+    }
 
-OPJ_BOOL opj_jp2_decode(opj_jp2_t *jp2,
-                        opj_stream_private_t *p_stream,
-                        opj_image_t* p_image,
-                        opj_event_mgr_t * p_manager)
-{
-       if (!p_image)
-               return OPJ_FALSE;
-
-       /* J2K decoding */
-       if( ! opj_j2k_decode(jp2->j2k, p_stream, p_image, p_manager) ) {
-               opj_event_msg(p_manager, EVT_ERROR, "Failed to decode the codestream in the JP2 file\n");
-               return OPJ_FALSE;
-       }
-
-       if (!jp2->ignore_pclr_cmap_cdef){
-               if (!opj_jp2_check_color(p_image, &(jp2->color), p_manager)) {
-                       return OPJ_FALSE;
-               }
-
-               /* Set Image Color Space */
-               if (jp2->enumcs == 16)
-                       p_image->color_space = OPJ_CLRSPC_SRGB;
-               else if (jp2->enumcs == 17)
-                       p_image->color_space = OPJ_CLRSPC_GRAY;
-               else if (jp2->enumcs == 18)
-                       p_image->color_space = OPJ_CLRSPC_SYCC;
-               else if (jp2->enumcs == 24)
-                       p_image->color_space = OPJ_CLRSPC_EYCC;
-               else if (jp2->enumcs == 12)
-                       p_image->color_space = OPJ_CLRSPC_CMYK;
-               else
-                       p_image->color_space = OPJ_CLRSPC_UNKNOWN;
-
-               if(jp2->color.jp2_pclr) {
-                       /* Part 1, I.5.3.4: Either both or none : */
-                       if( !jp2->color.jp2_pclr->cmap)
-                               opj_jp2_free_pclr(&(jp2->color));
-                       else
-                               opj_jp2_apply_pclr(p_image, &(jp2->color));
-               }
-
-               /* Apply the color space if needed */
-               if(jp2->color.jp2_cdef) {
-                       opj_jp2_apply_cdef(p_image, &(jp2->color), p_manager);
-               }
-
-               if(jp2->color.icc_profile_buf) {
-                       p_image->icc_profile_buf = jp2->color.icc_profile_buf;
-                       p_image->icc_profile_len = jp2->color.icc_profile_len;
-                       jp2->color.icc_profile_buf = NULL;
-               }
-       }
-
-       return OPJ_TRUE;
-}
+    opj_read_bytes(p_cdef_header_data, &l_value, 2);        /* N */
+    p_cdef_header_data += 2;
 
-static OPJ_BOOL opj_jp2_write_jp2h(opj_jp2_t *jp2,
-                            opj_stream_private_t *stream,
-                            opj_event_mgr_t * p_manager
-                            )
-{
-       opj_jp2_img_header_writer_handler_t l_writers [4];
-       opj_jp2_img_header_writer_handler_t * l_current_writer;
-
-       OPJ_INT32 i, l_nb_pass;
-       /* size of data for super box*/
-       OPJ_UINT32 l_jp2h_size = 8;
-       OPJ_BOOL l_result = OPJ_TRUE;
-
-       /* to store the data of the super box */
-       OPJ_BYTE l_jp2h_data [8];
-       
-       /* preconditions */
-       assert(stream != 00);
-       assert(jp2 != 00);
-       assert(p_manager != 00);
-
-       memset(l_writers,0,sizeof(l_writers));
-
-       if (jp2->bpc == 255) {
-               l_nb_pass = 3;
-               l_writers[0].handler = opj_jp2_write_ihdr;
-               l_writers[1].handler = opj_jp2_write_bpcc;
-               l_writers[2].handler = opj_jp2_write_colr;
-       }
-       else {
-               l_nb_pass = 2;
-               l_writers[0].handler = opj_jp2_write_ihdr;
-               l_writers[1].handler = opj_jp2_write_colr;
-       }
-       
-       if (jp2->color.jp2_cdef != NULL) {
-               l_writers[l_nb_pass].handler = opj_jp2_write_cdef;
-               l_nb_pass++;
-       }
-       
-       /* write box header */
-       /* write JP2H type */
-       opj_write_bytes(l_jp2h_data+4,JP2_JP2H,4);
-
-       l_current_writer = l_writers;
-       for (i=0;i<l_nb_pass;++i) {
-               l_current_writer->m_data = l_current_writer->handler(jp2,&(l_current_writer->m_size));
-               if (l_current_writer->m_data == 00) {
-                       opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to hold JP2 Header data\n");
-                       l_result = OPJ_FALSE;
-                       break;
-               }
-
-               l_jp2h_size += l_current_writer->m_size;
-               ++l_current_writer;
-       }
-
-       if (! l_result) {
-               l_current_writer = l_writers;
-               for (i=0;i<l_nb_pass;++i) {
-                       if (l_current_writer->m_data != 00) {
-                               opj_free(l_current_writer->m_data );
-                       }
-                       ++l_current_writer;
-               }
-
-               return OPJ_FALSE;
-       }
-
-       /* write super box size */
-       opj_write_bytes(l_jp2h_data,l_jp2h_size,4);
-       
-       /* write super box data on stream */
-       if (opj_stream_write_data(stream,l_jp2h_data,8,p_manager) != 8) {
-               opj_event_msg(p_manager, EVT_ERROR, "Stream error while writing JP2 Header box\n");
-               l_result = OPJ_FALSE;
-       }
-       
-       if (l_result) {
-               l_current_writer = l_writers;
-               for (i=0;i<l_nb_pass;++i) {
-                       if (opj_stream_write_data(stream,l_current_writer->m_data,l_current_writer->m_size,p_manager) != l_current_writer->m_size) {
-                               opj_event_msg(p_manager, EVT_ERROR, "Stream error while writing JP2 Header box\n");
-                               l_result = OPJ_FALSE;
-                               break;
-                       }
-                       ++l_current_writer;
-               }
-       }
-
-       l_current_writer = l_writers;
-       
-       /* cleanup */
-       for (i=0;i<l_nb_pass;++i) {
-               if (l_current_writer->m_data != 00) {
-                       opj_free(l_current_writer->m_data );
-               }
-               ++l_current_writer;
-       }
-
-       return l_result;
-}
+    if ((OPJ_UINT16)l_value == 0) { /* szukw000: FIXME */
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Number of channel description is equal to zero in CDEF box.\n");
+        return OPJ_FALSE;
+    }
 
-static OPJ_BOOL opj_jp2_write_ftyp(opj_jp2_t *jp2,
-                                                       opj_stream_private_t *cio,
-                                                       opj_event_mgr_t * p_manager )
-{
-       OPJ_UINT32 i;
-       OPJ_UINT32 l_ftyp_size;
-       OPJ_BYTE * l_ftyp_data, * l_current_data_ptr;
-       OPJ_BOOL l_result;
-
-       /* preconditions */
-       assert(cio != 00);
-       assert(jp2 != 00);
-       assert(p_manager != 00);
-       l_ftyp_size = 16 + 4 * jp2->numcl;
-
-       l_ftyp_data = (OPJ_BYTE *) opj_calloc(1,l_ftyp_size);
-       
-       if (l_ftyp_data == 00) {
-               opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to handle ftyp data\n");
-               return OPJ_FALSE;
-       }
-
-       l_current_data_ptr = l_ftyp_data;
-
-       opj_write_bytes(l_current_data_ptr, l_ftyp_size,4); /* box size */
-       l_current_data_ptr += 4;
-
-       opj_write_bytes(l_current_data_ptr, JP2_FTYP,4); /* FTYP */
-       l_current_data_ptr += 4;
-
-       opj_write_bytes(l_current_data_ptr, jp2->brand,4); /* BR */
-       l_current_data_ptr += 4;
-
-       opj_write_bytes(l_current_data_ptr, jp2->minversion,4); /* MinV */
-       l_current_data_ptr += 4;
-
-       for (i = 0; i < jp2->numcl; i++)  {
-               opj_write_bytes(l_current_data_ptr, jp2->cl[i],4);      /* CL */
-       }
-       
-       l_result = (opj_stream_write_data(cio,l_ftyp_data,l_ftyp_size,p_manager) == l_ftyp_size);
-       if (! l_result)
-       {
-               opj_event_msg(p_manager, EVT_ERROR, "Error while writing ftyp data to stream\n");
-       }
-
-       opj_free(l_ftyp_data);
-       
-       return l_result;
-}
+    if (p_cdef_header_size < 2 + (OPJ_UINT32)(OPJ_UINT16)l_value * 6) {
+        opj_event_msg(p_manager, EVT_ERROR, "Insufficient data for CDEF box.\n");
+        return OPJ_FALSE;
+    }
 
-static OPJ_BOOL opj_jp2_write_jp2c(opj_jp2_t *jp2,
-                                                       opj_stream_private_t *cio,
-                                                       opj_event_mgr_t * p_manager )
-{
-       OPJ_OFF_T j2k_codestream_exit;
-       OPJ_BYTE l_data_header [8];
-       
-       /* preconditions */
-       assert(jp2 != 00);
-       assert(cio != 00);
-       assert(p_manager != 00);
-       assert(opj_stream_has_seek(cio));
-       
-       j2k_codestream_exit = opj_stream_tell(cio);
-       opj_write_bytes(l_data_header,
-                    (OPJ_UINT32) (j2k_codestream_exit - jp2->j2k_codestream_offset),
-                    4); /* size of codestream */
-       opj_write_bytes(l_data_header + 4,JP2_JP2C,4);                                                                     /* JP2C */
-
-       if (! opj_stream_seek(cio,jp2->j2k_codestream_offset,p_manager)) {
-               opj_event_msg(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
-               return OPJ_FALSE;
-       }
-       
-       if (opj_stream_write_data(cio,l_data_header,8,p_manager) != 8) {
-               opj_event_msg(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
-               return OPJ_FALSE;
-       }
-
-       if (! opj_stream_seek(cio,j2k_codestream_exit,p_manager)) {
-               opj_event_msg(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
-               return OPJ_FALSE;
-       }
-
-       return OPJ_TRUE;
-}
+    cdef_info = (opj_jp2_cdef_info_t*) opj_malloc(l_value * sizeof(
+                    opj_jp2_cdef_info_t));
+    if (!cdef_info) {
+        return OPJ_FALSE;
+    }
 
-static OPJ_BOOL opj_jp2_write_jp(      opj_jp2_t *jp2,
-                                           opj_stream_private_t *cio,
-                                               opj_event_mgr_t * p_manager )
-{
-       /* 12 bytes will be read */
-       OPJ_BYTE l_signature_data [12];
-
-       /* preconditions */
-       assert(cio != 00);
-       assert(jp2 != 00);
-       assert(p_manager != 00);
-
-       /* write box length */
-       opj_write_bytes(l_signature_data,12,4);
-       /* writes box type */
-       opj_write_bytes(l_signature_data+4,JP2_JP,4);
-       /* writes magic number*/
-       opj_write_bytes(l_signature_data+8,0x0d0a870a,4);
-       
-       if (opj_stream_write_data(cio,l_signature_data,12,p_manager) != 12) {
-               return OPJ_FALSE;
-       }
-
-       return OPJ_TRUE;
-}
+    jp2->color.jp2_cdef = (opj_jp2_cdef_t*)opj_malloc(sizeof(opj_jp2_cdef_t));
+    if (!jp2->color.jp2_cdef) {
+        opj_free(cdef_info);
+        return OPJ_FALSE;
+    }
+    jp2->color.jp2_cdef->info = cdef_info;
+    jp2->color.jp2_cdef->n = (OPJ_UINT16) l_value;
 
-/* ----------------------------------------------------------------------- */
-/* JP2 decoder interface                                             */
-/* ----------------------------------------------------------------------- */
+    for (i = 0; i < jp2->color.jp2_cdef->n; ++i) {
+        opj_read_bytes(p_cdef_header_data, &l_value, 2);            /* Cn^i */
+        p_cdef_header_data += 2;
+        cdef_info[i].cn = (OPJ_UINT16) l_value;
 
-void opj_jp2_setup_decoder(opj_jp2_t *jp2, opj_dparameters_t *parameters)
-{
-       /* setup the J2K codec */
-       opj_j2k_setup_decoder(jp2->j2k, parameters);
+        opj_read_bytes(p_cdef_header_data, &l_value, 2);            /* Typ^i */
+        p_cdef_header_data += 2;
+        cdef_info[i].typ = (OPJ_UINT16) l_value;
 
-       /* further JP2 initializations go here */
-       jp2->color.jp2_has_colr = 0;
-       jp2->ignore_pclr_cmap_cdef = parameters->flags & OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG;
+        opj_read_bytes(p_cdef_header_data, &l_value, 2);            /* Asoc^i */
+        p_cdef_header_data += 2;
+        cdef_info[i].asoc = (OPJ_UINT16) l_value;
+    }
+
+    return OPJ_TRUE;
 }
 
-OPJ_BOOL opj_jp2_set_threads(opj_jp2_t *jp2, OPJ_UINT32 num_threads)
+static OPJ_BOOL opj_jp2_read_colr(opj_jp2_t *jp2,
+                                  OPJ_BYTE * p_colr_header_data,
+                                  OPJ_UINT32 p_colr_header_size,
+                                  opj_event_mgr_t * p_manager
+                                 )
 {
-     return opj_j2k_set_threads(jp2->j2k, num_threads);
-}
+    OPJ_UINT32 l_value;
 
-/* ----------------------------------------------------------------------- */
-/* JP2 encoder interface                                             */
-/* ----------------------------------------------------------------------- */
+    /* preconditions */
+    assert(jp2 != 00);
+    assert(p_colr_header_data != 00);
+    assert(p_manager != 00);
 
-OPJ_BOOL opj_jp2_setup_encoder(        opj_jp2_t *jp2,
-                            opj_cparameters_t *parameters,
-                            opj_image_t *image,
-                            opj_event_mgr_t * p_manager)
-{
-       OPJ_UINT32 i;
-       OPJ_UINT32 depth_0;
-  OPJ_UINT32 sign;
-       OPJ_UINT32 alpha_count;
-       OPJ_UINT32 color_channels = 0U;
-       OPJ_UINT32 alpha_channel = 0U;
-       
-
-       if(!jp2 || !parameters || !image)
-               return OPJ_FALSE;
-
-       /* setup the J2K codec */
-       /* ------------------- */
-
-       /* Check if number of components respects standard */
-       if (image->numcomps < 1 || image->numcomps > 16384) {
-               opj_event_msg(p_manager, EVT_ERROR, "Invalid number of components specified while setting up JP2 encoder\n");
-               return OPJ_FALSE;
-       }
-
-       if (opj_j2k_setup_encoder(jp2->j2k, parameters, image, p_manager ) == OPJ_FALSE) {
-               return OPJ_FALSE;
-       }
-
-       /* setup the JP2 codec */
-       /* ------------------- */
-       
-       /* Profile box */
-
-       jp2->brand = JP2_JP2;   /* BR */
-       jp2->minversion = 0;    /* MinV */
-       jp2->numcl = 1;
-       jp2->cl = (OPJ_UINT32*) opj_malloc(jp2->numcl * sizeof(OPJ_UINT32));
-       if (!jp2->cl){
-               opj_event_msg(p_manager, EVT_ERROR, "Not enough memory when setup the JP2 encoder\n");
-               return OPJ_FALSE;
-       }
-       jp2->cl[0] = JP2_JP2;   /* CL0 : JP2 */
-
-       /* Image Header box */
-
-       jp2->numcomps = image->numcomps;        /* NC */
-       jp2->comps = (opj_jp2_comps_t*) opj_malloc(jp2->numcomps * sizeof(opj_jp2_comps_t));
-       if (!jp2->comps) {
-               opj_event_msg(p_manager, EVT_ERROR, "Not enough memory when setup the JP2 encoder\n");
-               /* Memory of jp2->cl will be freed by opj_jp2_destroy */
-               return OPJ_FALSE;
-       }
-
-       jp2->h = image->y1 - image->y0;         /* HEIGHT */
-       jp2->w = image->x1 - image->x0;         /* WIDTH */
-       /* BPC */
-       depth_0 = image->comps[0].prec - 1;
-       sign = image->comps[0].sgnd;
-       jp2->bpc = depth_0 + (sign << 7);
-       for (i = 1; i < image->numcomps; i++) {
-               OPJ_UINT32 depth = image->comps[i].prec - 1;
-               sign = image->comps[i].sgnd;
-               if (depth_0 != depth)
-                       jp2->bpc = 255;
-       }
-       jp2->C = 7;                     /* C : Always 7 */
-       jp2->UnkC = 0;          /* UnkC, colorspace specified in colr box */
-       jp2->IPR = 0;           /* IPR, no intellectual property */
-       
-       /* BitsPerComponent box */
-       for (i = 0; i < image->numcomps; i++) {
-               jp2->comps[i].bpcc = image->comps[i].prec - 1 + (image->comps[i].sgnd << 7);
-       }
-
-       /* Colour Specification box */
-    if(image->icc_profile_len) {
-        jp2->meth = 2;
-        jp2->enumcs = 0;
-    } 
-    else {
+    if (p_colr_header_size < 3) {
+        opj_event_msg(p_manager, EVT_ERROR, "Bad COLR header box (bad size)\n");
+        return OPJ_FALSE;
+    }
+
+    /* Part 1, I.5.3.3 : 'A conforming JP2 reader shall ignore all Colour
+     * Specification boxes after the first.'
+    */
+    if (jp2->color.jp2_has_colr) {
+        opj_event_msg(p_manager, EVT_INFO,
+                      "A conforming JP2 reader shall ignore all Colour Specification boxes after the first, so we ignore this one.\n");
+        p_colr_header_data += p_colr_header_size;
+        return OPJ_TRUE;
+    }
+
+    opj_read_bytes(p_colr_header_data, &jp2->meth, 1);          /* METH */
+    ++p_colr_header_data;
+
+    opj_read_bytes(p_colr_header_data, &jp2->precedence, 1);    /* PRECEDENCE */
+    ++p_colr_header_data;
+
+    opj_read_bytes(p_colr_header_data, &jp2->approx, 1);        /* APPROX */
+    ++p_colr_header_data;
+
+    if (jp2->meth == 1) {
+        if (p_colr_header_size < 7) {
+            opj_event_msg(p_manager, EVT_ERROR, "Bad COLR header box (bad size: %d)\n",
+                          p_colr_header_size);
+            return OPJ_FALSE;
+        }
+        if ((p_colr_header_size > 7) &&
+                (jp2->enumcs != 14)) { /* handled below for CIELab) */
+            /* testcase Altona_Technical_v20_x4.pdf */
+            opj_event_msg(p_manager, EVT_WARNING, "Bad COLR header box (bad size: %d)\n",
+                          p_colr_header_size);
+        }
+
+        opj_read_bytes(p_colr_header_data, &jp2->enumcs, 4);        /* EnumCS */
+
+        p_colr_header_data += 4;
+
+        if (jp2->enumcs == 14) { /* CIELab */
+            OPJ_UINT32 *cielab;
+            OPJ_UINT32 rl, ol, ra, oa, rb, ob, il;
+
+            cielab = (OPJ_UINT32*)opj_malloc(9 * sizeof(OPJ_UINT32));
+            if (cielab == NULL) {
+                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory for cielab\n");
+                return OPJ_FALSE;
+            }
+            cielab[0] = 14; /* enumcs */
+
+            /* default values */
+            rl = ra = rb = ol = oa = ob = 0;
+            il = 0x00443530; /* D50 */
+            cielab[1] = 0x44454600;/* DEF */
+
+            if (p_colr_header_size == 35) {
+                opj_read_bytes(p_colr_header_data, &rl, 4);
+                p_colr_header_data += 4;
+                opj_read_bytes(p_colr_header_data, &ol, 4);
+                p_colr_header_data += 4;
+                opj_read_bytes(p_colr_header_data, &ra, 4);
+                p_colr_header_data += 4;
+                opj_read_bytes(p_colr_header_data, &oa, 4);
+                p_colr_header_data += 4;
+                opj_read_bytes(p_colr_header_data, &rb, 4);
+                p_colr_header_data += 4;
+                opj_read_bytes(p_colr_header_data, &ob, 4);
+                p_colr_header_data += 4;
+                opj_read_bytes(p_colr_header_data, &il, 4);
+                p_colr_header_data += 4;
+
+                cielab[1] = 0;
+            } else if (p_colr_header_size != 7) {
+                opj_event_msg(p_manager, EVT_WARNING,
+                              "Bad COLR header box (CIELab, bad size: %d)\n", p_colr_header_size);
+            }
+            cielab[2] = rl;
+            cielab[4] = ra;
+            cielab[6] = rb;
+            cielab[3] = ol;
+            cielab[5] = oa;
+            cielab[7] = ob;
+            cielab[8] = il;
+
+            jp2->color.icc_profile_buf = (OPJ_BYTE*)cielab;
+            jp2->color.icc_profile_len = 0;
+        }
+        jp2->color.jp2_has_colr = 1;
+    } else if (jp2->meth == 2) {
+        /* ICC profile */
+        OPJ_INT32 it_icc_value = 0;
+        OPJ_INT32 icc_len = (OPJ_INT32)p_colr_header_size - 3;
+
+        jp2->color.icc_profile_len = (OPJ_UINT32)icc_len;
+        jp2->color.icc_profile_buf = (OPJ_BYTE*) opj_calloc(1, (size_t)icc_len);
+        if (!jp2->color.icc_profile_buf) {
+            jp2->color.icc_profile_len = 0;
+            return OPJ_FALSE;
+        }
+
+        for (it_icc_value = 0; it_icc_value < icc_len; ++it_icc_value) {
+            opj_read_bytes(p_colr_header_data, &l_value, 1);    /* icc values */
+            ++p_colr_header_data;
+            jp2->color.icc_profile_buf[it_icc_value] = (OPJ_BYTE) l_value;
+        }
+
+        jp2->color.jp2_has_colr = 1;
+    } else if (jp2->meth > 2) {
+        /*  ISO/IEC 15444-1:2004 (E), Table I.9 Legal METH values:
+        conforming JP2 reader shall ignore the entire Colour Specification box.*/
+        opj_event_msg(p_manager, EVT_INFO,
+                      "COLR BOX meth value is not a regular value (%d), "
+                      "so we will ignore the entire Colour Specification box. \n", jp2->meth);
+    }
+    return OPJ_TRUE;
+}
+
+OPJ_BOOL opj_jp2_decode(opj_jp2_t *jp2,
+                        opj_stream_private_t *p_stream,
+                        opj_image_t* p_image,
+                        opj_event_mgr_t * p_manager)
+{
+    if (!p_image) {
+        return OPJ_FALSE;
+    }
+
+    /* J2K decoding */
+    if (! opj_j2k_decode(jp2->j2k, p_stream, p_image, p_manager)) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Failed to decode the codestream in the JP2 file\n");
+        return OPJ_FALSE;
+    }
+
+    if (!jp2->ignore_pclr_cmap_cdef) {
+        if (!opj_jp2_check_color(p_image, &(jp2->color), p_manager)) {
+            return OPJ_FALSE;
+        }
+
+        /* Set Image Color Space */
+        if (jp2->enumcs == 16) {
+            p_image->color_space = OPJ_CLRSPC_SRGB;
+        } else if (jp2->enumcs == 17) {
+            p_image->color_space = OPJ_CLRSPC_GRAY;
+        } else if (jp2->enumcs == 18) {
+            p_image->color_space = OPJ_CLRSPC_SYCC;
+        } else if (jp2->enumcs == 24) {
+            p_image->color_space = OPJ_CLRSPC_EYCC;
+        } else if (jp2->enumcs == 12) {
+            p_image->color_space = OPJ_CLRSPC_CMYK;
+        } else {
+            p_image->color_space = OPJ_CLRSPC_UNKNOWN;
+        }
+
+        if (jp2->color.jp2_pclr) {
+            /* Part 1, I.5.3.4: Either both or none : */
+            if (!jp2->color.jp2_pclr->cmap) {
+                opj_jp2_free_pclr(&(jp2->color));
+            } else {
+                opj_jp2_apply_pclr(p_image, &(jp2->color));
+            }
+        }
+
+        /* Apply the color space if needed */
+        if (jp2->color.jp2_cdef) {
+            opj_jp2_apply_cdef(p_image, &(jp2->color), p_manager);
+        }
+
+        if (jp2->color.icc_profile_buf) {
+            p_image->icc_profile_buf = jp2->color.icc_profile_buf;
+            p_image->icc_profile_len = jp2->color.icc_profile_len;
+            jp2->color.icc_profile_buf = NULL;
+        }
+    }
+
+    return OPJ_TRUE;
+}
+
+static OPJ_BOOL opj_jp2_write_jp2h(opj_jp2_t *jp2,
+                                   opj_stream_private_t *stream,
+                                   opj_event_mgr_t * p_manager
+                                  )
+{
+    opj_jp2_img_header_writer_handler_t l_writers [4];
+    opj_jp2_img_header_writer_handler_t * l_current_writer;
+
+    OPJ_INT32 i, l_nb_pass;
+    /* size of data for super box*/
+    OPJ_UINT32 l_jp2h_size = 8;
+    OPJ_BOOL l_result = OPJ_TRUE;
+
+    /* to store the data of the super box */
+    OPJ_BYTE l_jp2h_data [8];
+
+    /* preconditions */
+    assert(stream != 00);
+    assert(jp2 != 00);
+    assert(p_manager != 00);
+
+    memset(l_writers, 0, sizeof(l_writers));
+
+    if (jp2->bpc == 255) {
+        l_nb_pass = 3;
+        l_writers[0].handler = opj_jp2_write_ihdr;
+        l_writers[1].handler = opj_jp2_write_bpcc;
+        l_writers[2].handler = opj_jp2_write_colr;
+    } else {
+        l_nb_pass = 2;
+        l_writers[0].handler = opj_jp2_write_ihdr;
+        l_writers[1].handler = opj_jp2_write_colr;
+    }
+
+    if (jp2->color.jp2_cdef != NULL) {
+        l_writers[l_nb_pass].handler = opj_jp2_write_cdef;
+        l_nb_pass++;
+    }
+
+    /* write box header */
+    /* write JP2H type */
+    opj_write_bytes(l_jp2h_data + 4, JP2_JP2H, 4);
+
+    l_current_writer = l_writers;
+    for (i = 0; i < l_nb_pass; ++i) {
+        l_current_writer->m_data = l_current_writer->handler(jp2,
+                                   &(l_current_writer->m_size));
+        if (l_current_writer->m_data == 00) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Not enough memory to hold JP2 Header data\n");
+            l_result = OPJ_FALSE;
+            break;
+        }
+
+        l_jp2h_size += l_current_writer->m_size;
+        ++l_current_writer;
+    }
+
+    if (! l_result) {
+        l_current_writer = l_writers;
+        for (i = 0; i < l_nb_pass; ++i) {
+            if (l_current_writer->m_data != 00) {
+                opj_free(l_current_writer->m_data);
+            }
+            ++l_current_writer;
+        }
+
+        return OPJ_FALSE;
+    }
+
+    /* write super box size */
+    opj_write_bytes(l_jp2h_data, l_jp2h_size, 4);
+
+    /* write super box data on stream */
+    if (opj_stream_write_data(stream, l_jp2h_data, 8, p_manager) != 8) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Stream error while writing JP2 Header box\n");
+        l_result = OPJ_FALSE;
+    }
+
+    if (l_result) {
+        l_current_writer = l_writers;
+        for (i = 0; i < l_nb_pass; ++i) {
+            if (opj_stream_write_data(stream, l_current_writer->m_data,
+                                      l_current_writer->m_size, p_manager) != l_current_writer->m_size) {
+                opj_event_msg(p_manager, EVT_ERROR,
+                              "Stream error while writing JP2 Header box\n");
+                l_result = OPJ_FALSE;
+                break;
+            }
+            ++l_current_writer;
+        }
+    }
+
+    l_current_writer = l_writers;
+
+    /* cleanup */
+    for (i = 0; i < l_nb_pass; ++i) {
+        if (l_current_writer->m_data != 00) {
+            opj_free(l_current_writer->m_data);
+        }
+        ++l_current_writer;
+    }
+
+    return l_result;
+}
+
+static OPJ_BOOL opj_jp2_write_ftyp(opj_jp2_t *jp2,
+                                   opj_stream_private_t *cio,
+                                   opj_event_mgr_t * p_manager)
+{
+    OPJ_UINT32 i;
+    OPJ_UINT32 l_ftyp_size;
+    OPJ_BYTE * l_ftyp_data, * l_current_data_ptr;
+    OPJ_BOOL l_result;
+
+    /* preconditions */
+    assert(cio != 00);
+    assert(jp2 != 00);
+    assert(p_manager != 00);
+    l_ftyp_size = 16 + 4 * jp2->numcl;
+
+    l_ftyp_data = (OPJ_BYTE *) opj_calloc(1, l_ftyp_size);
+
+    if (l_ftyp_data == 00) {
+        opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to handle ftyp data\n");
+        return OPJ_FALSE;
+    }
+
+    l_current_data_ptr = l_ftyp_data;
+
+    opj_write_bytes(l_current_data_ptr, l_ftyp_size, 4); /* box size */
+    l_current_data_ptr += 4;
+
+    opj_write_bytes(l_current_data_ptr, JP2_FTYP, 4); /* FTYP */
+    l_current_data_ptr += 4;
+
+    opj_write_bytes(l_current_data_ptr, jp2->brand, 4); /* BR */
+    l_current_data_ptr += 4;
+
+    opj_write_bytes(l_current_data_ptr, jp2->minversion, 4); /* MinV */
+    l_current_data_ptr += 4;
+
+    for (i = 0; i < jp2->numcl; i++)  {
+        opj_write_bytes(l_current_data_ptr, jp2->cl[i], 4); /* CL */
+    }
+
+    l_result = (opj_stream_write_data(cio, l_ftyp_data, l_ftyp_size,
+                                      p_manager) == l_ftyp_size);
+    if (! l_result) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Error while writing ftyp data to stream\n");
+    }
+
+    opj_free(l_ftyp_data);
+
+    return l_result;
+}
+
+static OPJ_BOOL opj_jp2_write_jp2c(opj_jp2_t *jp2,
+                                   opj_stream_private_t *cio,
+                                   opj_event_mgr_t * p_manager)
+{
+    OPJ_OFF_T j2k_codestream_exit;
+    OPJ_BYTE l_data_header [8];
+
+    /* preconditions */
+    assert(jp2 != 00);
+    assert(cio != 00);
+    assert(p_manager != 00);
+    assert(opj_stream_has_seek(cio));
+
+    j2k_codestream_exit = opj_stream_tell(cio);
+    opj_write_bytes(l_data_header,
+                    (OPJ_UINT32)(j2k_codestream_exit - jp2->j2k_codestream_offset),
+                    4); /* size of codestream */
+    opj_write_bytes(l_data_header + 4, JP2_JP2C,
+                    4);                                     /* JP2C */
+
+    if (! opj_stream_seek(cio, jp2->j2k_codestream_offset, p_manager)) {
+        opj_event_msg(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
+        return OPJ_FALSE;
+    }
+
+    if (opj_stream_write_data(cio, l_data_header, 8, p_manager) != 8) {
+        opj_event_msg(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
+        return OPJ_FALSE;
+    }
+
+    if (! opj_stream_seek(cio, j2k_codestream_exit, p_manager)) {
+        opj_event_msg(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
+        return OPJ_FALSE;
+    }
+
+    return OPJ_TRUE;
+}
+
+static OPJ_BOOL opj_jp2_write_jp(opj_jp2_t *jp2,
+                                 opj_stream_private_t *cio,
+                                 opj_event_mgr_t * p_manager)
+{
+    /* 12 bytes will be read */
+    OPJ_BYTE l_signature_data [12];
+
+    /* preconditions */
+    assert(cio != 00);
+    assert(jp2 != 00);
+    assert(p_manager != 00);
+
+    /* write box length */
+    opj_write_bytes(l_signature_data, 12, 4);
+    /* writes box type */
+    opj_write_bytes(l_signature_data + 4, JP2_JP, 4);
+    /* writes magic number*/
+    opj_write_bytes(l_signature_data + 8, 0x0d0a870a, 4);
+
+    if (opj_stream_write_data(cio, l_signature_data, 12, p_manager) != 12) {
+        return OPJ_FALSE;
+    }
+
+    return OPJ_TRUE;
+}
+
+/* ----------------------------------------------------------------------- */
+/* JP2 decoder interface                                             */
+/* ----------------------------------------------------------------------- */
+
+void opj_jp2_setup_decoder(opj_jp2_t *jp2, opj_dparameters_t *parameters)
+{
+    /* setup the J2K codec */
+    opj_j2k_setup_decoder(jp2->j2k, parameters);
+
+    /* further JP2 initializations go here */
+    jp2->color.jp2_has_colr = 0;
+    jp2->ignore_pclr_cmap_cdef = parameters->flags &
+                                 OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG;
+}
+
+OPJ_BOOL opj_jp2_set_threads(opj_jp2_t *jp2, OPJ_UINT32 num_threads)
+{
+    return opj_j2k_set_threads(jp2->j2k, num_threads);
+}
+
+/* ----------------------------------------------------------------------- */
+/* JP2 encoder interface                                             */
+/* ----------------------------------------------------------------------- */
+
+OPJ_BOOL opj_jp2_setup_encoder(opj_jp2_t *jp2,
+                               opj_cparameters_t *parameters,
+                               opj_image_t *image,
+                               opj_event_mgr_t * p_manager)
+{
+    OPJ_UINT32 i;
+    OPJ_UINT32 depth_0;
+    OPJ_UINT32 sign;
+    OPJ_UINT32 alpha_count;
+    OPJ_UINT32 color_channels = 0U;
+    OPJ_UINT32 alpha_channel = 0U;
+
+
+    if (!jp2 || !parameters || !image) {
+        return OPJ_FALSE;
+    }
+
+    /* setup the J2K codec */
+    /* ------------------- */
+
+    /* Check if number of components respects standard */
+    if (image->numcomps < 1 || image->numcomps > 16384) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Invalid number of components specified while setting up JP2 encoder\n");
+        return OPJ_FALSE;
+    }
+
+    if (opj_j2k_setup_encoder(jp2->j2k, parameters, image,
+                              p_manager) == OPJ_FALSE) {
+        return OPJ_FALSE;
+    }
+
+    /* setup the JP2 codec */
+    /* ------------------- */
+
+    /* Profile box */
+
+    jp2->brand = JP2_JP2;   /* BR */
+    jp2->minversion = 0;    /* MinV */
+    jp2->numcl = 1;
+    jp2->cl = (OPJ_UINT32*) opj_malloc(jp2->numcl * sizeof(OPJ_UINT32));
+    if (!jp2->cl) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Not enough memory when setup the JP2 encoder\n");
+        return OPJ_FALSE;
+    }
+    jp2->cl[0] = JP2_JP2;   /* CL0 : JP2 */
+
+    /* Image Header box */
+
+    jp2->numcomps = image->numcomps;    /* NC */
+    jp2->comps = (opj_jp2_comps_t*) opj_malloc(jp2->numcomps * sizeof(
+                     opj_jp2_comps_t));
+    if (!jp2->comps) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Not enough memory when setup the JP2 encoder\n");
+        /* Memory of jp2->cl will be freed by opj_jp2_destroy */
+        return OPJ_FALSE;
+    }
+
+    jp2->h = image->y1 - image->y0;     /* HEIGHT */
+    jp2->w = image->x1 - image->x0;     /* WIDTH */
+    /* BPC */
+    depth_0 = image->comps[0].prec - 1;
+    sign = image->comps[0].sgnd;
+    jp2->bpc = depth_0 + (sign << 7);
+    for (i = 1; i < image->numcomps; i++) {
+        OPJ_UINT32 depth = image->comps[i].prec - 1;
+        sign = image->comps[i].sgnd;
+        if (depth_0 != depth) {
+            jp2->bpc = 255;
+        }
+    }
+    jp2->C = 7;         /* C : Always 7 */
+    jp2->UnkC = 0;      /* UnkC, colorspace specified in colr box */
+    jp2->IPR = 0;       /* IPR, no intellectual property */
+
+    /* BitsPerComponent box */
+    for (i = 0; i < image->numcomps; i++) {
+        jp2->comps[i].bpcc = image->comps[i].prec - 1 + (image->comps[i].sgnd << 7);
+    }
+
+    /* Colour Specification box */
+    if (image->icc_profile_len) {
+        jp2->meth = 2;
+        jp2->enumcs = 0;
+    } else {
         jp2->meth = 1;
-        if (image->color_space == 1)
-            jp2->enumcs = 16;  /* sRGB as defined by IEC 61966-2-1 */
-        else if (image->color_space == 2)
-            jp2->enumcs = 17;  /* greyscale */
-        else if (image->color_space == 3)
-            jp2->enumcs = 18;  /* YUV */
-    }
-
-       /* Channel Definition box */
-       /* FIXME not provided by parameters */
-       /* We try to do what we can... */
-       alpha_count = 0U;
-       for (i = 0; i < image->numcomps; i++) {
-               if (image->comps[i].alpha != 0) {
-                       alpha_count++;
-                       alpha_channel = i;
-               }
-       }
-       if (alpha_count == 1U) { /* no way to deal with more than 1 alpha channel */
-               switch (jp2->enumcs) {
-                       case 16:
-                       case 18:
-                               color_channels = 3;
-                               break;
-                       case 17:
-                               color_channels = 1;
-                               break;
-                       default:
-                               alpha_count = 0U;
-                               break;
-               }
-               if (alpha_count == 0U) {
-                       opj_event_msg(p_manager, EVT_WARNING, "Alpha channel specified but unknown enumcs. No cdef box will be created.\n");
-               } else if (image->numcomps < (color_channels+1)) {
-                       opj_event_msg(p_manager, EVT_WARNING, "Alpha channel specified but not enough image components for an automatic cdef box creation.\n");
-                       alpha_count = 0U;
-               } else if ((OPJ_UINT32)alpha_channel < color_channels) {
-                       opj_event_msg(p_manager, EVT_WARNING, "Alpha channel position conflicts with color channel. No cdef box will be created.\n");
-                       alpha_count = 0U;
-               }
-       } else if (alpha_count > 1) {
-               opj_event_msg(p_manager, EVT_WARNING, "Multiple alpha channels specified. No cdef box will be created.\n");
-       }
-       if (alpha_count == 1U) { /* if here, we know what we can do */
-               jp2->color.jp2_cdef = (opj_jp2_cdef_t*)opj_malloc(sizeof(opj_jp2_cdef_t));
-               if(!jp2->color.jp2_cdef) {
-                       opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to setup the JP2 encoder\n");
-                       return OPJ_FALSE;
-               }
-               /* no memset needed, all values will be overwritten except if jp2->color.jp2_cdef->info allocation fails, */
-               /* in which case jp2->color.jp2_cdef->info will be NULL => valid for destruction */
-               jp2->color.jp2_cdef->info = (opj_jp2_cdef_info_t*) opj_malloc(image->numcomps * sizeof(opj_jp2_cdef_info_t));
-               if (!jp2->color.jp2_cdef->info) {
-                       /* memory will be freed by opj_jp2_destroy */
-                       opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to setup the JP2 encoder\n");
-                       return OPJ_FALSE;
-               }
-               jp2->color.jp2_cdef->n = (OPJ_UINT16) image->numcomps; /* cast is valid : image->numcomps [1,16384] */
-               for (i = 0U; i < color_channels; i++) {
-                       jp2->color.jp2_cdef->info[i].cn = (OPJ_UINT16)i; /* cast is valid : image->numcomps [1,16384] */
-                       jp2->color.jp2_cdef->info[i].typ = 0U;
-                       jp2->color.jp2_cdef->info[i].asoc = (OPJ_UINT16)(i+1U); /* No overflow + cast is valid : image->numcomps [1,16384] */
-               }
-               for (; i < image->numcomps; i++) {
-                       if (image->comps[i].alpha != 0) { /* we'll be here exactly once */
-                               jp2->color.jp2_cdef->info[i].cn = (OPJ_UINT16)i; /* cast is valid : image->numcomps [1,16384] */
-                               jp2->color.jp2_cdef->info[i].typ = 1U; /* Opacity channel */
-                               jp2->color.jp2_cdef->info[i].asoc = 0U; /* Apply alpha channel to the whole image */
-                       } else {
-                               /* Unknown channel */
-                               jp2->color.jp2_cdef->info[i].cn = (OPJ_UINT16)i; /* cast is valid : image->numcomps [1,16384] */
-                               jp2->color.jp2_cdef->info[i].typ = 65535U;
-                               jp2->color.jp2_cdef->info[i].asoc = 65535U;
-                       }
-               }
-       }
-
-       jp2->precedence = 0;    /* PRECEDENCE */
-       jp2->approx = 0;                /* APPROX */
-
-       jp2->jpip_on = parameters->jpip_on;
-
-       return OPJ_TRUE;
+        if (image->color_space == 1) {
+            jp2->enumcs = 16;    /* sRGB as defined by IEC 61966-2-1 */
+        } else if (image->color_space == 2) {
+            jp2->enumcs = 17;    /* greyscale */
+        } else if (image->color_space == 3) {
+            jp2->enumcs = 18;    /* YUV */
+        }
+    }
+
+    /* Channel Definition box */
+    /* FIXME not provided by parameters */
+    /* We try to do what we can... */
+    alpha_count = 0U;
+    for (i = 0; i < image->numcomps; i++) {
+        if (image->comps[i].alpha != 0) {
+            alpha_count++;
+            alpha_channel = i;
+        }
+    }
+    if (alpha_count == 1U) { /* no way to deal with more than 1 alpha channel */
+        switch (jp2->enumcs) {
+        case 16:
+        case 18:
+            color_channels = 3;
+            break;
+        case 17:
+            color_channels = 1;
+            break;
+        default:
+            alpha_count = 0U;
+            break;
+        }
+        if (alpha_count == 0U) {
+            opj_event_msg(p_manager, EVT_WARNING,
+                          "Alpha channel specified but unknown enumcs. No cdef box will be created.\n");
+        } else if (image->numcomps < (color_channels + 1)) {
+            opj_event_msg(p_manager, EVT_WARNING,
+                          "Alpha channel specified but not enough image components for an automatic cdef box creation.\n");
+            alpha_count = 0U;
+        } else if ((OPJ_UINT32)alpha_channel < color_channels) {
+            opj_event_msg(p_manager, EVT_WARNING,
+                          "Alpha channel position conflicts with color channel. No cdef box will be created.\n");
+            alpha_count = 0U;
+        }
+    } else if (alpha_count > 1) {
+        opj_event_msg(p_manager, EVT_WARNING,
+                      "Multiple alpha channels specified. No cdef box will be created.\n");
+    }
+    if (alpha_count == 1U) { /* if here, we know what we can do */
+        jp2->color.jp2_cdef = (opj_jp2_cdef_t*)opj_malloc(sizeof(opj_jp2_cdef_t));
+        if (!jp2->color.jp2_cdef) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Not enough memory to setup the JP2 encoder\n");
+            return OPJ_FALSE;
+        }
+        /* no memset needed, all values will be overwritten except if jp2->color.jp2_cdef->info allocation fails, */
+        /* in which case jp2->color.jp2_cdef->info will be NULL => valid for destruction */
+        jp2->color.jp2_cdef->info = (opj_jp2_cdef_info_t*) opj_malloc(
+                                        image->numcomps * sizeof(opj_jp2_cdef_info_t));
+        if (!jp2->color.jp2_cdef->info) {
+            /* memory will be freed by opj_jp2_destroy */
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Not enough memory to setup the JP2 encoder\n");
+            return OPJ_FALSE;
+        }
+        jp2->color.jp2_cdef->n = (OPJ_UINT16)
+                                 image->numcomps; /* cast is valid : image->numcomps [1,16384] */
+        for (i = 0U; i < color_channels; i++) {
+            jp2->color.jp2_cdef->info[i].cn = (OPJ_UINT16)
+                                              i; /* cast is valid : image->numcomps [1,16384] */
+            jp2->color.jp2_cdef->info[i].typ = 0U;
+            jp2->color.jp2_cdef->info[i].asoc = (OPJ_UINT16)(i +
+                                                1U); /* No overflow + cast is valid : image->numcomps [1,16384] */
+        }
+        for (; i < image->numcomps; i++) {
+            if (image->comps[i].alpha != 0) { /* we'll be here exactly once */
+                jp2->color.jp2_cdef->info[i].cn = (OPJ_UINT16)
+                                                  i; /* cast is valid : image->numcomps [1,16384] */
+                jp2->color.jp2_cdef->info[i].typ = 1U; /* Opacity channel */
+                jp2->color.jp2_cdef->info[i].asoc =
+                    0U; /* Apply alpha channel to the whole image */
+            } else {
+                /* Unknown channel */
+                jp2->color.jp2_cdef->info[i].cn = (OPJ_UINT16)
+                                                  i; /* cast is valid : image->numcomps [1,16384] */
+                jp2->color.jp2_cdef->info[i].typ = 65535U;
+                jp2->color.jp2_cdef->info[i].asoc = 65535U;
+            }
+        }
+    }
+
+    jp2->precedence = 0;    /* PRECEDENCE */
+    jp2->approx = 0;        /* APPROX */
+
+    jp2->jpip_on = parameters->jpip_on;
+
+    return OPJ_TRUE;
 }
 
 OPJ_BOOL opj_jp2_encode(opj_jp2_t *jp2,
-                                               opj_stream_private_t *stream,
-                                               opj_event_mgr_t * p_manager)
+                        opj_stream_private_t *stream,
+                        opj_event_mgr_t * p_manager)
 {
-       return opj_j2k_encode(jp2->j2k, stream, p_manager);
+    return opj_j2k_encode(jp2->j2k, stream, p_manager);
 }
 
 OPJ_BOOL opj_jp2_end_decompress(opj_jp2_t *jp2,
                                 opj_stream_private_t *cio,
                                 opj_event_mgr_t * p_manager
-                                )
+                               )
 {
-       /* preconditions */
-       assert(jp2 != 00);
-       assert(cio != 00);
-       assert(p_manager != 00);
-
-       /* customization of the end encoding */
-       if (! opj_jp2_setup_end_header_reading(jp2, p_manager)) {
-               return OPJ_FALSE;
-       }
-
-       /* write header */
-       if (! opj_jp2_exec (jp2,jp2->m_procedure_list,cio,p_manager)) {
-               return OPJ_FALSE;
-       }
-
-       return opj_j2k_end_decompress(jp2->j2k, cio, p_manager);
+    /* preconditions */
+    assert(jp2 != 00);
+    assert(cio != 00);
+    assert(p_manager != 00);
+
+    /* customization of the end encoding */
+    if (! opj_jp2_setup_end_header_reading(jp2, p_manager)) {
+        return OPJ_FALSE;
+    }
+
+    /* write header */
+    if (! opj_jp2_exec(jp2, jp2->m_procedure_list, cio, p_manager)) {
+        return OPJ_FALSE;
+    }
+
+    return opj_j2k_end_decompress(jp2->j2k, cio, p_manager);
 }
 
-OPJ_BOOL opj_jp2_end_compress( opj_jp2_t *jp2,
-                                                           opj_stream_private_t *cio,
-                                                           opj_event_mgr_t * p_manager
-                                )
+OPJ_BOOL opj_jp2_end_compress(opj_jp2_t *jp2,
+                              opj_stream_private_t *cio,
+                              opj_event_mgr_t * p_manager
+                             )
 {
-       /* preconditions */
-       assert(jp2 != 00);
-       assert(cio != 00);
-       assert(p_manager != 00);
-
-       /* customization of the end encoding */
-       if (! opj_jp2_setup_end_header_writing(jp2, p_manager)) {
-               return OPJ_FALSE;
-       }
-
-       if (! opj_j2k_end_compress(jp2->j2k,cio,p_manager)) {
-               return OPJ_FALSE;
-       }
-
-       /* write header */
-       return opj_jp2_exec(jp2,jp2->m_procedure_list,cio,p_manager);
+    /* preconditions */
+    assert(jp2 != 00);
+    assert(cio != 00);
+    assert(p_manager != 00);
+
+    /* customization of the end encoding */
+    if (! opj_jp2_setup_end_header_writing(jp2, p_manager)) {
+        return OPJ_FALSE;
+    }
+
+    if (! opj_j2k_end_compress(jp2->j2k, cio, p_manager)) {
+        return OPJ_FALSE;
+    }
+
+    /* write header */
+    return opj_jp2_exec(jp2, jp2->m_procedure_list, cio, p_manager);
 }
 
-static OPJ_BOOL opj_jp2_setup_end_header_writing (opj_jp2_t *jp2, opj_event_mgr_t * p_manager)
+static OPJ_BOOL opj_jp2_setup_end_header_writing(opj_jp2_t *jp2,
+        opj_event_mgr_t * p_manager)
 {
-       /* preconditions */
-       assert(jp2 != 00);
-       assert(p_manager != 00);
+    /* preconditions */
+    assert(jp2 != 00);
+    assert(p_manager != 00);
 
 #ifdef USE_JPIP
-       if( jp2->jpip_on ) {
-               if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_procedure)opj_jpip_write_iptr, p_manager)) {
-                       return OPJ_FALSE;
-               }
-       }
+    if (jp2->jpip_on) {
+        if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,
+                                               (opj_procedure)opj_jpip_write_iptr, p_manager)) {
+            return OPJ_FALSE;
+        }
+    }
 #endif
-       if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_procedure)opj_jp2_write_jp2c, p_manager)) {
-               return OPJ_FALSE;
-       }
-       /* DEVELOPER CORNER, add your custom procedures */
+    if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,
+                                           (opj_procedure)opj_jp2_write_jp2c, p_manager)) {
+        return OPJ_FALSE;
+    }
+    /* DEVELOPER CORNER, add your custom procedures */
 #ifdef USE_JPIP
-  if( jp2->jpip_on )
-       {
-               if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_procedure)opj_jpip_write_cidx, p_manager)) {
-                       return OPJ_FALSE;
-               }
-               if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_procedure)opj_jpip_write_fidx, p_manager)) {
-                       return OPJ_FALSE;
-               }
-       }
+    if (jp2->jpip_on) {
+        if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,
+                                               (opj_procedure)opj_jpip_write_cidx, p_manager)) {
+            return OPJ_FALSE;
+        }
+        if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,
+                                               (opj_procedure)opj_jpip_write_fidx, p_manager)) {
+            return OPJ_FALSE;
+        }
+    }
 #endif
-       return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_jp2_setup_end_header_reading (opj_jp2_t *jp2, opj_event_mgr_t * p_manager)
+static OPJ_BOOL opj_jp2_setup_end_header_reading(opj_jp2_t *jp2,
+        opj_event_mgr_t * p_manager)
 {
-       /* preconditions */
-       assert(jp2 != 00);
-       assert(p_manager != 00);
-       
-       if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_procedure)opj_jp2_read_header_procedure, p_manager)) {
-               return OPJ_FALSE;
-       }
-       /* DEVELOPER CORNER, add your custom procedures */
-       
-       return OPJ_TRUE;
-}
+    /* preconditions */
+    assert(jp2 != 00);
+    assert(p_manager != 00);
 
-static OPJ_BOOL opj_jp2_default_validation (   opj_jp2_t * jp2,
-                                        opj_stream_private_t *cio,
-                                        opj_event_mgr_t * p_manager
-                                        )
-{
-       OPJ_BOOL l_is_valid = OPJ_TRUE;
-       OPJ_UINT32 i;
+    if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,
+                                           (opj_procedure)opj_jp2_read_header_procedure, p_manager)) {
+        return OPJ_FALSE;
+    }
+    /* DEVELOPER CORNER, add your custom procedures */
 
-       /* preconditions */
-       assert(jp2 != 00);
-       assert(cio != 00);
-       assert(p_manager != 00);
+    return OPJ_TRUE;
+}
 
-       /* JPEG2000 codec validation */
+static OPJ_BOOL opj_jp2_default_validation(opj_jp2_t * jp2,
+        opj_stream_private_t *cio,
+        opj_event_mgr_t * p_manager
+                                          )
+{
+    OPJ_BOOL l_is_valid = OPJ_TRUE;
+    OPJ_UINT32 i;
+
+    /* preconditions */
+    assert(jp2 != 00);
+    assert(cio != 00);
+    assert(p_manager != 00);
+
+    /* JPEG2000 codec validation */
+
+    /* STATE checking */
+    /* make sure the state is at 0 */
+    l_is_valid &= (jp2->jp2_state == JP2_STATE_NONE);
+
+    /* make sure not reading a jp2h ???? WEIRD */
+    l_is_valid &= (jp2->jp2_img_state == JP2_IMG_STATE_NONE);
+
+    /* POINTER validation */
+    /* make sure a j2k codec is present */
+    l_is_valid &= (jp2->j2k != 00);
+
+    /* make sure a procedure list is present */
+    l_is_valid &= (jp2->m_procedure_list != 00);
+
+    /* make sure a validation list is present */
+    l_is_valid &= (jp2->m_validation_list != 00);
+
+    /* PARAMETER VALIDATION */
+    /* number of components */
+    l_is_valid &= (jp2->numcl > 0);
+    /* width */
+    l_is_valid &= (jp2->h > 0);
+    /* height */
+    l_is_valid &= (jp2->w > 0);
+    /* precision */
+    for (i = 0; i < jp2->numcomps; ++i) {
+        l_is_valid &= ((jp2->comps[i].bpcc & 0x7FU) <
+                       38U); /* 0 is valid, ignore sign for check */
+    }
 
-       /* STATE checking */
-       /* make sure the state is at 0 */
-       l_is_valid &= (jp2->jp2_state == JP2_STATE_NONE);
+    /* METH */
+    l_is_valid &= ((jp2->meth > 0) && (jp2->meth < 3));
 
-       /* make sure not reading a jp2h ???? WEIRD */
-       l_is_valid &= (jp2->jp2_img_state == JP2_IMG_STATE_NONE);
+    /* stream validation */
+    /* back and forth is needed */
+    l_is_valid &= opj_stream_has_seek(cio);
 
-       /* POINTER validation */
-       /* make sure a j2k codec is present */
-       l_is_valid &= (jp2->j2k != 00);
+    return l_is_valid;
+}
 
-       /* make sure a procedure list is present */
-       l_is_valid &= (jp2->m_procedure_list != 00);
+static OPJ_BOOL opj_jp2_read_header_procedure(opj_jp2_t *jp2,
+        opj_stream_private_t *stream,
+        opj_event_mgr_t * p_manager
+                                             )
+{
+    opj_jp2_box_t box;
+    OPJ_UINT32 l_nb_bytes_read;
+    const opj_jp2_header_handler_t * l_current_handler;
+    const opj_jp2_header_handler_t * l_current_handler_misplaced;
+    OPJ_UINT32 l_last_data_size = OPJ_BOX_SIZE;
+    OPJ_UINT32 l_current_data_size;
+    OPJ_BYTE * l_current_data = 00;
+
+    /* preconditions */
+    assert(stream != 00);
+    assert(jp2 != 00);
+    assert(p_manager != 00);
+
+    l_current_data = (OPJ_BYTE*)opj_calloc(1, l_last_data_size);
+
+    if (l_current_data == 00) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Not enough memory to handle jpeg2000 file header\n");
+        return OPJ_FALSE;
+    }
 
-       /* make sure a validation list is present */
-       l_is_valid &= (jp2->m_validation_list != 00);
+    while (opj_jp2_read_boxhdr(&box, &l_nb_bytes_read, stream, p_manager)) {
+        /* is it the codestream box ? */
+        if (box.type == JP2_JP2C) {
+            if (jp2->jp2_state & JP2_STATE_HEADER) {
+                jp2->jp2_state |= JP2_STATE_CODESTREAM;
+                opj_free(l_current_data);
+                return OPJ_TRUE;
+            } else {
+                opj_event_msg(p_manager, EVT_ERROR, "bad placed jpeg codestream\n");
+                opj_free(l_current_data);
+                return OPJ_FALSE;
+            }
+        } else if (box.length == 0) {
+            opj_event_msg(p_manager, EVT_ERROR, "Cannot handle box of undefined sizes\n");
+            opj_free(l_current_data);
+            return OPJ_FALSE;
+        }
+        /* testcase 1851.pdf.SIGSEGV.ce9.948 */
+        else if (box.length < l_nb_bytes_read) {
+            opj_event_msg(p_manager, EVT_ERROR, "invalid box size %d (%x)\n", box.length,
+                          box.type);
+            opj_free(l_current_data);
+            return OPJ_FALSE;
+        }
 
-       /* PARAMETER VALIDATION */
-       /* number of components */
-       l_is_valid &= (jp2->numcl > 0);
-       /* width */
-       l_is_valid &= (jp2->h > 0);
-       /* height */
-       l_is_valid &= (jp2->w > 0);
-       /* precision */
-       for (i = 0; i < jp2->numcomps; ++i)     {
-               l_is_valid &= ((jp2->comps[i].bpcc & 0x7FU) < 38U); /* 0 is valid, ignore sign for check */
-       }
+        l_current_handler = opj_jp2_find_handler(box.type);
+        l_current_handler_misplaced = opj_jp2_img_find_handler(box.type);
+        l_current_data_size = box.length - l_nb_bytes_read;
+
+        if ((l_current_handler != 00) || (l_current_handler_misplaced != 00)) {
+            if (l_current_handler == 00) {
+                opj_event_msg(p_manager, EVT_WARNING,
+                              "Found a misplaced '%c%c%c%c' box outside jp2h box\n",
+                              (OPJ_BYTE)(box.type >> 24), (OPJ_BYTE)(box.type >> 16),
+                              (OPJ_BYTE)(box.type >> 8), (OPJ_BYTE)(box.type >> 0));
+                if (jp2->jp2_state & JP2_STATE_HEADER) {
+                    /* read anyway, we already have jp2h */
+                    l_current_handler = l_current_handler_misplaced;
+                } else {
+                    opj_event_msg(p_manager, EVT_WARNING,
+                                  "JPEG2000 Header box not read yet, '%c%c%c%c' box will be ignored\n",
+                                  (OPJ_BYTE)(box.type >> 24), (OPJ_BYTE)(box.type >> 16),
+                                  (OPJ_BYTE)(box.type >> 8), (OPJ_BYTE)(box.type >> 0));
+                    jp2->jp2_state |= JP2_STATE_UNKNOWN;
+                    if (opj_stream_skip(stream, l_current_data_size,
+                                        p_manager) != l_current_data_size) {
+                        opj_event_msg(p_manager, EVT_ERROR,
+                                      "Problem with skipping JPEG2000 box, stream error\n");
+                        opj_free(l_current_data);
+                        return OPJ_FALSE;
+                    }
+                    continue;
+                }
+            }
+            if ((OPJ_OFF_T)l_current_data_size > opj_stream_get_number_byte_left(stream)) {
+                /* do not even try to malloc if we can't read */
+                opj_event_msg(p_manager, EVT_ERROR,
+                              "Invalid box size %d for box '%c%c%c%c'. Need %d bytes, %d bytes remaining \n",
+                              box.length, (OPJ_BYTE)(box.type >> 24), (OPJ_BYTE)(box.type >> 16),
+                              (OPJ_BYTE)(box.type >> 8), (OPJ_BYTE)(box.type >> 0), l_current_data_size,
+                              (OPJ_UINT32)opj_stream_get_number_byte_left(stream));
+                opj_free(l_current_data);
+                return OPJ_FALSE;
+            }
+            if (l_current_data_size > l_last_data_size) {
+                OPJ_BYTE* new_current_data = (OPJ_BYTE*)opj_realloc(l_current_data,
+                                             l_current_data_size);
+                if (!new_current_data) {
+                    opj_free(l_current_data);
+                    opj_event_msg(p_manager, EVT_ERROR,
+                                  "Not enough memory to handle jpeg2000 box\n");
+                    return OPJ_FALSE;
+                }
+                l_current_data = new_current_data;
+                l_last_data_size = l_current_data_size;
+            }
 
-       /* METH */
-       l_is_valid &= ((jp2->meth > 0) && (jp2->meth < 3));
+            l_nb_bytes_read = (OPJ_UINT32)opj_stream_read_data(stream, l_current_data,
+                              l_current_data_size, p_manager);
+            if (l_nb_bytes_read != l_current_data_size) {
+                opj_event_msg(p_manager, EVT_ERROR,
+                              "Problem with reading JPEG2000 box, stream error\n");
+                opj_free(l_current_data);
+                return OPJ_FALSE;
+            }
 
-       /* stream validation */
-       /* back and forth is needed */
-       l_is_valid &= opj_stream_has_seek(cio);
+            if (! l_current_handler->handler(jp2, l_current_data, l_current_data_size,
+                                             p_manager)) {
+                opj_free(l_current_data);
+                return OPJ_FALSE;
+            }
+        } else {
+            if (!(jp2->jp2_state & JP2_STATE_SIGNATURE)) {
+                opj_event_msg(p_manager, EVT_ERROR,
+                              "Malformed JP2 file format: first box must be JPEG 2000 signature box\n");
+                opj_free(l_current_data);
+                return OPJ_FALSE;
+            }
+            if (!(jp2->jp2_state & JP2_STATE_FILE_TYPE)) {
+                opj_event_msg(p_manager, EVT_ERROR,
+                              "Malformed JP2 file format: second box must be file type box\n");
+                opj_free(l_current_data);
+                return OPJ_FALSE;
+            }
+            jp2->jp2_state |= JP2_STATE_UNKNOWN;
+            if (opj_stream_skip(stream, l_current_data_size,
+                                p_manager) != l_current_data_size) {
+                opj_event_msg(p_manager, EVT_ERROR,
+                              "Problem with skipping JPEG2000 box, stream error\n");
+                opj_free(l_current_data);
+                return OPJ_FALSE;
+            }
+        }
+    }
 
-       return l_is_valid;
-}
+    opj_free(l_current_data);
 
-static OPJ_BOOL opj_jp2_read_header_procedure(  opj_jp2_t *jp2,
-                                                opj_stream_private_t *stream,
-                                                opj_event_mgr_t * p_manager
-                                                )
-{
-       opj_jp2_box_t box;
-       OPJ_UINT32 l_nb_bytes_read;
-       const opj_jp2_header_handler_t * l_current_handler;
-       const opj_jp2_header_handler_t * l_current_handler_misplaced;
-       OPJ_UINT32 l_last_data_size = OPJ_BOX_SIZE;
-       OPJ_UINT32 l_current_data_size;
-       OPJ_BYTE * l_current_data = 00;
-
-       /* preconditions */
-       assert(stream != 00);
-       assert(jp2 != 00);
-       assert(p_manager != 00);
-
-       l_current_data = (OPJ_BYTE*)opj_calloc(1,l_last_data_size);
-
-       if (l_current_data == 00) {
-               opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to handle jpeg2000 file header\n");
-               return OPJ_FALSE;
-       }
-
-       while (opj_jp2_read_boxhdr(&box,&l_nb_bytes_read,stream,p_manager)) {
-               /* is it the codestream box ? */
-               if (box.type == JP2_JP2C) {
-                       if (jp2->jp2_state & JP2_STATE_HEADER) {
-                               jp2->jp2_state |= JP2_STATE_CODESTREAM;
-                               opj_free(l_current_data);
-                               return OPJ_TRUE;
-                       }
-                       else {
-                               opj_event_msg(p_manager, EVT_ERROR, "bad placed jpeg codestream\n");
-                               opj_free(l_current_data);
-                               return OPJ_FALSE;
-                       }
-               }
-               else if (box.length == 0) {
-                       opj_event_msg(p_manager, EVT_ERROR, "Cannot handle box of undefined sizes\n");
-                       opj_free(l_current_data);
-                       return OPJ_FALSE;
-               }
-               /* testcase 1851.pdf.SIGSEGV.ce9.948 */
-               else if (box.length < l_nb_bytes_read) {
-                       opj_event_msg(p_manager, EVT_ERROR, "invalid box size %d (%x)\n", box.length, box.type);
-                       opj_free(l_current_data);
-                       return OPJ_FALSE;
-               }
-
-               l_current_handler = opj_jp2_find_handler(box.type);
-               l_current_handler_misplaced = opj_jp2_img_find_handler(box.type);
-               l_current_data_size = box.length - l_nb_bytes_read;
-
-               if ((l_current_handler != 00) || (l_current_handler_misplaced != 00)) {
-                       if (l_current_handler == 00) {
-                               opj_event_msg(p_manager, EVT_WARNING, "Found a misplaced '%c%c%c%c' box outside jp2h box\n", (OPJ_BYTE)(box.type>>24), (OPJ_BYTE)(box.type>>16), (OPJ_BYTE)(box.type>>8), (OPJ_BYTE)(box.type>>0));
-                               if (jp2->jp2_state & JP2_STATE_HEADER) {
-                                       /* read anyway, we already have jp2h */
-                                       l_current_handler = l_current_handler_misplaced;
-                               } else {
-                                       opj_event_msg(p_manager, EVT_WARNING, "JPEG2000 Header box not read yet, '%c%c%c%c' box will be ignored\n", (OPJ_BYTE)(box.type>>24), (OPJ_BYTE)(box.type>>16), (OPJ_BYTE)(box.type>>8), (OPJ_BYTE)(box.type>>0));
-                                       jp2->jp2_state |= JP2_STATE_UNKNOWN;
-                                       if (opj_stream_skip(stream,l_current_data_size,p_manager) != l_current_data_size) {
-                                                       opj_event_msg(p_manager, EVT_ERROR, "Problem with skipping JPEG2000 box, stream error\n");
-                                                       opj_free(l_current_data);
-                                                       return OPJ_FALSE;
-                                       }
-                                       continue;
-                               }
-                       }
-                       if ((OPJ_OFF_T)l_current_data_size > opj_stream_get_number_byte_left(stream)) {
-                               /* do not even try to malloc if we can't read */
-                               opj_event_msg(p_manager, EVT_ERROR, "Invalid box size %d for box '%c%c%c%c'. Need %d bytes, %d bytes remaining \n", box.length, (OPJ_BYTE)(box.type>>24), (OPJ_BYTE)(box.type>>16), (OPJ_BYTE)(box.type>>8), (OPJ_BYTE)(box.type>>0), l_current_data_size, (OPJ_UINT32)opj_stream_get_number_byte_left(stream));
-                               opj_free(l_current_data);
-                               return OPJ_FALSE;
-                       }
-                       if (l_current_data_size > l_last_data_size) {
-                               OPJ_BYTE* new_current_data = (OPJ_BYTE*)opj_realloc(l_current_data,l_current_data_size);
-                               if (!new_current_data) {
-                                       opj_free(l_current_data);
-                    opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to handle jpeg2000 box\n");
-                                       return OPJ_FALSE;
-                               }
-                l_current_data = new_current_data;
-                               l_last_data_size = l_current_data_size;
-                       }
-
-                       l_nb_bytes_read = (OPJ_UINT32)opj_stream_read_data(stream,l_current_data,l_current_data_size,p_manager);
-                       if (l_nb_bytes_read != l_current_data_size) {
-                               opj_event_msg(p_manager, EVT_ERROR, "Problem with reading JPEG2000 box, stream error\n");
-                opj_free(l_current_data);                
-                               return OPJ_FALSE;
-                       }
-
-                       if (! l_current_handler->handler(jp2,l_current_data,l_current_data_size,p_manager)) {
-                               opj_free(l_current_data);
-                               return OPJ_FALSE;
-                       }
-               }
-               else {
-                       if (!(jp2->jp2_state & JP2_STATE_SIGNATURE)) {
-                               opj_event_msg(p_manager, EVT_ERROR, "Malformed JP2 file format: first box must be JPEG 2000 signature box\n");
-                               opj_free(l_current_data);
-                               return OPJ_FALSE;
-                       }
-                       if (!(jp2->jp2_state & JP2_STATE_FILE_TYPE)) {
-                               opj_event_msg(p_manager, EVT_ERROR, "Malformed JP2 file format: second box must be file type box\n");
-                               opj_free(l_current_data);
-                               return OPJ_FALSE;
-                       }
-                       jp2->jp2_state |= JP2_STATE_UNKNOWN;
-                       if (opj_stream_skip(stream,l_current_data_size,p_manager) != l_current_data_size) {
-                               opj_event_msg(p_manager, EVT_ERROR, "Problem with skipping JPEG2000 box, stream error\n");
-                               opj_free(l_current_data);
-                               return OPJ_FALSE;
-                       }
-               }
-       }
-
-       opj_free(l_current_data);
-
-       return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 /**
  * Excutes the given procedures on the given codec.
  *
- * @param      p_procedure_list        the list of procedures to execute
- * @param      jp2                                     the jpeg2000 file codec to execute the procedures on.
- * @param      stream                                  the stream to execute the procedures on.
- * @param      p_manager                       the user manager.
+ * @param   p_procedure_list    the list of procedures to execute
+ * @param   jp2                 the jpeg2000 file codec to execute the procedures on.
+ * @param   stream                  the stream to execute the procedures on.
+ * @param   p_manager           the user manager.
  *
- * @return     true                            if all the procedures were successfully executed.
+ * @return  true                if all the procedures were successfully executed.
  */
-static OPJ_BOOL opj_jp2_exec (  opj_jp2_t * jp2,
-                                opj_procedure_list_t * p_procedure_list,
-                                opj_stream_private_t *stream,
-                                opj_event_mgr_t * p_manager
-                                )
+static OPJ_BOOL opj_jp2_exec(opj_jp2_t * jp2,
+                             opj_procedure_list_t * p_procedure_list,
+                             opj_stream_private_t *stream,
+                             opj_event_mgr_t * p_manager
+                            )
 
 {
-       OPJ_BOOL (** l_procedure) (opj_jp2_t * jp2, opj_stream_private_t *, opj_event_mgr_t *) = 00;
-       OPJ_BOOL l_result = OPJ_TRUE;
-       OPJ_UINT32 l_nb_proc, i;
-
-       /* preconditions */
-       assert(p_procedure_list != 00);
-       assert(jp2 != 00);
-       assert(stream != 00);
-       assert(p_manager != 00);
-
-       l_nb_proc = opj_procedure_list_get_nb_procedures(p_procedure_list);
-       l_procedure = (OPJ_BOOL (**) (opj_jp2_t * jp2, opj_stream_private_t *, opj_event_mgr_t *)) opj_procedure_list_get_first_procedure(p_procedure_list);
-
-       for     (i=0;i<l_nb_proc;++i) {
-               l_result = l_result && (*l_procedure) (jp2,stream,p_manager);
-               ++l_procedure;
-       }
-
-       /* and clear the procedure list at the end. */
-       opj_procedure_list_clear(p_procedure_list);
-       return l_result;
+    OPJ_BOOL(** l_procedure)(opj_jp2_t * jp2, opj_stream_private_t *,
+                             opj_event_mgr_t *) = 00;
+    OPJ_BOOL l_result = OPJ_TRUE;
+    OPJ_UINT32 l_nb_proc, i;
+
+    /* preconditions */
+    assert(p_procedure_list != 00);
+    assert(jp2 != 00);
+    assert(stream != 00);
+    assert(p_manager != 00);
+
+    l_nb_proc = opj_procedure_list_get_nb_procedures(p_procedure_list);
+    l_procedure = (OPJ_BOOL(**)(opj_jp2_t * jp2, opj_stream_private_t *,
+                                opj_event_mgr_t *)) opj_procedure_list_get_first_procedure(p_procedure_list);
+
+    for (i = 0; i < l_nb_proc; ++i) {
+        l_result = l_result && (*l_procedure)(jp2, stream, p_manager);
+        ++l_procedure;
+    }
+
+    /* and clear the procedure list at the end. */
+    opj_procedure_list_clear(p_procedure_list);
+    return l_result;
 }
 
 OPJ_BOOL opj_jp2_start_compress(opj_jp2_t *jp2,
                                 opj_stream_private_t *stream,
                                 opj_image_t * p_image,
                                 opj_event_mgr_t * p_manager
-                                )
+                               )
 {
-       /* preconditions */
-       assert(jp2 != 00);
-       assert(stream != 00);
-       assert(p_manager != 00);
-
-       /* customization of the validation */
-       if (! opj_jp2_setup_encoding_validation (jp2, p_manager)) {
-               return OPJ_FALSE;
-       }
-
-       /* validation of the parameters codec */
-       if (! opj_jp2_exec(jp2,jp2->m_validation_list,stream,p_manager)) {
-               return OPJ_FALSE;
-       }
-
-       /* customization of the encoding */
-       if (! opj_jp2_setup_header_writing(jp2, p_manager)) {
-               return OPJ_FALSE;
-       }
-
-       /* write header */
-       if (! opj_jp2_exec (jp2,jp2->m_procedure_list,stream,p_manager)) {
-               return OPJ_FALSE;
-       }
-
-       return opj_j2k_start_compress(jp2->j2k,stream,p_image,p_manager);
+    /* preconditions */
+    assert(jp2 != 00);
+    assert(stream != 00);
+    assert(p_manager != 00);
+
+    /* customization of the validation */
+    if (! opj_jp2_setup_encoding_validation(jp2, p_manager)) {
+        return OPJ_FALSE;
+    }
+
+    /* validation of the parameters codec */
+    if (! opj_jp2_exec(jp2, jp2->m_validation_list, stream, p_manager)) {
+        return OPJ_FALSE;
+    }
+
+    /* customization of the encoding */
+    if (! opj_jp2_setup_header_writing(jp2, p_manager)) {
+        return OPJ_FALSE;
+    }
+
+    /* write header */
+    if (! opj_jp2_exec(jp2, jp2->m_procedure_list, stream, p_manager)) {
+        return OPJ_FALSE;
+    }
+
+    return opj_j2k_start_compress(jp2->j2k, stream, p_image, p_manager);
 }
 
-static const opj_jp2_header_handler_t * opj_jp2_find_handler (OPJ_UINT32 p_id)
+static const opj_jp2_header_handler_t * opj_jp2_find_handler(OPJ_UINT32 p_id)
 {
-       OPJ_UINT32 i, l_handler_size = sizeof(jp2_header) / sizeof(opj_jp2_header_handler_t);
-
-       for (i=0;i<l_handler_size;++i) {
-               if (jp2_header[i].id == p_id) {
-                       return &jp2_header[i];
-               }
-       }
-       return NULL;
+    OPJ_UINT32 i, l_handler_size = sizeof(jp2_header) / sizeof(
+                                       opj_jp2_header_handler_t);
+
+    for (i = 0; i < l_handler_size; ++i) {
+        if (jp2_header[i].id == p_id) {
+            return &jp2_header[i];
+        }
+    }
+    return NULL;
 }
 
 /**
  * Finds the image execution function related to the given box id.
  *
- * @param      p_id    the id of the handler to fetch.
+ * @param   p_id    the id of the handler to fetch.
  *
- * @return     the given handler or 00 if it could not be found.
+ * @return  the given handler or 00 if it could not be found.
  */
-static const opj_jp2_header_handler_t * opj_jp2_img_find_handler (OPJ_UINT32 p_id)
+static const opj_jp2_header_handler_t * opj_jp2_img_find_handler(
+    OPJ_UINT32 p_id)
 {
-       OPJ_UINT32 i, l_handler_size = sizeof(jp2_img_header) / sizeof(opj_jp2_header_handler_t);
-       for (i=0;i<l_handler_size;++i)
-       {
-               if (jp2_img_header[i].id == p_id) {
-                       return &jp2_img_header[i];
-               }
-       }
-
-       return NULL;
+    OPJ_UINT32 i, l_handler_size = sizeof(jp2_img_header) / sizeof(
+                                       opj_jp2_header_handler_t);
+    for (i = 0; i < l_handler_size; ++i) {
+        if (jp2_img_header[i].id == p_id) {
+            return &jp2_img_header[i];
+        }
+    }
+
+    return NULL;
 }
 
 /**
  * Reads a jpeg2000 file signature box.
  *
- * @param      p_header_data   the data contained in the signature box.
- * @param      jp2                             the jpeg2000 file codec.
- * @param      p_header_size   the size of the data contained in the signature box.
- * @param      p_manager               the user event manager.
+ * @param   p_header_data   the data contained in the signature box.
+ * @param   jp2             the jpeg2000 file codec.
+ * @param   p_header_size   the size of the data contained in the signature box.
+ * @param   p_manager       the user event manager.
  *
  * @return true if the file signature box is valid.
  */
@@ -2351,578 +2472,605 @@ static OPJ_BOOL opj_jp2_read_jp(opj_jp2_t *jp2,
                                 OPJ_BYTE * p_header_data,
                                 OPJ_UINT32 p_header_size,
                                 opj_event_mgr_t * p_manager
-                                )
+                               )
 
 {
-       OPJ_UINT32 l_magic_number;
-
-       /* preconditions */
-       assert(p_header_data != 00);
-       assert(jp2 != 00);
-       assert(p_manager != 00);
-
-       if (jp2->jp2_state != JP2_STATE_NONE) {
-               opj_event_msg(p_manager, EVT_ERROR, "The signature box must be the first box in the file.\n");
-               return OPJ_FALSE;
-       }
-
-       /* assure length of data is correct (4 -> magic number) */
-       if (p_header_size != 4) {
-               opj_event_msg(p_manager, EVT_ERROR, "Error with JP signature Box size\n");
-               return OPJ_FALSE;
-       }
-
-       /* rearrange data */
-       opj_read_bytes(p_header_data,&l_magic_number,4);
-       if (l_magic_number != 0x0d0a870a ) {
-               opj_event_msg(p_manager, EVT_ERROR, "Error with JP Signature : bad magic number\n");
-               return OPJ_FALSE;
-       }
-
-       jp2->jp2_state |= JP2_STATE_SIGNATURE;
-
-       return OPJ_TRUE;
+    OPJ_UINT32 l_magic_number;
+
+    /* preconditions */
+    assert(p_header_data != 00);
+    assert(jp2 != 00);
+    assert(p_manager != 00);
+
+    if (jp2->jp2_state != JP2_STATE_NONE) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "The signature box must be the first box in the file.\n");
+        return OPJ_FALSE;
+    }
+
+    /* assure length of data is correct (4 -> magic number) */
+    if (p_header_size != 4) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error with JP signature Box size\n");
+        return OPJ_FALSE;
+    }
+
+    /* rearrange data */
+    opj_read_bytes(p_header_data, &l_magic_number, 4);
+    if (l_magic_number != 0x0d0a870a) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Error with JP Signature : bad magic number\n");
+        return OPJ_FALSE;
+    }
+
+    jp2->jp2_state |= JP2_STATE_SIGNATURE;
+
+    return OPJ_TRUE;
 }
 
 /**
  * Reads a a FTYP box - File type box
  *
- * @param      p_header_data   the data contained in the FTYP box.
- * @param      jp2                             the jpeg2000 file codec.
- * @param      p_header_size   the size of the data contained in the FTYP box.
- * @param      p_manager               the user event manager.
+ * @param   p_header_data   the data contained in the FTYP box.
+ * @param   jp2             the jpeg2000 file codec.
+ * @param   p_header_size   the size of the data contained in the FTYP box.
+ * @param   p_manager       the user event manager.
  *
  * @return true if the FTYP box is valid.
  */
-static OPJ_BOOL opj_jp2_read_ftyp(     opj_jp2_t *jp2,
-                                                                       OPJ_BYTE * p_header_data,
-                                                                       OPJ_UINT32 p_header_size,
-                                                                       opj_event_mgr_t * p_manager
-                                    )
+static OPJ_BOOL opj_jp2_read_ftyp(opj_jp2_t *jp2,
+                                  OPJ_BYTE * p_header_data,
+                                  OPJ_UINT32 p_header_size,
+                                  opj_event_mgr_t * p_manager
+                                 )
 {
-       OPJ_UINT32 i, l_remaining_bytes;
-
-       /* preconditions */
-       assert(p_header_data != 00);
-       assert(jp2 != 00);
-       assert(p_manager != 00);
-
-       if (jp2->jp2_state != JP2_STATE_SIGNATURE) {
-               opj_event_msg(p_manager, EVT_ERROR, "The ftyp box must be the second box in the file.\n");
-               return OPJ_FALSE;
-       }
-
-       /* assure length of data is correct */
-       if (p_header_size < 8) {
-               opj_event_msg(p_manager, EVT_ERROR, "Error with FTYP signature Box size\n");
-               return OPJ_FALSE;
-       }
-
-       opj_read_bytes(p_header_data,&jp2->brand,4);            /* BR */
-       p_header_data += 4;
-
-       opj_read_bytes(p_header_data,&jp2->minversion,4);               /* MinV */
-       p_header_data += 4;
-
-       l_remaining_bytes = p_header_size - 8;
-
-       /* the number of remaining bytes should be a multiple of 4 */
-       if ((l_remaining_bytes & 0x3) != 0) {
-               opj_event_msg(p_manager, EVT_ERROR, "Error with FTYP signature Box size\n");
-               return OPJ_FALSE;
-       }
-
-       /* div by 4 */
-       jp2->numcl = l_remaining_bytes >> 2;
-       if (jp2->numcl) {
-               jp2->cl = (OPJ_UINT32 *) opj_calloc(jp2->numcl, sizeof(OPJ_UINT32));
-               if (jp2->cl == 00) {
-                       opj_event_msg(p_manager, EVT_ERROR, "Not enough memory with FTYP Box\n");
-                       return OPJ_FALSE;
-               }
-       }
-
-       for (i = 0; i < jp2->numcl; ++i)
-       {
-               opj_read_bytes(p_header_data,&jp2->cl[i],4);            /* CLi */
-               p_header_data += 4;
-       }
-
-       jp2->jp2_state |= JP2_STATE_FILE_TYPE;
-
-       return OPJ_TRUE;
+    OPJ_UINT32 i, l_remaining_bytes;
+
+    /* preconditions */
+    assert(p_header_data != 00);
+    assert(jp2 != 00);
+    assert(p_manager != 00);
+
+    if (jp2->jp2_state != JP2_STATE_SIGNATURE) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "The ftyp box must be the second box in the file.\n");
+        return OPJ_FALSE;
+    }
+
+    /* assure length of data is correct */
+    if (p_header_size < 8) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error with FTYP signature Box size\n");
+        return OPJ_FALSE;
+    }
+
+    opj_read_bytes(p_header_data, &jp2->brand, 4);      /* BR */
+    p_header_data += 4;
+
+    opj_read_bytes(p_header_data, &jp2->minversion, 4);     /* MinV */
+    p_header_data += 4;
+
+    l_remaining_bytes = p_header_size - 8;
+
+    /* the number of remaining bytes should be a multiple of 4 */
+    if ((l_remaining_bytes & 0x3) != 0) {
+        opj_event_msg(p_manager, EVT_ERROR, "Error with FTYP signature Box size\n");
+        return OPJ_FALSE;
+    }
+
+    /* div by 4 */
+    jp2->numcl = l_remaining_bytes >> 2;
+    if (jp2->numcl) {
+        jp2->cl = (OPJ_UINT32 *) opj_calloc(jp2->numcl, sizeof(OPJ_UINT32));
+        if (jp2->cl == 00) {
+            opj_event_msg(p_manager, EVT_ERROR, "Not enough memory with FTYP Box\n");
+            return OPJ_FALSE;
+        }
+    }
+
+    for (i = 0; i < jp2->numcl; ++i) {
+        opj_read_bytes(p_header_data, &jp2->cl[i], 4);      /* CLi */
+        p_header_data += 4;
+    }
+
+    jp2->jp2_state |= JP2_STATE_FILE_TYPE;
+
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_jp2_skip_jp2c(     opj_jp2_t *jp2,
-                                               opj_stream_private_t *stream,
-                                               opj_event_mgr_t * p_manager )
+static OPJ_BOOL opj_jp2_skip_jp2c(opj_jp2_t *jp2,
+                                  opj_stream_private_t *stream,
+                                  opj_event_mgr_t * p_manager)
 {
-       /* preconditions */
-       assert(jp2 != 00);
-       assert(stream != 00);
-       assert(p_manager != 00);
+    /* preconditions */
+    assert(jp2 != 00);
+    assert(stream != 00);
+    assert(p_manager != 00);
 
-       jp2->j2k_codestream_offset = opj_stream_tell(stream);
+    jp2->j2k_codestream_offset = opj_stream_tell(stream);
 
-       if (opj_stream_skip(stream,8,p_manager) != 8) {
-               return OPJ_FALSE;
-       }
+    if (opj_stream_skip(stream, 8, p_manager) != 8) {
+        return OPJ_FALSE;
+    }
 
-       return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_jpip_skip_iptr(    opj_jp2_t *jp2,
-  opj_stream_private_t *stream,
-  opj_event_mgr_t * p_manager )
+static OPJ_BOOL opj_jpip_skip_iptr(opj_jp2_t *jp2,
+                                   opj_stream_private_t *stream,
+                                   opj_event_mgr_t * p_manager)
 {
-  /* preconditions */
-  assert(jp2 != 00);
-  assert(stream != 00);
-  assert(p_manager != 00);
+    /* preconditions */
+    assert(jp2 != 00);
+    assert(stream != 00);
+    assert(p_manager != 00);
 
-  jp2->jpip_iptr_offset = opj_stream_tell(stream);
+    jp2->jpip_iptr_offset = opj_stream_tell(stream);
 
-  if (opj_stream_skip(stream,24,p_manager) != 24) {
-    return OPJ_FALSE;
-  }
+    if (opj_stream_skip(stream, 24, p_manager) != 24) {
+        return OPJ_FALSE;
+    }
 
-  return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 /**
  * Reads the Jpeg2000 file Header box - JP2 Header box (warning, this is a super box).
  *
- * @param      p_header_data   the data contained in the file header box.
- * @param      jp2                             the jpeg2000 file codec.
- * @param      p_header_size   the size of the data contained in the file header box.
- * @param      p_manager               the user event manager.
+ * @param   p_header_data   the data contained in the file header box.
+ * @param   jp2             the jpeg2000 file codec.
+ * @param   p_header_size   the size of the data contained in the file header box.
+ * @param   p_manager       the user event manager.
  *
  * @return true if the JP2 Header box was successfully recognized.
 */
-static OPJ_BOOL opj_jp2_read_jp2h(  opj_jp2_t *jp2,
-                                    OPJ_BYTE *p_header_data,
-                                    OPJ_UINT32 p_header_size,
-                                    opj_event_mgr_t * p_manager
-                                    )
+static OPJ_BOOL opj_jp2_read_jp2h(opj_jp2_t *jp2,
+                                  OPJ_BYTE *p_header_data,
+                                  OPJ_UINT32 p_header_size,
+                                  opj_event_mgr_t * p_manager
+                                 )
 {
-       OPJ_UINT32 l_box_size=0, l_current_data_size = 0;
-       opj_jp2_box_t box;
-       const opj_jp2_header_handler_t * l_current_handler;
-       OPJ_BOOL l_has_ihdr = 0;
-
-       /* preconditions */
-       assert(p_header_data != 00);
-       assert(jp2 != 00);
-       assert(p_manager != 00);
-
-       /* make sure the box is well placed */
-       if ((jp2->jp2_state & JP2_STATE_FILE_TYPE) != JP2_STATE_FILE_TYPE ) {
-               opj_event_msg(p_manager, EVT_ERROR, "The  box must be the first box in the file.\n");
-               return OPJ_FALSE;
-       }
-
-       jp2->jp2_img_state = JP2_IMG_STATE_NONE;
-
-       /* iterate while remaining data */
-       while (p_header_size > 0) {
-
-               if (! opj_jp2_read_boxhdr_char(&box,p_header_data,&l_box_size,p_header_size, p_manager)) {
-                       opj_event_msg(p_manager, EVT_ERROR, "Stream error while reading JP2 Header box\n");
-                       return OPJ_FALSE;
-               }
-
-               if (box.length > p_header_size) {
-                       opj_event_msg(p_manager, EVT_ERROR, "Stream error while reading JP2 Header box: box length is inconsistent.\n");
-                       return OPJ_FALSE;
-               }
-
-               l_current_handler = opj_jp2_img_find_handler(box.type);
-               l_current_data_size = box.length - l_box_size;
-               p_header_data += l_box_size;
-
-               if (l_current_handler != 00) {
-                       if (! l_current_handler->handler(jp2,p_header_data,l_current_data_size,p_manager)) {
-                               return OPJ_FALSE;
-                       }
-               }
-               else {
-                       jp2->jp2_img_state |= JP2_IMG_STATE_UNKNOWN;
-               }
-
-               if (box.type == JP2_IHDR) {
-                       l_has_ihdr = 1;
-               }
-
-               p_header_data += l_current_data_size;
-               p_header_size -= box.length;
-       }
-
-       if (l_has_ihdr == 0) {
-               opj_event_msg(p_manager, EVT_ERROR, "Stream error while reading JP2 Header box: no 'ihdr' box.\n");
-               return OPJ_FALSE;
-       }
-
-       jp2->jp2_state |= JP2_STATE_HEADER;
-
-       return OPJ_TRUE;
+    OPJ_UINT32 l_box_size = 0, l_current_data_size = 0;
+    opj_jp2_box_t box;
+    const opj_jp2_header_handler_t * l_current_handler;
+    OPJ_BOOL l_has_ihdr = 0;
+
+    /* preconditions */
+    assert(p_header_data != 00);
+    assert(jp2 != 00);
+    assert(p_manager != 00);
+
+    /* make sure the box is well placed */
+    if ((jp2->jp2_state & JP2_STATE_FILE_TYPE) != JP2_STATE_FILE_TYPE) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "The  box must be the first box in the file.\n");
+        return OPJ_FALSE;
+    }
+
+    jp2->jp2_img_state = JP2_IMG_STATE_NONE;
+
+    /* iterate while remaining data */
+    while (p_header_size > 0) {
+
+        if (! opj_jp2_read_boxhdr_char(&box, p_header_data, &l_box_size, p_header_size,
+                                       p_manager)) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Stream error while reading JP2 Header box\n");
+            return OPJ_FALSE;
+        }
+
+        if (box.length > p_header_size) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Stream error while reading JP2 Header box: box length is inconsistent.\n");
+            return OPJ_FALSE;
+        }
+
+        l_current_handler = opj_jp2_img_find_handler(box.type);
+        l_current_data_size = box.length - l_box_size;
+        p_header_data += l_box_size;
+
+        if (l_current_handler != 00) {
+            if (! l_current_handler->handler(jp2, p_header_data, l_current_data_size,
+                                             p_manager)) {
+                return OPJ_FALSE;
+            }
+        } else {
+            jp2->jp2_img_state |= JP2_IMG_STATE_UNKNOWN;
+        }
+
+        if (box.type == JP2_IHDR) {
+            l_has_ihdr = 1;
+        }
+
+        p_header_data += l_current_data_size;
+        p_header_size -= box.length;
+    }
+
+    if (l_has_ihdr == 0) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Stream error while reading JP2 Header box: no 'ihdr' box.\n");
+        return OPJ_FALSE;
+    }
+
+    jp2->jp2_state |= JP2_STATE_HEADER;
+
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_jp2_read_boxhdr_char(   opj_jp2_box_t *box,
-                                     OPJ_BYTE * p_data,
-                                     OPJ_UINT32 * p_number_bytes_read,
-                                     OPJ_UINT32 p_box_max_size,
-                                     opj_event_mgr_t * p_manager
-                                     )
+static OPJ_BOOL opj_jp2_read_boxhdr_char(opj_jp2_box_t *box,
+        OPJ_BYTE * p_data,
+        OPJ_UINT32 * p_number_bytes_read,
+        OPJ_UINT32 p_box_max_size,
+        opj_event_mgr_t * p_manager
+                                        )
 {
-       OPJ_UINT32 l_value;
-
-       /* preconditions */
-       assert(p_data != 00);
-       assert(box != 00);
-       assert(p_number_bytes_read != 00);
-       assert(p_manager != 00);
-
-       if (p_box_max_size < 8) {
-               opj_event_msg(p_manager, EVT_ERROR, "Cannot handle box of less than 8 bytes\n");
-               return OPJ_FALSE;
-       }
-
-       /* process read data */
-       opj_read_bytes(p_data, &l_value, 4);
-       p_data += 4;
-       box->length = (OPJ_UINT32)(l_value);
-
-       opj_read_bytes(p_data, &l_value, 4);
-       p_data += 4;
-       box->type = (OPJ_UINT32)(l_value);
-
-       *p_number_bytes_read = 8;
-
-       /* do we have a "special very large box ?" */
-       /* read then the XLBox */
-       if (box->length == 1) {
-               OPJ_UINT32 l_xl_part_size;
-
-               if (p_box_max_size < 16) {
-                       opj_event_msg(p_manager, EVT_ERROR, "Cannot handle XL box of less than 16 bytes\n");
-                       return OPJ_FALSE;
-               }
-
-               opj_read_bytes(p_data,&l_xl_part_size, 4);
-               p_data += 4;
-               *p_number_bytes_read += 4;
-
-               if (l_xl_part_size != 0) {
-                       opj_event_msg(p_manager, EVT_ERROR, "Cannot handle box sizes higher than 2^32\n");
-                       return OPJ_FALSE;
-               }
-
-               opj_read_bytes(p_data, &l_value, 4);
-               *p_number_bytes_read += 4;
-               box->length = (OPJ_UINT32)(l_value);
-
-               if (box->length == 0) {
-                       opj_event_msg(p_manager, EVT_ERROR, "Cannot handle box of undefined sizes\n");
-                       return OPJ_FALSE;
-               }
-       }
-       else if (box->length == 0) {
-               opj_event_msg(p_manager, EVT_ERROR, "Cannot handle box of undefined sizes\n");
-               return OPJ_FALSE;
-       }
-       if (box->length < *p_number_bytes_read) {
-               opj_event_msg(p_manager, EVT_ERROR, "Box length is inconsistent.\n");
-               return OPJ_FALSE;
-       }
-       return OPJ_TRUE;
+    OPJ_UINT32 l_value;
+
+    /* preconditions */
+    assert(p_data != 00);
+    assert(box != 00);
+    assert(p_number_bytes_read != 00);
+    assert(p_manager != 00);
+
+    if (p_box_max_size < 8) {
+        opj_event_msg(p_manager, EVT_ERROR, "Cannot handle box of less than 8 bytes\n");
+        return OPJ_FALSE;
+    }
+
+    /* process read data */
+    opj_read_bytes(p_data, &l_value, 4);
+    p_data += 4;
+    box->length = (OPJ_UINT32)(l_value);
+
+    opj_read_bytes(p_data, &l_value, 4);
+    p_data += 4;
+    box->type = (OPJ_UINT32)(l_value);
+
+    *p_number_bytes_read = 8;
+
+    /* do we have a "special very large box ?" */
+    /* read then the XLBox */
+    if (box->length == 1) {
+        OPJ_UINT32 l_xl_part_size;
+
+        if (p_box_max_size < 16) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Cannot handle XL box of less than 16 bytes\n");
+            return OPJ_FALSE;
+        }
+
+        opj_read_bytes(p_data, &l_xl_part_size, 4);
+        p_data += 4;
+        *p_number_bytes_read += 4;
+
+        if (l_xl_part_size != 0) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Cannot handle box sizes higher than 2^32\n");
+            return OPJ_FALSE;
+        }
+
+        opj_read_bytes(p_data, &l_value, 4);
+        *p_number_bytes_read += 4;
+        box->length = (OPJ_UINT32)(l_value);
+
+        if (box->length == 0) {
+            opj_event_msg(p_manager, EVT_ERROR, "Cannot handle box of undefined sizes\n");
+            return OPJ_FALSE;
+        }
+    } else if (box->length == 0) {
+        opj_event_msg(p_manager, EVT_ERROR, "Cannot handle box of undefined sizes\n");
+        return OPJ_FALSE;
+    }
+    if (box->length < *p_number_bytes_read) {
+        opj_event_msg(p_manager, EVT_ERROR, "Box length is inconsistent.\n");
+        return OPJ_FALSE;
+    }
+    return OPJ_TRUE;
 }
 
-OPJ_BOOL opj_jp2_read_header(  opj_stream_private_t *p_stream,
-                                opj_jp2_t *jp2,
-                                opj_image_t ** p_image,
-                                opj_event_mgr_t * p_manager
-                                )
+OPJ_BOOL opj_jp2_read_header(opj_stream_private_t *p_stream,
+                             opj_jp2_t *jp2,
+                             opj_image_t ** p_image,
+                             opj_event_mgr_t * p_manager
+                            )
 {
-       /* preconditions */
-       assert(jp2 != 00);
-       assert(p_stream != 00);
-       assert(p_manager != 00);
-
-       /* customization of the validation */
-       if (! opj_jp2_setup_decoding_validation (jp2, p_manager)) {
-               return OPJ_FALSE;
-       }
-
-       /* customization of the encoding */
-       if (! opj_jp2_setup_header_reading(jp2, p_manager)) {
-               return OPJ_FALSE;
-       }
-
-       /* validation of the parameters codec */
-       if (! opj_jp2_exec(jp2,jp2->m_validation_list,p_stream,p_manager)) {
-               return OPJ_FALSE;
-       }
-
-       /* read header */
-       if (! opj_jp2_exec (jp2,jp2->m_procedure_list,p_stream,p_manager)) {
-               return OPJ_FALSE;
-       }
-
-       return opj_j2k_read_header(     p_stream,
-                                                       jp2->j2k,
-                                                       p_image,
-                                                       p_manager);
+    /* preconditions */
+    assert(jp2 != 00);
+    assert(p_stream != 00);
+    assert(p_manager != 00);
+
+    /* customization of the validation */
+    if (! opj_jp2_setup_decoding_validation(jp2, p_manager)) {
+        return OPJ_FALSE;
+    }
+
+    /* customization of the encoding */
+    if (! opj_jp2_setup_header_reading(jp2, p_manager)) {
+        return OPJ_FALSE;
+    }
+
+    /* validation of the parameters codec */
+    if (! opj_jp2_exec(jp2, jp2->m_validation_list, p_stream, p_manager)) {
+        return OPJ_FALSE;
+    }
+
+    /* read header */
+    if (! opj_jp2_exec(jp2, jp2->m_procedure_list, p_stream, p_manager)) {
+        return OPJ_FALSE;
+    }
+
+    return opj_j2k_read_header(p_stream,
+                               jp2->j2k,
+                               p_image,
+                               p_manager);
 }
 
-static OPJ_BOOL opj_jp2_setup_encoding_validation (opj_jp2_t *jp2, opj_event_mgr_t * p_manager)
+static OPJ_BOOL opj_jp2_setup_encoding_validation(opj_jp2_t *jp2,
+        opj_event_mgr_t * p_manager)
 {
-       /* preconditions */
-       assert(jp2 != 00);
-       assert(p_manager != 00);
-
-       if (! opj_procedure_list_add_procedure(jp2->m_validation_list, (opj_procedure)opj_jp2_default_validation, p_manager)) {
-               return OPJ_FALSE;
-       }
-       /* DEVELOPER CORNER, add your custom validation procedure */
-       
-       return OPJ_TRUE;
+    /* preconditions */
+    assert(jp2 != 00);
+    assert(p_manager != 00);
+
+    if (! opj_procedure_list_add_procedure(jp2->m_validation_list,
+                                           (opj_procedure)opj_jp2_default_validation, p_manager)) {
+        return OPJ_FALSE;
+    }
+    /* DEVELOPER CORNER, add your custom validation procedure */
+
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_jp2_setup_decoding_validation (opj_jp2_t *jp2, opj_event_mgr_t * p_manager)
+static OPJ_BOOL opj_jp2_setup_decoding_validation(opj_jp2_t *jp2,
+        opj_event_mgr_t * p_manager)
 {
-       /* preconditions */
-       assert(jp2 != 00);
-       assert(p_manager != 00);
-       
-       /* DEVELOPER CORNER, add your custom validation procedure */
-       
-       return OPJ_TRUE;
+    /* preconditions */
+    assert(jp2 != 00);
+    assert(p_manager != 00);
+
+    /* DEVELOPER CORNER, add your custom validation procedure */
+
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_jp2_setup_header_writing (opj_jp2_t *jp2, opj_event_mgr_t * p_manager)
+static OPJ_BOOL opj_jp2_setup_header_writing(opj_jp2_t *jp2,
+        opj_event_mgr_t * p_manager)
 {
-       /* preconditions */
-       assert(jp2 != 00);
-       assert(p_manager != 00);
-
-       if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_procedure)opj_jp2_write_jp, p_manager)) {
-               return OPJ_FALSE;
-       }
-       if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_procedure)opj_jp2_write_ftyp, p_manager)) {
-               return OPJ_FALSE;
-       }
-       if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_procedure)opj_jp2_write_jp2h, p_manager)) {
-               return OPJ_FALSE;
-       }
-       if( jp2->jpip_on ) {
-               if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_procedure)opj_jpip_skip_iptr, p_manager)) {
-                       return OPJ_FALSE;
-               }
-       }
-       if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_procedure)opj_jp2_skip_jp2c,p_manager)) {
-               return OPJ_FALSE;
-       }
-
-       /* DEVELOPER CORNER, insert your custom procedures */
-
-       return OPJ_TRUE;
+    /* preconditions */
+    assert(jp2 != 00);
+    assert(p_manager != 00);
+
+    if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,
+                                           (opj_procedure)opj_jp2_write_jp, p_manager)) {
+        return OPJ_FALSE;
+    }
+    if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,
+                                           (opj_procedure)opj_jp2_write_ftyp, p_manager)) {
+        return OPJ_FALSE;
+    }
+    if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,
+                                           (opj_procedure)opj_jp2_write_jp2h, p_manager)) {
+        return OPJ_FALSE;
+    }
+    if (jp2->jpip_on) {
+        if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,
+                                               (opj_procedure)opj_jpip_skip_iptr, p_manager)) {
+            return OPJ_FALSE;
+        }
+    }
+    if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,
+                                           (opj_procedure)opj_jp2_skip_jp2c, p_manager)) {
+        return OPJ_FALSE;
+    }
+
+    /* DEVELOPER CORNER, insert your custom procedures */
+
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_jp2_setup_header_reading (opj_jp2_t *jp2, opj_event_mgr_t * p_manager)
+static OPJ_BOOL opj_jp2_setup_header_reading(opj_jp2_t *jp2,
+        opj_event_mgr_t * p_manager)
 {
-       /* preconditions */
-       assert(jp2 != 00);
-       assert(p_manager != 00);
-
-       if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,(opj_procedure)opj_jp2_read_header_procedure, p_manager)) {
-               return OPJ_FALSE;
-       }
-       
-       /* DEVELOPER CORNER, add your custom procedures */
-       
-       return OPJ_TRUE;
+    /* preconditions */
+    assert(jp2 != 00);
+    assert(p_manager != 00);
+
+    if (! opj_procedure_list_add_procedure(jp2->m_procedure_list,
+                                           (opj_procedure)opj_jp2_read_header_procedure, p_manager)) {
+        return OPJ_FALSE;
+    }
+
+    /* DEVELOPER CORNER, add your custom procedures */
+
+    return OPJ_TRUE;
 }
 
-OPJ_BOOL opj_jp2_read_tile_header ( opj_jp2_t * p_jp2,
-                                    OPJ_UINT32 * p_tile_index,
-                                    OPJ_UINT32 * p_data_size,
-                                    OPJ_INT32 * p_tile_x0,
-                                    OPJ_INT32 * p_tile_y0,
-                                    OPJ_INT32 * p_tile_x1,
-                                    OPJ_INT32 * p_tile_y1,
-                                    OPJ_UINT32 * p_nb_comps,
-                                    OPJ_BOOL * p_go_on,
-                                    opj_stream_private_t *p_stream,
-                                    opj_event_mgr_t * p_manager
-                                    )
+OPJ_BOOL opj_jp2_read_tile_header(opj_jp2_t * p_jp2,
+                                  OPJ_UINT32 * p_tile_index,
+                                  OPJ_UINT32 * p_data_size,
+                                  OPJ_INT32 * p_tile_x0,
+                                  OPJ_INT32 * p_tile_y0,
+                                  OPJ_INT32 * p_tile_x1,
+                                  OPJ_INT32 * p_tile_y1,
+                                  OPJ_UINT32 * p_nb_comps,
+                                  OPJ_BOOL * p_go_on,
+                                  opj_stream_private_t *p_stream,
+                                  opj_event_mgr_t * p_manager
+                                 )
 {
-       return opj_j2k_read_tile_header(p_jp2->j2k,
-                                                               p_tile_index,
-                                                               p_data_size,
-                                                               p_tile_x0, p_tile_y0,
-                                                               p_tile_x1, p_tile_y1,
-                                                               p_nb_comps,
-                                                               p_go_on,
-                                                               p_stream,
-                                                               p_manager);
+    return opj_j2k_read_tile_header(p_jp2->j2k,
+                                    p_tile_index,
+                                    p_data_size,
+                                    p_tile_x0, p_tile_y0,
+                                    p_tile_x1, p_tile_y1,
+                                    p_nb_comps,
+                                    p_go_on,
+                                    p_stream,
+                                    p_manager);
 }
 
-OPJ_BOOL opj_jp2_write_tile (  opj_jp2_t *p_jp2,
-                                                           OPJ_UINT32 p_tile_index,
-                                                           OPJ_BYTE * p_data,
-                                                           OPJ_UINT32 p_data_size,
-                                                           opj_stream_private_t *p_stream,
-                                                           opj_event_mgr_t * p_manager
-                                )
+OPJ_BOOL opj_jp2_write_tile(opj_jp2_t *p_jp2,
+                            OPJ_UINT32 p_tile_index,
+                            OPJ_BYTE * p_data,
+                            OPJ_UINT32 p_data_size,
+                            opj_stream_private_t *p_stream,
+                            opj_event_mgr_t * p_manager
+                           )
 
 {
-       return opj_j2k_write_tile (p_jp2->j2k,p_tile_index,p_data,p_data_size,p_stream,p_manager);
+    return opj_j2k_write_tile(p_jp2->j2k, p_tile_index, p_data, p_data_size,
+                              p_stream, p_manager);
 }
 
-OPJ_BOOL opj_jp2_decode_tile (  opj_jp2_t * p_jp2,
-                                OPJ_UINT32 p_tile_index,
-                                OPJ_BYTE * p_data,
-                                OPJ_UINT32 p_data_size,
-                                opj_stream_private_t *p_stream,
-                                opj_event_mgr_t * p_manager
-                                )
+OPJ_BOOL opj_jp2_decode_tile(opj_jp2_t * p_jp2,
+                             OPJ_UINT32 p_tile_index,
+                             OPJ_BYTE * p_data,
+                             OPJ_UINT32 p_data_size,
+                             opj_stream_private_t *p_stream,
+                             opj_event_mgr_t * p_manager
+                            )
 {
-       return opj_j2k_decode_tile (p_jp2->j2k,p_tile_index,p_data,p_data_size,p_stream,p_manager);
+    return opj_j2k_decode_tile(p_jp2->j2k, p_tile_index, p_data, p_data_size,
+                               p_stream, p_manager);
 }
 
 void opj_jp2_destroy(opj_jp2_t *jp2)
 {
-       if (jp2) {
-               /* destroy the J2K codec */
-               opj_j2k_destroy(jp2->j2k);
-               jp2->j2k = 00;
-
-               if (jp2->comps) {
-                       opj_free(jp2->comps);
-                       jp2->comps = 00;
-               }
-
-               if (jp2->cl) {
-                       opj_free(jp2->cl);
-                       jp2->cl = 00;
-               }
-
-               if (jp2->color.icc_profile_buf) {
-                       opj_free(jp2->color.icc_profile_buf);
-                       jp2->color.icc_profile_buf = 00;
-               }
-
-               if (jp2->color.jp2_cdef) {
-                       if (jp2->color.jp2_cdef->info) {
-                               opj_free(jp2->color.jp2_cdef->info);
-                               jp2->color.jp2_cdef->info = NULL;
-                       }
-
-                       opj_free(jp2->color.jp2_cdef);
-                       jp2->color.jp2_cdef = 00;
-               }
-
-               if (jp2->color.jp2_pclr) {
-                       if (jp2->color.jp2_pclr->cmap) {
-                               opj_free(jp2->color.jp2_pclr->cmap);
-                               jp2->color.jp2_pclr->cmap = NULL;
-                       }
-                       if (jp2->color.jp2_pclr->channel_sign) {
-                               opj_free(jp2->color.jp2_pclr->channel_sign);
-                               jp2->color.jp2_pclr->channel_sign = NULL;
-                       }
-                       if (jp2->color.jp2_pclr->channel_size) {
-                               opj_free(jp2->color.jp2_pclr->channel_size);
-                               jp2->color.jp2_pclr->channel_size = NULL;
-                       }
-                       if (jp2->color.jp2_pclr->entries) {
-                               opj_free(jp2->color.jp2_pclr->entries);
-                               jp2->color.jp2_pclr->entries = NULL;
-                       }
-
-                       opj_free(jp2->color.jp2_pclr);
-                       jp2->color.jp2_pclr = 00;
-               }
-
-               if (jp2->m_validation_list) {
-                       opj_procedure_list_destroy(jp2->m_validation_list);
-                       jp2->m_validation_list = 00;
-               }
-
-               if (jp2->m_procedure_list) {
-                       opj_procedure_list_destroy(jp2->m_procedure_list);
-                       jp2->m_procedure_list = 00;
-               }
-
-               opj_free(jp2);
-       }
+    if (jp2) {
+        /* destroy the J2K codec */
+        opj_j2k_destroy(jp2->j2k);
+        jp2->j2k = 00;
+
+        if (jp2->comps) {
+            opj_free(jp2->comps);
+            jp2->comps = 00;
+        }
+
+        if (jp2->cl) {
+            opj_free(jp2->cl);
+            jp2->cl = 00;
+        }
+
+        if (jp2->color.icc_profile_buf) {
+            opj_free(jp2->color.icc_profile_buf);
+            jp2->color.icc_profile_buf = 00;
+        }
+
+        if (jp2->color.jp2_cdef) {
+            if (jp2->color.jp2_cdef->info) {
+                opj_free(jp2->color.jp2_cdef->info);
+                jp2->color.jp2_cdef->info = NULL;
+            }
+
+            opj_free(jp2->color.jp2_cdef);
+            jp2->color.jp2_cdef = 00;
+        }
+
+        if (jp2->color.jp2_pclr) {
+            if (jp2->color.jp2_pclr->cmap) {
+                opj_free(jp2->color.jp2_pclr->cmap);
+                jp2->color.jp2_pclr->cmap = NULL;
+            }
+            if (jp2->color.jp2_pclr->channel_sign) {
+                opj_free(jp2->color.jp2_pclr->channel_sign);
+                jp2->color.jp2_pclr->channel_sign = NULL;
+            }
+            if (jp2->color.jp2_pclr->channel_size) {
+                opj_free(jp2->color.jp2_pclr->channel_size);
+                jp2->color.jp2_pclr->channel_size = NULL;
+            }
+            if (jp2->color.jp2_pclr->entries) {
+                opj_free(jp2->color.jp2_pclr->entries);
+                jp2->color.jp2_pclr->entries = NULL;
+            }
+
+            opj_free(jp2->color.jp2_pclr);
+            jp2->color.jp2_pclr = 00;
+        }
+
+        if (jp2->m_validation_list) {
+            opj_procedure_list_destroy(jp2->m_validation_list);
+            jp2->m_validation_list = 00;
+        }
+
+        if (jp2->m_procedure_list) {
+            opj_procedure_list_destroy(jp2->m_procedure_list);
+            jp2->m_procedure_list = 00;
+        }
+
+        opj_free(jp2);
+    }
 }
 
-OPJ_BOOL opj_jp2_set_decode_area(      opj_jp2_t *p_jp2,
-                                                                   opj_image_t* p_image,
-                                                                   OPJ_INT32 p_start_x, OPJ_INT32 p_start_y,
-                                                                   OPJ_INT32 p_end_x, OPJ_INT32 p_end_y,
-                                                                   opj_event_mgr_t * p_manager
-                                    )
+OPJ_BOOL opj_jp2_set_decode_area(opj_jp2_t *p_jp2,
+                                 opj_image_t* p_image,
+                                 OPJ_INT32 p_start_x, OPJ_INT32 p_start_y,
+                                 OPJ_INT32 p_end_x, OPJ_INT32 p_end_y,
+                                 opj_event_mgr_t * p_manager
+                                )
 {
-       return opj_j2k_set_decode_area(p_jp2->j2k, p_image, p_start_x, p_start_y, p_end_x, p_end_y, p_manager);
+    return opj_j2k_set_decode_area(p_jp2->j2k, p_image, p_start_x, p_start_y,
+                                   p_end_x, p_end_y, p_manager);
 }
 
-OPJ_BOOL opj_jp2_get_tile(     opj_jp2_t *p_jp2,
-                            opj_stream_private_t *p_stream,
-                            opj_image_t* p_image,
-                            opj_event_mgr_t * p_manager,
-                            OPJ_UINT32 tile_index
-                            )
+OPJ_BOOL opj_jp2_get_tile(opj_jp2_t *p_jp2,
+                          opj_stream_private_t *p_stream,
+                          opj_image_t* p_image,
+                          opj_event_mgr_t * p_manager,
+                          OPJ_UINT32 tile_index
+                         )
 {
-       if (!p_image)
-               return OPJ_FALSE;
-
-       opj_event_msg(p_manager, EVT_WARNING, "JP2 box which are after the codestream will not be read by this function.\n");
-
-       if (! opj_j2k_get_tile(p_jp2->j2k, p_stream, p_image, p_manager, tile_index) ){
-               opj_event_msg(p_manager, EVT_ERROR, "Failed to decode the codestream in the JP2 file\n");
-               return OPJ_FALSE;
-       }
-
-       if (!opj_jp2_check_color(p_image, &(p_jp2->color), p_manager)) {
-               return OPJ_FALSE;
-       }
-
-       /* Set Image Color Space */
-       if (p_jp2->enumcs == 16)
-               p_image->color_space = OPJ_CLRSPC_SRGB;
-       else if (p_jp2->enumcs == 17)
-               p_image->color_space = OPJ_CLRSPC_GRAY;
-       else if (p_jp2->enumcs == 18)
-               p_image->color_space = OPJ_CLRSPC_SYCC;
-       else if (p_jp2->enumcs == 24)
-               p_image->color_space = OPJ_CLRSPC_EYCC;
-       else if (p_jp2->enumcs == 12)
-               p_image->color_space = OPJ_CLRSPC_CMYK;
-       else
-               p_image->color_space = OPJ_CLRSPC_UNKNOWN;
-
-       if(p_jp2->color.jp2_pclr) {
-               /* Part 1, I.5.3.4: Either both or none : */
-               if( !p_jp2->color.jp2_pclr->cmap)
-                       opj_jp2_free_pclr(&(p_jp2->color));
-               else
-                       opj_jp2_apply_pclr(p_image, &(p_jp2->color));
-       }
-       
-       /* Apply the color space if needed */
-       if(p_jp2->color.jp2_cdef) {
-               opj_jp2_apply_cdef(p_image, &(p_jp2->color), p_manager);
-       }
-
-       if(p_jp2->color.icc_profile_buf) {
-               p_image->icc_profile_buf = p_jp2->color.icc_profile_buf;
-               p_image->icc_profile_len = p_jp2->color.icc_profile_len;
-               p_jp2->color.icc_profile_buf = NULL;
-       }
-
-       return OPJ_TRUE;
+    if (!p_image) {
+        return OPJ_FALSE;
+    }
+
+    opj_event_msg(p_manager, EVT_WARNING,
+                  "JP2 box which are after the codestream will not be read by this function.\n");
+
+    if (! opj_j2k_get_tile(p_jp2->j2k, p_stream, p_image, p_manager, tile_index)) {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Failed to decode the codestream in the JP2 file\n");
+        return OPJ_FALSE;
+    }
+
+    if (!opj_jp2_check_color(p_image, &(p_jp2->color), p_manager)) {
+        return OPJ_FALSE;
+    }
+
+    /* Set Image Color Space */
+    if (p_jp2->enumcs == 16) {
+        p_image->color_space = OPJ_CLRSPC_SRGB;
+    } else if (p_jp2->enumcs == 17) {
+        p_image->color_space = OPJ_CLRSPC_GRAY;
+    } else if (p_jp2->enumcs == 18) {
+        p_image->color_space = OPJ_CLRSPC_SYCC;
+    } else if (p_jp2->enumcs == 24) {
+        p_image->color_space = OPJ_CLRSPC_EYCC;
+    } else if (p_jp2->enumcs == 12) {
+        p_image->color_space = OPJ_CLRSPC_CMYK;
+    } else {
+        p_image->color_space = OPJ_CLRSPC_UNKNOWN;
+    }
+
+    if (p_jp2->color.jp2_pclr) {
+        /* Part 1, I.5.3.4: Either both or none : */
+        if (!p_jp2->color.jp2_pclr->cmap) {
+            opj_jp2_free_pclr(&(p_jp2->color));
+        } else {
+            opj_jp2_apply_pclr(p_image, &(p_jp2->color));
+        }
+    }
+
+    /* Apply the color space if needed */
+    if (p_jp2->color.jp2_cdef) {
+        opj_jp2_apply_cdef(p_image, &(p_jp2->color), p_manager);
+    }
+
+    if (p_jp2->color.icc_profile_buf) {
+        p_image->icc_profile_buf = p_jp2->color.icc_profile_buf;
+        p_image->icc_profile_len = p_jp2->color.icc_profile_len;
+        p_jp2->color.icc_profile_buf = NULL;
+    }
+
+    return OPJ_TRUE;
 }
 
 /* ----------------------------------------------------------------------- */
@@ -2931,251 +3079,255 @@ OPJ_BOOL opj_jp2_get_tile(    opj_jp2_t *p_jp2,
 
 opj_jp2_t* opj_jp2_create(OPJ_BOOL p_is_decoder)
 {
-       opj_jp2_t *jp2 = (opj_jp2_t*)opj_calloc(1,sizeof(opj_jp2_t));
-       if (jp2) {
-
-               /* create the J2K codec */
-               if (! p_is_decoder) {
-                       jp2->j2k = opj_j2k_create_compress();
-               }
-               else {
-                       jp2->j2k = opj_j2k_create_decompress();
-               }
-
-               if (jp2->j2k == 00) {
-                       opj_jp2_destroy(jp2);
-                       return 00;
-               }
-
-               /* Color structure */
-               jp2->color.icc_profile_buf = NULL;
-               jp2->color.icc_profile_len = 0;
-               jp2->color.jp2_cdef = NULL;
-               jp2->color.jp2_pclr = NULL;
-               jp2->color.jp2_has_colr = 0;
-
-               /* validation list creation */
-               jp2->m_validation_list = opj_procedure_list_create();
-               if (! jp2->m_validation_list) {
-                       opj_jp2_destroy(jp2);
-                       return 00;
-               }
-
-               /* execution list creation */
-               jp2->m_procedure_list = opj_procedure_list_create();
-               if (! jp2->m_procedure_list) {
-                       opj_jp2_destroy(jp2);
-                       return 00;
-               }
-       }
-
-       return jp2;
+    opj_jp2_t *jp2 = (opj_jp2_t*)opj_calloc(1, sizeof(opj_jp2_t));
+    if (jp2) {
+
+        /* create the J2K codec */
+        if (! p_is_decoder) {
+            jp2->j2k = opj_j2k_create_compress();
+        } else {
+            jp2->j2k = opj_j2k_create_decompress();
+        }
+
+        if (jp2->j2k == 00) {
+            opj_jp2_destroy(jp2);
+            return 00;
+        }
+
+        /* Color structure */
+        jp2->color.icc_profile_buf = NULL;
+        jp2->color.icc_profile_len = 0;
+        jp2->color.jp2_cdef = NULL;
+        jp2->color.jp2_pclr = NULL;
+        jp2->color.jp2_has_colr = 0;
+
+        /* validation list creation */
+        jp2->m_validation_list = opj_procedure_list_create();
+        if (! jp2->m_validation_list) {
+            opj_jp2_destroy(jp2);
+            return 00;
+        }
+
+        /* execution list creation */
+        jp2->m_procedure_list = opj_procedure_list_create();
+        if (! jp2->m_procedure_list) {
+            opj_jp2_destroy(jp2);
+            return 00;
+        }
+    }
+
+    return jp2;
 }
 
 void jp2_dump(opj_jp2_t* p_jp2, OPJ_INT32 flag, FILE* out_stream)
 {
-       /* preconditions */
-       assert(p_jp2 != 00);
+    /* preconditions */
+    assert(p_jp2 != 00);
 
-       j2k_dump(p_jp2->j2k,
-                                       flag,
-                                       out_stream);
+    j2k_dump(p_jp2->j2k,
+             flag,
+             out_stream);
 }
 
 opj_codestream_index_t* jp2_get_cstr_index(opj_jp2_t* p_jp2)
 {
-       return j2k_get_cstr_index(p_jp2->j2k);
+    return j2k_get_cstr_index(p_jp2->j2k);
 }
 
 opj_codestream_info_v2_t* jp2_get_cstr_info(opj_jp2_t* p_jp2)
 {
-       return j2k_get_cstr_info(p_jp2->j2k);
+    return j2k_get_cstr_info(p_jp2->j2k);
 }
 
 OPJ_BOOL opj_jp2_set_decoded_resolution_factor(opj_jp2_t *p_jp2,
-                                               OPJ_UINT32 res_factor,
-                                               opj_event_mgr_t * p_manager)
+        OPJ_UINT32 res_factor,
+        opj_event_mgr_t * p_manager)
 {
-       return opj_j2k_set_decoded_resolution_factor(p_jp2->j2k, res_factor, p_manager);
+    return opj_j2k_set_decoded_resolution_factor(p_jp2->j2k, res_factor, p_manager);
 }
 
 /* JPIP specific */
 
 #ifdef USE_JPIP
 static OPJ_BOOL opj_jpip_write_iptr(opj_jp2_t *jp2,
-  opj_stream_private_t *cio,
-  opj_event_mgr_t * p_manager )
+                                    opj_stream_private_t *cio,
+                                    opj_event_mgr_t * p_manager)
 {
-  OPJ_OFF_T j2k_codestream_exit;
-  OPJ_BYTE l_data_header [24];
-
-  /* preconditions */
-  assert(jp2 != 00);
-  assert(cio != 00);
-  assert(p_manager != 00);
-  assert(opj_stream_has_seek(cio));
-
-  j2k_codestream_exit = opj_stream_tell(cio);
-  opj_write_bytes(l_data_header, 24, 4); /* size of iptr */
-  opj_write_bytes(l_data_header + 4,JPIP_IPTR,4);                                                                         /* IPTR */
+    OPJ_OFF_T j2k_codestream_exit;
+    OPJ_BYTE l_data_header [24];
+
+    /* preconditions */
+    assert(jp2 != 00);
+    assert(cio != 00);
+    assert(p_manager != 00);
+    assert(opj_stream_has_seek(cio));
+
+    j2k_codestream_exit = opj_stream_tell(cio);
+    opj_write_bytes(l_data_header, 24, 4); /* size of iptr */
+    opj_write_bytes(l_data_header + 4, JPIP_IPTR,
+                    4);                                      /* IPTR */
 #if 0
-  opj_write_bytes(l_data_header + 4 + 4, 0, 8); /* offset */
-  opj_write_bytes(l_data_header + 8 + 8, 0, 8); /* length */
+    opj_write_bytes(l_data_header + 4 + 4, 0, 8); /* offset */
+    opj_write_bytes(l_data_header + 8 + 8, 0, 8); /* length */
 #else
-  opj_write_double(l_data_header + 4 + 4, 0); /* offset */
-  opj_write_double(l_data_header + 8 + 8, 0); /* length */
+    opj_write_double(l_data_header + 4 + 4, 0); /* offset */
+    opj_write_double(l_data_header + 8 + 8, 0); /* length */
 #endif
 
-  if (! opj_stream_seek(cio,jp2->jpip_iptr_offset,p_manager)) {
-    opj_event_msg(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
-    return OPJ_FALSE;
-  }
+    if (! opj_stream_seek(cio, jp2->jpip_iptr_offset, p_manager)) {
+        opj_event_msg(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
+        return OPJ_FALSE;
+    }
 
-  if (opj_stream_write_data(cio,l_data_header,24,p_manager) != 24) {
-    opj_event_msg(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
-    return OPJ_FALSE;
-  }
+    if (opj_stream_write_data(cio, l_data_header, 24, p_manager) != 24) {
+        opj_event_msg(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
+        return OPJ_FALSE;
+    }
 
-  if (! opj_stream_seek(cio,j2k_codestream_exit,p_manager)) {
-    opj_event_msg(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
-    return OPJ_FALSE;
-  }
+    if (! opj_stream_seek(cio, j2k_codestream_exit, p_manager)) {
+        opj_event_msg(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
+        return OPJ_FALSE;
+    }
 
-  return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 static OPJ_BOOL opj_jpip_write_fidx(opj_jp2_t *jp2,
-  opj_stream_private_t *cio,
-  opj_event_mgr_t * p_manager )
+                                    opj_stream_private_t *cio,
+                                    opj_event_mgr_t * p_manager)
 {
-  OPJ_OFF_T j2k_codestream_exit;
-  OPJ_BYTE l_data_header [24];
-
-  /* preconditions */
-  assert(jp2 != 00);
-  assert(cio != 00);
-  assert(p_manager != 00);
-  assert(opj_stream_has_seek(cio));
-
-  opj_write_bytes(l_data_header, 24, 4); /* size of iptr */
-  opj_write_bytes(l_data_header + 4,JPIP_FIDX,4);                                                                         /* IPTR */
-  opj_write_double(l_data_header + 4 + 4, 0); /* offset */
-  opj_write_double(l_data_header + 8 + 8, 0); /* length */
-
-  if (opj_stream_write_data(cio,l_data_header,24,p_manager) != 24) {
-    opj_event_msg(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
-    return OPJ_FALSE;
-  }
-
-  j2k_codestream_exit = opj_stream_tell(cio);
-  if (! opj_stream_seek(cio,j2k_codestream_exit,p_manager)) {
-    opj_event_msg(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
-    return OPJ_FALSE;
-  }
-
-  return OPJ_TRUE;
+    OPJ_OFF_T j2k_codestream_exit;
+    OPJ_BYTE l_data_header [24];
+
+    /* preconditions */
+    assert(jp2 != 00);
+    assert(cio != 00);
+    assert(p_manager != 00);
+    assert(opj_stream_has_seek(cio));
+
+    opj_write_bytes(l_data_header, 24, 4); /* size of iptr */
+    opj_write_bytes(l_data_header + 4, JPIP_FIDX,
+                    4);                                      /* IPTR */
+    opj_write_double(l_data_header + 4 + 4, 0); /* offset */
+    opj_write_double(l_data_header + 8 + 8, 0); /* length */
+
+    if (opj_stream_write_data(cio, l_data_header, 24, p_manager) != 24) {
+        opj_event_msg(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
+        return OPJ_FALSE;
+    }
+
+    j2k_codestream_exit = opj_stream_tell(cio);
+    if (! opj_stream_seek(cio, j2k_codestream_exit, p_manager)) {
+        opj_event_msg(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
+        return OPJ_FALSE;
+    }
+
+    return OPJ_TRUE;
 }
 
 static OPJ_BOOL opj_jpip_write_cidx(opj_jp2_t *jp2,
-  opj_stream_private_t *cio,
-  opj_event_mgr_t * p_manager )
+                                    opj_stream_private_t *cio,
+                                    opj_event_mgr_t * p_manager)
 {
-  OPJ_OFF_T j2k_codestream_exit;
-  OPJ_BYTE l_data_header [24];
-
-  /* preconditions */
-  assert(jp2 != 00);
-  assert(cio != 00);
-  assert(p_manager != 00);
-  assert(opj_stream_has_seek(cio));
-
-  j2k_codestream_exit = opj_stream_tell(cio);
-  opj_write_bytes(l_data_header, 24, 4); /* size of iptr */
-  opj_write_bytes(l_data_header + 4,JPIP_CIDX,4);                                                                         /* IPTR */
+    OPJ_OFF_T j2k_codestream_exit;
+    OPJ_BYTE l_data_header [24];
+
+    /* preconditions */
+    assert(jp2 != 00);
+    assert(cio != 00);
+    assert(p_manager != 00);
+    assert(opj_stream_has_seek(cio));
+
+    j2k_codestream_exit = opj_stream_tell(cio);
+    opj_write_bytes(l_data_header, 24, 4); /* size of iptr */
+    opj_write_bytes(l_data_header + 4, JPIP_CIDX,
+                    4);                                      /* IPTR */
 #if 0
-  opj_write_bytes(l_data_header + 4 + 4, 0, 8); /* offset */
-  opj_write_bytes(l_data_header + 8 + 8, 0, 8); /* length */
+    opj_write_bytes(l_data_header + 4 + 4, 0, 8); /* offset */
+    opj_write_bytes(l_data_header + 8 + 8, 0, 8); /* length */
 #else
-  opj_write_double(l_data_header + 4 + 4, 0); /* offset */
-  opj_write_double(l_data_header + 8 + 8, 0); /* length */
+    opj_write_double(l_data_header + 4 + 4, 0); /* offset */
+    opj_write_double(l_data_header + 8 + 8, 0); /* length */
 #endif
 
-  if (! opj_stream_seek(cio,j2k_codestream_exit,p_manager)) {
-    opj_event_msg(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
-    return OPJ_FALSE;
-  }
+    if (! opj_stream_seek(cio, j2k_codestream_exit, p_manager)) {
+        opj_event_msg(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
+        return OPJ_FALSE;
+    }
 
-  if (opj_stream_write_data(cio,l_data_header,24,p_manager) != 24) {
-    opj_event_msg(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
-    return OPJ_FALSE;
-  }
+    if (opj_stream_write_data(cio, l_data_header, 24, p_manager) != 24) {
+        opj_event_msg(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
+        return OPJ_FALSE;
+    }
 
-  j2k_codestream_exit = opj_stream_tell(cio);
-  if (! opj_stream_seek(cio,j2k_codestream_exit,p_manager)) {
-    opj_event_msg(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
-    return OPJ_FALSE;
-  }
+    j2k_codestream_exit = opj_stream_tell(cio);
+    if (! opj_stream_seek(cio, j2k_codestream_exit, p_manager)) {
+        opj_event_msg(p_manager, EVT_ERROR, "Failed to seek in the stream.\n");
+        return OPJ_FALSE;
+    }
 
-  return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 #if 0
-static void write_prxy( int offset_jp2c, int length_jp2c, int offset_idx, int length_idx, opj_stream_private_t *cio,
-  opj_event_mgr_t * p_manager )
+static void write_prxy(int offset_jp2c, int length_jp2c, int offset_idx,
+                       int length_idx, opj_stream_private_t *cio,
+                       opj_event_mgr_t * p_manager)
 {
-  OPJ_BYTE l_data_header [8];
-  OPJ_OFF_T len, lenp;
-
-  lenp = opj_stream_tell(cio);
-  opj_stream_skip(cio, 4, p_manager);         /* L [at the end] */
-  opj_write_bytes(l_data_header,JPIP_PRXY,4); /* IPTR           */
-  opj_stream_write_data(cio,l_data_header,4,p_manager);
-
-  opj_write_bytes( l_data_header, offset_jp2c, 8); /* OOFF           */
-  opj_stream_write_data(cio,l_data_header,8,p_manager);
-  opj_write_bytes( l_data_header, length_jp2c, 4); /* OBH part 1     */
-  opj_write_bytes( l_data_header+4, JP2_JP2C, 4);  /* OBH part 2     */
-  opj_stream_write_data(cio,l_data_header,8,p_manager);
-
-  opj_write_bytes( l_data_header, 1, 1);/* NI             */
-  opj_stream_write_data(cio,l_data_header,1,p_manager);
-
-  opj_write_bytes( l_data_header, offset_idx, 8);  /* IOFF           */
-  opj_stream_write_data(cio,l_data_header,8,p_manager);
-  opj_write_bytes( l_data_header, length_idx, 4);  /* IBH part 1     */
-  opj_write_bytes( l_data_header+4, JPIP_CIDX, 4);   /* IBH part 2     */
-  opj_stream_write_data(cio,l_data_header,8,p_manager);
-
-  len = opj_stream_tell(cio)-lenp;
-  opj_stream_skip(cio, lenp, p_manager);
-  opj_write_bytes(l_data_header,len,4);/* L              */
-  opj_stream_write_data(cio,l_data_header,4,p_manager);
-  opj_stream_seek(cio, lenp+len,p_manager);
+    OPJ_BYTE l_data_header [8];
+    OPJ_OFF_T len, lenp;
+
+    lenp = opj_stream_tell(cio);
+    opj_stream_skip(cio, 4, p_manager);         /* L [at the end] */
+    opj_write_bytes(l_data_header, JPIP_PRXY, 4); /* IPTR           */
+    opj_stream_write_data(cio, l_data_header, 4, p_manager);
+
+    opj_write_bytes(l_data_header, offset_jp2c, 8);  /* OOFF           */
+    opj_stream_write_data(cio, l_data_header, 8, p_manager);
+    opj_write_bytes(l_data_header, length_jp2c, 4);  /* OBH part 1     */
+    opj_write_bytes(l_data_header + 4, JP2_JP2C, 4); /* OBH part 2     */
+    opj_stream_write_data(cio, l_data_header, 8, p_manager);
+
+    opj_write_bytes(l_data_header, 1, 1); /* NI             */
+    opj_stream_write_data(cio, l_data_header, 1, p_manager);
+
+    opj_write_bytes(l_data_header, offset_idx, 8);   /* IOFF           */
+    opj_stream_write_data(cio, l_data_header, 8, p_manager);
+    opj_write_bytes(l_data_header, length_idx, 4);   /* IBH part 1     */
+    opj_write_bytes(l_data_header + 4, JPIP_CIDX, 4);  /* IBH part 2     */
+    opj_stream_write_data(cio, l_data_header, 8, p_manager);
+
+    len = opj_stream_tell(cio) - lenp;
+    opj_stream_skip(cio, lenp, p_manager);
+    opj_write_bytes(l_data_header, len, 4); /* L              */
+    opj_stream_write_data(cio, l_data_header, 4, p_manager);
+    opj_stream_seek(cio, lenp + len, p_manager);
 }
 #endif
 
 
 #if 0
-static int write_fidx( int offset_jp2c, int length_jp2c, int offset_idx, int length_idx, opj_stream_private_t *cio,
-  opj_event_mgr_t * p_manager )
+static int write_fidx(int offset_jp2c, int length_jp2c, int offset_idx,
+                      int length_idx, opj_stream_private_t *cio,
+                      opj_event_mgr_t * p_manager)
 {
-  OPJ_BYTE l_data_header [4];
-  OPJ_OFF_T len, lenp;
+    OPJ_BYTE l_data_header [4];
+    OPJ_OFF_T len, lenp;
 
-  lenp = opj_stream_tell(cio);
-  opj_stream_skip(cio, 4, p_manager);
-  opj_write_bytes(l_data_header,JPIP_FIDX,4); /* FIDX */
-  opj_stream_write_data(cio,l_data_header,4,p_manager);
+    lenp = opj_stream_tell(cio);
+    opj_stream_skip(cio, 4, p_manager);
+    opj_write_bytes(l_data_header, JPIP_FIDX, 4); /* FIDX */
+    opj_stream_write_data(cio, l_data_header, 4, p_manager);
 
-  write_prxy( offset_jp2c, length_jp2c, offset_idx, length_idx, cio,p_manager);
+    write_prxy(offset_jp2c, length_jp2c, offset_idx, length_idx, cio, p_manager);
 
-  len = opj_stream_tell(cio)-lenp;
-  opj_stream_skip(cio, lenp, p_manager);
-  opj_write_bytes(l_data_header,len,4);/* L              */
-  opj_stream_write_data(cio,l_data_header,4,p_manager);
-  opj_stream_seek(cio, lenp+len,p_manager);
+    len = opj_stream_tell(cio) - lenp;
+    opj_stream_skip(cio, lenp, p_manager);
+    opj_write_bytes(l_data_header, len, 4); /* L              */
+    opj_stream_write_data(cio, l_data_header, 4, p_manager);
+    opj_stream_seek(cio, lenp + len, p_manager);
 
-  return len;
+    return len;
 }
 #endif
 #endif /* USE_JPIP */
index e1f2f50dd487d97b8efa25ef9608fcf690426f1c..8c82ee20a8c730fa0362445679f08f442cb9a0ad 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,10 +8,10 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR 
+ * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR
  * Copyright (c) 2012, CS Systemes d'Information, France
  * All rights reserved.
  *
@@ -59,14 +59,14 @@ static const OPJ_FLOAT64 opj_mct_norms[3] = { 1.732, .8292, .8292 };
 /* </summary> */
 static const OPJ_FLOAT64 opj_mct_norms_real[3] = { 1.732, 1.805, 1.573 };
 
-const OPJ_FLOAT64 * opj_mct_get_mct_norms ()
+const OPJ_FLOAT64 * opj_mct_get_mct_norms()
 {
-       return opj_mct_norms;
+    return opj_mct_norms;
 }
 
-const OPJ_FLOAT64 * opj_mct_get_mct_norms_real ()
+const OPJ_FLOAT64 * opj_mct_get_mct_norms_real()
 {
-       return opj_mct_norms_real;
+    return opj_mct_norms_real;
 }
 
 /* <summary> */
@@ -74,67 +74,67 @@ const OPJ_FLOAT64 * opj_mct_get_mct_norms_real ()
 /* </summary> */
 #ifdef __SSE2__
 void opj_mct_encode(
-               OPJ_INT32* OPJ_RESTRICT c0,
-               OPJ_INT32* OPJ_RESTRICT c1,
-               OPJ_INT32* OPJ_RESTRICT c2,
-               OPJ_UINT32 n)
+    OPJ_INT32* OPJ_RESTRICT c0,
+    OPJ_INT32* OPJ_RESTRICT c1,
+    OPJ_INT32* OPJ_RESTRICT c2,
+    OPJ_UINT32 n)
 {
-       OPJ_SIZE_T i;
-       const OPJ_SIZE_T len = n;
-       /* buffer are aligned on 16 bytes */
-       assert( ((size_t)c0 & 0xf) == 0 );
-       assert( ((size_t)c1 & 0xf) == 0 );
-       assert( ((size_t)c2 & 0xf) == 0 );
-       
-       for(i = 0; i < (len & ~3U); i += 4) {
-               __m128i y, u, v;
-               __m128i r = _mm_load_si128((const __m128i *)&(c0[i]));
-               __m128i g = _mm_load_si128((const __m128i *)&(c1[i]));
-               __m128i b = _mm_load_si128((const __m128i *)&(c2[i]));
-               y = _mm_add_epi32(g, g);
-               y = _mm_add_epi32(y, b);
-               y = _mm_add_epi32(y, r);
-               y = _mm_srai_epi32(y, 2);
-               u = _mm_sub_epi32(b, g);
-               v = _mm_sub_epi32(r, g);
-               _mm_store_si128((__m128i *)&(c0[i]), y);
-               _mm_store_si128((__m128i *)&(c1[i]), u);
-               _mm_store_si128((__m128i *)&(c2[i]), v);
-       }
-       
-       for(; i < len; ++i) {
-               OPJ_INT32 r = c0[i];
-               OPJ_INT32 g = c1[i];
-               OPJ_INT32 b = c2[i];
-               OPJ_INT32 y = (r + (g * 2) + b) >> 2;
-               OPJ_INT32 u = b - g;
-               OPJ_INT32 v = r - g;
-               c0[i] = y;
-               c1[i] = u;
-               c2[i] = v;
-       }
+    OPJ_SIZE_T i;
+    const OPJ_SIZE_T len = n;
+    /* buffer are aligned on 16 bytes */
+    assert(((size_t)c0 & 0xf) == 0);
+    assert(((size_t)c1 & 0xf) == 0);
+    assert(((size_t)c2 & 0xf) == 0);
+
+    for (i = 0; i < (len & ~3U); i += 4) {
+        __m128i y, u, v;
+        __m128i r = _mm_load_si128((const __m128i *) & (c0[i]));
+        __m128i g = _mm_load_si128((const __m128i *) & (c1[i]));
+        __m128i b = _mm_load_si128((const __m128i *) & (c2[i]));
+        y = _mm_add_epi32(g, g);
+        y = _mm_add_epi32(y, b);
+        y = _mm_add_epi32(y, r);
+        y = _mm_srai_epi32(y, 2);
+        u = _mm_sub_epi32(b, g);
+        v = _mm_sub_epi32(r, g);
+        _mm_store_si128((__m128i *) & (c0[i]), y);
+        _mm_store_si128((__m128i *) & (c1[i]), u);
+        _mm_store_si128((__m128i *) & (c2[i]), v);
+    }
+
+    for (; i < len; ++i) {
+        OPJ_INT32 r = c0[i];
+        OPJ_INT32 g = c1[i];
+        OPJ_INT32 b = c2[i];
+        OPJ_INT32 y = (r + (g * 2) + b) >> 2;
+        OPJ_INT32 u = b - g;
+        OPJ_INT32 v = r - g;
+        c0[i] = y;
+        c1[i] = u;
+        c2[i] = v;
+    }
 }
 #else
 void opj_mct_encode(
-               OPJ_INT32* OPJ_RESTRICT c0,
-               OPJ_INT32* OPJ_RESTRICT c1,
-               OPJ_INT32* OPJ_RESTRICT c2,
-               OPJ_UINT32 n)
+    OPJ_INT32* OPJ_RESTRICT c0,
+    OPJ_INT32* OPJ_RESTRICT c1,
+    OPJ_INT32* OPJ_RESTRICT c2,
+    OPJ_UINT32 n)
 {
-       OPJ_SIZE_T i;
-       const OPJ_SIZE_T len = n;
-       
-       for(i = 0; i < len; ++i) {
-               OPJ_INT32 r = c0[i];
-               OPJ_INT32 g = c1[i];
-               OPJ_INT32 b = c2[i];
-               OPJ_INT32 y = (r + (g * 2) + b) >> 2;
-               OPJ_INT32 u = b - g;
-               OPJ_INT32 v = r - g;
-               c0[i] = y;
-               c1[i] = u;
-               c2[i] = v;
-       }
+    OPJ_SIZE_T i;
+    const OPJ_SIZE_T len = n;
+
+    for (i = 0; i < len; ++i) {
+        OPJ_INT32 r = c0[i];
+        OPJ_INT32 g = c1[i];
+        OPJ_INT32 b = c2[i];
+        OPJ_INT32 y = (r + (g * 2) + b) >> 2;
+        OPJ_INT32 u = b - g;
+        OPJ_INT32 v = r - g;
+        c0[i] = y;
+        c1[i] = u;
+        c2[i] = v;
+    }
 }
 #endif
 
@@ -143,66 +143,67 @@ void opj_mct_encode(
 /* </summary> */
 #ifdef __SSE2__
 void opj_mct_decode(
-               OPJ_INT32* OPJ_RESTRICT c0,
-               OPJ_INT32* OPJ_RESTRICT c1,
-               OPJ_INT32* OPJ_RESTRICT c2,
-               OPJ_UINT32 n)
+    OPJ_INT32* OPJ_RESTRICT c0,
+    OPJ_INT32* OPJ_RESTRICT c1,
+    OPJ_INT32* OPJ_RESTRICT c2,
+    OPJ_UINT32 n)
 {
-       OPJ_SIZE_T i;
-       const OPJ_SIZE_T len = n;
-       
-       for(i = 0; i < (len & ~3U); i += 4) {
-               __m128i r, g, b;
-               __m128i y = _mm_load_si128((const __m128i *)&(c0[i]));
-               __m128i u = _mm_load_si128((const __m128i *)&(c1[i]));
-               __m128i v = _mm_load_si128((const __m128i *)&(c2[i]));
-               g = y;
-               g = _mm_sub_epi32(g, _mm_srai_epi32(_mm_add_epi32(u, v), 2));
-               r = _mm_add_epi32(v, g);
-               b = _mm_add_epi32(u, g);
-               _mm_store_si128((__m128i *)&(c0[i]), r);
-               _mm_store_si128((__m128i *)&(c1[i]), g);
-               _mm_store_si128((__m128i *)&(c2[i]), b);
-       }
-       for (; i < len; ++i) {
-               OPJ_INT32 y = c0[i];
-               OPJ_INT32 u = c1[i];
-               OPJ_INT32 v = c2[i];
-               OPJ_INT32 g = y - ((u + v) >> 2);
-               OPJ_INT32 r = v + g;
-               OPJ_INT32 b = u + g;
-               c0[i] = r;
-               c1[i] = g;
-               c2[i] = b;
-       }
+    OPJ_SIZE_T i;
+    const OPJ_SIZE_T len = n;
+
+    for (i = 0; i < (len & ~3U); i += 4) {
+        __m128i r, g, b;
+        __m128i y = _mm_load_si128((const __m128i *) & (c0[i]));
+        __m128i u = _mm_load_si128((const __m128i *) & (c1[i]));
+        __m128i v = _mm_load_si128((const __m128i *) & (c2[i]));
+        g = y;
+        g = _mm_sub_epi32(g, _mm_srai_epi32(_mm_add_epi32(u, v), 2));
+        r = _mm_add_epi32(v, g);
+        b = _mm_add_epi32(u, g);
+        _mm_store_si128((__m128i *) & (c0[i]), r);
+        _mm_store_si128((__m128i *) & (c1[i]), g);
+        _mm_store_si128((__m128i *) & (c2[i]), b);
+    }
+    for (; i < len; ++i) {
+        OPJ_INT32 y = c0[i];
+        OPJ_INT32 u = c1[i];
+        OPJ_INT32 v = c2[i];
+        OPJ_INT32 g = y - ((u + v) >> 2);
+        OPJ_INT32 r = v + g;
+        OPJ_INT32 b = u + g;
+        c0[i] = r;
+        c1[i] = g;
+        c2[i] = b;
+    }
 }
 #else
 void opj_mct_decode(
-               OPJ_INT32* OPJ_RESTRICT c0,
-               OPJ_INT32* OPJ_RESTRICT c1, 
-               OPJ_INT32* OPJ_RESTRICT c2, 
-               OPJ_UINT32 n)
+    OPJ_INT32* OPJ_RESTRICT c0,
+    OPJ_INT32* OPJ_RESTRICT c1,
+    OPJ_INT32* OPJ_RESTRICT c2,
+    OPJ_UINT32 n)
 {
-       OPJ_UINT32 i;
-       for (i = 0; i < n; ++i) {
-               OPJ_INT32 y = c0[i];
-               OPJ_INT32 u = c1[i];
-               OPJ_INT32 v = c2[i];
-               OPJ_INT32 g = y - ((u + v) >> 2);
-               OPJ_INT32 r = v + g;
-               OPJ_INT32 b = u + g;
-               c0[i] = r;
-               c1[i] = g;
-               c2[i] = b;
-       }
+    OPJ_UINT32 i;
+    for (i = 0; i < n; ++i) {
+        OPJ_INT32 y = c0[i];
+        OPJ_INT32 u = c1[i];
+        OPJ_INT32 v = c2[i];
+        OPJ_INT32 g = y - ((u + v) >> 2);
+        OPJ_INT32 r = v + g;
+        OPJ_INT32 b = u + g;
+        c0[i] = r;
+        c1[i] = g;
+        c2[i] = b;
+    }
 }
 #endif
 
 /* <summary> */
 /* Get norm of basis function of reversible MCT. */
 /* </summary> */
-OPJ_FLOAT64 opj_mct_getnorm(OPJ_UINT32 compno) {
-       return opj_mct_norms[compno];
+OPJ_FLOAT64 opj_mct_getnorm(OPJ_UINT32 compno)
+{
+    return opj_mct_norms[compno];
 }
 
 /* <summary> */
@@ -210,164 +211,171 @@ OPJ_FLOAT64 opj_mct_getnorm(OPJ_UINT32 compno) {
 /* </summary> */
 #ifdef __SSE4_1__
 void opj_mct_encode_real(
-                                                                                                OPJ_INT32* OPJ_RESTRICT c0,
-                                                                                                OPJ_INT32* OPJ_RESTRICT c1,
-                                                                                                OPJ_INT32* OPJ_RESTRICT c2,
-                                                                                                OPJ_UINT32 n)
+    OPJ_INT32* OPJ_RESTRICT c0,
+    OPJ_INT32* OPJ_RESTRICT c1,
+    OPJ_INT32* OPJ_RESTRICT c2,
+    OPJ_UINT32 n)
 {
-       OPJ_SIZE_T i;
-       const OPJ_SIZE_T len = n;
-       
-       const __m128i ry = _mm_set1_epi32(2449);
-       const __m128i gy = _mm_set1_epi32(4809);
-       const __m128i by = _mm_set1_epi32(934);
-       const __m128i ru = _mm_set1_epi32(1382);
-       const __m128i gu = _mm_set1_epi32(2714);
-       /* const __m128i bu = _mm_set1_epi32(4096); */
-       /* const __m128i rv = _mm_set1_epi32(4096); */
-       const __m128i gv = _mm_set1_epi32(3430);
-       const __m128i bv = _mm_set1_epi32(666);
-       const __m128i mulround = _mm_shuffle_epi32(_mm_cvtsi32_si128(4096), _MM_SHUFFLE(1, 0, 1, 0));
-       
-       for(i = 0; i < (len & ~3U); i += 4) {
-               __m128i lo, hi;
-               __m128i y, u, v;
-               __m128i r = _mm_load_si128((const __m128i *)&(c0[i]));
-               __m128i g = _mm_load_si128((const __m128i *)&(c1[i]));
-               __m128i b = _mm_load_si128((const __m128i *)&(c2[i]));
-               
-               lo = r;
-               hi = _mm_shuffle_epi32(r, _MM_SHUFFLE(3, 3, 1, 1));
-               lo = _mm_mul_epi32(lo, ry);
-               hi = _mm_mul_epi32(hi, ry);
-               lo = _mm_add_epi64(lo, mulround);
-               hi = _mm_add_epi64(hi, mulround);
-               lo = _mm_srli_epi64(lo, 13);
-               hi = _mm_slli_epi64(hi, 32-13);
-               y = _mm_blend_epi16(lo, hi, 0xCC);
-               
-               lo = g;
-               hi = _mm_shuffle_epi32(g, _MM_SHUFFLE(3, 3, 1, 1));
-               lo = _mm_mul_epi32(lo, gy);
-               hi = _mm_mul_epi32(hi, gy);
-               lo = _mm_add_epi64(lo, mulround);
-               hi = _mm_add_epi64(hi, mulround);
-               lo = _mm_srli_epi64(lo, 13);
-               hi = _mm_slli_epi64(hi, 32-13);
-               y = _mm_add_epi32(y, _mm_blend_epi16(lo, hi, 0xCC));
-               
-               lo = b;
-               hi = _mm_shuffle_epi32(b, _MM_SHUFFLE(3, 3, 1, 1));
-               lo = _mm_mul_epi32(lo, by);
-               hi = _mm_mul_epi32(hi, by);
-               lo = _mm_add_epi64(lo, mulround);
-               hi = _mm_add_epi64(hi, mulround);
-               lo = _mm_srli_epi64(lo, 13);
-               hi = _mm_slli_epi64(hi, 32-13);
-               y = _mm_add_epi32(y, _mm_blend_epi16(lo, hi, 0xCC));
-               _mm_store_si128((__m128i *)&(c0[i]), y);
-               
-               /*lo = b;
-               hi = _mm_shuffle_epi32(b, _MM_SHUFFLE(3, 3, 1, 1));
-               lo = _mm_mul_epi32(lo, mulround);
-               hi = _mm_mul_epi32(hi, mulround);*/
-               lo = _mm_cvtepi32_epi64(_mm_shuffle_epi32(b, _MM_SHUFFLE(3, 2, 2, 0)));
-               hi = _mm_cvtepi32_epi64(_mm_shuffle_epi32(b, _MM_SHUFFLE(3, 2, 3, 1)));
-               lo = _mm_slli_epi64(lo, 12);
-               hi = _mm_slli_epi64(hi, 12);
-               lo = _mm_add_epi64(lo, mulround);
-               hi = _mm_add_epi64(hi, mulround);
-               lo = _mm_srli_epi64(lo, 13);
-               hi = _mm_slli_epi64(hi, 32-13);
-               u = _mm_blend_epi16(lo, hi, 0xCC);
-               
-               lo = r;
-               hi = _mm_shuffle_epi32(r, _MM_SHUFFLE(3, 3, 1, 1));
-               lo = _mm_mul_epi32(lo, ru);
-               hi = _mm_mul_epi32(hi, ru);
-               lo = _mm_add_epi64(lo, mulround);
-               hi = _mm_add_epi64(hi, mulround);
-               lo = _mm_srli_epi64(lo, 13);
-               hi = _mm_slli_epi64(hi, 32-13);
-               u = _mm_sub_epi32(u, _mm_blend_epi16(lo, hi, 0xCC));
-               
-               lo = g;
-               hi = _mm_shuffle_epi32(g, _MM_SHUFFLE(3, 3, 1, 1));
-               lo = _mm_mul_epi32(lo, gu);
-               hi = _mm_mul_epi32(hi, gu);
-               lo = _mm_add_epi64(lo, mulround);
-               hi = _mm_add_epi64(hi, mulround);
-               lo = _mm_srli_epi64(lo, 13);
-               hi = _mm_slli_epi64(hi, 32-13);
-               u = _mm_sub_epi32(u, _mm_blend_epi16(lo, hi, 0xCC));
-               _mm_store_si128((__m128i *)&(c1[i]), u);
-               
-               /*lo = r;
-               hi = _mm_shuffle_epi32(r, _MM_SHUFFLE(3, 3, 1, 1));
-               lo = _mm_mul_epi32(lo, mulround);
-               hi = _mm_mul_epi32(hi, mulround);*/
-               lo = _mm_cvtepi32_epi64(_mm_shuffle_epi32(r, _MM_SHUFFLE(3, 2, 2, 0)));
-               hi = _mm_cvtepi32_epi64(_mm_shuffle_epi32(r, _MM_SHUFFLE(3, 2, 3, 1)));
-               lo = _mm_slli_epi64(lo, 12);
-               hi = _mm_slli_epi64(hi, 12);
-               lo = _mm_add_epi64(lo, mulround);
-               hi = _mm_add_epi64(hi, mulround);
-               lo = _mm_srli_epi64(lo, 13);
-               hi = _mm_slli_epi64(hi, 32-13);
-               v = _mm_blend_epi16(lo, hi, 0xCC);
-               
-               lo = g;
-               hi = _mm_shuffle_epi32(g, _MM_SHUFFLE(3, 3, 1, 1));
-               lo = _mm_mul_epi32(lo, gv);
-               hi = _mm_mul_epi32(hi, gv);
-               lo = _mm_add_epi64(lo, mulround);
-               hi = _mm_add_epi64(hi, mulround);
-               lo = _mm_srli_epi64(lo, 13);
-               hi = _mm_slli_epi64(hi, 32-13);
-               v = _mm_sub_epi32(v, _mm_blend_epi16(lo, hi, 0xCC));
-               
-               lo = b;
-               hi = _mm_shuffle_epi32(b, _MM_SHUFFLE(3, 3, 1, 1));
-               lo = _mm_mul_epi32(lo, bv);
-               hi = _mm_mul_epi32(hi, bv);
-               lo = _mm_add_epi64(lo, mulround);
-               hi = _mm_add_epi64(hi, mulround);
-               lo = _mm_srli_epi64(lo, 13);
-               hi = _mm_slli_epi64(hi, 32-13);
-               v = _mm_sub_epi32(v, _mm_blend_epi16(lo, hi, 0xCC));
-               _mm_store_si128((__m128i *)&(c2[i]), v);
-       }
-       for(; i < len; ++i) {
-               OPJ_INT32 r = c0[i];
-               OPJ_INT32 g = c1[i];
-               OPJ_INT32 b = c2[i];
-               OPJ_INT32 y =  opj_int_fix_mul(r, 2449) + opj_int_fix_mul(g, 4809) + opj_int_fix_mul(b, 934);
-               OPJ_INT32 u = -opj_int_fix_mul(r, 1382) - opj_int_fix_mul(g, 2714) + opj_int_fix_mul(b, 4096);
-               OPJ_INT32 v =  opj_int_fix_mul(r, 4096) - opj_int_fix_mul(g, 3430) - opj_int_fix_mul(b, 666);
-               c0[i] = y;
-               c1[i] = u;
-               c2[i] = v;
-       }
+    OPJ_SIZE_T i;
+    const OPJ_SIZE_T len = n;
+
+    const __m128i ry = _mm_set1_epi32(2449);
+    const __m128i gy = _mm_set1_epi32(4809);
+    const __m128i by = _mm_set1_epi32(934);
+    const __m128i ru = _mm_set1_epi32(1382);
+    const __m128i gu = _mm_set1_epi32(2714);
+    /* const __m128i bu = _mm_set1_epi32(4096); */
+    /* const __m128i rv = _mm_set1_epi32(4096); */
+    const __m128i gv = _mm_set1_epi32(3430);
+    const __m128i bv = _mm_set1_epi32(666);
+    const __m128i mulround = _mm_shuffle_epi32(_mm_cvtsi32_si128(4096),
+                             _MM_SHUFFLE(1, 0, 1, 0));
+
+    for (i = 0; i < (len & ~3U); i += 4) {
+        __m128i lo, hi;
+        __m128i y, u, v;
+        __m128i r = _mm_load_si128((const __m128i *) & (c0[i]));
+        __m128i g = _mm_load_si128((const __m128i *) & (c1[i]));
+        __m128i b = _mm_load_si128((const __m128i *) & (c2[i]));
+
+        lo = r;
+        hi = _mm_shuffle_epi32(r, _MM_SHUFFLE(3, 3, 1, 1));
+        lo = _mm_mul_epi32(lo, ry);
+        hi = _mm_mul_epi32(hi, ry);
+        lo = _mm_add_epi64(lo, mulround);
+        hi = _mm_add_epi64(hi, mulround);
+        lo = _mm_srli_epi64(lo, 13);
+        hi = _mm_slli_epi64(hi, 32 - 13);
+        y = _mm_blend_epi16(lo, hi, 0xCC);
+
+        lo = g;
+        hi = _mm_shuffle_epi32(g, _MM_SHUFFLE(3, 3, 1, 1));
+        lo = _mm_mul_epi32(lo, gy);
+        hi = _mm_mul_epi32(hi, gy);
+        lo = _mm_add_epi64(lo, mulround);
+        hi = _mm_add_epi64(hi, mulround);
+        lo = _mm_srli_epi64(lo, 13);
+        hi = _mm_slli_epi64(hi, 32 - 13);
+        y = _mm_add_epi32(y, _mm_blend_epi16(lo, hi, 0xCC));
+
+        lo = b;
+        hi = _mm_shuffle_epi32(b, _MM_SHUFFLE(3, 3, 1, 1));
+        lo = _mm_mul_epi32(lo, by);
+        hi = _mm_mul_epi32(hi, by);
+        lo = _mm_add_epi64(lo, mulround);
+        hi = _mm_add_epi64(hi, mulround);
+        lo = _mm_srli_epi64(lo, 13);
+        hi = _mm_slli_epi64(hi, 32 - 13);
+        y = _mm_add_epi32(y, _mm_blend_epi16(lo, hi, 0xCC));
+        _mm_store_si128((__m128i *) & (c0[i]), y);
+
+        /*lo = b;
+        hi = _mm_shuffle_epi32(b, _MM_SHUFFLE(3, 3, 1, 1));
+        lo = _mm_mul_epi32(lo, mulround);
+        hi = _mm_mul_epi32(hi, mulround);*/
+        lo = _mm_cvtepi32_epi64(_mm_shuffle_epi32(b, _MM_SHUFFLE(3, 2, 2, 0)));
+        hi = _mm_cvtepi32_epi64(_mm_shuffle_epi32(b, _MM_SHUFFLE(3, 2, 3, 1)));
+        lo = _mm_slli_epi64(lo, 12);
+        hi = _mm_slli_epi64(hi, 12);
+        lo = _mm_add_epi64(lo, mulround);
+        hi = _mm_add_epi64(hi, mulround);
+        lo = _mm_srli_epi64(lo, 13);
+        hi = _mm_slli_epi64(hi, 32 - 13);
+        u = _mm_blend_epi16(lo, hi, 0xCC);
+
+        lo = r;
+        hi = _mm_shuffle_epi32(r, _MM_SHUFFLE(3, 3, 1, 1));
+        lo = _mm_mul_epi32(lo, ru);
+        hi = _mm_mul_epi32(hi, ru);
+        lo = _mm_add_epi64(lo, mulround);
+        hi = _mm_add_epi64(hi, mulround);
+        lo = _mm_srli_epi64(lo, 13);
+        hi = _mm_slli_epi64(hi, 32 - 13);
+        u = _mm_sub_epi32(u, _mm_blend_epi16(lo, hi, 0xCC));
+
+        lo = g;
+        hi = _mm_shuffle_epi32(g, _MM_SHUFFLE(3, 3, 1, 1));
+        lo = _mm_mul_epi32(lo, gu);
+        hi = _mm_mul_epi32(hi, gu);
+        lo = _mm_add_epi64(lo, mulround);
+        hi = _mm_add_epi64(hi, mulround);
+        lo = _mm_srli_epi64(lo, 13);
+        hi = _mm_slli_epi64(hi, 32 - 13);
+        u = _mm_sub_epi32(u, _mm_blend_epi16(lo, hi, 0xCC));
+        _mm_store_si128((__m128i *) & (c1[i]), u);
+
+        /*lo = r;
+        hi = _mm_shuffle_epi32(r, _MM_SHUFFLE(3, 3, 1, 1));
+        lo = _mm_mul_epi32(lo, mulround);
+        hi = _mm_mul_epi32(hi, mulround);*/
+        lo = _mm_cvtepi32_epi64(_mm_shuffle_epi32(r, _MM_SHUFFLE(3, 2, 2, 0)));
+        hi = _mm_cvtepi32_epi64(_mm_shuffle_epi32(r, _MM_SHUFFLE(3, 2, 3, 1)));
+        lo = _mm_slli_epi64(lo, 12);
+        hi = _mm_slli_epi64(hi, 12);
+        lo = _mm_add_epi64(lo, mulround);
+        hi = _mm_add_epi64(hi, mulround);
+        lo = _mm_srli_epi64(lo, 13);
+        hi = _mm_slli_epi64(hi, 32 - 13);
+        v = _mm_blend_epi16(lo, hi, 0xCC);
+
+        lo = g;
+        hi = _mm_shuffle_epi32(g, _MM_SHUFFLE(3, 3, 1, 1));
+        lo = _mm_mul_epi32(lo, gv);
+        hi = _mm_mul_epi32(hi, gv);
+        lo = _mm_add_epi64(lo, mulround);
+        hi = _mm_add_epi64(hi, mulround);
+        lo = _mm_srli_epi64(lo, 13);
+        hi = _mm_slli_epi64(hi, 32 - 13);
+        v = _mm_sub_epi32(v, _mm_blend_epi16(lo, hi, 0xCC));
+
+        lo = b;
+        hi = _mm_shuffle_epi32(b, _MM_SHUFFLE(3, 3, 1, 1));
+        lo = _mm_mul_epi32(lo, bv);
+        hi = _mm_mul_epi32(hi, bv);
+        lo = _mm_add_epi64(lo, mulround);
+        hi = _mm_add_epi64(hi, mulround);
+        lo = _mm_srli_epi64(lo, 13);
+        hi = _mm_slli_epi64(hi, 32 - 13);
+        v = _mm_sub_epi32(v, _mm_blend_epi16(lo, hi, 0xCC));
+        _mm_store_si128((__m128i *) & (c2[i]), v);
+    }
+    for (; i < len; ++i) {
+        OPJ_INT32 r = c0[i];
+        OPJ_INT32 g = c1[i];
+        OPJ_INT32 b = c2[i];
+        OPJ_INT32 y =  opj_int_fix_mul(r, 2449) + opj_int_fix_mul(g,
+                       4809) + opj_int_fix_mul(b, 934);
+        OPJ_INT32 u = -opj_int_fix_mul(r, 1382) - opj_int_fix_mul(g,
+                      2714) + opj_int_fix_mul(b, 4096);
+        OPJ_INT32 v =  opj_int_fix_mul(r, 4096) - opj_int_fix_mul(g,
+                       3430) - opj_int_fix_mul(b, 666);
+        c0[i] = y;
+        c1[i] = u;
+        c2[i] = v;
+    }
 }
 #else
 void opj_mct_encode_real(
-               OPJ_INT32* OPJ_RESTRICT c0,
-               OPJ_INT32* OPJ_RESTRICT c1,
-               OPJ_INT32* OPJ_RESTRICT c2,
-               OPJ_UINT32 n)
+    OPJ_INT32* OPJ_RESTRICT c0,
+    OPJ_INT32* OPJ_RESTRICT c1,
+    OPJ_INT32* OPJ_RESTRICT c2,
+    OPJ_UINT32 n)
 {
-       OPJ_UINT32 i;
-       for(i = 0; i < n; ++i) {
-               OPJ_INT32 r = c0[i];
-               OPJ_INT32 g = c1[i];
-               OPJ_INT32 b = c2[i];
-               OPJ_INT32 y =  opj_int_fix_mul(r, 2449) + opj_int_fix_mul(g, 4809) + opj_int_fix_mul(b, 934);
-               OPJ_INT32 u = -opj_int_fix_mul(r, 1382) - opj_int_fix_mul(g, 2714) + opj_int_fix_mul(b, 4096);
-               OPJ_INT32 v =  opj_int_fix_mul(r, 4096) - opj_int_fix_mul(g, 3430) - opj_int_fix_mul(b, 666);
-               c0[i] = y;
-               c1[i] = u;
-               c2[i] = v;
-       }
+    OPJ_UINT32 i;
+    for (i = 0; i < n; ++i) {
+        OPJ_INT32 r = c0[i];
+        OPJ_INT32 g = c1[i];
+        OPJ_INT32 b = c2[i];
+        OPJ_INT32 y =  opj_int_fix_mul(r, 2449) + opj_int_fix_mul(g,
+                       4809) + opj_int_fix_mul(b, 934);
+        OPJ_INT32 u = -opj_int_fix_mul(r, 1382) - opj_int_fix_mul(g,
+                      2714) + opj_int_fix_mul(b, 4096);
+        OPJ_INT32 v =  opj_int_fix_mul(r, 4096) - opj_int_fix_mul(g,
+                       3430) - opj_int_fix_mul(b, 666);
+        c0[i] = y;
+        c1[i] = u;
+        c2[i] = v;
+    }
 }
 #endif
 
@@ -375,183 +383,185 @@ void opj_mct_encode_real(
 /* Inverse irreversible MCT. */
 /* </summary> */
 void opj_mct_decode_real(
-               OPJ_FLOAT32* OPJ_RESTRICT c0,
-               OPJ_FLOAT32* OPJ_RESTRICT c1,
-               OPJ_FLOAT32* OPJ_RESTRICT c2,
-               OPJ_UINT32 n)
+    OPJ_FLOAT32* OPJ_RESTRICT c0,
+    OPJ_FLOAT32* OPJ_RESTRICT c1,
+    OPJ_FLOAT32* OPJ_RESTRICT c2,
+    OPJ_UINT32 n)
 {
-       OPJ_UINT32 i;
+    OPJ_UINT32 i;
 #ifdef __SSE__
-       __m128 vrv, vgu, vgv, vbu;
-       vrv = _mm_set1_ps(1.402f);
-       vgu = _mm_set1_ps(0.34413f);
-       vgv = _mm_set1_ps(0.71414f);
-       vbu = _mm_set1_ps(1.772f);
-       for (i = 0; i < (n >> 3); ++i) {
-               __m128 vy, vu, vv;
-               __m128 vr, vg, vb;
-
-               vy = _mm_load_ps(c0);
-               vu = _mm_load_ps(c1);
-               vv = _mm_load_ps(c2);
-               vr = _mm_add_ps(vy, _mm_mul_ps(vv, vrv));
-               vg = _mm_sub_ps(_mm_sub_ps(vy, _mm_mul_ps(vu, vgu)), _mm_mul_ps(vv, vgv));
-               vb = _mm_add_ps(vy, _mm_mul_ps(vu, vbu));
-               _mm_store_ps(c0, vr);
-               _mm_store_ps(c1, vg);
-               _mm_store_ps(c2, vb);
-               c0 += 4;
-               c1 += 4;
-               c2 += 4;
-
-               vy = _mm_load_ps(c0);
-               vu = _mm_load_ps(c1);
-               vv = _mm_load_ps(c2);
-               vr = _mm_add_ps(vy, _mm_mul_ps(vv, vrv));
-               vg = _mm_sub_ps(_mm_sub_ps(vy, _mm_mul_ps(vu, vgu)), _mm_mul_ps(vv, vgv));
-               vb = _mm_add_ps(vy, _mm_mul_ps(vu, vbu));
-               _mm_store_ps(c0, vr);
-               _mm_store_ps(c1, vg);
-               _mm_store_ps(c2, vb);
-               c0 += 4;
-               c1 += 4;
-               c2 += 4;
-       }
-       n &= 7;
+    __m128 vrv, vgu, vgv, vbu;
+    vrv = _mm_set1_ps(1.402f);
+    vgu = _mm_set1_ps(0.34413f);
+    vgv = _mm_set1_ps(0.71414f);
+    vbu = _mm_set1_ps(1.772f);
+    for (i = 0; i < (n >> 3); ++i) {
+        __m128 vy, vu, vv;
+        __m128 vr, vg, vb;
+
+        vy = _mm_load_ps(c0);
+        vu = _mm_load_ps(c1);
+        vv = _mm_load_ps(c2);
+        vr = _mm_add_ps(vy, _mm_mul_ps(vv, vrv));
+        vg = _mm_sub_ps(_mm_sub_ps(vy, _mm_mul_ps(vu, vgu)), _mm_mul_ps(vv, vgv));
+        vb = _mm_add_ps(vy, _mm_mul_ps(vu, vbu));
+        _mm_store_ps(c0, vr);
+        _mm_store_ps(c1, vg);
+        _mm_store_ps(c2, vb);
+        c0 += 4;
+        c1 += 4;
+        c2 += 4;
+
+        vy = _mm_load_ps(c0);
+        vu = _mm_load_ps(c1);
+        vv = _mm_load_ps(c2);
+        vr = _mm_add_ps(vy, _mm_mul_ps(vv, vrv));
+        vg = _mm_sub_ps(_mm_sub_ps(vy, _mm_mul_ps(vu, vgu)), _mm_mul_ps(vv, vgv));
+        vb = _mm_add_ps(vy, _mm_mul_ps(vu, vbu));
+        _mm_store_ps(c0, vr);
+        _mm_store_ps(c1, vg);
+        _mm_store_ps(c2, vb);
+        c0 += 4;
+        c1 += 4;
+        c2 += 4;
+    }
+    n &= 7;
 #endif
-       for(i = 0; i < n; ++i) {
-               OPJ_FLOAT32 y = c0[i];
-               OPJ_FLOAT32 u = c1[i];
-               OPJ_FLOAT32 v = c2[i];
-               OPJ_FLOAT32 r = y + (v * 1.402f);
-               OPJ_FLOAT32 g = y - (u * 0.34413f) - (v * (0.71414f));
-               OPJ_FLOAT32 b = y + (u * 1.772f);
-               c0[i] = r;
-               c1[i] = g;
-               c2[i] = b;
-       }
+    for (i = 0; i < n; ++i) {
+        OPJ_FLOAT32 y = c0[i];
+        OPJ_FLOAT32 u = c1[i];
+        OPJ_FLOAT32 v = c2[i];
+        OPJ_FLOAT32 r = y + (v * 1.402f);
+        OPJ_FLOAT32 g = y - (u * 0.34413f) - (v * (0.71414f));
+        OPJ_FLOAT32 b = y + (u * 1.772f);
+        c0[i] = r;
+        c1[i] = g;
+        c2[i] = b;
+    }
 }
 
 /* <summary> */
 /* Get norm of basis function of irreversible MCT. */
 /* </summary> */
-OPJ_FLOAT64 opj_mct_getnorm_real(OPJ_UINT32 compno) {
-       return opj_mct_norms_real[compno];
+OPJ_FLOAT64 opj_mct_getnorm_real(OPJ_UINT32 compno)
+{
+    return opj_mct_norms_real[compno];
 }
 
 
 OPJ_BOOL opj_mct_encode_custom(
-                                          OPJ_BYTE * pCodingdata,
-                                          OPJ_UINT32 n,
-                                          OPJ_BYTE ** pData,
-                                          OPJ_UINT32 pNbComp,
-                                          OPJ_UINT32 isSigned)
+    OPJ_BYTE * pCodingdata,
+    OPJ_UINT32 n,
+    OPJ_BYTE ** pData,
+    OPJ_UINT32 pNbComp,
+    OPJ_UINT32 isSigned)
 {
-       OPJ_FLOAT32 * lMct = (OPJ_FLOAT32 *) pCodingdata;
-       OPJ_UINT32 i;
-       OPJ_UINT32 j;
-       OPJ_UINT32 k;
-       OPJ_UINT32 lNbMatCoeff = pNbComp * pNbComp;
-       OPJ_INT32 * lCurrentData = 00;
-       OPJ_INT32 * lCurrentMatrix = 00;
-       OPJ_INT32 ** lData = (OPJ_INT32 **) pData;
-       OPJ_UINT32 lMultiplicator = 1 << 13;
-       OPJ_INT32 * lMctPtr;
+    OPJ_FLOAT32 * lMct = (OPJ_FLOAT32 *) pCodingdata;
+    OPJ_UINT32 i;
+    OPJ_UINT32 j;
+    OPJ_UINT32 k;
+    OPJ_UINT32 lNbMatCoeff = pNbComp * pNbComp;
+    OPJ_INT32 * lCurrentData = 00;
+    OPJ_INT32 * lCurrentMatrix = 00;
+    OPJ_INT32 ** lData = (OPJ_INT32 **) pData;
+    OPJ_UINT32 lMultiplicator = 1 << 13;
+    OPJ_INT32 * lMctPtr;
 
     OPJ_ARG_NOT_USED(isSigned);
 
-       lCurrentData = (OPJ_INT32 *) opj_malloc((pNbComp + lNbMatCoeff) * sizeof(OPJ_INT32));
-       if (! lCurrentData) {
-               return OPJ_FALSE;
-       }
+    lCurrentData = (OPJ_INT32 *) opj_malloc((pNbComp + lNbMatCoeff) * sizeof(
+            OPJ_INT32));
+    if (! lCurrentData) {
+        return OPJ_FALSE;
+    }
 
-       lCurrentMatrix = lCurrentData + pNbComp;
+    lCurrentMatrix = lCurrentData + pNbComp;
 
-       for (i =0;i<lNbMatCoeff;++i) {
-               lCurrentMatrix[i] = (OPJ_INT32) (*(lMct++) * (OPJ_FLOAT32)lMultiplicator);
-       }
+    for (i = 0; i < lNbMatCoeff; ++i) {
+        lCurrentMatrix[i] = (OPJ_INT32)(*(lMct++) * (OPJ_FLOAT32)lMultiplicator);
+    }
 
-       for (i = 0; i < n; ++i)  {
-               lMctPtr = lCurrentMatrix;
-               for (j=0;j<pNbComp;++j) {
-                       lCurrentData[j] = (*(lData[j]));
-               }
+    for (i = 0; i < n; ++i)  {
+        lMctPtr = lCurrentMatrix;
+        for (j = 0; j < pNbComp; ++j) {
+            lCurrentData[j] = (*(lData[j]));
+        }
 
-               for (j=0;j<pNbComp;++j) {
-                       *(lData[j]) = 0;
-                       for (k=0;k<pNbComp;++k) {
-                               *(lData[j]) += opj_int_fix_mul(*lMctPtr, lCurrentData[k]);
-                               ++lMctPtr;
-                       }
+        for (j = 0; j < pNbComp; ++j) {
+            *(lData[j]) = 0;
+            for (k = 0; k < pNbComp; ++k) {
+                *(lData[j]) += opj_int_fix_mul(*lMctPtr, lCurrentData[k]);
+                ++lMctPtr;
+            }
 
-                       ++lData[j];
-               }
-       }
+            ++lData[j];
+        }
+    }
 
-       opj_free(lCurrentData);
+    opj_free(lCurrentData);
 
-       return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 OPJ_BOOL opj_mct_decode_custom(
-                                          OPJ_BYTE * pDecodingData,
-                                          OPJ_UINT32 n,
-                                          OPJ_BYTE ** pData,
-                                          OPJ_UINT32 pNbComp,
-                                          OPJ_UINT32 isSigned)
+    OPJ_BYTE * pDecodingData,
+    OPJ_UINT32 n,
+    OPJ_BYTE ** pData,
+    OPJ_UINT32 pNbComp,
+    OPJ_UINT32 isSigned)
 {
-       OPJ_FLOAT32 * lMct;
-       OPJ_UINT32 i;
-       OPJ_UINT32 j;
-       OPJ_UINT32 k;
+    OPJ_FLOAT32 * lMct;
+    OPJ_UINT32 i;
+    OPJ_UINT32 j;
+    OPJ_UINT32 k;
 
-       OPJ_FLOAT32 * lCurrentData = 00;
-       OPJ_FLOAT32 * lCurrentResult = 00;
-       OPJ_FLOAT32 ** lData = (OPJ_FLOAT32 **) pData;
+    OPJ_FLOAT32 * lCurrentData = 00;
+    OPJ_FLOAT32 * lCurrentResult = 00;
+    OPJ_FLOAT32 ** lData = (OPJ_FLOAT32 **) pData;
 
     OPJ_ARG_NOT_USED(isSigned);
 
-       lCurrentData = (OPJ_FLOAT32 *) opj_malloc (2 * pNbComp * sizeof(OPJ_FLOAT32));
-       if (! lCurrentData) {
-               return OPJ_FALSE;
-       }
-       lCurrentResult = lCurrentData + pNbComp;
-
-       for (i = 0; i < n; ++i) {
-               lMct = (OPJ_FLOAT32 *) pDecodingData;
-               for (j=0;j<pNbComp;++j) {
-                       lCurrentData[j] = (OPJ_FLOAT32) (*(lData[j]));
-               }
-               for (j=0;j<pNbComp;++j) {
-                       lCurrentResult[j] = 0;
-                       for     (k=0;k<pNbComp;++k)     {
-                               lCurrentResult[j] += *(lMct++) * lCurrentData[k];
-                       }
-                       *(lData[j]++) = (OPJ_FLOAT32) (lCurrentResult[j]);
-               }
-       }
-       opj_free(lCurrentData);
-       return OPJ_TRUE;
+    lCurrentData = (OPJ_FLOAT32 *) opj_malloc(2 * pNbComp * sizeof(OPJ_FLOAT32));
+    if (! lCurrentData) {
+        return OPJ_FALSE;
+    }
+    lCurrentResult = lCurrentData + pNbComp;
+
+    for (i = 0; i < n; ++i) {
+        lMct = (OPJ_FLOAT32 *) pDecodingData;
+        for (j = 0; j < pNbComp; ++j) {
+            lCurrentData[j] = (OPJ_FLOAT32)(*(lData[j]));
+        }
+        for (j = 0; j < pNbComp; ++j) {
+            lCurrentResult[j] = 0;
+            for (k = 0; k < pNbComp; ++k) {
+                lCurrentResult[j] += *(lMct++) * lCurrentData[k];
+            }
+            *(lData[j]++) = (OPJ_FLOAT32)(lCurrentResult[j]);
+        }
+    }
+    opj_free(lCurrentData);
+    return OPJ_TRUE;
 }
 
-void opj_calculate_norms(      OPJ_FLOAT64 * pNorms,
-                                                       OPJ_UINT32 pNbComps,
-                                                       OPJ_FLOAT32 * pMatrix)
+void opj_calculate_norms(OPJ_FLOAT64 * pNorms,
+                         OPJ_UINT32 pNbComps,
+                         OPJ_FLOAT32 * pMatrix)
 {
-       OPJ_UINT32 i,j,lIndex;
-       OPJ_FLOAT32 lCurrentValue;
-       OPJ_FLOAT64 * lNorms = (OPJ_FLOAT64 *) pNorms;
-       OPJ_FLOAT32 * lMatrix = (OPJ_FLOAT32 *) pMatrix;
-
-       for     (i=0;i<pNbComps;++i) {
-               lNorms[i] = 0;
-               lIndex = i;
-
-               for     (j=0;j<pNbComps;++j) {
-                       lCurrentValue = lMatrix[lIndex];
-                       lIndex += pNbComps;
-                       lNorms[i] += lCurrentValue * lCurrentValue;
-               }
-               lNorms[i] = sqrt(lNorms[i]);
-       }
+    OPJ_UINT32 i, j, lIndex;
+    OPJ_FLOAT32 lCurrentValue;
+    OPJ_FLOAT64 * lNorms = (OPJ_FLOAT64 *) pNorms;
+    OPJ_FLOAT32 * lMatrix = (OPJ_FLOAT32 *) pMatrix;
+
+    for (i = 0; i < pNbComps; ++i) {
+        lNorms[i] = 0;
+        lIndex = i;
+
+        for (j = 0; j < pNbComps; ++j) {
+            lCurrentValue = lMatrix[lIndex];
+            lIndex += pNbComps;
+            lNorms[i] += lCurrentValue * lCurrentValue;
+        }
+        lNorms[i] = sqrt(lNorms[i]);
+    }
 }
index 7119c3a5eec753a3f751480dba02f1784750d14c..64a44ef5488512e74b849eaa5b00067468dbb701 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * Copyright (c) 2008, Jerome Fimes, Communications & Systemes <jerome.fimes@c-s.fr>
@@ -78,369 +78,391 @@ static void opj_mqc_setbits(opj_mqc_t *mqc);
 /* This array defines all the possible states for a context. */
 /* </summary> */
 static opj_mqc_state_t mqc_states[47 * 2] = {
-       {0x5601, 0, &mqc_states[2], &mqc_states[3]},
-       {0x5601, 1, &mqc_states[3], &mqc_states[2]},
-       {0x3401, 0, &mqc_states[4], &mqc_states[12]},
-       {0x3401, 1, &mqc_states[5], &mqc_states[13]},
-       {0x1801, 0, &mqc_states[6], &mqc_states[18]},
-       {0x1801, 1, &mqc_states[7], &mqc_states[19]},
-       {0x0ac1, 0, &mqc_states[8], &mqc_states[24]},
-       {0x0ac1, 1, &mqc_states[9], &mqc_states[25]},
-       {0x0521, 0, &mqc_states[10], &mqc_states[58]},
-       {0x0521, 1, &mqc_states[11], &mqc_states[59]},
-       {0x0221, 0, &mqc_states[76], &mqc_states[66]},
-       {0x0221, 1, &mqc_states[77], &mqc_states[67]},
-       {0x5601, 0, &mqc_states[14], &mqc_states[13]},
-       {0x5601, 1, &mqc_states[15], &mqc_states[12]},
-       {0x5401, 0, &mqc_states[16], &mqc_states[28]},
-       {0x5401, 1, &mqc_states[17], &mqc_states[29]},
-       {0x4801, 0, &mqc_states[18], &mqc_states[28]},
-       {0x4801, 1, &mqc_states[19], &mqc_states[29]},
-       {0x3801, 0, &mqc_states[20], &mqc_states[28]},
-       {0x3801, 1, &mqc_states[21], &mqc_states[29]},
-       {0x3001, 0, &mqc_states[22], &mqc_states[34]},
-       {0x3001, 1, &mqc_states[23], &mqc_states[35]},
-       {0x2401, 0, &mqc_states[24], &mqc_states[36]},
-       {0x2401, 1, &mqc_states[25], &mqc_states[37]},
-       {0x1c01, 0, &mqc_states[26], &mqc_states[40]},
-       {0x1c01, 1, &mqc_states[27], &mqc_states[41]},
-       {0x1601, 0, &mqc_states[58], &mqc_states[42]},
-       {0x1601, 1, &mqc_states[59], &mqc_states[43]},
-       {0x5601, 0, &mqc_states[30], &mqc_states[29]},
-       {0x5601, 1, &mqc_states[31], &mqc_states[28]},
-       {0x5401, 0, &mqc_states[32], &mqc_states[28]},
-       {0x5401, 1, &mqc_states[33], &mqc_states[29]},
-       {0x5101, 0, &mqc_states[34], &mqc_states[30]},
-       {0x5101, 1, &mqc_states[35], &mqc_states[31]},
-       {0x4801, 0, &mqc_states[36], &mqc_states[32]},
-       {0x4801, 1, &mqc_states[37], &mqc_states[33]},
-       {0x3801, 0, &mqc_states[38], &mqc_states[34]},
-       {0x3801, 1, &mqc_states[39], &mqc_states[35]},
-       {0x3401, 0, &mqc_states[40], &mqc_states[36]},
-       {0x3401, 1, &mqc_states[41], &mqc_states[37]},
-       {0x3001, 0, &mqc_states[42], &mqc_states[38]},
-       {0x3001, 1, &mqc_states[43], &mqc_states[39]},
-       {0x2801, 0, &mqc_states[44], &mqc_states[38]},
-       {0x2801, 1, &mqc_states[45], &mqc_states[39]},
-       {0x2401, 0, &mqc_states[46], &mqc_states[40]},
-       {0x2401, 1, &mqc_states[47], &mqc_states[41]},
-       {0x2201, 0, &mqc_states[48], &mqc_states[42]},
-       {0x2201, 1, &mqc_states[49], &mqc_states[43]},
-       {0x1c01, 0, &mqc_states[50], &mqc_states[44]},
-       {0x1c01, 1, &mqc_states[51], &mqc_states[45]},
-       {0x1801, 0, &mqc_states[52], &mqc_states[46]},
-       {0x1801, 1, &mqc_states[53], &mqc_states[47]},
-       {0x1601, 0, &mqc_states[54], &mqc_states[48]},
-       {0x1601, 1, &mqc_states[55], &mqc_states[49]},
-       {0x1401, 0, &mqc_states[56], &mqc_states[50]},
-       {0x1401, 1, &mqc_states[57], &mqc_states[51]},
-       {0x1201, 0, &mqc_states[58], &mqc_states[52]},
-       {0x1201, 1, &mqc_states[59], &mqc_states[53]},
-       {0x1101, 0, &mqc_states[60], &mqc_states[54]},
-       {0x1101, 1, &mqc_states[61], &mqc_states[55]},
-       {0x0ac1, 0, &mqc_states[62], &mqc_states[56]},
-       {0x0ac1, 1, &mqc_states[63], &mqc_states[57]},
-       {0x09c1, 0, &mqc_states[64], &mqc_states[58]},
-       {0x09c1, 1, &mqc_states[65], &mqc_states[59]},
-       {0x08a1, 0, &mqc_states[66], &mqc_states[60]},
-       {0x08a1, 1, &mqc_states[67], &mqc_states[61]},
-       {0x0521, 0, &mqc_states[68], &mqc_states[62]},
-       {0x0521, 1, &mqc_states[69], &mqc_states[63]},
-       {0x0441, 0, &mqc_states[70], &mqc_states[64]},
-       {0x0441, 1, &mqc_states[71], &mqc_states[65]},
-       {0x02a1, 0, &mqc_states[72], &mqc_states[66]},
-       {0x02a1, 1, &mqc_states[73], &mqc_states[67]},
-       {0x0221, 0, &mqc_states[74], &mqc_states[68]},
-       {0x0221, 1, &mqc_states[75], &mqc_states[69]},
-       {0x0141, 0, &mqc_states[76], &mqc_states[70]},
-       {0x0141, 1, &mqc_states[77], &mqc_states[71]},
-       {0x0111, 0, &mqc_states[78], &mqc_states[72]},
-       {0x0111, 1, &mqc_states[79], &mqc_states[73]},
-       {0x0085, 0, &mqc_states[80], &mqc_states[74]},
-       {0x0085, 1, &mqc_states[81], &mqc_states[75]},
-       {0x0049, 0, &mqc_states[82], &mqc_states[76]},
-       {0x0049, 1, &mqc_states[83], &mqc_states[77]},
-       {0x0025, 0, &mqc_states[84], &mqc_states[78]},
-       {0x0025, 1, &mqc_states[85], &mqc_states[79]},
-       {0x0015, 0, &mqc_states[86], &mqc_states[80]},
-       {0x0015, 1, &mqc_states[87], &mqc_states[81]},
-       {0x0009, 0, &mqc_states[88], &mqc_states[82]},
-       {0x0009, 1, &mqc_states[89], &mqc_states[83]},
-       {0x0005, 0, &mqc_states[90], &mqc_states[84]},
-       {0x0005, 1, &mqc_states[91], &mqc_states[85]},
-       {0x0001, 0, &mqc_states[90], &mqc_states[86]},
-       {0x0001, 1, &mqc_states[91], &mqc_states[87]},
-       {0x5601, 0, &mqc_states[92], &mqc_states[92]},
-       {0x5601, 1, &mqc_states[93], &mqc_states[93]},
+    {0x5601, 0, &mqc_states[2], &mqc_states[3]},
+    {0x5601, 1, &mqc_states[3], &mqc_states[2]},
+    {0x3401, 0, &mqc_states[4], &mqc_states[12]},
+    {0x3401, 1, &mqc_states[5], &mqc_states[13]},
+    {0x1801, 0, &mqc_states[6], &mqc_states[18]},
+    {0x1801, 1, &mqc_states[7], &mqc_states[19]},
+    {0x0ac1, 0, &mqc_states[8], &mqc_states[24]},
+    {0x0ac1, 1, &mqc_states[9], &mqc_states[25]},
+    {0x0521, 0, &mqc_states[10], &mqc_states[58]},
+    {0x0521, 1, &mqc_states[11], &mqc_states[59]},
+    {0x0221, 0, &mqc_states[76], &mqc_states[66]},
+    {0x0221, 1, &mqc_states[77], &mqc_states[67]},
+    {0x5601, 0, &mqc_states[14], &mqc_states[13]},
+    {0x5601, 1, &mqc_states[15], &mqc_states[12]},
+    {0x5401, 0, &mqc_states[16], &mqc_states[28]},
+    {0x5401, 1, &mqc_states[17], &mqc_states[29]},
+    {0x4801, 0, &mqc_states[18], &mqc_states[28]},
+    {0x4801, 1, &mqc_states[19], &mqc_states[29]},
+    {0x3801, 0, &mqc_states[20], &mqc_states[28]},
+    {0x3801, 1, &mqc_states[21], &mqc_states[29]},
+    {0x3001, 0, &mqc_states[22], &mqc_states[34]},
+    {0x3001, 1, &mqc_states[23], &mqc_states[35]},
+    {0x2401, 0, &mqc_states[24], &mqc_states[36]},
+    {0x2401, 1, &mqc_states[25], &mqc_states[37]},
+    {0x1c01, 0, &mqc_states[26], &mqc_states[40]},
+    {0x1c01, 1, &mqc_states[27], &mqc_states[41]},
+    {0x1601, 0, &mqc_states[58], &mqc_states[42]},
+    {0x1601, 1, &mqc_states[59], &mqc_states[43]},
+    {0x5601, 0, &mqc_states[30], &mqc_states[29]},
+    {0x5601, 1, &mqc_states[31], &mqc_states[28]},
+    {0x5401, 0, &mqc_states[32], &mqc_states[28]},
+    {0x5401, 1, &mqc_states[33], &mqc_states[29]},
+    {0x5101, 0, &mqc_states[34], &mqc_states[30]},
+    {0x5101, 1, &mqc_states[35], &mqc_states[31]},
+    {0x4801, 0, &mqc_states[36], &mqc_states[32]},
+    {0x4801, 1, &mqc_states[37], &mqc_states[33]},
+    {0x3801, 0, &mqc_states[38], &mqc_states[34]},
+    {0x3801, 1, &mqc_states[39], &mqc_states[35]},
+    {0x3401, 0, &mqc_states[40], &mqc_states[36]},
+    {0x3401, 1, &mqc_states[41], &mqc_states[37]},
+    {0x3001, 0, &mqc_states[42], &mqc_states[38]},
+    {0x3001, 1, &mqc_states[43], &mqc_states[39]},
+    {0x2801, 0, &mqc_states[44], &mqc_states[38]},
+    {0x2801, 1, &mqc_states[45], &mqc_states[39]},
+    {0x2401, 0, &mqc_states[46], &mqc_states[40]},
+    {0x2401, 1, &mqc_states[47], &mqc_states[41]},
+    {0x2201, 0, &mqc_states[48], &mqc_states[42]},
+    {0x2201, 1, &mqc_states[49], &mqc_states[43]},
+    {0x1c01, 0, &mqc_states[50], &mqc_states[44]},
+    {0x1c01, 1, &mqc_states[51], &mqc_states[45]},
+    {0x1801, 0, &mqc_states[52], &mqc_states[46]},
+    {0x1801, 1, &mqc_states[53], &mqc_states[47]},
+    {0x1601, 0, &mqc_states[54], &mqc_states[48]},
+    {0x1601, 1, &mqc_states[55], &mqc_states[49]},
+    {0x1401, 0, &mqc_states[56], &mqc_states[50]},
+    {0x1401, 1, &mqc_states[57], &mqc_states[51]},
+    {0x1201, 0, &mqc_states[58], &mqc_states[52]},
+    {0x1201, 1, &mqc_states[59], &mqc_states[53]},
+    {0x1101, 0, &mqc_states[60], &mqc_states[54]},
+    {0x1101, 1, &mqc_states[61], &mqc_states[55]},
+    {0x0ac1, 0, &mqc_states[62], &mqc_states[56]},
+    {0x0ac1, 1, &mqc_states[63], &mqc_states[57]},
+    {0x09c1, 0, &mqc_states[64], &mqc_states[58]},
+    {0x09c1, 1, &mqc_states[65], &mqc_states[59]},
+    {0x08a1, 0, &mqc_states[66], &mqc_states[60]},
+    {0x08a1, 1, &mqc_states[67], &mqc_states[61]},
+    {0x0521, 0, &mqc_states[68], &mqc_states[62]},
+    {0x0521, 1, &mqc_states[69], &mqc_states[63]},
+    {0x0441, 0, &mqc_states[70], &mqc_states[64]},
+    {0x0441, 1, &mqc_states[71], &mqc_states[65]},
+    {0x02a1, 0, &mqc_states[72], &mqc_states[66]},
+    {0x02a1, 1, &mqc_states[73], &mqc_states[67]},
+    {0x0221, 0, &mqc_states[74], &mqc_states[68]},
+    {0x0221, 1, &mqc_states[75], &mqc_states[69]},
+    {0x0141, 0, &mqc_states[76], &mqc_states[70]},
+    {0x0141, 1, &mqc_states[77], &mqc_states[71]},
+    {0x0111, 0, &mqc_states[78], &mqc_states[72]},
+    {0x0111, 1, &mqc_states[79], &mqc_states[73]},
+    {0x0085, 0, &mqc_states[80], &mqc_states[74]},
+    {0x0085, 1, &mqc_states[81], &mqc_states[75]},
+    {0x0049, 0, &mqc_states[82], &mqc_states[76]},
+    {0x0049, 1, &mqc_states[83], &mqc_states[77]},
+    {0x0025, 0, &mqc_states[84], &mqc_states[78]},
+    {0x0025, 1, &mqc_states[85], &mqc_states[79]},
+    {0x0015, 0, &mqc_states[86], &mqc_states[80]},
+    {0x0015, 1, &mqc_states[87], &mqc_states[81]},
+    {0x0009, 0, &mqc_states[88], &mqc_states[82]},
+    {0x0009, 1, &mqc_states[89], &mqc_states[83]},
+    {0x0005, 0, &mqc_states[90], &mqc_states[84]},
+    {0x0005, 1, &mqc_states[91], &mqc_states[85]},
+    {0x0001, 0, &mqc_states[90], &mqc_states[86]},
+    {0x0001, 1, &mqc_states[91], &mqc_states[87]},
+    {0x5601, 0, &mqc_states[92], &mqc_states[92]},
+    {0x5601, 1, &mqc_states[93], &mqc_states[93]},
 };
 
-/* 
+/*
 ==========================================================
    local functions
 ==========================================================
 */
 
-static void opj_mqc_byteout(opj_mqc_t *mqc) {
-       /* avoid accessing uninitialized memory*/
-       if (mqc->bp == mqc->start-1) {
-               mqc->bp++;
-               *mqc->bp = (OPJ_BYTE)(mqc->c >> 19);
-               mqc->c &= 0x7ffff;
-               mqc->ct = 8;
-       }
-       else if (*mqc->bp == 0xff) {
-               mqc->bp++;
-               *mqc->bp = (OPJ_BYTE)(mqc->c >> 20);
-               mqc->c &= 0xfffff;
-               mqc->ct = 7;
-       } else {
-               if ((mqc->c & 0x8000000) == 0) {        
-                       mqc->bp++;
-                       *mqc->bp = (OPJ_BYTE)(mqc->c >> 19);
-                       mqc->c &= 0x7ffff;
-                       mqc->ct = 8;
-               } else {
-                       (*mqc->bp)++;
-                       if (*mqc->bp == 0xff) {
-                               mqc->c &= 0x7ffffff;
-                               mqc->bp++;
-                               *mqc->bp = (OPJ_BYTE)(mqc->c >> 20);
-                               mqc->c &= 0xfffff;
-                               mqc->ct = 7;
-                       } else {
-                               mqc->bp++;
-                               *mqc->bp = (OPJ_BYTE)(mqc->c >> 19);
-                               mqc->c &= 0x7ffff;
-                               mqc->ct = 8;
-                       }
-               }
-       }
+static void opj_mqc_byteout(opj_mqc_t *mqc)
+{
+    /* avoid accessing uninitialized memory*/
+    if (mqc->bp == mqc->start - 1) {
+        mqc->bp++;
+        *mqc->bp = (OPJ_BYTE)(mqc->c >> 19);
+        mqc->c &= 0x7ffff;
+        mqc->ct = 8;
+    } else if (*mqc->bp == 0xff) {
+        mqc->bp++;
+        *mqc->bp = (OPJ_BYTE)(mqc->c >> 20);
+        mqc->c &= 0xfffff;
+        mqc->ct = 7;
+    } else {
+        if ((mqc->c & 0x8000000) == 0) {
+            mqc->bp++;
+            *mqc->bp = (OPJ_BYTE)(mqc->c >> 19);
+            mqc->c &= 0x7ffff;
+            mqc->ct = 8;
+        } else {
+            (*mqc->bp)++;
+            if (*mqc->bp == 0xff) {
+                mqc->c &= 0x7ffffff;
+                mqc->bp++;
+                *mqc->bp = (OPJ_BYTE)(mqc->c >> 20);
+                mqc->c &= 0xfffff;
+                mqc->ct = 7;
+            } else {
+                mqc->bp++;
+                *mqc->bp = (OPJ_BYTE)(mqc->c >> 19);
+                mqc->c &= 0x7ffff;
+                mqc->ct = 8;
+            }
+        }
+    }
 }
 
-static void opj_mqc_renorme(opj_mqc_t *mqc) {
-       do {
-               mqc->a <<= 1;
-               mqc->c <<= 1;
-               mqc->ct--;
-               if (mqc->ct == 0) {
-                       opj_mqc_byteout(mqc);
-               }
-       } while ((mqc->a & 0x8000) == 0);
+static void opj_mqc_renorme(opj_mqc_t *mqc)
+{
+    do {
+        mqc->a <<= 1;
+        mqc->c <<= 1;
+        mqc->ct--;
+        if (mqc->ct == 0) {
+            opj_mqc_byteout(mqc);
+        }
+    } while ((mqc->a & 0x8000) == 0);
 }
 
-static void opj_mqc_codemps(opj_mqc_t *mqc) {
-       mqc->a -= (*mqc->curctx)->qeval;
-       if ((mqc->a & 0x8000) == 0) {
-               if (mqc->a < (*mqc->curctx)->qeval) {
-                       mqc->a = (*mqc->curctx)->qeval;
-               } else {
-                       mqc->c += (*mqc->curctx)->qeval;
-               }
-               *mqc->curctx = (*mqc->curctx)->nmps;
-               opj_mqc_renorme(mqc);
-       } else {
-               mqc->c += (*mqc->curctx)->qeval;
-       }
+static void opj_mqc_codemps(opj_mqc_t *mqc)
+{
+    mqc->a -= (*mqc->curctx)->qeval;
+    if ((mqc->a & 0x8000) == 0) {
+        if (mqc->a < (*mqc->curctx)->qeval) {
+            mqc->a = (*mqc->curctx)->qeval;
+        } else {
+            mqc->c += (*mqc->curctx)->qeval;
+        }
+        *mqc->curctx = (*mqc->curctx)->nmps;
+        opj_mqc_renorme(mqc);
+    } else {
+        mqc->c += (*mqc->curctx)->qeval;
+    }
 }
 
-static void opj_mqc_codelps(opj_mqc_t *mqc) {
-       mqc->a -= (*mqc->curctx)->qeval;
-       if (mqc->a < (*mqc->curctx)->qeval) {
-               mqc->c += (*mqc->curctx)->qeval;
-       } else {
-               mqc->a = (*mqc->curctx)->qeval;
-       }
-       *mqc->curctx = (*mqc->curctx)->nlps;
-       opj_mqc_renorme(mqc);
+static void opj_mqc_codelps(opj_mqc_t *mqc)
+{
+    mqc->a -= (*mqc->curctx)->qeval;
+    if (mqc->a < (*mqc->curctx)->qeval) {
+        mqc->c += (*mqc->curctx)->qeval;
+    } else {
+        mqc->a = (*mqc->curctx)->qeval;
+    }
+    *mqc->curctx = (*mqc->curctx)->nlps;
+    opj_mqc_renorme(mqc);
 }
 
-static void opj_mqc_setbits(opj_mqc_t *mqc) {
-       OPJ_UINT32 tempc = mqc->c + mqc->a;
-       mqc->c |= 0xffff;
-       if (mqc->c >= tempc) {
-               mqc->c -= 0x8000;
-       }
+static void opj_mqc_setbits(opj_mqc_t *mqc)
+{
+    OPJ_UINT32 tempc = mqc->c + mqc->a;
+    mqc->c |= 0xffff;
+    if (mqc->c >= tempc) {
+        mqc->c -= 0x8000;
+    }
 }
 
-/* 
+/*
 ==========================================================
    MQ-Coder interface
 ==========================================================
 */
 
-opj_mqc_t* opj_mqc_create(void) {
-       opj_mqc_t *mqc = (opj_mqc_t*)opj_malloc(sizeof(opj_mqc_t));
+opj_mqc_t* opj_mqc_create(void)
+{
+    opj_mqc_t *mqc = (opj_mqc_t*)opj_malloc(sizeof(opj_mqc_t));
 #ifdef MQC_PERF_OPT
-       if (mqc) {
-               mqc->buffer = NULL;
-       }
+    if (mqc) {
+        mqc->buffer = NULL;
+    }
 #endif
-       return mqc;
+    return mqc;
 }
 
-void opj_mqc_destroy(opj_mqc_t *mqc) {
-       if(mqc) {
+void opj_mqc_destroy(opj_mqc_t *mqc)
+{
+    if (mqc) {
 #ifdef MQC_PERF_OPT
-               if (mqc->buffer) {
-                       opj_free(mqc->buffer);
-               }
+        if (mqc->buffer) {
+            opj_free(mqc->buffer);
+        }
 #endif
-               opj_free(mqc);
-       }
+        opj_free(mqc);
+    }
 }
 
-OPJ_UINT32 opj_mqc_numbytes(opj_mqc_t *mqc) {
-       const ptrdiff_t diff = mqc->bp - mqc->start;
+OPJ_UINT32 opj_mqc_numbytes(opj_mqc_t *mqc)
+{
+    const ptrdiff_t diff = mqc->bp - mqc->start;
 #if 0
-  assert( diff <= 0xffffffff && diff >= 0 ); /* UINT32_MAX */
+    assert(diff <= 0xffffffff && diff >= 0);   /* UINT32_MAX */
 #endif
-       return (OPJ_UINT32)diff;
+    return (OPJ_UINT32)diff;
 }
 
-void opj_mqc_init_enc(opj_mqc_t *mqc, OPJ_BYTE *bp) {
+void opj_mqc_init_enc(opj_mqc_t *mqc, OPJ_BYTE *bp)
+{
     /* TODO MSD: need to take a look to the v2 version */
-       opj_mqc_setcurctx(mqc, 0);
-       mqc->a = 0x8000;
-       mqc->c = 0;
-       mqc->bp = bp - 1;
-       mqc->ct = 12;
-       mqc->start = bp;
+    opj_mqc_setcurctx(mqc, 0);
+    mqc->a = 0x8000;
+    mqc->c = 0;
+    mqc->bp = bp - 1;
+    mqc->ct = 12;
+    mqc->start = bp;
 }
 
-void opj_mqc_encode(opj_mqc_t *mqc, OPJ_UINT32 d) {
-       if ((*mqc->curctx)->mps == d) {
-               opj_mqc_codemps(mqc);
-       } else {
-               opj_mqc_codelps(mqc);
-       }
+void opj_mqc_encode(opj_mqc_t *mqc, OPJ_UINT32 d)
+{
+    if ((*mqc->curctx)->mps == d) {
+        opj_mqc_codemps(mqc);
+    } else {
+        opj_mqc_codelps(mqc);
+    }
 }
 
-void opj_mqc_flush(opj_mqc_t *mqc) {
-       opj_mqc_setbits(mqc);
-       mqc->c <<= mqc->ct;
-       opj_mqc_byteout(mqc);
-       mqc->c <<= mqc->ct;
-       opj_mqc_byteout(mqc);
-       
-       if (*mqc->bp != 0xff) {
-               mqc->bp++;
-       }
+void opj_mqc_flush(opj_mqc_t *mqc)
+{
+    opj_mqc_setbits(mqc);
+    mqc->c <<= mqc->ct;
+    opj_mqc_byteout(mqc);
+    mqc->c <<= mqc->ct;
+    opj_mqc_byteout(mqc);
+
+    if (*mqc->bp != 0xff) {
+        mqc->bp++;
+    }
 }
 
-void opj_mqc_bypass_init_enc(opj_mqc_t *mqc) {
-       mqc->c = 0;
-       mqc->ct = 8;
-       /*if (*mqc->bp == 0xff) {
-       mqc->ct = 7;
+void opj_mqc_bypass_init_enc(opj_mqc_t *mqc)
+{
+    mqc->c = 0;
+    mqc->ct = 8;
+    /*if (*mqc->bp == 0xff) {
+    mqc->ct = 7;
      } */
 }
 
-void opj_mqc_bypass_enc(opj_mqc_t *mqc, OPJ_UINT32 d) {
-       mqc->ct--;
-       mqc->c = mqc->c + (d << mqc->ct);
-       if (mqc->ct == 0) {
-               mqc->bp++;
-               *mqc->bp = (OPJ_BYTE)mqc->c;
-               mqc->ct = 8;
-               if (*mqc->bp == 0xff) {
-                       mqc->ct = 7;
-               }
-               mqc->c = 0;
-       }
+void opj_mqc_bypass_enc(opj_mqc_t *mqc, OPJ_UINT32 d)
+{
+    mqc->ct--;
+    mqc->c = mqc->c + (d << mqc->ct);
+    if (mqc->ct == 0) {
+        mqc->bp++;
+        *mqc->bp = (OPJ_BYTE)mqc->c;
+        mqc->ct = 8;
+        if (*mqc->bp == 0xff) {
+            mqc->ct = 7;
+        }
+        mqc->c = 0;
+    }
 }
 
-OPJ_UINT32 opj_mqc_bypass_flush_enc(opj_mqc_t *mqc) {
-       OPJ_BYTE bit_padding;
-       
-       bit_padding = 0;
-       
-       if (mqc->ct != 0) {
-               while (mqc->ct > 0) {
-                       mqc->ct--;
-                       mqc->c += (OPJ_UINT32)(bit_padding << mqc->ct);
-                       bit_padding = (bit_padding + 1) & 0x01;
-               }
-               mqc->bp++;
-               *mqc->bp = (OPJ_BYTE)mqc->c;
-               mqc->ct = 8;
-               mqc->c = 0;
-       }
-       
-       return 1;
+OPJ_UINT32 opj_mqc_bypass_flush_enc(opj_mqc_t *mqc)
+{
+    OPJ_BYTE bit_padding;
+
+    bit_padding = 0;
+
+    if (mqc->ct != 0) {
+        while (mqc->ct > 0) {
+            mqc->ct--;
+            mqc->c += (OPJ_UINT32)(bit_padding << mqc->ct);
+            bit_padding = (bit_padding + 1) & 0x01;
+        }
+        mqc->bp++;
+        *mqc->bp = (OPJ_BYTE)mqc->c;
+        mqc->ct = 8;
+        mqc->c = 0;
+    }
+
+    return 1;
 }
 
-void opj_mqc_reset_enc(opj_mqc_t *mqc) {
-       opj_mqc_resetstates(mqc);
-       opj_mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46);
-       opj_mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3);
-       opj_mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4);
+void opj_mqc_reset_enc(opj_mqc_t *mqc)
+{
+    opj_mqc_resetstates(mqc);
+    opj_mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46);
+    opj_mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3);
+    opj_mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4);
 }
 
-OPJ_UINT32 opj_mqc_restart_enc(opj_mqc_t *mqc) {
-       OPJ_UINT32 correction = 1;
-       
-       /* <flush part> */
-       OPJ_INT32 n = (OPJ_INT32)(27 - 15 - mqc->ct);
-       mqc->c <<= mqc->ct;
-       while (n > 0) {
-               opj_mqc_byteout(mqc);
-               n -= (OPJ_INT32)mqc->ct;
-               mqc->c <<= mqc->ct;
-       }
-       opj_mqc_byteout(mqc);
-       
-       return correction;
+OPJ_UINT32 opj_mqc_restart_enc(opj_mqc_t *mqc)
+{
+    OPJ_UINT32 correction = 1;
+
+    /* <flush part> */
+    OPJ_INT32 n = (OPJ_INT32)(27 - 15 - mqc->ct);
+    mqc->c <<= mqc->ct;
+    while (n > 0) {
+        opj_mqc_byteout(mqc);
+        n -= (OPJ_INT32)mqc->ct;
+        mqc->c <<= mqc->ct;
+    }
+    opj_mqc_byteout(mqc);
+
+    return correction;
 }
 
-void opj_mqc_restart_init_enc(opj_mqc_t *mqc) {
-       /* <Re-init part> */
-       opj_mqc_setcurctx(mqc, 0);
-       mqc->a = 0x8000;
-       mqc->c = 0;
-       mqc->ct = 12;
-       mqc->bp--;
-       if (*mqc->bp == 0xff) {
-               mqc->ct = 13;
-       }
+void opj_mqc_restart_init_enc(opj_mqc_t *mqc)
+{
+    /* <Re-init part> */
+    opj_mqc_setcurctx(mqc, 0);
+    mqc->a = 0x8000;
+    mqc->c = 0;
+    mqc->ct = 12;
+    mqc->bp--;
+    if (*mqc->bp == 0xff) {
+        mqc->ct = 13;
+    }
 }
 
-void opj_mqc_erterm_enc(opj_mqc_t *mqc) {
-       OPJ_INT32 k = (OPJ_INT32)(11 - mqc->ct + 1);
-       
-       while (k > 0) {
-               mqc->c <<= mqc->ct;
-               mqc->ct = 0;
-               opj_mqc_byteout(mqc);
-               k -= (OPJ_INT32)mqc->ct;
-       }
-       
-       if (*mqc->bp != 0xff) {
-               opj_mqc_byteout(mqc);
-       }
+void opj_mqc_erterm_enc(opj_mqc_t *mqc)
+{
+    OPJ_INT32 k = (OPJ_INT32)(11 - mqc->ct + 1);
+
+    while (k > 0) {
+        mqc->c <<= mqc->ct;
+        mqc->ct = 0;
+        opj_mqc_byteout(mqc);
+        k -= (OPJ_INT32)mqc->ct;
+    }
+
+    if (*mqc->bp != 0xff) {
+        opj_mqc_byteout(mqc);
+    }
 }
 
-void opj_mqc_segmark_enc(opj_mqc_t *mqc) {
-       OPJ_UINT32 i;
-       opj_mqc_setcurctx(mqc, 18);
-       
-       for (i = 1; i < 5; i++) {
-               opj_mqc_encode(mqc, i % 2);
-       }
+void opj_mqc_segmark_enc(opj_mqc_t *mqc)
+{
+    OPJ_UINT32 i;
+    opj_mqc_setcurctx(mqc, 18);
+
+    for (i = 1; i < 5; i++) {
+        opj_mqc_encode(mqc, i % 2);
+    }
 }
 
-OPJ_BOOL opj_mqc_init_dec(opj_mqc_t *mqc, OPJ_BYTE *bp, OPJ_UINT32 len) {
-       opj_mqc_setcurctx(mqc, 0);
-       mqc->start = bp;
-       mqc->end = bp + len;
-       mqc->bp = bp;
-       if (len==0) mqc->c = 0xff << 16;
-       else mqc->c = (OPJ_UINT32)(*mqc->bp << 16);
+OPJ_BOOL opj_mqc_init_dec(opj_mqc_t *mqc, OPJ_BYTE *bp, OPJ_UINT32 len)
+{
+    opj_mqc_setcurctx(mqc, 0);
+    mqc->start = bp;
+    mqc->end = bp + len;
+    mqc->bp = bp;
+    if (len == 0) {
+        mqc->c = 0xff << 16;
+    } else {
+        mqc->c = (OPJ_UINT32)(*mqc->bp << 16);
+    }
 
 #ifdef MQC_PERF_OPT /* TODO_MSD: check this option and put in experimental */
-       {
+    {
         OPJ_UINT32 c;
-               OPJ_UINT32 *ip;
-               OPJ_BYTE *end = mqc->end - 1;
+        OPJ_UINT32 *ip;
+        OPJ_BYTE *end = mqc->end - 1;
         void* new_buffer = opj_realloc(mqc->buffer, (len + 1) * sizeof(OPJ_UINT32));
         if (! new_buffer) {
             opj_free(mqc->buffer);
@@ -448,54 +470,57 @@ OPJ_BOOL opj_mqc_init_dec(opj_mqc_t *mqc, OPJ_BYTE *bp, OPJ_UINT32 len) {
             return OPJ_FALSE;
         }
         mqc->buffer = new_buffer;
-               
+
         ip = (OPJ_UINT32 *) mqc->buffer;
 
-               while (bp < end) {
-                       c = *(bp + 1);
-                       if (*bp == 0xff) {
-                               if (c > 0x8f) {
-                                       break;
-                               } else {
-                                       *ip = 0x00000017 | (c << 9);
-                               }
-                       } else {
-                               *ip = 0x00000018 | (c << 8);
-                       }
-                       bp++;
-                       ip++;
-               }
-
-               /* Handle last byte of data */
-               c = 0xff;
-               if (*bp == 0xff) {
-                       *ip = 0x0000ff18;
-               } else {
-                       bp++;
-                       *ip = 0x00000018 | (c << 8);
-               }
-               ip++;
-
-               *ip = 0x0000ff08;
-               mqc->bp = mqc->buffer;
-       }
+        while (bp < end) {
+            c = *(bp + 1);
+            if (*bp == 0xff) {
+                if (c > 0x8f) {
+                    break;
+                } else {
+                    *ip = 0x00000017 | (c << 9);
+                }
+            } else {
+                *ip = 0x00000018 | (c << 8);
+            }
+            bp++;
+            ip++;
+        }
+
+        /* Handle last byte of data */
+        c = 0xff;
+        if (*bp == 0xff) {
+            *ip = 0x0000ff18;
+        } else {
+            bp++;
+            *ip = 0x00000018 | (c << 8);
+        }
+        ip++;
+
+        *ip = 0x0000ff08;
+        mqc->bp = mqc->buffer;
+    }
 #endif
-       opj_mqc_bytein(mqc);
-       mqc->c <<= 7;
-       mqc->ct -= 7;
-       mqc->a = 0x8000;
-        return OPJ_TRUE;
+    opj_mqc_bytein(mqc);
+    mqc->c <<= 7;
+    mqc->ct -= 7;
+    mqc->a = 0x8000;
+    return OPJ_TRUE;
 }
 
-void opj_mqc_resetstates(opj_mqc_t *mqc) {
-       OPJ_UINT32 i;
-       for (i = 0; i < MQC_NUMCTXS; i++) {
-               mqc->ctxs[i] = mqc_states;
-       }
+void opj_mqc_resetstates(opj_mqc_t *mqc)
+{
+    OPJ_UINT32 i;
+    for (i = 0; i < MQC_NUMCTXS; i++) {
+        mqc->ctxs[i] = mqc_states;
+    }
 }
 
-void opj_mqc_setstate(opj_mqc_t *mqc, OPJ_UINT32 ctxno, OPJ_UINT32 msb, OPJ_INT32 prob) {
-       mqc->ctxs[ctxno] = &mqc_states[msb + (OPJ_UINT32)(prob << 1)];
+void opj_mqc_setstate(opj_mqc_t *mqc, OPJ_UINT32 ctxno, OPJ_UINT32 msb,
+                      OPJ_INT32 prob)
+{
+    mqc->ctxs[ctxno] = &mqc_states[msb + (OPJ_UINT32)(prob << 1)];
 }
 
 
index 4d12540e385849b25fe3e6dab74933da8e2a6604..0071c03dcb19c652b0649fd663ec8479330eab98 100644 (file)
@@ -1,11 +1,11 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR 
+ * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR
  * Copyright (c) 2012, CS Systemes d'Information, France
  * All rights reserved.
  *
 /* ---------------------------------------------------------------------- */
 /* Functions to set the message handlers */
 
-OPJ_BOOL OPJ_CALLCONV opj_set_info_handler(    opj_codec_t * p_codec, 
-                                                                                       opj_msg_callback p_callback,
-                                                                                       void * p_user_data)
-{
-       opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
-       if(! l_codec){
-               return OPJ_FALSE;
-       }
-       
-       l_codec->m_event_mgr.info_handler = p_callback;
-       l_codec->m_event_mgr.m_info_data = p_user_data;
-       
-       return OPJ_TRUE;
-}
-
-OPJ_BOOL OPJ_CALLCONV opj_set_warning_handler( opj_codec_t * p_codec, 
-                                                                                               opj_msg_callback p_callback,
-                                                                                               void * p_user_data)
-{
-       opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
-       if (! l_codec) {
-               return OPJ_FALSE;
-       }
-       
-       l_codec->m_event_mgr.warning_handler = p_callback;
-       l_codec->m_event_mgr.m_warning_data = p_user_data;
-       
-       return OPJ_TRUE;
-}
-
-OPJ_BOOL OPJ_CALLCONV opj_set_error_handler(opj_codec_t * p_codec, 
-                                                                                       opj_msg_callback p_callback,
-                                                                                       void * p_user_data)
-{
-       opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
-       if (! l_codec) {
-               return OPJ_FALSE;
-       }
-       
-       l_codec->m_event_mgr.error_handler = p_callback;
-       l_codec->m_event_mgr.m_error_data = p_user_data;
-       
-       return OPJ_TRUE;
+OPJ_BOOL OPJ_CALLCONV opj_set_info_handler(opj_codec_t * p_codec,
+        opj_msg_callback p_callback,
+        void * p_user_data)
+{
+    opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
+    if (! l_codec) {
+        return OPJ_FALSE;
+    }
+
+    l_codec->m_event_mgr.info_handler = p_callback;
+    l_codec->m_event_mgr.m_info_data = p_user_data;
+
+    return OPJ_TRUE;
+}
+
+OPJ_BOOL OPJ_CALLCONV opj_set_warning_handler(opj_codec_t * p_codec,
+        opj_msg_callback p_callback,
+        void * p_user_data)
+{
+    opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
+    if (! l_codec) {
+        return OPJ_FALSE;
+    }
+
+    l_codec->m_event_mgr.warning_handler = p_callback;
+    l_codec->m_event_mgr.m_warning_data = p_user_data;
+
+    return OPJ_TRUE;
+}
+
+OPJ_BOOL OPJ_CALLCONV opj_set_error_handler(opj_codec_t * p_codec,
+        opj_msg_callback p_callback,
+        void * p_user_data)
+{
+    opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
+    if (! l_codec) {
+        return OPJ_FALSE;
+    }
+
+    l_codec->m_event_mgr.error_handler = p_callback;
+    l_codec->m_event_mgr.m_error_data = p_user_data;
+
+    return OPJ_TRUE;
 }
 
 /* ---------------------------------------------------------------------- */
 
-static OPJ_SIZE_T opj_read_from_file (void * p_buffer, OPJ_SIZE_T p_nb_bytes, FILE * p_file)
+static OPJ_SIZE_T opj_read_from_file(void * p_buffer, OPJ_SIZE_T p_nb_bytes,
+                                     FILE * p_file)
 {
-       OPJ_SIZE_T l_nb_read = fread(p_buffer,1,p_nb_bytes,p_file);
-       return l_nb_read ? l_nb_read : (OPJ_SIZE_T)-1;
+    OPJ_SIZE_T l_nb_read = fread(p_buffer, 1, p_nb_bytes, p_file);
+    return l_nb_read ? l_nb_read : (OPJ_SIZE_T) - 1;
 }
 
-static OPJ_UINT64 opj_get_data_length_from_file (FILE * p_file)
+static OPJ_UINT64 opj_get_data_length_from_file(FILE * p_file)
 {
-       OPJ_OFF_T file_length = 0;
+    OPJ_OFF_T file_length = 0;
 
-       OPJ_FSEEK(p_file, 0, SEEK_END);
-       file_length = (OPJ_OFF_T)OPJ_FTELL(p_file);
-       OPJ_FSEEK(p_file, 0, SEEK_SET);
+    OPJ_FSEEK(p_file, 0, SEEK_END);
+    file_length = (OPJ_OFF_T)OPJ_FTELL(p_file);
+    OPJ_FSEEK(p_file, 0, SEEK_SET);
 
-       return (OPJ_UINT64)file_length;
+    return (OPJ_UINT64)file_length;
 }
 
-static OPJ_SIZE_T opj_write_from_file (void * p_buffer, OPJ_SIZE_T p_nb_bytes, FILE * p_file)
+static OPJ_SIZE_T opj_write_from_file(void * p_buffer, OPJ_SIZE_T p_nb_bytes,
+                                      FILE * p_file)
 {
-       return fwrite(p_buffer,1,p_nb_bytes,p_file);
+    return fwrite(p_buffer, 1, p_nb_bytes, p_file);
 }
 
-static OPJ_OFF_T opj_skip_from_file (OPJ_OFF_T p_nb_bytes, FILE * p_user_data)
+static OPJ_OFF_T opj_skip_from_file(OPJ_OFF_T p_nb_bytes, FILE * p_user_data)
 {
-       if (OPJ_FSEEK(p_user_data,p_nb_bytes,SEEK_CUR)) {
-               return -1;
-       }
+    if (OPJ_FSEEK(p_user_data, p_nb_bytes, SEEK_CUR)) {
+        return -1;
+    }
 
-       return p_nb_bytes;
+    return p_nb_bytes;
 }
 
-static OPJ_BOOL opj_seek_from_file (OPJ_OFF_T p_nb_bytes, FILE * p_user_data)
+static OPJ_BOOL opj_seek_from_file(OPJ_OFF_T p_nb_bytes, FILE * p_user_data)
 {
-       if (OPJ_FSEEK(p_user_data,p_nb_bytes,SEEK_SET)) {
-               return OPJ_FALSE;
-       }
+    if (OPJ_FSEEK(p_user_data, p_nb_bytes, SEEK_SET)) {
+        return OPJ_FALSE;
+    }
 
-       return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 /* ---------------------------------------------------------------------- */
 #ifdef _WIN32
 #ifndef OPJ_STATIC
 BOOL APIENTRY
-DllMain(HINSTANCE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
+DllMain(HINSTANCE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
+{
 
-       OPJ_ARG_NOT_USED(lpReserved);
-       OPJ_ARG_NOT_USED(hModule);
+    OPJ_ARG_NOT_USED(lpReserved);
+    OPJ_ARG_NOT_USED(hModule);
 
-       switch (ul_reason_for_call) {
-               case DLL_PROCESS_ATTACH :
-                       break;
-               case DLL_PROCESS_DETACH :
-                       break;
-               case DLL_THREAD_ATTACH :
-               case DLL_THREAD_DETACH :
-                       break;
+    switch (ul_reason_for_call) {
+    case DLL_PROCESS_ATTACH :
+        break;
+    case DLL_PROCESS_DETACH :
+        break;
+    case DLL_THREAD_ATTACH :
+    case DLL_THREAD_DETACH :
+        break;
     }
 
     return TRUE;
@@ -154,7 +157,8 @@ DllMain(HINSTANCE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
 
 /* ---------------------------------------------------------------------- */
 
-const char* OPJ_CALLCONV opj_version(void) {
+const char* OPJ_CALLCONV opj_version(void)
+{
     return OPJ_PACKAGE_VERSION;
 }
 
@@ -163,391 +167,403 @@ const char* OPJ_CALLCONV opj_version(void) {
 
 opj_codec_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT p_format)
 {
-       opj_codec_private_t *l_codec = 00;
+    opj_codec_private_t *l_codec = 00;
+
+    l_codec = (opj_codec_private_t*) opj_calloc(1, sizeof(opj_codec_private_t));
+    if (!l_codec) {
+        return 00;
+    }
 
-       l_codec = (opj_codec_private_t*) opj_calloc(1, sizeof(opj_codec_private_t));
-       if (!l_codec){
-               return 00;
-       }
-
-       l_codec->is_decompressor = 1;
-
-       switch (p_format) {
-               case OPJ_CODEC_J2K:
-                       l_codec->opj_dump_codec = (void (*) (void*, OPJ_INT32, FILE*)) j2k_dump;
-
-                       l_codec->opj_get_codec_info = (opj_codestream_info_v2_t* (*) (void*) ) j2k_get_cstr_info;
-
-                       l_codec->opj_get_codec_index = (opj_codestream_index_t* (*) (void*) ) j2k_get_cstr_index;
-
-                       l_codec->m_codec_data.m_decompression.opj_decode =
-                                       (OPJ_BOOL (*) ( void *,
-                                                                       struct opj_stream_private *,
-                                                                       opj_image_t*, struct opj_event_mgr * )) opj_j2k_decode;
-
-                       l_codec->m_codec_data.m_decompression.opj_end_decompress =
-                                       (OPJ_BOOL (*) ( void *,
-                                                                       struct opj_stream_private *,
-                                                                       struct opj_event_mgr *)) opj_j2k_end_decompress;
-
-                       l_codec->m_codec_data.m_decompression.opj_read_header =
-                                       (OPJ_BOOL (*) ( struct opj_stream_private *,
-                                                                       void *,
-                                                                       opj_image_t **,
-                                                                       struct opj_event_mgr * )) opj_j2k_read_header;
-
-                       l_codec->m_codec_data.m_decompression.opj_destroy =
-                                       (void (*) (void *))opj_j2k_destroy;
-
-                       l_codec->m_codec_data.m_decompression.opj_setup_decoder =
-                                       (void (*) (void * , opj_dparameters_t * )) opj_j2k_setup_decoder;
-
-                       l_codec->m_codec_data.m_decompression.opj_read_tile_header =
-                                       (OPJ_BOOL (*) ( void *,
-                                                                       OPJ_UINT32*,
-                                                                       OPJ_UINT32*,
-                                                                       OPJ_INT32*, OPJ_INT32*,
-                                                                       OPJ_INT32*, OPJ_INT32*,
-                                                                       OPJ_UINT32*,
-                                                                       OPJ_BOOL*,
-                                                                       struct opj_stream_private *,
-                                                                       struct opj_event_mgr * )) opj_j2k_read_tile_header;
-
-                       l_codec->m_codec_data.m_decompression.opj_decode_tile_data =
-                                       (OPJ_BOOL (*) ( void *, 
-                                    OPJ_UINT32, 
-                                    OPJ_BYTE*, 
-                                    OPJ_UINT32, 
-                                    struct opj_stream_private *,
-                                    struct opj_event_mgr *)) opj_j2k_decode_tile;
-
-                       l_codec->m_codec_data.m_decompression.opj_set_decode_area =
-                                       (OPJ_BOOL (*) ( void *, 
-                                    opj_image_t*, 
-                                    OPJ_INT32, OPJ_INT32, OPJ_INT32, OPJ_INT32, 
-                                    struct opj_event_mgr *)) opj_j2k_set_decode_area;
-
-                       l_codec->m_codec_data.m_decompression.opj_get_decoded_tile = 
-                    (OPJ_BOOL (*) ( void *p_codec,
-                                                                   opj_stream_private_t *p_cio,
-                                                                   opj_image_t *p_image,
-                                                                   struct opj_event_mgr * p_manager,
-                                                                   OPJ_UINT32 tile_index)) opj_j2k_get_tile;
-
-                       l_codec->m_codec_data.m_decompression.opj_set_decoded_resolution_factor = 
-                    (OPJ_BOOL (*) ( void * p_codec,
-                                                                       OPJ_UINT32 res_factor,
-                                                                       struct opj_event_mgr * p_manager)) opj_j2k_set_decoded_resolution_factor;
-
-            l_codec->opj_set_threads = 
-                    (OPJ_BOOL (*) ( void * p_codec, OPJ_UINT32 num_threads )) opj_j2k_set_threads;
-
-                       l_codec->m_codec = opj_j2k_create_decompress();
-
-                       if (! l_codec->m_codec) {
-                               opj_free(l_codec);
-                               return NULL;
-                       }
-
-                       break;
-
-               case OPJ_CODEC_JP2:
-                       /* get a JP2 decoder handle */
-                       l_codec->opj_dump_codec = (void (*) (void*, OPJ_INT32, FILE*)) jp2_dump;
-
-                       l_codec->opj_get_codec_info = (opj_codestream_info_v2_t* (*) (void*) ) jp2_get_cstr_info;
-
-                       l_codec->opj_get_codec_index = (opj_codestream_index_t* (*) (void*) ) jp2_get_cstr_index;
-
-                       l_codec->m_codec_data.m_decompression.opj_decode =
-                                       (OPJ_BOOL (*) ( void *,
-                                                                       struct opj_stream_private *,
-                                                                       opj_image_t*,
-                                                                       struct opj_event_mgr * )) opj_jp2_decode;
-
-                       l_codec->m_codec_data.m_decompression.opj_end_decompress =  
-                    (OPJ_BOOL (*) ( void *,
-                                    struct opj_stream_private *,
-                                    struct opj_event_mgr *)) opj_jp2_end_decompress;
-
-                       l_codec->m_codec_data.m_decompression.opj_read_header =  
-                    (OPJ_BOOL (*) ( struct opj_stream_private *,
-                                                       void *,
-                                                       opj_image_t **,
-                                                       struct opj_event_mgr * )) opj_jp2_read_header;
-
-                       l_codec->m_codec_data.m_decompression.opj_read_tile_header = 
-                    (OPJ_BOOL (*) ( void *,
-                                                       OPJ_UINT32*,
-                                                       OPJ_UINT32*,
-                                                       OPJ_INT32*,
-                                                       OPJ_INT32*,
-                                                       OPJ_INT32 * ,
-                                                       OPJ_INT32 * ,
-                                                       OPJ_UINT32 * ,
-                                                       OPJ_BOOL *,
-                                                       struct opj_stream_private *,
-                                                       struct opj_event_mgr * )) opj_jp2_read_tile_header;
-
-                       l_codec->m_codec_data.m_decompression.opj_decode_tile_data = 
-                    (OPJ_BOOL (*) ( void *,
-                                    OPJ_UINT32,OPJ_BYTE*,OPJ_UINT32,
-                                    struct opj_stream_private *,
-                                    struct opj_event_mgr * )) opj_jp2_decode_tile;
-
-                       l_codec->m_codec_data.m_decompression.opj_destroy = (void (*) (void *))opj_jp2_destroy;
-
-                       l_codec->m_codec_data.m_decompression.opj_setup_decoder = 
-                    (void (*) (void * ,opj_dparameters_t * )) opj_jp2_setup_decoder;
-
-                       l_codec->m_codec_data.m_decompression.opj_set_decode_area = 
-                    (OPJ_BOOL (*) ( void *,
-                                    opj_image_t*, 
-                                    OPJ_INT32,OPJ_INT32,OPJ_INT32,OPJ_INT32,
-                                    struct opj_event_mgr * )) opj_jp2_set_decode_area;
-
-                       l_codec->m_codec_data.m_decompression.opj_get_decoded_tile = 
-                    (OPJ_BOOL (*) ( void *p_codec,
-                                                                       opj_stream_private_t *p_cio,
-                                                                       opj_image_t *p_image,
-                                                                       struct opj_event_mgr * p_manager,
-                                                                       OPJ_UINT32 tile_index)) opj_jp2_get_tile;
-
-                       l_codec->m_codec_data.m_decompression.opj_set_decoded_resolution_factor = 
-                    (OPJ_BOOL (*) ( void * p_codec,
-                                                               OPJ_UINT32 res_factor,
-                                                               opj_event_mgr_t * p_manager)) opj_jp2_set_decoded_resolution_factor;
-
-            l_codec->opj_set_threads = 
-                    (OPJ_BOOL (*) ( void * p_codec, OPJ_UINT32 num_threads )) opj_jp2_set_threads;
-
-                       l_codec->m_codec = opj_jp2_create(OPJ_TRUE);
-
-                       if (! l_codec->m_codec) {
-                               opj_free(l_codec);
-                               return 00;
-                       }
-
-                       break;
-               case OPJ_CODEC_UNKNOWN:
-               case OPJ_CODEC_JPT:
-               default:
-                       opj_free(l_codec);
-                       return 00;
-       }
-
-       opj_set_default_event_handler(&(l_codec->m_event_mgr));
-       return (opj_codec_t*) l_codec;
-}
-
-void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t *parameters) {
-       if(parameters) {
-               memset(parameters, 0, sizeof(opj_dparameters_t));
-               /* default decoding parameters */
-               parameters->cp_layer = 0;
-               parameters->cp_reduce = 0;
-
-               parameters->decod_format = -1;
-               parameters->cod_format = -1;
-               parameters->flags = 0;          
-/* UniPG>> */
+    l_codec->is_decompressor = 1;
+
+    switch (p_format) {
+    case OPJ_CODEC_J2K:
+        l_codec->opj_dump_codec = (void (*)(void*, OPJ_INT32, FILE*)) j2k_dump;
+
+        l_codec->opj_get_codec_info = (opj_codestream_info_v2_t* (*)(
+                                           void*)) j2k_get_cstr_info;
+
+        l_codec->opj_get_codec_index = (opj_codestream_index_t* (*)(
+                                            void*)) j2k_get_cstr_index;
+
+        l_codec->m_codec_data.m_decompression.opj_decode =
+            (OPJ_BOOL(*)(void *,
+                         struct opj_stream_private *,
+                         opj_image_t*, struct opj_event_mgr *)) opj_j2k_decode;
+
+        l_codec->m_codec_data.m_decompression.opj_end_decompress =
+            (OPJ_BOOL(*)(void *,
+                         struct opj_stream_private *,
+                         struct opj_event_mgr *)) opj_j2k_end_decompress;
+
+        l_codec->m_codec_data.m_decompression.opj_read_header =
+            (OPJ_BOOL(*)(struct opj_stream_private *,
+                         void *,
+                         opj_image_t **,
+                         struct opj_event_mgr *)) opj_j2k_read_header;
+
+        l_codec->m_codec_data.m_decompression.opj_destroy =
+            (void (*)(void *))opj_j2k_destroy;
+
+        l_codec->m_codec_data.m_decompression.opj_setup_decoder =
+            (void (*)(void *, opj_dparameters_t *)) opj_j2k_setup_decoder;
+
+        l_codec->m_codec_data.m_decompression.opj_read_tile_header =
+            (OPJ_BOOL(*)(void *,
+                         OPJ_UINT32*,
+                         OPJ_UINT32*,
+                         OPJ_INT32*, OPJ_INT32*,
+                         OPJ_INT32*, OPJ_INT32*,
+                         OPJ_UINT32*,
+                         OPJ_BOOL*,
+                         struct opj_stream_private *,
+                         struct opj_event_mgr *)) opj_j2k_read_tile_header;
+
+        l_codec->m_codec_data.m_decompression.opj_decode_tile_data =
+            (OPJ_BOOL(*)(void *,
+                         OPJ_UINT32,
+                         OPJ_BYTE*,
+                         OPJ_UINT32,
+                         struct opj_stream_private *,
+                         struct opj_event_mgr *)) opj_j2k_decode_tile;
+
+        l_codec->m_codec_data.m_decompression.opj_set_decode_area =
+            (OPJ_BOOL(*)(void *,
+                         opj_image_t*,
+                         OPJ_INT32, OPJ_INT32, OPJ_INT32, OPJ_INT32,
+                         struct opj_event_mgr *)) opj_j2k_set_decode_area;
+
+        l_codec->m_codec_data.m_decompression.opj_get_decoded_tile =
+            (OPJ_BOOL(*)(void *p_codec,
+                         opj_stream_private_t *p_cio,
+                         opj_image_t *p_image,
+                         struct opj_event_mgr * p_manager,
+                         OPJ_UINT32 tile_index)) opj_j2k_get_tile;
+
+        l_codec->m_codec_data.m_decompression.opj_set_decoded_resolution_factor =
+            (OPJ_BOOL(*)(void * p_codec,
+                         OPJ_UINT32 res_factor,
+                         struct opj_event_mgr * p_manager)) opj_j2k_set_decoded_resolution_factor;
+
+        l_codec->opj_set_threads =
+            (OPJ_BOOL(*)(void * p_codec, OPJ_UINT32 num_threads)) opj_j2k_set_threads;
+
+        l_codec->m_codec = opj_j2k_create_decompress();
+
+        if (! l_codec->m_codec) {
+            opj_free(l_codec);
+            return NULL;
+        }
+
+        break;
+
+    case OPJ_CODEC_JP2:
+        /* get a JP2 decoder handle */
+        l_codec->opj_dump_codec = (void (*)(void*, OPJ_INT32, FILE*)) jp2_dump;
+
+        l_codec->opj_get_codec_info = (opj_codestream_info_v2_t* (*)(
+                                           void*)) jp2_get_cstr_info;
+
+        l_codec->opj_get_codec_index = (opj_codestream_index_t* (*)(
+                                            void*)) jp2_get_cstr_index;
+
+        l_codec->m_codec_data.m_decompression.opj_decode =
+            (OPJ_BOOL(*)(void *,
+                         struct opj_stream_private *,
+                         opj_image_t*,
+                         struct opj_event_mgr *)) opj_jp2_decode;
+
+        l_codec->m_codec_data.m_decompression.opj_end_decompress =
+            (OPJ_BOOL(*)(void *,
+                         struct opj_stream_private *,
+                         struct opj_event_mgr *)) opj_jp2_end_decompress;
+
+        l_codec->m_codec_data.m_decompression.opj_read_header =
+            (OPJ_BOOL(*)(struct opj_stream_private *,
+                         void *,
+                         opj_image_t **,
+                         struct opj_event_mgr *)) opj_jp2_read_header;
+
+        l_codec->m_codec_data.m_decompression.opj_read_tile_header =
+            (OPJ_BOOL(*)(void *,
+                         OPJ_UINT32*,
+                         OPJ_UINT32*,
+                         OPJ_INT32*,
+                         OPJ_INT32*,
+                         OPJ_INT32 *,
+                         OPJ_INT32 *,
+                         OPJ_UINT32 *,
+                         OPJ_BOOL *,
+                         struct opj_stream_private *,
+                         struct opj_event_mgr *)) opj_jp2_read_tile_header;
+
+        l_codec->m_codec_data.m_decompression.opj_decode_tile_data =
+            (OPJ_BOOL(*)(void *,
+                         OPJ_UINT32, OPJ_BYTE*, OPJ_UINT32,
+                         struct opj_stream_private *,
+                         struct opj_event_mgr *)) opj_jp2_decode_tile;
+
+        l_codec->m_codec_data.m_decompression.opj_destroy = (void (*)(
+                    void *))opj_jp2_destroy;
+
+        l_codec->m_codec_data.m_decompression.opj_setup_decoder =
+            (void (*)(void *, opj_dparameters_t *)) opj_jp2_setup_decoder;
+
+        l_codec->m_codec_data.m_decompression.opj_set_decode_area =
+            (OPJ_BOOL(*)(void *,
+                         opj_image_t*,
+                         OPJ_INT32, OPJ_INT32, OPJ_INT32, OPJ_INT32,
+                         struct opj_event_mgr *)) opj_jp2_set_decode_area;
+
+        l_codec->m_codec_data.m_decompression.opj_get_decoded_tile =
+            (OPJ_BOOL(*)(void *p_codec,
+                         opj_stream_private_t *p_cio,
+                         opj_image_t *p_image,
+                         struct opj_event_mgr * p_manager,
+                         OPJ_UINT32 tile_index)) opj_jp2_get_tile;
+
+        l_codec->m_codec_data.m_decompression.opj_set_decoded_resolution_factor =
+            (OPJ_BOOL(*)(void * p_codec,
+                         OPJ_UINT32 res_factor,
+                         opj_event_mgr_t * p_manager)) opj_jp2_set_decoded_resolution_factor;
+
+        l_codec->opj_set_threads =
+            (OPJ_BOOL(*)(void * p_codec, OPJ_UINT32 num_threads)) opj_jp2_set_threads;
+
+        l_codec->m_codec = opj_jp2_create(OPJ_TRUE);
+
+        if (! l_codec->m_codec) {
+            opj_free(l_codec);
+            return 00;
+        }
+
+        break;
+    case OPJ_CODEC_UNKNOWN:
+    case OPJ_CODEC_JPT:
+    default:
+        opj_free(l_codec);
+        return 00;
+    }
+
+    opj_set_default_event_handler(&(l_codec->m_event_mgr));
+    return (opj_codec_t*) l_codec;
+}
+
+void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t
+        *parameters)
+{
+    if (parameters) {
+        memset(parameters, 0, sizeof(opj_dparameters_t));
+        /* default decoding parameters */
+        parameters->cp_layer = 0;
+        parameters->cp_reduce = 0;
+
+        parameters->decod_format = -1;
+        parameters->cod_format = -1;
+        parameters->flags = 0;
+        /* UniPG>> */
 #ifdef USE_JPWL
-               parameters->jpwl_correct = OPJ_FALSE;
-               parameters->jpwl_exp_comps = JPWL_EXPECTED_COMPONENTS;
-               parameters->jpwl_max_tiles = JPWL_MAXIMUM_TILES;
+        parameters->jpwl_correct = OPJ_FALSE;
+        parameters->jpwl_exp_comps = JPWL_EXPECTED_COMPONENTS;
+        parameters->jpwl_max_tiles = JPWL_MAXIMUM_TILES;
 #endif /* USE_JPWL */
-/* <<UniPG */
-       }
+        /* <<UniPG */
+    }
 }
 
 
 OPJ_BOOL OPJ_CALLCONV opj_codec_set_threads(opj_codec_t *p_codec,
-                                                    int num_threads)
+        int num_threads)
 {
-       if (p_codec && (num_threads >= 0)) {
-               opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
+    if (p_codec && (num_threads >= 0)) {
+        opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
 
-               return l_codec->opj_set_threads(l_codec->m_codec, (OPJ_UINT32)num_threads);
-       }
-       return OPJ_FALSE;
+        return l_codec->opj_set_threads(l_codec->m_codec, (OPJ_UINT32)num_threads);
+    }
+    return OPJ_FALSE;
 }
 
 OPJ_BOOL OPJ_CALLCONV opj_setup_decoder(opj_codec_t *p_codec,
-                                        opj_dparameters_t *parameters 
-                                                                               )
-{
-       if (p_codec && parameters) { 
-               opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
-
-               if (! l_codec->is_decompressor) {
-                       opj_event_msg(&(l_codec->m_event_mgr), EVT_ERROR, 
-                "Codec provided to the opj_setup_decoder function is not a decompressor handler.\n");
-                       return OPJ_FALSE;
-               }
-
-               l_codec->m_codec_data.m_decompression.opj_setup_decoder(l_codec->m_codec,
-                                                                                                                               parameters);
-               return OPJ_TRUE;
-       }
-       return OPJ_FALSE;
-}
-
-OPJ_BOOL OPJ_CALLCONV opj_read_header (        opj_stream_t *p_stream,
-                                                                               opj_codec_t *p_codec,
-                                                                               opj_image_t **p_image )
-{
-       if (p_codec && p_stream) {
-               opj_codec_private_t* l_codec = (opj_codec_private_t*) p_codec;
-               opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream;
-
-               if(! l_codec->is_decompressor) {
-                       opj_event_msg(&(l_codec->m_event_mgr), EVT_ERROR, 
-                "Codec provided to the opj_read_header function is not a decompressor handler.\n");
-                       return OPJ_FALSE;
-               }
-
-               return l_codec->m_codec_data.m_decompression.opj_read_header(   l_stream,
-                                                                                                                                               l_codec->m_codec,
-                                                                                                                                               p_image,
-                                                                                                                                               &(l_codec->m_event_mgr) );
-       }
-
-       return OPJ_FALSE;
-}
-
-OPJ_BOOL OPJ_CALLCONV opj_decode(   opj_codec_t *p_codec,
-                                    opj_stream_t *p_stream,
-                                    opj_image_t* p_image)
-{
-       if (p_codec && p_stream) {
-               opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
-               opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream;
-
-               if (! l_codec->is_decompressor) {
-                       return OPJ_FALSE;
-               }
-
-               return l_codec->m_codec_data.m_decompression.opj_decode(l_codec->m_codec,
-                                                                                                                               l_stream,
-                                                                                                                               p_image,
-                                                                                                                               &(l_codec->m_event_mgr) );
-       }
-
-       return OPJ_FALSE;
-}
-
-OPJ_BOOL OPJ_CALLCONV opj_set_decode_area(     opj_codec_t *p_codec,
-                                                                                       opj_image_t* p_image,
-                                                                                       OPJ_INT32 p_start_x, OPJ_INT32 p_start_y,
-                                                                                       OPJ_INT32 p_end_x, OPJ_INT32 p_end_y
-                                                                                       )
-{
-       if (p_codec) {
-               opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
-               
-               if (! l_codec->is_decompressor) {
-                       return OPJ_FALSE;
-               }
-
-               return  l_codec->m_codec_data.m_decompression.opj_set_decode_area(      l_codec->m_codec,
-                                                                                                                                                       p_image,
-                                                                                                                                                       p_start_x, p_start_y,
-                                                                                                                                                       p_end_x, p_end_y,
-                                                                                                                                                       &(l_codec->m_event_mgr) );
-       }
-       return OPJ_FALSE;
-}
-
-OPJ_BOOL OPJ_CALLCONV opj_read_tile_header(    opj_codec_t *p_codec,
-                                                                                       opj_stream_t * p_stream,
-                                                                                       OPJ_UINT32 * p_tile_index,
-                                                                                       OPJ_UINT32 * p_data_size,
-                                                                                       OPJ_INT32 * p_tile_x0, OPJ_INT32 * p_tile_y0,
-                                                                                       OPJ_INT32 * p_tile_x1, OPJ_INT32 * p_tile_y1,
-                                                                                       OPJ_UINT32 * p_nb_comps,
-                                                                                       OPJ_BOOL * p_should_go_on)
-{
-       if (p_codec && p_stream && p_data_size && p_tile_index) {
-               opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
-               opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream;
-
-               if (! l_codec->is_decompressor) {
-                       return OPJ_FALSE;
-               }
-
-               return l_codec->m_codec_data.m_decompression.opj_read_tile_header(      l_codec->m_codec,
-                                                                                                                                                       p_tile_index,
-                                                                                                                                                       p_data_size,
-                                                                                                                                                       p_tile_x0, p_tile_y0,
-                                                                                                                                                       p_tile_x1, p_tile_y1,
-                                                                                                                                                       p_nb_comps,
-                                                                                                                                                       p_should_go_on,
-                                                                                                                                                       l_stream,
-                                                                                                                                                       &(l_codec->m_event_mgr));
-       }
-       return OPJ_FALSE;
-}
-
-OPJ_BOOL OPJ_CALLCONV opj_decode_tile_data(    opj_codec_t *p_codec,
-                                                                                       OPJ_UINT32 p_tile_index,
-                                                                                       OPJ_BYTE * p_data,
-                                                                                       OPJ_UINT32 p_data_size,
-                                                                                       opj_stream_t *p_stream
-                                                                                       )
-{
-       if (p_codec && p_data && p_stream) {
-               opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
-               opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream;
-
-               if (! l_codec->is_decompressor) {
-                       return OPJ_FALSE;
-               }
-
-               return l_codec->m_codec_data.m_decompression.opj_decode_tile_data(      l_codec->m_codec,
-                                                                                                                                                       p_tile_index,
-                                                                                                                                                       p_data,
-                                                                                                                                                       p_data_size,
-                                                                                                                                                       l_stream,
-                                                                                                                                                       &(l_codec->m_event_mgr) );
-       }
-       return OPJ_FALSE;
-}
-
-OPJ_BOOL OPJ_CALLCONV opj_get_decoded_tile(    opj_codec_t *p_codec,
-                                                                                       opj_stream_t *p_stream,
-                                                                                       opj_image_t *p_image,
-                                                                                       OPJ_UINT32 tile_index)
-{
-       if (p_codec && p_stream) {
-               opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
-               opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream;
-
-               if (! l_codec->is_decompressor) {
-                       return OPJ_FALSE;
-               }
-               
-               return l_codec->m_codec_data.m_decompression.opj_get_decoded_tile(      l_codec->m_codec,
-                                                                                                                                                       l_stream,
-                                                                                                                                                       p_image,
-                                                                                                                                                       &(l_codec->m_event_mgr),
-                                                                                                                                                       tile_index);
-       }
-
-       return OPJ_FALSE;
-}
-
-OPJ_BOOL OPJ_CALLCONV opj_set_decoded_resolution_factor(opj_codec_t *p_codec, 
-                                                                                                               OPJ_UINT32 res_factor )
-{
-       opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
-
-       if ( !l_codec ){
-               return OPJ_FALSE;
-       }
-
-       return l_codec->m_codec_data.m_decompression.opj_set_decoded_resolution_factor(l_codec->m_codec,
-                                                                                                                                                       res_factor,
-                                                                                                                                                       &(l_codec->m_event_mgr) );
+                                        opj_dparameters_t *parameters
+                                       )
+{
+    if (p_codec && parameters) {
+        opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
+
+        if (! l_codec->is_decompressor) {
+            opj_event_msg(&(l_codec->m_event_mgr), EVT_ERROR,
+                          "Codec provided to the opj_setup_decoder function is not a decompressor handler.\n");
+            return OPJ_FALSE;
+        }
+
+        l_codec->m_codec_data.m_decompression.opj_setup_decoder(l_codec->m_codec,
+                parameters);
+        return OPJ_TRUE;
+    }
+    return OPJ_FALSE;
+}
+
+OPJ_BOOL OPJ_CALLCONV opj_read_header(opj_stream_t *p_stream,
+                                      opj_codec_t *p_codec,
+                                      opj_image_t **p_image)
+{
+    if (p_codec && p_stream) {
+        opj_codec_private_t* l_codec = (opj_codec_private_t*) p_codec;
+        opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream;
+
+        if (! l_codec->is_decompressor) {
+            opj_event_msg(&(l_codec->m_event_mgr), EVT_ERROR,
+                          "Codec provided to the opj_read_header function is not a decompressor handler.\n");
+            return OPJ_FALSE;
+        }
+
+        return l_codec->m_codec_data.m_decompression.opj_read_header(l_stream,
+                l_codec->m_codec,
+                p_image,
+                &(l_codec->m_event_mgr));
+    }
+
+    return OPJ_FALSE;
+}
+
+OPJ_BOOL OPJ_CALLCONV opj_decode(opj_codec_t *p_codec,
+                                 opj_stream_t *p_stream,
+                                 opj_image_t* p_image)
+{
+    if (p_codec && p_stream) {
+        opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
+        opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream;
+
+        if (! l_codec->is_decompressor) {
+            return OPJ_FALSE;
+        }
+
+        return l_codec->m_codec_data.m_decompression.opj_decode(l_codec->m_codec,
+                l_stream,
+                p_image,
+                &(l_codec->m_event_mgr));
+    }
+
+    return OPJ_FALSE;
+}
+
+OPJ_BOOL OPJ_CALLCONV opj_set_decode_area(opj_codec_t *p_codec,
+        opj_image_t* p_image,
+        OPJ_INT32 p_start_x, OPJ_INT32 p_start_y,
+        OPJ_INT32 p_end_x, OPJ_INT32 p_end_y
+                                         )
+{
+    if (p_codec) {
+        opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
+
+        if (! l_codec->is_decompressor) {
+            return OPJ_FALSE;
+        }
+
+        return  l_codec->m_codec_data.m_decompression.opj_set_decode_area(
+                    l_codec->m_codec,
+                    p_image,
+                    p_start_x, p_start_y,
+                    p_end_x, p_end_y,
+                    &(l_codec->m_event_mgr));
+    }
+    return OPJ_FALSE;
+}
+
+OPJ_BOOL OPJ_CALLCONV opj_read_tile_header(opj_codec_t *p_codec,
+        opj_stream_t * p_stream,
+        OPJ_UINT32 * p_tile_index,
+        OPJ_UINT32 * p_data_size,
+        OPJ_INT32 * p_tile_x0, OPJ_INT32 * p_tile_y0,
+        OPJ_INT32 * p_tile_x1, OPJ_INT32 * p_tile_y1,
+        OPJ_UINT32 * p_nb_comps,
+        OPJ_BOOL * p_should_go_on)
+{
+    if (p_codec && p_stream && p_data_size && p_tile_index) {
+        opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
+        opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream;
+
+        if (! l_codec->is_decompressor) {
+            return OPJ_FALSE;
+        }
+
+        return l_codec->m_codec_data.m_decompression.opj_read_tile_header(
+                   l_codec->m_codec,
+                   p_tile_index,
+                   p_data_size,
+                   p_tile_x0, p_tile_y0,
+                   p_tile_x1, p_tile_y1,
+                   p_nb_comps,
+                   p_should_go_on,
+                   l_stream,
+                   &(l_codec->m_event_mgr));
+    }
+    return OPJ_FALSE;
+}
+
+OPJ_BOOL OPJ_CALLCONV opj_decode_tile_data(opj_codec_t *p_codec,
+        OPJ_UINT32 p_tile_index,
+        OPJ_BYTE * p_data,
+        OPJ_UINT32 p_data_size,
+        opj_stream_t *p_stream
+                                          )
+{
+    if (p_codec && p_data && p_stream) {
+        opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
+        opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream;
+
+        if (! l_codec->is_decompressor) {
+            return OPJ_FALSE;
+        }
+
+        return l_codec->m_codec_data.m_decompression.opj_decode_tile_data(
+                   l_codec->m_codec,
+                   p_tile_index,
+                   p_data,
+                   p_data_size,
+                   l_stream,
+                   &(l_codec->m_event_mgr));
+    }
+    return OPJ_FALSE;
+}
+
+OPJ_BOOL OPJ_CALLCONV opj_get_decoded_tile(opj_codec_t *p_codec,
+        opj_stream_t *p_stream,
+        opj_image_t *p_image,
+        OPJ_UINT32 tile_index)
+{
+    if (p_codec && p_stream) {
+        opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
+        opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream;
+
+        if (! l_codec->is_decompressor) {
+            return OPJ_FALSE;
+        }
+
+        return l_codec->m_codec_data.m_decompression.opj_get_decoded_tile(
+                   l_codec->m_codec,
+                   l_stream,
+                   p_image,
+                   &(l_codec->m_event_mgr),
+                   tile_index);
+    }
+
+    return OPJ_FALSE;
+}
+
+OPJ_BOOL OPJ_CALLCONV opj_set_decoded_resolution_factor(opj_codec_t *p_codec,
+        OPJ_UINT32 res_factor)
+{
+    opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
+
+    if (!l_codec) {
+        return OPJ_FALSE;
+    }
+
+    return l_codec->m_codec_data.m_decompression.opj_set_decoded_resolution_factor(
+               l_codec->m_codec,
+               res_factor,
+               &(l_codec->m_event_mgr));
 }
 
 /* ---------------------------------------------------------------------- */
@@ -555,395 +571,403 @@ OPJ_BOOL OPJ_CALLCONV opj_set_decoded_resolution_factor(opj_codec_t *p_codec,
 
 opj_codec_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT p_format)
 {
-       opj_codec_private_t *l_codec = 00;
-
-       l_codec = (opj_codec_private_t*)opj_calloc(1, sizeof(opj_codec_private_t));
-       if (!l_codec) {
-               return 00;
-       }
-       
-       l_codec->is_decompressor = 0;
-
-       switch(p_format) {
-               case OPJ_CODEC_J2K:
-                       l_codec->m_codec_data.m_compression.opj_encode = (OPJ_BOOL (*) (void *,
-                                                                                                                                                       struct opj_stream_private *,
-                                                                                                                                                       struct opj_event_mgr * )) opj_j2k_encode;
-
-                       l_codec->m_codec_data.m_compression.opj_end_compress = (OPJ_BOOL (*) (  void *,
-                                                                                                                                                                       struct opj_stream_private *,
-                                                                                                                                                                       struct opj_event_mgr *)) opj_j2k_end_compress;
-
-                       l_codec->m_codec_data.m_compression.opj_start_compress = (OPJ_BOOL (*) (void *,
-                                                                                                                                                                       struct opj_stream_private *,
-                                                                                                                                                                       struct opj_image * ,
-                                                                                                                                                                       struct opj_event_mgr *)) opj_j2k_start_compress;
-
-                       l_codec->m_codec_data.m_compression.opj_write_tile = (OPJ_BOOL (*) (void *,
-                                                                                                                                                               OPJ_UINT32,
-                                                                                                                                                               OPJ_BYTE*,
-                                                                                                                                                               OPJ_UINT32,
-                                                                                                                                                               struct opj_stream_private *,
-                                                                                                                                                               struct opj_event_mgr *) ) opj_j2k_write_tile;
-
-                       l_codec->m_codec_data.m_compression.opj_destroy = (void (*) (void *)) opj_j2k_destroy;
-
-                       l_codec->m_codec_data.m_compression.opj_setup_encoder = (OPJ_BOOL (*) ( void *,
-                                                                                                                                                               opj_cparameters_t *,
-                                                                                                                                                               struct opj_image *,
-                                                                                                                                                               struct opj_event_mgr * )) opj_j2k_setup_encoder;
-
-                       l_codec->m_codec = opj_j2k_create_compress();
-                       if (! l_codec->m_codec) {
-                               opj_free(l_codec);
-                               return 00;
-                       }
-
-                       break;
-
-               case OPJ_CODEC_JP2:
-                       /* get a JP2 decoder handle */
-                       l_codec->m_codec_data.m_compression.opj_encode = (OPJ_BOOL (*) (void *,
-                                                                                                                                                       struct opj_stream_private *,
-                                                                                                                                                       struct opj_event_mgr * )) opj_jp2_encode;
-
-                       l_codec->m_codec_data.m_compression.opj_end_compress = (OPJ_BOOL (*) (  void *,
-                                                                                                                                                                       struct opj_stream_private *,
-                                                                                                                                                                       struct opj_event_mgr *)) opj_jp2_end_compress;
-
-                       l_codec->m_codec_data.m_compression.opj_start_compress = (OPJ_BOOL (*) (void *,
-                                                                                                                                                                       struct opj_stream_private *,
-                                                                                                                                                                       struct opj_image * ,
-                                                                                                                                                                       struct opj_event_mgr *))  opj_jp2_start_compress;
-
-                       l_codec->m_codec_data.m_compression.opj_write_tile = (OPJ_BOOL (*) (void *,
-                                                                                                                                                               OPJ_UINT32,
-                                                                                                                                                               OPJ_BYTE*,
-                                                                                                                                                               OPJ_UINT32,
-                                                                                                                                                               struct opj_stream_private *,
-                                                                                                                                                               struct opj_event_mgr *)) opj_jp2_write_tile;
-
-                       l_codec->m_codec_data.m_compression.opj_destroy = (void (*) (void *)) opj_jp2_destroy;
-
-                       l_codec->m_codec_data.m_compression.opj_setup_encoder = (OPJ_BOOL (*) ( void *,
-                                                                                                                                                               opj_cparameters_t *,
-                                                                                                                                                               struct opj_image *,
-                                                                                                                                                               struct opj_event_mgr * )) opj_jp2_setup_encoder;
-
-                       l_codec->m_codec = opj_jp2_create(OPJ_FALSE);
-                       if (! l_codec->m_codec) {
-                               opj_free(l_codec);
-                               return 00;
-                       }
-
-                       break;
-
-               case OPJ_CODEC_UNKNOWN:
-               case OPJ_CODEC_JPT:
-               default:
-                       opj_free(l_codec);
-                       return 00;
-       }
-
-       opj_set_default_event_handler(&(l_codec->m_event_mgr));
-       return (opj_codec_t*) l_codec;
-}
-
-void OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameters_t *parameters) {
-       if(parameters) {
-               memset(parameters, 0, sizeof(opj_cparameters_t));
-               /* default coding parameters */
+    opj_codec_private_t *l_codec = 00;
+
+    l_codec = (opj_codec_private_t*)opj_calloc(1, sizeof(opj_codec_private_t));
+    if (!l_codec) {
+        return 00;
+    }
+
+    l_codec->is_decompressor = 0;
+
+    switch (p_format) {
+    case OPJ_CODEC_J2K:
+        l_codec->m_codec_data.m_compression.opj_encode = (OPJ_BOOL(*)(void *,
+                struct opj_stream_private *,
+                struct opj_event_mgr *)) opj_j2k_encode;
+
+        l_codec->m_codec_data.m_compression.opj_end_compress = (OPJ_BOOL(*)(void *,
+                struct opj_stream_private *,
+                struct opj_event_mgr *)) opj_j2k_end_compress;
+
+        l_codec->m_codec_data.m_compression.opj_start_compress = (OPJ_BOOL(*)(void *,
+                struct opj_stream_private *,
+                struct opj_image *,
+                struct opj_event_mgr *)) opj_j2k_start_compress;
+
+        l_codec->m_codec_data.m_compression.opj_write_tile = (OPJ_BOOL(*)(void *,
+                OPJ_UINT32,
+                OPJ_BYTE*,
+                OPJ_UINT32,
+                struct opj_stream_private *,
+                struct opj_event_mgr *)) opj_j2k_write_tile;
+
+        l_codec->m_codec_data.m_compression.opj_destroy = (void (*)(
+                    void *)) opj_j2k_destroy;
+
+        l_codec->m_codec_data.m_compression.opj_setup_encoder = (OPJ_BOOL(*)(void *,
+                opj_cparameters_t *,
+                struct opj_image *,
+                struct opj_event_mgr *)) opj_j2k_setup_encoder;
+
+        l_codec->m_codec = opj_j2k_create_compress();
+        if (! l_codec->m_codec) {
+            opj_free(l_codec);
+            return 00;
+        }
+
+        break;
+
+    case OPJ_CODEC_JP2:
+        /* get a JP2 decoder handle */
+        l_codec->m_codec_data.m_compression.opj_encode = (OPJ_BOOL(*)(void *,
+                struct opj_stream_private *,
+                struct opj_event_mgr *)) opj_jp2_encode;
+
+        l_codec->m_codec_data.m_compression.opj_end_compress = (OPJ_BOOL(*)(void *,
+                struct opj_stream_private *,
+                struct opj_event_mgr *)) opj_jp2_end_compress;
+
+        l_codec->m_codec_data.m_compression.opj_start_compress = (OPJ_BOOL(*)(void *,
+                struct opj_stream_private *,
+                struct opj_image *,
+                struct opj_event_mgr *))  opj_jp2_start_compress;
+
+        l_codec->m_codec_data.m_compression.opj_write_tile = (OPJ_BOOL(*)(void *,
+                OPJ_UINT32,
+                OPJ_BYTE*,
+                OPJ_UINT32,
+                struct opj_stream_private *,
+                struct opj_event_mgr *)) opj_jp2_write_tile;
+
+        l_codec->m_codec_data.m_compression.opj_destroy = (void (*)(
+                    void *)) opj_jp2_destroy;
+
+        l_codec->m_codec_data.m_compression.opj_setup_encoder = (OPJ_BOOL(*)(void *,
+                opj_cparameters_t *,
+                struct opj_image *,
+                struct opj_event_mgr *)) opj_jp2_setup_encoder;
+
+        l_codec->m_codec = opj_jp2_create(OPJ_FALSE);
+        if (! l_codec->m_codec) {
+            opj_free(l_codec);
+            return 00;
+        }
+
+        break;
+
+    case OPJ_CODEC_UNKNOWN:
+    case OPJ_CODEC_JPT:
+    default:
+        opj_free(l_codec);
+        return 00;
+    }
+
+    opj_set_default_event_handler(&(l_codec->m_event_mgr));
+    return (opj_codec_t*) l_codec;
+}
+
+void OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameters_t
+        *parameters)
+{
+    if (parameters) {
+        memset(parameters, 0, sizeof(opj_cparameters_t));
+        /* default coding parameters */
         parameters->cp_cinema = OPJ_OFF; /* DEPRECATED */
         parameters->rsiz = OPJ_PROFILE_NONE;
-               parameters->max_comp_size = 0;
-               parameters->numresolution = 6;
+        parameters->max_comp_size = 0;
+        parameters->numresolution = 6;
         parameters->cp_rsiz = OPJ_STD_RSIZ; /* DEPRECATED */
-               parameters->cblockw_init = 64;
-               parameters->cblockh_init = 64;
-               parameters->prog_order = OPJ_LRCP;
-               parameters->roi_compno = -1;            /* no ROI */
-               parameters->subsampling_dx = 1;
-               parameters->subsampling_dy = 1;
-               parameters->tp_on = 0;
-               parameters->decod_format = -1;
-               parameters->cod_format = -1;
-               parameters->tcp_rates[0] = 0;   
-               parameters->tcp_numlayers = 0;
-               parameters->cp_disto_alloc = 0;
-               parameters->cp_fixed_alloc = 0;
-               parameters->cp_fixed_quality = 0;
-               parameters->jpip_on = OPJ_FALSE;
-/* UniPG>> */
+        parameters->cblockw_init = 64;
+        parameters->cblockh_init = 64;
+        parameters->prog_order = OPJ_LRCP;
+        parameters->roi_compno = -1;        /* no ROI */
+        parameters->subsampling_dx = 1;
+        parameters->subsampling_dy = 1;
+        parameters->tp_on = 0;
+        parameters->decod_format = -1;
+        parameters->cod_format = -1;
+        parameters->tcp_rates[0] = 0;
+        parameters->tcp_numlayers = 0;
+        parameters->cp_disto_alloc = 0;
+        parameters->cp_fixed_alloc = 0;
+        parameters->cp_fixed_quality = 0;
+        parameters->jpip_on = OPJ_FALSE;
+        /* UniPG>> */
 #ifdef USE_JPWL
-               parameters->jpwl_epc_on = OPJ_FALSE;
-               parameters->jpwl_hprot_MH = -1; /* -1 means unassigned */
-               {
-                       int i;
-                       for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) {
-                               parameters->jpwl_hprot_TPH_tileno[i] = -1; /* unassigned */
-                               parameters->jpwl_hprot_TPH[i] = 0; /* absent */
-                       }
-               };
-               {
-                       int i;
-                       for (i = 0; i < JPWL_MAX_NO_PACKSPECS; i++) {
-                               parameters->jpwl_pprot_tileno[i] = -1; /* unassigned */
-                               parameters->jpwl_pprot_packno[i] = -1; /* unassigned */
-                               parameters->jpwl_pprot[i] = 0; /* absent */
-                       }
-               };
-               parameters->jpwl_sens_size = 0; /* 0 means no ESD */
-               parameters->jpwl_sens_addr = 0; /* 0 means auto */
-               parameters->jpwl_sens_range = 0; /* 0 means packet */
-               parameters->jpwl_sens_MH = -1; /* -1 means unassigned */
-               {
-                       int i;
-                       for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) {
-                               parameters->jpwl_sens_TPH_tileno[i] = -1; /* unassigned */
-                               parameters->jpwl_sens_TPH[i] = -1; /* absent */
-                       }
-               };
+        parameters->jpwl_epc_on = OPJ_FALSE;
+        parameters->jpwl_hprot_MH = -1; /* -1 means unassigned */
+        {
+            int i;
+            for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) {
+                parameters->jpwl_hprot_TPH_tileno[i] = -1; /* unassigned */
+                parameters->jpwl_hprot_TPH[i] = 0; /* absent */
+            }
+        };
+        {
+            int i;
+            for (i = 0; i < JPWL_MAX_NO_PACKSPECS; i++) {
+                parameters->jpwl_pprot_tileno[i] = -1; /* unassigned */
+                parameters->jpwl_pprot_packno[i] = -1; /* unassigned */
+                parameters->jpwl_pprot[i] = 0; /* absent */
+            }
+        };
+        parameters->jpwl_sens_size = 0; /* 0 means no ESD */
+        parameters->jpwl_sens_addr = 0; /* 0 means auto */
+        parameters->jpwl_sens_range = 0; /* 0 means packet */
+        parameters->jpwl_sens_MH = -1; /* -1 means unassigned */
+        {
+            int i;
+            for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) {
+                parameters->jpwl_sens_TPH_tileno[i] = -1; /* unassigned */
+                parameters->jpwl_sens_TPH[i] = -1; /* absent */
+            }
+        };
 #endif /* USE_JPWL */
-/* <<UniPG */
-       }
+        /* <<UniPG */
+    }
 }
 
-OPJ_BOOL OPJ_CALLCONV opj_setup_encoder(opj_codec_t *p_codec, 
-                                                                               opj_cparameters_t *parameters, 
-                                                                               opj_image_t *p_image)
+OPJ_BOOL OPJ_CALLCONV opj_setup_encoder(opj_codec_t *p_codec,
+                                        opj_cparameters_t *parameters,
+                                        opj_image_t *p_image)
 {
-       if (p_codec && parameters && p_image) {
-               opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
+    if (p_codec && parameters && p_image) {
+        opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
 
-               if (! l_codec->is_decompressor) {
-                       return l_codec->m_codec_data.m_compression.opj_setup_encoder(   l_codec->m_codec,
-                                                                                                                                       parameters,
-                                                                                                                                       p_image,
-                                                                                                                                       &(l_codec->m_event_mgr) );
-               }
-       }
+        if (! l_codec->is_decompressor) {
+            return l_codec->m_codec_data.m_compression.opj_setup_encoder(l_codec->m_codec,
+                    parameters,
+                    p_image,
+                    &(l_codec->m_event_mgr));
+        }
+    }
 
-       return OPJ_FALSE;
+    return OPJ_FALSE;
 }
 
-OPJ_BOOL OPJ_CALLCONV opj_start_compress (     opj_codec_t *p_codec,
-                                                                                       opj_image_t * p_image,
-                                                                                       opj_stream_t *p_stream)
+OPJ_BOOL OPJ_CALLCONV opj_start_compress(opj_codec_t *p_codec,
+        opj_image_t * p_image,
+        opj_stream_t *p_stream)
 {
-       if (p_codec && p_stream) {
-               opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
-               opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream;
+    if (p_codec && p_stream) {
+        opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
+        opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream;
 
-               if (! l_codec->is_decompressor) {
-                       return l_codec->m_codec_data.m_compression.opj_start_compress(  l_codec->m_codec,
-                                                                                                                                                       l_stream,
-                                                                                                                                                       p_image,
-                                                                                                                                                       &(l_codec->m_event_mgr));
-               }
-       }
+        if (! l_codec->is_decompressor) {
+            return l_codec->m_codec_data.m_compression.opj_start_compress(l_codec->m_codec,
+                    l_stream,
+                    p_image,
+                    &(l_codec->m_event_mgr));
+        }
+    }
 
-       return OPJ_FALSE;
+    return OPJ_FALSE;
 }
 
 OPJ_BOOL OPJ_CALLCONV opj_encode(opj_codec_t *p_info, opj_stream_t *p_stream)
 {
-       if (p_info && p_stream) {
-               opj_codec_private_t * l_codec = (opj_codec_private_t *) p_info;
-               opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream;
+    if (p_info && p_stream) {
+        opj_codec_private_t * l_codec = (opj_codec_private_t *) p_info;
+        opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream;
 
-               if (! l_codec->is_decompressor) {
-                       return l_codec->m_codec_data.m_compression.opj_encode(  l_codec->m_codec,
-                                                                                                                       l_stream,
-                                                                                                                       &(l_codec->m_event_mgr));
-               }
-       }
+        if (! l_codec->is_decompressor) {
+            return l_codec->m_codec_data.m_compression.opj_encode(l_codec->m_codec,
+                    l_stream,
+                    &(l_codec->m_event_mgr));
+        }
+    }
 
-       return OPJ_FALSE;
+    return OPJ_FALSE;
 
 }
 
-OPJ_BOOL OPJ_CALLCONV opj_end_compress (opj_codec_t *p_codec,
-                                                                               opj_stream_t *p_stream)
+OPJ_BOOL OPJ_CALLCONV opj_end_compress(opj_codec_t *p_codec,
+                                       opj_stream_t *p_stream)
 {
-       if (p_codec && p_stream) {
-               opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
-               opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream;
+    if (p_codec && p_stream) {
+        opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
+        opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream;
 
-               if (! l_codec->is_decompressor) {
-                       return l_codec->m_codec_data.m_compression.opj_end_compress(l_codec->m_codec,
-                                                                                                                                               l_stream,
-                                                                                                                                               &(l_codec->m_event_mgr));
-               }
-       }
-       return OPJ_FALSE;
+        if (! l_codec->is_decompressor) {
+            return l_codec->m_codec_data.m_compression.opj_end_compress(l_codec->m_codec,
+                    l_stream,
+                    &(l_codec->m_event_mgr));
+        }
+    }
+    return OPJ_FALSE;
 
 }
 
-OPJ_BOOL OPJ_CALLCONV opj_end_decompress (     opj_codec_t *p_codec,
-                                                                                       opj_stream_t *p_stream)
+OPJ_BOOL OPJ_CALLCONV opj_end_decompress(opj_codec_t *p_codec,
+        opj_stream_t *p_stream)
 {
-       if (p_codec && p_stream) {
-               opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
-               opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream;
+    if (p_codec && p_stream) {
+        opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
+        opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream;
 
-               if (! l_codec->is_decompressor) {
-                       return OPJ_FALSE;
-               }
-               
-               return l_codec->m_codec_data.m_decompression.opj_end_decompress(l_codec->m_codec,
-                                                                                                                                               l_stream,
-                                                                                                                                               &(l_codec->m_event_mgr) );
-       }
+        if (! l_codec->is_decompressor) {
+            return OPJ_FALSE;
+        }
 
-       return OPJ_FALSE;
+        return l_codec->m_codec_data.m_decompression.opj_end_decompress(
+                   l_codec->m_codec,
+                   l_stream,
+                   &(l_codec->m_event_mgr));
+    }
+
+    return OPJ_FALSE;
 }
 
 OPJ_BOOL OPJ_CALLCONV opj_set_MCT(opj_cparameters_t *parameters,
                                   OPJ_FLOAT32 * pEncodingMatrix,
-                                  OPJ_INT32 * p_dc_shift,OPJ_UINT32 pNbComp)
+                                  OPJ_INT32 * p_dc_shift, OPJ_UINT32 pNbComp)
 {
-       OPJ_UINT32 l_matrix_size = pNbComp * pNbComp * (OPJ_UINT32)sizeof(OPJ_FLOAT32);
-       OPJ_UINT32 l_dc_shift_size = pNbComp * (OPJ_UINT32)sizeof(OPJ_INT32);
-       OPJ_UINT32 l_mct_total_size = l_matrix_size + l_dc_shift_size;
+    OPJ_UINT32 l_matrix_size = pNbComp * pNbComp * (OPJ_UINT32)sizeof(OPJ_FLOAT32);
+    OPJ_UINT32 l_dc_shift_size = pNbComp * (OPJ_UINT32)sizeof(OPJ_INT32);
+    OPJ_UINT32 l_mct_total_size = l_matrix_size + l_dc_shift_size;
 
-       /* add MCT capability */
+    /* add MCT capability */
     if (OPJ_IS_PART2(parameters->rsiz)) {
         parameters->rsiz |= OPJ_EXTENSION_MCT;
     } else {
         parameters->rsiz = ((OPJ_PROFILE_PART2) | (OPJ_EXTENSION_MCT));
     }
-       parameters->irreversible = 1;
+    parameters->irreversible = 1;
 
-       /* use array based MCT */
-       parameters->tcp_mct = 2;
-       parameters->mct_data = opj_malloc(l_mct_total_size);
-       if (! parameters->mct_data) {
-               return OPJ_FALSE;
-       }
+    /* use array based MCT */
+    parameters->tcp_mct = 2;
+    parameters->mct_data = opj_malloc(l_mct_total_size);
+    if (! parameters->mct_data) {
+        return OPJ_FALSE;
+    }
 
-       memcpy(parameters->mct_data,pEncodingMatrix,l_matrix_size);
-       memcpy(((OPJ_BYTE *) parameters->mct_data) +  l_matrix_size,p_dc_shift,l_dc_shift_size);
+    memcpy(parameters->mct_data, pEncodingMatrix, l_matrix_size);
+    memcpy(((OPJ_BYTE *) parameters->mct_data) +  l_matrix_size, p_dc_shift,
+           l_dc_shift_size);
 
-       return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-OPJ_BOOL OPJ_CALLCONV opj_write_tile ( opj_codec_t *p_codec,
-                                                                               OPJ_UINT32 p_tile_index,
-                                                                               OPJ_BYTE * p_data,
-                                                                               OPJ_UINT32 p_data_size,
-                                                                               opj_stream_t *p_stream )
+OPJ_BOOL OPJ_CALLCONV opj_write_tile(opj_codec_t *p_codec,
+                                     OPJ_UINT32 p_tile_index,
+                                     OPJ_BYTE * p_data,
+                                     OPJ_UINT32 p_data_size,
+                                     opj_stream_t *p_stream)
 {
-       if (p_codec && p_stream && p_data) {
-               opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
-               opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream;
+    if (p_codec && p_stream && p_data) {
+        opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
+        opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream;
 
-               if (l_codec->is_decompressor) {
-                       return OPJ_FALSE;
-               }
+        if (l_codec->is_decompressor) {
+            return OPJ_FALSE;
+        }
 
-               return l_codec->m_codec_data.m_compression.opj_write_tile(      l_codec->m_codec,
-                                                                                                                                       p_tile_index,
-                                                                                                                                       p_data,
-                                                                                                                                       p_data_size,
-                                                                                                                                       l_stream,
-                                                                                                                                       &(l_codec->m_event_mgr) );
-       }
+        return l_codec->m_codec_data.m_compression.opj_write_tile(l_codec->m_codec,
+                p_tile_index,
+                p_data,
+                p_data_size,
+                l_stream,
+                &(l_codec->m_event_mgr));
+    }
 
-       return OPJ_FALSE;
+    return OPJ_FALSE;
 }
 
 /* ---------------------------------------------------------------------- */
 
 void OPJ_CALLCONV opj_destroy_codec(opj_codec_t *p_codec)
 {
-       if (p_codec) {
-               opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
+    if (p_codec) {
+        opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec;
 
-               if (l_codec->is_decompressor) {
-                       l_codec->m_codec_data.m_decompression.opj_destroy(l_codec->m_codec);
-               }
-               else {
-                       l_codec->m_codec_data.m_compression.opj_destroy(l_codec->m_codec);
-               }
+        if (l_codec->is_decompressor) {
+            l_codec->m_codec_data.m_decompression.opj_destroy(l_codec->m_codec);
+        } else {
+            l_codec->m_codec_data.m_compression.opj_destroy(l_codec->m_codec);
+        }
 
-               l_codec->m_codec = 00;
-               opj_free(l_codec);
-       }
+        l_codec->m_codec = 00;
+        opj_free(l_codec);
+    }
 }
 
 /* ---------------------------------------------------------------------- */
 
-void OPJ_CALLCONV opj_dump_codec(      opj_codec_t *p_codec,
-                                                                       OPJ_INT32 info_flag,
-                                                                       FILE* output_stream)
+void OPJ_CALLCONV opj_dump_codec(opj_codec_t *p_codec,
+                                 OPJ_INT32 info_flag,
+                                 FILE* output_stream)
 {
-       if (p_codec) {
-               opj_codec_private_t* l_codec = (opj_codec_private_t*) p_codec;
+    if (p_codec) {
+        opj_codec_private_t* l_codec = (opj_codec_private_t*) p_codec;
 
-               l_codec->opj_dump_codec(l_codec->m_codec, info_flag, output_stream);
-               return;
-       }
+        l_codec->opj_dump_codec(l_codec->m_codec, info_flag, output_stream);
+        return;
+    }
 
-       /* TODO return error */
-       /* fprintf(stderr, "[ERROR] Input parameter of the dump_codec function are incorrect.\n"); */
-       return;
+    /* TODO return error */
+    /* fprintf(stderr, "[ERROR] Input parameter of the dump_codec function are incorrect.\n"); */
+    return;
 }
 
 opj_codestream_info_v2_t* OPJ_CALLCONV opj_get_cstr_info(opj_codec_t *p_codec)
 {
-       if (p_codec) {
-               opj_codec_private_t* l_codec = (opj_codec_private_t*) p_codec;
+    if (p_codec) {
+        opj_codec_private_t* l_codec = (opj_codec_private_t*) p_codec;
 
-               return l_codec->opj_get_codec_info(l_codec->m_codec);
-       }
+        return l_codec->opj_get_codec_info(l_codec->m_codec);
+    }
 
-       return NULL;
+    return NULL;
 }
 
-void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_v2_t **cstr_info) {
-       if (cstr_info) {
+void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_v2_t **cstr_info)
+{
+    if (cstr_info) {
 
-               if ((*cstr_info)->m_default_tile_info.tccp_info){
-                       opj_free((*cstr_info)->m_default_tile_info.tccp_info);
-               }
+        if ((*cstr_info)->m_default_tile_info.tccp_info) {
+            opj_free((*cstr_info)->m_default_tile_info.tccp_info);
+        }
 
-               if ((*cstr_info)->tile_info){
-                       /* FIXME not used for the moment*/
-               }
+        if ((*cstr_info)->tile_info) {
+            /* FIXME not used for the moment*/
+        }
 
-               opj_free((*cstr_info));
-               (*cstr_info) = NULL;
-       }
+        opj_free((*cstr_info));
+        (*cstr_info) = NULL;
+    }
 }
 
 opj_codestream_index_t * OPJ_CALLCONV opj_get_cstr_index(opj_codec_t *p_codec)
 {
-       if (p_codec) {
-               opj_codec_private_t* l_codec = (opj_codec_private_t*) p_codec;
+    if (p_codec) {
+        opj_codec_private_t* l_codec = (opj_codec_private_t*) p_codec;
 
-               return l_codec->opj_get_codec_index(l_codec->m_codec);
-       }
+        return l_codec->opj_get_codec_index(l_codec->m_codec);
+    }
 
-       return NULL;
+    return NULL;
 }
 
 void OPJ_CALLCONV opj_destroy_cstr_index(opj_codestream_index_t **p_cstr_index)
 {
-       if (*p_cstr_index){
-               j2k_destroy_cstr_index(*p_cstr_index);
-               (*p_cstr_index) = NULL;
-       }
+    if (*p_cstr_index) {
+        j2k_destroy_cstr_index(*p_cstr_index);
+        (*p_cstr_index) = NULL;
+    }
 }
 
-opj_stream_t* OPJ_CALLCONV opj_stream_create_default_file_stream (const char *fname, OPJ_BOOL p_is_read_stream)
+opj_stream_t* OPJ_CALLCONV opj_stream_create_default_file_stream(
+    const char *fname, OPJ_BOOL p_is_read_stream)
 {
-    return opj_stream_create_file_stream(fname, OPJ_J2K_STREAM_CHUNK_SIZE, p_is_read_stream);
+    return opj_stream_create_file_stream(fname, OPJ_J2K_STREAM_CHUNK_SIZE,
+                                         p_is_read_stream);
 }
 
-opj_stream_t* OPJ_CALLCONV opj_stream_create_file_stream (
-        const char *fname, 
-               OPJ_SIZE_T p_size, 
-        OPJ_BOOL p_is_read_stream)
+opj_stream_t* OPJ_CALLCONV opj_stream_create_file_stream(
+    const char *fname,
+    OPJ_SIZE_T p_size,
+    OPJ_BOOL p_is_read_stream)
 {
     opj_stream_t* l_stream = 00;
     FILE *p_file;
@@ -952,25 +976,32 @@ opj_stream_t* OPJ_CALLCONV opj_stream_create_file_stream (
     if (! fname) {
         return NULL;
     }
-    
-    if(p_is_read_stream) mode = "rb"; else mode = "wb";
+
+    if (p_is_read_stream) {
+        mode = "rb";
+    } else {
+        mode = "wb";
+    }
 
     p_file = fopen(fname, mode);
 
     if (! p_file) {
-           return NULL;
+        return NULL;
     }
 
-    l_stream = opj_stream_create(p_size,p_is_read_stream);
+    l_stream = opj_stream_create(p_size, p_is_read_stream);
     if (! l_stream) {
         fclose(p_file);
         return NULL;
     }
 
-    opj_stream_set_user_data(l_stream, p_file, (opj_stream_free_user_data_fn) fclose);
-    opj_stream_set_user_data_length(l_stream, opj_get_data_length_from_file(p_file));
+    opj_stream_set_user_data(l_stream, p_file,
+                             (opj_stream_free_user_data_fn) fclose);
+    opj_stream_set_user_data_length(l_stream,
+                                    opj_get_data_length_from_file(p_file));
     opj_stream_set_read_function(l_stream, (opj_stream_read_fn) opj_read_from_file);
-    opj_stream_set_write_function(l_stream, (opj_stream_write_fn) opj_write_from_file);
+    opj_stream_set_write_function(l_stream,
+                                  (opj_stream_write_fn) opj_write_from_file);
     opj_stream_set_skip_function(l_stream, (opj_stream_skip_fn) opj_skip_from_file);
     opj_stream_set_seek_function(l_stream, (opj_stream_seek_fn) opj_seek_from_file);
 
index bb4cae734ad075705fee65bd8769bb51e282804c..ab026ea291c4a6cbb94616f3291969bcc189028c 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
 #include <sys/times.h>
 #endif /* _WIN32 */
 
-OPJ_FLOAT64 opj_clock(void) {
+OPJ_FLOAT64 opj_clock(void)
+{
 #ifdef _WIN32
-       /* _WIN32: use QueryPerformance (very accurate) */
-    LARGE_INTEGER freq , t ;
+    /* _WIN32: use QueryPerformance (very accurate) */
+    LARGE_INTEGER freq, t ;
     /* freq is the clock speed of the CPU */
     QueryPerformanceFrequency(&freq) ;
-       /* cout << "freq = " << ((double) freq.QuadPart) << endl; */
+    /* cout << "freq = " << ((double) freq.QuadPart) << endl; */
     /* t is the high resolution performance counter (see MSDN) */
-    QueryPerformanceCounter ( & t ) ;
-    return ( t.QuadPart /(OPJ_FLOAT64) freq.QuadPart ) ;
+    QueryPerformanceCounter(& t) ;
+    return (t.QuadPart / (OPJ_FLOAT64) freq.QuadPart) ;
 #else
-       /* Unix or Linux: use resource usage */
+    /* Unix or Linux: use resource usage */
     struct rusage t;
     OPJ_FLOAT64 procTime;
     /* (1) Get the rusage data structure at this moment (man getrusage) */
-    getrusage(0,&t);
+    getrusage(0, &t);
     /* (2) What is the elapsed time ? - CPU time = User time + System time */
-       /* (2a) Get the seconds */
+    /* (2a) Get the seconds */
     procTime = (OPJ_FLOAT64)(t.ru_utime.tv_sec + t.ru_stime.tv_sec);
     /* (2b) More precisely! Get the microseconds part ! */
-    return ( procTime + (OPJ_FLOAT64)(t.ru_utime.tv_usec + t.ru_stime.tv_usec) * 1e-6 ) ;
+    return (procTime + (OPJ_FLOAT64)(t.ru_utime.tv_usec + t.ru_stime.tv_usec) *
+            1e-6) ;
 #endif
 }
 
index 4f8b1d6f77fc40717922e2fa8baad0e54aef5f20..9c438bdb0c6701bdc99cd46f938f24b9829fc2d7 100644 (file)
 
 static INLINE void *opj_aligned_alloc_n(size_t alignment, size_t size)
 {
-  void* ptr;
+    void* ptr;
 
-  /* alignment shall be power of 2 */
-  assert( (alignment != 0U) && ((alignment & (alignment - 1U)) == 0U));
-  /* alignment shall be at least sizeof(void*) */
-  assert( alignment >= sizeof(void*));
+    /* alignment shall be power of 2 */
+    assert((alignment != 0U) && ((alignment & (alignment - 1U)) == 0U));
+    /* alignment shall be at least sizeof(void*) */
+    assert(alignment >= sizeof(void*));
 
-  if (size == 0U) { /* prevent implementation defined behavior of realloc */
-    return NULL;
-  }
+    if (size == 0U) { /* prevent implementation defined behavior of realloc */
+        return NULL;
+    }
 
 #if defined(OPJ_HAVE_POSIX_MEMALIGN)
-  /* aligned_alloc requires c11, restrict to posix_memalign for now. Quote:
-   * This function was introduced in POSIX 1003.1d. Although this function is
-   * superseded by aligned_alloc, it is more portable to older POSIX systems
-   * that do not support ISO C11.  */
-  if (posix_memalign (&ptr, alignment, size))
-  {
-    ptr = NULL;
-  }
-  /* older linux */
+    /* aligned_alloc requires c11, restrict to posix_memalign for now. Quote:
+     * This function was introduced in POSIX 1003.1d. Although this function is
+     * superseded by aligned_alloc, it is more portable to older POSIX systems
+     * that do not support ISO C11.  */
+    if (posix_memalign(&ptr, alignment, size)) {
+        ptr = NULL;
+    }
+    /* older linux */
 #elif defined(OPJ_HAVE_MEMALIGN)
-  ptr = memalign( alignment, size );
-/* _MSC_VER */
+    ptr = memalign(alignment, size);
+    /* _MSC_VER */
 #elif defined(OPJ_HAVE__ALIGNED_MALLOC)
-  ptr = _aligned_malloc(size, alignment);
+    ptr = _aligned_malloc(size, alignment);
 #else
-  /*
-   * Generic aligned malloc implementation.
-   * Uses size_t offset for the integer manipulation of the pointer,
-   * as uintptr_t is not available in C89 to do
-   * bitwise operations on the pointer itself.
-   */
-  alignment--;
-  {
-    size_t offset;
-    OPJ_UINT8 *mem;
-
-    /* Room for padding and extra pointer stored in front of allocated area */
-    size_t overhead = alignment + sizeof(void *);
-
-    /* let's be extra careful */
-    assert(alignment <= (SIZE_MAX - sizeof(void *)));
-
-    /* Avoid integer overflow */
-    if (size > (SIZE_MAX - overhead)) {
-      return NULL;
-    }
-
-    mem = (OPJ_UINT8*)malloc(size + overhead);
-    if (mem == NULL) {
-      return mem;
+    /*
+     * Generic aligned malloc implementation.
+     * Uses size_t offset for the integer manipulation of the pointer,
+     * as uintptr_t is not available in C89 to do
+     * bitwise operations on the pointer itself.
+     */
+    alignment--;
+    {
+        size_t offset;
+        OPJ_UINT8 *mem;
+
+        /* Room for padding and extra pointer stored in front of allocated area */
+        size_t overhead = alignment + sizeof(void *);
+
+        /* let's be extra careful */
+        assert(alignment <= (SIZE_MAX - sizeof(void *)));
+
+        /* Avoid integer overflow */
+        if (size > (SIZE_MAX - overhead)) {
+            return NULL;
+        }
+
+        mem = (OPJ_UINT8*)malloc(size + overhead);
+        if (mem == NULL) {
+            return mem;
+        }
+        /* offset = ((alignment + 1U) - ((size_t)(mem + sizeof(void*)) & alignment)) & alignment; */
+        /* Use the fact that alignment + 1U is a power of 2 */
+        offset = ((alignment ^ ((size_t)(mem + sizeof(void*)) & alignment)) + 1U) &
+                 alignment;
+        ptr = (void *)(mem + sizeof(void*) + offset);
+        ((void**) ptr)[-1] = mem;
     }
-    /* offset = ((alignment + 1U) - ((size_t)(mem + sizeof(void*)) & alignment)) & alignment; */
-    /* Use the fact that alignment + 1U is a power of 2 */
-    offset = ((alignment ^ ((size_t)(mem + sizeof(void*)) & alignment)) + 1U) & alignment;
-    ptr = (void *)(mem + sizeof(void*) + offset);
-    ((void**) ptr)[-1] = mem;
-  }
 #endif
-  return ptr;
+    return ptr;
 }
-static INLINE void *opj_aligned_realloc_n(void *ptr, size_t alignment, size_t new_size)
+static INLINE void *opj_aligned_realloc_n(void *ptr, size_t alignment,
+        size_t new_size)
 {
-  void *r_ptr;
+    void *r_ptr;
 
-  /* alignment shall be power of 2 */
-  assert( (alignment != 0U) && ((alignment & (alignment - 1U)) == 0U));
-  /* alignment shall be at least sizeof(void*) */
-  assert( alignment >= sizeof(void*));
+    /* alignment shall be power of 2 */
+    assert((alignment != 0U) && ((alignment & (alignment - 1U)) == 0U));
+    /* alignment shall be at least sizeof(void*) */
+    assert(alignment >= sizeof(void*));
 
-  if (new_size == 0U) { /* prevent implementation defined behavior of realloc */
-    return NULL;
-  }
+    if (new_size == 0U) { /* prevent implementation defined behavior of realloc */
+        return NULL;
+    }
 
-/* no portable aligned realloc */
+    /* no portable aligned realloc */
 #if defined(OPJ_HAVE_POSIX_MEMALIGN) || defined(OPJ_HAVE_MEMALIGN)
-  /* glibc doc states one can mix aligned malloc with realloc */
-  r_ptr = realloc( ptr, new_size ); /* fast path */
-  /* we simply use `size_t` to cast, since we are only interest in binary AND
-   * operator */
-  if( ((size_t)r_ptr & (alignment - 1U)) != 0U ) {
-    /* this is non-trivial to implement a portable aligned realloc, so use a
-     * simple approach where we do not need a function that return the size of an
-     * allocated array (eg. _msize on Windows, malloc_size on MacOS,
-     * malloc_usable_size on systems with glibc) */
-    void *a_ptr = opj_aligned_alloc_n(alignment, new_size);
-    if (a_ptr != NULL) {
-      memcpy(a_ptr, r_ptr, new_size);
+    /* glibc doc states one can mix aligned malloc with realloc */
+    r_ptr = realloc(ptr, new_size);   /* fast path */
+    /* we simply use `size_t` to cast, since we are only interest in binary AND
+     * operator */
+    if (((size_t)r_ptr & (alignment - 1U)) != 0U) {
+        /* this is non-trivial to implement a portable aligned realloc, so use a
+         * simple approach where we do not need a function that return the size of an
+         * allocated array (eg. _msize on Windows, malloc_size on MacOS,
+         * malloc_usable_size on systems with glibc) */
+        void *a_ptr = opj_aligned_alloc_n(alignment, new_size);
+        if (a_ptr != NULL) {
+            memcpy(a_ptr, r_ptr, new_size);
+        }
+        free(r_ptr);
+        r_ptr = a_ptr;
     }
-    free( r_ptr );
-    r_ptr = a_ptr;
-  }
-/* _MSC_VER */
+    /* _MSC_VER */
 #elif defined(OPJ_HAVE__ALIGNED_MALLOC)
-  r_ptr = _aligned_realloc( ptr, new_size, alignment );
+    r_ptr = _aligned_realloc(ptr, new_size, alignment);
 #else
-  if (ptr == NULL) {
-    return opj_aligned_alloc_n(alignment, new_size);
-  }
-  alignment--;
-  {
-    void *oldmem;
-    OPJ_UINT8 *newmem;
-    size_t overhead = alignment + sizeof(void *);
-
-    /* let's be extra careful */
-    assert(alignment <= (SIZE_MAX - sizeof(void *)));
-
-    /* Avoid integer overflow */
-    if (new_size > SIZE_MAX - overhead) {
-      return NULL;
+    if (ptr == NULL) {
+        return opj_aligned_alloc_n(alignment, new_size);
     }
-
-    oldmem = ((void**) ptr)[-1];
-    newmem = (OPJ_UINT8*)realloc(oldmem, new_size + overhead);
-    if (newmem == NULL) {
-      return newmem;
+    alignment--;
+    {
+        void *oldmem;
+        OPJ_UINT8 *newmem;
+        size_t overhead = alignment + sizeof(void *);
+
+        /* let's be extra careful */
+        assert(alignment <= (SIZE_MAX - sizeof(void *)));
+
+        /* Avoid integer overflow */
+        if (new_size > SIZE_MAX - overhead) {
+            return NULL;
+        }
+
+        oldmem = ((void**) ptr)[-1];
+        newmem = (OPJ_UINT8*)realloc(oldmem, new_size + overhead);
+        if (newmem == NULL) {
+            return newmem;
+        }
+
+        if (newmem == oldmem) {
+            r_ptr = ptr;
+        } else {
+            size_t old_offset;
+            size_t new_offset;
+
+            /* realloc created a new copy, realign the copied memory block */
+            old_offset = (size_t)((OPJ_UINT8*)ptr - (OPJ_UINT8*)oldmem);
+
+            /* offset = ((alignment + 1U) - ((size_t)(mem + sizeof(void*)) & alignment)) & alignment; */
+            /* Use the fact that alignment + 1U is a power of 2 */
+            new_offset  = ((alignment ^ ((size_t)(newmem + sizeof(void*)) & alignment)) +
+                           1U) & alignment;
+            new_offset += sizeof(void*);
+            r_ptr = (void *)(newmem + new_offset);
+
+            if (new_offset != old_offset) {
+                memmove(newmem + new_offset, newmem + old_offset, new_size);
+            }
+            ((void**) r_ptr)[-1] = newmem;
+        }
     }
-
-    if (newmem == oldmem) {
-      r_ptr = ptr;
-    }
-    else {
-      size_t old_offset;
-      size_t new_offset;
-
-      /* realloc created a new copy, realign the copied memory block */
-      old_offset = (size_t)((OPJ_UINT8*)ptr - (OPJ_UINT8*)oldmem);
-
-      /* offset = ((alignment + 1U) - ((size_t)(mem + sizeof(void*)) & alignment)) & alignment; */
-      /* Use the fact that alignment + 1U is a power of 2 */
-      new_offset  = ((alignment ^ ((size_t)(newmem + sizeof(void*)) & alignment)) + 1U) & alignment;
-                       new_offset += sizeof(void*);
-      r_ptr = (void *)(newmem + new_offset);
-
-      if (new_offset != old_offset) {
-        memmove(newmem + new_offset, newmem + old_offset, new_size);
-      }
-      ((void**) r_ptr)[-1] = newmem;
-    }
-  }
 #endif
-       return r_ptr;
+    return r_ptr;
 }
 void * opj_malloc(size_t size)
 {
-  if (size == 0U) { /* prevent implementation defined behavior of realloc */
-    return NULL;
-  }
-  return malloc(size);
+    if (size == 0U) { /* prevent implementation defined behavior of realloc */
+        return NULL;
+    }
+    return malloc(size);
 }
 void * opj_calloc(size_t num, size_t size)
 {
-  if (num == 0 || size == 0) {
-    /* prevent implementation defined behavior of realloc */
-    return NULL;
-  }
-  return calloc(num, size);
+    if (num == 0 || size == 0) {
+        /* prevent implementation defined behavior of realloc */
+        return NULL;
+    }
+    return calloc(num, size);
 }
 
 void *opj_aligned_malloc(size_t size)
 {
-  return opj_aligned_alloc_n(16U, size);
+    return opj_aligned_alloc_n(16U, size);
 }
 void * opj_aligned_realloc(void *ptr, size_t size)
 {
-  return opj_aligned_realloc_n(ptr, 16U, size);
+    return opj_aligned_realloc_n(ptr, 16U, size);
 }
 
 void opj_aligned_free(void* ptr)
 {
 #if defined(OPJ_HAVE_POSIX_MEMALIGN) || defined(OPJ_HAVE_MEMALIGN)
-  free( ptr );
+    free(ptr);
 #elif defined(OPJ_HAVE__ALIGNED_MALLOC)
-  _aligned_free( ptr );
+    _aligned_free(ptr);
 #else
-  /* Generic implementation has malloced pointer stored in front of used area */
-  if (ptr != NULL) {
-    free(((void**) ptr)[-1]);
-  }
+    /* Generic implementation has malloced pointer stored in front of used area */
+    if (ptr != NULL) {
+        free(((void**) ptr)[-1]);
+    }
 #endif
 }
 
 void * opj_realloc(void *ptr, size_t new_size)
 {
-  if (new_size == 0U) { /* prevent implementation defined behavior of realloc */
-    return NULL;
-  }
-  return realloc(ptr, new_size);
+    if (new_size == 0U) { /* prevent implementation defined behavior of realloc */
+        return NULL;
+    }
+    return realloc(ptr, new_size);
 }
 void opj_free(void *ptr)
 {
-  free(ptr);
+    free(ptr);
 }
index 45e559d4388813b35bafab1f940c270176bb8573..796ce7eb6460c87d19b38986fb72731884b80d66 100644 (file)
@@ -36,7 +36,7 @@
 #include "opj_includes.h"
 
 
-/* 
+/*
  * Write faix box of phix
  *
  * @param[in] coff      offset of j2k codestream
  * @return              length of faix box
  */
 
-int opj_write_phix( int coff, opj_codestream_info_t cstr_info, OPJ_BOOL EPHused, int j2klen, opj_stream_private_t *cio,
-              opj_event_mgr_t * p_manager )
+int opj_write_phix(int coff, opj_codestream_info_t cstr_info, OPJ_BOOL EPHused,
+                   int j2klen, opj_stream_private_t *cio,
+                   opj_event_mgr_t * p_manager)
 {
-  OPJ_BYTE l_data_header [8];
-  OPJ_UINT32 len, compno, i;
-  opj_jp2_box_t *box;
-  OPJ_OFF_T lenp = 0;
-
-  box = (opj_jp2_box_t *)opj_calloc( (size_t)cstr_info.numcomps, sizeof(opj_jp2_box_t));
-  if(box == NULL){
-               return 0;
-  }
-  for( i=0;i<2;i++){
-    if (i)
-      opj_stream_seek( cio, lenp, p_manager);
-      
-    lenp = opj_stream_tell(cio);
-    opj_stream_skip(cio, 4, p_manager);         /* L [at the end]      */
-    opj_write_bytes(l_data_header,JPIP_PHIX,4); /* PHIX */
-    opj_stream_write_data(cio,l_data_header,4,p_manager);
-      
-    opj_write_manf( (int)i, cstr_info.numcomps, box, cio, p_manager );
-
-    for( compno=0; compno<(OPJ_UINT32)cstr_info.numcomps; compno++){       
-      box[compno].length = (OPJ_UINT32)opj_write_phixfaix( coff, (int)compno, cstr_info, EPHused, j2klen, cio,p_manager);
-      box[compno].type = JPIP_FAIX;
+    OPJ_BYTE l_data_header [8];
+    OPJ_UINT32 len, compno, i;
+    opj_jp2_box_t *box;
+    OPJ_OFF_T lenp = 0;
+
+    box = (opj_jp2_box_t *)opj_calloc((size_t)cstr_info.numcomps,
+                                      sizeof(opj_jp2_box_t));
+    if (box == NULL) {
+        return 0;
+    }
+    for (i = 0; i < 2; i++) {
+        if (i) {
+            opj_stream_seek(cio, lenp, p_manager);
+        }
+
+        lenp = opj_stream_tell(cio);
+        opj_stream_skip(cio, 4, p_manager);         /* L [at the end]      */
+        opj_write_bytes(l_data_header, JPIP_PHIX, 4); /* PHIX */
+        opj_stream_write_data(cio, l_data_header, 4, p_manager);
+
+        opj_write_manf((int)i, cstr_info.numcomps, box, cio, p_manager);
+
+        for (compno = 0; compno < (OPJ_UINT32)cstr_info.numcomps; compno++) {
+            box[compno].length = (OPJ_UINT32)opj_write_phixfaix(coff, (int)compno,
+                                 cstr_info, EPHused, j2klen, cio, p_manager);
+            box[compno].type = JPIP_FAIX;
+        }
+
+        len = (OPJ_UINT32)(opj_stream_tell(cio) - lenp);
+        opj_stream_seek(cio, 4, p_manager);
+        opj_write_bytes(l_data_header, len, 4); /* L              */
+        opj_stream_write_data(cio, l_data_header, 4, p_manager);
+        opj_stream_seek(cio, lenp + len, p_manager);
     }
 
-    len = (OPJ_UINT32)(opj_stream_tell(cio)-lenp);
-    opj_stream_seek(cio, 4, p_manager);
-    opj_write_bytes(l_data_header,len,4);/* L              */
-    opj_stream_write_data(cio,l_data_header,4,p_manager);
-    opj_stream_seek( cio, lenp+len,p_manager);
-  }
-
-  opj_free(box);
+    opj_free(box);
 
-  return (int)len;
+    return (int)len;
 }
 
 
-int opj_write_phixfaix( int coff, int compno, opj_codestream_info_t cstr_info, OPJ_BOOL EPHused, int j2klen, opj_stream_private_t *cio,
-              opj_event_mgr_t * p_manager )
+int opj_write_phixfaix(int coff, int compno, opj_codestream_info_t cstr_info,
+                       OPJ_BOOL EPHused, int j2klen, opj_stream_private_t *cio,
+                       opj_event_mgr_t * p_manager)
 {
-  OPJ_UINT32 tileno, version, i, nmax, size_of_coding; /* 4 or 8 */
-  opj_tile_info_t *tile_Idx;
-  opj_packet_info_t packet;
-  int resno, precno, layno;
-  OPJ_UINT32 num_packet;
-  int numOfres, numOfprec, numOflayers;
-  OPJ_BYTE l_data_header [8];
-  OPJ_OFF_T lenp;
-  OPJ_UINT32 len;
-
-  packet.end_ph_pos = packet.start_pos = -1;
-  (void)EPHused; /* unused ? */
-
-
-  if( j2klen > pow( 2, 32)){
-    size_of_coding =  8;
-    version = 1;
-  }
-  else{
-    size_of_coding = 4;
-    version = 0;
-  }
-
-  lenp = opj_stream_tell(cio);
-  opj_stream_skip(cio, 4, p_manager);         /* L [at the end]      */
-  opj_write_bytes(l_data_header,JPIP_FAIX,4); /* FAIX */
-  opj_stream_write_data(cio,l_data_header,4,p_manager);
-  opj_write_bytes(l_data_header,version,1);   /* Version 0 = 4 bytes */
-  opj_stream_write_data(cio,l_data_header,1,p_manager);
-
-  nmax = 0;
-  for( i=0; i<=(OPJ_UINT32)cstr_info.numdecompos[compno]; i++)
-    nmax += (OPJ_UINT32)(cstr_info.tile[0].ph[i] * cstr_info.tile[0].pw[i] * cstr_info.numlayers);
-  
-  opj_write_bytes(l_data_header,nmax,size_of_coding);         /* NMAX           */
-  opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
-  opj_write_bytes(l_data_header,(OPJ_UINT32)(cstr_info.tw*cstr_info.th),size_of_coding);  /* M              */
-  opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
-  
-  for( tileno=0; tileno<(OPJ_UINT32)(cstr_info.tw*cstr_info.th); tileno++){
-    tile_Idx = &cstr_info.tile[ tileno];
-    
-    num_packet = 0;
-    numOfres = cstr_info.numdecompos[compno] + 1;
-
-    for( resno=0; resno<numOfres ; resno++){
-      numOfprec = tile_Idx->pw[resno]*tile_Idx->ph[resno];
-      for( precno=0; precno<numOfprec; precno++){
-       numOflayers = cstr_info.numlayers;
-       for( layno=0; layno<numOflayers; layno++){
-         
-         switch ( cstr_info.prog){
-         case OPJ_LRCP:
-           packet = tile_Idx->packet[ ((layno*numOfres+resno)*cstr_info.numcomps+compno)*numOfprec+precno];
-           break;
-         case OPJ_RLCP:
-           packet = tile_Idx->packet[ ((resno*numOflayers+layno)*cstr_info.numcomps+compno)*numOfprec+precno];
-           break;
-         case OPJ_RPCL:
-           packet = tile_Idx->packet[ ((resno*numOfprec+precno)*cstr_info.numcomps+compno)*numOflayers+layno];
-           break;
-         case OPJ_PCRL:
-           packet = tile_Idx->packet[ ((precno*cstr_info.numcomps+compno)*numOfres+resno)*numOflayers + layno];
-           break;
-         case OPJ_CPRL:
-           packet = tile_Idx->packet[ ((compno*numOfprec+precno)*numOfres+resno)*numOflayers + layno];
-           break;
-         default:
-           fprintf( stderr, "failed to ppix indexing\n");
-         }
-
-    opj_write_bytes(l_data_header,(OPJ_UINT32)(packet.start_pos-coff),size_of_coding);            /* start position */
-    opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
-    opj_write_bytes(l_data_header,(OPJ_UINT32)(packet.end_ph_pos-packet.start_pos+1),size_of_coding); /* length         */
-    opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
-         
-         num_packet++;
-       }
-      }
+    OPJ_UINT32 tileno, version, i, nmax, size_of_coding; /* 4 or 8 */
+    opj_tile_info_t *tile_Idx;
+    opj_packet_info_t packet;
+    int resno, precno, layno;
+    OPJ_UINT32 num_packet;
+    int numOfres, numOfprec, numOflayers;
+    OPJ_BYTE l_data_header [8];
+    OPJ_OFF_T lenp;
+    OPJ_UINT32 len;
+
+    packet.end_ph_pos = packet.start_pos = -1;
+    (void)EPHused; /* unused ? */
+
+
+    if (j2klen > pow(2, 32)) {
+        size_of_coding =  8;
+        version = 1;
+    } else {
+        size_of_coding = 4;
+        version = 0;
+    }
+
+    lenp = opj_stream_tell(cio);
+    opj_stream_skip(cio, 4, p_manager);         /* L [at the end]      */
+    opj_write_bytes(l_data_header, JPIP_FAIX, 4); /* FAIX */
+    opj_stream_write_data(cio, l_data_header, 4, p_manager);
+    opj_write_bytes(l_data_header, version, 1); /* Version 0 = 4 bytes */
+    opj_stream_write_data(cio, l_data_header, 1, p_manager);
+
+    nmax = 0;
+    for (i = 0; i <= (OPJ_UINT32)cstr_info.numdecompos[compno]; i++) {
+        nmax += (OPJ_UINT32)(cstr_info.tile[0].ph[i] * cstr_info.tile[0].pw[i] *
+                             cstr_info.numlayers);
     }
 
-    /* PADDING */
-    while( num_packet < nmax){
-      opj_write_bytes(l_data_header,0,size_of_coding);/* start position            */
-      opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
-      opj_write_bytes(l_data_header,0,size_of_coding);/* length                    */
-      opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
-      num_packet++;
+    opj_write_bytes(l_data_header, nmax, size_of_coding);       /* NMAX           */
+    opj_stream_write_data(cio, l_data_header, size_of_coding, p_manager);
+    opj_write_bytes(l_data_header, (OPJ_UINT32)(cstr_info.tw * cstr_info.th),
+                    size_of_coding);  /* M              */
+    opj_stream_write_data(cio, l_data_header, size_of_coding, p_manager);
+
+    for (tileno = 0; tileno < (OPJ_UINT32)(cstr_info.tw * cstr_info.th); tileno++) {
+        tile_Idx = &cstr_info.tile[ tileno];
+
+        num_packet = 0;
+        numOfres = cstr_info.numdecompos[compno] + 1;
+
+        for (resno = 0; resno < numOfres ; resno++) {
+            numOfprec = tile_Idx->pw[resno] * tile_Idx->ph[resno];
+            for (precno = 0; precno < numOfprec; precno++) {
+                numOflayers = cstr_info.numlayers;
+                for (layno = 0; layno < numOflayers; layno++) {
+
+                    switch (cstr_info.prog) {
+                    case OPJ_LRCP:
+                        packet = tile_Idx->packet[((layno * numOfres + resno) * cstr_info.numcomps +
+                                                                               compno) * numOfprec + precno];
+                        break;
+                    case OPJ_RLCP:
+                        packet = tile_Idx->packet[((resno * numOflayers + layno) * cstr_info.numcomps +
+                                                                                  compno) * numOfprec + precno];
+                        break;
+                    case OPJ_RPCL:
+                        packet = tile_Idx->packet[((resno * numOfprec + precno) * cstr_info.numcomps +
+                                                                                 compno) * numOflayers + layno];
+                        break;
+                    case OPJ_PCRL:
+                        packet = tile_Idx->packet[((precno * cstr_info.numcomps + compno) * numOfres +
+                                                                                           resno) * numOflayers + layno];
+                        break;
+                    case OPJ_CPRL:
+                        packet = tile_Idx->packet[((compno * numOfprec + precno) * numOfres + resno) *
+                                                                                 numOflayers + layno];
+                        break;
+                    default:
+                        fprintf(stderr, "failed to ppix indexing\n");
+                    }
+
+                    opj_write_bytes(l_data_header, (OPJ_UINT32)(packet.start_pos - coff),
+                                    size_of_coding);            /* start position */
+                    opj_stream_write_data(cio, l_data_header, size_of_coding, p_manager);
+                    opj_write_bytes(l_data_header,
+                                    (OPJ_UINT32)(packet.end_ph_pos - packet.start_pos + 1),
+                                    size_of_coding); /* length         */
+                    opj_stream_write_data(cio, l_data_header, size_of_coding, p_manager);
+
+                    num_packet++;
+                }
+            }
+        }
+
+        /* PADDING */
+        while (num_packet < nmax) {
+            opj_write_bytes(l_data_header, 0,
+                            size_of_coding); /* start position            */
+            opj_stream_write_data(cio, l_data_header, size_of_coding, p_manager);
+            opj_write_bytes(l_data_header, 0,
+                            size_of_coding); /* length                    */
+            opj_stream_write_data(cio, l_data_header, size_of_coding, p_manager);
+            num_packet++;
+        }
     }
-  }
 
-  len = (OPJ_UINT32)(opj_stream_tell(cio)-lenp);
-  opj_stream_seek(cio, lenp,p_manager);
-  opj_write_bytes(l_data_header,len,4);/* L  */
-  opj_stream_write_data(cio,l_data_header,4,p_manager);
-  opj_stream_seek(cio, lenp+len,p_manager);
+    len = (OPJ_UINT32)(opj_stream_tell(cio) - lenp);
+    opj_stream_seek(cio, lenp, p_manager);
+    opj_write_bytes(l_data_header, len, 4); /* L  */
+    opj_stream_write_data(cio, l_data_header, 4, p_manager);
+    opj_stream_seek(cio, lenp + len, p_manager);
 
-  return (int)len;
+    return (int)len;
 }
index 41a2f046fde9d284ed813d06d14c4a44df9fa345..c1724fd6d979f4fd023f88ba83bf66529c18cfb0 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * Copyright (c) 2006-2007, Parvatha Elangovan
@@ -78,68 +78,68 @@ static OPJ_BOOL opj_pi_next_cprl(opj_pi_iterator_t * pi);
 /**
  * Updates the coding parameters if the encoding is used with Progression order changes and final (or cinema parameters are used).
  *
- * @param      p_cp            the coding parameters to modify
- * @param      p_tileno        the tile index being concerned.
- * @param      p_tx0           X0 parameter for the tile
- * @param      p_tx1           X1 parameter for the tile
- * @param      p_ty0           Y0 parameter for the tile
- * @param      p_ty1           Y1 parameter for the tile
- * @param      p_max_prec      the maximum precision for all the bands of the tile
- * @param      p_max_res       the maximum number of resolutions for all the poc inside the tile.
- * @param      p_dx_min                the minimum dx of all the components of all the resolutions for the tile.
- * @param      p_dy_min                the minimum dy of all the components of all the resolutions for the tile.
+ * @param   p_cp        the coding parameters to modify
+ * @param   p_tileno    the tile index being concerned.
+ * @param   p_tx0       X0 parameter for the tile
+ * @param   p_tx1       X1 parameter for the tile
+ * @param   p_ty0       Y0 parameter for the tile
+ * @param   p_ty1       Y1 parameter for the tile
+ * @param   p_max_prec  the maximum precision for all the bands of the tile
+ * @param   p_max_res   the maximum number of resolutions for all the poc inside the tile.
+ * @param   p_dx_min        the minimum dx of all the components of all the resolutions for the tile.
+ * @param   p_dy_min        the minimum dy of all the components of all the resolutions for the tile.
  */
-static void opj_pi_update_encode_poc_and_final ( opj_cp_t *p_cp,
-                                                 OPJ_UINT32 p_tileno,
-                                                 OPJ_INT32 p_tx0,
-                                                 OPJ_INT32 p_tx1,
-                                                 OPJ_INT32 p_ty0,
-                                                 OPJ_INT32 p_ty1,
-                                                 OPJ_UINT32 p_max_prec,
-                                                 OPJ_UINT32 p_max_res,
-                                                 OPJ_UINT32 p_dx_min,
-                                                 OPJ_UINT32 p_dy_min);
+static void opj_pi_update_encode_poc_and_final(opj_cp_t *p_cp,
+        OPJ_UINT32 p_tileno,
+        OPJ_INT32 p_tx0,
+        OPJ_INT32 p_tx1,
+        OPJ_INT32 p_ty0,
+        OPJ_INT32 p_ty1,
+        OPJ_UINT32 p_max_prec,
+        OPJ_UINT32 p_max_res,
+        OPJ_UINT32 p_dx_min,
+        OPJ_UINT32 p_dy_min);
 
 /**
  * Updates the coding parameters if the encoding is not used with Progression order changes and final (and cinema parameters are used).
  *
- * @param      p_cp            the coding parameters to modify
- * @param      p_num_comps             the number of components
- * @param      p_tileno        the tile index being concerned.
- * @param      p_tx0           X0 parameter for the tile
- * @param      p_tx1           X1 parameter for the tile
- * @param      p_ty0           Y0 parameter for the tile
- * @param      p_ty1           Y1 parameter for the tile
- * @param      p_max_prec      the maximum precision for all the bands of the tile
- * @param      p_max_res       the maximum number of resolutions for all the poc inside the tile.
- * @param      p_dx_min                the minimum dx of all the components of all the resolutions for the tile.
- * @param      p_dy_min                the minimum dy of all the components of all the resolutions for the tile.
+ * @param   p_cp        the coding parameters to modify
+ * @param   p_num_comps     the number of components
+ * @param   p_tileno    the tile index being concerned.
+ * @param   p_tx0       X0 parameter for the tile
+ * @param   p_tx1       X1 parameter for the tile
+ * @param   p_ty0       Y0 parameter for the tile
+ * @param   p_ty1       Y1 parameter for the tile
+ * @param   p_max_prec  the maximum precision for all the bands of the tile
+ * @param   p_max_res   the maximum number of resolutions for all the poc inside the tile.
+ * @param   p_dx_min        the minimum dx of all the components of all the resolutions for the tile.
+ * @param   p_dy_min        the minimum dy of all the components of all the resolutions for the tile.
  */
-static void opj_pi_update_encode_not_poc (  opj_cp_t *p_cp,
-                                            OPJ_UINT32 p_num_comps,
-                                            OPJ_UINT32 p_tileno,
-                                            OPJ_INT32 p_tx0,
-                                            OPJ_INT32 p_tx1,
-                                            OPJ_INT32 p_ty0,
-                                            OPJ_INT32 p_ty1,
-                                            OPJ_UINT32 p_max_prec,
-                                            OPJ_UINT32 p_max_res,
-                                            OPJ_UINT32 p_dx_min,
-                                            OPJ_UINT32 p_dy_min);
+static void opj_pi_update_encode_not_poc(opj_cp_t *p_cp,
+        OPJ_UINT32 p_num_comps,
+        OPJ_UINT32 p_tileno,
+        OPJ_INT32 p_tx0,
+        OPJ_INT32 p_tx1,
+        OPJ_INT32 p_ty0,
+        OPJ_INT32 p_ty1,
+        OPJ_UINT32 p_max_prec,
+        OPJ_UINT32 p_max_res,
+        OPJ_UINT32 p_dx_min,
+        OPJ_UINT32 p_dy_min);
 /**
  * Gets the encoding parameters needed to update the coding parameters and all the pocs.
- * 
- * @param      p_image                 the image being encoded.
- * @param      p_cp                    the coding parameters.
- * @param      tileno                  the tile index of the tile being encoded.
- * @param      p_tx0                   pointer that will hold the X0 parameter for the tile
- * @param      p_tx1                   pointer that will hold the X1 parameter for the tile
- * @param      p_ty0                   pointer that will hold the Y0 parameter for the tile
- * @param      p_ty1                   pointer that will hold the Y1 parameter for the tile
- * @param      p_max_prec              pointer that will hold the maximum precision for all the bands of the tile
- * @param      p_max_res               pointer that will hold the maximum number of resolutions for all the poc inside the tile.
- * @param      p_dx_min                        pointer that will hold the minimum dx of all the components of all the resolutions for the tile.
- * @param      p_dy_min                        pointer that will hold the minimum dy of all the components of all the resolutions for the tile.
+ *
+ * @param   p_image         the image being encoded.
+ * @param   p_cp            the coding parameters.
+ * @param   tileno          the tile index of the tile being encoded.
+ * @param   p_tx0           pointer that will hold the X0 parameter for the tile
+ * @param   p_tx1           pointer that will hold the X1 parameter for the tile
+ * @param   p_ty0           pointer that will hold the Y0 parameter for the tile
+ * @param   p_ty1           pointer that will hold the Y1 parameter for the tile
+ * @param   p_max_prec      pointer that will hold the maximum precision for all the bands of the tile
+ * @param   p_max_res       pointer that will hold the maximum number of resolutions for all the poc inside the tile.
+ * @param   p_dx_min            pointer that will hold the minimum dx of all the components of all the resolutions for the tile.
+ * @param   p_dy_min            pointer that will hold the minimum dy of all the components of all the resolutions for the tile.
  */
 static void opj_get_encoding_parameters(const opj_image_t *p_image,
                                         const opj_cp_t *p_cp,
@@ -151,7 +151,7 @@ static void opj_get_encoding_parameters(const opj_image_t *p_image,
                                         OPJ_UINT32 * p_dx_min,
                                         OPJ_UINT32 * p_dy_min,
                                         OPJ_UINT32 * p_max_prec,
-                                        OPJ_UINT32 * p_max_res );
+                                        OPJ_UINT32 * p_max_res);
 
 /**
  * Gets the encoding parameters needed to update the coding parameters and all the pocs.
@@ -160,65 +160,65 @@ static void opj_get_encoding_parameters(const opj_image_t *p_image,
  * to an area of size 4 * max_res. The data is stored inside this area with the following pattern :
  * dx_compi_res0 , dy_compi_res0 , w_compi_res0, h_compi_res0 , dx_compi_res1 , dy_compi_res1 , w_compi_res1, h_compi_res1 , ...
  *
- * @param      p_image                 the image being encoded.
- * @param      p_cp                    the coding parameters.
- * @param      tileno                  the tile index of the tile being encoded.
- * @param      p_tx0                   pointer that will hold the X0 parameter for the tile
- * @param      p_tx1                   pointer that will hold the X1 parameter for the tile
- * @param      p_ty0                   pointer that will hold the Y0 parameter for the tile
- * @param      p_ty1                   pointer that will hold the Y1 parameter for the tile
- * @param      p_max_prec              pointer that will hold the maximum precision for all the bands of the tile
- * @param      p_max_res               pointer that will hold the maximum number of resolutions for all the poc inside the tile.
- * @param      p_dx_min                pointer that will hold the minimum dx of all the components of all the resolutions for the tile.
- * @param      p_dy_min                pointer that will hold the minimum dy of all the components of all the resolutions for the tile.
- * @param      p_resolutions   pointer to an area corresponding to the one described above.
+ * @param   p_image         the image being encoded.
+ * @param   p_cp            the coding parameters.
+ * @param   tileno          the tile index of the tile being encoded.
+ * @param   p_tx0           pointer that will hold the X0 parameter for the tile
+ * @param   p_tx1           pointer that will hold the X1 parameter for the tile
+ * @param   p_ty0           pointer that will hold the Y0 parameter for the tile
+ * @param   p_ty1           pointer that will hold the Y1 parameter for the tile
+ * @param   p_max_prec      pointer that will hold the maximum precision for all the bands of the tile
+ * @param   p_max_res       pointer that will hold the maximum number of resolutions for all the poc inside the tile.
+ * @param   p_dx_min        pointer that will hold the minimum dx of all the components of all the resolutions for the tile.
+ * @param   p_dy_min        pointer that will hold the minimum dy of all the components of all the resolutions for the tile.
+ * @param   p_resolutions   pointer to an area corresponding to the one described above.
  */
 static void opj_get_all_encoding_parameters(const opj_image_t *p_image,
-                                            const opj_cp_t *p_cp,
-                                            OPJ_UINT32 tileno,
-                                            OPJ_INT32 * p_tx0,
-                                            OPJ_INT32 * p_tx1,
-                                            OPJ_INT32 * p_ty0,
-                                            OPJ_INT32 * p_ty1,
-                                            OPJ_UINT32 * p_dx_min,
-                                            OPJ_UINT32 * p_dy_min,
-                                            OPJ_UINT32 * p_max_prec,
-                                            OPJ_UINT32 * p_max_res,
-                                            OPJ_UINT32 ** p_resolutions );
+        const opj_cp_t *p_cp,
+        OPJ_UINT32 tileno,
+        OPJ_INT32 * p_tx0,
+        OPJ_INT32 * p_tx1,
+        OPJ_INT32 * p_ty0,
+        OPJ_INT32 * p_ty1,
+        OPJ_UINT32 * p_dx_min,
+        OPJ_UINT32 * p_dy_min,
+        OPJ_UINT32 * p_max_prec,
+        OPJ_UINT32 * p_max_res,
+        OPJ_UINT32 ** p_resolutions);
 /**
  * Allocates memory for a packet iterator. Data and data sizes are set by this operation.
  * No other data is set. The include section of the packet  iterator is not allocated.
- * 
- * @param      p_image         the image used to initialize the packet iterator (in fact only the number of components is relevant.
- * @param      p_cp            the coding parameters.
- * @param      tileno  the index of the tile from which creating the packet iterator.
+ *
+ * @param   p_image     the image used to initialize the packet iterator (in fact only the number of components is relevant.
+ * @param   p_cp        the coding parameters.
+ * @param   tileno  the index of the tile from which creating the packet iterator.
  */
-static opj_pi_iterator_t * opj_pi_create(      const opj_image_t *p_image,
-                                            const opj_cp_t *p_cp,
-                                            OPJ_UINT32 tileno );
+static opj_pi_iterator_t * opj_pi_create(const opj_image_t *p_image,
+        const opj_cp_t *p_cp,
+        OPJ_UINT32 tileno);
 /**
  * FIXME DOC
  */
-static void opj_pi_update_decode_not_poc (opj_pi_iterator_t * p_pi,
-                                          opj_tcp_t * p_tcp,
-                                          OPJ_UINT32 p_max_precision,
-                                          OPJ_UINT32 p_max_res);
+static void opj_pi_update_decode_not_poc(opj_pi_iterator_t * p_pi,
+        opj_tcp_t * p_tcp,
+        OPJ_UINT32 p_max_precision,
+        OPJ_UINT32 p_max_res);
 /**
  * FIXME DOC
  */
-static void opj_pi_update_decode_poc (  opj_pi_iterator_t * p_pi,
-                                        opj_tcp_t * p_tcp,
-                                        OPJ_UINT32 p_max_precision,
-                                        OPJ_UINT32 p_max_res);
+static void opj_pi_update_decode_poc(opj_pi_iterator_t * p_pi,
+                                     opj_tcp_t * p_tcp,
+                                     OPJ_UINT32 p_max_precision,
+                                     OPJ_UINT32 p_max_res);
 
 /**
  * FIXME DOC
  */
-static OPJ_BOOL opj_pi_check_next_level(       OPJ_INT32 pos,
-                                                               opj_cp_t *cp,
-                                                               OPJ_UINT32 tileno,
-                                                               OPJ_UINT32 pino,
-                                                               const OPJ_CHAR *prog);
+static OPJ_BOOL opj_pi_check_next_level(OPJ_INT32 pos,
+                                        opj_cp_t *cp,
+                                        OPJ_UINT32 tileno,
+                                        OPJ_UINT32 pino,
+                                        const OPJ_CHAR *prog);
 
 /*@}*/
 
@@ -230,920 +230,981 @@ static OPJ_BOOL opj_pi_check_next_level(        OPJ_INT32 pos,
 ==========================================================
 */
 
-static OPJ_BOOL opj_pi_next_lrcp(opj_pi_iterator_t * pi) {
-       opj_pi_comp_t *comp = NULL;
-       opj_pi_resolution_t *res = NULL;
-       OPJ_UINT32 index = 0;
-       
-       if (!pi->first) {
-               comp = &pi->comps[pi->compno];
-               res = &comp->resolutions[pi->resno];
-               goto LABEL_SKIP;
-       } else {
-               pi->first = 0;
-       }
-
-       for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
-               for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1;
-               pi->resno++) {
-                       for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-                               comp = &pi->comps[pi->compno];
-                               if (pi->resno >= comp->numresolutions) {
-                                       continue;
-                               }
-                               res = &comp->resolutions[pi->resno];
-                               if (!pi->tp_on){
-                                       pi->poc.precno1 = res->pw * res->ph;
-                               }
-                               for (pi->precno = pi->poc.precno0; pi->precno < pi->poc.precno1; pi->precno++) {
-                                       index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p;
-                                       if (!pi->include[index]) {
-                                               pi->include[index] = 1;
-                                               return OPJ_TRUE;
-                                       }
-LABEL_SKIP:;
-                               }
-                       }
-               }
-       }
-       
-       return OPJ_FALSE;
-}
-
-static OPJ_BOOL opj_pi_next_rlcp(opj_pi_iterator_t * pi) {
-       opj_pi_comp_t *comp = NULL;
-       opj_pi_resolution_t *res = NULL;
-       OPJ_UINT32 index = 0;
-
-       if (!pi->first) {
-               comp = &pi->comps[pi->compno];
-               res = &comp->resolutions[pi->resno];
-               goto LABEL_SKIP;
-       } else {
-               pi->first = 0;
-       }
-
-       for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) {
-               for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
-                       for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-                               comp = &pi->comps[pi->compno];
-                               if (pi->resno >= comp->numresolutions) {
-                                       continue;
-                               }
-                               res = &comp->resolutions[pi->resno];
-                               if(!pi->tp_on){
-                                       pi->poc.precno1 = res->pw * res->ph;
-                               }
-                               for (pi->precno = pi->poc.precno0; pi->precno < pi->poc.precno1; pi->precno++) {
-                                       index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p;
-                                       if (!pi->include[index]) {
-                                               pi->include[index] = 1;
-                                               return OPJ_TRUE;
-                                       }
-LABEL_SKIP:;
-                               }
-                       }
-               }
-       }
-       
-       return OPJ_FALSE;
+static OPJ_BOOL opj_pi_next_lrcp(opj_pi_iterator_t * pi)
+{
+    opj_pi_comp_t *comp = NULL;
+    opj_pi_resolution_t *res = NULL;
+    OPJ_UINT32 index = 0;
+
+    if (!pi->first) {
+        comp = &pi->comps[pi->compno];
+        res = &comp->resolutions[pi->resno];
+        goto LABEL_SKIP;
+    } else {
+        pi->first = 0;
+    }
+
+    for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
+        for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1;
+                pi->resno++) {
+            for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
+                comp = &pi->comps[pi->compno];
+                if (pi->resno >= comp->numresolutions) {
+                    continue;
+                }
+                res = &comp->resolutions[pi->resno];
+                if (!pi->tp_on) {
+                    pi->poc.precno1 = res->pw * res->ph;
+                }
+                for (pi->precno = pi->poc.precno0; pi->precno < pi->poc.precno1; pi->precno++) {
+                    index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
+                            pi->step_c + pi->precno * pi->step_p;
+                    if (!pi->include[index]) {
+                        pi->include[index] = 1;
+                        return OPJ_TRUE;
+                    }
+LABEL_SKIP:
+                    ;
+                }
+            }
+        }
+    }
+
+    return OPJ_FALSE;
 }
 
-static OPJ_BOOL opj_pi_next_rpcl(opj_pi_iterator_t * pi) {
-       opj_pi_comp_t *comp = NULL;
-       opj_pi_resolution_t *res = NULL;
-       OPJ_UINT32 index = 0;
-
-       if (!pi->first) {
-               goto LABEL_SKIP;
-       } else {
-               OPJ_UINT32 compno, resno;
-               pi->first = 0;
-               pi->dx = 0;
-               pi->dy = 0;
-               for (compno = 0; compno < pi->numcomps; compno++) {
-                       comp = &pi->comps[compno];
-                       for (resno = 0; resno < comp->numresolutions; resno++) {
-                               OPJ_UINT32 dx, dy;
-                               res = &comp->resolutions[resno];
-                               dx = comp->dx * (1u << (res->pdx + comp->numresolutions - 1 - resno));
-                               dy = comp->dy * (1u << (res->pdy + comp->numresolutions - 1 - resno));
-                               pi->dx = !pi->dx ? dx : opj_uint_min(pi->dx, dx);
-                               pi->dy = !pi->dy ? dy : opj_uint_min(pi->dy, dy);
-                       }
-               }
-       }
-if (!pi->tp_on){
-                       pi->poc.ty0 = pi->ty0;
-                       pi->poc.tx0 = pi->tx0;
-                       pi->poc.ty1 = pi->ty1;
-                       pi->poc.tx1 = pi->tx1;
-               }
-       for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) {
-               for (pi->y = pi->poc.ty0; pi->y < pi->poc.ty1; pi->y += (OPJ_INT32)(pi->dy - (OPJ_UINT32)(pi->y % (OPJ_INT32)pi->dy))) {
-                       for (pi->x = pi->poc.tx0; pi->x < pi->poc.tx1; pi->x += (OPJ_INT32)(pi->dx - (OPJ_UINT32)(pi->x % (OPJ_INT32)pi->dx))) {
-                               for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-                                       OPJ_UINT32 levelno;
-                                       OPJ_INT32 trx0, try0;
-                                       OPJ_INT32  trx1, try1;
-                                       OPJ_UINT32  rpx, rpy;
-                                       OPJ_INT32  prci, prcj;
-                                       comp = &pi->comps[pi->compno];
-                                       if (pi->resno >= comp->numresolutions) {
-                                               continue;
-                                       }
-                                       res = &comp->resolutions[pi->resno];
-                                       levelno = comp->numresolutions - 1 - pi->resno;
-                                       trx0 = opj_int_ceildiv(pi->tx0, (OPJ_INT32)(comp->dx << levelno));
-                                       try0 = opj_int_ceildiv(pi->ty0, (OPJ_INT32)(comp->dy << levelno));
-                                       trx1 = opj_int_ceildiv(pi->tx1, (OPJ_INT32)(comp->dx << levelno));
-                                       try1 = opj_int_ceildiv(pi->ty1, (OPJ_INT32)(comp->dy << levelno));
-                                       rpx = res->pdx + levelno;
-                                       rpy = res->pdy + levelno;
-                                       if (!((pi->y % (OPJ_INT32)(comp->dy << rpy) == 0) || ((pi->y == pi->ty0) && ((try0 << levelno) % (1 << rpy))))){
-                                               continue;       
-                                       }
-                                       if (!((pi->x % (OPJ_INT32)(comp->dx << rpx) == 0) || ((pi->x == pi->tx0) && ((trx0 << levelno) % (1 << rpx))))){
-                                               continue;
-                                       }
-                                       
-                                       if ((res->pw==0)||(res->ph==0)) continue;
-                                       
-                                       if ((trx0==trx1)||(try0==try1)) continue;
-                                       
-                                       prci = opj_int_floordivpow2(opj_int_ceildiv(pi->x, (OPJ_INT32)(comp->dx << levelno)), (OPJ_INT32)res->pdx)
-                                                - opj_int_floordivpow2(trx0, (OPJ_INT32)res->pdx);
-                                       prcj = opj_int_floordivpow2(opj_int_ceildiv(pi->y, (OPJ_INT32)(comp->dy << levelno)), (OPJ_INT32)res->pdy)
-                                                - opj_int_floordivpow2(try0, (OPJ_INT32)res->pdy);
-                                       pi->precno = (OPJ_UINT32)(prci + prcj * (OPJ_INT32)res->pw);
-                                       for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
-                                               index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p;
-                                               if (!pi->include[index]) {
-                                                       pi->include[index] = 1;
-                                                       return OPJ_TRUE;
-                                               }
-LABEL_SKIP:;
-                                       }
-                               }
-                       }
-               }
-       }
-       
-       return OPJ_FALSE;
+static OPJ_BOOL opj_pi_next_rlcp(opj_pi_iterator_t * pi)
+{
+    opj_pi_comp_t *comp = NULL;
+    opj_pi_resolution_t *res = NULL;
+    OPJ_UINT32 index = 0;
+
+    if (!pi->first) {
+        comp = &pi->comps[pi->compno];
+        res = &comp->resolutions[pi->resno];
+        goto LABEL_SKIP;
+    } else {
+        pi->first = 0;
+    }
+
+    for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) {
+        for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
+            for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
+                comp = &pi->comps[pi->compno];
+                if (pi->resno >= comp->numresolutions) {
+                    continue;
+                }
+                res = &comp->resolutions[pi->resno];
+                if (!pi->tp_on) {
+                    pi->poc.precno1 = res->pw * res->ph;
+                }
+                for (pi->precno = pi->poc.precno0; pi->precno < pi->poc.precno1; pi->precno++) {
+                    index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
+                            pi->step_c + pi->precno * pi->step_p;
+                    if (!pi->include[index]) {
+                        pi->include[index] = 1;
+                        return OPJ_TRUE;
+                    }
+LABEL_SKIP:
+                    ;
+                }
+            }
+        }
+    }
+
+    return OPJ_FALSE;
 }
 
-static OPJ_BOOL opj_pi_next_pcrl(opj_pi_iterator_t * pi) {
-       opj_pi_comp_t *comp = NULL;
-       opj_pi_resolution_t *res = NULL;
-       OPJ_UINT32 index = 0;
-
-       if (!pi->first) {
-               comp = &pi->comps[pi->compno];
-               goto LABEL_SKIP;
-       } else {
-               OPJ_UINT32 compno, resno;
-               pi->first = 0;
-               pi->dx = 0;
-               pi->dy = 0;
-               for (compno = 0; compno < pi->numcomps; compno++) {
-                       comp = &pi->comps[compno];
-                       for (resno = 0; resno < comp->numresolutions; resno++) {
-                               OPJ_UINT32 dx, dy;
-                               res = &comp->resolutions[resno];
-                               dx = comp->dx * (1u << (res->pdx + comp->numresolutions - 1 - resno));
-                               dy = comp->dy * (1u << (res->pdy + comp->numresolutions - 1 - resno));
-                               pi->dx = !pi->dx ? dx : opj_uint_min(pi->dx, dx);
-                               pi->dy = !pi->dy ? dy : opj_uint_min(pi->dy, dy);
-                       }
-               }
-       }
-       if (!pi->tp_on){
-                       pi->poc.ty0 = pi->ty0;
-                       pi->poc.tx0 = pi->tx0;
-                       pi->poc.ty1 = pi->ty1;
-                       pi->poc.tx1 = pi->tx1;
-               }
-       for (pi->y = pi->poc.ty0; pi->y < pi->poc.ty1; pi->y += (OPJ_INT32)(pi->dy - (OPJ_UINT32)(pi->y % (OPJ_INT32)pi->dy))) {
-               for (pi->x = pi->poc.tx0; pi->x < pi->poc.tx1; pi->x += (OPJ_INT32)(pi->dx - (OPJ_UINT32)(pi->x % (OPJ_INT32)pi->dx))) {
-                       for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-                               comp = &pi->comps[pi->compno];
-                               for (pi->resno = pi->poc.resno0; pi->resno < opj_uint_min(pi->poc.resno1, comp->numresolutions); pi->resno++) {
-                                       OPJ_UINT32 levelno;
-                                       OPJ_INT32 trx0, try0;
-                                       OPJ_INT32 trx1, try1;
-                                       OPJ_UINT32 rpx, rpy;
-                                       OPJ_INT32 prci, prcj;
-                                       res = &comp->resolutions[pi->resno];
-                                       levelno = comp->numresolutions - 1 - pi->resno;
-                                       trx0 = opj_int_ceildiv(pi->tx0, (OPJ_INT32)(comp->dx << levelno));
-                                       try0 = opj_int_ceildiv(pi->ty0, (OPJ_INT32)(comp->dy << levelno));
-                                       trx1 = opj_int_ceildiv(pi->tx1, (OPJ_INT32)(comp->dx << levelno));
-                                       try1 = opj_int_ceildiv(pi->ty1, (OPJ_INT32)(comp->dy << levelno));
-                                       rpx = res->pdx + levelno;
-                                       rpy = res->pdy + levelno;
-                                       if (!((pi->y % (OPJ_INT32)(comp->dy << rpy) == 0) || ((pi->y == pi->ty0) && ((try0 << levelno) % (1 << rpy))))){
-                                               continue;       
-                                       }
-                                       if (!((pi->x % (OPJ_INT32)(comp->dx << rpx) == 0) || ((pi->x == pi->tx0) && ((trx0 << levelno) % (1 << rpx))))){
-                                               continue;
-                                       }
-                                       
-                                       if ((res->pw==0)||(res->ph==0)) continue;
-                                       
-                                       if ((trx0==trx1)||(try0==try1)) continue;
-                                       
-                                       prci = opj_int_floordivpow2(opj_int_ceildiv(pi->x, (OPJ_INT32)(comp->dx << levelno)), (OPJ_INT32)res->pdx)
-                                                - opj_int_floordivpow2(trx0, (OPJ_INT32)res->pdx);
-                                       prcj = opj_int_floordivpow2(opj_int_ceildiv(pi->y, (OPJ_INT32)(comp->dy << levelno)), (OPJ_INT32)res->pdy)
-                                                - opj_int_floordivpow2(try0, (OPJ_INT32)res->pdy);
-                                       pi->precno = (OPJ_UINT32)(prci + prcj * (OPJ_INT32)res->pw);
-                                       for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
-                                               index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p;
-                                               if (!pi->include[index]) {
-                                                       pi->include[index] = 1;
-                                                       return OPJ_TRUE;
-                                               }       
-LABEL_SKIP:;
-                                       }
-                               }
-                       }
-               }
-       }
-       
-       return OPJ_FALSE;
+static OPJ_BOOL opj_pi_next_rpcl(opj_pi_iterator_t * pi)
+{
+    opj_pi_comp_t *comp = NULL;
+    opj_pi_resolution_t *res = NULL;
+    OPJ_UINT32 index = 0;
+
+    if (!pi->first) {
+        goto LABEL_SKIP;
+    } else {
+        OPJ_UINT32 compno, resno;
+        pi->first = 0;
+        pi->dx = 0;
+        pi->dy = 0;
+        for (compno = 0; compno < pi->numcomps; compno++) {
+            comp = &pi->comps[compno];
+            for (resno = 0; resno < comp->numresolutions; resno++) {
+                OPJ_UINT32 dx, dy;
+                res = &comp->resolutions[resno];
+                dx = comp->dx * (1u << (res->pdx + comp->numresolutions - 1 - resno));
+                dy = comp->dy * (1u << (res->pdy + comp->numresolutions - 1 - resno));
+                pi->dx = !pi->dx ? dx : opj_uint_min(pi->dx, dx);
+                pi->dy = !pi->dy ? dy : opj_uint_min(pi->dy, dy);
+            }
+        }
+    }
+    if (!pi->tp_on) {
+        pi->poc.ty0 = pi->ty0;
+        pi->poc.tx0 = pi->tx0;
+        pi->poc.ty1 = pi->ty1;
+        pi->poc.tx1 = pi->tx1;
+    }
+    for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) {
+        for (pi->y = pi->poc.ty0; pi->y < pi->poc.ty1;
+                pi->y += (OPJ_INT32)(pi->dy - (OPJ_UINT32)(pi->y % (OPJ_INT32)pi->dy))) {
+            for (pi->x = pi->poc.tx0; pi->x < pi->poc.tx1;
+                    pi->x += (OPJ_INT32)(pi->dx - (OPJ_UINT32)(pi->x % (OPJ_INT32)pi->dx))) {
+                for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
+                    OPJ_UINT32 levelno;
+                    OPJ_INT32 trx0, try0;
+                    OPJ_INT32  trx1, try1;
+                    OPJ_UINT32  rpx, rpy;
+                    OPJ_INT32  prci, prcj;
+                    comp = &pi->comps[pi->compno];
+                    if (pi->resno >= comp->numresolutions) {
+                        continue;
+                    }
+                    res = &comp->resolutions[pi->resno];
+                    levelno = comp->numresolutions - 1 - pi->resno;
+                    trx0 = opj_int_ceildiv(pi->tx0, (OPJ_INT32)(comp->dx << levelno));
+                    try0 = opj_int_ceildiv(pi->ty0, (OPJ_INT32)(comp->dy << levelno));
+                    trx1 = opj_int_ceildiv(pi->tx1, (OPJ_INT32)(comp->dx << levelno));
+                    try1 = opj_int_ceildiv(pi->ty1, (OPJ_INT32)(comp->dy << levelno));
+                    rpx = res->pdx + levelno;
+                    rpy = res->pdy + levelno;
+                    if (!((pi->y % (OPJ_INT32)(comp->dy << rpy) == 0) || ((pi->y == pi->ty0) &&
+                            ((try0 << levelno) % (1 << rpy))))) {
+                        continue;
+                    }
+                    if (!((pi->x % (OPJ_INT32)(comp->dx << rpx) == 0) || ((pi->x == pi->tx0) &&
+                            ((trx0 << levelno) % (1 << rpx))))) {
+                        continue;
+                    }
+
+                    if ((res->pw == 0) || (res->ph == 0)) {
+                        continue;
+                    }
+
+                    if ((trx0 == trx1) || (try0 == try1)) {
+                        continue;
+                    }
+
+                    prci = opj_int_floordivpow2(opj_int_ceildiv(pi->x,
+                                                (OPJ_INT32)(comp->dx << levelno)), (OPJ_INT32)res->pdx)
+                           - opj_int_floordivpow2(trx0, (OPJ_INT32)res->pdx);
+                    prcj = opj_int_floordivpow2(opj_int_ceildiv(pi->y,
+                                                (OPJ_INT32)(comp->dy << levelno)), (OPJ_INT32)res->pdy)
+                           - opj_int_floordivpow2(try0, (OPJ_INT32)res->pdy);
+                    pi->precno = (OPJ_UINT32)(prci + prcj * (OPJ_INT32)res->pw);
+                    for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
+                        index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
+                                pi->step_c + pi->precno * pi->step_p;
+                        if (!pi->include[index]) {
+                            pi->include[index] = 1;
+                            return OPJ_TRUE;
+                        }
+LABEL_SKIP:
+                        ;
+                    }
+                }
+            }
+        }
+    }
+
+    return OPJ_FALSE;
 }
 
-static OPJ_BOOL opj_pi_next_cprl(opj_pi_iterator_t * pi) {
-       opj_pi_comp_t *comp = NULL;
-       opj_pi_resolution_t *res = NULL;
-       OPJ_UINT32 index = 0;
-
-       if (!pi->first) {
-               comp = &pi->comps[pi->compno];
-               goto LABEL_SKIP;
-       } else {
-               pi->first = 0;
-       }
-
-       for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-               OPJ_UINT32 resno;
-               comp = &pi->comps[pi->compno];
-               pi->dx = 0;
-               pi->dy = 0;
-               for (resno = 0; resno < comp->numresolutions; resno++) {
-                       OPJ_UINT32 dx, dy;
-                       res = &comp->resolutions[resno];
-                       dx = comp->dx * (1u << (res->pdx + comp->numresolutions - 1 - resno));
-                       dy = comp->dy * (1u << (res->pdy + comp->numresolutions - 1 - resno));
-                       pi->dx = !pi->dx ? dx : opj_uint_min(pi->dx, dx);
-                       pi->dy = !pi->dy ? dy : opj_uint_min(pi->dy, dy);
-               }
-               if (!pi->tp_on){
-                       pi->poc.ty0 = pi->ty0;
-                       pi->poc.tx0 = pi->tx0;
-                       pi->poc.ty1 = pi->ty1;
-                       pi->poc.tx1 = pi->tx1;
-               }
-               for (pi->y = pi->poc.ty0; pi->y < pi->poc.ty1; pi->y += (OPJ_INT32)(pi->dy - (OPJ_UINT32)(pi->y % (OPJ_INT32)pi->dy))) {
-                       for (pi->x = pi->poc.tx0; pi->x < pi->poc.tx1; pi->x += (OPJ_INT32)(pi->dx - (OPJ_UINT32)(pi->x % (OPJ_INT32)pi->dx))) {
-                               for (pi->resno = pi->poc.resno0; pi->resno < opj_uint_min(pi->poc.resno1, comp->numresolutions); pi->resno++) {
-                                       OPJ_UINT32 levelno;
-                                       OPJ_INT32 trx0, try0;
-                                       OPJ_INT32 trx1, try1;
-                                       OPJ_UINT32 rpx, rpy;
-                                       OPJ_INT32 prci, prcj;
-                                       res = &comp->resolutions[pi->resno];
-                                       levelno = comp->numresolutions - 1 - pi->resno;
-                                       trx0 = opj_int_ceildiv(pi->tx0, (OPJ_INT32)(comp->dx << levelno));
-                                       try0 = opj_int_ceildiv(pi->ty0, (OPJ_INT32)(comp->dy << levelno));
-                                       trx1 = opj_int_ceildiv(pi->tx1, (OPJ_INT32)(comp->dx << levelno));
-                                       try1 = opj_int_ceildiv(pi->ty1, (OPJ_INT32)(comp->dy << levelno));
-                                       rpx = res->pdx + levelno;
-                                       rpy = res->pdy + levelno;
-                                       if (!((pi->y % (OPJ_INT32)(comp->dy << rpy) == 0) || ((pi->y == pi->ty0) && ((try0 << levelno) % (1 << rpy))))){
-                                               continue;       
-                                       }
-                                       if (!((pi->x % (OPJ_INT32)(comp->dx << rpx) == 0) || ((pi->x == pi->tx0) && ((trx0 << levelno) % (1 << rpx))))){
-                                               continue;
-                                       }
-                                       
-                                       if ((res->pw==0)||(res->ph==0)) continue;
-                                       
-                                       if ((trx0==trx1)||(try0==try1)) continue;
-                                       
-                                       prci = opj_int_floordivpow2(opj_int_ceildiv(pi->x, (OPJ_INT32)(comp->dx << levelno)), (OPJ_INT32)res->pdx)
-                                                - opj_int_floordivpow2(trx0, (OPJ_INT32)res->pdx);
-                                       prcj = opj_int_floordivpow2(opj_int_ceildiv(pi->y, (OPJ_INT32)(comp->dy << levelno)), (OPJ_INT32)res->pdy)
-                                                - opj_int_floordivpow2(try0, (OPJ_INT32)res->pdy);
-                                       pi->precno = (OPJ_UINT32)(prci + prcj * (OPJ_INT32)res->pw);
-                                       for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
-                                               index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p;
-                                               if (!pi->include[index]) {
-                                                       pi->include[index] = 1;
-                                                       return OPJ_TRUE;
-                                               }
-LABEL_SKIP:;
-                                       }
-                               }
-                       }
-               }
-       }
-       
-       return OPJ_FALSE;
+static OPJ_BOOL opj_pi_next_pcrl(opj_pi_iterator_t * pi)
+{
+    opj_pi_comp_t *comp = NULL;
+    opj_pi_resolution_t *res = NULL;
+    OPJ_UINT32 index = 0;
+
+    if (!pi->first) {
+        comp = &pi->comps[pi->compno];
+        goto LABEL_SKIP;
+    } else {
+        OPJ_UINT32 compno, resno;
+        pi->first = 0;
+        pi->dx = 0;
+        pi->dy = 0;
+        for (compno = 0; compno < pi->numcomps; compno++) {
+            comp = &pi->comps[compno];
+            for (resno = 0; resno < comp->numresolutions; resno++) {
+                OPJ_UINT32 dx, dy;
+                res = &comp->resolutions[resno];
+                dx = comp->dx * (1u << (res->pdx + comp->numresolutions - 1 - resno));
+                dy = comp->dy * (1u << (res->pdy + comp->numresolutions - 1 - resno));
+                pi->dx = !pi->dx ? dx : opj_uint_min(pi->dx, dx);
+                pi->dy = !pi->dy ? dy : opj_uint_min(pi->dy, dy);
+            }
+        }
+    }
+    if (!pi->tp_on) {
+        pi->poc.ty0 = pi->ty0;
+        pi->poc.tx0 = pi->tx0;
+        pi->poc.ty1 = pi->ty1;
+        pi->poc.tx1 = pi->tx1;
+    }
+    for (pi->y = pi->poc.ty0; pi->y < pi->poc.ty1;
+            pi->y += (OPJ_INT32)(pi->dy - (OPJ_UINT32)(pi->y % (OPJ_INT32)pi->dy))) {
+        for (pi->x = pi->poc.tx0; pi->x < pi->poc.tx1;
+                pi->x += (OPJ_INT32)(pi->dx - (OPJ_UINT32)(pi->x % (OPJ_INT32)pi->dx))) {
+            for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
+                comp = &pi->comps[pi->compno];
+                for (pi->resno = pi->poc.resno0;
+                        pi->resno < opj_uint_min(pi->poc.resno1, comp->numresolutions); pi->resno++) {
+                    OPJ_UINT32 levelno;
+                    OPJ_INT32 trx0, try0;
+                    OPJ_INT32 trx1, try1;
+                    OPJ_UINT32 rpx, rpy;
+                    OPJ_INT32 prci, prcj;
+                    res = &comp->resolutions[pi->resno];
+                    levelno = comp->numresolutions - 1 - pi->resno;
+                    trx0 = opj_int_ceildiv(pi->tx0, (OPJ_INT32)(comp->dx << levelno));
+                    try0 = opj_int_ceildiv(pi->ty0, (OPJ_INT32)(comp->dy << levelno));
+                    trx1 = opj_int_ceildiv(pi->tx1, (OPJ_INT32)(comp->dx << levelno));
+                    try1 = opj_int_ceildiv(pi->ty1, (OPJ_INT32)(comp->dy << levelno));
+                    rpx = res->pdx + levelno;
+                    rpy = res->pdy + levelno;
+                    if (!((pi->y % (OPJ_INT32)(comp->dy << rpy) == 0) || ((pi->y == pi->ty0) &&
+                            ((try0 << levelno) % (1 << rpy))))) {
+                        continue;
+                    }
+                    if (!((pi->x % (OPJ_INT32)(comp->dx << rpx) == 0) || ((pi->x == pi->tx0) &&
+                            ((trx0 << levelno) % (1 << rpx))))) {
+                        continue;
+                    }
+
+                    if ((res->pw == 0) || (res->ph == 0)) {
+                        continue;
+                    }
+
+                    if ((trx0 == trx1) || (try0 == try1)) {
+                        continue;
+                    }
+
+                    prci = opj_int_floordivpow2(opj_int_ceildiv(pi->x,
+                                                (OPJ_INT32)(comp->dx << levelno)), (OPJ_INT32)res->pdx)
+                           - opj_int_floordivpow2(trx0, (OPJ_INT32)res->pdx);
+                    prcj = opj_int_floordivpow2(opj_int_ceildiv(pi->y,
+                                                (OPJ_INT32)(comp->dy << levelno)), (OPJ_INT32)res->pdy)
+                           - opj_int_floordivpow2(try0, (OPJ_INT32)res->pdy);
+                    pi->precno = (OPJ_UINT32)(prci + prcj * (OPJ_INT32)res->pw);
+                    for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
+                        index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
+                                pi->step_c + pi->precno * pi->step_p;
+                        if (!pi->include[index]) {
+                            pi->include[index] = 1;
+                            return OPJ_TRUE;
+                        }
+LABEL_SKIP:
+                        ;
+                    }
+                }
+            }
+        }
+    }
+
+    return OPJ_FALSE;
 }
 
-static void opj_get_encoding_parameters(       const opj_image_t *p_image,
-                                    const opj_cp_t *p_cp,
-                                    OPJ_UINT32 p_tileno,
-                                    OPJ_INT32 * p_tx0,
-                                    OPJ_INT32  * p_tx1,
-                                    OPJ_INT32  * p_ty0,
-                                    OPJ_INT32  * p_ty1,
-                                    OPJ_UINT32 * p_dx_min,
-                                    OPJ_UINT32 * p_dy_min,
-                                    OPJ_UINT32 * p_max_prec,
-                                    OPJ_UINT32 * p_max_res )
+static OPJ_BOOL opj_pi_next_cprl(opj_pi_iterator_t * pi)
 {
-       /* loop */
-       OPJ_UINT32  compno, resno;
-       /* pointers */
-       const opj_tcp_t *l_tcp = 00;
-       const opj_tccp_t * l_tccp = 00;
-       const opj_image_comp_t * l_img_comp = 00;
-
-       /* position in x and y of tile */
-       OPJ_UINT32 p, q;
-
-       /* preconditions */
-       assert(p_cp != 00);
-       assert(p_image != 00);
-       assert(p_tileno < p_cp->tw * p_cp->th);
-
-       /* initializations */
-       l_tcp = &p_cp->tcps [p_tileno];
-       l_img_comp = p_image->comps;
-       l_tccp = l_tcp->tccps;
-
-       /* here calculation of tx0, tx1, ty0, ty1, maxprec, dx and dy */
-       p = p_tileno % p_cp->tw;
-       q = p_tileno / p_cp->tw;
-
-       /* find extent of tile */
-       *p_tx0 = opj_int_max((OPJ_INT32)(p_cp->tx0 + p * p_cp->tdx), (OPJ_INT32)p_image->x0);
-       *p_tx1 = opj_int_min((OPJ_INT32)(p_cp->tx0 + (p + 1) * p_cp->tdx), (OPJ_INT32)p_image->x1);
-       *p_ty0 = opj_int_max((OPJ_INT32)(p_cp->ty0 + q * p_cp->tdy), (OPJ_INT32)p_image->y0);
-       *p_ty1 = opj_int_min((OPJ_INT32)(p_cp->ty0 + (q + 1) * p_cp->tdy), (OPJ_INT32)p_image->y1);
-
-       /* max precision is 0 (can only grow) */
-       *p_max_prec = 0;
-       *p_max_res = 0;
-
-       /* take the largest value for dx_min and dy_min */
-       *p_dx_min = 0x7fffffff;
-       *p_dy_min  = 0x7fffffff;
-
-       for (compno = 0; compno < p_image->numcomps; ++compno) {
-               /* arithmetic variables to calculate */
-               OPJ_UINT32 l_level_no;
-               OPJ_INT32 l_rx0, l_ry0, l_rx1, l_ry1;
-               OPJ_INT32 l_px0, l_py0, l_px1, py1;
-               OPJ_UINT32 l_pdx, l_pdy;
-               OPJ_UINT32 l_pw, l_ph;
-               OPJ_UINT32 l_product;
-               OPJ_INT32 l_tcx0, l_tcy0, l_tcx1, l_tcy1;
-
-               l_tcx0 = opj_int_ceildiv(*p_tx0, (OPJ_INT32)l_img_comp->dx);
-               l_tcy0 = opj_int_ceildiv(*p_ty0, (OPJ_INT32)l_img_comp->dy);
-               l_tcx1 = opj_int_ceildiv(*p_tx1, (OPJ_INT32)l_img_comp->dx);
-               l_tcy1 = opj_int_ceildiv(*p_ty1, (OPJ_INT32)l_img_comp->dy);
-
-               if (l_tccp->numresolutions > *p_max_res) {
-                       *p_max_res = l_tccp->numresolutions;
-               }
-
-               /* use custom size for precincts */
-               for (resno = 0; resno < l_tccp->numresolutions; ++resno) {
-                       OPJ_UINT32 l_dx, l_dy;
-
-                       /* precinct width and height */
-                       l_pdx = l_tccp->prcw[resno];
-                       l_pdy = l_tccp->prch[resno];
-
-                       l_dx = l_img_comp->dx * (1u << (l_pdx + l_tccp->numresolutions - 1 - resno));
-                       l_dy = l_img_comp->dy * (1u << (l_pdy + l_tccp->numresolutions - 1 - resno));
-
-                       /* take the minimum size for dx for each comp and resolution */
-                       *p_dx_min = opj_uint_min(*p_dx_min, l_dx);
-                       *p_dy_min = opj_uint_min(*p_dy_min, l_dy);
-
-                       /* various calculations of extents */
-                       l_level_no = l_tccp->numresolutions - 1 - resno;
-
-                       l_rx0 = opj_int_ceildivpow2(l_tcx0, (OPJ_INT32)l_level_no);
-                       l_ry0 = opj_int_ceildivpow2(l_tcy0, (OPJ_INT32)l_level_no);
-                       l_rx1 = opj_int_ceildivpow2(l_tcx1, (OPJ_INT32)l_level_no);
-                       l_ry1 = opj_int_ceildivpow2(l_tcy1, (OPJ_INT32)l_level_no);
-
-                       l_px0 = opj_int_floordivpow2(l_rx0, (OPJ_INT32)l_pdx) << l_pdx;
-                       l_py0 = opj_int_floordivpow2(l_ry0, (OPJ_INT32)l_pdy) << l_pdy;
-                       l_px1 = opj_int_ceildivpow2(l_rx1, (OPJ_INT32)l_pdx) << l_pdx;
-
-                       py1 = opj_int_ceildivpow2(l_ry1, (OPJ_INT32)l_pdy) << l_pdy;
-
-                       l_pw = (l_rx0==l_rx1)?0:(OPJ_UINT32)((l_px1 - l_px0) >> l_pdx);
-                       l_ph = (l_ry0==l_ry1)?0:(OPJ_UINT32)((py1 - l_py0) >> l_pdy);
-
-                       l_product = l_pw * l_ph;
-
-                       /* update precision */
-                       if (l_product > *p_max_prec) {
-                               *p_max_prec = l_product;
-                       }
-               }
-               ++l_img_comp;
-               ++l_tccp;
-       }
+    opj_pi_comp_t *comp = NULL;
+    opj_pi_resolution_t *res = NULL;
+    OPJ_UINT32 index = 0;
+
+    if (!pi->first) {
+        comp = &pi->comps[pi->compno];
+        goto LABEL_SKIP;
+    } else {
+        pi->first = 0;
+    }
+
+    for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
+        OPJ_UINT32 resno;
+        comp = &pi->comps[pi->compno];
+        pi->dx = 0;
+        pi->dy = 0;
+        for (resno = 0; resno < comp->numresolutions; resno++) {
+            OPJ_UINT32 dx, dy;
+            res = &comp->resolutions[resno];
+            dx = comp->dx * (1u << (res->pdx + comp->numresolutions - 1 - resno));
+            dy = comp->dy * (1u << (res->pdy + comp->numresolutions - 1 - resno));
+            pi->dx = !pi->dx ? dx : opj_uint_min(pi->dx, dx);
+            pi->dy = !pi->dy ? dy : opj_uint_min(pi->dy, dy);
+        }
+        if (!pi->tp_on) {
+            pi->poc.ty0 = pi->ty0;
+            pi->poc.tx0 = pi->tx0;
+            pi->poc.ty1 = pi->ty1;
+            pi->poc.tx1 = pi->tx1;
+        }
+        for (pi->y = pi->poc.ty0; pi->y < pi->poc.ty1;
+                pi->y += (OPJ_INT32)(pi->dy - (OPJ_UINT32)(pi->y % (OPJ_INT32)pi->dy))) {
+            for (pi->x = pi->poc.tx0; pi->x < pi->poc.tx1;
+                    pi->x += (OPJ_INT32)(pi->dx - (OPJ_UINT32)(pi->x % (OPJ_INT32)pi->dx))) {
+                for (pi->resno = pi->poc.resno0;
+                        pi->resno < opj_uint_min(pi->poc.resno1, comp->numresolutions); pi->resno++) {
+                    OPJ_UINT32 levelno;
+                    OPJ_INT32 trx0, try0;
+                    OPJ_INT32 trx1, try1;
+                    OPJ_UINT32 rpx, rpy;
+                    OPJ_INT32 prci, prcj;
+                    res = &comp->resolutions[pi->resno];
+                    levelno = comp->numresolutions - 1 - pi->resno;
+                    trx0 = opj_int_ceildiv(pi->tx0, (OPJ_INT32)(comp->dx << levelno));
+                    try0 = opj_int_ceildiv(pi->ty0, (OPJ_INT32)(comp->dy << levelno));
+                    trx1 = opj_int_ceildiv(pi->tx1, (OPJ_INT32)(comp->dx << levelno));
+                    try1 = opj_int_ceildiv(pi->ty1, (OPJ_INT32)(comp->dy << levelno));
+                    rpx = res->pdx + levelno;
+                    rpy = res->pdy + levelno;
+                    if (!((pi->y % (OPJ_INT32)(comp->dy << rpy) == 0) || ((pi->y == pi->ty0) &&
+                            ((try0 << levelno) % (1 << rpy))))) {
+                        continue;
+                    }
+                    if (!((pi->x % (OPJ_INT32)(comp->dx << rpx) == 0) || ((pi->x == pi->tx0) &&
+                            ((trx0 << levelno) % (1 << rpx))))) {
+                        continue;
+                    }
+
+                    if ((res->pw == 0) || (res->ph == 0)) {
+                        continue;
+                    }
+
+                    if ((trx0 == trx1) || (try0 == try1)) {
+                        continue;
+                    }
+
+                    prci = opj_int_floordivpow2(opj_int_ceildiv(pi->x,
+                                                (OPJ_INT32)(comp->dx << levelno)), (OPJ_INT32)res->pdx)
+                           - opj_int_floordivpow2(trx0, (OPJ_INT32)res->pdx);
+                    prcj = opj_int_floordivpow2(opj_int_ceildiv(pi->y,
+                                                (OPJ_INT32)(comp->dy << levelno)), (OPJ_INT32)res->pdy)
+                           - opj_int_floordivpow2(try0, (OPJ_INT32)res->pdy);
+                    pi->precno = (OPJ_UINT32)(prci + prcj * (OPJ_INT32)res->pw);
+                    for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
+                        index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
+                                pi->step_c + pi->precno * pi->step_p;
+                        if (!pi->include[index]) {
+                            pi->include[index] = 1;
+                            return OPJ_TRUE;
+                        }
+LABEL_SKIP:
+                        ;
+                    }
+                }
+            }
+        }
+    }
+
+    return OPJ_FALSE;
 }
 
-
-static void opj_get_all_encoding_parameters(   const opj_image_t *p_image,
+static void opj_get_encoding_parameters(const opj_image_t *p_image,
                                         const opj_cp_t *p_cp,
-                                        OPJ_UINT32 tileno,
+                                        OPJ_UINT32 p_tileno,
                                         OPJ_INT32 * p_tx0,
-                                        OPJ_INT32 * p_tx1,
-                                        OPJ_INT32 * p_ty0,
-                                        OPJ_INT32 * p_ty1,
+                                        OPJ_INT32  * p_tx1,
+                                        OPJ_INT32  * p_ty0,
+                                        OPJ_INT32  * p_ty1,
                                         OPJ_UINT32 * p_dx_min,
                                         OPJ_UINT32 * p_dy_min,
                                         OPJ_UINT32 * p_max_prec,
-                                        OPJ_UINT32 * p_max_res,
-                                        OPJ_UINT32 ** p_resolutions )
+                                        OPJ_UINT32 * p_max_res)
 {
-       /* loop*/
-       OPJ_UINT32 compno, resno;
-
-       /* pointers*/
-       const opj_tcp_t *tcp = 00;
-       const opj_tccp_t * l_tccp = 00;
-       const opj_image_comp_t * l_img_comp = 00;
-
-       /* to store l_dx, l_dy, w and h for each resolution and component.*/
-       OPJ_UINT32 * lResolutionPtr;
-
-       /* position in x and y of tile*/
-       OPJ_UINT32 p, q;
-
-       /* non-corrected (in regard to image offset) tile offset */
-       OPJ_UINT32 l_tx0, l_ty0;
-
-       /* preconditions in debug*/
-       assert(p_cp != 00);
-       assert(p_image != 00);
-       assert(tileno < p_cp->tw * p_cp->th);
-
-       /* initializations*/
-       tcp = &p_cp->tcps [tileno];
-       l_tccp = tcp->tccps;
-       l_img_comp = p_image->comps;
-
-       /* position in x and y of tile*/
-       p = tileno % p_cp->tw;
-       q = tileno / p_cp->tw;
-
-       /* here calculation of tx0, tx1, ty0, ty1, maxprec, l_dx and l_dy */
-       l_tx0 = p_cp->tx0 + p * p_cp->tdx; /* can't be greater than p_image->x1 so won't overflow */
-       *p_tx0 = (OPJ_INT32)opj_uint_max(l_tx0, p_image->x0);
-       *p_tx1 = (OPJ_INT32)opj_uint_min(opj_uint_adds(l_tx0, p_cp->tdx), p_image->x1);
-       l_ty0 = p_cp->ty0 + q * p_cp->tdy; /* can't be greater than p_image->y1 so won't overflow */
-       *p_ty0 = (OPJ_INT32)opj_uint_max(l_ty0, p_image->y0);
-       *p_ty1 = (OPJ_INT32)opj_uint_min(opj_uint_adds(l_ty0, p_cp->tdy), p_image->y1);
-
-       /* max precision and resolution is 0 (can only grow)*/
-       *p_max_prec = 0;
-       *p_max_res = 0;
-
-       /* take the largest value for dx_min and dy_min*/
-       *p_dx_min = 0x7fffffff;
-       *p_dy_min = 0x7fffffff;
-
-       for (compno = 0; compno < p_image->numcomps; ++compno) {
-               /* aritmetic variables to calculate*/
-               OPJ_UINT32 l_level_no;
-               OPJ_INT32 l_rx0, l_ry0, l_rx1, l_ry1;
-               OPJ_INT32 l_px0, l_py0, l_px1, py1;
-               OPJ_UINT32 l_product;
-               OPJ_INT32 l_tcx0, l_tcy0, l_tcx1, l_tcy1;
-               OPJ_UINT32 l_pdx, l_pdy , l_pw , l_ph;
-
-               lResolutionPtr = p_resolutions[compno];
-
-               l_tcx0 = opj_int_ceildiv(*p_tx0, (OPJ_INT32)l_img_comp->dx);
-               l_tcy0 = opj_int_ceildiv(*p_ty0, (OPJ_INT32)l_img_comp->dy);
-               l_tcx1 = opj_int_ceildiv(*p_tx1, (OPJ_INT32)l_img_comp->dx);
-               l_tcy1 = opj_int_ceildiv(*p_ty1, (OPJ_INT32)l_img_comp->dy);
-
-               if (l_tccp->numresolutions > *p_max_res) {
-                       *p_max_res = l_tccp->numresolutions;
-               }
-
-               /* use custom size for precincts*/
-               l_level_no = l_tccp->numresolutions;
-               for (resno = 0; resno < l_tccp->numresolutions; ++resno) {
-                       OPJ_UINT32 l_dx, l_dy;
-
-                       --l_level_no;
-                       
-                       /* precinct width and height*/
-                       l_pdx = l_tccp->prcw[resno];
-                       l_pdy = l_tccp->prch[resno];
-                       *lResolutionPtr++ = l_pdx;
-                       *lResolutionPtr++ = l_pdy;
-                       l_dx = l_img_comp->dx * (1u << (l_pdx + l_level_no));
-                       l_dy = l_img_comp->dy * (1u << (l_pdy + l_level_no));
-                       /* take the minimum size for l_dx for each comp and resolution*/
-                       *p_dx_min = (OPJ_UINT32)opj_int_min((OPJ_INT32)*p_dx_min, (OPJ_INT32)l_dx);
-                       *p_dy_min = (OPJ_UINT32)opj_int_min((OPJ_INT32)*p_dy_min, (OPJ_INT32)l_dy);
-
-                       /* various calculations of extents*/
-                       l_rx0 = opj_int_ceildivpow2(l_tcx0, (OPJ_INT32)l_level_no);
-                       l_ry0 = opj_int_ceildivpow2(l_tcy0, (OPJ_INT32)l_level_no);
-                       l_rx1 = opj_int_ceildivpow2(l_tcx1, (OPJ_INT32)l_level_no);
-                       l_ry1 = opj_int_ceildivpow2(l_tcy1, (OPJ_INT32)l_level_no);
-                       l_px0 = opj_int_floordivpow2(l_rx0, (OPJ_INT32)l_pdx) << l_pdx;
-                       l_py0 = opj_int_floordivpow2(l_ry0, (OPJ_INT32)l_pdy) << l_pdy;
-                       l_px1 = opj_int_ceildivpow2(l_rx1, (OPJ_INT32)l_pdx) << l_pdx;
-                       py1 = opj_int_ceildivpow2(l_ry1, (OPJ_INT32)l_pdy) << l_pdy;
-                       l_pw = (l_rx0==l_rx1)?0:(OPJ_UINT32)((l_px1 - l_px0) >> l_pdx);
-                       l_ph = (l_ry0==l_ry1)?0:(OPJ_UINT32)((py1 - l_py0) >> l_pdy);
-                       *lResolutionPtr++ = l_pw;
-                       *lResolutionPtr++ = l_ph;
-                       l_product = l_pw * l_ph;
-                       
+    /* loop */
+    OPJ_UINT32  compno, resno;
+    /* pointers */
+    const opj_tcp_t *l_tcp = 00;
+    const opj_tccp_t * l_tccp = 00;
+    const opj_image_comp_t * l_img_comp = 00;
+
+    /* position in x and y of tile */
+    OPJ_UINT32 p, q;
+
+    /* preconditions */
+    assert(p_cp != 00);
+    assert(p_image != 00);
+    assert(p_tileno < p_cp->tw * p_cp->th);
+
+    /* initializations */
+    l_tcp = &p_cp->tcps [p_tileno];
+    l_img_comp = p_image->comps;
+    l_tccp = l_tcp->tccps;
+
+    /* here calculation of tx0, tx1, ty0, ty1, maxprec, dx and dy */
+    p = p_tileno % p_cp->tw;
+    q = p_tileno / p_cp->tw;
+
+    /* find extent of tile */
+    *p_tx0 = opj_int_max((OPJ_INT32)(p_cp->tx0 + p * p_cp->tdx),
+                         (OPJ_INT32)p_image->x0);
+    *p_tx1 = opj_int_min((OPJ_INT32)(p_cp->tx0 + (p + 1) * p_cp->tdx),
+                         (OPJ_INT32)p_image->x1);
+    *p_ty0 = opj_int_max((OPJ_INT32)(p_cp->ty0 + q * p_cp->tdy),
+                         (OPJ_INT32)p_image->y0);
+    *p_ty1 = opj_int_min((OPJ_INT32)(p_cp->ty0 + (q + 1) * p_cp->tdy),
+                         (OPJ_INT32)p_image->y1);
+
+    /* max precision is 0 (can only grow) */
+    *p_max_prec = 0;
+    *p_max_res = 0;
+
+    /* take the largest value for dx_min and dy_min */
+    *p_dx_min = 0x7fffffff;
+    *p_dy_min  = 0x7fffffff;
+
+    for (compno = 0; compno < p_image->numcomps; ++compno) {
+        /* arithmetic variables to calculate */
+        OPJ_UINT32 l_level_no;
+        OPJ_INT32 l_rx0, l_ry0, l_rx1, l_ry1;
+        OPJ_INT32 l_px0, l_py0, l_px1, py1;
+        OPJ_UINT32 l_pdx, l_pdy;
+        OPJ_UINT32 l_pw, l_ph;
+        OPJ_UINT32 l_product;
+        OPJ_INT32 l_tcx0, l_tcy0, l_tcx1, l_tcy1;
+
+        l_tcx0 = opj_int_ceildiv(*p_tx0, (OPJ_INT32)l_img_comp->dx);
+        l_tcy0 = opj_int_ceildiv(*p_ty0, (OPJ_INT32)l_img_comp->dy);
+        l_tcx1 = opj_int_ceildiv(*p_tx1, (OPJ_INT32)l_img_comp->dx);
+        l_tcy1 = opj_int_ceildiv(*p_ty1, (OPJ_INT32)l_img_comp->dy);
+
+        if (l_tccp->numresolutions > *p_max_res) {
+            *p_max_res = l_tccp->numresolutions;
+        }
+
+        /* use custom size for precincts */
+        for (resno = 0; resno < l_tccp->numresolutions; ++resno) {
+            OPJ_UINT32 l_dx, l_dy;
+
+            /* precinct width and height */
+            l_pdx = l_tccp->prcw[resno];
+            l_pdy = l_tccp->prch[resno];
+
+            l_dx = l_img_comp->dx * (1u << (l_pdx + l_tccp->numresolutions - 1 - resno));
+            l_dy = l_img_comp->dy * (1u << (l_pdy + l_tccp->numresolutions - 1 - resno));
+
+            /* take the minimum size for dx for each comp and resolution */
+            *p_dx_min = opj_uint_min(*p_dx_min, l_dx);
+            *p_dy_min = opj_uint_min(*p_dy_min, l_dy);
+
+            /* various calculations of extents */
+            l_level_no = l_tccp->numresolutions - 1 - resno;
+
+            l_rx0 = opj_int_ceildivpow2(l_tcx0, (OPJ_INT32)l_level_no);
+            l_ry0 = opj_int_ceildivpow2(l_tcy0, (OPJ_INT32)l_level_no);
+            l_rx1 = opj_int_ceildivpow2(l_tcx1, (OPJ_INT32)l_level_no);
+            l_ry1 = opj_int_ceildivpow2(l_tcy1, (OPJ_INT32)l_level_no);
+
+            l_px0 = opj_int_floordivpow2(l_rx0, (OPJ_INT32)l_pdx) << l_pdx;
+            l_py0 = opj_int_floordivpow2(l_ry0, (OPJ_INT32)l_pdy) << l_pdy;
+            l_px1 = opj_int_ceildivpow2(l_rx1, (OPJ_INT32)l_pdx) << l_pdx;
+
+            py1 = opj_int_ceildivpow2(l_ry1, (OPJ_INT32)l_pdy) << l_pdy;
+
+            l_pw = (l_rx0 == l_rx1) ? 0 : (OPJ_UINT32)((l_px1 - l_px0) >> l_pdx);
+            l_ph = (l_ry0 == l_ry1) ? 0 : (OPJ_UINT32)((py1 - l_py0) >> l_pdy);
+
+            l_product = l_pw * l_ph;
+
+            /* update precision */
+            if (l_product > *p_max_prec) {
+                *p_max_prec = l_product;
+            }
+        }
+        ++l_img_comp;
+        ++l_tccp;
+    }
+}
+
+
+static void opj_get_all_encoding_parameters(const opj_image_t *p_image,
+        const opj_cp_t *p_cp,
+        OPJ_UINT32 tileno,
+        OPJ_INT32 * p_tx0,
+        OPJ_INT32 * p_tx1,
+        OPJ_INT32 * p_ty0,
+        OPJ_INT32 * p_ty1,
+        OPJ_UINT32 * p_dx_min,
+        OPJ_UINT32 * p_dy_min,
+        OPJ_UINT32 * p_max_prec,
+        OPJ_UINT32 * p_max_res,
+        OPJ_UINT32 ** p_resolutions)
+{
+    /* loop*/
+    OPJ_UINT32 compno, resno;
+
+    /* pointers*/
+    const opj_tcp_t *tcp = 00;
+    const opj_tccp_t * l_tccp = 00;
+    const opj_image_comp_t * l_img_comp = 00;
+
+    /* to store l_dx, l_dy, w and h for each resolution and component.*/
+    OPJ_UINT32 * lResolutionPtr;
+
+    /* position in x and y of tile*/
+    OPJ_UINT32 p, q;
+
+    /* non-corrected (in regard to image offset) tile offset */
+    OPJ_UINT32 l_tx0, l_ty0;
+
+    /* preconditions in debug*/
+    assert(p_cp != 00);
+    assert(p_image != 00);
+    assert(tileno < p_cp->tw * p_cp->th);
+
+    /* initializations*/
+    tcp = &p_cp->tcps [tileno];
+    l_tccp = tcp->tccps;
+    l_img_comp = p_image->comps;
+
+    /* position in x and y of tile*/
+    p = tileno % p_cp->tw;
+    q = tileno / p_cp->tw;
+
+    /* here calculation of tx0, tx1, ty0, ty1, maxprec, l_dx and l_dy */
+    l_tx0 = p_cp->tx0 + p *
+            p_cp->tdx; /* can't be greater than p_image->x1 so won't overflow */
+    *p_tx0 = (OPJ_INT32)opj_uint_max(l_tx0, p_image->x0);
+    *p_tx1 = (OPJ_INT32)opj_uint_min(opj_uint_adds(l_tx0, p_cp->tdx), p_image->x1);
+    l_ty0 = p_cp->ty0 + q *
+            p_cp->tdy; /* can't be greater than p_image->y1 so won't overflow */
+    *p_ty0 = (OPJ_INT32)opj_uint_max(l_ty0, p_image->y0);
+    *p_ty1 = (OPJ_INT32)opj_uint_min(opj_uint_adds(l_ty0, p_cp->tdy), p_image->y1);
+
+    /* max precision and resolution is 0 (can only grow)*/
+    *p_max_prec = 0;
+    *p_max_res = 0;
+
+    /* take the largest value for dx_min and dy_min*/
+    *p_dx_min = 0x7fffffff;
+    *p_dy_min = 0x7fffffff;
+
+    for (compno = 0; compno < p_image->numcomps; ++compno) {
+        /* aritmetic variables to calculate*/
+        OPJ_UINT32 l_level_no;
+        OPJ_INT32 l_rx0, l_ry0, l_rx1, l_ry1;
+        OPJ_INT32 l_px0, l_py0, l_px1, py1;
+        OPJ_UINT32 l_product;
+        OPJ_INT32 l_tcx0, l_tcy0, l_tcx1, l_tcy1;
+        OPJ_UINT32 l_pdx, l_pdy, l_pw, l_ph;
+
+        lResolutionPtr = p_resolutions[compno];
+
+        l_tcx0 = opj_int_ceildiv(*p_tx0, (OPJ_INT32)l_img_comp->dx);
+        l_tcy0 = opj_int_ceildiv(*p_ty0, (OPJ_INT32)l_img_comp->dy);
+        l_tcx1 = opj_int_ceildiv(*p_tx1, (OPJ_INT32)l_img_comp->dx);
+        l_tcy1 = opj_int_ceildiv(*p_ty1, (OPJ_INT32)l_img_comp->dy);
+
+        if (l_tccp->numresolutions > *p_max_res) {
+            *p_max_res = l_tccp->numresolutions;
+        }
+
+        /* use custom size for precincts*/
+        l_level_no = l_tccp->numresolutions;
+        for (resno = 0; resno < l_tccp->numresolutions; ++resno) {
+            OPJ_UINT32 l_dx, l_dy;
+
+            --l_level_no;
+
+            /* precinct width and height*/
+            l_pdx = l_tccp->prcw[resno];
+            l_pdy = l_tccp->prch[resno];
+            *lResolutionPtr++ = l_pdx;
+            *lResolutionPtr++ = l_pdy;
+            l_dx = l_img_comp->dx * (1u << (l_pdx + l_level_no));
+            l_dy = l_img_comp->dy * (1u << (l_pdy + l_level_no));
+            /* take the minimum size for l_dx for each comp and resolution*/
+            *p_dx_min = (OPJ_UINT32)opj_int_min((OPJ_INT32) * p_dx_min, (OPJ_INT32)l_dx);
+            *p_dy_min = (OPJ_UINT32)opj_int_min((OPJ_INT32) * p_dy_min, (OPJ_INT32)l_dy);
+
+            /* various calculations of extents*/
+            l_rx0 = opj_int_ceildivpow2(l_tcx0, (OPJ_INT32)l_level_no);
+            l_ry0 = opj_int_ceildivpow2(l_tcy0, (OPJ_INT32)l_level_no);
+            l_rx1 = opj_int_ceildivpow2(l_tcx1, (OPJ_INT32)l_level_no);
+            l_ry1 = opj_int_ceildivpow2(l_tcy1, (OPJ_INT32)l_level_no);
+            l_px0 = opj_int_floordivpow2(l_rx0, (OPJ_INT32)l_pdx) << l_pdx;
+            l_py0 = opj_int_floordivpow2(l_ry0, (OPJ_INT32)l_pdy) << l_pdy;
+            l_px1 = opj_int_ceildivpow2(l_rx1, (OPJ_INT32)l_pdx) << l_pdx;
+            py1 = opj_int_ceildivpow2(l_ry1, (OPJ_INT32)l_pdy) << l_pdy;
+            l_pw = (l_rx0 == l_rx1) ? 0 : (OPJ_UINT32)((l_px1 - l_px0) >> l_pdx);
+            l_ph = (l_ry0 == l_ry1) ? 0 : (OPJ_UINT32)((py1 - l_py0) >> l_pdy);
+            *lResolutionPtr++ = l_pw;
+            *lResolutionPtr++ = l_ph;
+            l_product = l_pw * l_ph;
+
             /* update precision*/
-                       if (l_product > *p_max_prec) {
-                               *p_max_prec = l_product;
-                       }
-
-               }
-               ++l_tccp;
-               ++l_img_comp;
-       }
+            if (l_product > *p_max_prec) {
+                *p_max_prec = l_product;
+            }
+
+        }
+        ++l_tccp;
+        ++l_img_comp;
+    }
 }
 
-static opj_pi_iterator_t * opj_pi_create(      const opj_image_t *image,
-                                    const opj_cp_t *cp,
-                                    OPJ_UINT32 tileno )
+static opj_pi_iterator_t * opj_pi_create(const opj_image_t *image,
+        const opj_cp_t *cp,
+        OPJ_UINT32 tileno)
 {
-       /* loop*/
-       OPJ_UINT32 pino, compno;
-       /* number of poc in the p_pi*/
-       OPJ_UINT32 l_poc_bound;
-
-       /* pointers to tile coding parameters and components.*/
-       opj_pi_iterator_t *l_pi = 00;
-       opj_tcp_t *tcp = 00;
-       const opj_tccp_t *tccp = 00;
-
-       /* current packet iterator being allocated*/
-       opj_pi_iterator_t *l_current_pi = 00;
-
-       /* preconditions in debug*/
-       assert(cp != 00);
-       assert(image != 00);
-       assert(tileno < cp->tw * cp->th);
-
-       /* initializations*/
-       tcp = &cp->tcps[tileno];
-       l_poc_bound = tcp->numpocs+1;
-
-       /* memory allocations*/
-       l_pi = (opj_pi_iterator_t*) opj_calloc((l_poc_bound), sizeof(opj_pi_iterator_t));
-       if (!l_pi) {
-               return NULL;
-       }
-
-       l_current_pi = l_pi;
-       for (pino = 0; pino < l_poc_bound ; ++pino) {
-
-               l_current_pi->comps = (opj_pi_comp_t*) opj_calloc(image->numcomps, sizeof(opj_pi_comp_t));
-               if (! l_current_pi->comps) {
-                       opj_pi_destroy(l_pi, l_poc_bound);
-                       return NULL;
-               }
-
-               l_current_pi->numcomps = image->numcomps;
-
-               for (compno = 0; compno < image->numcomps; ++compno) {
-                       opj_pi_comp_t *comp = &l_current_pi->comps[compno];
-
-                       tccp = &tcp->tccps[compno];
-
-                       comp->resolutions = (opj_pi_resolution_t*) opj_calloc(tccp->numresolutions, sizeof(opj_pi_resolution_t));
-                       if (!comp->resolutions) {
-                               opj_pi_destroy(l_pi, l_poc_bound);
-                               return 00;
-                       }
-
-                       comp->numresolutions = tccp->numresolutions;
-               }
-               ++l_current_pi;
-       }
-       return l_pi;
+    /* loop*/
+    OPJ_UINT32 pino, compno;
+    /* number of poc in the p_pi*/
+    OPJ_UINT32 l_poc_bound;
+
+    /* pointers to tile coding parameters and components.*/
+    opj_pi_iterator_t *l_pi = 00;
+    opj_tcp_t *tcp = 00;
+    const opj_tccp_t *tccp = 00;
+
+    /* current packet iterator being allocated*/
+    opj_pi_iterator_t *l_current_pi = 00;
+
+    /* preconditions in debug*/
+    assert(cp != 00);
+    assert(image != 00);
+    assert(tileno < cp->tw * cp->th);
+
+    /* initializations*/
+    tcp = &cp->tcps[tileno];
+    l_poc_bound = tcp->numpocs + 1;
+
+    /* memory allocations*/
+    l_pi = (opj_pi_iterator_t*) opj_calloc((l_poc_bound),
+                                           sizeof(opj_pi_iterator_t));
+    if (!l_pi) {
+        return NULL;
+    }
+
+    l_current_pi = l_pi;
+    for (pino = 0; pino < l_poc_bound ; ++pino) {
+
+        l_current_pi->comps = (opj_pi_comp_t*) opj_calloc(image->numcomps,
+                              sizeof(opj_pi_comp_t));
+        if (! l_current_pi->comps) {
+            opj_pi_destroy(l_pi, l_poc_bound);
+            return NULL;
+        }
+
+        l_current_pi->numcomps = image->numcomps;
+
+        for (compno = 0; compno < image->numcomps; ++compno) {
+            opj_pi_comp_t *comp = &l_current_pi->comps[compno];
+
+            tccp = &tcp->tccps[compno];
+
+            comp->resolutions = (opj_pi_resolution_t*) opj_calloc(tccp->numresolutions,
+                                sizeof(opj_pi_resolution_t));
+            if (!comp->resolutions) {
+                opj_pi_destroy(l_pi, l_poc_bound);
+                return 00;
+            }
+
+            comp->numresolutions = tccp->numresolutions;
+        }
+        ++l_current_pi;
+    }
+    return l_pi;
 }
 
-static void opj_pi_update_encode_poc_and_final (   opj_cp_t *p_cp,
-                                            OPJ_UINT32 p_tileno,
-                                            OPJ_INT32 p_tx0,
-                                            OPJ_INT32 p_tx1,
-                                            OPJ_INT32 p_ty0,
-                                            OPJ_INT32 p_ty1,
-                                            OPJ_UINT32 p_max_prec,
-                                            OPJ_UINT32 p_max_res,
-                                            OPJ_UINT32 p_dx_min,
-                                            OPJ_UINT32 p_dy_min)
+static void opj_pi_update_encode_poc_and_final(opj_cp_t *p_cp,
+        OPJ_UINT32 p_tileno,
+        OPJ_INT32 p_tx0,
+        OPJ_INT32 p_tx1,
+        OPJ_INT32 p_ty0,
+        OPJ_INT32 p_ty1,
+        OPJ_UINT32 p_max_prec,
+        OPJ_UINT32 p_max_res,
+        OPJ_UINT32 p_dx_min,
+        OPJ_UINT32 p_dy_min)
 {
-       /* loop*/
-       OPJ_UINT32 pino;
-       /* tile coding parameter*/
-       opj_tcp_t *l_tcp = 00;
-       /* current poc being updated*/
-       opj_poc_t * l_current_poc = 00;
+    /* loop*/
+    OPJ_UINT32 pino;
+    /* tile coding parameter*/
+    opj_tcp_t *l_tcp = 00;
+    /* current poc being updated*/
+    opj_poc_t * l_current_poc = 00;
 
-       /* number of pocs*/
-       OPJ_UINT32 l_poc_bound;
+    /* number of pocs*/
+    OPJ_UINT32 l_poc_bound;
 
     OPJ_ARG_NOT_USED(p_max_res);
 
-       /* preconditions in debug*/
-       assert(p_cp != 00);
-       assert(p_tileno < p_cp->tw * p_cp->th);
-
-       /* initializations*/
-       l_tcp = &p_cp->tcps [p_tileno];
-       /* number of iterations in the loop */
-       l_poc_bound = l_tcp->numpocs+1;
-
-       /* start at first element, and to make sure the compiler will not make a calculation each time in the loop
-          store a pointer to the current element to modify rather than l_tcp->pocs[i]*/
-       l_current_poc = l_tcp->pocs;
-
-       l_current_poc->compS = l_current_poc->compno0;
-       l_current_poc->compE = l_current_poc->compno1;
-       l_current_poc->resS = l_current_poc->resno0;
-       l_current_poc->resE = l_current_poc->resno1;
-       l_current_poc->layE = l_current_poc->layno1;
-
-       /* special treatment for the first element*/
-       l_current_poc->layS = 0;
-       l_current_poc->prg  = l_current_poc->prg1;
-       l_current_poc->prcS = 0;
-
-       l_current_poc->prcE = p_max_prec;
-       l_current_poc->txS = (OPJ_UINT32)p_tx0;
-       l_current_poc->txE = (OPJ_UINT32)p_tx1;
-       l_current_poc->tyS = (OPJ_UINT32)p_ty0;
-       l_current_poc->tyE = (OPJ_UINT32)p_ty1;
-       l_current_poc->dx = p_dx_min;
-       l_current_poc->dy = p_dy_min;
-
-       ++ l_current_poc;
-       for (pino = 1;pino < l_poc_bound ; ++pino) {
-               l_current_poc->compS = l_current_poc->compno0;
-               l_current_poc->compE= l_current_poc->compno1;
-               l_current_poc->resS = l_current_poc->resno0;
-               l_current_poc->resE = l_current_poc->resno1;
-               l_current_poc->layE = l_current_poc->layno1;
-               l_current_poc->prg  = l_current_poc->prg1;
-               l_current_poc->prcS = 0;
-               /* special treatment here different from the first element*/
-               l_current_poc->layS = (l_current_poc->layE > (l_current_poc-1)->layE) ? l_current_poc->layE : 0;
-
-               l_current_poc->prcE = p_max_prec;
-               l_current_poc->txS = (OPJ_UINT32)p_tx0;
-               l_current_poc->txE = (OPJ_UINT32)p_tx1;
-               l_current_poc->tyS = (OPJ_UINT32)p_ty0;
-               l_current_poc->tyE = (OPJ_UINT32)p_ty1;
-               l_current_poc->dx = p_dx_min;
-               l_current_poc->dy = p_dy_min;
-               ++ l_current_poc;
-       }
+    /* preconditions in debug*/
+    assert(p_cp != 00);
+    assert(p_tileno < p_cp->tw * p_cp->th);
+
+    /* initializations*/
+    l_tcp = &p_cp->tcps [p_tileno];
+    /* number of iterations in the loop */
+    l_poc_bound = l_tcp->numpocs + 1;
+
+    /* start at first element, and to make sure the compiler will not make a calculation each time in the loop
+       store a pointer to the current element to modify rather than l_tcp->pocs[i]*/
+    l_current_poc = l_tcp->pocs;
+
+    l_current_poc->compS = l_current_poc->compno0;
+    l_current_poc->compE = l_current_poc->compno1;
+    l_current_poc->resS = l_current_poc->resno0;
+    l_current_poc->resE = l_current_poc->resno1;
+    l_current_poc->layE = l_current_poc->layno1;
+
+    /* special treatment for the first element*/
+    l_current_poc->layS = 0;
+    l_current_poc->prg  = l_current_poc->prg1;
+    l_current_poc->prcS = 0;
+
+    l_current_poc->prcE = p_max_prec;
+    l_current_poc->txS = (OPJ_UINT32)p_tx0;
+    l_current_poc->txE = (OPJ_UINT32)p_tx1;
+    l_current_poc->tyS = (OPJ_UINT32)p_ty0;
+    l_current_poc->tyE = (OPJ_UINT32)p_ty1;
+    l_current_poc->dx = p_dx_min;
+    l_current_poc->dy = p_dy_min;
+
+    ++ l_current_poc;
+    for (pino = 1; pino < l_poc_bound ; ++pino) {
+        l_current_poc->compS = l_current_poc->compno0;
+        l_current_poc->compE = l_current_poc->compno1;
+        l_current_poc->resS = l_current_poc->resno0;
+        l_current_poc->resE = l_current_poc->resno1;
+        l_current_poc->layE = l_current_poc->layno1;
+        l_current_poc->prg  = l_current_poc->prg1;
+        l_current_poc->prcS = 0;
+        /* special treatment here different from the first element*/
+        l_current_poc->layS = (l_current_poc->layE > (l_current_poc - 1)->layE) ?
+                              l_current_poc->layE : 0;
+
+        l_current_poc->prcE = p_max_prec;
+        l_current_poc->txS = (OPJ_UINT32)p_tx0;
+        l_current_poc->txE = (OPJ_UINT32)p_tx1;
+        l_current_poc->tyS = (OPJ_UINT32)p_ty0;
+        l_current_poc->tyE = (OPJ_UINT32)p_ty1;
+        l_current_poc->dx = p_dx_min;
+        l_current_poc->dy = p_dy_min;
+        ++ l_current_poc;
+    }
 }
 
-static void opj_pi_update_encode_not_poc (     opj_cp_t *p_cp,
-                                    OPJ_UINT32 p_num_comps,
-                                    OPJ_UINT32 p_tileno,
-                                    OPJ_INT32 p_tx0,
-                                    OPJ_INT32 p_tx1,
-                                    OPJ_INT32 p_ty0,
-                                    OPJ_INT32 p_ty1,
-                                    OPJ_UINT32 p_max_prec,
-                                    OPJ_UINT32 p_max_res,
-                                    OPJ_UINT32 p_dx_min,
-                                    OPJ_UINT32 p_dy_min)
+static void opj_pi_update_encode_not_poc(opj_cp_t *p_cp,
+        OPJ_UINT32 p_num_comps,
+        OPJ_UINT32 p_tileno,
+        OPJ_INT32 p_tx0,
+        OPJ_INT32 p_tx1,
+        OPJ_INT32 p_ty0,
+        OPJ_INT32 p_ty1,
+        OPJ_UINT32 p_max_prec,
+        OPJ_UINT32 p_max_res,
+        OPJ_UINT32 p_dx_min,
+        OPJ_UINT32 p_dy_min)
 {
-       /* loop*/
-       OPJ_UINT32 pino;
-       /* tile coding parameter*/
-       opj_tcp_t *l_tcp = 00;
-       /* current poc being updated*/
-       opj_poc_t * l_current_poc = 00;
-       /* number of pocs*/
-       OPJ_UINT32 l_poc_bound;
-
-       /* preconditions in debug*/
-       assert(p_cp != 00);
-       assert(p_tileno < p_cp->tw * p_cp->th);
-
-       /* initializations*/
-       l_tcp = &p_cp->tcps [p_tileno];
-
-       /* number of iterations in the loop */
-       l_poc_bound = l_tcp->numpocs+1;
-
-       /* start at first element, and to make sure the compiler will not make a calculation each time in the loop
-          store a pointer to the current element to modify rather than l_tcp->pocs[i]*/
-       l_current_poc = l_tcp->pocs;
-
-       for (pino = 0; pino < l_poc_bound ; ++pino) {
-               l_current_poc->compS = 0;
-               l_current_poc->compE = p_num_comps;/*p_image->numcomps;*/
-               l_current_poc->resS = 0;
-               l_current_poc->resE = p_max_res;
-               l_current_poc->layS = 0;
-               l_current_poc->layE = l_tcp->numlayers;
-               l_current_poc->prg  = l_tcp->prg;
-               l_current_poc->prcS = 0;
-               l_current_poc->prcE = p_max_prec;
-               l_current_poc->txS = (OPJ_UINT32)p_tx0;
-               l_current_poc->txE = (OPJ_UINT32)p_tx1;
-               l_current_poc->tyS = (OPJ_UINT32)p_ty0;
-               l_current_poc->tyE = (OPJ_UINT32)p_ty1;
-               l_current_poc->dx = p_dx_min;
-               l_current_poc->dy = p_dy_min;
-               ++ l_current_poc;
-       }
+    /* loop*/
+    OPJ_UINT32 pino;
+    /* tile coding parameter*/
+    opj_tcp_t *l_tcp = 00;
+    /* current poc being updated*/
+    opj_poc_t * l_current_poc = 00;
+    /* number of pocs*/
+    OPJ_UINT32 l_poc_bound;
+
+    /* preconditions in debug*/
+    assert(p_cp != 00);
+    assert(p_tileno < p_cp->tw * p_cp->th);
+
+    /* initializations*/
+    l_tcp = &p_cp->tcps [p_tileno];
+
+    /* number of iterations in the loop */
+    l_poc_bound = l_tcp->numpocs + 1;
+
+    /* start at first element, and to make sure the compiler will not make a calculation each time in the loop
+       store a pointer to the current element to modify rather than l_tcp->pocs[i]*/
+    l_current_poc = l_tcp->pocs;
+
+    for (pino = 0; pino < l_poc_bound ; ++pino) {
+        l_current_poc->compS = 0;
+        l_current_poc->compE = p_num_comps;/*p_image->numcomps;*/
+        l_current_poc->resS = 0;
+        l_current_poc->resE = p_max_res;
+        l_current_poc->layS = 0;
+        l_current_poc->layE = l_tcp->numlayers;
+        l_current_poc->prg  = l_tcp->prg;
+        l_current_poc->prcS = 0;
+        l_current_poc->prcE = p_max_prec;
+        l_current_poc->txS = (OPJ_UINT32)p_tx0;
+        l_current_poc->txE = (OPJ_UINT32)p_tx1;
+        l_current_poc->tyS = (OPJ_UINT32)p_ty0;
+        l_current_poc->tyE = (OPJ_UINT32)p_ty1;
+        l_current_poc->dx = p_dx_min;
+        l_current_poc->dy = p_dy_min;
+        ++ l_current_poc;
+    }
 }
 
-static void opj_pi_update_decode_poc (opj_pi_iterator_t * p_pi,
-                               opj_tcp_t * p_tcp,
-                               OPJ_UINT32 p_max_precision,
-                               OPJ_UINT32 p_max_res)
+static void opj_pi_update_decode_poc(opj_pi_iterator_t * p_pi,
+                                     opj_tcp_t * p_tcp,
+                                     OPJ_UINT32 p_max_precision,
+                                     OPJ_UINT32 p_max_res)
 {
-       /* loop*/
-       OPJ_UINT32 pino;
+    /* loop*/
+    OPJ_UINT32 pino;
 
-       /* encoding prameters to set*/
-       OPJ_UINT32 l_bound;
+    /* encoding prameters to set*/
+    OPJ_UINT32 l_bound;
 
-       opj_pi_iterator_t * l_current_pi = 00;
-       opj_poc_t* l_current_poc = 0;
+    opj_pi_iterator_t * l_current_pi = 00;
+    opj_poc_t* l_current_poc = 0;
 
     OPJ_ARG_NOT_USED(p_max_res);
 
-       /* preconditions in debug*/
-       assert(p_pi != 00);
-       assert(p_tcp != 00);
-
-       /* initializations*/
-       l_bound = p_tcp->numpocs+1;
-       l_current_pi = p_pi;
-       l_current_poc = p_tcp->pocs;
-
-       for     (pino = 0;pino<l_bound;++pino) {
-               l_current_pi->poc.prg = l_current_poc->prg; /* Progression Order #0 */
-               l_current_pi->first = 1;
-
-               l_current_pi->poc.resno0 = l_current_poc->resno0; /* Resolution Level Index #0 (Start) */
-               l_current_pi->poc.compno0 = l_current_poc->compno0; /* Component Index #0 (Start) */
-               l_current_pi->poc.layno0 = 0;
-               l_current_pi->poc.precno0 = 0;
-               l_current_pi->poc.resno1 = l_current_poc->resno1; /* Resolution Level Index #0 (End) */
-               l_current_pi->poc.compno1 = l_current_poc->compno1; /* Component Index #0 (End) */
-               l_current_pi->poc.layno1 = l_current_poc->layno1; /* Layer Index #0 (End) */
-               l_current_pi->poc.precno1 = p_max_precision;
-               ++l_current_pi;
-               ++l_current_poc;
-       }
+    /* preconditions in debug*/
+    assert(p_pi != 00);
+    assert(p_tcp != 00);
+
+    /* initializations*/
+    l_bound = p_tcp->numpocs + 1;
+    l_current_pi = p_pi;
+    l_current_poc = p_tcp->pocs;
+
+    for (pino = 0; pino < l_bound; ++pino) {
+        l_current_pi->poc.prg = l_current_poc->prg; /* Progression Order #0 */
+        l_current_pi->first = 1;
+
+        l_current_pi->poc.resno0 =
+            l_current_poc->resno0; /* Resolution Level Index #0 (Start) */
+        l_current_pi->poc.compno0 =
+            l_current_poc->compno0; /* Component Index #0 (Start) */
+        l_current_pi->poc.layno0 = 0;
+        l_current_pi->poc.precno0 = 0;
+        l_current_pi->poc.resno1 =
+            l_current_poc->resno1; /* Resolution Level Index #0 (End) */
+        l_current_pi->poc.compno1 =
+            l_current_poc->compno1; /* Component Index #0 (End) */
+        l_current_pi->poc.layno1 = l_current_poc->layno1; /* Layer Index #0 (End) */
+        l_current_pi->poc.precno1 = p_max_precision;
+        ++l_current_pi;
+        ++l_current_poc;
+    }
 }
 
-static void opj_pi_update_decode_not_poc (opj_pi_iterator_t * p_pi,
-                                   opj_tcp_t * p_tcp,
-                                   OPJ_UINT32 p_max_precision,
-                                   OPJ_UINT32 p_max_res)
+static void opj_pi_update_decode_not_poc(opj_pi_iterator_t * p_pi,
+        opj_tcp_t * p_tcp,
+        OPJ_UINT32 p_max_precision,
+        OPJ_UINT32 p_max_res)
 {
-       /* loop*/
-       OPJ_UINT32 pino;
-
-       /* encoding prameters to set*/
-       OPJ_UINT32 l_bound;
-
-       opj_pi_iterator_t * l_current_pi = 00;
-       /* preconditions in debug*/
-       assert(p_tcp != 00);
-       assert(p_pi != 00);
-
-       /* initializations*/
-       l_bound = p_tcp->numpocs+1;
-       l_current_pi = p_pi;
-
-       for (pino = 0;pino<l_bound;++pino) {
-               l_current_pi->poc.prg = p_tcp->prg;
-               l_current_pi->first = 1;
-               l_current_pi->poc.resno0 = 0;
-               l_current_pi->poc.compno0 = 0;
-               l_current_pi->poc.layno0 = 0;
-               l_current_pi->poc.precno0 = 0;
-               l_current_pi->poc.resno1 = p_max_res;
-               l_current_pi->poc.compno1 = l_current_pi->numcomps;
-               l_current_pi->poc.layno1 = p_tcp->numlayers;
-               l_current_pi->poc.precno1 = p_max_precision;
-               ++l_current_pi;
-       }
+    /* loop*/
+    OPJ_UINT32 pino;
+
+    /* encoding prameters to set*/
+    OPJ_UINT32 l_bound;
+
+    opj_pi_iterator_t * l_current_pi = 00;
+    /* preconditions in debug*/
+    assert(p_tcp != 00);
+    assert(p_pi != 00);
+
+    /* initializations*/
+    l_bound = p_tcp->numpocs + 1;
+    l_current_pi = p_pi;
+
+    for (pino = 0; pino < l_bound; ++pino) {
+        l_current_pi->poc.prg = p_tcp->prg;
+        l_current_pi->first = 1;
+        l_current_pi->poc.resno0 = 0;
+        l_current_pi->poc.compno0 = 0;
+        l_current_pi->poc.layno0 = 0;
+        l_current_pi->poc.precno0 = 0;
+        l_current_pi->poc.resno1 = p_max_res;
+        l_current_pi->poc.compno1 = l_current_pi->numcomps;
+        l_current_pi->poc.layno1 = p_tcp->numlayers;
+        l_current_pi->poc.precno1 = p_max_precision;
+        ++l_current_pi;
+    }
 }
 
 
 
-static OPJ_BOOL opj_pi_check_next_level(       OPJ_INT32 pos,
-                                                               opj_cp_t *cp,
-                                                               OPJ_UINT32 tileno,
-                                                               OPJ_UINT32 pino,
-                                                               const OPJ_CHAR *prog)
+static OPJ_BOOL opj_pi_check_next_level(OPJ_INT32 pos,
+                                        opj_cp_t *cp,
+                                        OPJ_UINT32 tileno,
+                                        OPJ_UINT32 pino,
+                                        const OPJ_CHAR *prog)
 {
-       OPJ_INT32 i;
-       opj_tcp_t *tcps =&cp->tcps[tileno];
-       opj_poc_t *tcp = &tcps->pocs[pino];
-
-       if(pos>=0){
-               for(i=pos;pos>=0;i--){
-                       switch(prog[i]){
-                   case 'R':
-                           if(tcp->res_t==tcp->resE){
-                                   if(opj_pi_check_next_level(pos-1,cp,tileno,pino,prog)){
-                                           return OPJ_TRUE;
-                                   }else{
-                                           return OPJ_FALSE;
-                                   }
-                           }else{
-                                   return OPJ_TRUE;
-                           }
-                           break;
-                   case 'C':
-                           if(tcp->comp_t==tcp->compE){
-                                   if(opj_pi_check_next_level(pos-1,cp,tileno,pino,prog)){
-                                           return OPJ_TRUE;
-                                   }else{
-                                           return OPJ_FALSE;
-                                   }
-                           }else{
-                                   return OPJ_TRUE;
-                           }
-                           break;
-                   case 'L':
-                           if(tcp->lay_t==tcp->layE){
-                                   if(opj_pi_check_next_level(pos-1,cp,tileno,pino,prog)){
-                                           return OPJ_TRUE;
-                                   }else{
-                                           return OPJ_FALSE;
-                                   }
-                           }else{
-                                   return OPJ_TRUE;
-                           }
-                           break;
-                   case 'P':
-                           switch(tcp->prg){
-                    case OPJ_LRCP: /* fall through */
-                    case OPJ_RLCP:
-                                           if(tcp->prc_t == tcp->prcE){
-                                                   if(opj_pi_check_next_level(i-1,cp,tileno,pino,prog)){
-                                                           return OPJ_TRUE;
-                                                   }else{
-                                                           return OPJ_FALSE;
-                                                   }
-                                           }else{
-                                                   return OPJ_TRUE;
-                                           }
-                                           break;
-                           default:
-                                   if(tcp->tx0_t == tcp->txE){
-                                           /*TY*/
-                                           if(tcp->ty0_t == tcp->tyE){
-                                                   if(opj_pi_check_next_level(i-1,cp,tileno,pino,prog)){
-                                                           return OPJ_TRUE;
-                                                   }else{
-                                                           return OPJ_FALSE;
-                                                   }
-                                           }else{
-                                                   return OPJ_TRUE;
-                                           }/*TY*/
-                                   }else{
-                                           return OPJ_TRUE;
-                                   }
-                                   break;
-                           }/*end case P*/
-                   }/*end switch*/
-               }/*end for*/
-       }/*end if*/
-       return OPJ_FALSE;
+    OPJ_INT32 i;
+    opj_tcp_t *tcps = &cp->tcps[tileno];
+    opj_poc_t *tcp = &tcps->pocs[pino];
+
+    if (pos >= 0) {
+        for (i = pos; pos >= 0; i--) {
+            switch (prog[i]) {
+            case 'R':
+                if (tcp->res_t == tcp->resE) {
+                    if (opj_pi_check_next_level(pos - 1, cp, tileno, pino, prog)) {
+                        return OPJ_TRUE;
+                    } else {
+                        return OPJ_FALSE;
+                    }
+                } else {
+                    return OPJ_TRUE;
+                }
+                break;
+            case 'C':
+                if (tcp->comp_t == tcp->compE) {
+                    if (opj_pi_check_next_level(pos - 1, cp, tileno, pino, prog)) {
+                        return OPJ_TRUE;
+                    } else {
+                        return OPJ_FALSE;
+                    }
+                } else {
+                    return OPJ_TRUE;
+                }
+                break;
+            case 'L':
+                if (tcp->lay_t == tcp->layE) {
+                    if (opj_pi_check_next_level(pos - 1, cp, tileno, pino, prog)) {
+                        return OPJ_TRUE;
+                    } else {
+                        return OPJ_FALSE;
+                    }
+                } else {
+                    return OPJ_TRUE;
+                }
+                break;
+            case 'P':
+                switch (tcp->prg) {
+                case OPJ_LRCP: /* fall through */
+                case OPJ_RLCP:
+                    if (tcp->prc_t == tcp->prcE) {
+                        if (opj_pi_check_next_level(i - 1, cp, tileno, pino, prog)) {
+                            return OPJ_TRUE;
+                        } else {
+                            return OPJ_FALSE;
+                        }
+                    } else {
+                        return OPJ_TRUE;
+                    }
+                    break;
+                default:
+                    if (tcp->tx0_t == tcp->txE) {
+                        /*TY*/
+                        if (tcp->ty0_t == tcp->tyE) {
+                            if (opj_pi_check_next_level(i - 1, cp, tileno, pino, prog)) {
+                                return OPJ_TRUE;
+                            } else {
+                                return OPJ_FALSE;
+                            }
+                        } else {
+                            return OPJ_TRUE;
+                        }/*TY*/
+                    } else {
+                        return OPJ_TRUE;
+                    }
+                    break;
+                }/*end case P*/
+            }/*end switch*/
+        }/*end for*/
+    }/*end if*/
+    return OPJ_FALSE;
 }
 
 
@@ -1153,732 +1214,731 @@ static OPJ_BOOL opj_pi_check_next_level(      OPJ_INT32 pos,
 ==========================================================
 */
 opj_pi_iterator_t *opj_pi_create_decode(opj_image_t *p_image,
-                                                                               opj_cp_t *p_cp,
-                                                                               OPJ_UINT32 p_tile_no)
+                                        opj_cp_t *p_cp,
+                                        OPJ_UINT32 p_tile_no)
 {
-       /* loop */
-       OPJ_UINT32 pino;
-       OPJ_UINT32 compno, resno;
-
-       /* to store w, h, dx and dy fro all components and resolutions */
-       OPJ_UINT32 * l_tmp_data;
-       OPJ_UINT32 ** l_tmp_ptr;
-
-       /* encoding prameters to set */
-       OPJ_UINT32 l_max_res;
-       OPJ_UINT32 l_max_prec;
-       OPJ_INT32 l_tx0,l_tx1,l_ty0,l_ty1;
-       OPJ_UINT32 l_dx_min,l_dy_min;
-       OPJ_UINT32 l_bound;
-       OPJ_UINT32 l_step_p , l_step_c , l_step_r , l_step_l ;
-       OPJ_UINT32 l_data_stride;
-
-       /* pointers */
-       opj_pi_iterator_t *l_pi = 00;
-       opj_tcp_t *l_tcp = 00;
-       const opj_tccp_t *l_tccp = 00;
-       opj_pi_comp_t *l_current_comp = 00;
-       opj_image_comp_t * l_img_comp = 00;
-       opj_pi_iterator_t * l_current_pi = 00;
-       OPJ_UINT32 * l_encoding_value_ptr = 00;
-
-       /* preconditions in debug */
-       assert(p_cp != 00);
-       assert(p_image != 00);
-       assert(p_tile_no < p_cp->tw * p_cp->th);
-
-       /* initializations */
-       l_tcp = &p_cp->tcps[p_tile_no];
-       l_bound = l_tcp->numpocs+1;
-
-       l_data_stride = 4 * OPJ_J2K_MAXRLVLS;
-       l_tmp_data = (OPJ_UINT32*)opj_malloc(
-               l_data_stride * p_image->numcomps * sizeof(OPJ_UINT32));
-       if
-               (! l_tmp_data)
-       {
-               return 00;
-       }
-       l_tmp_ptr = (OPJ_UINT32**)opj_malloc(
-               p_image->numcomps * sizeof(OPJ_UINT32 *));
-       if
-               (! l_tmp_ptr)
-       {
-               opj_free(l_tmp_data);
-               return 00;
-       }
-
-       /* memory allocation for pi */
-       l_pi = opj_pi_create(p_image, p_cp, p_tile_no);
-       if (!l_pi) {
-               opj_free(l_tmp_data);
-               opj_free(l_tmp_ptr);
-               return 00;
-       }
-
-       l_encoding_value_ptr = l_tmp_data;
-       /* update pointer array */
-       for
-               (compno = 0; compno < p_image->numcomps; ++compno)
-       {
-               l_tmp_ptr[compno] = l_encoding_value_ptr;
-               l_encoding_value_ptr += l_data_stride;
-       }
-       /* get encoding parameters */
-       opj_get_all_encoding_parameters(p_image,p_cp,p_tile_no,&l_tx0,&l_tx1,&l_ty0,&l_ty1,&l_dx_min,&l_dy_min,&l_max_prec,&l_max_res,l_tmp_ptr);
-
-       /* step calculations */
-       l_step_p = 1;
-       l_step_c = l_max_prec * l_step_p;
-       l_step_r = p_image->numcomps * l_step_c;
-       l_step_l = l_max_res * l_step_r;
-
-       /* set values for first packet iterator */
-       l_current_pi = l_pi;
-
-       /* memory allocation for include */
-       /* prevent an integer overflow issue */
-       /* 0 < l_tcp->numlayers < 65536 c.f. opj_j2k_read_cod in j2k.c */
-       l_current_pi->include = 00;
-       if (l_step_l <= (SIZE_MAX / (l_tcp->numlayers + 1U)))
-       {
-               l_current_pi->include = (OPJ_INT16*) opj_calloc((size_t)(l_tcp->numlayers + 1U) * l_step_l, sizeof(OPJ_INT16));
-       }
-
-       if (!l_current_pi->include)
-       {
-               opj_free(l_tmp_data);
-               opj_free(l_tmp_ptr);
-               opj_pi_destroy(l_pi, l_bound);
-               return 00;
-       }
-
-       /* special treatment for the first packet iterator */
-       l_current_comp = l_current_pi->comps;
-       l_img_comp = p_image->comps;
-       l_tccp = l_tcp->tccps;
-
-       l_current_pi->tx0 = l_tx0;
-       l_current_pi->ty0 = l_ty0;
-       l_current_pi->tx1 = l_tx1;
-       l_current_pi->ty1 = l_ty1;
-
-       /*l_current_pi->dx = l_img_comp->dx;*/
-       /*l_current_pi->dy = l_img_comp->dy;*/
-
-       l_current_pi->step_p = l_step_p;
-       l_current_pi->step_c = l_step_c;
-       l_current_pi->step_r = l_step_r;
-       l_current_pi->step_l = l_step_l;
-
-       /* allocation for components and number of components has already been calculated by opj_pi_create */
-       for
-               (compno = 0; compno < l_current_pi->numcomps; ++compno)
-       {
-               opj_pi_resolution_t *l_res = l_current_comp->resolutions;
-               l_encoding_value_ptr = l_tmp_ptr[compno];
-
-               l_current_comp->dx = l_img_comp->dx;
-               l_current_comp->dy = l_img_comp->dy;
-               /* resolutions have already been initialized */
-               for
-                       (resno = 0; resno < l_current_comp->numresolutions; resno++)
-               {
-                       l_res->pdx = *(l_encoding_value_ptr++);
-                       l_res->pdy = *(l_encoding_value_ptr++);
-                       l_res->pw =  *(l_encoding_value_ptr++);
-                       l_res->ph =  *(l_encoding_value_ptr++);
-                       ++l_res;
-               }
-               ++l_current_comp;
-               ++l_img_comp;
-               ++l_tccp;
-       }
-       ++l_current_pi;
-
-       for (pino = 1 ; pino<l_bound ; ++pino )
-       {
-               l_current_comp = l_current_pi->comps;
-               l_img_comp = p_image->comps;
-               l_tccp = l_tcp->tccps;
-
-               l_current_pi->tx0 = l_tx0;
-               l_current_pi->ty0 = l_ty0;
-               l_current_pi->tx1 = l_tx1;
-               l_current_pi->ty1 = l_ty1;
-               /*l_current_pi->dx = l_dx_min;*/
-               /*l_current_pi->dy = l_dy_min;*/
-               l_current_pi->step_p = l_step_p;
-               l_current_pi->step_c = l_step_c;
-               l_current_pi->step_r = l_step_r;
-               l_current_pi->step_l = l_step_l;
-
-               /* allocation for components and number of components has already been calculated by opj_pi_create */
-               for
-                       (compno = 0; compno < l_current_pi->numcomps; ++compno)
-               {
-                       opj_pi_resolution_t *l_res = l_current_comp->resolutions;
-                       l_encoding_value_ptr = l_tmp_ptr[compno];
-
-                       l_current_comp->dx = l_img_comp->dx;
-                       l_current_comp->dy = l_img_comp->dy;
-                       /* resolutions have already been initialized */
-                       for
-                               (resno = 0; resno < l_current_comp->numresolutions; resno++)
-                       {
-                               l_res->pdx = *(l_encoding_value_ptr++);
-                               l_res->pdy = *(l_encoding_value_ptr++);
-                               l_res->pw =  *(l_encoding_value_ptr++);
-                               l_res->ph =  *(l_encoding_value_ptr++);
-                               ++l_res;
-                       }
-                       ++l_current_comp;
-                       ++l_img_comp;
-                       ++l_tccp;
-               }
-               /* special treatment*/
-               l_current_pi->include = (l_current_pi-1)->include;
-               ++l_current_pi;
-       }
-       opj_free(l_tmp_data);
-       l_tmp_data = 00;
-       opj_free(l_tmp_ptr);
-       l_tmp_ptr = 00;
-       if
-               (l_tcp->POC)
-       {
-               opj_pi_update_decode_poc (l_pi,l_tcp,l_max_prec,l_max_res);
-       }
-       else
-       {
-               opj_pi_update_decode_not_poc(l_pi,l_tcp,l_max_prec,l_max_res);
-       }
-       return l_pi;
+    /* loop */
+    OPJ_UINT32 pino;
+    OPJ_UINT32 compno, resno;
+
+    /* to store w, h, dx and dy fro all components and resolutions */
+    OPJ_UINT32 * l_tmp_data;
+    OPJ_UINT32 ** l_tmp_ptr;
+
+    /* encoding prameters to set */
+    OPJ_UINT32 l_max_res;
+    OPJ_UINT32 l_max_prec;
+    OPJ_INT32 l_tx0, l_tx1, l_ty0, l_ty1;
+    OPJ_UINT32 l_dx_min, l_dy_min;
+    OPJ_UINT32 l_bound;
+    OPJ_UINT32 l_step_p, l_step_c, l_step_r, l_step_l ;
+    OPJ_UINT32 l_data_stride;
+
+    /* pointers */
+    opj_pi_iterator_t *l_pi = 00;
+    opj_tcp_t *l_tcp = 00;
+    const opj_tccp_t *l_tccp = 00;
+    opj_pi_comp_t *l_current_comp = 00;
+    opj_image_comp_t * l_img_comp = 00;
+    opj_pi_iterator_t * l_current_pi = 00;
+    OPJ_UINT32 * l_encoding_value_ptr = 00;
+
+    /* preconditions in debug */
+    assert(p_cp != 00);
+    assert(p_image != 00);
+    assert(p_tile_no < p_cp->tw * p_cp->th);
+
+    /* initializations */
+    l_tcp = &p_cp->tcps[p_tile_no];
+    l_bound = l_tcp->numpocs + 1;
+
+    l_data_stride = 4 * OPJ_J2K_MAXRLVLS;
+    l_tmp_data = (OPJ_UINT32*)opj_malloc(
+                     l_data_stride * p_image->numcomps * sizeof(OPJ_UINT32));
+    if
+    (! l_tmp_data) {
+        return 00;
+    }
+    l_tmp_ptr = (OPJ_UINT32**)opj_malloc(
+                    p_image->numcomps * sizeof(OPJ_UINT32 *));
+    if
+    (! l_tmp_ptr) {
+        opj_free(l_tmp_data);
+        return 00;
+    }
+
+    /* memory allocation for pi */
+    l_pi = opj_pi_create(p_image, p_cp, p_tile_no);
+    if (!l_pi) {
+        opj_free(l_tmp_data);
+        opj_free(l_tmp_ptr);
+        return 00;
+    }
+
+    l_encoding_value_ptr = l_tmp_data;
+    /* update pointer array */
+    for
+    (compno = 0; compno < p_image->numcomps; ++compno) {
+        l_tmp_ptr[compno] = l_encoding_value_ptr;
+        l_encoding_value_ptr += l_data_stride;
+    }
+    /* get encoding parameters */
+    opj_get_all_encoding_parameters(p_image, p_cp, p_tile_no, &l_tx0, &l_tx1,
+                                    &l_ty0, &l_ty1, &l_dx_min, &l_dy_min, &l_max_prec, &l_max_res, l_tmp_ptr);
+
+    /* step calculations */
+    l_step_p = 1;
+    l_step_c = l_max_prec * l_step_p;
+    l_step_r = p_image->numcomps * l_step_c;
+    l_step_l = l_max_res * l_step_r;
+
+    /* set values for first packet iterator */
+    l_current_pi = l_pi;
+
+    /* memory allocation for include */
+    /* prevent an integer overflow issue */
+    /* 0 < l_tcp->numlayers < 65536 c.f. opj_j2k_read_cod in j2k.c */
+    l_current_pi->include = 00;
+    if (l_step_l <= (SIZE_MAX / (l_tcp->numlayers + 1U))) {
+        l_current_pi->include = (OPJ_INT16*) opj_calloc((size_t)(
+                                    l_tcp->numlayers + 1U) * l_step_l, sizeof(OPJ_INT16));
+    }
+
+    if (!l_current_pi->include) {
+        opj_free(l_tmp_data);
+        opj_free(l_tmp_ptr);
+        opj_pi_destroy(l_pi, l_bound);
+        return 00;
+    }
+
+    /* special treatment for the first packet iterator */
+    l_current_comp = l_current_pi->comps;
+    l_img_comp = p_image->comps;
+    l_tccp = l_tcp->tccps;
+
+    l_current_pi->tx0 = l_tx0;
+    l_current_pi->ty0 = l_ty0;
+    l_current_pi->tx1 = l_tx1;
+    l_current_pi->ty1 = l_ty1;
+
+    /*l_current_pi->dx = l_img_comp->dx;*/
+    /*l_current_pi->dy = l_img_comp->dy;*/
+
+    l_current_pi->step_p = l_step_p;
+    l_current_pi->step_c = l_step_c;
+    l_current_pi->step_r = l_step_r;
+    l_current_pi->step_l = l_step_l;
+
+    /* allocation for components and number of components has already been calculated by opj_pi_create */
+    for
+    (compno = 0; compno < l_current_pi->numcomps; ++compno) {
+        opj_pi_resolution_t *l_res = l_current_comp->resolutions;
+        l_encoding_value_ptr = l_tmp_ptr[compno];
+
+        l_current_comp->dx = l_img_comp->dx;
+        l_current_comp->dy = l_img_comp->dy;
+        /* resolutions have already been initialized */
+        for
+        (resno = 0; resno < l_current_comp->numresolutions; resno++) {
+            l_res->pdx = *(l_encoding_value_ptr++);
+            l_res->pdy = *(l_encoding_value_ptr++);
+            l_res->pw =  *(l_encoding_value_ptr++);
+            l_res->ph =  *(l_encoding_value_ptr++);
+            ++l_res;
+        }
+        ++l_current_comp;
+        ++l_img_comp;
+        ++l_tccp;
+    }
+    ++l_current_pi;
+
+    for (pino = 1 ; pino < l_bound ; ++pino) {
+        l_current_comp = l_current_pi->comps;
+        l_img_comp = p_image->comps;
+        l_tccp = l_tcp->tccps;
+
+        l_current_pi->tx0 = l_tx0;
+        l_current_pi->ty0 = l_ty0;
+        l_current_pi->tx1 = l_tx1;
+        l_current_pi->ty1 = l_ty1;
+        /*l_current_pi->dx = l_dx_min;*/
+        /*l_current_pi->dy = l_dy_min;*/
+        l_current_pi->step_p = l_step_p;
+        l_current_pi->step_c = l_step_c;
+        l_current_pi->step_r = l_step_r;
+        l_current_pi->step_l = l_step_l;
+
+        /* allocation for components and number of components has already been calculated by opj_pi_create */
+        for
+        (compno = 0; compno < l_current_pi->numcomps; ++compno) {
+            opj_pi_resolution_t *l_res = l_current_comp->resolutions;
+            l_encoding_value_ptr = l_tmp_ptr[compno];
+
+            l_current_comp->dx = l_img_comp->dx;
+            l_current_comp->dy = l_img_comp->dy;
+            /* resolutions have already been initialized */
+            for
+            (resno = 0; resno < l_current_comp->numresolutions; resno++) {
+                l_res->pdx = *(l_encoding_value_ptr++);
+                l_res->pdy = *(l_encoding_value_ptr++);
+                l_res->pw =  *(l_encoding_value_ptr++);
+                l_res->ph =  *(l_encoding_value_ptr++);
+                ++l_res;
+            }
+            ++l_current_comp;
+            ++l_img_comp;
+            ++l_tccp;
+        }
+        /* special treatment*/
+        l_current_pi->include = (l_current_pi - 1)->include;
+        ++l_current_pi;
+    }
+    opj_free(l_tmp_data);
+    l_tmp_data = 00;
+    opj_free(l_tmp_ptr);
+    l_tmp_ptr = 00;
+    if
+    (l_tcp->POC) {
+        opj_pi_update_decode_poc(l_pi, l_tcp, l_max_prec, l_max_res);
+    } else {
+        opj_pi_update_decode_not_poc(l_pi, l_tcp, l_max_prec, l_max_res);
+    }
+    return l_pi;
 }
 
 
 
 opj_pi_iterator_t *opj_pi_initialise_encode(const opj_image_t *p_image,
-                                            opj_cp_t *p_cp,
-                                            OPJ_UINT32 p_tile_no,
-                                            J2K_T2_MODE p_t2_mode )
+        opj_cp_t *p_cp,
+        OPJ_UINT32 p_tile_no,
+        J2K_T2_MODE p_t2_mode)
 {
-       /* loop*/
-       OPJ_UINT32 pino;
-       OPJ_UINT32 compno, resno;
-
-       /* to store w, h, dx and dy fro all components and resolutions*/
-       OPJ_UINT32 * l_tmp_data;
-       OPJ_UINT32 ** l_tmp_ptr;
-
-       /* encoding prameters to set*/
-       OPJ_UINT32 l_max_res;
-       OPJ_UINT32 l_max_prec;
-       OPJ_INT32 l_tx0,l_tx1,l_ty0,l_ty1;
-       OPJ_UINT32 l_dx_min,l_dy_min;
-       OPJ_UINT32 l_bound;
-       OPJ_UINT32 l_step_p , l_step_c , l_step_r , l_step_l ;
-       OPJ_UINT32 l_data_stride;
-
-       /* pointers*/
-       opj_pi_iterator_t *l_pi = 00;
-       opj_tcp_t *l_tcp = 00;
-       const opj_tccp_t *l_tccp = 00;
-       opj_pi_comp_t *l_current_comp = 00;
-       opj_image_comp_t * l_img_comp = 00;
-       opj_pi_iterator_t * l_current_pi = 00;
-       OPJ_UINT32 * l_encoding_value_ptr = 00;
-
-       /* preconditions in debug*/
-       assert(p_cp != 00);
-       assert(p_image != 00);
-       assert(p_tile_no < p_cp->tw * p_cp->th);
-
-       /* initializations*/
-       l_tcp = &p_cp->tcps[p_tile_no];
-       l_bound = l_tcp->numpocs+1;
-
-       l_data_stride = 4 * OPJ_J2K_MAXRLVLS;
-       l_tmp_data = (OPJ_UINT32*)opj_malloc(
-               l_data_stride * p_image->numcomps * sizeof(OPJ_UINT32));
-       if (! l_tmp_data) {
-               return 00;
-       }
-
-       l_tmp_ptr = (OPJ_UINT32**)opj_malloc(
-               p_image->numcomps * sizeof(OPJ_UINT32 *));
-       if (! l_tmp_ptr) {
-               opj_free(l_tmp_data);
-               return 00;
-       }
-
-       /* memory allocation for pi*/
-       l_pi = opj_pi_create(p_image,p_cp,p_tile_no);
-       if (!l_pi) {
-               opj_free(l_tmp_data);
-               opj_free(l_tmp_ptr);
-               return 00;
-       }
-
-       l_encoding_value_ptr = l_tmp_data;
-       /* update pointer array*/
-       for (compno = 0; compno < p_image->numcomps; ++compno) {
-               l_tmp_ptr[compno] = l_encoding_value_ptr;
-               l_encoding_value_ptr += l_data_stride;
-       }
-
-       /* get encoding parameters*/
-       opj_get_all_encoding_parameters(p_image,p_cp,p_tile_no,&l_tx0,&l_tx1,&l_ty0,&l_ty1,&l_dx_min,&l_dy_min,&l_max_prec,&l_max_res,l_tmp_ptr);
-
-       /* step calculations*/
-       l_step_p = 1;
-       l_step_c = l_max_prec * l_step_p;
-       l_step_r = p_image->numcomps * l_step_c;
-       l_step_l = l_max_res * l_step_r;
-
-       /* set values for first packet iterator*/
-       l_pi->tp_on = (OPJ_BYTE)p_cp->m_specific_param.m_enc.m_tp_on;
-       l_current_pi = l_pi;
-
-       /* memory allocation for include*/
-       l_current_pi->include = (OPJ_INT16*) opj_calloc(l_tcp->numlayers * l_step_l, sizeof(OPJ_INT16));
-       if (!l_current_pi->include) {
-               opj_free(l_tmp_data);
-               opj_free(l_tmp_ptr);
-               opj_pi_destroy(l_pi, l_bound);
-               return 00;
-       }
-
-       /* special treatment for the first packet iterator*/
-       l_current_comp = l_current_pi->comps;
-       l_img_comp = p_image->comps;
-       l_tccp = l_tcp->tccps;
-       l_current_pi->tx0 = l_tx0;
-       l_current_pi->ty0 = l_ty0;
-       l_current_pi->tx1 = l_tx1;
-       l_current_pi->ty1 = l_ty1;
-       l_current_pi->dx = l_dx_min;
-       l_current_pi->dy = l_dy_min;
-       l_current_pi->step_p = l_step_p;
-       l_current_pi->step_c = l_step_c;
-       l_current_pi->step_r = l_step_r;
-       l_current_pi->step_l = l_step_l;
-
-       /* allocation for components and number of components has already been calculated by opj_pi_create */
-       for (compno = 0; compno < l_current_pi->numcomps; ++compno) {
-               opj_pi_resolution_t *l_res = l_current_comp->resolutions;
-               l_encoding_value_ptr = l_tmp_ptr[compno];
-
-               l_current_comp->dx = l_img_comp->dx;
-               l_current_comp->dy = l_img_comp->dy;
-
-               /* resolutions have already been initialized */
-               for (resno = 0; resno < l_current_comp->numresolutions; resno++) {
-                       l_res->pdx = *(l_encoding_value_ptr++);
-                       l_res->pdy = *(l_encoding_value_ptr++);
-                       l_res->pw =  *(l_encoding_value_ptr++);
-                       l_res->ph =  *(l_encoding_value_ptr++);
-                       ++l_res;
-               }
-
-               ++l_current_comp;
-               ++l_img_comp;
-               ++l_tccp;
-       }
-       ++l_current_pi;
-
-       for (pino = 1 ; pino<l_bound ; ++pino ) {
-               l_current_comp = l_current_pi->comps;
-               l_img_comp = p_image->comps;
-               l_tccp = l_tcp->tccps;
-
-               l_current_pi->tx0 = l_tx0;
-               l_current_pi->ty0 = l_ty0;
-               l_current_pi->tx1 = l_tx1;
-               l_current_pi->ty1 = l_ty1;
-               l_current_pi->dx = l_dx_min;
-               l_current_pi->dy = l_dy_min;
-               l_current_pi->step_p = l_step_p;
-               l_current_pi->step_c = l_step_c;
-               l_current_pi->step_r = l_step_r;
-               l_current_pi->step_l = l_step_l;
-
-               /* allocation for components and number of components has already been calculated by opj_pi_create */
-               for (compno = 0; compno < l_current_pi->numcomps; ++compno) {
-                       opj_pi_resolution_t *l_res = l_current_comp->resolutions;
-                       l_encoding_value_ptr = l_tmp_ptr[compno];
-
-                       l_current_comp->dx = l_img_comp->dx;
-                       l_current_comp->dy = l_img_comp->dy;
-                       /* resolutions have already been initialized */
-                       for (resno = 0; resno < l_current_comp->numresolutions; resno++) {
-                               l_res->pdx = *(l_encoding_value_ptr++);
-                               l_res->pdy = *(l_encoding_value_ptr++);
-                               l_res->pw =  *(l_encoding_value_ptr++);
-                               l_res->ph =  *(l_encoding_value_ptr++);
-                               ++l_res;
-                       }
-                       ++l_current_comp;
-                       ++l_img_comp;
-                       ++l_tccp;
-               }
-
-               /* special treatment*/
-               l_current_pi->include = (l_current_pi-1)->include;
-               ++l_current_pi;
-       }
-
-       opj_free(l_tmp_data);
-       l_tmp_data = 00;
-       opj_free(l_tmp_ptr);
-       l_tmp_ptr = 00;
+    /* loop*/
+    OPJ_UINT32 pino;
+    OPJ_UINT32 compno, resno;
+
+    /* to store w, h, dx and dy fro all components and resolutions*/
+    OPJ_UINT32 * l_tmp_data;
+    OPJ_UINT32 ** l_tmp_ptr;
+
+    /* encoding prameters to set*/
+    OPJ_UINT32 l_max_res;
+    OPJ_UINT32 l_max_prec;
+    OPJ_INT32 l_tx0, l_tx1, l_ty0, l_ty1;
+    OPJ_UINT32 l_dx_min, l_dy_min;
+    OPJ_UINT32 l_bound;
+    OPJ_UINT32 l_step_p, l_step_c, l_step_r, l_step_l ;
+    OPJ_UINT32 l_data_stride;
+
+    /* pointers*/
+    opj_pi_iterator_t *l_pi = 00;
+    opj_tcp_t *l_tcp = 00;
+    const opj_tccp_t *l_tccp = 00;
+    opj_pi_comp_t *l_current_comp = 00;
+    opj_image_comp_t * l_img_comp = 00;
+    opj_pi_iterator_t * l_current_pi = 00;
+    OPJ_UINT32 * l_encoding_value_ptr = 00;
+
+    /* preconditions in debug*/
+    assert(p_cp != 00);
+    assert(p_image != 00);
+    assert(p_tile_no < p_cp->tw * p_cp->th);
+
+    /* initializations*/
+    l_tcp = &p_cp->tcps[p_tile_no];
+    l_bound = l_tcp->numpocs + 1;
+
+    l_data_stride = 4 * OPJ_J2K_MAXRLVLS;
+    l_tmp_data = (OPJ_UINT32*)opj_malloc(
+                     l_data_stride * p_image->numcomps * sizeof(OPJ_UINT32));
+    if (! l_tmp_data) {
+        return 00;
+    }
+
+    l_tmp_ptr = (OPJ_UINT32**)opj_malloc(
+                    p_image->numcomps * sizeof(OPJ_UINT32 *));
+    if (! l_tmp_ptr) {
+        opj_free(l_tmp_data);
+        return 00;
+    }
+
+    /* memory allocation for pi*/
+    l_pi = opj_pi_create(p_image, p_cp, p_tile_no);
+    if (!l_pi) {
+        opj_free(l_tmp_data);
+        opj_free(l_tmp_ptr);
+        return 00;
+    }
+
+    l_encoding_value_ptr = l_tmp_data;
+    /* update pointer array*/
+    for (compno = 0; compno < p_image->numcomps; ++compno) {
+        l_tmp_ptr[compno] = l_encoding_value_ptr;
+        l_encoding_value_ptr += l_data_stride;
+    }
+
+    /* get encoding parameters*/
+    opj_get_all_encoding_parameters(p_image, p_cp, p_tile_no, &l_tx0, &l_tx1,
+                                    &l_ty0, &l_ty1, &l_dx_min, &l_dy_min, &l_max_prec, &l_max_res, l_tmp_ptr);
+
+    /* step calculations*/
+    l_step_p = 1;
+    l_step_c = l_max_prec * l_step_p;
+    l_step_r = p_image->numcomps * l_step_c;
+    l_step_l = l_max_res * l_step_r;
+
+    /* set values for first packet iterator*/
+    l_pi->tp_on = (OPJ_BYTE)p_cp->m_specific_param.m_enc.m_tp_on;
+    l_current_pi = l_pi;
+
+    /* memory allocation for include*/
+    l_current_pi->include = (OPJ_INT16*) opj_calloc(l_tcp->numlayers * l_step_l,
+                            sizeof(OPJ_INT16));
+    if (!l_current_pi->include) {
+        opj_free(l_tmp_data);
+        opj_free(l_tmp_ptr);
+        opj_pi_destroy(l_pi, l_bound);
+        return 00;
+    }
+
+    /* special treatment for the first packet iterator*/
+    l_current_comp = l_current_pi->comps;
+    l_img_comp = p_image->comps;
+    l_tccp = l_tcp->tccps;
+    l_current_pi->tx0 = l_tx0;
+    l_current_pi->ty0 = l_ty0;
+    l_current_pi->tx1 = l_tx1;
+    l_current_pi->ty1 = l_ty1;
+    l_current_pi->dx = l_dx_min;
+    l_current_pi->dy = l_dy_min;
+    l_current_pi->step_p = l_step_p;
+    l_current_pi->step_c = l_step_c;
+    l_current_pi->step_r = l_step_r;
+    l_current_pi->step_l = l_step_l;
+
+    /* allocation for components and number of components has already been calculated by opj_pi_create */
+    for (compno = 0; compno < l_current_pi->numcomps; ++compno) {
+        opj_pi_resolution_t *l_res = l_current_comp->resolutions;
+        l_encoding_value_ptr = l_tmp_ptr[compno];
+
+        l_current_comp->dx = l_img_comp->dx;
+        l_current_comp->dy = l_img_comp->dy;
+
+        /* resolutions have already been initialized */
+        for (resno = 0; resno < l_current_comp->numresolutions; resno++) {
+            l_res->pdx = *(l_encoding_value_ptr++);
+            l_res->pdy = *(l_encoding_value_ptr++);
+            l_res->pw =  *(l_encoding_value_ptr++);
+            l_res->ph =  *(l_encoding_value_ptr++);
+            ++l_res;
+        }
+
+        ++l_current_comp;
+        ++l_img_comp;
+        ++l_tccp;
+    }
+    ++l_current_pi;
+
+    for (pino = 1 ; pino < l_bound ; ++pino) {
+        l_current_comp = l_current_pi->comps;
+        l_img_comp = p_image->comps;
+        l_tccp = l_tcp->tccps;
+
+        l_current_pi->tx0 = l_tx0;
+        l_current_pi->ty0 = l_ty0;
+        l_current_pi->tx1 = l_tx1;
+        l_current_pi->ty1 = l_ty1;
+        l_current_pi->dx = l_dx_min;
+        l_current_pi->dy = l_dy_min;
+        l_current_pi->step_p = l_step_p;
+        l_current_pi->step_c = l_step_c;
+        l_current_pi->step_r = l_step_r;
+        l_current_pi->step_l = l_step_l;
+
+        /* allocation for components and number of components has already been calculated by opj_pi_create */
+        for (compno = 0; compno < l_current_pi->numcomps; ++compno) {
+            opj_pi_resolution_t *l_res = l_current_comp->resolutions;
+            l_encoding_value_ptr = l_tmp_ptr[compno];
+
+            l_current_comp->dx = l_img_comp->dx;
+            l_current_comp->dy = l_img_comp->dy;
+            /* resolutions have already been initialized */
+            for (resno = 0; resno < l_current_comp->numresolutions; resno++) {
+                l_res->pdx = *(l_encoding_value_ptr++);
+                l_res->pdy = *(l_encoding_value_ptr++);
+                l_res->pw =  *(l_encoding_value_ptr++);
+                l_res->ph =  *(l_encoding_value_ptr++);
+                ++l_res;
+            }
+            ++l_current_comp;
+            ++l_img_comp;
+            ++l_tccp;
+        }
+
+        /* special treatment*/
+        l_current_pi->include = (l_current_pi - 1)->include;
+        ++l_current_pi;
+    }
+
+    opj_free(l_tmp_data);
+    l_tmp_data = 00;
+    opj_free(l_tmp_ptr);
+    l_tmp_ptr = 00;
 
     if (l_tcp->POC && (OPJ_IS_CINEMA(p_cp->rsiz) || p_t2_mode == FINAL_PASS)) {
-               opj_pi_update_encode_poc_and_final(p_cp,p_tile_no,l_tx0,l_tx1,l_ty0,l_ty1,l_max_prec,l_max_res,l_dx_min,l_dy_min);
-       }
-       else {
-               opj_pi_update_encode_not_poc(p_cp,p_image->numcomps,p_tile_no,l_tx0,l_tx1,l_ty0,l_ty1,l_max_prec,l_max_res,l_dx_min,l_dy_min);
-       }
-
-       return l_pi;
+        opj_pi_update_encode_poc_and_final(p_cp, p_tile_no, l_tx0, l_tx1, l_ty0, l_ty1,
+                                           l_max_prec, l_max_res, l_dx_min, l_dy_min);
+    } else {
+        opj_pi_update_encode_not_poc(p_cp, p_image->numcomps, p_tile_no, l_tx0, l_tx1,
+                                     l_ty0, l_ty1, l_max_prec, l_max_res, l_dx_min, l_dy_min);
+    }
+
+    return l_pi;
 }
 
-void opj_pi_create_encode(     opj_pi_iterator_t *pi,
-                                                       opj_cp_t *cp,
-                                                       OPJ_UINT32 tileno,
-                                                       OPJ_UINT32 pino,
-                                                       OPJ_UINT32 tpnum,
-                                                       OPJ_INT32 tppos,
-                                                       J2K_T2_MODE t2_mode)
+void opj_pi_create_encode(opj_pi_iterator_t *pi,
+                          opj_cp_t *cp,
+                          OPJ_UINT32 tileno,
+                          OPJ_UINT32 pino,
+                          OPJ_UINT32 tpnum,
+                          OPJ_INT32 tppos,
+                          J2K_T2_MODE t2_mode)
 {
-       const OPJ_CHAR *prog;
-       OPJ_INT32 i;
-       OPJ_UINT32 incr_top=1,resetX=0;
-       opj_tcp_t *tcps =&cp->tcps[tileno];
-       opj_poc_t *tcp= &tcps->pocs[pino];
-
-       prog = opj_j2k_convert_progression_order(tcp->prg);
-
-       pi[pino].first = 1;
-       pi[pino].poc.prg = tcp->prg;
-
-    if(!(cp->m_specific_param.m_enc.m_tp_on && ((!OPJ_IS_CINEMA(cp->rsiz) && (t2_mode == FINAL_PASS)) || OPJ_IS_CINEMA(cp->rsiz)))){
-               pi[pino].poc.resno0 = tcp->resS;
-               pi[pino].poc.resno1 = tcp->resE;
-               pi[pino].poc.compno0 = tcp->compS;
-               pi[pino].poc.compno1 = tcp->compE;
-               pi[pino].poc.layno0 = tcp->layS;
-               pi[pino].poc.layno1 = tcp->layE;
-               pi[pino].poc.precno0 = tcp->prcS;
-               pi[pino].poc.precno1 = tcp->prcE;
-               pi[pino].poc.tx0 = (OPJ_INT32)tcp->txS;
-               pi[pino].poc.ty0 = (OPJ_INT32)tcp->tyS;
-               pi[pino].poc.tx1 = (OPJ_INT32)tcp->txE;
-               pi[pino].poc.ty1 = (OPJ_INT32)tcp->tyE;
-       }else {
-               for(i=tppos+1;i<4;i++){
-                       switch(prog[i]){
-                       case 'R':
-                               pi[pino].poc.resno0 = tcp->resS;
-                               pi[pino].poc.resno1 = tcp->resE;
-                               break;
-                       case 'C':
-                               pi[pino].poc.compno0 = tcp->compS;
-                               pi[pino].poc.compno1 = tcp->compE;
-                               break;
-                       case 'L':
-                               pi[pino].poc.layno0 = tcp->layS;
-                               pi[pino].poc.layno1 = tcp->layE;
-                               break;
-                       case 'P':
-                               switch(tcp->prg){
-                               case OPJ_LRCP:
-                               case OPJ_RLCP:
-                                       pi[pino].poc.precno0 = tcp->prcS;
-                                       pi[pino].poc.precno1 = tcp->prcE;
-                                       break;
-                               default:
-                                       pi[pino].poc.tx0 = (OPJ_INT32)tcp->txS;
-                                       pi[pino].poc.ty0 = (OPJ_INT32)tcp->tyS;
-                                       pi[pino].poc.tx1 = (OPJ_INT32)tcp->txE;
-                                       pi[pino].poc.ty1 = (OPJ_INT32)tcp->tyE;
-                                       break;
-                               }
-                               break;
-                       }
-               }
-
-               if(tpnum==0){
-                       for(i=tppos;i>=0;i--){
-                               switch(prog[i]){
-                               case 'C':
-                                       tcp->comp_t = tcp->compS;
-                                       pi[pino].poc.compno0 = tcp->comp_t;
-                                       pi[pino].poc.compno1 = tcp->comp_t+1;
-                                       tcp->comp_t+=1;
-                                       break;
-                               case 'R':
-                                       tcp->res_t = tcp->resS;
-                                       pi[pino].poc.resno0 = tcp->res_t;
-                                       pi[pino].poc.resno1 = tcp->res_t+1;
-                                       tcp->res_t+=1;
-                                       break;
-                               case 'L':
-                                       tcp->lay_t = tcp->layS;
-                                       pi[pino].poc.layno0 = tcp->lay_t;
-                                       pi[pino].poc.layno1 = tcp->lay_t+1;
-                                       tcp->lay_t+=1;
-                                       break;
-                               case 'P':
-                                       switch(tcp->prg){
-                                       case OPJ_LRCP:
-                                       case OPJ_RLCP:
-                                               tcp->prc_t = tcp->prcS;
-                                               pi[pino].poc.precno0 = tcp->prc_t;
-                                               pi[pino].poc.precno1 = tcp->prc_t+1;
-                                               tcp->prc_t+=1;
-                                               break;
-                                       default:
-                                               tcp->tx0_t = tcp->txS;
-                                               tcp->ty0_t = tcp->tyS;
-                                               pi[pino].poc.tx0 = (OPJ_INT32)tcp->tx0_t;
-                                               pi[pino].poc.tx1 = (OPJ_INT32)(tcp->tx0_t + tcp->dx - (tcp->tx0_t % tcp->dx));
-                                               pi[pino].poc.ty0 = (OPJ_INT32)tcp->ty0_t;
-                                               pi[pino].poc.ty1 = (OPJ_INT32)(tcp->ty0_t + tcp->dy - (tcp->ty0_t % tcp->dy));
-                                               tcp->tx0_t = (OPJ_UINT32)pi[pino].poc.tx1;
-                                               tcp->ty0_t = (OPJ_UINT32)pi[pino].poc.ty1;
-                                               break;
-                                       }
-                                       break;
-                               }
-                       }
-                       incr_top=1;
-               }else{
-                       for(i=tppos;i>=0;i--){
-                               switch(prog[i]){
-                               case 'C':
-                                       pi[pino].poc.compno0 = tcp->comp_t-1;
-                                       pi[pino].poc.compno1 = tcp->comp_t;
-                                       break;
-                               case 'R':
-                                       pi[pino].poc.resno0 = tcp->res_t-1;
-                                       pi[pino].poc.resno1 = tcp->res_t;
-                                       break;
-                               case 'L':
-                                       pi[pino].poc.layno0 = tcp->lay_t-1;
-                                       pi[pino].poc.layno1 = tcp->lay_t;
-                                       break;
-                               case 'P':
-                                       switch(tcp->prg){
-                                       case OPJ_LRCP:
-                                       case OPJ_RLCP:
-                                               pi[pino].poc.precno0 = tcp->prc_t-1;
-                                               pi[pino].poc.precno1 = tcp->prc_t;
-                                               break;
-                                       default:
-                                               pi[pino].poc.tx0 = (OPJ_INT32)(tcp->tx0_t - tcp->dx - (tcp->tx0_t % tcp->dx));
-                                               pi[pino].poc.tx1 = (OPJ_INT32)tcp->tx0_t ;
-                                               pi[pino].poc.ty0 = (OPJ_INT32)(tcp->ty0_t - tcp->dy - (tcp->ty0_t % tcp->dy));
-                                               pi[pino].poc.ty1 = (OPJ_INT32)tcp->ty0_t ;
-                                               break;
-                                       }
-                                       break;
-                               }
-                               if(incr_top==1){
-                                       switch(prog[i]){
-                                       case 'R':
-                                               if(tcp->res_t==tcp->resE){
-                                                       if(opj_pi_check_next_level(i-1,cp,tileno,pino,prog)){
-                                                               tcp->res_t = tcp->resS;
-                                                               pi[pino].poc.resno0 = tcp->res_t;
-                                                               pi[pino].poc.resno1 = tcp->res_t+1;
-                                                               tcp->res_t+=1;
-                                                               incr_top=1;
-                                                       }else{
-                                                               incr_top=0;
-                                                       }
-                                               }else{
-                                                       pi[pino].poc.resno0 = tcp->res_t;
-                                                       pi[pino].poc.resno1 = tcp->res_t+1;
-                                                       tcp->res_t+=1;
-                                                       incr_top=0;
-                                               }
-                                               break;
-                                       case 'C':
-                                               if(tcp->comp_t ==tcp->compE){
-                                                       if(opj_pi_check_next_level(i-1,cp,tileno,pino,prog)){
-                                                               tcp->comp_t = tcp->compS;
-                                                               pi[pino].poc.compno0 = tcp->comp_t;
-                                                               pi[pino].poc.compno1 = tcp->comp_t+1;
-                                                               tcp->comp_t+=1;
-                                                               incr_top=1;
-                                                       }else{
-                                                               incr_top=0;
-                                                       }
-                                               }else{
-                                                       pi[pino].poc.compno0 = tcp->comp_t;
-                                                       pi[pino].poc.compno1 = tcp->comp_t+1;
-                                                       tcp->comp_t+=1;
-                                                       incr_top=0;
-                                               }
-                                               break;
-                                       case 'L':
-                                               if(tcp->lay_t == tcp->layE){
-                                                       if(opj_pi_check_next_level(i-1,cp,tileno,pino,prog)){
-                                                               tcp->lay_t = tcp->layS;
-                                                               pi[pino].poc.layno0 = tcp->lay_t;
-                                                               pi[pino].poc.layno1 = tcp->lay_t+1;
-                                                               tcp->lay_t+=1;
-                                                               incr_top=1;
-                                                       }else{
-                                                               incr_top=0;
-                                                       }
-                                               }else{
-                                                       pi[pino].poc.layno0 = tcp->lay_t;
-                                                       pi[pino].poc.layno1 = tcp->lay_t+1;
-                                                       tcp->lay_t+=1;
-                                                       incr_top=0;
-                                               }
-                                               break;
-                                       case 'P':
-                                               switch(tcp->prg){
-                                               case OPJ_LRCP:
-                                               case OPJ_RLCP:
-                                                       if(tcp->prc_t == tcp->prcE){
-                                                               if(opj_pi_check_next_level(i-1,cp,tileno,pino,prog)){
-                                                                       tcp->prc_t = tcp->prcS;
-                                                                       pi[pino].poc.precno0 = tcp->prc_t;
-                                                                       pi[pino].poc.precno1 = tcp->prc_t+1;
-                                                                       tcp->prc_t+=1;
-                                                                       incr_top=1;
-                                                               }else{
-                                                                       incr_top=0;
-                                                               }
-                                                       }else{
-                                                               pi[pino].poc.precno0 = tcp->prc_t;
-                                                               pi[pino].poc.precno1 = tcp->prc_t+1;
-                                                               tcp->prc_t+=1;
-                                                               incr_top=0;
-                                                       }
-                                                       break;
-                                               default:
-                                                       if(tcp->tx0_t >= tcp->txE){
-                                                               if(tcp->ty0_t >= tcp->tyE){
-                                                                       if(opj_pi_check_next_level(i-1,cp,tileno,pino,prog)){
-                                                                               tcp->ty0_t = tcp->tyS;
-                                                                               pi[pino].poc.ty0 = (OPJ_INT32)tcp->ty0_t;
-                                                                               pi[pino].poc.ty1 = (OPJ_INT32)(tcp->ty0_t + tcp->dy - (tcp->ty0_t % tcp->dy));
-                                                                               tcp->ty0_t = (OPJ_UINT32)pi[pino].poc.ty1;
-                                                                               incr_top=1;resetX=1;
-                                                                       }else{
-                                                                               incr_top=0;resetX=0;
-                                                                       }
-                                                               }else{
-                                                                       pi[pino].poc.ty0 = (OPJ_INT32)tcp->ty0_t;
-                                                                       pi[pino].poc.ty1 = (OPJ_INT32)(tcp->ty0_t + tcp->dy - (tcp->ty0_t % tcp->dy));
-                                                                       tcp->ty0_t = (OPJ_UINT32)pi[pino].poc.ty1;
-                                                                       incr_top=0;resetX=1;
-                                                               }
-                                                               if(resetX==1){
-                                                                       tcp->tx0_t = tcp->txS;
-                                                                       pi[pino].poc.tx0 = (OPJ_INT32)tcp->tx0_t;
-                                                                       pi[pino].poc.tx1 = (OPJ_INT32)(tcp->tx0_t + tcp->dx- (tcp->tx0_t % tcp->dx));
-                                                                       tcp->tx0_t = (OPJ_UINT32)pi[pino].poc.tx1;
-                                                               }
-                                                       }else{
-                                                               pi[pino].poc.tx0 = (OPJ_INT32)tcp->tx0_t;
-                                                               pi[pino].poc.tx1 = (OPJ_INT32)(tcp->tx0_t + tcp->dx- (tcp->tx0_t % tcp->dx));
-                                                               tcp->tx0_t = (OPJ_UINT32)pi[pino].poc.tx1;
-                                                               incr_top=0;
-                                                       }
-                                                       break;
-                                               }
-                                               break;
-                                       }
-                               }
-                       }
-               }
-       }
+    const OPJ_CHAR *prog;
+    OPJ_INT32 i;
+    OPJ_UINT32 incr_top = 1, resetX = 0;
+    opj_tcp_t *tcps = &cp->tcps[tileno];
+    opj_poc_t *tcp = &tcps->pocs[pino];
+
+    prog = opj_j2k_convert_progression_order(tcp->prg);
+
+    pi[pino].first = 1;
+    pi[pino].poc.prg = tcp->prg;
+
+    if (!(cp->m_specific_param.m_enc.m_tp_on && ((!OPJ_IS_CINEMA(cp->rsiz) &&
+            (t2_mode == FINAL_PASS)) || OPJ_IS_CINEMA(cp->rsiz)))) {
+        pi[pino].poc.resno0 = tcp->resS;
+        pi[pino].poc.resno1 = tcp->resE;
+        pi[pino].poc.compno0 = tcp->compS;
+        pi[pino].poc.compno1 = tcp->compE;
+        pi[pino].poc.layno0 = tcp->layS;
+        pi[pino].poc.layno1 = tcp->layE;
+        pi[pino].poc.precno0 = tcp->prcS;
+        pi[pino].poc.precno1 = tcp->prcE;
+        pi[pino].poc.tx0 = (OPJ_INT32)tcp->txS;
+        pi[pino].poc.ty0 = (OPJ_INT32)tcp->tyS;
+        pi[pino].poc.tx1 = (OPJ_INT32)tcp->txE;
+        pi[pino].poc.ty1 = (OPJ_INT32)tcp->tyE;
+    } else {
+        for (i = tppos + 1; i < 4; i++) {
+            switch (prog[i]) {
+            case 'R':
+                pi[pino].poc.resno0 = tcp->resS;
+                pi[pino].poc.resno1 = tcp->resE;
+                break;
+            case 'C':
+                pi[pino].poc.compno0 = tcp->compS;
+                pi[pino].poc.compno1 = tcp->compE;
+                break;
+            case 'L':
+                pi[pino].poc.layno0 = tcp->layS;
+                pi[pino].poc.layno1 = tcp->layE;
+                break;
+            case 'P':
+                switch (tcp->prg) {
+                case OPJ_LRCP:
+                case OPJ_RLCP:
+                    pi[pino].poc.precno0 = tcp->prcS;
+                    pi[pino].poc.precno1 = tcp->prcE;
+                    break;
+                default:
+                    pi[pino].poc.tx0 = (OPJ_INT32)tcp->txS;
+                    pi[pino].poc.ty0 = (OPJ_INT32)tcp->tyS;
+                    pi[pino].poc.tx1 = (OPJ_INT32)tcp->txE;
+                    pi[pino].poc.ty1 = (OPJ_INT32)tcp->tyE;
+                    break;
+                }
+                break;
+            }
+        }
+
+        if (tpnum == 0) {
+            for (i = tppos; i >= 0; i--) {
+                switch (prog[i]) {
+                case 'C':
+                    tcp->comp_t = tcp->compS;
+                    pi[pino].poc.compno0 = tcp->comp_t;
+                    pi[pino].poc.compno1 = tcp->comp_t + 1;
+                    tcp->comp_t += 1;
+                    break;
+                case 'R':
+                    tcp->res_t = tcp->resS;
+                    pi[pino].poc.resno0 = tcp->res_t;
+                    pi[pino].poc.resno1 = tcp->res_t + 1;
+                    tcp->res_t += 1;
+                    break;
+                case 'L':
+                    tcp->lay_t = tcp->layS;
+                    pi[pino].poc.layno0 = tcp->lay_t;
+                    pi[pino].poc.layno1 = tcp->lay_t + 1;
+                    tcp->lay_t += 1;
+                    break;
+                case 'P':
+                    switch (tcp->prg) {
+                    case OPJ_LRCP:
+                    case OPJ_RLCP:
+                        tcp->prc_t = tcp->prcS;
+                        pi[pino].poc.precno0 = tcp->prc_t;
+                        pi[pino].poc.precno1 = tcp->prc_t + 1;
+                        tcp->prc_t += 1;
+                        break;
+                    default:
+                        tcp->tx0_t = tcp->txS;
+                        tcp->ty0_t = tcp->tyS;
+                        pi[pino].poc.tx0 = (OPJ_INT32)tcp->tx0_t;
+                        pi[pino].poc.tx1 = (OPJ_INT32)(tcp->tx0_t + tcp->dx - (tcp->tx0_t % tcp->dx));
+                        pi[pino].poc.ty0 = (OPJ_INT32)tcp->ty0_t;
+                        pi[pino].poc.ty1 = (OPJ_INT32)(tcp->ty0_t + tcp->dy - (tcp->ty0_t % tcp->dy));
+                        tcp->tx0_t = (OPJ_UINT32)pi[pino].poc.tx1;
+                        tcp->ty0_t = (OPJ_UINT32)pi[pino].poc.ty1;
+                        break;
+                    }
+                    break;
+                }
+            }
+            incr_top = 1;
+        } else {
+            for (i = tppos; i >= 0; i--) {
+                switch (prog[i]) {
+                case 'C':
+                    pi[pino].poc.compno0 = tcp->comp_t - 1;
+                    pi[pino].poc.compno1 = tcp->comp_t;
+                    break;
+                case 'R':
+                    pi[pino].poc.resno0 = tcp->res_t - 1;
+                    pi[pino].poc.resno1 = tcp->res_t;
+                    break;
+                case 'L':
+                    pi[pino].poc.layno0 = tcp->lay_t - 1;
+                    pi[pino].poc.layno1 = tcp->lay_t;
+                    break;
+                case 'P':
+                    switch (tcp->prg) {
+                    case OPJ_LRCP:
+                    case OPJ_RLCP:
+                        pi[pino].poc.precno0 = tcp->prc_t - 1;
+                        pi[pino].poc.precno1 = tcp->prc_t;
+                        break;
+                    default:
+                        pi[pino].poc.tx0 = (OPJ_INT32)(tcp->tx0_t - tcp->dx - (tcp->tx0_t % tcp->dx));
+                        pi[pino].poc.tx1 = (OPJ_INT32)tcp->tx0_t ;
+                        pi[pino].poc.ty0 = (OPJ_INT32)(tcp->ty0_t - tcp->dy - (tcp->ty0_t % tcp->dy));
+                        pi[pino].poc.ty1 = (OPJ_INT32)tcp->ty0_t ;
+                        break;
+                    }
+                    break;
+                }
+                if (incr_top == 1) {
+                    switch (prog[i]) {
+                    case 'R':
+                        if (tcp->res_t == tcp->resE) {
+                            if (opj_pi_check_next_level(i - 1, cp, tileno, pino, prog)) {
+                                tcp->res_t = tcp->resS;
+                                pi[pino].poc.resno0 = tcp->res_t;
+                                pi[pino].poc.resno1 = tcp->res_t + 1;
+                                tcp->res_t += 1;
+                                incr_top = 1;
+                            } else {
+                                incr_top = 0;
+                            }
+                        } else {
+                            pi[pino].poc.resno0 = tcp->res_t;
+                            pi[pino].poc.resno1 = tcp->res_t + 1;
+                            tcp->res_t += 1;
+                            incr_top = 0;
+                        }
+                        break;
+                    case 'C':
+                        if (tcp->comp_t == tcp->compE) {
+                            if (opj_pi_check_next_level(i - 1, cp, tileno, pino, prog)) {
+                                tcp->comp_t = tcp->compS;
+                                pi[pino].poc.compno0 = tcp->comp_t;
+                                pi[pino].poc.compno1 = tcp->comp_t + 1;
+                                tcp->comp_t += 1;
+                                incr_top = 1;
+                            } else {
+                                incr_top = 0;
+                            }
+                        } else {
+                            pi[pino].poc.compno0 = tcp->comp_t;
+                            pi[pino].poc.compno1 = tcp->comp_t + 1;
+                            tcp->comp_t += 1;
+                            incr_top = 0;
+                        }
+                        break;
+                    case 'L':
+                        if (tcp->lay_t == tcp->layE) {
+                            if (opj_pi_check_next_level(i - 1, cp, tileno, pino, prog)) {
+                                tcp->lay_t = tcp->layS;
+                                pi[pino].poc.layno0 = tcp->lay_t;
+                                pi[pino].poc.layno1 = tcp->lay_t + 1;
+                                tcp->lay_t += 1;
+                                incr_top = 1;
+                            } else {
+                                incr_top = 0;
+                            }
+                        } else {
+                            pi[pino].poc.layno0 = tcp->lay_t;
+                            pi[pino].poc.layno1 = tcp->lay_t + 1;
+                            tcp->lay_t += 1;
+                            incr_top = 0;
+                        }
+                        break;
+                    case 'P':
+                        switch (tcp->prg) {
+                        case OPJ_LRCP:
+                        case OPJ_RLCP:
+                            if (tcp->prc_t == tcp->prcE) {
+                                if (opj_pi_check_next_level(i - 1, cp, tileno, pino, prog)) {
+                                    tcp->prc_t = tcp->prcS;
+                                    pi[pino].poc.precno0 = tcp->prc_t;
+                                    pi[pino].poc.precno1 = tcp->prc_t + 1;
+                                    tcp->prc_t += 1;
+                                    incr_top = 1;
+                                } else {
+                                    incr_top = 0;
+                                }
+                            } else {
+                                pi[pino].poc.precno0 = tcp->prc_t;
+                                pi[pino].poc.precno1 = tcp->prc_t + 1;
+                                tcp->prc_t += 1;
+                                incr_top = 0;
+                            }
+                            break;
+                        default:
+                            if (tcp->tx0_t >= tcp->txE) {
+                                if (tcp->ty0_t >= tcp->tyE) {
+                                    if (opj_pi_check_next_level(i - 1, cp, tileno, pino, prog)) {
+                                        tcp->ty0_t = tcp->tyS;
+                                        pi[pino].poc.ty0 = (OPJ_INT32)tcp->ty0_t;
+                                        pi[pino].poc.ty1 = (OPJ_INT32)(tcp->ty0_t + tcp->dy - (tcp->ty0_t % tcp->dy));
+                                        tcp->ty0_t = (OPJ_UINT32)pi[pino].poc.ty1;
+                                        incr_top = 1;
+                                        resetX = 1;
+                                    } else {
+                                        incr_top = 0;
+                                        resetX = 0;
+                                    }
+                                } else {
+                                    pi[pino].poc.ty0 = (OPJ_INT32)tcp->ty0_t;
+                                    pi[pino].poc.ty1 = (OPJ_INT32)(tcp->ty0_t + tcp->dy - (tcp->ty0_t % tcp->dy));
+                                    tcp->ty0_t = (OPJ_UINT32)pi[pino].poc.ty1;
+                                    incr_top = 0;
+                                    resetX = 1;
+                                }
+                                if (resetX == 1) {
+                                    tcp->tx0_t = tcp->txS;
+                                    pi[pino].poc.tx0 = (OPJ_INT32)tcp->tx0_t;
+                                    pi[pino].poc.tx1 = (OPJ_INT32)(tcp->tx0_t + tcp->dx - (tcp->tx0_t % tcp->dx));
+                                    tcp->tx0_t = (OPJ_UINT32)pi[pino].poc.tx1;
+                                }
+                            } else {
+                                pi[pino].poc.tx0 = (OPJ_INT32)tcp->tx0_t;
+                                pi[pino].poc.tx1 = (OPJ_INT32)(tcp->tx0_t + tcp->dx - (tcp->tx0_t % tcp->dx));
+                                tcp->tx0_t = (OPJ_UINT32)pi[pino].poc.tx1;
+                                incr_top = 0;
+                            }
+                            break;
+                        }
+                        break;
+                    }
+                }
+            }
+        }
+    }
 }
 
 void opj_pi_destroy(opj_pi_iterator_t *p_pi,
                     OPJ_UINT32 p_nb_elements)
 {
-       OPJ_UINT32 compno, pino;
-       opj_pi_iterator_t *l_current_pi = p_pi;
+    OPJ_UINT32 compno, pino;
+    opj_pi_iterator_t *l_current_pi = p_pi;
     if (p_pi) {
-               if (p_pi->include) {
-                       opj_free(p_pi->include);
-                       p_pi->include = 00;
-               }
-               for (pino = 0; pino < p_nb_elements; ++pino){
-                       if(l_current_pi->comps) {
-                               opj_pi_comp_t *l_current_component = l_current_pi->comps;
-                for (compno = 0; compno < l_current_pi->numcomps; compno++){
-                    if(l_current_component->resolutions) {
-                                               opj_free(l_current_component->resolutions);
-                                               l_current_component->resolutions = 00;
-                                       }
-
-                                       ++l_current_component;
-                               }
-                               opj_free(l_current_pi->comps);
-                               l_current_pi->comps = 0;
-                       }
-                       ++l_current_pi;
-               }
-               opj_free(p_pi);
-       }
+        if (p_pi->include) {
+            opj_free(p_pi->include);
+            p_pi->include = 00;
+        }
+        for (pino = 0; pino < p_nb_elements; ++pino) {
+            if (l_current_pi->comps) {
+                opj_pi_comp_t *l_current_component = l_current_pi->comps;
+                for (compno = 0; compno < l_current_pi->numcomps; compno++) {
+                    if (l_current_component->resolutions) {
+                        opj_free(l_current_component->resolutions);
+                        l_current_component->resolutions = 00;
+                    }
+
+                    ++l_current_component;
+                }
+                opj_free(l_current_pi->comps);
+                l_current_pi->comps = 0;
+            }
+            ++l_current_pi;
+        }
+        opj_free(p_pi);
+    }
 }
 
 
 
-void opj_pi_update_encoding_parameters(        const opj_image_t *p_image,
-                                        opj_cp_t *p_cp,
-                                        OPJ_UINT32 p_tile_no )
+void opj_pi_update_encoding_parameters(const opj_image_t *p_image,
+                                       opj_cp_t *p_cp,
+                                       OPJ_UINT32 p_tile_no)
 {
-       /* encoding parameters to set */
-       OPJ_UINT32 l_max_res;
-       OPJ_UINT32 l_max_prec;
-       OPJ_INT32 l_tx0,l_tx1,l_ty0,l_ty1;
-       OPJ_UINT32 l_dx_min,l_dy_min;
-
-       /* pointers */
-       opj_tcp_t *l_tcp = 00;
-
-       /* preconditions */
-       assert(p_cp != 00);
-       assert(p_image != 00);
-       assert(p_tile_no < p_cp->tw * p_cp->th);
-
-       l_tcp = &(p_cp->tcps[p_tile_no]);
-
-       /* get encoding parameters */
-       opj_get_encoding_parameters(p_image,p_cp,p_tile_no,&l_tx0,&l_tx1,&l_ty0,&l_ty1,&l_dx_min,&l_dy_min,&l_max_prec,&l_max_res);
-
-       if (l_tcp->POC) {
-               opj_pi_update_encode_poc_and_final(p_cp,p_tile_no,l_tx0,l_tx1,l_ty0,l_ty1,l_max_prec,l_max_res,l_dx_min,l_dy_min);
-       }
-       else {
-               opj_pi_update_encode_not_poc(p_cp,p_image->numcomps,p_tile_no,l_tx0,l_tx1,l_ty0,l_ty1,l_max_prec,l_max_res,l_dx_min,l_dy_min);
-       }
+    /* encoding parameters to set */
+    OPJ_UINT32 l_max_res;
+    OPJ_UINT32 l_max_prec;
+    OPJ_INT32 l_tx0, l_tx1, l_ty0, l_ty1;
+    OPJ_UINT32 l_dx_min, l_dy_min;
+
+    /* pointers */
+    opj_tcp_t *l_tcp = 00;
+
+    /* preconditions */
+    assert(p_cp != 00);
+    assert(p_image != 00);
+    assert(p_tile_no < p_cp->tw * p_cp->th);
+
+    l_tcp = &(p_cp->tcps[p_tile_no]);
+
+    /* get encoding parameters */
+    opj_get_encoding_parameters(p_image, p_cp, p_tile_no, &l_tx0, &l_tx1, &l_ty0,
+                                &l_ty1, &l_dx_min, &l_dy_min, &l_max_prec, &l_max_res);
+
+    if (l_tcp->POC) {
+        opj_pi_update_encode_poc_and_final(p_cp, p_tile_no, l_tx0, l_tx1, l_ty0, l_ty1,
+                                           l_max_prec, l_max_res, l_dx_min, l_dy_min);
+    } else {
+        opj_pi_update_encode_not_poc(p_cp, p_image->numcomps, p_tile_no, l_tx0, l_tx1,
+                                     l_ty0, l_ty1, l_max_prec, l_max_res, l_dx_min, l_dy_min);
+    }
 }
 
-OPJ_BOOL opj_pi_next(opj_pi_iterator_t * pi) {
-       switch (pi->poc.prg) {
-               case OPJ_LRCP:
-                       return opj_pi_next_lrcp(pi);
-               case OPJ_RLCP:
-                       return opj_pi_next_rlcp(pi);
-               case OPJ_RPCL:
-                       return opj_pi_next_rpcl(pi);
-               case OPJ_PCRL:
-                       return opj_pi_next_pcrl(pi);
-               case OPJ_CPRL:
-                       return opj_pi_next_cprl(pi);
-               case OPJ_PROG_UNKNOWN:
-                       return OPJ_FALSE;
-       }
-       
-       return OPJ_FALSE;
+OPJ_BOOL opj_pi_next(opj_pi_iterator_t * pi)
+{
+    switch (pi->poc.prg) {
+    case OPJ_LRCP:
+        return opj_pi_next_lrcp(pi);
+    case OPJ_RLCP:
+        return opj_pi_next_rlcp(pi);
+    case OPJ_RPCL:
+        return opj_pi_next_rpcl(pi);
+    case OPJ_PCRL:
+        return opj_pi_next_pcrl(pi);
+    case OPJ_CPRL:
+        return opj_pi_next_cprl(pi);
+    case OPJ_PROG_UNKNOWN:
+        return OPJ_FALSE;
+    }
+
+    return OPJ_FALSE;
 }
index 018a881233fedb76245f527a1063d3851232eafc..2f0ce66b2058c7d614f588fbf1b438d6d6e4ab8c 100644 (file)
@@ -35,7 +35,7 @@
 
 #include "opj_includes.h"
 
-/* 
+/*
  * Write faix box of ppix
  *
  * @param[in] coff offset of j2k codestream
  */
 
 
-int opj_write_ppix( int coff, opj_codestream_info_t cstr_info, OPJ_BOOL EPHused, int j2klen, opj_stream_private_t *cio,
-              opj_event_mgr_t * p_manager )
+int opj_write_ppix(int coff, opj_codestream_info_t cstr_info, OPJ_BOOL EPHused,
+                   int j2klen, opj_stream_private_t *cio,
+                   opj_event_mgr_t * p_manager)
 {
-  OPJ_BYTE l_data_header [4];
-  int compno, i;
-  opj_jp2_box_t *box;
-  OPJ_OFF_T lenp;
-  OPJ_UINT32 len;
-
-  /*  printf("cstr_info.packno %d\n", cstr_info.packno); //NMAX? */
-
-  lenp = -1;
-  box = (opj_jp2_box_t *)opj_calloc( (size_t)cstr_info.numcomps, sizeof(opj_jp2_box_t));
-  if(box == NULL){
-       return 0;
-  }
-  for (i=0;i<2;i++){
-    if (i)
-
-      opj_stream_seek( cio, lenp, p_manager);
-    
-    lenp = (OPJ_UINT32)(opj_stream_tell(cio));
-    opj_stream_skip( cio, 4, p_manager);       /* L [at the end] */
-    opj_write_bytes(l_data_header,JPIP_PPIX,4);/* PPIX           */
-    opj_stream_write_data(cio,l_data_header,4,p_manager);
-
-    opj_write_manf( i, cstr_info.numcomps, box, cio, p_manager);
-    
-    for (compno=0; compno<cstr_info.numcomps; compno++){
-      box[compno].length = (OPJ_UINT32)opj_write_ppixfaix( coff, compno, cstr_info, EPHused, j2klen, cio,p_manager);
-      box[compno].type = JPIP_FAIX;
+    OPJ_BYTE l_data_header [4];
+    int compno, i;
+    opj_jp2_box_t *box;
+    OPJ_OFF_T lenp;
+    OPJ_UINT32 len;
+
+    /*  printf("cstr_info.packno %d\n", cstr_info.packno); //NMAX? */
+
+    lenp = -1;
+    box = (opj_jp2_box_t *)opj_calloc((size_t)cstr_info.numcomps,
+                                      sizeof(opj_jp2_box_t));
+    if (box == NULL) {
+        return 0;
+    }
+    for (i = 0; i < 2; i++) {
+        if (i)
+
+        {
+            opj_stream_seek(cio, lenp, p_manager);
+        }
+
+        lenp = (OPJ_UINT32)(opj_stream_tell(cio));
+        opj_stream_skip(cio, 4, p_manager);        /* L [at the end] */
+        opj_write_bytes(l_data_header, JPIP_PPIX, 4); /* PPIX           */
+        opj_stream_write_data(cio, l_data_header, 4, p_manager);
+
+        opj_write_manf(i, cstr_info.numcomps, box, cio, p_manager);
+
+        for (compno = 0; compno < cstr_info.numcomps; compno++) {
+            box[compno].length = (OPJ_UINT32)opj_write_ppixfaix(coff, compno, cstr_info,
+                                 EPHused, j2klen, cio, p_manager);
+            box[compno].type = JPIP_FAIX;
+        }
+
+
+        len = (OPJ_UINT32)(opj_stream_tell(cio) - lenp);
+        opj_stream_seek(cio, lenp, p_manager);
+        opj_write_bytes(l_data_header, len, 4); /* L              */
+        opj_stream_write_data(cio, l_data_header, 4, p_manager);
+        opj_stream_seek(cio, lenp + len, p_manager);
     }
-   
-
-  len = (OPJ_UINT32)(opj_stream_tell(cio)-lenp);
-  opj_stream_seek(cio, lenp,p_manager);
-  opj_write_bytes(l_data_header,len,4);/* L              */
-  opj_stream_write_data(cio,l_data_header,4,p_manager);
-  opj_stream_seek(cio, lenp+len,p_manager);
-  }
-  
-  opj_free(box);
-
-  return (int)len;
+
+    opj_free(box);
+
+    return (int)len;
 }
 
 
 
-int opj_write_ppixfaix( int coff, int compno, opj_codestream_info_t cstr_info, OPJ_BOOL EPHused, int j2klen, opj_stream_private_t *cio,
-              opj_event_mgr_t * p_manager )
+int opj_write_ppixfaix(int coff, int compno, opj_codestream_info_t cstr_info,
+                       OPJ_BOOL EPHused, int j2klen, opj_stream_private_t *cio,
+                       opj_event_mgr_t * p_manager)
 {
-  OPJ_BYTE l_data_header [8];
-  OPJ_UINT32 tileno, version, i, nmax, size_of_coding; /* 4 or 8*/
-  OPJ_UINT32 len;
-  OPJ_OFF_T lenp;
-  opj_tile_info_t *tile_Idx;
-  opj_packet_info_t packet;
-  int resno, precno, layno;
-  OPJ_UINT32 num_packet;
-  int numOfres, numOfprec, numOflayers;
-  packet.end_pos = packet.end_ph_pos = packet.start_pos = -1;
-  (void)EPHused; /* unused ? */
-
-  if( j2klen > pow( 2, 32)){
-    size_of_coding =  8;
-    version = 1;
-  }
-  else{
-    size_of_coding = 4;
-    version = 0;
-  }
-  
-  lenp = opj_stream_tell(cio);
-  opj_stream_skip(cio, 4, p_manager);         /* L [at the end]      */
-  opj_write_bytes(l_data_header,JPIP_FAIX,4); /* FAIX */
-  opj_write_bytes(l_data_header,version,1);
-  opj_stream_write_data(cio,l_data_header,1,p_manager);/* Version 0 = 4 bytes */
-
-  nmax = 0;
-  for( i=0; i<=(OPJ_UINT32)cstr_info.numdecompos[compno]; i++)
-    nmax += (OPJ_UINT32)(cstr_info.tile[0].ph[i] * cstr_info.tile[0].pw[i] * cstr_info.numlayers);
-  
-  opj_write_bytes(l_data_header,nmax,size_of_coding);         /* NMAX           */
-  opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
-  opj_write_bytes(l_data_header,(OPJ_UINT32)(cstr_info.tw*cstr_info.th),size_of_coding);  /* M              */
-  opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
-
-  for( tileno=0; tileno<(OPJ_UINT32)(cstr_info.tw*cstr_info.th); tileno++){
-    tile_Idx = &cstr_info.tile[ tileno];
-    num_packet=0;
-    numOfres = cstr_info.numdecompos[compno] + 1;
-  
-    for( resno=0; resno<numOfres ; resno++){
-      numOfprec = tile_Idx->pw[resno]*tile_Idx->ph[resno];
-      for( precno=0; precno<numOfprec; precno++){
-       numOflayers = cstr_info.numlayers;
-       for( layno=0; layno<numOflayers; layno++){
-
-         switch ( cstr_info.prog){
-         case OPJ_LRCP:
-           packet = tile_Idx->packet[ ((layno*numOfres+resno)*cstr_info.numcomps+compno)*numOfprec+precno];
-           break;
-         case OPJ_RLCP:
-           packet = tile_Idx->packet[ ((resno*numOflayers+layno)*cstr_info.numcomps+compno)*numOfprec+precno];
-           break;
-         case OPJ_RPCL:
-           packet = tile_Idx->packet[ ((resno*numOfprec+precno)*cstr_info.numcomps+compno)*numOflayers+layno];
-           break;
-         case OPJ_PCRL:
-           packet = tile_Idx->packet[ ((precno*cstr_info.numcomps+compno)*numOfres+resno)*numOflayers + layno];
-           break;
-         case OPJ_CPRL:
-           packet = tile_Idx->packet[ ((compno*numOfprec+precno)*numOfres+resno)*numOflayers + layno];
-           break;
-         default:
-           fprintf( stderr, "failed to ppix indexing\n");
-         }
-
-    opj_write_bytes(l_data_header,(OPJ_UINT32)(packet.start_pos-coff),size_of_coding);            /* start position */
-    opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
-    opj_write_bytes(l_data_header,(OPJ_UINT32)(packet.end_pos-packet.start_pos+1),size_of_coding); /* length         */
-    opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
-         
-         num_packet++;
-       }
-      }
+    OPJ_BYTE l_data_header [8];
+    OPJ_UINT32 tileno, version, i, nmax, size_of_coding; /* 4 or 8*/
+    OPJ_UINT32 len;
+    OPJ_OFF_T lenp;
+    opj_tile_info_t *tile_Idx;
+    opj_packet_info_t packet;
+    int resno, precno, layno;
+    OPJ_UINT32 num_packet;
+    int numOfres, numOfprec, numOflayers;
+    packet.end_pos = packet.end_ph_pos = packet.start_pos = -1;
+    (void)EPHused; /* unused ? */
+
+    if (j2klen > pow(2, 32)) {
+        size_of_coding =  8;
+        version = 1;
+    } else {
+        size_of_coding = 4;
+        version = 0;
+    }
+
+    lenp = opj_stream_tell(cio);
+    opj_stream_skip(cio, 4, p_manager);         /* L [at the end]      */
+    opj_write_bytes(l_data_header, JPIP_FAIX, 4); /* FAIX */
+    opj_write_bytes(l_data_header, version, 1);
+    opj_stream_write_data(cio, l_data_header, 1,
+                          p_manager); /* Version 0 = 4 bytes */
+
+    nmax = 0;
+    for (i = 0; i <= (OPJ_UINT32)cstr_info.numdecompos[compno]; i++) {
+        nmax += (OPJ_UINT32)(cstr_info.tile[0].ph[i] * cstr_info.tile[0].pw[i] *
+                             cstr_info.numlayers);
     }
-  
-    while( num_packet < nmax){     /* PADDING */
-      opj_write_bytes(l_data_header,0,size_of_coding);/* start position            */
-      opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
-      opj_write_bytes(l_data_header,0,size_of_coding);/* length                    */
-      opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
-      num_packet++;
-    }   
-  }
-
-  len = (OPJ_UINT32)(opj_stream_tell(cio)-lenp);
-  opj_stream_seek(cio, lenp,p_manager);
-  opj_write_bytes(l_data_header,len,4);/* L  */
-  opj_stream_write_data(cio,l_data_header,4,p_manager);
-  opj_stream_seek(cio, lenp+len,p_manager);
-
-  return (int)len;
+
+    opj_write_bytes(l_data_header, nmax, size_of_coding);       /* NMAX           */
+    opj_stream_write_data(cio, l_data_header, size_of_coding, p_manager);
+    opj_write_bytes(l_data_header, (OPJ_UINT32)(cstr_info.tw * cstr_info.th),
+                    size_of_coding);  /* M              */
+    opj_stream_write_data(cio, l_data_header, size_of_coding, p_manager);
+
+    for (tileno = 0; tileno < (OPJ_UINT32)(cstr_info.tw * cstr_info.th); tileno++) {
+        tile_Idx = &cstr_info.tile[ tileno];
+
+        num_packet = 0;
+        numOfres = cstr_info.numdecompos[compno] + 1;
+
+        for (resno = 0; resno < numOfres ; resno++) {
+            numOfprec = tile_Idx->pw[resno] * tile_Idx->ph[resno];
+            for (precno = 0; precno < numOfprec; precno++) {
+                numOflayers = cstr_info.numlayers;
+                for (layno = 0; layno < numOflayers; layno++) {
+
+                    switch (cstr_info.prog) {
+                    case OPJ_LRCP:
+                        packet = tile_Idx->packet[((layno * numOfres + resno) * cstr_info.numcomps +
+                                                                               compno) * numOfprec + precno];
+                        break;
+                    case OPJ_RLCP:
+                        packet = tile_Idx->packet[((resno * numOflayers + layno) * cstr_info.numcomps +
+                                                                                  compno) * numOfprec + precno];
+                        break;
+                    case OPJ_RPCL:
+                        packet = tile_Idx->packet[((resno * numOfprec + precno) * cstr_info.numcomps +
+                                                                                 compno) * numOflayers + layno];
+                        break;
+                    case OPJ_PCRL:
+                        packet = tile_Idx->packet[((precno * cstr_info.numcomps + compno) * numOfres +
+                                                                                           resno) * numOflayers + layno];
+                        break;
+                    case OPJ_CPRL:
+                        packet = tile_Idx->packet[((compno * numOfprec + precno) * numOfres + resno) *
+                                                                                 numOflayers + layno];
+                        break;
+                    default:
+                        fprintf(stderr, "failed to ppix indexing\n");
+                    }
+
+                    opj_write_bytes(l_data_header, (OPJ_UINT32)(packet.start_pos - coff),
+                                    size_of_coding);            /* start position */
+                    opj_stream_write_data(cio, l_data_header, size_of_coding, p_manager);
+                    opj_write_bytes(l_data_header,
+                                    (OPJ_UINT32)(packet.end_pos - packet.start_pos + 1),
+                                    size_of_coding); /* length         */
+                    opj_stream_write_data(cio, l_data_header, size_of_coding, p_manager);
+
+                    num_packet++;
+                }
+            }
+        }
+
+        while (num_packet < nmax) {    /* PADDING */
+            opj_write_bytes(l_data_header, 0,
+                            size_of_coding); /* start position            */
+            opj_stream_write_data(cio, l_data_header, size_of_coding, p_manager);
+            opj_write_bytes(l_data_header, 0,
+                            size_of_coding); /* length                    */
+            opj_stream_write_data(cio, l_data_header, size_of_coding, p_manager);
+            num_packet++;
+        }
+    }
+
+    len = (OPJ_UINT32)(opj_stream_tell(cio) - lenp);
+    opj_stream_seek(cio, lenp, p_manager);
+    opj_write_bytes(l_data_header, len, 4); /* L  */
+    opj_stream_write_data(cio, l_data_header, 4, p_manager);
+    opj_stream_seek(cio, lenp + len, p_manager);
+
+    return (int)len;
 }
index d3581d1a0e9760e697fd709295668b270c4004fe..516d63fb56f4f527997cace1dc69f535a074c6de 100644 (file)
@@ -1,12 +1,12 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
  * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
  * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * All rights reserved.
 
 #include "opj_includes.h"
 
-/* 
+/*
 ==========================================================
    local functions
 ==========================================================
 */
 
 
-/* 
+/*
 ==========================================================
    RAW encoding interface
 ==========================================================
 */
 
-opj_raw_t* opj_raw_create(void) {
-       opj_raw_t *raw = (opj_raw_t*)opj_malloc(sizeof(opj_raw_t));
-       return raw;
+opj_raw_t* opj_raw_create(void)
+{
+    opj_raw_t *raw = (opj_raw_t*)opj_malloc(sizeof(opj_raw_t));
+    return raw;
 }
 
-void opj_raw_destroy(opj_raw_t *raw) {
-       if(raw) {
-               opj_free(raw);
-       }
+void opj_raw_destroy(opj_raw_t *raw)
+{
+    if (raw) {
+        opj_free(raw);
+    }
 }
 
-OPJ_UINT32 opj_raw_numbytes(opj_raw_t *raw) {
-       const ptrdiff_t diff = raw->bp - raw->start;
-  assert( diff <= (ptrdiff_t)0xffffffff && diff >= 0 ); /* UINT32_MAX */
-       return (OPJ_UINT32)diff;
+OPJ_UINT32 opj_raw_numbytes(opj_raw_t *raw)
+{
+    const ptrdiff_t diff = raw->bp - raw->start;
+    assert(diff <= (ptrdiff_t)0xffffffff && diff >= 0);   /* UINT32_MAX */
+    return (OPJ_UINT32)diff;
 }
 
-void opj_raw_init_dec(opj_raw_t *raw, OPJ_BYTE *bp, OPJ_UINT32 len) {
-       raw->start = bp;
-       raw->lenmax = len;
-       raw->len = 0;
-       raw->c = 0;
-       raw->ct = 0;
+void opj_raw_init_dec(opj_raw_t *raw, OPJ_BYTE *bp, OPJ_UINT32 len)
+{
+    raw->start = bp;
+    raw->lenmax = len;
+    raw->len = 0;
+    raw->c = 0;
+    raw->ct = 0;
 }
 
-OPJ_UINT32 opj_raw_decode(opj_raw_t *raw) {
-       OPJ_UINT32 d;
-       if (raw->ct == 0) {
-               raw->ct = 8;
-               if (raw->len == raw->lenmax) {
-                       raw->c = 0xff;
-               } else {
-                       if (raw->c == 0xff) {
-                               raw->ct = 7;
-                       }
-                       raw->c = *(raw->start + raw->len);
-                       raw->len++;
-               }
-       }
-       raw->ct--;
-       d = ((OPJ_UINT32)raw->c >> raw->ct) & 0x01U;
-       
-       return d;
+OPJ_UINT32 opj_raw_decode(opj_raw_t *raw)
+{
+    OPJ_UINT32 d;
+    if (raw->ct == 0) {
+        raw->ct = 8;
+        if (raw->len == raw->lenmax) {
+            raw->c = 0xff;
+        } else {
+            if (raw->c == 0xff) {
+                raw->ct = 7;
+            }
+            raw->c = *(raw->start + raw->len);
+            raw->len++;
+        }
+    }
+    raw->ct--;
+    d = ((OPJ_UINT32)raw->c >> raw->ct) & 0x01U;
+
+    return d;
 }
 
index 453d29089ffd8469216e8ff183ce72b81e8aabaf..0cc677235fa2ef179bc93c2468ba974034d044bb 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * Copyright (c) 2007, Callum Lerwick <seg@haxxed.com>
@@ -53,7 +53,8 @@ static INLINE OPJ_UINT32 opj_t1_getctxno_mag(OPJ_UINT32 f);
 static OPJ_BYTE opj_t1_getspb(OPJ_UINT32 f);
 static OPJ_INT16 opj_t1_getnmsedec_sig(OPJ_UINT32 x, OPJ_UINT32 bitpos);
 static OPJ_INT16 opj_t1_getnmsedec_ref(OPJ_UINT32 x, OPJ_UINT32 bitpos);
-static INLINE void opj_t1_updateflags(opj_flag_t *flagsp, OPJ_UINT32 s, OPJ_UINT32 stride);
+static INLINE void opj_t1_updateflags(opj_flag_t *flagsp, OPJ_UINT32 s,
+                                      OPJ_UINT32 stride);
 /**
 Encode significant pass
 */
@@ -80,50 +81,50 @@ static void opj_t1_dec_sigpass_step(opj_t1_t *t1,
 #endif
 
 static INLINE void opj_t1_dec_sigpass_step_raw(
-                opj_t1_t *t1,
-                opj_flag_t *flagsp,
-                opj_colflag_t* colflagsp,
-                OPJ_INT32 *datap,
-                OPJ_INT32 oneplushalf,
-                OPJ_INT32 vsc,
-                OPJ_UINT32 row);
+    opj_t1_t *t1,
+    opj_flag_t *flagsp,
+    opj_colflag_t* colflagsp,
+    OPJ_INT32 *datap,
+    OPJ_INT32 oneplushalf,
+    OPJ_INT32 vsc,
+    OPJ_UINT32 row);
 static INLINE void opj_t1_dec_sigpass_step_mqc(
-                opj_t1_t *t1,
-                opj_flag_t *flagsp,
-                opj_colflag_t* colflagsp,
-                OPJ_INT32 *datap,
-                OPJ_INT32 oneplushalf,
-                OPJ_UINT32 row,
-                OPJ_UINT32 flags_stride);
+    opj_t1_t *t1,
+    opj_flag_t *flagsp,
+    opj_colflag_t* colflagsp,
+    OPJ_INT32 *datap,
+    OPJ_INT32 oneplushalf,
+    OPJ_UINT32 row,
+    OPJ_UINT32 flags_stride);
 static INLINE void opj_t1_dec_sigpass_step_mqc_vsc(
-                opj_t1_t *t1,
-                opj_flag_t *flagsp,
-                opj_colflag_t* colflagsp,
-                OPJ_INT32 *datap,
-                OPJ_INT32 oneplushalf,
-                OPJ_INT32 vsc,
-                OPJ_UINT32 row);
+    opj_t1_t *t1,
+    opj_flag_t *flagsp,
+    opj_colflag_t* colflagsp,
+    OPJ_INT32 *datap,
+    OPJ_INT32 oneplushalf,
+    OPJ_INT32 vsc,
+    OPJ_UINT32 row);
 
 
 /**
 Encode significant pass
 */
-static void opj_t1_enc_sigpass( opj_t1_t *t1,
-                                OPJ_INT32 bpno,
-                                OPJ_INT32 *nmsedec,
-                                OPJ_BYTE type,
-                                OPJ_UINT32 cblksty);
+static void opj_t1_enc_sigpass(opj_t1_t *t1,
+                               OPJ_INT32 bpno,
+                               OPJ_INT32 *nmsedec,
+                               OPJ_BYTE type,
+                               OPJ_UINT32 cblksty);
 
 /**
 Decode significant pass
 */
 static void opj_t1_dec_sigpass_raw(
-                opj_t1_t *t1,
-                OPJ_INT32 bpno,
-                OPJ_INT32 cblksty);
+    opj_t1_t *t1,
+    OPJ_INT32 bpno,
+    OPJ_INT32 cblksty);
 static void opj_t1_dec_sigpass_mqc_vsc(
-                opj_t1_t *t1,
-                OPJ_INT32 bpno);
+    opj_t1_t *t1,
+    OPJ_INT32 bpno);
 
 
 
@@ -143,21 +144,21 @@ static void opj_t1_enc_refpass_step(opj_t1_t *t1,
 /**
 Encode refinement pass
 */
-static void opj_t1_enc_refpass( opj_t1_t *t1,
-                                OPJ_INT32 bpno,
-                                OPJ_INT32 *nmsedec,
-                                OPJ_BYTE type,
-                                OPJ_UINT32 cblksty);
+static void opj_t1_enc_refpass(opj_t1_t *t1,
+                               OPJ_INT32 bpno,
+                               OPJ_INT32 *nmsedec,
+                               OPJ_BYTE type,
+                               OPJ_UINT32 cblksty);
 
 /**
 Decode refinement pass
 */
 static void opj_t1_dec_refpass_raw(
-                opj_t1_t *t1,
-                OPJ_INT32 bpno);
+    opj_t1_t *t1,
+    OPJ_INT32 bpno);
 static void opj_t1_dec_refpass_mqc_vsc(
-                opj_t1_t *t1,
-                OPJ_INT32 bpno);
+    opj_t1_t *t1,
+    OPJ_INT32 bpno);
 
 
 /**
@@ -174,29 +175,29 @@ static void opj_t1_dec_refpass_step(opj_t1_t *t1,
 #endif
 
 static INLINE void  opj_t1_dec_refpass_step_raw(
-                opj_t1_t *t1,
-                opj_colflag_t *colflagsp,
-                OPJ_INT32 *datap,
-                OPJ_INT32 poshalf,
-                OPJ_INT32 neghalf,
-                OPJ_UINT32 row);
+    opj_t1_t *t1,
+    opj_colflag_t *colflagsp,
+    OPJ_INT32 *datap,
+    OPJ_INT32 poshalf,
+    OPJ_INT32 neghalf,
+    OPJ_UINT32 row);
 static INLINE void opj_t1_dec_refpass_step_mqc(
-                opj_t1_t *t1,
-                opj_flag_t *flagsp,
-                opj_colflag_t *colflagsp,
-                OPJ_INT32 *datap,
-                OPJ_INT32 poshalf,
-                OPJ_INT32 neghalf,
-                OPJ_UINT32 row);
+    opj_t1_t *t1,
+    opj_flag_t *flagsp,
+    opj_colflag_t *colflagsp,
+    OPJ_INT32 *datap,
+    OPJ_INT32 poshalf,
+    OPJ_INT32 neghalf,
+    OPJ_UINT32 row);
 static INLINE void opj_t1_dec_refpass_step_mqc_vsc(
-                opj_t1_t *t1,
-                opj_flag_t *flagsp,
-                opj_colflag_t *colflagsp,
-                OPJ_INT32 *datap,
-                OPJ_INT32 poshalf,
-                OPJ_INT32 neghalf,
-                OPJ_INT32 vsc,
-                OPJ_UINT32 row);
+    opj_t1_t *t1,
+    opj_flag_t *flagsp,
+    opj_colflag_t *colflagsp,
+    OPJ_INT32 *datap,
+    OPJ_INT32 poshalf,
+    OPJ_INT32 neghalf,
+    OPJ_INT32 vsc,
+    OPJ_UINT32 row);
 
 
 
@@ -204,73 +205,73 @@ static INLINE void opj_t1_dec_refpass_step_mqc_vsc(
 Encode clean-up pass
 */
 static void opj_t1_enc_clnpass_step(
-               opj_t1_t *t1,
-               opj_flag_t *flagsp,
-               OPJ_INT32 *datap,
-               OPJ_INT32 bpno,
-               OPJ_INT32 one,
-               OPJ_INT32 *nmsedec,
-               OPJ_UINT32 partial,
-               OPJ_UINT32 vsc);
+    opj_t1_t *t1,
+    opj_flag_t *flagsp,
+    OPJ_INT32 *datap,
+    OPJ_INT32 bpno,
+    OPJ_INT32 one,
+    OPJ_INT32 *nmsedec,
+    OPJ_UINT32 partial,
+    OPJ_UINT32 vsc);
 /**
 Decode clean-up pass
 */
 static void opj_t1_dec_clnpass_step_partial(
-               opj_t1_t *t1,
-               opj_flag_t *flagsp,
-               opj_colflag_t *colflagsp,
-               OPJ_INT32 *datap,
-               OPJ_INT32 oneplushalf,
-               OPJ_UINT32 row);
+    opj_t1_t *t1,
+    opj_flag_t *flagsp,
+    opj_colflag_t *colflagsp,
+    OPJ_INT32 *datap,
+    OPJ_INT32 oneplushalf,
+    OPJ_UINT32 row);
 static void opj_t1_dec_clnpass_step(
-               opj_t1_t *t1,
-               opj_flag_t *flagsp,
-               opj_colflag_t *colflagsp,
-               OPJ_INT32 *datap,
-               OPJ_INT32 oneplushalf,
-               OPJ_UINT32 row);
+    opj_t1_t *t1,
+    opj_flag_t *flagsp,
+    opj_colflag_t *colflagsp,
+    OPJ_INT32 *datap,
+    OPJ_INT32 oneplushalf,
+    OPJ_UINT32 row);
 static void opj_t1_dec_clnpass_step_vsc(
-               opj_t1_t *t1,
-               opj_flag_t *flagsp,
-               opj_colflag_t *colflagsp,
-               OPJ_INT32 *datap,
-               OPJ_INT32 oneplushalf,
-               OPJ_INT32 partial,
-               OPJ_INT32 vsc,
-               OPJ_UINT32 row);
+    opj_t1_t *t1,
+    opj_flag_t *flagsp,
+    opj_colflag_t *colflagsp,
+    OPJ_INT32 *datap,
+    OPJ_INT32 oneplushalf,
+    OPJ_INT32 partial,
+    OPJ_INT32 vsc,
+    OPJ_UINT32 row);
 /**
 Encode clean-up pass
 */
 static void opj_t1_enc_clnpass(
-               opj_t1_t *t1,
-               OPJ_INT32 bpno,
-               OPJ_INT32 *nmsedec,
-               OPJ_UINT32 cblksty);
+    opj_t1_t *t1,
+    OPJ_INT32 bpno,
+    OPJ_INT32 *nmsedec,
+    OPJ_UINT32 cblksty);
 
 static OPJ_FLOAT64 opj_t1_getwmsedec(
-               OPJ_INT32 nmsedec,
-               OPJ_UINT32 compno,
-               OPJ_UINT32 level,
-               OPJ_UINT32 orient,
-               OPJ_INT32 bpno,
-               OPJ_UINT32 qmfbid,
-               OPJ_FLOAT64 stepsize,
-               OPJ_UINT32 numcomps,
-               const OPJ_FLOAT64 * mct_norms,
-               OPJ_UINT32 mct_numcomps);
-
-static void opj_t1_encode_cblk( opj_t1_t *t1,
-                                opj_tcd_cblk_enc_t* cblk,
-                                OPJ_UINT32 orient,
-                                OPJ_UINT32 compno,
-                                OPJ_UINT32 level,
-                                OPJ_UINT32 qmfbid,
-                                OPJ_FLOAT64 stepsize,
-                                OPJ_UINT32 cblksty,
-                                OPJ_UINT32 numcomps,
-                                opj_tcd_tile_t * tile,
-                                const OPJ_FLOAT64 * mct_norms,
-                                OPJ_UINT32 mct_numcomps);
+    OPJ_INT32 nmsedec,
+    OPJ_UINT32 compno,
+    OPJ_UINT32 level,
+    OPJ_UINT32 orient,
+    OPJ_INT32 bpno,
+    OPJ_UINT32 qmfbid,
+    OPJ_FLOAT64 stepsize,
+    OPJ_UINT32 numcomps,
+    const OPJ_FLOAT64 * mct_norms,
+    OPJ_UINT32 mct_numcomps);
+
+static void opj_t1_encode_cblk(opj_t1_t *t1,
+                               opj_tcd_cblk_enc_t* cblk,
+                               OPJ_UINT32 orient,
+                               OPJ_UINT32 compno,
+                               OPJ_UINT32 level,
+                               OPJ_UINT32 qmfbid,
+                               OPJ_FLOAT64 stepsize,
+                               OPJ_UINT32 cblksty,
+                               OPJ_UINT32 numcomps,
+                               opj_tcd_tile_t * tile,
+                               const OPJ_FLOAT64 * mct_norms,
+                               OPJ_UINT32 mct_numcomps);
 
 /**
 Decode 1 code-block
@@ -280,15 +281,15 @@ Decode 1 code-block
 @param roishift Region of interest shifting value
 @param cblksty Code-block style
 */
-static OPJ_BOOL opj_t1_decode_cblk( opj_t1_t *t1,
-                                    opj_tcd_cblk_dec_t* cblk,
-                                    OPJ_UINT32 orient,
-                                    OPJ_UINT32 roishift,
-                                    OPJ_UINT32 cblksty);
+static OPJ_BOOL opj_t1_decode_cblk(opj_t1_t *t1,
+                                   opj_tcd_cblk_dec_t* cblk,
+                                   OPJ_UINT32 orient,
+                                   OPJ_UINT32 roishift,
+                                   OPJ_UINT32 cblksty);
 
-static OPJ_BOOL opj_t1_allocate_buffers(   opj_t1_t *t1,
-                                    OPJ_UINT32 w,
-                                    OPJ_UINT32 h);
+static OPJ_BOOL opj_t1_allocate_buffers(opj_t1_t *t1,
+                                        OPJ_UINT32 w,
+                                        OPJ_UINT32 h);
 
 /*@}*/
 
@@ -296,293 +297,315 @@ static OPJ_BOOL opj_t1_allocate_buffers(   opj_t1_t *t1,
 
 /* ----------------------------------------------------------------------- */
 
-static OPJ_BYTE opj_t1_getctxno_zc(opj_mqc_t *mqc, OPJ_UINT32 f) {
-       return mqc->lut_ctxno_zc_orient[(f & T1_SIG_OTH)];
+static OPJ_BYTE opj_t1_getctxno_zc(opj_mqc_t *mqc, OPJ_UINT32 f)
+{
+    return mqc->lut_ctxno_zc_orient[(f & T1_SIG_OTH)];
 }
 
-static OPJ_BYTE opj_t1_getctxno_sc(OPJ_UINT32 f) {
-       return lut_ctxno_sc[(f & (T1_SIG_PRIM | T1_SGN)) >> 4];
+static OPJ_BYTE opj_t1_getctxno_sc(OPJ_UINT32 f)
+{
+    return lut_ctxno_sc[(f & (T1_SIG_PRIM | T1_SGN)) >> 4];
 }
 
-static OPJ_UINT32 opj_t1_getctxno_mag(OPJ_UINT32 f) {
-       OPJ_UINT32 tmp1 = (f & T1_SIG_OTH) ? T1_CTXNO_MAG + 1 : T1_CTXNO_MAG;
-       OPJ_UINT32 tmp2 = (f & T1_REFINE) ? T1_CTXNO_MAG + 2 : tmp1;
-       return (tmp2);
+static OPJ_UINT32 opj_t1_getctxno_mag(OPJ_UINT32 f)
+{
+    OPJ_UINT32 tmp1 = (f & T1_SIG_OTH) ? T1_CTXNO_MAG + 1 : T1_CTXNO_MAG;
+    OPJ_UINT32 tmp2 = (f & T1_REFINE) ? T1_CTXNO_MAG + 2 : tmp1;
+    return (tmp2);
 }
 
-static OPJ_BYTE opj_t1_getspb(OPJ_UINT32 f) {
-       return lut_spb[(f & (T1_SIG_PRIM | T1_SGN)) >> 4];
+static OPJ_BYTE opj_t1_getspb(OPJ_UINT32 f)
+{
+    return lut_spb[(f & (T1_SIG_PRIM | T1_SGN)) >> 4];
 }
 
-static OPJ_INT16 opj_t1_getnmsedec_sig(OPJ_UINT32 x, OPJ_UINT32 bitpos) {
-       if (bitpos > 0) {
-               return lut_nmsedec_sig[(x >> (bitpos)) & ((1 << T1_NMSEDEC_BITS) - 1)];
-       }
-       
-       return lut_nmsedec_sig0[x & ((1 << T1_NMSEDEC_BITS) - 1)];
+static OPJ_INT16 opj_t1_getnmsedec_sig(OPJ_UINT32 x, OPJ_UINT32 bitpos)
+{
+    if (bitpos > 0) {
+        return lut_nmsedec_sig[(x >> (bitpos)) & ((1 << T1_NMSEDEC_BITS) - 1)];
+    }
+
+    return lut_nmsedec_sig0[x & ((1 << T1_NMSEDEC_BITS) - 1)];
 }
 
-static OPJ_INT16 opj_t1_getnmsedec_ref(OPJ_UINT32 x, OPJ_UINT32 bitpos) {
-       if (bitpos > 0) {
-               return lut_nmsedec_ref[(x >> (bitpos)) & ((1 << T1_NMSEDEC_BITS) - 1)];
-       }
+static OPJ_INT16 opj_t1_getnmsedec_ref(OPJ_UINT32 x, OPJ_UINT32 bitpos)
+{
+    if (bitpos > 0) {
+        return lut_nmsedec_ref[(x >> (bitpos)) & ((1 << T1_NMSEDEC_BITS) - 1)];
+    }
 
     return lut_nmsedec_ref0[x & ((1 << T1_NMSEDEC_BITS) - 1)];
 }
 
-static INLINE void opj_t1_updateflags(opj_flag_t *flagsp, OPJ_UINT32 s, OPJ_UINT32 stride) {
-       opj_flag_t *np = flagsp - stride;
-       opj_flag_t *sp = flagsp + stride;
+static INLINE void opj_t1_updateflags(opj_flag_t *flagsp, OPJ_UINT32 s,
+                                      OPJ_UINT32 stride)
+{
+    opj_flag_t *np = flagsp - stride;
+    opj_flag_t *sp = flagsp + stride;
 
-       /* We strongly rely on (T1_SGN_N == 0x0100) == (T1_SIG_N == 0x0010) << 4 */
-       /* and T1_SIG_E == T1_SIG_N << 1, T1_SIG_W == T1_SIG_N << 2 and T1_SIG_S == T1_SIG_N << 2 */
-       /* and T1_SGN_E == T1_SGN_N << 1, T1_SGN_W == T1_SGN_N << 2 and T1_SGN_S == T1_SGN_N << 2 */
+    /* We strongly rely on (T1_SGN_N == 0x0100) == (T1_SIG_N == 0x0010) << 4 */
+    /* and T1_SIG_E == T1_SIG_N << 1, T1_SIG_W == T1_SIG_N << 2 and T1_SIG_S == T1_SIG_N << 2 */
+    /* and T1_SGN_E == T1_SGN_N << 1, T1_SGN_W == T1_SGN_N << 2 and T1_SGN_S == T1_SGN_N << 2 */
 
-       unsigned int flag_N = T1_SIG_N | ((unsigned int)T1_SIG_N << (4U * s));
+    unsigned int flag_N = T1_SIG_N | ((unsigned int)T1_SIG_N << (4U * s));
 
-       np[-1] |= T1_SIG_SE;
-       np[0]  |= (opj_flag_t)(flag_N << 2U);
-       np[1]  |= T1_SIG_SW;
+    np[-1] |= T1_SIG_SE;
+    np[0]  |= (opj_flag_t)(flag_N << 2U);
+    np[1]  |= T1_SIG_SW;
 
-       flagsp[-1] |= (opj_flag_t)(flag_N << 1U);
-       flagsp[0]  |= T1_SIG;
-       flagsp[1]  |= (opj_flag_t)(flag_N << 3U);
+    flagsp[-1] |= (opj_flag_t)(flag_N << 1U);
+    flagsp[0]  |= T1_SIG;
+    flagsp[1]  |= (opj_flag_t)(flag_N << 3U);
 
-       sp[-1] |= T1_SIG_NE;
-       sp[0]  |= (opj_flag_t)flag_N;
-       sp[1]  |= T1_SIG_NW;
+    sp[-1] |= T1_SIG_NE;
+    sp[0]  |= (opj_flag_t)flag_N;
+    sp[1]  |= T1_SIG_NW;
 }
 
-static INLINE void opj_t1_updateflagscolflags(opj_flag_t *flagsp, opj_colflag_t *colflagsp, OPJ_UINT32 s, OPJ_UINT32 stride, OPJ_UINT32 row)
+static INLINE void opj_t1_updateflagscolflags(opj_flag_t *flagsp,
+        opj_colflag_t *colflagsp, OPJ_UINT32 s, OPJ_UINT32 stride, OPJ_UINT32 row)
 {
-       opj_t1_updateflags(flagsp, s, stride);
-       if( row == 0U )
-       {
-                       *colflagsp |= (opj_colflag_t)((T1_COLFLAG_SIG_ROW_0 <<  (T1_COLFLAG_RBS * row)) |
-                                                 (T1_COLFLAG_SIG_OTHER_ROW_0 <<  (T1_COLFLAG_RBS * (row+1U))));
-                       *(colflagsp - 1) |= (opj_colflag_t)((T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * row)) |
-                                                           (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row+1U))));
-                       *(colflagsp + 1) |= (opj_colflag_t)((T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * row)) |
-                                                               (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row+1U))));
-                       *(colflagsp - stride - 1) |= (T1_COLFLAG_SIG_OTHER_ROW_3);
-                       *(colflagsp - stride) |= (T1_COLFLAG_SIG_OTHER_ROW_3);
-                       *(colflagsp - stride + 1) |= (T1_COLFLAG_SIG_OTHER_ROW_3);
-       }
-       else if( row == 3U )
-       {
-                       *colflagsp |= (opj_colflag_t)((T1_COLFLAG_SIG_ROW_0 <<  (T1_COLFLAG_RBS * row)) |
-                                                 (T1_COLFLAG_SIG_OTHER_ROW_0 <<  (T1_COLFLAG_RBS * (row-1U))));
-                       *(colflagsp - 1) |= (opj_colflag_t)((T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * row)) |
-                                                           (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row-1U))));
-                       *(colflagsp + 1) |= (opj_colflag_t)((T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * row)) |
-                                                               (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS* (row-1))));
-                       *(colflagsp + stride - 1) |= (T1_COLFLAG_SIG_OTHER_ROW_0);
-                       *(colflagsp + stride) |= (T1_COLFLAG_SIG_OTHER_ROW_0);
-                       *(colflagsp + stride + 1) |= (T1_COLFLAG_SIG_OTHER_ROW_0);
-       }
-       else
-       {
-                       *(colflagsp - 1) |= (opj_colflag_t)((T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * row)) |
-                                                               (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row-1U))) |
-                                                               (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row+1U))));
-                       *colflagsp |= (opj_colflag_t)((T1_COLFLAG_SIG_ROW_0 <<  (T1_COLFLAG_RBS * row)) |
-                                                 (T1_COLFLAG_SIG_OTHER_ROW_0 <<  (T1_COLFLAG_RBS * (row-1U))) |
-                                                 (T1_COLFLAG_SIG_OTHER_ROW_0 <<  (T1_COLFLAG_RBS * (row+1U))));
-                       *(colflagsp + 1) |= (opj_colflag_t)((T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * row)) |
-                                                               (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row-1U))) |
-                                                               (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row+1U))));
-       }
+    opj_t1_updateflags(flagsp, s, stride);
+    if (row == 0U) {
+        *colflagsp |= (opj_colflag_t)((T1_COLFLAG_SIG_ROW_0 << (T1_COLFLAG_RBS * row)) |
+                                      (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row + 1U))));
+        *(colflagsp - 1) |= (opj_colflag_t)((T1_COLFLAG_SIG_OTHER_ROW_0 <<
+                                             (T1_COLFLAG_RBS * row)) |
+                                            (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row + 1U))));
+        *(colflagsp + 1) |= (opj_colflag_t)((T1_COLFLAG_SIG_OTHER_ROW_0 <<
+                                             (T1_COLFLAG_RBS * row)) |
+                                            (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row + 1U))));
+        *(colflagsp - stride - 1) |= (T1_COLFLAG_SIG_OTHER_ROW_3);
+        *(colflagsp - stride) |= (T1_COLFLAG_SIG_OTHER_ROW_3);
+        *(colflagsp - stride + 1) |= (T1_COLFLAG_SIG_OTHER_ROW_3);
+    } else if (row == 3U) {
+        *colflagsp |= (opj_colflag_t)((T1_COLFLAG_SIG_ROW_0 << (T1_COLFLAG_RBS * row)) |
+                                      (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row - 1U))));
+        *(colflagsp - 1) |= (opj_colflag_t)((T1_COLFLAG_SIG_OTHER_ROW_0 <<
+                                             (T1_COLFLAG_RBS * row)) |
+                                            (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row - 1U))));
+        *(colflagsp + 1) |= (opj_colflag_t)((T1_COLFLAG_SIG_OTHER_ROW_0 <<
+                                             (T1_COLFLAG_RBS * row)) |
+                                            (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row - 1))));
+        *(colflagsp + stride - 1) |= (T1_COLFLAG_SIG_OTHER_ROW_0);
+        *(colflagsp + stride) |= (T1_COLFLAG_SIG_OTHER_ROW_0);
+        *(colflagsp + stride + 1) |= (T1_COLFLAG_SIG_OTHER_ROW_0);
+    } else {
+        *(colflagsp - 1) |= (opj_colflag_t)((T1_COLFLAG_SIG_OTHER_ROW_0 <<
+                                             (T1_COLFLAG_RBS * row)) |
+                                            (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row - 1U))) |
+                                            (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row + 1U))));
+        *colflagsp |= (opj_colflag_t)((T1_COLFLAG_SIG_ROW_0 << (T1_COLFLAG_RBS * row)) |
+                                      (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row - 1U))) |
+                                      (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row + 1U))));
+        *(colflagsp + 1) |= (opj_colflag_t)((T1_COLFLAG_SIG_OTHER_ROW_0 <<
+                                             (T1_COLFLAG_RBS * row)) |
+                                            (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row - 1U))) |
+                                            (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * (row + 1U))));
+    }
 }
 
-static void opj_t1_enc_sigpass_step(   opj_t1_t *t1,
-                                opj_flag_t *flagsp,
-                                OPJ_INT32 *datap,
-                                OPJ_INT32 bpno,
-                                OPJ_INT32 one,
-                                OPJ_INT32 *nmsedec,
-                                OPJ_BYTE type,
-                                OPJ_UINT32 vsc
-                                )
+static void opj_t1_enc_sigpass_step(opj_t1_t *t1,
+                                    opj_flag_t *flagsp,
+                                    OPJ_INT32 *datap,
+                                    OPJ_INT32 bpno,
+                                    OPJ_INT32 one,
+                                    OPJ_INT32 *nmsedec,
+                                    OPJ_BYTE type,
+                                    OPJ_UINT32 vsc
+                                   )
 {
-       OPJ_INT32 v;
+    OPJ_INT32 v;
     OPJ_UINT32 flag;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       flag = vsc ? (OPJ_UINT32)((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (OPJ_UINT32)(*flagsp);
-       if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) {
-               v = (opj_int_abs(*datap) & one) ? 1 : 0;
-               opj_mqc_setcurctx(mqc, opj_t1_getctxno_zc(mqc, flag));  /* ESSAI */
-               if (type == T1_TYPE_RAW) {      /* BYPASS/LAZY MODE */
-                       opj_mqc_bypass_enc(mqc, (OPJ_UINT32)v);
-               } else {
-                       opj_mqc_encode(mqc, (OPJ_UINT32)v);
-               }
-               if (v) {
-                       v = *datap < 0 ? 1 : 0;
-                       *nmsedec +=     opj_t1_getnmsedec_sig((OPJ_UINT32)opj_int_abs(*datap), (OPJ_UINT32)(bpno));
-                       opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc(flag));       /* ESSAI */
-                       if (type == T1_TYPE_RAW) {      /* BYPASS/LAZY MODE */
-                               opj_mqc_bypass_enc(mqc, (OPJ_UINT32)v);
-                       } else {
-                               opj_mqc_encode(mqc, (OPJ_UINT32)(v ^ opj_t1_getspb((OPJ_UINT32)flag)));
-                       }
-                       opj_t1_updateflags(flagsp, (OPJ_UINT32)v, t1->flags_stride);
-               }
-               *flagsp |= T1_VISIT;
-       }
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = vsc ? (OPJ_UINT32)((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW |
+                                           T1_SGN_S))) : (OPJ_UINT32)(*flagsp);
+    if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) {
+        v = (opj_int_abs(*datap) & one) ? 1 : 0;
+        opj_mqc_setcurctx(mqc, opj_t1_getctxno_zc(mqc, flag));  /* ESSAI */
+        if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
+            opj_mqc_bypass_enc(mqc, (OPJ_UINT32)v);
+        } else {
+            opj_mqc_encode(mqc, (OPJ_UINT32)v);
+        }
+        if (v) {
+            v = *datap < 0 ? 1 : 0;
+            *nmsedec += opj_t1_getnmsedec_sig((OPJ_UINT32)opj_int_abs(*datap),
+                                              (OPJ_UINT32)(bpno));
+            opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc(flag));   /* ESSAI */
+            if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
+                opj_mqc_bypass_enc(mqc, (OPJ_UINT32)v);
+            } else {
+                opj_mqc_encode(mqc, (OPJ_UINT32)(v ^ opj_t1_getspb((OPJ_UINT32)flag)));
+            }
+            opj_t1_updateflags(flagsp, (OPJ_UINT32)v, t1->flags_stride);
+        }
+        *flagsp |= T1_VISIT;
+    }
 }
 
 
 static INLINE void opj_t1_dec_sigpass_step_raw(
-                opj_t1_t *t1,
-                opj_flag_t *flagsp,
-                opj_colflag_t* colflagsp,
-                OPJ_INT32 *datap,
-                OPJ_INT32 oneplushalf,
-                OPJ_INT32 vsc,
-                OPJ_UINT32 row)
+    opj_t1_t *t1,
+    opj_flag_t *flagsp,
+    opj_colflag_t* colflagsp,
+    OPJ_INT32 *datap,
+    OPJ_INT32 oneplushalf,
+    OPJ_INT32 vsc,
+    OPJ_UINT32 row)
 {
-        OPJ_UINT32 v, flag;
-        opj_raw_t *raw = t1->raw;       /* RAW component */
-
-        flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp);
-        if ((flag & T1_SIG_OTH) && !(*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) << (T1_COLFLAG_RBS * row)))) {
-                        if (opj_raw_decode(raw)) {
-                                v = opj_raw_decode(raw);    /* ESSAI */
-                                *datap = v ? -oneplushalf : oneplushalf;
-                                opj_t1_updateflagscolflags(flagsp, colflagsp, v, t1->flags_stride, row);
-                        }
+    OPJ_UINT32 v, flag;
+    opj_raw_t *raw = t1->raw;       /* RAW component */
+
+    flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) :
+           (*flagsp);
+    if ((flag & T1_SIG_OTH) &&
+            !(*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) <<
+                            (T1_COLFLAG_RBS * row)))) {
+        if (opj_raw_decode(raw)) {
+            v = opj_raw_decode(raw);    /* ESSAI */
+            *datap = v ? -oneplushalf : oneplushalf;
+            opj_t1_updateflagscolflags(flagsp, colflagsp, v, t1->flags_stride, row);
+        }
 #ifdef CONSISTENCY_CHECK
-                *flagsp |= T1_VISIT;
+        *flagsp |= T1_VISIT;
 #endif
-                *colflagsp |= (opj_colflag_t)(T1_COLFLAG_VISIT_ROW_0 << (T1_COLFLAG_RBS * row));
-        }
-}      
+        *colflagsp |= (opj_colflag_t)(T1_COLFLAG_VISIT_ROW_0 << (T1_COLFLAG_RBS * row));
+    }
+}
 
 static INLINE void opj_t1_dec_sigpass_step_mqc(
-                opj_t1_t *t1,
-                opj_flag_t *flagsp,
-                opj_colflag_t* colflagsp,
-                OPJ_INT32 *datap,
-                OPJ_INT32 oneplushalf,
-                OPJ_UINT32 row,
-                OPJ_UINT32 flags_stride)
+    opj_t1_t *t1,
+    opj_flag_t *flagsp,
+    opj_colflag_t* colflagsp,
+    OPJ_INT32 *datap,
+    OPJ_INT32 oneplushalf,
+    OPJ_UINT32 row,
+    OPJ_UINT32 flags_stride)
 {
-        OPJ_INT32 v, flag;
-       
-        opj_mqc_t *mqc = t1->mqc;       /* MQC component */
+    OPJ_INT32 v, flag;
+
+    opj_mqc_t *mqc = t1->mqc;       /* MQC component */
 #ifdef CONSISTENCY_CHECK
-               assert( ((*flagsp & T1_SIG_OTH) && !(*flagsp & (T1_SIG | T1_VISIT))) ==
-                               ((*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0 | T1_COLFLAG_SIG_OTHER_ROW_0) << (T1_COLFLAG_RBS * row))) ==
-                                 (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * row))) );
+    assert(((*flagsp & T1_SIG_OTH) && !(*flagsp & (T1_SIG | T1_VISIT))) ==
+           ((*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0 |
+                            T1_COLFLAG_SIG_OTHER_ROW_0) << (T1_COLFLAG_RBS * row))) ==
+            (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * row))));
 #endif
-        if( (*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0 | T1_COLFLAG_SIG_OTHER_ROW_0) << (T1_COLFLAG_RBS * row))) ==
-            (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * row)) ) {
-                        flag = *flagsp;
-                        opj_mqc_setcurctx(mqc, opj_t1_getctxno_zc(mqc, (OPJ_UINT32)flag));
-                        if (opj_mqc_decode(mqc)) {
-                                opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc((OPJ_UINT32)flag));
-                                v = opj_mqc_decode(mqc) ^ opj_t1_getspb((OPJ_UINT32)flag);
-                                *datap = v ? -oneplushalf : oneplushalf;
-                                opj_t1_updateflagscolflags(flagsp, colflagsp, (OPJ_UINT32)v, flags_stride, row);
-                        }
+    if ((*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0 |
+                        T1_COLFLAG_SIG_OTHER_ROW_0) << (T1_COLFLAG_RBS * row))) ==
+            (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * row))) {
+        flag = *flagsp;
+        opj_mqc_setcurctx(mqc, opj_t1_getctxno_zc(mqc, (OPJ_UINT32)flag));
+        if (opj_mqc_decode(mqc)) {
+            opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc((OPJ_UINT32)flag));
+            v = opj_mqc_decode(mqc) ^ opj_t1_getspb((OPJ_UINT32)flag);
+            *datap = v ? -oneplushalf : oneplushalf;
+            opj_t1_updateflagscolflags(flagsp, colflagsp, (OPJ_UINT32)v, flags_stride, row);
+        }
 #ifdef CONSISTENCY_CHECK
-                *flagsp |= T1_VISIT;
+        *flagsp |= T1_VISIT;
 #endif
-                *colflagsp |= (opj_colflag_t)(T1_COLFLAG_VISIT_ROW_0 << (T1_COLFLAG_RBS * row));
-        }
+        *colflagsp |= (opj_colflag_t)(T1_COLFLAG_VISIT_ROW_0 << (T1_COLFLAG_RBS * row));
+    }
 }                               /* VSC and  BYPASS by Antonin */
 
 static INLINE void opj_t1_dec_sigpass_step_mqc_vsc(
-                opj_t1_t *t1,
-                opj_flag_t *flagsp,
-                opj_colflag_t* colflagsp,
-                OPJ_INT32 *datap,
-                OPJ_INT32 oneplushalf,
-                OPJ_INT32 vsc,
-                OPJ_UINT32 row)
+    opj_t1_t *t1,
+    opj_flag_t *flagsp,
+    opj_colflag_t* colflagsp,
+    OPJ_INT32 *datap,
+    OPJ_INT32 oneplushalf,
+    OPJ_INT32 vsc,
+    OPJ_UINT32 row)
 {
-        OPJ_UINT32 v, flag;
-       
-        opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-        flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp);
-        if ((flag & T1_SIG_OTH) && !(*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) << (T1_COLFLAG_RBS * row)))) {
-                opj_mqc_setcurctx(mqc, opj_t1_getctxno_zc(mqc, flag));
-                if (opj_mqc_decode(mqc)) {
-                        opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc(flag));
-                        v = (OPJ_UINT32)opj_mqc_decode(mqc) ^ opj_t1_getspb(flag);
-                        *datap = v ? -oneplushalf : oneplushalf;
-                        opj_t1_updateflagscolflags(flagsp, colflagsp, v, t1->flags_stride, row);
-                }
+    OPJ_UINT32 v, flag;
+
+    opj_mqc_t *mqc = t1->mqc;       /* MQC component */
+
+    flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) :
+           (*flagsp);
+    if ((flag & T1_SIG_OTH) &&
+            !(*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) <<
+                            (T1_COLFLAG_RBS * row)))) {
+        opj_mqc_setcurctx(mqc, opj_t1_getctxno_zc(mqc, flag));
+        if (opj_mqc_decode(mqc)) {
+            opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc(flag));
+            v = (OPJ_UINT32)opj_mqc_decode(mqc) ^ opj_t1_getspb(flag);
+            *datap = v ? -oneplushalf : oneplushalf;
+            opj_t1_updateflagscolflags(flagsp, colflagsp, v, t1->flags_stride, row);
+        }
 #ifdef CONSISTENCY_CHECK
-                *flagsp |= T1_VISIT;
+        *flagsp |= T1_VISIT;
 #endif
-                *colflagsp |= (opj_colflag_t)(T1_COLFLAG_VISIT_ROW_0 << (T1_COLFLAG_RBS * row));
-        }
+        *colflagsp |= (opj_colflag_t)(T1_COLFLAG_VISIT_ROW_0 << (T1_COLFLAG_RBS * row));
+    }
 }                               /* VSC and  BYPASS by Antonin */
 
 
 
 static void opj_t1_enc_sigpass(opj_t1_t *t1,
-                        OPJ_INT32 bpno,
-                        OPJ_INT32 *nmsedec,
-                        OPJ_BYTE type,
-                        OPJ_UINT32 cblksty
-                        )
+                               OPJ_INT32 bpno,
+                               OPJ_INT32 *nmsedec,
+                               OPJ_BYTE type,
+                               OPJ_UINT32 cblksty
+                              )
 {
-       OPJ_UINT32 i, j, k, vsc; 
+    OPJ_UINT32 i, j, k, vsc;
     OPJ_INT32 one;
 
-       *nmsedec = 0;
-       one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
-       for (k = 0; k < t1->h; k += 4) {
-               for (i = 0; i < t1->w; ++i) {
-                       for (j = k; j < k + 4 && j < t1->h; ++j) {
-                               vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 || j == t1->h - 1)) ? 1 : 0;
-                               opj_t1_enc_sigpass_step(
-                                               t1,
-                                               &t1->flags[((j+1) * t1->flags_stride) + i + 1],
-                                               &t1->data[(j * t1->data_stride) + i],
-                                               bpno,
-                                               one,
-                                               nmsedec,
-                                               type,
-                                               vsc);
-                       }
-               }
-       }
+    *nmsedec = 0;
+    one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
+    for (k = 0; k < t1->h; k += 4) {
+        for (i = 0; i < t1->w; ++i) {
+            for (j = k; j < k + 4 && j < t1->h; ++j) {
+                vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 ||
+                        j == t1->h - 1)) ? 1 : 0;
+                opj_t1_enc_sigpass_step(
+                    t1,
+                    &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
+                    &t1->data[(j * t1->data_stride) + i],
+                    bpno,
+                    one,
+                    nmsedec,
+                    type,
+                    vsc);
+            }
+        }
+    }
 }
 
 static void opj_t1_dec_sigpass_raw(
-                opj_t1_t *t1,
-                OPJ_INT32 bpno,
-                OPJ_INT32 cblksty)
+    opj_t1_t *t1,
+    OPJ_INT32 bpno,
+    OPJ_INT32 cblksty)
 {
-        OPJ_INT32 one, half, oneplushalf, vsc;
-        OPJ_UINT32 i, j, k; 
-        opj_colflag_t *colflags1 = &t1->colflags[t1->flags_stride + 1];
-        one = 1 << bpno;
-        half = one >> 1;
-        oneplushalf = one | half;
-        for (k = 0; k < t1->h; k += 4) {
-                for (i = 0; i < t1->w; ++i) {
-                        opj_colflag_t *colflags2 = colflags1 + i;
-                        for (j = k; j < k + 4 && j < t1->h; ++j) {
-                                vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 || j == t1->h - 1)) ? 1 : 0;
-                                opj_t1_dec_sigpass_step_raw(
-                                                t1,
-                                                &t1->flags[((j+1) * t1->flags_stride) + i + 1],
-                                                colflags2,
-                                                &t1->data[(j * t1->w) + i],
-                                                oneplushalf,
-                                                vsc,
-                                                j - k);
-                        }
-                }
-                colflags1 += t1->flags_stride;
+    OPJ_INT32 one, half, oneplushalf, vsc;
+    OPJ_UINT32 i, j, k;
+    opj_colflag_t *colflags1 = &t1->colflags[t1->flags_stride + 1];
+    one = 1 << bpno;
+    half = one >> 1;
+    oneplushalf = one | half;
+    for (k = 0; k < t1->h; k += 4) {
+        for (i = 0; i < t1->w; ++i) {
+            opj_colflag_t *colflags2 = colflags1 + i;
+            for (j = k; j < k + 4 && j < t1->h; ++j) {
+                vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 ||
+                        j == t1->h - 1)) ? 1 : 0;
+                opj_t1_dec_sigpass_step_raw(
+                    t1,
+                    &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
+                    colflags2,
+                    &t1->data[(j * t1->w) + i],
+                    oneplushalf,
+                    vsc,
+                    j - k);
+            }
         }
+        colflags1 += t1->flags_stride;
+    }
 }                               /* VSC and  BYPASS by Antonin */
 
 #define opj_t1_dec_sigpass_mqc_internal(t1, bpno, w, h, flags_stride) \
@@ -631,238 +654,257 @@ static void opj_t1_dec_sigpass_raw(
 }
 
 static void opj_t1_dec_sigpass_mqc_64x64(
-                opj_t1_t *t1,
-                OPJ_INT32 bpno)
+    opj_t1_t *t1,
+    OPJ_INT32 bpno)
 {
-       opj_t1_dec_sigpass_mqc_internal(t1, bpno, 64, 64, 66);
+    opj_t1_dec_sigpass_mqc_internal(t1, bpno, 64, 64, 66);
 }
 
 static void opj_t1_dec_sigpass_mqc_generic(
-                opj_t1_t *t1,
-                OPJ_INT32 bpno)
+    opj_t1_t *t1,
+    OPJ_INT32 bpno)
 {
-       opj_t1_dec_sigpass_mqc_internal(t1, bpno, t1->w, t1->h, t1->flags_stride);
+    opj_t1_dec_sigpass_mqc_internal(t1, bpno, t1->w, t1->h, t1->flags_stride);
 }
 
 /* VSC and  BYPASS by Antonin */
 static void opj_t1_dec_sigpass_mqc_vsc(
-                opj_t1_t *t1,
-                OPJ_INT32 bpno)
+    opj_t1_t *t1,
+    OPJ_INT32 bpno)
 {
-        OPJ_INT32 one, half, oneplushalf, vsc;
-        OPJ_UINT32 i, j, k;
-        OPJ_INT32 *data1 = t1->data;
-        opj_flag_t *flags1 = &t1->flags[1];
-        opj_colflag_t *colflags1 = &t1->colflags[t1->flags_stride + 1];
-        one = 1 << bpno;
-        half = one >> 1;
-        oneplushalf = one | half;
-        for (k = 0; k < (t1->h & ~(OPJ_UINT32)3); k += 4U) {
-                for (i = 0; i < t1->w; ++i) {
-                        OPJ_INT32 *data2 = data1 + i;
-                        opj_flag_t *flags2 = flags1 + i;
-                        opj_colflag_t *colflags2 = colflags1 + i;
-                        flags2 += t1->flags_stride;
-                        opj_t1_dec_sigpass_step_mqc_vsc(t1, flags2, colflags2, data2, oneplushalf, 0, 0U);
-                        data2 += t1->w;
-                        flags2 += t1->flags_stride;
-                        opj_t1_dec_sigpass_step_mqc_vsc(t1, flags2, colflags2, data2, oneplushalf, 0, 1U);
-                        data2 += t1->w;
-                        flags2 += t1->flags_stride;
-                        opj_t1_dec_sigpass_step_mqc_vsc(t1, flags2, colflags2, data2, oneplushalf, 0, 2U);
-                        data2 += t1->w;
-                        flags2 += t1->flags_stride;
-                        opj_t1_dec_sigpass_step_mqc_vsc(t1, flags2, colflags2, data2, oneplushalf, 1, 3U);
-                        data2 += t1->w;
-                }
-                data1 += t1->w << 2;
-                flags1 += t1->flags_stride << 2;
-                colflags1 += t1->flags_stride;
-        }
+    OPJ_INT32 one, half, oneplushalf, vsc;
+    OPJ_UINT32 i, j, k;
+    OPJ_INT32 *data1 = t1->data;
+    opj_flag_t *flags1 = &t1->flags[1];
+    opj_colflag_t *colflags1 = &t1->colflags[t1->flags_stride + 1];
+    one = 1 << bpno;
+    half = one >> 1;
+    oneplushalf = one | half;
+    for (k = 0; k < (t1->h & ~(OPJ_UINT32)3); k += 4U) {
         for (i = 0; i < t1->w; ++i) {
-                opj_colflag_t *colflags2 = colflags1 + i;
-                for (j = k; j < t1->h; ++j) {
-                        vsc = (j == t1->h - 1) ? 1 : 0;
-                        opj_t1_dec_sigpass_step_mqc_vsc(
-                                        t1,
-                                        &t1->flags[((j+1) * t1->flags_stride) + i + 1],
-                                        colflags2,
-                                        &t1->data[(j * t1->w) + i],
-                                        oneplushalf,
-                                        vsc,
-                                        j - k);
-                }
+            OPJ_INT32 *data2 = data1 + i;
+            opj_flag_t *flags2 = flags1 + i;
+            opj_colflag_t *colflags2 = colflags1 + i;
+            flags2 += t1->flags_stride;
+            opj_t1_dec_sigpass_step_mqc_vsc(t1, flags2, colflags2, data2, oneplushalf, 0,
+                                            0U);
+            data2 += t1->w;
+            flags2 += t1->flags_stride;
+            opj_t1_dec_sigpass_step_mqc_vsc(t1, flags2, colflags2, data2, oneplushalf, 0,
+                                            1U);
+            data2 += t1->w;
+            flags2 += t1->flags_stride;
+            opj_t1_dec_sigpass_step_mqc_vsc(t1, flags2, colflags2, data2, oneplushalf, 0,
+                                            2U);
+            data2 += t1->w;
+            flags2 += t1->flags_stride;
+            opj_t1_dec_sigpass_step_mqc_vsc(t1, flags2, colflags2, data2, oneplushalf, 1,
+                                            3U);
+            data2 += t1->w;
+        }
+        data1 += t1->w << 2;
+        flags1 += t1->flags_stride << 2;
+        colflags1 += t1->flags_stride;
+    }
+    for (i = 0; i < t1->w; ++i) {
+        opj_colflag_t *colflags2 = colflags1 + i;
+        for (j = k; j < t1->h; ++j) {
+            vsc = (j == t1->h - 1) ? 1 : 0;
+            opj_t1_dec_sigpass_step_mqc_vsc(
+                t1,
+                &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
+                colflags2,
+                &t1->data[(j * t1->w) + i],
+                oneplushalf,
+                vsc,
+                j - k);
         }
+    }
 }                               /* VSC and  BYPASS by Antonin */
 
 
 
-static void opj_t1_enc_refpass_step(   opj_t1_t *t1,
-                                opj_flag_t *flagsp,
-                                OPJ_INT32 *datap,
-                                OPJ_INT32 bpno,
-                                OPJ_INT32 one,
-                                OPJ_INT32 *nmsedec,
-                                OPJ_BYTE type,
-                                OPJ_UINT32 vsc)
+static void opj_t1_enc_refpass_step(opj_t1_t *t1,
+                                    opj_flag_t *flagsp,
+                                    OPJ_INT32 *datap,
+                                    OPJ_INT32 bpno,
+                                    OPJ_INT32 one,
+                                    OPJ_INT32 *nmsedec,
+                                    OPJ_BYTE type,
+                                    OPJ_UINT32 vsc)
 {
-       OPJ_INT32 v;
-       OPJ_UINT32 flag;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       flag = vsc ? (OPJ_UINT32)((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (OPJ_UINT32)(*flagsp);
-       if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) {
-               *nmsedec += opj_t1_getnmsedec_ref((OPJ_UINT32)opj_int_abs(*datap), (OPJ_UINT32)(bpno));
-               v = (opj_int_abs(*datap) & one) ? 1 : 0;
-               opj_mqc_setcurctx(mqc, opj_t1_getctxno_mag(flag));      /* ESSAI */
-               if (type == T1_TYPE_RAW) {      /* BYPASS/LAZY MODE */
-                       opj_mqc_bypass_enc(mqc, (OPJ_UINT32)v);
-               } else {
-                       opj_mqc_encode(mqc, (OPJ_UINT32)v);
-               }
-               *flagsp |= T1_REFINE;
-       }
+    OPJ_INT32 v;
+    OPJ_UINT32 flag;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = vsc ? (OPJ_UINT32)((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW |
+                                           T1_SGN_S))) : (OPJ_UINT32)(*flagsp);
+    if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) {
+        *nmsedec += opj_t1_getnmsedec_ref((OPJ_UINT32)opj_int_abs(*datap),
+                                          (OPJ_UINT32)(bpno));
+        v = (opj_int_abs(*datap) & one) ? 1 : 0;
+        opj_mqc_setcurctx(mqc, opj_t1_getctxno_mag(flag));  /* ESSAI */
+        if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
+            opj_mqc_bypass_enc(mqc, (OPJ_UINT32)v);
+        } else {
+            opj_mqc_encode(mqc, (OPJ_UINT32)v);
+        }
+        *flagsp |= T1_REFINE;
+    }
 }
 
 static INLINE void opj_t1_dec_refpass_step_raw(
-                opj_t1_t *t1,
-                opj_colflag_t *colflagsp,
-                OPJ_INT32 *datap,
-                OPJ_INT32 poshalf,
-                OPJ_INT32 neghalf,
-                OPJ_UINT32 row)
+    opj_t1_t *t1,
+    opj_colflag_t *colflagsp,
+    OPJ_INT32 *datap,
+    OPJ_INT32 poshalf,
+    OPJ_INT32 neghalf,
+    OPJ_UINT32 row)
 {
-        OPJ_INT32 v, t;
-       
-        opj_raw_t *raw = t1->raw;       /* RAW component */
-       
-        if ((*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) << (T1_COLFLAG_RBS * row))) ==
+    OPJ_INT32 v, t;
+
+    opj_raw_t *raw = t1->raw;       /* RAW component */
+
+    if ((*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) <<
+                       (T1_COLFLAG_RBS * row))) ==
             ((T1_COLFLAG_SIG_ROW_0) << (T1_COLFLAG_RBS * row))) {
-                        v = (OPJ_INT32)opj_raw_decode(raw);
-                t = v ? poshalf : neghalf;
-                *datap += *datap < 0 ? -t : t;
-                *colflagsp |= (opj_colflag_t)(T1_COLFLAG_REFINE_ROW_0 << (T1_COLFLAG_RBS * row));
-        }
+        v = (OPJ_INT32)opj_raw_decode(raw);
+        t = v ? poshalf : neghalf;
+        *datap += *datap < 0 ? -t : t;
+        *colflagsp |= (opj_colflag_t)(T1_COLFLAG_REFINE_ROW_0 <<
+                                      (T1_COLFLAG_RBS * row));
+    }
 }                               /* VSC and  BYPASS by Antonin  */
 
 static INLINE void opj_t1_dec_refpass_step_mqc(
-                opj_t1_t *t1,
+    opj_t1_t *t1,
 #ifdef CONSISTENCY_CHECK
-                opj_flag_t *flagsp,
+    opj_flag_t *flagsp,
 #else
-                opj_flag_t *flagsp_unused,
+    opj_flag_t *flagsp_unused,
 #endif
-                opj_colflag_t *colflagsp,
-                OPJ_INT32 *datap,
-                OPJ_INT32 poshalf,
-                OPJ_INT32 neghalf,
-                OPJ_UINT32 row)
+    opj_colflag_t *colflagsp,
+    OPJ_INT32 *datap,
+    OPJ_INT32 poshalf,
+    OPJ_INT32 neghalf,
+    OPJ_UINT32 row)
 {
-        OPJ_INT32 v, t;
-       
-        opj_mqc_t *mqc = t1->mqc;       /* MQC component */
+    OPJ_INT32 v, t;
+
+    opj_mqc_t *mqc = t1->mqc;       /* MQC component */
 #ifdef CONSISTENCY_CHECK
-               assert( ((*flagsp & (T1_SIG | T1_VISIT)) == T1_SIG) == 
-                               ((*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) << (T1_COLFLAG_RBS * row))) == ((T1_COLFLAG_SIG_ROW_0) << (T1_COLFLAG_RBS * row))) );
+    assert(((*flagsp & (T1_SIG | T1_VISIT)) == T1_SIG) ==
+           ((*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) <<
+                           (T1_COLFLAG_RBS * row))) == ((T1_COLFLAG_SIG_ROW_0) << (T1_COLFLAG_RBS *
+                                   row))));
 #else
-        (void)flagsp_unused;
+    (void)flagsp_unused;
 #endif
-        if ((*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) << (T1_COLFLAG_RBS * row))) ==
+    if ((*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) <<
+                       (T1_COLFLAG_RBS * row))) ==
             ((T1_COLFLAG_SIG_ROW_0) << (T1_COLFLAG_RBS * row))) {
-                OPJ_UINT32 tmp1 = (*colflagsp & (T1_COLFLAG_SIG_OTHER_ROW_0 << (T1_COLFLAG_RBS * row))) ? T1_CTXNO_MAG + 1 : T1_CTXNO_MAG;
-                OPJ_UINT32 tmp2 = (*colflagsp & (T1_COLFLAG_REFINE_ROW_0 << (T1_COLFLAG_RBS * row))) ? T1_CTXNO_MAG + 2 : tmp1;
-                opj_mqc_setcurctx(mqc, tmp2);      /* ESSAI */
-                        v = opj_mqc_decode(mqc);
-                t = v ? poshalf : neghalf;
-                *datap += *datap < 0 ? -t : t;
-                *colflagsp |= (opj_colflag_t)(T1_COLFLAG_REFINE_ROW_0 << (T1_COLFLAG_RBS * row));
-                }
+        OPJ_UINT32 tmp1 = (*colflagsp & (T1_COLFLAG_SIG_OTHER_ROW_0 <<
+                                         (T1_COLFLAG_RBS * row))) ? T1_CTXNO_MAG + 1 : T1_CTXNO_MAG;
+        OPJ_UINT32 tmp2 = (*colflagsp & (T1_COLFLAG_REFINE_ROW_0 <<
+                                         (T1_COLFLAG_RBS * row))) ? T1_CTXNO_MAG + 2 : tmp1;
+        opj_mqc_setcurctx(mqc, tmp2);      /* ESSAI */
+        v = opj_mqc_decode(mqc);
+        t = v ? poshalf : neghalf;
+        *datap += *datap < 0 ? -t : t;
+        *colflagsp |= (opj_colflag_t)(T1_COLFLAG_REFINE_ROW_0 <<
+                                      (T1_COLFLAG_RBS * row));
+    }
 }                               /* VSC and  BYPASS by Antonin  */
 
 static INLINE void opj_t1_dec_refpass_step_mqc_vsc(
-                opj_t1_t *t1,
-                opj_flag_t *flagsp,
-                opj_colflag_t *colflagsp,
-                OPJ_INT32 *datap,
-                OPJ_INT32 poshalf,
-                OPJ_INT32 neghalf,
-                OPJ_INT32 vsc,
-                OPJ_UINT32 row)
+    opj_t1_t *t1,
+    opj_flag_t *flagsp,
+    opj_colflag_t *colflagsp,
+    OPJ_INT32 *datap,
+    OPJ_INT32 poshalf,
+    OPJ_INT32 neghalf,
+    OPJ_INT32 vsc,
+    OPJ_UINT32 row)
 {
-        OPJ_UINT32 v;
-        OPJ_INT32 t;
-       
-        opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-        if ((*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) << (T1_COLFLAG_RBS * row))) ==
-                ((T1_COLFLAG_SIG_ROW_0) << (T1_COLFLAG_RBS * row))) {
-                OPJ_UINT32 flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp);
-                OPJ_UINT32 tmp1 = (flag & T1_SIG_OTH) ? T1_CTXNO_MAG + 1 : T1_CTXNO_MAG;
-                OPJ_UINT32 tmp2 = (*colflagsp & (T1_COLFLAG_REFINE_ROW_0 << (T1_COLFLAG_RBS * row))) ? T1_CTXNO_MAG + 2U : tmp1;
-                opj_mqc_setcurctx(mqc, tmp2);      /* ESSAI */
-                v = (OPJ_UINT32)opj_mqc_decode(mqc);
-                t = v ? poshalf : neghalf;
-                *datap += *datap < 0 ? -t : t;
-                *colflagsp |= (opj_colflag_t)(T1_COLFLAG_REFINE_ROW_0 << (T1_COLFLAG_RBS * row));
-        }
+    OPJ_UINT32 v;
+    OPJ_INT32 t;
+
+    opj_mqc_t *mqc = t1->mqc;       /* MQC component */
+
+    if ((*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) <<
+                       (T1_COLFLAG_RBS * row))) ==
+            ((T1_COLFLAG_SIG_ROW_0) << (T1_COLFLAG_RBS * row))) {
+        OPJ_UINT32 flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW |
+                                                T1_SGN_S))) : (*flagsp);
+        OPJ_UINT32 tmp1 = (flag & T1_SIG_OTH) ? T1_CTXNO_MAG + 1 : T1_CTXNO_MAG;
+        OPJ_UINT32 tmp2 = (*colflagsp & (T1_COLFLAG_REFINE_ROW_0 <<
+                                         (T1_COLFLAG_RBS * row))) ? T1_CTXNO_MAG + 2U : tmp1;
+        opj_mqc_setcurctx(mqc, tmp2);      /* ESSAI */
+        v = (OPJ_UINT32)opj_mqc_decode(mqc);
+        t = v ? poshalf : neghalf;
+        *datap += *datap < 0 ? -t : t;
+        *colflagsp |= (opj_colflag_t)(T1_COLFLAG_REFINE_ROW_0 <<
+                                      (T1_COLFLAG_RBS * row));
+    }
 }                               /* VSC and  BYPASS by Antonin  */
 
 
 static void opj_t1_enc_refpass(
-               opj_t1_t *t1,
-               OPJ_INT32 bpno,
-               OPJ_INT32 *nmsedec,
-               OPJ_BYTE type,
-               OPJ_UINT32 cblksty)
+    opj_t1_t *t1,
+    OPJ_INT32 bpno,
+    OPJ_INT32 *nmsedec,
+    OPJ_BYTE type,
+    OPJ_UINT32 cblksty)
 {
-       OPJ_UINT32 i, j, k, vsc;
+    OPJ_UINT32 i, j, k, vsc;
     OPJ_INT32 one;
 
-       *nmsedec = 0;
-       one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
-       for (k = 0; k < t1->h; k += 4) {
-               for (i = 0; i < t1->w; ++i) {
-                       for (j = k; j < k + 4 && j < t1->h; ++j) {
-                               vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 || j == t1->h - 1)) ? 1 : 0;
-                               opj_t1_enc_refpass_step(
-                                               t1,
-                                               &t1->flags[((j+1) * t1->flags_stride) + i + 1],
-                                               &t1->data[(j * t1->data_stride) + i],
-                                               bpno,
-                                               one,
-                                               nmsedec,
-                                               type,
-                                               vsc);
-                       }
-               }
-       }
+    *nmsedec = 0;
+    one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
+    for (k = 0; k < t1->h; k += 4) {
+        for (i = 0; i < t1->w; ++i) {
+            for (j = k; j < k + 4 && j < t1->h; ++j) {
+                vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 ||
+                        j == t1->h - 1)) ? 1 : 0;
+                opj_t1_enc_refpass_step(
+                    t1,
+                    &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
+                    &t1->data[(j * t1->data_stride) + i],
+                    bpno,
+                    one,
+                    nmsedec,
+                    type,
+                    vsc);
+            }
+        }
+    }
 }
 
 static void opj_t1_dec_refpass_raw(
-                opj_t1_t *t1,
-                OPJ_INT32 bpno)
+    opj_t1_t *t1,
+    OPJ_INT32 bpno)
 {
-        OPJ_INT32 one, poshalf, neghalf;
-        OPJ_UINT32 i, j, k;
-        opj_colflag_t *colflags1 = &t1->colflags[t1->flags_stride + 1];
-        one = 1 << bpno;
-        poshalf = one >> 1;
-        neghalf = bpno > 0 ? -poshalf : -1;
-        for (k = 0; k < t1->h; k += 4) {
-                for (i = 0; i < t1->w; ++i) {
-                        opj_colflag_t *colflags2 = colflags1 + i;
-                        for (j = k; j < k + 4 && j < t1->h; ++j) {
-                                opj_t1_dec_refpass_step_raw(
-                                                t1,
-                                                colflags2,
-                                                &t1->data[(j * t1->w) + i],
-                                                poshalf,
-                                                neghalf, j - k);
-                        }
-                }
-                colflags1 += t1->flags_stride;
+    OPJ_INT32 one, poshalf, neghalf;
+    OPJ_UINT32 i, j, k;
+    opj_colflag_t *colflags1 = &t1->colflags[t1->flags_stride + 1];
+    one = 1 << bpno;
+    poshalf = one >> 1;
+    neghalf = bpno > 0 ? -poshalf : -1;
+    for (k = 0; k < t1->h; k += 4) {
+        for (i = 0; i < t1->w; ++i) {
+            opj_colflag_t *colflags2 = colflags1 + i;
+            for (j = k; j < k + 4 && j < t1->h; ++j) {
+                opj_t1_dec_refpass_step_raw(
+                    t1,
+                    colflags2,
+                    &t1->data[(j * t1->w) + i],
+                    poshalf,
+                    neghalf, j - k);
+            }
         }
+        colflags1 += t1->flags_stride;
+    }
 }                               /* VSC and  BYPASS by Antonin */
 
 #define opj_t1_dec_refpass_mqc_internal(t1, bpno, w, h, flags_stride) \
@@ -911,165 +953,175 @@ static void opj_t1_dec_refpass_raw(
 }
 
 static void opj_t1_dec_refpass_mqc_64x64(
-                opj_t1_t *t1,
-                OPJ_INT32 bpno)
+    opj_t1_t *t1,
+    OPJ_INT32 bpno)
 {
-       opj_t1_dec_refpass_mqc_internal(t1, bpno, 64, 64, 66);
+    opj_t1_dec_refpass_mqc_internal(t1, bpno, 64, 64, 66);
 }
 
 static void opj_t1_dec_refpass_mqc_generic(
-                opj_t1_t *t1,
-                OPJ_INT32 bpno)
+    opj_t1_t *t1,
+    OPJ_INT32 bpno)
 {
-       opj_t1_dec_refpass_mqc_internal(t1, bpno, t1->w, t1->h, t1->flags_stride);
+    opj_t1_dec_refpass_mqc_internal(t1, bpno, t1->w, t1->h, t1->flags_stride);
 }
 
 /* VSC and  BYPASS by Antonin */
 static void opj_t1_dec_refpass_mqc_vsc(
-                opj_t1_t *t1,
-                OPJ_INT32 bpno)
+    opj_t1_t *t1,
+    OPJ_INT32 bpno)
 {
-        OPJ_INT32 one, poshalf, neghalf;
-        OPJ_UINT32 i, j, k;
-        OPJ_INT32 vsc;
-        OPJ_INT32 *data1 = t1->data;
-        opj_flag_t *flags1 = &t1->flags[1];
-        opj_colflag_t *colflags1 = &t1->colflags[t1->flags_stride + 1];
-        one = 1 << bpno;
-        poshalf = one >> 1;
-        neghalf = bpno > 0 ? -poshalf : -1;
-        for (k = 0; k < (t1->h & ~(OPJ_UINT32)3U); k += 4U) {
-                for (i = 0; i < t1->w; ++i) {
-                        OPJ_INT32 *data2 = data1 + i;
-                        opj_flag_t *flags2 = flags1 + i;
-                        opj_colflag_t *colflags2 = colflags1 + i;
-                        flags2 += t1->flags_stride;
-                        opj_t1_dec_refpass_step_mqc_vsc(t1, flags2, colflags2, data2, poshalf, neghalf, 0, 0U);
-                        data2 += t1->w;
-                        flags2 += t1->flags_stride;
-                        opj_t1_dec_refpass_step_mqc_vsc(t1, flags2, colflags2, data2, poshalf, neghalf, 0, 1U);
-                        data2 += t1->w;
-                        flags2 += t1->flags_stride;
-                        opj_t1_dec_refpass_step_mqc_vsc(t1, flags2, colflags2, data2, poshalf, neghalf, 0, 2U);
-                        data2 += t1->w;
-                        flags2 += t1->flags_stride;
-                        opj_t1_dec_refpass_step_mqc_vsc(t1, flags2, colflags2, data2, poshalf, neghalf, 1, 3U);
-                        data2 += t1->w;
-                }
-                data1 += t1->w << 2;
-                flags1 += t1->flags_stride << 2;
-                colflags1 += t1->flags_stride;
-        }
+    OPJ_INT32 one, poshalf, neghalf;
+    OPJ_UINT32 i, j, k;
+    OPJ_INT32 vsc;
+    OPJ_INT32 *data1 = t1->data;
+    opj_flag_t *flags1 = &t1->flags[1];
+    opj_colflag_t *colflags1 = &t1->colflags[t1->flags_stride + 1];
+    one = 1 << bpno;
+    poshalf = one >> 1;
+    neghalf = bpno > 0 ? -poshalf : -1;
+    for (k = 0; k < (t1->h & ~(OPJ_UINT32)3U); k += 4U) {
         for (i = 0; i < t1->w; ++i) {
-                opj_colflag_t *colflags2 = colflags1 + i;
-                for (j = k; j < t1->h; ++j) {
-                        vsc = (j == t1->h - 1) ? 1 : 0;
-                        opj_t1_dec_refpass_step_mqc_vsc(
-                                        t1,
-                                        &t1->flags[((j+1) * t1->flags_stride) + i + 1],
-                                        colflags2,
-                                        &t1->data[(j * t1->w) + i],
-                                        poshalf, neghalf,
-                                        vsc,
-                                        j - k);
-                }
+            OPJ_INT32 *data2 = data1 + i;
+            opj_flag_t *flags2 = flags1 + i;
+            opj_colflag_t *colflags2 = colflags1 + i;
+            flags2 += t1->flags_stride;
+            opj_t1_dec_refpass_step_mqc_vsc(t1, flags2, colflags2, data2, poshalf, neghalf,
+                                            0, 0U);
+            data2 += t1->w;
+            flags2 += t1->flags_stride;
+            opj_t1_dec_refpass_step_mqc_vsc(t1, flags2, colflags2, data2, poshalf, neghalf,
+                                            0, 1U);
+            data2 += t1->w;
+            flags2 += t1->flags_stride;
+            opj_t1_dec_refpass_step_mqc_vsc(t1, flags2, colflags2, data2, poshalf, neghalf,
+                                            0, 2U);
+            data2 += t1->w;
+            flags2 += t1->flags_stride;
+            opj_t1_dec_refpass_step_mqc_vsc(t1, flags2, colflags2, data2, poshalf, neghalf,
+                                            1, 3U);
+            data2 += t1->w;
+        }
+        data1 += t1->w << 2;
+        flags1 += t1->flags_stride << 2;
+        colflags1 += t1->flags_stride;
+    }
+    for (i = 0; i < t1->w; ++i) {
+        opj_colflag_t *colflags2 = colflags1 + i;
+        for (j = k; j < t1->h; ++j) {
+            vsc = (j == t1->h - 1) ? 1 : 0;
+            opj_t1_dec_refpass_step_mqc_vsc(
+                t1,
+                &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
+                colflags2,
+                &t1->data[(j * t1->w) + i],
+                poshalf, neghalf,
+                vsc,
+                j - k);
         }
+    }
 }                               /* VSC and  BYPASS by Antonin */
 
 
 static void opj_t1_enc_clnpass_step(
-               opj_t1_t *t1,
-               opj_flag_t *flagsp,
-               OPJ_INT32 *datap,
-               OPJ_INT32 bpno,
-               OPJ_INT32 one,
-               OPJ_INT32 *nmsedec,
-               OPJ_UINT32 partial,
-               OPJ_UINT32 vsc)
+    opj_t1_t *t1,
+    opj_flag_t *flagsp,
+    OPJ_INT32 *datap,
+    OPJ_INT32 bpno,
+    OPJ_INT32 one,
+    OPJ_INT32 *nmsedec,
+    OPJ_UINT32 partial,
+    OPJ_UINT32 vsc)
 {
-       OPJ_INT32 v;
-       OPJ_UINT32 flag;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       flag = vsc ? (OPJ_UINT32)((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (OPJ_UINT32)(*flagsp);
-       if (partial) {
-               goto LABEL_PARTIAL;
-       }
-       if (!(*flagsp & (T1_SIG | T1_VISIT))) {
-               opj_mqc_setcurctx(mqc, opj_t1_getctxno_zc(mqc, flag));
-               v = (opj_int_abs(*datap) & one) ? 1 : 0;
-               opj_mqc_encode(mqc, (OPJ_UINT32)v);
-               if (v) {
+    OPJ_INT32 v;
+    OPJ_UINT32 flag;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = vsc ? (OPJ_UINT32)((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW |
+                                           T1_SGN_S))) : (OPJ_UINT32)(*flagsp);
+    if (partial) {
+        goto LABEL_PARTIAL;
+    }
+    if (!(*flagsp & (T1_SIG | T1_VISIT))) {
+        opj_mqc_setcurctx(mqc, opj_t1_getctxno_zc(mqc, flag));
+        v = (opj_int_abs(*datap) & one) ? 1 : 0;
+        opj_mqc_encode(mqc, (OPJ_UINT32)v);
+        if (v) {
 LABEL_PARTIAL:
-                       *nmsedec += opj_t1_getnmsedec_sig((OPJ_UINT32)opj_int_abs(*datap), (OPJ_UINT32)(bpno));
-                       opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc(flag));
-                       v = *datap < 0 ? 1 : 0;
-                       opj_mqc_encode(mqc, (OPJ_UINT32)(v ^ opj_t1_getspb((OPJ_UINT32)flag)));
-                       opj_t1_updateflags(flagsp, (OPJ_UINT32)v, t1->flags_stride);
-               }
-       }
-       *flagsp &= (opj_flag_t)~T1_VISIT;
+            *nmsedec += opj_t1_getnmsedec_sig((OPJ_UINT32)opj_int_abs(*datap),
+                                              (OPJ_UINT32)(bpno));
+            opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc(flag));
+            v = *datap < 0 ? 1 : 0;
+            opj_mqc_encode(mqc, (OPJ_UINT32)(v ^ opj_t1_getspb((OPJ_UINT32)flag)));
+            opj_t1_updateflags(flagsp, (OPJ_UINT32)v, t1->flags_stride);
+        }
+    }
+    *flagsp &= (opj_flag_t)~T1_VISIT;
 }
 
 static void opj_t1_dec_clnpass_step_partial(
-               opj_t1_t *t1,
-               opj_flag_t *flagsp,
-               opj_colflag_t *colflagsp,
-               OPJ_INT32 *datap,
-               OPJ_INT32 oneplushalf,
-               OPJ_UINT32 row)
+    opj_t1_t *t1,
+    opj_flag_t *flagsp,
+    opj_colflag_t *colflagsp,
+    OPJ_INT32 *datap,
+    OPJ_INT32 oneplushalf,
+    OPJ_UINT32 row)
 {
-       OPJ_INT32 v, flag;
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       flag = *flagsp;
-       opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc((OPJ_UINT32)flag));
-       v = opj_mqc_decode(mqc) ^ opj_t1_getspb((OPJ_UINT32)flag);
-       *datap = v ? -oneplushalf : oneplushalf;
-       opj_t1_updateflagscolflags(flagsp, colflagsp, (OPJ_UINT32)v, t1->flags_stride, row);
+    OPJ_INT32 v, flag;
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = *flagsp;
+    opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc((OPJ_UINT32)flag));
+    v = opj_mqc_decode(mqc) ^ opj_t1_getspb((OPJ_UINT32)flag);
+    *datap = v ? -oneplushalf : oneplushalf;
+    opj_t1_updateflagscolflags(flagsp, colflagsp, (OPJ_UINT32)v, t1->flags_stride,
+                               row);
 #ifdef CONSISTENCY_CHECK
-       *flagsp &= ~T1_VISIT;
+    *flagsp &= ~T1_VISIT;
 #endif
-}                              /* VSC and  BYPASS by Antonin */
+}               /* VSC and  BYPASS by Antonin */
 
 static void opj_t1_dec_clnpass_step(
-               opj_t1_t *t1,
-               opj_flag_t *flagsp,
-               opj_colflag_t *colflagsp,
-               OPJ_INT32 *datap,
-               OPJ_INT32 oneplushalf,
-               OPJ_UINT32 row)
+    opj_t1_t *t1,
+    opj_flag_t *flagsp,
+    opj_colflag_t *colflagsp,
+    OPJ_INT32 *datap,
+    OPJ_INT32 oneplushalf,
+    OPJ_UINT32 row)
 {
-       OPJ_INT32 v, flag;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
+    OPJ_INT32 v, flag;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
 #ifdef CONSISTENCY_CHECK
-       assert( (!(*flagsp & (T1_SIG | T1_VISIT))) == (!(*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) << (4*row)))) );
+    assert((!(*flagsp & (T1_SIG | T1_VISIT))) == (!(*colflagsp & ((
+                T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) << (4 * row)))));
 #endif
-       if (!(*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) << (4*row)))) {
-               flag = *flagsp;
-               opj_mqc_setcurctx(mqc, opj_t1_getctxno_zc(mqc, (OPJ_UINT32)flag));
-               if (opj_mqc_decode(mqc)) {
-                       opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc((OPJ_UINT32)flag));
-                       v = opj_mqc_decode(mqc) ^ opj_t1_getspb((OPJ_UINT32)flag);
-                       *datap = v ? -oneplushalf : oneplushalf;
-                       opj_t1_updateflagscolflags(flagsp, colflagsp, (OPJ_UINT32)v, t1->flags_stride, row);
-               }
-       }
+    if (!(*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) <<
+                        (4 * row)))) {
+        flag = *flagsp;
+        opj_mqc_setcurctx(mqc, opj_t1_getctxno_zc(mqc, (OPJ_UINT32)flag));
+        if (opj_mqc_decode(mqc)) {
+            opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc((OPJ_UINT32)flag));
+            v = opj_mqc_decode(mqc) ^ opj_t1_getspb((OPJ_UINT32)flag);
+            *datap = v ? -oneplushalf : oneplushalf;
+            opj_t1_updateflagscolflags(flagsp, colflagsp, (OPJ_UINT32)v, t1->flags_stride,
+                                       row);
+        }
+    }
 #ifdef CONSISTENCY_CHECK
-       *flagsp &= ~T1_VISIT;
+    *flagsp &= ~T1_VISIT;
 #endif
-}                              /* VSC and  BYPASS by Antonin */
+}               /* VSC and  BYPASS by Antonin */
 
 static void opj_t1_dec_clnpass_step_only_if_flag_not_sig_visit(
-        opj_t1_t *t1,
-        opj_flag_t *flagsp,
-        opj_colflag_t *colflagsp,
-        OPJ_INT32 *datap,
-        OPJ_INT32 oneplushalf,
-        OPJ_UINT32 row,
-        OPJ_UINT32 flags_stride)
+    opj_t1_t *t1,
+    opj_flag_t *flagsp,
+    opj_colflag_t *colflagsp,
+    OPJ_INT32 *datap,
+    OPJ_INT32 oneplushalf,
+    OPJ_UINT32 row,
+    OPJ_UINT32 flags_stride)
 {
     OPJ_INT32 v;
     OPJ_INT32 flag;
@@ -1091,452 +1143,461 @@ static void opj_t1_dec_clnpass_step_only_if_flag_not_sig_visit(
 }
 
 static void opj_t1_dec_clnpass_step_vsc(
-               opj_t1_t *t1,
-               opj_flag_t *flagsp,
-               opj_colflag_t *colflagsp,
-               OPJ_INT32 *datap,
-               OPJ_INT32 oneplushalf,
-               OPJ_INT32 partial,
-               OPJ_INT32 vsc,
-               OPJ_UINT32 row)
+    opj_t1_t *t1,
+    opj_flag_t *flagsp,
+    opj_colflag_t *colflagsp,
+    OPJ_INT32 *datap,
+    OPJ_INT32 oneplushalf,
+    OPJ_INT32 partial,
+    OPJ_INT32 vsc,
+    OPJ_UINT32 row)
 {
-       OPJ_UINT32 v, flag;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp);
-       if (partial) {
-               goto LABEL_PARTIAL;
-       }
-       if (!(*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) << (T1_COLFLAG_RBS * row)))) {
-               opj_mqc_setcurctx(mqc, opj_t1_getctxno_zc(mqc, flag));
-               if (opj_mqc_decode(mqc)) {
+    OPJ_UINT32 v, flag;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) :
+           (*flagsp);
+    if (partial) {
+        goto LABEL_PARTIAL;
+    }
+    if (!(*colflagsp & ((T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0) <<
+                        (T1_COLFLAG_RBS * row)))) {
+        opj_mqc_setcurctx(mqc, opj_t1_getctxno_zc(mqc, flag));
+        if (opj_mqc_decode(mqc)) {
 LABEL_PARTIAL:
-                       opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc(flag));
-                       v = (OPJ_UINT32)opj_mqc_decode(mqc) ^ opj_t1_getspb(flag);
-                       *datap = v ? -oneplushalf : oneplushalf;
-                       opj_t1_updateflagscolflags(flagsp, colflagsp, v, t1->flags_stride, row);
-               }
-       }
+            opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc(flag));
+            v = (OPJ_UINT32)opj_mqc_decode(mqc) ^ opj_t1_getspb(flag);
+            *datap = v ? -oneplushalf : oneplushalf;
+            opj_t1_updateflagscolflags(flagsp, colflagsp, v, t1->flags_stride, row);
+        }
+    }
 #ifdef CONSISTENCY_CHECK
-       *flagsp &= ~T1_VISIT;
+    *flagsp &= ~T1_VISIT;
 #endif
 }
 
 static void opj_t1_enc_clnpass(
-               opj_t1_t *t1,
-               OPJ_INT32 bpno,
-               OPJ_INT32 *nmsedec,
-               OPJ_UINT32 cblksty)
+    opj_t1_t *t1,
+    OPJ_INT32 bpno,
+    OPJ_INT32 *nmsedec,
+    OPJ_UINT32 cblksty)
 {
-       OPJ_UINT32 i, j, k;
-       OPJ_INT32 one;
-       OPJ_UINT32 agg, runlen, vsc;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       *nmsedec = 0;
-       one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
-       for (k = 0; k < t1->h; k += 4) {
-               for (i = 0; i < t1->w; ++i) {
-                       if (k + 3 < t1->h) {
-                               if (cblksty & J2K_CCP_CBLKSTY_VSC) {
-                                       agg = !(MACRO_t1_flags(1 + k,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                               || MACRO_t1_flags(1 + k + 1,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                               || MACRO_t1_flags(1 + k + 2,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                               || (MACRO_t1_flags(1 + k + 3,1 + i) 
-                                               & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) & (T1_SIG | T1_VISIT | T1_SIG_OTH));
-                               } else {
-                                       agg = !((MACRO_t1_flags(1 + k,1 + i) | 
-                                                   MACRO_t1_flags(1 + k + 1,1 + i) |
-                                                   MACRO_t1_flags(1 + k + 2,1 + i) | 
-                                                    MACRO_t1_flags(1 + k + 3,1 + i)) & (T1_SIG | T1_VISIT | T1_SIG_OTH));
-                               }
-                       } else {
-                               agg = 0;
-                       }
-                       if (agg) {
-                               for (runlen = 0; runlen < 4; ++runlen) {
-                                       if (opj_int_abs(t1->data[((k + runlen)*t1->data_stride) + i]) & one)
-                                               break;
-                               }
-                               opj_mqc_setcurctx(mqc, T1_CTXNO_AGG);
-                               opj_mqc_encode(mqc, runlen != 4);
-                               if (runlen == 4) {
-                                       continue;
-                               }
-                               opj_mqc_setcurctx(mqc, T1_CTXNO_UNI);
-                               opj_mqc_encode(mqc, runlen >> 1);
-                               opj_mqc_encode(mqc, runlen & 1);
-                       } else {
-                               runlen = 0;
-                       }
-                       for (j = k + runlen; j < k + 4 && j < t1->h; ++j) {
-                               vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 || j == t1->h - 1)) ? 1 : 0;
-                               opj_t1_enc_clnpass_step(
-                                               t1,
-                                               &t1->flags[((j+1) * t1->flags_stride) + i + 1],
-                                               &t1->data[(j * t1->data_stride) + i],
-                                               bpno,
-                                               one,
-                                               nmsedec,
-                                               agg && (j == k + runlen),
-                                               vsc);
-                       }
-               }
-       }
+    OPJ_UINT32 i, j, k;
+    OPJ_INT32 one;
+    OPJ_UINT32 agg, runlen, vsc;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    *nmsedec = 0;
+    one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
+    for (k = 0; k < t1->h; k += 4) {
+        for (i = 0; i < t1->w; ++i) {
+            if (k + 3 < t1->h) {
+                if (cblksty & J2K_CCP_CBLKSTY_VSC) {
+                    agg = !(MACRO_t1_flags(1 + k, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                            || MACRO_t1_flags(1 + k + 1, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                            || MACRO_t1_flags(1 + k + 2, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                            || (MACRO_t1_flags(1 + k + 3, 1 + i)
+                                & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) & (T1_SIG | T1_VISIT |
+                                        T1_SIG_OTH));
+                } else {
+                    agg = !((MACRO_t1_flags(1 + k, 1 + i) |
+                             MACRO_t1_flags(1 + k + 1, 1 + i) |
+                             MACRO_t1_flags(1 + k + 2, 1 + i) |
+                             MACRO_t1_flags(1 + k + 3, 1 + i)) & (T1_SIG | T1_VISIT | T1_SIG_OTH));
+                }
+            } else {
+                agg = 0;
+            }
+            if (agg) {
+                for (runlen = 0; runlen < 4; ++runlen) {
+                    if (opj_int_abs(t1->data[((k + runlen)*t1->data_stride) + i]) & one) {
+                        break;
+                    }
+                }
+                opj_mqc_setcurctx(mqc, T1_CTXNO_AGG);
+                opj_mqc_encode(mqc, runlen != 4);
+                if (runlen == 4) {
+                    continue;
+                }
+                opj_mqc_setcurctx(mqc, T1_CTXNO_UNI);
+                opj_mqc_encode(mqc, runlen >> 1);
+                opj_mqc_encode(mqc, runlen & 1);
+            } else {
+                runlen = 0;
+            }
+            for (j = k + runlen; j < k + 4 && j < t1->h; ++j) {
+                vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 ||
+                        j == t1->h - 1)) ? 1 : 0;
+                opj_t1_enc_clnpass_step(
+                    t1,
+                    &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
+                    &t1->data[(j * t1->data_stride) + i],
+                    bpno,
+                    one,
+                    nmsedec,
+                    agg && (j == k + runlen),
+                    vsc);
+            }
+        }
+    }
 }
 
 #define MACRO_t1_flags_internal(x,y,flags_stride) t1->flags[((x)*(flags_stride))+(y)]
 
 #define opj_t1_dec_clnpass_internal(consistency_check, t1, bpno, cblksty, w, h, flags_stride) \
 { \
-       OPJ_INT32 one, half, oneplushalf, agg, runlen, vsc; \
-       OPJ_UINT32 i, j, k; \
-       OPJ_INT32 segsym = cblksty & J2K_CCP_CBLKSTY_SEGSYM; \
-        \
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */ \
-        \
-       one = 1 << bpno; \
-       half = one >> 1; \
-       oneplushalf = one | half; \
-       if (cblksty & J2K_CCP_CBLKSTY_VSC) { \
-       opj_colflag_t *colflags1 = &t1->colflags[flags_stride + 1]; \
-       for (k = 0; k < h; k += 4) { \
-               for (i = 0; i < w; ++i) { \
-                       opj_colflag_t *colflags2 = colflags1 + i; \
-                       if (k + 3 < h) { \
-                                       agg = !((*colflags2 & (T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0 | T1_COLFLAG_SIG_OTHER_ROW_0 | \
-                                                                  T1_COLFLAG_SIG_ROW_1 | T1_COLFLAG_VISIT_ROW_1 | T1_COLFLAG_SIG_OTHER_ROW_1 | \
-                                                                  T1_COLFLAG_SIG_ROW_2 | T1_COLFLAG_VISIT_ROW_2 | T1_COLFLAG_SIG_OTHER_ROW_2 | \
-                                                                  T1_COLFLAG_SIG_ROW_3 | T1_COLFLAG_VISIT_ROW_3)) || \
-                                                 ((MACRO_t1_flags_internal(1 + k + 3,1 + i,flags_stride) \
-                                                  & ((~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW |     T1_SGN_S))) & (T1_SIG_OTH)))); \
-                               } else { \
-                               agg = 0; \
-                       } \
-                       if (agg) { \
-                               opj_mqc_setcurctx(mqc, T1_CTXNO_AGG); \
-                               if (!opj_mqc_decode(mqc)) { \
-                                       continue; \
-                               } \
-                               opj_mqc_setcurctx(mqc, T1_CTXNO_UNI); \
-                               runlen = opj_mqc_decode(mqc); \
-                               runlen = (runlen << 1) | opj_mqc_decode(mqc); \
-                       } else { \
-                               runlen = 0; \
-                       } \
-                       for (j = k + (OPJ_UINT32)runlen; j < k + 4 && j < h; ++j) { \
-                                       vsc = (j == k + 3 || j == h - 1) ? 1 : 0; \
-                                       opj_t1_dec_clnpass_step_vsc( \
-                                               t1, \
-                                               &t1->flags[((j+1) * flags_stride) + i + 1], \
-                                               colflags2, \
-                                               &t1->data[(j * w) + i], \
-                                               oneplushalf, \
-                                               agg && (j == k + (OPJ_UINT32)runlen), \
-                                               vsc, j - k); \
-                       } \
-                       *colflags2 &= (opj_colflag_t)~(T1_COLFLAG_VISIT_ROW_0 | T1_COLFLAG_VISIT_ROW_1 | T1_COLFLAG_VISIT_ROW_2 | T1_COLFLAG_VISIT_ROW_3); \
-               } \
-               colflags1 += flags_stride; \
-       } \
-       } else { \
-               OPJ_INT32 *data1 = t1->data; \
-               opj_flag_t *flags1 = &t1->flags[1]; \
-               opj_colflag_t *colflags1 = &t1->colflags[flags_stride + 1]; \
-               for (k = 0; k < (h & ~3u); k += 4) { \
-                       for (i = 0; i < w; ++i) { \
-                               OPJ_INT32 *data2 = data1 + i; \
-                               opj_flag_t *flags2 = flags1 + i; \
-                               opj_colflag_t *colflags2 = colflags1 + i; \
-                               opj_colflag_t colflags = *colflags2; \
-                               agg = !(colflags & (T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0 | T1_COLFLAG_SIG_OTHER_ROW_0 | \
-                                                                        T1_COLFLAG_SIG_ROW_1 | T1_COLFLAG_VISIT_ROW_1 | T1_COLFLAG_SIG_OTHER_ROW_1 | \
-                                                                        T1_COLFLAG_SIG_ROW_2 | T1_COLFLAG_VISIT_ROW_2 | T1_COLFLAG_SIG_OTHER_ROW_2 | \
-                                                                        T1_COLFLAG_SIG_ROW_3 | T1_COLFLAG_VISIT_ROW_3 | T1_COLFLAG_SIG_OTHER_ROW_3)); \
-                               if( consistency_check ) { \
-                                       assert( agg == !((MACRO_t1_flags_internal(1 + k, 1 + i,flags_stride) | \
-                                                                         MACRO_t1_flags_internal(1 + k + 1, 1 + i,flags_stride) | \
-                                                                         MACRO_t1_flags_internal(1 + k + 2, 1 + i,flags_stride) | \
-                                                                         MACRO_t1_flags_internal(1 + k + 3, 1 + i,flags_stride)) & (T1_SIG | T1_VISIT | T1_SIG_OTH)) ); \
-                               } \
-                               if (agg) { \
-                                       opj_mqc_setcurctx(mqc, T1_CTXNO_AGG); \
-                                       if (!opj_mqc_decode(mqc)) { \
-                                               continue; \
-                                       } \
-                                       opj_mqc_setcurctx(mqc, T1_CTXNO_UNI); \
-                                       runlen = opj_mqc_decode(mqc); \
-                                       runlen = (runlen << 1) | opj_mqc_decode(mqc); \
-                                       flags2 += (OPJ_UINT32)runlen * flags_stride; \
-                                       data2 += (OPJ_UINT32)runlen * w; \
-                                       for (j = (OPJ_UINT32)runlen; j < 4; ++j) { \
-                                               flags2 += flags_stride; \
-                                               if (j == (OPJ_UINT32)runlen) { \
-                                                       opj_t1_dec_clnpass_step_partial(t1, flags2, colflags2, data2, oneplushalf, j); \
-                                               } else { \
-                                                       opj_t1_dec_clnpass_step(t1, flags2, colflags2, data2, oneplushalf, j); \
-                                               } \
-                                               data2 += w; \
-                                       } \
-                               } else { \
-                                       flags2 += flags_stride; \
-                                       if( consistency_check ) { assert( (!(colflags & (T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0))) == (!(*flags2 & (T1_SIG | T1_VISIT))) ); } \
-                                       if (!(colflags & (T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0))) {\
-                                               opj_t1_dec_clnpass_step_only_if_flag_not_sig_visit(t1, flags2, colflags2, data2, oneplushalf, 0U, flags_stride); \
-                                       } \
-                                       if( consistency_check ) *flags2 &= (opj_flag_t)~T1_VISIT; \
-                                       data2 += w; \
-                                       flags2 += flags_stride; \
-                                       if( consistency_check ) { assert( (!(colflags & (T1_COLFLAG_SIG_ROW_1 | T1_COLFLAG_VISIT_ROW_1))) == (!(*flags2 & (T1_SIG | T1_VISIT))) ); } \
-                                       if (!(colflags & (T1_COLFLAG_SIG_ROW_1 | T1_COLFLAG_VISIT_ROW_1))) {\
-                                               opj_t1_dec_clnpass_step_only_if_flag_not_sig_visit(t1, flags2, colflags2, data2, oneplushalf, 1U, flags_stride); \
-                                       } \
-                                       if( consistency_check ) *flags2 &= (opj_flag_t)~T1_VISIT; \
-                                       data2 += w; \
-                                       flags2 += flags_stride; \
-                                       if( consistency_check ) { assert( (!(colflags & (T1_COLFLAG_SIG_ROW_2 | T1_COLFLAG_VISIT_ROW_2))) == (!(*flags2 & (T1_SIG | T1_VISIT))) ); } \
-                                       if (!(colflags & (T1_COLFLAG_SIG_ROW_2 | T1_COLFLAG_VISIT_ROW_2))) {\
-                                               opj_t1_dec_clnpass_step_only_if_flag_not_sig_visit(t1, flags2, colflags2, data2, oneplushalf, 2U, flags_stride); \
-                                       } \
-                                       if( consistency_check ) *flags2 &= (opj_flag_t)~T1_VISIT; \
-                                       data2 += w; \
-                                       flags2 += flags_stride; \
-                                       if( consistency_check ) { assert( (!(colflags & (T1_COLFLAG_SIG_ROW_3 | T1_COLFLAG_VISIT_ROW_3))) == (!(*flags2 & (T1_SIG | T1_VISIT))) ); } \
-                                       if (!(colflags & (T1_COLFLAG_SIG_ROW_3 | T1_COLFLAG_VISIT_ROW_3))) {\
-                                               opj_t1_dec_clnpass_step_only_if_flag_not_sig_visit(t1, flags2, colflags2, data2, oneplushalf, 3U, flags_stride); \
-                                       } \
-                                       if( consistency_check ) *flags2 &= (opj_flag_t)~T1_VISIT; \
-                                       data2 += w; \
-                               } \
-                               *colflags2 &= (opj_colflag_t)~(T1_COLFLAG_VISIT_ROW_0 | T1_COLFLAG_VISIT_ROW_1 | T1_COLFLAG_VISIT_ROW_2 | T1_COLFLAG_VISIT_ROW_3); \
-                       } \
-                       data1 += w << 2; \
-                       flags1 += flags_stride << 2; \
-                       colflags1 += flags_stride; \
-               } \
-               for (i = 0; i < w; ++i) { \
-                       OPJ_INT32 *data2 = data1 + i; \
-                       opj_flag_t *flags2 = flags1 + i; \
-                       opj_colflag_t *colflags2 = colflags1 + i; \
-                       for (j = k; j < h; ++j) { \
-                               flags2 += flags_stride; \
-                               opj_t1_dec_clnpass_step(t1, flags2, colflags2, data2, oneplushalf, j - k); \
-                               data2 += w; \
-                       } \
-                       *colflags2 &= (opj_colflag_t)~(T1_COLFLAG_VISIT_ROW_0 | T1_COLFLAG_VISIT_ROW_1 | T1_COLFLAG_VISIT_ROW_2 | T1_COLFLAG_VISIT_ROW_3); \
-               } \
-       } \
+    OPJ_INT32 one, half, oneplushalf, agg, runlen, vsc; \
+    OPJ_UINT32 i, j, k; \
+    OPJ_INT32 segsym = cblksty & J2K_CCP_CBLKSTY_SEGSYM; \
+     \
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */ \
+     \
+    one = 1 << bpno; \
+    half = one >> 1; \
+    oneplushalf = one | half; \
+    if (cblksty & J2K_CCP_CBLKSTY_VSC) { \
+    opj_colflag_t *colflags1 = &t1->colflags[flags_stride + 1]; \
+    for (k = 0; k < h; k += 4) { \
+        for (i = 0; i < w; ++i) { \
+            opj_colflag_t *colflags2 = colflags1 + i; \
+            if (k + 3 < h) { \
+                    agg = !((*colflags2 & (T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0 | T1_COLFLAG_SIG_OTHER_ROW_0 | \
+                                           T1_COLFLAG_SIG_ROW_1 | T1_COLFLAG_VISIT_ROW_1 | T1_COLFLAG_SIG_OTHER_ROW_1 | \
+                                           T1_COLFLAG_SIG_ROW_2 | T1_COLFLAG_VISIT_ROW_2 | T1_COLFLAG_SIG_OTHER_ROW_2 | \
+                                           T1_COLFLAG_SIG_ROW_3 | T1_COLFLAG_VISIT_ROW_3)) || \
+                          ((MACRO_t1_flags_internal(1 + k + 3,1 + i,flags_stride) \
+                           & ((~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) & (T1_SIG_OTH)))); \
+                } else { \
+                agg = 0; \
+            } \
+            if (agg) { \
+                opj_mqc_setcurctx(mqc, T1_CTXNO_AGG); \
+                if (!opj_mqc_decode(mqc)) { \
+                    continue; \
+                } \
+                opj_mqc_setcurctx(mqc, T1_CTXNO_UNI); \
+                runlen = opj_mqc_decode(mqc); \
+                runlen = (runlen << 1) | opj_mqc_decode(mqc); \
+            } else { \
+                runlen = 0; \
+            } \
+            for (j = k + (OPJ_UINT32)runlen; j < k + 4 && j < h; ++j) { \
+                    vsc = (j == k + 3 || j == h - 1) ? 1 : 0; \
+                    opj_t1_dec_clnpass_step_vsc( \
+                        t1, \
+                        &t1->flags[((j+1) * flags_stride) + i + 1], \
+                        colflags2, \
+                        &t1->data[(j * w) + i], \
+                        oneplushalf, \
+                        agg && (j == k + (OPJ_UINT32)runlen), \
+                        vsc, j - k); \
+            } \
+            *colflags2 &= (opj_colflag_t)~(T1_COLFLAG_VISIT_ROW_0 | T1_COLFLAG_VISIT_ROW_1 | T1_COLFLAG_VISIT_ROW_2 | T1_COLFLAG_VISIT_ROW_3); \
+        } \
+        colflags1 += flags_stride; \
+    } \
+    } else { \
+        OPJ_INT32 *data1 = t1->data; \
+        opj_flag_t *flags1 = &t1->flags[1]; \
+        opj_colflag_t *colflags1 = &t1->colflags[flags_stride + 1]; \
+        for (k = 0; k < (h & ~3u); k += 4) { \
+            for (i = 0; i < w; ++i) { \
+                OPJ_INT32 *data2 = data1 + i; \
+                opj_flag_t *flags2 = flags1 + i; \
+                opj_colflag_t *colflags2 = colflags1 + i; \
+                opj_colflag_t colflags = *colflags2; \
+                agg = !(colflags & (T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0 | T1_COLFLAG_SIG_OTHER_ROW_0 | \
+                                     T1_COLFLAG_SIG_ROW_1 | T1_COLFLAG_VISIT_ROW_1 | T1_COLFLAG_SIG_OTHER_ROW_1 | \
+                                     T1_COLFLAG_SIG_ROW_2 | T1_COLFLAG_VISIT_ROW_2 | T1_COLFLAG_SIG_OTHER_ROW_2 | \
+                                     T1_COLFLAG_SIG_ROW_3 | T1_COLFLAG_VISIT_ROW_3 | T1_COLFLAG_SIG_OTHER_ROW_3)); \
+                if( consistency_check ) { \
+                    assert( agg == !((MACRO_t1_flags_internal(1 + k, 1 + i,flags_stride) | \
+                                      MACRO_t1_flags_internal(1 + k + 1, 1 + i,flags_stride) | \
+                                      MACRO_t1_flags_internal(1 + k + 2, 1 + i,flags_stride) | \
+                                      MACRO_t1_flags_internal(1 + k + 3, 1 + i,flags_stride)) & (T1_SIG | T1_VISIT | T1_SIG_OTH)) ); \
+                } \
+                if (agg) { \
+                    opj_mqc_setcurctx(mqc, T1_CTXNO_AGG); \
+                    if (!opj_mqc_decode(mqc)) { \
+                        continue; \
+                    } \
+                    opj_mqc_setcurctx(mqc, T1_CTXNO_UNI); \
+                    runlen = opj_mqc_decode(mqc); \
+                    runlen = (runlen << 1) | opj_mqc_decode(mqc); \
+                    flags2 += (OPJ_UINT32)runlen * flags_stride; \
+                    data2 += (OPJ_UINT32)runlen * w; \
+                    for (j = (OPJ_UINT32)runlen; j < 4; ++j) { \
+                        flags2 += flags_stride; \
+                        if (j == (OPJ_UINT32)runlen) { \
+                            opj_t1_dec_clnpass_step_partial(t1, flags2, colflags2, data2, oneplushalf, j); \
+                        } else { \
+                            opj_t1_dec_clnpass_step(t1, flags2, colflags2, data2, oneplushalf, j); \
+                        } \
+                        data2 += w; \
+                    } \
+                } else { \
+                    flags2 += flags_stride; \
+                    if( consistency_check ) { assert( (!(colflags & (T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0))) == (!(*flags2 & (T1_SIG | T1_VISIT))) ); } \
+                    if (!(colflags & (T1_COLFLAG_SIG_ROW_0 | T1_COLFLAG_VISIT_ROW_0))) {\
+                        opj_t1_dec_clnpass_step_only_if_flag_not_sig_visit(t1, flags2, colflags2, data2, oneplushalf, 0U, flags_stride); \
+                    } \
+                    if( consistency_check ) *flags2 &= (opj_flag_t)~T1_VISIT; \
+                    data2 += w; \
+                    flags2 += flags_stride; \
+                    if( consistency_check ) { assert( (!(colflags & (T1_COLFLAG_SIG_ROW_1 | T1_COLFLAG_VISIT_ROW_1))) == (!(*flags2 & (T1_SIG | T1_VISIT))) ); } \
+                    if (!(colflags & (T1_COLFLAG_SIG_ROW_1 | T1_COLFLAG_VISIT_ROW_1))) {\
+                        opj_t1_dec_clnpass_step_only_if_flag_not_sig_visit(t1, flags2, colflags2, data2, oneplushalf, 1U, flags_stride); \
+                    } \
+                    if( consistency_check ) *flags2 &= (opj_flag_t)~T1_VISIT; \
+                    data2 += w; \
+                    flags2 += flags_stride; \
+                    if( consistency_check ) { assert( (!(colflags & (T1_COLFLAG_SIG_ROW_2 | T1_COLFLAG_VISIT_ROW_2))) == (!(*flags2 & (T1_SIG | T1_VISIT))) ); } \
+                    if (!(colflags & (T1_COLFLAG_SIG_ROW_2 | T1_COLFLAG_VISIT_ROW_2))) {\
+                        opj_t1_dec_clnpass_step_only_if_flag_not_sig_visit(t1, flags2, colflags2, data2, oneplushalf, 2U, flags_stride); \
+                    } \
+                    if( consistency_check ) *flags2 &= (opj_flag_t)~T1_VISIT; \
+                    data2 += w; \
+                    flags2 += flags_stride; \
+                    if( consistency_check ) { assert( (!(colflags & (T1_COLFLAG_SIG_ROW_3 | T1_COLFLAG_VISIT_ROW_3))) == (!(*flags2 & (T1_SIG | T1_VISIT))) ); } \
+                    if (!(colflags & (T1_COLFLAG_SIG_ROW_3 | T1_COLFLAG_VISIT_ROW_3))) {\
+                        opj_t1_dec_clnpass_step_only_if_flag_not_sig_visit(t1, flags2, colflags2, data2, oneplushalf, 3U, flags_stride); \
+                    } \
+                    if( consistency_check ) *flags2 &= (opj_flag_t)~T1_VISIT; \
+                    data2 += w; \
+                } \
+                *colflags2 &= (opj_colflag_t)~(T1_COLFLAG_VISIT_ROW_0 | T1_COLFLAG_VISIT_ROW_1 | T1_COLFLAG_VISIT_ROW_2 | T1_COLFLAG_VISIT_ROW_3); \
+            } \
+            data1 += w << 2; \
+            flags1 += flags_stride << 2; \
+            colflags1 += flags_stride; \
+        } \
+        for (i = 0; i < w; ++i) { \
+            OPJ_INT32 *data2 = data1 + i; \
+            opj_flag_t *flags2 = flags1 + i; \
+            opj_colflag_t *colflags2 = colflags1 + i; \
+            for (j = k; j < h; ++j) { \
+                flags2 += flags_stride; \
+                opj_t1_dec_clnpass_step(t1, flags2, colflags2, data2, oneplushalf, j - k); \
+                data2 += w; \
+            } \
+            *colflags2 &= (opj_colflag_t)~(T1_COLFLAG_VISIT_ROW_0 | T1_COLFLAG_VISIT_ROW_1 | T1_COLFLAG_VISIT_ROW_2 | T1_COLFLAG_VISIT_ROW_3); \
+        } \
+    } \
  \
-       if (segsym) { \
-               OPJ_INT32 v = 0; \
-               opj_mqc_setcurctx(mqc, T1_CTXNO_UNI); \
-               v = opj_mqc_decode(mqc); \
-               v = (v << 1) | opj_mqc_decode(mqc); \
-               v = (v << 1) | opj_mqc_decode(mqc); \
-               v = (v << 1) | opj_mqc_decode(mqc); \
-               /* \
-               if (v!=0xa) { \
-                       opj_event_msg(t1->cinfo, EVT_WARNING, "Bad segmentation symbol %x\n", v); \
-               } \
-               */ \
-       } \
-}                              /* VSC and  BYPASS by Antonin */
+    if (segsym) { \
+        OPJ_INT32 v = 0; \
+        opj_mqc_setcurctx(mqc, T1_CTXNO_UNI); \
+        v = opj_mqc_decode(mqc); \
+        v = (v << 1) | opj_mqc_decode(mqc); \
+        v = (v << 1) | opj_mqc_decode(mqc); \
+        v = (v << 1) | opj_mqc_decode(mqc); \
+        /* \
+        if (v!=0xa) { \
+            opj_event_msg(t1->cinfo, EVT_WARNING, "Bad segmentation symbol %x\n", v); \
+        } \
+        */ \
+    } \
+}               /* VSC and  BYPASS by Antonin */
 
 static void opj_t1_dec_clnpass_64x64(
-               opj_t1_t *t1,
-               OPJ_INT32 bpno,
-               OPJ_INT32 cblksty)
+    opj_t1_t *t1,
+    OPJ_INT32 bpno,
+    OPJ_INT32 cblksty)
 {
 #ifdef CONSISTENCY_CHECK
-       opj_t1_dec_clnpass_internal(OPJ_TRUE, t1, bpno, cblksty, 64, 64, 66);
+    opj_t1_dec_clnpass_internal(OPJ_TRUE, t1, bpno, cblksty, 64, 64, 66);
 #else
-       opj_t1_dec_clnpass_internal(OPJ_FALSE, t1, bpno, cblksty, 64, 64, 66);
+    opj_t1_dec_clnpass_internal(OPJ_FALSE, t1, bpno, cblksty, 64, 64, 66);
 #endif
 }
 
 static void opj_t1_dec_clnpass_generic(
-               opj_t1_t *t1,
-               OPJ_INT32 bpno,
-               OPJ_INT32 cblksty)
+    opj_t1_t *t1,
+    OPJ_INT32 bpno,
+    OPJ_INT32 cblksty)
 {
 #ifdef CONSISTENCY_CHECK
-       opj_t1_dec_clnpass_internal(OPJ_TRUE, t1, bpno, cblksty, t1->w, t1->h, t1->flags_stride);
+    opj_t1_dec_clnpass_internal(OPJ_TRUE, t1, bpno, cblksty, t1->w, t1->h,
+                                t1->flags_stride);
 #else
-       opj_t1_dec_clnpass_internal(OPJ_FALSE, t1, bpno, cblksty, t1->w, t1->h, t1->flags_stride);
+    opj_t1_dec_clnpass_internal(OPJ_FALSE, t1, bpno, cblksty, t1->w, t1->h,
+                                t1->flags_stride);
 #endif
 }
 
 
 /** mod fixed_quality */
 static OPJ_FLOAT64 opj_t1_getwmsedec(
-               OPJ_INT32 nmsedec,
-               OPJ_UINT32 compno,
-               OPJ_UINT32 level,
-               OPJ_UINT32 orient,
-               OPJ_INT32 bpno,
-               OPJ_UINT32 qmfbid,
-               OPJ_FLOAT64 stepsize,
-               OPJ_UINT32 numcomps,
-               const OPJ_FLOAT64 * mct_norms,
-               OPJ_UINT32 mct_numcomps)
+    OPJ_INT32 nmsedec,
+    OPJ_UINT32 compno,
+    OPJ_UINT32 level,
+    OPJ_UINT32 orient,
+    OPJ_INT32 bpno,
+    OPJ_UINT32 qmfbid,
+    OPJ_FLOAT64 stepsize,
+    OPJ_UINT32 numcomps,
+    const OPJ_FLOAT64 * mct_norms,
+    OPJ_UINT32 mct_numcomps)
 {
-       OPJ_FLOAT64 w1 = 1, w2, wmsedec;
-       OPJ_ARG_NOT_USED(numcomps);
+    OPJ_FLOAT64 w1 = 1, w2, wmsedec;
+    OPJ_ARG_NOT_USED(numcomps);
 
-       if (mct_norms && (compno < mct_numcomps)) {
-               w1 = mct_norms[compno];
-       }
+    if (mct_norms && (compno < mct_numcomps)) {
+        w1 = mct_norms[compno];
+    }
 
-       if (qmfbid == 1) {
-               w2 = opj_dwt_getnorm(level, orient);
-       } else {        /* if (qmfbid == 0) */
-               w2 = opj_dwt_getnorm_real(level, orient);
-       }
+    if (qmfbid == 1) {
+        w2 = opj_dwt_getnorm(level, orient);
+    } else {    /* if (qmfbid == 0) */
+        w2 = opj_dwt_getnorm_real(level, orient);
+    }
 
-       wmsedec = w1 * w2 * stepsize * (1 << bpno);
-       wmsedec *= wmsedec * nmsedec / 8192.0;
+    wmsedec = w1 * w2 * stepsize * (1 << bpno);
+    wmsedec *= wmsedec * nmsedec / 8192.0;
 
-       return wmsedec;
+    return wmsedec;
 }
 
 static OPJ_BOOL opj_t1_allocate_buffers(
-               opj_t1_t *t1,
-               OPJ_UINT32 w,
-               OPJ_UINT32 h)
+    opj_t1_t *t1,
+    OPJ_UINT32 w,
+    OPJ_UINT32 h)
 {
-       /* encoder uses tile buffer, so no need to allocate */
-       if (!t1->encoder) {
-               size_t datasize;
-               
+    /* encoder uses tile buffer, so no need to allocate */
+    if (!t1->encoder) {
+        size_t datasize;
+
 #if (SIZE_MAX / 0xFFFFFFFFU) < 0xFFFFFFFFU /* UINT32_MAX */
-               /* Overflow check */
-               if ((w > 0U) && ((size_t)h > (SIZE_MAX / (size_t)w))) {
-                       /* FIXME event manager error callback */
-                       return OPJ_FALSE;
-               }
+        /* Overflow check */
+        if ((w > 0U) && ((size_t)h > (SIZE_MAX / (size_t)w))) {
+            /* FIXME event manager error callback */
+            return OPJ_FALSE;
+        }
 #endif
-               datasize = (size_t)w * h;
-
-               /* Overflow check */
-               if (datasize > (SIZE_MAX / sizeof(OPJ_INT32))) {
-                       /* FIXME event manager error callback */
-                       return OPJ_FALSE;
-               }
-
-               if(datasize > (size_t)t1->datasize){
-                       opj_aligned_free(t1->data);
-                       t1->data = (OPJ_INT32*) opj_aligned_malloc(datasize * sizeof(OPJ_INT32));
-                       if(!t1->data){
-                               /* FIXME event manager error callback */
-                               return OPJ_FALSE;
-                       }
+        datasize = (size_t)w * h;
+
+        /* Overflow check */
+        if (datasize > (SIZE_MAX / sizeof(OPJ_INT32))) {
+            /* FIXME event manager error callback */
+            return OPJ_FALSE;
+        }
+
+        if (datasize > (size_t)t1->datasize) {
+            opj_aligned_free(t1->data);
+            t1->data = (OPJ_INT32*) opj_aligned_malloc(datasize * sizeof(OPJ_INT32));
+            if (!t1->data) {
+                /* FIXME event manager error callback */
+                return OPJ_FALSE;
+            }
 #if SIZE_MAX > 0xFFFFFFFFU /* UINT32_MAX */
-                       /* TODO remove this if t1->datasize type changes to size_t */
-                       /* Overflow check */
-                       if (datasize > (size_t)0xFFFFFFFFU /* UINT32_MAX */) {
-                               /* FIXME event manager error callback */
-                               return OPJ_FALSE;
-                       }
+            /* TODO remove this if t1->datasize type changes to size_t */
+            /* Overflow check */
+            if (datasize > (size_t)0xFFFFFFFFU /* UINT32_MAX */) {
+                /* FIXME event manager error callback */
+                return OPJ_FALSE;
+            }
 #endif
-                       t1->datasize = (OPJ_UINT32)datasize;
-               }
-               /* memset first arg is declared to never be null by gcc */
-               if (t1->data != NULL) {
-                       memset(t1->data, 0, datasize * sizeof(OPJ_INT32));
-               }
-       }
-
-       {
-               size_t flagssize;
-
-               /* Overflow check */
-               if (w > (0xFFFFFFFFU /* UINT32_MAX */ - 2U)) {
-                       /* FIXME event manager error callback */
-                       return OPJ_FALSE;
-               }
-               t1->flags_stride = w + 2U; /* can't be 0U */
+            t1->datasize = (OPJ_UINT32)datasize;
+        }
+        /* memset first arg is declared to never be null by gcc */
+        if (t1->data != NULL) {
+            memset(t1->data, 0, datasize * sizeof(OPJ_INT32));
+        }
+    }
+
+    {
+        size_t flagssize;
+
+        /* Overflow check */
+        if (w > (0xFFFFFFFFU /* UINT32_MAX */ - 2U)) {
+            /* FIXME event manager error callback */
+            return OPJ_FALSE;
+        }
+        t1->flags_stride = w + 2U; /* can't be 0U */
 
 #if (SIZE_MAX - 3U) < 0xFFFFFFFFU /* UINT32_MAX */
-               /* Overflow check */
-               if (h > (0xFFFFFFFFU /* UINT32_MAX */ - 3U)) {
-                       /* FIXME event manager error callback */
-                       return OPJ_FALSE;
-               }
+        /* Overflow check */
+        if (h > (0xFFFFFFFFU /* UINT32_MAX */ - 3U)) {
+            /* FIXME event manager error callback */
+            return OPJ_FALSE;
+        }
 #endif
-               flagssize = (size_t)h + 3U;
-               
-               /* Overflow check */
-               if (flagssize > (SIZE_MAX / (size_t)t1->flags_stride)) {
-                       /* FIXME event manager error callback */
-                       return OPJ_FALSE;
-               }
-               flagssize *= (size_t)t1->flags_stride;
-
-               if(flagssize > (size_t)t1->flagssize){
-                       /* Overflow check */
-                       if (flagssize > (SIZE_MAX / sizeof(opj_flag_t))) {
-                               /* FIXME event manager error callback */
-                               return OPJ_FALSE;
-                       }
-                       opj_aligned_free(t1->flags);
-                       t1->flags = (opj_flag_t*) opj_aligned_malloc(flagssize * sizeof(opj_flag_t));
-                       if(!t1->flags){
-                               /* FIXME event manager error callback */
-                               return OPJ_FALSE;
-                       }
+        flagssize = (size_t)h + 3U;
+
+        /* Overflow check */
+        if (flagssize > (SIZE_MAX / (size_t)t1->flags_stride)) {
+            /* FIXME event manager error callback */
+            return OPJ_FALSE;
+        }
+        flagssize *= (size_t)t1->flags_stride;
+
+        if (flagssize > (size_t)t1->flagssize) {
+            /* Overflow check */
+            if (flagssize > (SIZE_MAX / sizeof(opj_flag_t))) {
+                /* FIXME event manager error callback */
+                return OPJ_FALSE;
+            }
+            opj_aligned_free(t1->flags);
+            t1->flags = (opj_flag_t*) opj_aligned_malloc(flagssize * sizeof(opj_flag_t));
+            if (!t1->flags) {
+                /* FIXME event manager error callback */
+                return OPJ_FALSE;
+            }
 #if SIZE_MAX > 0xFFFFFFFFU /* UINT32_MAX */
-                       /* TODO remove this if t1->flagssize type changes to size_t */
-                       /* Overflow check */
-                       if (flagssize > (size_t)0xFFFFFFFFU /* UINT32_MAX */) {
-                               /* FIXME event manager error callback */
-                               return OPJ_FALSE;
-                       }
+            /* TODO remove this if t1->flagssize type changes to size_t */
+            /* Overflow check */
+            if (flagssize > (size_t)0xFFFFFFFFU /* UINT32_MAX */) {
+                /* FIXME event manager error callback */
+                return OPJ_FALSE;
+            }
 #endif
-                       t1->flagssize = (OPJ_UINT32)flagssize;
-               }
-               memset(t1->flags, 0, flagssize * sizeof(opj_flag_t));
-       }
-       if (!t1->encoder) {
-               size_t colflags_size = ((((size_t)h + 3U) / 4U) + 2U); /* Can't overflow, h checked against UINT32_MAX - 3U */
-               
-               /* Overflow check */
-               if (colflags_size > (SIZE_MAX / (size_t)t1->flags_stride)) {
-                       /* FIXME event manager error callback */
-                       return OPJ_FALSE;
-               }
-               colflags_size *= (size_t)t1->flags_stride;
-               
-               if(colflags_size > (size_t)t1->colflags_size){
-                       /* Overflow check */
-                       if ((size_t)colflags_size > (SIZE_MAX / sizeof(opj_colflag_t))) {
-                               /* FIXME event manager error callback */
-                               return OPJ_FALSE;
-                       }
-                       opj_aligned_free(t1->colflags);
-                       t1->colflags = (opj_colflag_t*) opj_aligned_malloc(colflags_size * sizeof(opj_colflag_t));
-                       if(!t1->colflags){
-                               /* FIXME event manager error callback */
-                               return OPJ_FALSE;
-                       }
+            t1->flagssize = (OPJ_UINT32)flagssize;
+        }
+        memset(t1->flags, 0, flagssize * sizeof(opj_flag_t));
+    }
+    if (!t1->encoder) {
+        size_t colflags_size = ((((size_t)h + 3U) / 4U) +
+                                2U); /* Can't overflow, h checked against UINT32_MAX - 3U */
+
+        /* Overflow check */
+        if (colflags_size > (SIZE_MAX / (size_t)t1->flags_stride)) {
+            /* FIXME event manager error callback */
+            return OPJ_FALSE;
+        }
+        colflags_size *= (size_t)t1->flags_stride;
+
+        if (colflags_size > (size_t)t1->colflags_size) {
+            /* Overflow check */
+            if ((size_t)colflags_size > (SIZE_MAX / sizeof(opj_colflag_t))) {
+                /* FIXME event manager error callback */
+                return OPJ_FALSE;
+            }
+            opj_aligned_free(t1->colflags);
+            t1->colflags = (opj_colflag_t*) opj_aligned_malloc(colflags_size * sizeof(
+                               opj_colflag_t));
+            if (!t1->colflags) {
+                /* FIXME event manager error callback */
+                return OPJ_FALSE;
+            }
 #if SIZE_MAX > 0xFFFFFFFFU /* UINT32_MAX */
-                       /* TODO remove this if t1->colflags_size type changes to size_t */
-                       /* Overflow check */
-                       if (colflags_size > (size_t)0xFFFFFFFFU /* UINT32_MAX */) {
-                               /* FIXME event manager error callback */
-                               return OPJ_FALSE;
-                       }
+            /* TODO remove this if t1->colflags_size type changes to size_t */
+            /* Overflow check */
+            if (colflags_size > (size_t)0xFFFFFFFFU /* UINT32_MAX */) {
+                /* FIXME event manager error callback */
+                return OPJ_FALSE;
+            }
 #endif
-                       t1->colflags_size = (OPJ_UINT32)colflags_size;
-               }
-               memset(t1->colflags, 0, colflags_size * sizeof(opj_colflag_t));
-       }
+            t1->colflags_size = (OPJ_UINT32)colflags_size;
+        }
+        memset(t1->colflags, 0, colflags_size * sizeof(opj_colflag_t));
+    }
 
-       t1->w = w;
-       t1->h = h;
+    t1->w = w;
+    t1->h = h;
 
-       return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 /* ----------------------------------------------------------------------- */
@@ -1549,28 +1610,28 @@ static OPJ_BOOL opj_t1_allocate_buffers(
 */
 opj_t1_t* opj_t1_create(OPJ_BOOL isEncoder)
 {
-       opj_t1_t *l_t1 = 00;
-
-       l_t1 = (opj_t1_t*) opj_calloc(1,sizeof(opj_t1_t));
-       if (!l_t1) {
-               return 00;
-       }
-
-       /* create MQC and RAW handles */
-       l_t1->mqc = opj_mqc_create();
-       if (! l_t1->mqc) {
-               opj_t1_destroy(l_t1);
-               return 00;
-       }
-
-       l_t1->raw = opj_raw_create();
-       if (! l_t1->raw) {
-               opj_t1_destroy(l_t1);
-               return 00;
-       }
-       l_t1->encoder = isEncoder;
-
-       return l_t1;
+    opj_t1_t *l_t1 = 00;
+
+    l_t1 = (opj_t1_t*) opj_calloc(1, sizeof(opj_t1_t));
+    if (!l_t1) {
+        return 00;
+    }
+
+    /* create MQC and RAW handles */
+    l_t1->mqc = opj_mqc_create();
+    if (! l_t1->mqc) {
+        opj_t1_destroy(l_t1);
+        return 00;
+    }
+
+    l_t1->raw = opj_raw_create();
+    if (! l_t1->raw) {
+        opj_t1_destroy(l_t1);
+        return 00;
+    }
+    l_t1->encoder = isEncoder;
+
+    return l_t1;
 }
 
 
@@ -1581,36 +1642,35 @@ opj_t1_t* opj_t1_create(OPJ_BOOL isEncoder)
 */
 void opj_t1_destroy(opj_t1_t *p_t1)
 {
-       if (! p_t1) {
-               return;
-       }
-
-       /* destroy MQC and RAW handles */
-       opj_mqc_destroy(p_t1->mqc);
-       p_t1->mqc = 00;
-       opj_raw_destroy(p_t1->raw);
-       p_t1->raw = 00;
-       
-       /* encoder uses tile buffer, so no need to free */
-       if (!p_t1->encoder && p_t1->data) {
-               opj_aligned_free(p_t1->data);
-               p_t1->data = 00;
-       }
-
-       if (p_t1->flags) {
-               opj_aligned_free(p_t1->flags);
-               p_t1->flags = 00;
-       }
-
-       if (p_t1->colflags) {
-               opj_aligned_free(p_t1->colflags);
-               p_t1->colflags = 00;
-       }
-       opj_free(p_t1);
+    if (! p_t1) {
+        return;
+    }
+
+    /* destroy MQC and RAW handles */
+    opj_mqc_destroy(p_t1->mqc);
+    p_t1->mqc = 00;
+    opj_raw_destroy(p_t1->raw);
+    p_t1->raw = 00;
+
+    /* encoder uses tile buffer, so no need to free */
+    if (!p_t1->encoder && p_t1->data) {
+        opj_aligned_free(p_t1->data);
+        p_t1->data = 00;
+    }
+
+    if (p_t1->flags) {
+        opj_aligned_free(p_t1->flags);
+        p_t1->flags = 00;
+    }
+
+    if (p_t1->colflags) {
+        opj_aligned_free(p_t1->colflags);
+        p_t1->colflags = 00;
+    }
+    opj_free(p_t1);
 }
 
-typedef struct
-{
+typedef struct {
     OPJ_UINT32 resno;
     opj_tcd_cblk_dec_t* cblk;
     opj_tcd_band_t* band;
@@ -1621,7 +1681,7 @@ typedef struct
 
 static void opj_t1_destroy_wrapper(void* t1)
 {
-    opj_t1_destroy( (opj_t1_t*) t1 );
+    opj_t1_destroy((opj_t1_t*) t1);
 }
 
 static void opj_t1_clbl_decode_processor(void* user_data, opj_tls_t* tls)
@@ -1647,28 +1707,26 @@ static void opj_t1_clbl_decode_processor(void* user_data, opj_tls_t* tls)
     tccp = job->tccp;
     tile_w = (OPJ_UINT32)(tilec->x1 - tilec->x0);
 
-    if( !*(job->pret) )
-    {
+    if (!*(job->pret)) {
         opj_free(job);
         return;
     }
 
     t1 = (opj_t1_t*) opj_tls_get(tls, OPJ_TLS_KEY_T1);
-    if( t1 == NULL )
-    {
-        t1 = opj_t1_create( OPJ_FALSE );
-        opj_tls_set( tls, OPJ_TLS_KEY_T1, t1, opj_t1_destroy_wrapper );
+    if (t1 == NULL) {
+        t1 = opj_t1_create(OPJ_FALSE);
+        opj_tls_set(tls, OPJ_TLS_KEY_T1, t1, opj_t1_destroy_wrapper);
     }
 
     if (OPJ_FALSE == opj_t1_decode_cblk(
-                            t1,
-                            cblk,
-                            band->bandno,
-                            (OPJ_UINT32)tccp->roishift,
-                            tccp->cblksty)) {
-            *(job->pret) = OPJ_FALSE;
-            opj_free(job);
-            return;
+                t1,
+                cblk,
+                band->bandno,
+                (OPJ_UINT32)tccp->roishift,
+                tccp->cblksty)) {
+        *(job->pret) = OPJ_FALSE;
+        opj_free(job);
+        return;
     }
 
     x = cblk->x0 - band->x0;
@@ -1682,7 +1740,7 @@ static void opj_t1_clbl_decode_processor(void* user_data, opj_tls_t* tls)
         y += pres->y1 - pres->y0;
     }
 
-    datap=t1->data;
+    datap = t1->data;
     cblk_w = t1->w;
     cblk_h = t1->h;
 
@@ -1700,7 +1758,8 @@ static void opj_t1_clbl_decode_processor(void* user_data, opj_tls_t* tls)
         }
     }
     if (tccp->qmfbid == 1) {
-        OPJ_INT32* OPJ_RESTRICT tiledp = &tilec->data[(OPJ_UINT32)y * tile_w + (OPJ_UINT32)x];
+        OPJ_INT32* OPJ_RESTRICT tiledp = &tilec->data[(OPJ_UINT32)y * tile_w +
+                                                       (OPJ_UINT32)x];
         for (j = 0; j < cblk_h; ++j) {
             i = 0;
             for (; i < (cblk_w & ~(OPJ_UINT32)3U); i += 4U) {
@@ -1719,11 +1778,12 @@ static void opj_t1_clbl_decode_processor(void* user_data, opj_tls_t* tls)
             }
         }
     } else {        /* if (tccp->qmfbid == 0) */
-        OPJ_FLOAT32* OPJ_RESTRICT tiledp = (OPJ_FLOAT32*) &tilec->data[(OPJ_UINT32)y * tile_w + (OPJ_UINT32)x];
+        OPJ_FLOAT32* OPJ_RESTRICT tiledp = (OPJ_FLOAT32*) &tilec->data[(OPJ_UINT32)y *
+                                                         tile_w + (OPJ_UINT32)x];
         for (j = 0; j < cblk_h; ++j) {
             OPJ_FLOAT32* OPJ_RESTRICT tiledp2 = tiledp;
             for (i = 0; i < cblk_w; ++i) {
-                OPJ_FLOAT32 tmp = (OPJ_FLOAT32)*datap * band->stepsize;
+                OPJ_FLOAT32 tmp = (OPJ_FLOAT32) * datap * band->stepsize;
                 *tiledp2 = tmp;
                 datap++;
                 tiledp2++;
@@ -1736,30 +1796,30 @@ static void opj_t1_clbl_decode_processor(void* user_data, opj_tls_t* tls)
 }
 
 
-void opj_t1_decode_cblks( opj_thread_pool_t* tp,
-                          volatile OPJ_BOOL* pret,
-                          opj_tcd_tilecomp_t* tilec,
-                          opj_tccp_t* tccp
-                         )
+void opj_t1_decode_cblks(opj_thread_pool_t* tp,
+                         volatile OPJ_BOOL* pret,
+                         opj_tcd_tilecomp_t* tilec,
+                         opj_tccp_t* tccp
+                        )
 {
-       OPJ_UINT32 resno, bandno, precno, cblkno;
+    OPJ_UINT32 resno, bandno, precno, cblkno;
 
-       for (resno = 0; resno < tilec->minimum_num_resolutions; ++resno) {
-               opj_tcd_resolution_t* res = &tilec->resolutions[resno];
+    for (resno = 0; resno < tilec->minimum_num_resolutions; ++resno) {
+        opj_tcd_resolution_t* res = &tilec->resolutions[resno];
 
-               for (bandno = 0; bandno < res->numbands; ++bandno) {
-                       opj_tcd_band_t* OPJ_RESTRICT band = &res->bands[bandno];
+        for (bandno = 0; bandno < res->numbands; ++bandno) {
+            opj_tcd_band_t* OPJ_RESTRICT band = &res->bands[bandno];
 
-                       for (precno = 0; precno < res->pw * res->ph; ++precno) {
-                               opj_tcd_precinct_t* precinct = &band->precincts[precno];
+            for (precno = 0; precno < res->pw * res->ph; ++precno) {
+                opj_tcd_precinct_t* precinct = &band->precincts[precno];
 
-                               for (cblkno = 0; cblkno < precinct->cw * precinct->ch; ++cblkno) {
-                                       opj_tcd_cblk_dec_t* cblk = &precinct->cblks.dec[cblkno];
+                for (cblkno = 0; cblkno < precinct->cw * precinct->ch; ++cblkno) {
+                    opj_tcd_cblk_dec_t* cblk = &precinct->cblks.dec[cblkno];
                     opj_t1_cblk_decode_processing_job_t* job;
 
-                    job = (opj_t1_cblk_decode_processing_job_t*) opj_calloc(1, sizeof(opj_t1_cblk_decode_processing_job_t));
-                    if( !job )
-                    {
+                    job = (opj_t1_cblk_decode_processing_job_t*) opj_calloc(1,
+                            sizeof(opj_t1_cblk_decode_processing_job_t));
+                    if (!job) {
                         *pret = OPJ_FALSE;
                         return;
                     }
@@ -1769,469 +1829,482 @@ void opj_t1_decode_cblks( opj_thread_pool_t* tp,
                     job->tilec = tilec;
                     job->tccp = tccp;
                     job->pret = pret;
-                    opj_thread_pool_submit_job( tp, opj_t1_clbl_decode_processor, job );
-                    if( !(*pret) )
+                    opj_thread_pool_submit_job(tp, opj_t1_clbl_decode_processor, job);
+                    if (!(*pret)) {
                         return;
-                               } /* cblkno */
-                       } /* precno */
-               } /* bandno */
-       } /* resno */
+                    }
+                } /* cblkno */
+            } /* precno */
+        } /* bandno */
+    } /* resno */
 
     return;
 }
 
 
 static OPJ_BOOL opj_t1_decode_cblk(opj_t1_t *t1,
-                            opj_tcd_cblk_dec_t* cblk,
-                            OPJ_UINT32 orient,
-                            OPJ_UINT32 roishift,
-                            OPJ_UINT32 cblksty)
+                                   opj_tcd_cblk_dec_t* cblk,
+                                   OPJ_UINT32 orient,
+                                   OPJ_UINT32 roishift,
+                                   OPJ_UINT32 cblksty)
 {
-       opj_raw_t *raw = t1->raw;       /* RAW component */
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       OPJ_INT32 bpno_plus_one;
-       OPJ_UINT32 passtype;
-       OPJ_UINT32 segno, passno;
-       OPJ_BYTE type = T1_TYPE_MQ; /* BYPASS mode */
-
-       mqc->lut_ctxno_zc_orient = lut_ctxno_zc + orient * 256;
-
-       if(!opj_t1_allocate_buffers(
-                               t1,
-                               (OPJ_UINT32)(cblk->x1 - cblk->x0),
-                               (OPJ_UINT32)(cblk->y1 - cblk->y0)))
-       {
-               return OPJ_FALSE;
-       }
-
-       bpno_plus_one = (OPJ_INT32)(roishift + cblk->numbps);
-       passtype = 2;
-
-       opj_mqc_resetstates(mqc);
-       opj_mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46);
-       opj_mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3);
-       opj_mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4);
-
-       for (segno = 0; segno < cblk->real_num_segs; ++segno) {
-               opj_tcd_seg_t *seg = &cblk->segs[segno];
-
-               /* BYPASS mode */
-               type = ((bpno_plus_one <= ((OPJ_INT32) (cblk->numbps)) - 4) && (passtype < 2) && (cblksty & J2K_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
-               /* FIXME: slviewer gets here with a null pointer. Why? Partially downloaded and/or corrupt textures? */
-               if(seg->data == 00){
-                       continue;
-               }
-               if (type == T1_TYPE_RAW) {
-                       opj_raw_init_dec(raw, (*seg->data) + seg->dataindex, seg->len);
-               } else {
-            if (OPJ_FALSE == opj_mqc_init_dec(mqc, (*seg->data) + seg->dataindex, seg->len)) {
-                    return OPJ_FALSE;
+    opj_raw_t *raw = t1->raw;   /* RAW component */
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    OPJ_INT32 bpno_plus_one;
+    OPJ_UINT32 passtype;
+    OPJ_UINT32 segno, passno;
+    OPJ_BYTE type = T1_TYPE_MQ; /* BYPASS mode */
+
+    mqc->lut_ctxno_zc_orient = lut_ctxno_zc + orient * 256;
+
+    if (!opj_t1_allocate_buffers(
+                t1,
+                (OPJ_UINT32)(cblk->x1 - cblk->x0),
+                (OPJ_UINT32)(cblk->y1 - cblk->y0))) {
+        return OPJ_FALSE;
+    }
+
+    bpno_plus_one = (OPJ_INT32)(roishift + cblk->numbps);
+    passtype = 2;
+
+    opj_mqc_resetstates(mqc);
+    opj_mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46);
+    opj_mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3);
+    opj_mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4);
+
+    for (segno = 0; segno < cblk->real_num_segs; ++segno) {
+        opj_tcd_seg_t *seg = &cblk->segs[segno];
+
+        /* BYPASS mode */
+        type = ((bpno_plus_one <= ((OPJ_INT32)(cblk->numbps)) - 4) && (passtype < 2) &&
+                (cblksty & J2K_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
+        /* FIXME: slviewer gets here with a null pointer. Why? Partially downloaded and/or corrupt textures? */
+        if (seg->data == 00) {
+            continue;
+        }
+        if (type == T1_TYPE_RAW) {
+            opj_raw_init_dec(raw, (*seg->data) + seg->dataindex, seg->len);
+        } else {
+            if (OPJ_FALSE == opj_mqc_init_dec(mqc, (*seg->data) + seg->dataindex,
+                                              seg->len)) {
+                return OPJ_FALSE;
             }
-               }
-
-               if( t1->w == 64 && t1->h == 64 )
-               {
-                 for (passno = 0; (passno < seg->real_num_passes) && (bpno_plus_one >= 1); ++passno) {
-                         switch (passtype) {
-                                 case 0:
-                                         if (type == T1_TYPE_RAW) {
-                                                 opj_t1_dec_sigpass_raw(t1, bpno_plus_one, (OPJ_INT32)cblksty);
-                                         } else {
-                                                 if (cblksty & J2K_CCP_CBLKSTY_VSC) {
-                                                         opj_t1_dec_sigpass_mqc_vsc(t1, bpno_plus_one);
-                                                 } else {
-                                                         opj_t1_dec_sigpass_mqc_64x64(t1, bpno_plus_one);
-                                                 }
-                                         }
-                                         break;
-                                 case 1:
-                                         if (type == T1_TYPE_RAW) {
-                                                         opj_t1_dec_refpass_raw(t1, bpno_plus_one);
-                                         } else {
-                                                 if (cblksty & J2K_CCP_CBLKSTY_VSC) {
-                                                         opj_t1_dec_refpass_mqc_vsc(t1, bpno_plus_one);
-                                                 } else {
-                                                         opj_t1_dec_refpass_mqc_64x64(t1, bpno_plus_one);
-                                                 }
-                                         }
-                                         break;
-                                 case 2:
-                                         opj_t1_dec_clnpass_64x64(t1, bpno_plus_one, (OPJ_INT32)cblksty);
-                                         break;
-                         }
-
-                         if ((cblksty & J2K_CCP_CBLKSTY_RESET) && type == T1_TYPE_MQ) {
-                                 opj_mqc_resetstates(mqc);
-                                 opj_mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46);
-                                 opj_mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3);
-                                 opj_mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4);
-                         }
-                         if (++passtype == 3) {
-                                 passtype = 0;
-                                 bpno_plus_one--;
-                         }
-                 }
-               }
-               else
-               {
-                 for (passno = 0; (passno < seg->real_num_passes) && (bpno_plus_one >= 1); ++passno) {
-                         switch (passtype) {
-                                 case 0:
-                                         if (type == T1_TYPE_RAW) {
-                                                 opj_t1_dec_sigpass_raw(t1, bpno_plus_one, (OPJ_INT32)cblksty);
-                                         } else {
-                                                 if (cblksty & J2K_CCP_CBLKSTY_VSC) {
-                                                         opj_t1_dec_sigpass_mqc_vsc(t1, bpno_plus_one);
-                                                 } else {
-                                                         opj_t1_dec_sigpass_mqc_generic(t1, bpno_plus_one);
-                                                 }
-                                         }
-                                         break;
-                                 case 1:
-                                         if (type == T1_TYPE_RAW) {
-                                                         opj_t1_dec_refpass_raw(t1, bpno_plus_one);
-                                         } else {
-                                                 if (cblksty & J2K_CCP_CBLKSTY_VSC) {
-                                                         opj_t1_dec_refpass_mqc_vsc(t1, bpno_plus_one);
-                                                 } else {
-                                                         opj_t1_dec_refpass_mqc_generic(t1, bpno_plus_one);
-                                                 }
-                                         }
-                                         break;
-                                 case 2:
-                                         opj_t1_dec_clnpass_generic(t1, bpno_plus_one, (OPJ_INT32)cblksty);
-                                         break;
-                         }
-
-                         if ((cblksty & J2K_CCP_CBLKSTY_RESET) && type == T1_TYPE_MQ) {
-                                 opj_mqc_resetstates(mqc);
-                                 opj_mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46);
-                                 opj_mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3);
-                                 opj_mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4);
-                         }
-                         if (++passtype == 3) {
-                                 passtype = 0;
-                                 bpno_plus_one--;
-                         }
-                 }
-               }
-       }
+        }
+
+        if (t1->w == 64 && t1->h == 64) {
+            for (passno = 0; (passno < seg->real_num_passes) &&
+                    (bpno_plus_one >= 1); ++passno) {
+                switch (passtype) {
+                case 0:
+                    if (type == T1_TYPE_RAW) {
+                        opj_t1_dec_sigpass_raw(t1, bpno_plus_one, (OPJ_INT32)cblksty);
+                    } else {
+                        if (cblksty & J2K_CCP_CBLKSTY_VSC) {
+                            opj_t1_dec_sigpass_mqc_vsc(t1, bpno_plus_one);
+                        } else {
+                            opj_t1_dec_sigpass_mqc_64x64(t1, bpno_plus_one);
+                        }
+                    }
+                    break;
+                case 1:
+                    if (type == T1_TYPE_RAW) {
+                        opj_t1_dec_refpass_raw(t1, bpno_plus_one);
+                    } else {
+                        if (cblksty & J2K_CCP_CBLKSTY_VSC) {
+                            opj_t1_dec_refpass_mqc_vsc(t1, bpno_plus_one);
+                        } else {
+                            opj_t1_dec_refpass_mqc_64x64(t1, bpno_plus_one);
+                        }
+                    }
+                    break;
+                case 2:
+                    opj_t1_dec_clnpass_64x64(t1, bpno_plus_one, (OPJ_INT32)cblksty);
+                    break;
+                }
+
+                if ((cblksty & J2K_CCP_CBLKSTY_RESET) && type == T1_TYPE_MQ) {
+                    opj_mqc_resetstates(mqc);
+                    opj_mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46);
+                    opj_mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3);
+                    opj_mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4);
+                }
+                if (++passtype == 3) {
+                    passtype = 0;
+                    bpno_plus_one--;
+                }
+            }
+        } else {
+            for (passno = 0; (passno < seg->real_num_passes) &&
+                    (bpno_plus_one >= 1); ++passno) {
+                switch (passtype) {
+                case 0:
+                    if (type == T1_TYPE_RAW) {
+                        opj_t1_dec_sigpass_raw(t1, bpno_plus_one, (OPJ_INT32)cblksty);
+                    } else {
+                        if (cblksty & J2K_CCP_CBLKSTY_VSC) {
+                            opj_t1_dec_sigpass_mqc_vsc(t1, bpno_plus_one);
+                        } else {
+                            opj_t1_dec_sigpass_mqc_generic(t1, bpno_plus_one);
+                        }
+                    }
+                    break;
+                case 1:
+                    if (type == T1_TYPE_RAW) {
+                        opj_t1_dec_refpass_raw(t1, bpno_plus_one);
+                    } else {
+                        if (cblksty & J2K_CCP_CBLKSTY_VSC) {
+                            opj_t1_dec_refpass_mqc_vsc(t1, bpno_plus_one);
+                        } else {
+                            opj_t1_dec_refpass_mqc_generic(t1, bpno_plus_one);
+                        }
+                    }
+                    break;
+                case 2:
+                    opj_t1_dec_clnpass_generic(t1, bpno_plus_one, (OPJ_INT32)cblksty);
+                    break;
+                }
+
+                if ((cblksty & J2K_CCP_CBLKSTY_RESET) && type == T1_TYPE_MQ) {
+                    opj_mqc_resetstates(mqc);
+                    opj_mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46);
+                    opj_mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3);
+                    opj_mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4);
+                }
+                if (++passtype == 3) {
+                    passtype = 0;
+                    bpno_plus_one--;
+                }
+            }
+        }
+    }
     return OPJ_TRUE;
 }
 
 
 
 
-OPJ_BOOL opj_t1_encode_cblks(   opj_t1_t *t1,
-                                opj_tcd_tile_t *tile,
-                                opj_tcp_t *tcp,
-                                const OPJ_FLOAT64 * mct_norms,
-                                OPJ_UINT32 mct_numcomps
-                                )
+OPJ_BOOL opj_t1_encode_cblks(opj_t1_t *t1,
+                             opj_tcd_tile_t *tile,
+                             opj_tcp_t *tcp,
+                             const OPJ_FLOAT64 * mct_norms,
+                             OPJ_UINT32 mct_numcomps
+                            )
 {
-       OPJ_UINT32 compno, resno, bandno, precno, cblkno;
+    OPJ_UINT32 compno, resno, bandno, precno, cblkno;
 
-       tile->distotile = 0;            /* fixed_quality */
+    tile->distotile = 0;        /* fixed_quality */
 
-       for (compno = 0; compno < tile->numcomps; ++compno) {
-               opj_tcd_tilecomp_t* tilec = &tile->comps[compno];
-               opj_tccp_t* tccp = &tcp->tccps[compno];
-               OPJ_UINT32 tile_w = (OPJ_UINT32)(tilec->x1 - tilec->x0);
+    for (compno = 0; compno < tile->numcomps; ++compno) {
+        opj_tcd_tilecomp_t* tilec = &tile->comps[compno];
+        opj_tccp_t* tccp = &tcp->tccps[compno];
+        OPJ_UINT32 tile_w = (OPJ_UINT32)(tilec->x1 - tilec->x0);
 
-               for (resno = 0; resno < tilec->numresolutions; ++resno) {
-                       opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+        for (resno = 0; resno < tilec->numresolutions; ++resno) {
+            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
 
-                       for (bandno = 0; bandno < res->numbands; ++bandno) {
-                               opj_tcd_band_t* OPJ_RESTRICT band = &res->bands[bandno];
+            for (bandno = 0; bandno < res->numbands; ++bandno) {
+                opj_tcd_band_t* OPJ_RESTRICT band = &res->bands[bandno];
                 OPJ_INT32 bandconst = 8192 * 8192 / ((OPJ_INT32) floor(band->stepsize * 8192));
 
-                               for (precno = 0; precno < res->pw * res->ph; ++precno) {
-                                       opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-                                       for (cblkno = 0; cblkno < prc->cw * prc->ch; ++cblkno) {
-                                               opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno];
-                                               OPJ_INT32* OPJ_RESTRICT tiledp;
-                                               OPJ_UINT32 cblk_w;
-                                               OPJ_UINT32 cblk_h;
-                                               OPJ_UINT32 i, j, tileIndex=0, tileLineAdvance;
-
-                                               OPJ_INT32 x = cblk->x0 - band->x0;
-                                               OPJ_INT32 y = cblk->y0 - band->y0;
-                                               if (band->bandno & 1) {
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x += pres->x1 - pres->x0;
-                                               }
-                                               if (band->bandno & 2) {
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       y += pres->y1 - pres->y0;
-                                               }
-
-                                               if(!opj_t1_allocate_buffers(
-                                                                       t1,
-                                                                       (OPJ_UINT32)(cblk->x1 - cblk->x0),
-                                                                       (OPJ_UINT32)(cblk->y1 - cblk->y0)))
-                                               {
-                                                       return OPJ_FALSE;
-                                               }
-
-                                               cblk_w = t1->w;
-                                               cblk_h = t1->h;
-                                               tileLineAdvance = tile_w - cblk_w;
-
-                                               tiledp=&tilec->data[(OPJ_UINT32)y * tile_w + (OPJ_UINT32)x];
-                                               t1->data = tiledp;
-                                               t1->data_stride = tile_w;
-                                               if (tccp->qmfbid == 1) {
-                                                       for (j = 0; j < cblk_h; ++j) {
-                                                               for (i = 0; i < cblk_w; ++i) {
-                                                                       tiledp[tileIndex] *= (1 << T1_NMSEDEC_FRACBITS);
-                                                                       tileIndex++;
-                                                               }
-                                                               tileIndex += tileLineAdvance;
-                                                       }
-                                               } else {                /* if (tccp->qmfbid == 0) */
-                                                       for (j = 0; j < cblk_h; ++j) {
-                                                               for (i = 0; i < cblk_w; ++i) {
-                                                                       OPJ_INT32 tmp = tiledp[tileIndex];
-                                                                       tiledp[tileIndex] =
-                                                                               opj_int_fix_mul_t1(
-                                                                               tmp,
-                                                                               bandconst);
-                                                                       tileIndex++;
-                                                               }
-                                                               tileIndex += tileLineAdvance;
-                                                       }
-                                               }
-
-                                               opj_t1_encode_cblk(
-                                                               t1,
-                                                               cblk,
-                                                               band->bandno,
-                                                               compno,
-                                                               tilec->numresolutions - 1 - resno,
-                                                               tccp->qmfbid,
-                                                               band->stepsize,
-                                                               tccp->cblksty,
-                                                               tile->numcomps,
-                                                               tile,
-                                                               mct_norms,
-                                                               mct_numcomps);
-
-                                       } /* cblkno */
-                               } /* precno */
-                       } /* bandno */
-               } /* resno  */
-       } /* compno  */
-       return OPJ_TRUE;
+                for (precno = 0; precno < res->pw * res->ph; ++precno) {
+                    opj_tcd_precinct_t *prc = &band->precincts[precno];
+
+                    for (cblkno = 0; cblkno < prc->cw * prc->ch; ++cblkno) {
+                        opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno];
+                        OPJ_INT32* OPJ_RESTRICT tiledp;
+                        OPJ_UINT32 cblk_w;
+                        OPJ_UINT32 cblk_h;
+                        OPJ_UINT32 i, j, tileIndex = 0, tileLineAdvance;
+
+                        OPJ_INT32 x = cblk->x0 - band->x0;
+                        OPJ_INT32 y = cblk->y0 - band->y0;
+                        if (band->bandno & 1) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x += pres->x1 - pres->x0;
+                        }
+                        if (band->bandno & 2) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            y += pres->y1 - pres->y0;
+                        }
+
+                        if (!opj_t1_allocate_buffers(
+                                    t1,
+                                    (OPJ_UINT32)(cblk->x1 - cblk->x0),
+                                    (OPJ_UINT32)(cblk->y1 - cblk->y0))) {
+                            return OPJ_FALSE;
+                        }
+
+                        cblk_w = t1->w;
+                        cblk_h = t1->h;
+                        tileLineAdvance = tile_w - cblk_w;
+
+                        tiledp = &tilec->data[(OPJ_UINT32)y * tile_w + (OPJ_UINT32)x];
+                        t1->data = tiledp;
+                        t1->data_stride = tile_w;
+                        if (tccp->qmfbid == 1) {
+                            for (j = 0; j < cblk_h; ++j) {
+                                for (i = 0; i < cblk_w; ++i) {
+                                    tiledp[tileIndex] *= (1 << T1_NMSEDEC_FRACBITS);
+                                    tileIndex++;
+                                }
+                                tileIndex += tileLineAdvance;
+                            }
+                        } else {        /* if (tccp->qmfbid == 0) */
+                            for (j = 0; j < cblk_h; ++j) {
+                                for (i = 0; i < cblk_w; ++i) {
+                                    OPJ_INT32 tmp = tiledp[tileIndex];
+                                    tiledp[tileIndex] =
+                                        opj_int_fix_mul_t1(
+                                            tmp,
+                                            bandconst);
+                                    tileIndex++;
+                                }
+                                tileIndex += tileLineAdvance;
+                            }
+                        }
+
+                        opj_t1_encode_cblk(
+                            t1,
+                            cblk,
+                            band->bandno,
+                            compno,
+                            tilec->numresolutions - 1 - resno,
+                            tccp->qmfbid,
+                            band->stepsize,
+                            tccp->cblksty,
+                            tile->numcomps,
+                            tile,
+                            mct_norms,
+                            mct_numcomps);
+
+                    } /* cblkno */
+                } /* precno */
+            } /* bandno */
+        } /* resno  */
+    } /* compno  */
+    return OPJ_TRUE;
 }
 
 /** mod fixed_quality */
 static void opj_t1_encode_cblk(opj_t1_t *t1,
-                        opj_tcd_cblk_enc_t* cblk,
-                        OPJ_UINT32 orient,
-                        OPJ_UINT32 compno,
-                        OPJ_UINT32 level,
-                        OPJ_UINT32 qmfbid,
-                        OPJ_FLOAT64 stepsize,
-                        OPJ_UINT32 cblksty,
-                        OPJ_UINT32 numcomps,
-                        opj_tcd_tile_t * tile,
-                        const OPJ_FLOAT64 * mct_norms,
-                        OPJ_UINT32 mct_numcomps)
+                               opj_tcd_cblk_enc_t* cblk,
+                               OPJ_UINT32 orient,
+                               OPJ_UINT32 compno,
+                               OPJ_UINT32 level,
+                               OPJ_UINT32 qmfbid,
+                               OPJ_FLOAT64 stepsize,
+                               OPJ_UINT32 cblksty,
+                               OPJ_UINT32 numcomps,
+                               opj_tcd_tile_t * tile,
+                               const OPJ_FLOAT64 * mct_norms,
+                               OPJ_UINT32 mct_numcomps)
 {
-       OPJ_FLOAT64 cumwmsedec = 0.0;
-
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-
-       OPJ_UINT32 passno;
-       OPJ_INT32 bpno;
-       OPJ_UINT32 passtype;
-       OPJ_INT32 nmsedec = 0;
-       OPJ_INT32 max;
-       OPJ_UINT32 i, j;
-       OPJ_BYTE type = T1_TYPE_MQ;
-       OPJ_FLOAT64 tempwmsedec;
-
-       mqc->lut_ctxno_zc_orient = lut_ctxno_zc + orient * 256;
-
-       max = 0;
-       for (i = 0; i < t1->w; ++i) {
-               for (j = 0; j < t1->h; ++j) {
-                       OPJ_INT32 tmp = abs(t1->data[i + j*t1->data_stride]);
-                       max = opj_int_max(max, tmp);
-               }
-       }
-
-       cblk->numbps = max ? (OPJ_UINT32)((opj_int_floorlog2(max) + 1) - T1_NMSEDEC_FRACBITS) : 0;
-
-       bpno = (OPJ_INT32)(cblk->numbps - 1);
-       passtype = 2;
-
-       opj_mqc_resetstates(mqc);
-       opj_mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46);
-       opj_mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3);
-       opj_mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4);
-       opj_mqc_init_enc(mqc, cblk->data);
-
-       for (passno = 0; bpno >= 0; ++passno) {
-               opj_tcd_pass_t *pass = &cblk->passes[passno];
-               OPJ_UINT32 correction = 3;
-               type = ((bpno < ((OPJ_INT32) (cblk->numbps) - 4)) && (passtype < 2) && (cblksty & J2K_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
-
-               switch (passtype) {
-                       case 0:
-                               opj_t1_enc_sigpass(t1, bpno, &nmsedec, type, cblksty);
-                               break;
-                       case 1:
-                               opj_t1_enc_refpass(t1, bpno, &nmsedec, type, cblksty);
-                               break;
-                       case 2:
-                               opj_t1_enc_clnpass(t1, bpno, &nmsedec, cblksty);
-                               /* code switch SEGMARK (i.e. SEGSYM) */
-                               if (cblksty & J2K_CCP_CBLKSTY_SEGSYM)
-                                       opj_mqc_segmark_enc(mqc);
-                               break;
-               }
-
-               /* fixed_quality */
-               tempwmsedec = opj_t1_getwmsedec(nmsedec, compno, level, orient, bpno, qmfbid, stepsize, numcomps,mct_norms, mct_numcomps) ;
-               cumwmsedec += tempwmsedec;
-               tile->distotile += tempwmsedec;
-
-               /* Code switch "RESTART" (i.e. TERMALL) */
-               if ((cblksty & J2K_CCP_CBLKSTY_TERMALL) && !((passtype == 2) && (bpno - 1 < 0))) {
-                       if (type == T1_TYPE_RAW) {
-                               opj_mqc_flush(mqc);
-                               correction = 1;
-                               /* correction = mqc_bypass_flush_enc(); */
-                       } else {                        /* correction = mqc_restart_enc(); */
-                               opj_mqc_flush(mqc);
-                               correction = 1;
-                       }
-                       pass->term = 1;
-               } else {
-                       if (((bpno < ((OPJ_INT32) (cblk->numbps) - 4) && (passtype > 0))
-                               || ((bpno == ((OPJ_INT32)cblk->numbps - 4)) && (passtype == 2))) && (cblksty & J2K_CCP_CBLKSTY_LAZY)) {
-                               if (type == T1_TYPE_RAW) {
-                                       opj_mqc_flush(mqc);
-                                       correction = 1;
-                                       /* correction = mqc_bypass_flush_enc(); */
-                               } else {                /* correction = mqc_restart_enc(); */
-                                       opj_mqc_flush(mqc);
-                                       correction = 1;
-                               }
-                               pass->term = 1;
-                       } else {
-                               pass->term = 0;
-                       }
-               }
-
-               if (++passtype == 3) {
-                       passtype = 0;
-                       bpno--;
-               }
-
-               if (pass->term && bpno > 0) {
-                       type = ((bpno < ((OPJ_INT32) (cblk->numbps) - 4)) && (passtype < 2) && (cblksty & J2K_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
-                       if (type == T1_TYPE_RAW)
-                               opj_mqc_bypass_init_enc(mqc);
-                       else
-                               opj_mqc_restart_init_enc(mqc);
-               }
-
-               pass->distortiondec = cumwmsedec;
-               pass->rate = opj_mqc_numbytes(mqc) + correction;        /* FIXME */
-
-               /* Code-switch "RESET" */
-               if (cblksty & J2K_CCP_CBLKSTY_RESET)
-                       opj_mqc_reset_enc(mqc);
-       }
-
-       /* Code switch "ERTERM" (i.e. PTERM) */
-       if (cblksty & J2K_CCP_CBLKSTY_PTERM)
-               opj_mqc_erterm_enc(mqc);
-       else /* Default coding */ if (!(cblksty & J2K_CCP_CBLKSTY_LAZY))
-               opj_mqc_flush(mqc);
-
-       cblk->totalpasses = passno;
-
-       for (passno = 0; passno<cblk->totalpasses; passno++) {
-               opj_tcd_pass_t *pass = &cblk->passes[passno];
-               if (pass->rate > opj_mqc_numbytes(mqc))
-                       pass->rate = opj_mqc_numbytes(mqc);
-               /*Preventing generation of FF as last data byte of a pass*/
-               if((pass->rate>1) && (cblk->data[pass->rate - 1] == 0xFF)){
-                       pass->rate--;
-               }
-               pass->len = pass->rate - (passno == 0 ? 0 : cblk->passes[passno - 1].rate);
-       }
+    OPJ_FLOAT64 cumwmsedec = 0.0;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    OPJ_UINT32 passno;
+    OPJ_INT32 bpno;
+    OPJ_UINT32 passtype;
+    OPJ_INT32 nmsedec = 0;
+    OPJ_INT32 max;
+    OPJ_UINT32 i, j;
+    OPJ_BYTE type = T1_TYPE_MQ;
+    OPJ_FLOAT64 tempwmsedec;
+
+    mqc->lut_ctxno_zc_orient = lut_ctxno_zc + orient * 256;
+
+    max = 0;
+    for (i = 0; i < t1->w; ++i) {
+        for (j = 0; j < t1->h; ++j) {
+            OPJ_INT32 tmp = abs(t1->data[i + j * t1->data_stride]);
+            max = opj_int_max(max, tmp);
+        }
+    }
+
+    cblk->numbps = max ? (OPJ_UINT32)((opj_int_floorlog2(max) + 1) -
+                                      T1_NMSEDEC_FRACBITS) : 0;
+
+    bpno = (OPJ_INT32)(cblk->numbps - 1);
+    passtype = 2;
+
+    opj_mqc_resetstates(mqc);
+    opj_mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46);
+    opj_mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3);
+    opj_mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4);
+    opj_mqc_init_enc(mqc, cblk->data);
+
+    for (passno = 0; bpno >= 0; ++passno) {
+        opj_tcd_pass_t *pass = &cblk->passes[passno];
+        OPJ_UINT32 correction = 3;
+        type = ((bpno < ((OPJ_INT32)(cblk->numbps) - 4)) && (passtype < 2) &&
+                (cblksty & J2K_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
+
+        switch (passtype) {
+        case 0:
+            opj_t1_enc_sigpass(t1, bpno, &nmsedec, type, cblksty);
+            break;
+        case 1:
+            opj_t1_enc_refpass(t1, bpno, &nmsedec, type, cblksty);
+            break;
+        case 2:
+            opj_t1_enc_clnpass(t1, bpno, &nmsedec, cblksty);
+            /* code switch SEGMARK (i.e. SEGSYM) */
+            if (cblksty & J2K_CCP_CBLKSTY_SEGSYM) {
+                opj_mqc_segmark_enc(mqc);
+            }
+            break;
+        }
+
+        /* fixed_quality */
+        tempwmsedec = opj_t1_getwmsedec(nmsedec, compno, level, orient, bpno, qmfbid,
+                                        stepsize, numcomps, mct_norms, mct_numcomps) ;
+        cumwmsedec += tempwmsedec;
+        tile->distotile += tempwmsedec;
+
+        /* Code switch "RESTART" (i.e. TERMALL) */
+        if ((cblksty & J2K_CCP_CBLKSTY_TERMALL) && !((passtype == 2) &&
+                (bpno - 1 < 0))) {
+            if (type == T1_TYPE_RAW) {
+                opj_mqc_flush(mqc);
+                correction = 1;
+                /* correction = mqc_bypass_flush_enc(); */
+            } else {            /* correction = mqc_restart_enc(); */
+                opj_mqc_flush(mqc);
+                correction = 1;
+            }
+            pass->term = 1;
+        } else {
+            if (((bpno < ((OPJ_INT32)(cblk->numbps) - 4) && (passtype > 0))
+                    || ((bpno == ((OPJ_INT32)cblk->numbps - 4)) && (passtype == 2))) &&
+                    (cblksty & J2K_CCP_CBLKSTY_LAZY)) {
+                if (type == T1_TYPE_RAW) {
+                    opj_mqc_flush(mqc);
+                    correction = 1;
+                    /* correction = mqc_bypass_flush_enc(); */
+                } else {        /* correction = mqc_restart_enc(); */
+                    opj_mqc_flush(mqc);
+                    correction = 1;
+                }
+                pass->term = 1;
+            } else {
+                pass->term = 0;
+            }
+        }
+
+        if (++passtype == 3) {
+            passtype = 0;
+            bpno--;
+        }
+
+        if (pass->term && bpno > 0) {
+            type = ((bpno < ((OPJ_INT32)(cblk->numbps) - 4)) && (passtype < 2) &&
+                    (cblksty & J2K_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
+            if (type == T1_TYPE_RAW) {
+                opj_mqc_bypass_init_enc(mqc);
+            } else {
+                opj_mqc_restart_init_enc(mqc);
+            }
+        }
+
+        pass->distortiondec = cumwmsedec;
+        pass->rate = opj_mqc_numbytes(mqc) + correction;    /* FIXME */
+
+        /* Code-switch "RESET" */
+        if (cblksty & J2K_CCP_CBLKSTY_RESET) {
+            opj_mqc_reset_enc(mqc);
+        }
+    }
+
+    /* Code switch "ERTERM" (i.e. PTERM) */
+    if (cblksty & J2K_CCP_CBLKSTY_PTERM) {
+        opj_mqc_erterm_enc(mqc);
+    } else /* Default coding */ if (!(cblksty & J2K_CCP_CBLKSTY_LAZY)) {
+        opj_mqc_flush(mqc);
+    }
+
+    cblk->totalpasses = passno;
+
+    for (passno = 0; passno < cblk->totalpasses; passno++) {
+        opj_tcd_pass_t *pass = &cblk->passes[passno];
+        if (pass->rate > opj_mqc_numbytes(mqc)) {
+            pass->rate = opj_mqc_numbytes(mqc);
+        }
+        /*Preventing generation of FF as last data byte of a pass*/
+        if ((pass->rate > 1) && (cblk->data[pass->rate - 1] == 0xFF)) {
+            pass->rate--;
+        }
+        pass->len = pass->rate - (passno == 0 ? 0 : cblk->passes[passno - 1].rate);
+    }
 }
 
 #if 0
-static void opj_t1_dec_refpass_step(   opj_t1_t *t1,
-                                opj_flag_t *flagsp,
-                                OPJ_INT32 *datap,
-                                OPJ_INT32 poshalf,
-                                OPJ_INT32 neghalf,
-                                OPJ_BYTE type,
-                                OPJ_UINT32 vsc)
+static void opj_t1_dec_refpass_step(opj_t1_t *t1,
+                                    opj_flag_t *flagsp,
+                                    OPJ_INT32 *datap,
+                                    OPJ_INT32 poshalf,
+                                    OPJ_INT32 neghalf,
+                                    OPJ_BYTE type,
+                                    OPJ_UINT32 vsc)
 {
-       OPJ_INT32  t;
-       OPJ_UINT32 v,flag;
-
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       opj_raw_t *raw = t1->raw;       /* RAW component */
-
-       flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp);
-       if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) {
-               opj_mqc_setcurctx(mqc, opj_t1_getctxno_mag(flag));      /* ESSAI */
-               if (type == T1_TYPE_RAW) {
-                       v = opj_raw_decode(raw);
-               } else {
-                       v = opj_mqc_decode(mqc);
-               }
-               t = v ? poshalf : neghalf;
-               *datap += *datap < 0 ? -t : t;
-               *flagsp |= T1_REFINE;
-       }
-}                              /* VSC and  BYPASS by Antonin  */
+    OPJ_INT32  t;
+    OPJ_UINT32 v, flag;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+    opj_raw_t *raw = t1->raw;   /* RAW component */
+
+    flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) :
+           (*flagsp);
+    if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) {
+        opj_mqc_setcurctx(mqc, opj_t1_getctxno_mag(flag));  /* ESSAI */
+        if (type == T1_TYPE_RAW) {
+            v = opj_raw_decode(raw);
+        } else {
+            v = opj_mqc_decode(mqc);
+        }
+        t = v ? poshalf : neghalf;
+        *datap += *datap < 0 ? -t : t;
+        *flagsp |= T1_REFINE;
+    }
+}               /* VSC and  BYPASS by Antonin  */
 #endif
 
 
 
 #if 0
-static void opj_t1_dec_sigpass_step(   opj_t1_t *t1,
-                                opj_flag_t *flagsp,
-                                OPJ_INT32 *datap,
-                                OPJ_UINT32 orient,
-                                OPJ_INT32 oneplushalf,
-                                OPJ_BYTE type,
-                                OPJ_UINT32 vsc)
+static void opj_t1_dec_sigpass_step(opj_t1_t *t1,
+                                    opj_flag_t *flagsp,
+                                    OPJ_INT32 *datap,
+                                    OPJ_UINT32 orient,
+                                    OPJ_INT32 oneplushalf,
+                                    OPJ_BYTE type,
+                                    OPJ_UINT32 vsc)
 {
-       OPJ_UINT32 v, flag;
-
-       opj_raw_t *raw = t1->raw;       /* RAW component */
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-
-       flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp);
-       if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) {
-               if (type == T1_TYPE_RAW) {
-                       if (opj_raw_decode(raw)) {
-                               v = opj_raw_decode(raw);        /* ESSAI */
-                               *datap = v ? -oneplushalf : oneplushalf;
-                               opj_t1_updateflags(flagsp, v, t1->flags_stride);
-                       }
-               } else {
-                       opj_mqc_setcurctx(mqc, opj_t1_getctxno_zc(flag, orient));
-                       if (opj_mqc_decode(mqc)) {
-                               opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc(flag));
-                               v = opj_mqc_decode(mqc) ^ opj_t1_getspb(flag);
-                               *datap = v ? -oneplushalf : oneplushalf;
-                               opj_t1_updateflags(flagsp, v, t1->flags_stride);
-                       }
-               }
-               *flagsp |= T1_VISIT;
-       }
-}                              /* VSC and  BYPASS by Antonin */
+    OPJ_UINT32 v, flag;
+
+    opj_raw_t *raw = t1->raw;   /* RAW component */
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) :
+           (*flagsp);
+    if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) {
+        if (type == T1_TYPE_RAW) {
+            if (opj_raw_decode(raw)) {
+                v = opj_raw_decode(raw);    /* ESSAI */
+                *datap = v ? -oneplushalf : oneplushalf;
+                opj_t1_updateflags(flagsp, v, t1->flags_stride);
+            }
+        } else {
+            opj_mqc_setcurctx(mqc, opj_t1_getctxno_zc(flag, orient));
+            if (opj_mqc_decode(mqc)) {
+                opj_mqc_setcurctx(mqc, opj_t1_getctxno_sc(flag));
+                v = opj_mqc_decode(mqc) ^ opj_t1_getspb(flag);
+                *datap = v ? -oneplushalf : oneplushalf;
+                opj_t1_updateflags(flagsp, v, t1->flags_stride);
+            }
+        }
+        *flagsp |= T1_VISIT;
+    }
+}               /* VSC and  BYPASS by Antonin */
 #endif
index 1a8430898fc5726b0e661add94c327894710f55f..2f7505d8fa4678f99acfd1c41b37f929b95bae74 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * Copyright (c) 2007, Callum Lerwick <seg@haxxed.com>
 
 #include "opj_includes.h"
 
-static int t1_init_ctxno_zc(unsigned int f, unsigned int orient) {
-       int h, v, d, n, t, hv;
-       h = ((f & T1_SIG_W) != 0) + ((f & T1_SIG_E) != 0);
-       v = ((f & T1_SIG_N) != 0) + ((f & T1_SIG_S) != 0);
-       d = ((f & T1_SIG_NW) != 0) + ((f & T1_SIG_NE) != 0) + ((f & T1_SIG_SE) != 0) + ((f & T1_SIG_SW) != 0);
-       n = 0;
-       t = 0;
-       hv = 0;
+static int t1_init_ctxno_zc(unsigned int f, unsigned int orient)
+{
+    int h, v, d, n, t, hv;
+    h = ((f & T1_SIG_W) != 0) + ((f & T1_SIG_E) != 0);
+    v = ((f & T1_SIG_N) != 0) + ((f & T1_SIG_S) != 0);
+    d = ((f & T1_SIG_NW) != 0) + ((f & T1_SIG_NE) != 0) + ((
+                f & T1_SIG_SE) != 0) + ((f & T1_SIG_SW) != 0);
+    n = 0;
+    t = 0;
+    hv = 0;
 
-       switch (orient) {
-               case 2:
-                       t = h;
-                       h = v;
-                       v = t;
-                       /* fall through */
-               case 0:
-               case 1:
-                       if (!h) {
-                               if (!v) {
-                                       if (!d)
-                                               n = 0;
-                                       else if (d == 1)
-                                               n = 1;
-                                       else
-                                               n = 2;
-                               } else if (v == 1) {
-                                       n = 3;
-                               } else {
-                                       n = 4;
-                               }
-                       } else if (h == 1) {
-                               if (!v) {
-                                       if (!d)
-                                               n = 5;
-                                       else
-                                               n = 6;
-                               } else {
-                                       n = 7;
-                               }
-                       } else
-                               n = 8;
-                       break;
-               case 3:
-                       hv = h + v;
-                       if (!d) {
-                               if (!hv) {
-                                       n = 0;
-                               } else if (hv == 1) {
-                                       n = 1;
-                               } else {
-                                       n = 2;
-                               }
-                       } else if (d == 1) {
-                               if (!hv) {
-                                       n = 3;
-                               } else if (hv == 1) {
-                                       n = 4;
-                               } else {
-                                       n = 5;
-                               }
-                       } else if (d == 2) {
-                               if (!hv) {
-                                       n = 6;
-                               } else {
-                                       n = 7;
-                               }
-                       } else {
-                               n = 8;
-                       }
-                       break;
-       }
+    switch (orient) {
+    case 2:
+        t = h;
+        h = v;
+        v = t;
+    /* fall through */
+    case 0:
+    case 1:
+        if (!h) {
+            if (!v) {
+                if (!d) {
+                    n = 0;
+                } else if (d == 1) {
+                    n = 1;
+                } else {
+                    n = 2;
+                }
+            } else if (v == 1) {
+                n = 3;
+            } else {
+                n = 4;
+            }
+        } else if (h == 1) {
+            if (!v) {
+                if (!d) {
+                    n = 5;
+                } else {
+                    n = 6;
+                }
+            } else {
+                n = 7;
+            }
+        } else {
+            n = 8;
+        }
+        break;
+    case 3:
+        hv = h + v;
+        if (!d) {
+            if (!hv) {
+                n = 0;
+            } else if (hv == 1) {
+                n = 1;
+            } else {
+                n = 2;
+            }
+        } else if (d == 1) {
+            if (!hv) {
+                n = 3;
+            } else if (hv == 1) {
+                n = 4;
+            } else {
+                n = 5;
+            }
+        } else if (d == 2) {
+            if (!hv) {
+                n = 6;
+            } else {
+                n = 7;
+            }
+        } else {
+            n = 8;
+        }
+        break;
+    }
 
-       return (T1_CTXNO_ZC + n);
+    return (T1_CTXNO_ZC + n);
 }
 
-static int t1_init_ctxno_sc(unsigned int f) {
-       int hc, vc, n;
-       n = 0;
+static int t1_init_ctxno_sc(unsigned int f)
+{
+    int hc, vc, n;
+    n = 0;
 
-       hc = opj_int_min(((f & (T1_SIG_E | T1_SGN_E)) ==
-                               T1_SIG_E) + ((f & (T1_SIG_W | T1_SGN_W)) == T1_SIG_W),
-                       1) - opj_int_min(((f & (T1_SIG_E | T1_SGN_E)) ==
-                                       (T1_SIG_E | T1_SGN_E)) +
-                               ((f & (T1_SIG_W | T1_SGN_W)) ==
-                                (T1_SIG_W | T1_SGN_W)), 1);
+    hc = opj_int_min(((f & (T1_SIG_E | T1_SGN_E)) ==
+                      T1_SIG_E) + ((f & (T1_SIG_W | T1_SGN_W)) == T1_SIG_W),
+                     1) - opj_int_min(((f & (T1_SIG_E | T1_SGN_E)) ==
+                                       (T1_SIG_E | T1_SGN_E)) +
+                                      ((f & (T1_SIG_W | T1_SGN_W)) ==
+                                       (T1_SIG_W | T1_SGN_W)), 1);
 
-       vc = opj_int_min(((f & (T1_SIG_N | T1_SGN_N)) ==
-                               T1_SIG_N) + ((f & (T1_SIG_S | T1_SGN_S)) == T1_SIG_S),
-                       1) - opj_int_min(((f & (T1_SIG_N | T1_SGN_N)) ==
-                                       (T1_SIG_N | T1_SGN_N)) +
-                               ((f & (T1_SIG_S | T1_SGN_S)) ==
-                                (T1_SIG_S | T1_SGN_S)), 1);
+    vc = opj_int_min(((f & (T1_SIG_N | T1_SGN_N)) ==
+                      T1_SIG_N) + ((f & (T1_SIG_S | T1_SGN_S)) == T1_SIG_S),
+                     1) - opj_int_min(((f & (T1_SIG_N | T1_SGN_N)) ==
+                                       (T1_SIG_N | T1_SGN_N)) +
+                                      ((f & (T1_SIG_S | T1_SGN_S)) ==
+                                       (T1_SIG_S | T1_SGN_S)), 1);
 
-       if (hc < 0) {
-               hc = -hc;
-               vc = -vc;
-       }
-       if (!hc) {
-               if (vc == -1)
-                       n = 1;
-               else if (!vc)
-                       n = 0;
-               else
-                       n = 1;
-       } else if (hc == 1) {
-               if (vc == -1)
-                       n = 2;
-               else if (!vc)
-                       n = 3;
-               else
-                       n = 4;
-       }
+    if (hc < 0) {
+        hc = -hc;
+        vc = -vc;
+    }
+    if (!hc) {
+        if (vc == -1) {
+            n = 1;
+        } else if (!vc) {
+            n = 0;
+        } else {
+            n = 1;
+        }
+    } else if (hc == 1) {
+        if (vc == -1) {
+            n = 2;
+        } else if (!vc) {
+            n = 3;
+        } else {
+            n = 4;
+        }
+    }
 
-       return (T1_CTXNO_SC + n);
+    return (T1_CTXNO_SC + n);
 }
 
-static int t1_init_spb(unsigned int f) {
-       int hc, vc, n;
+static int t1_init_spb(unsigned int f)
+{
+    int hc, vc, n;
 
-       hc = opj_int_min(((f & (T1_SIG_E | T1_SGN_E)) ==
-                               T1_SIG_E) + ((f & (T1_SIG_W | T1_SGN_W)) == T1_SIG_W),
-                       1) - opj_int_min(((f & (T1_SIG_E | T1_SGN_E)) ==
-                                       (T1_SIG_E | T1_SGN_E)) +
-                               ((f & (T1_SIG_W | T1_SGN_W)) ==
-                                (T1_SIG_W | T1_SGN_W)), 1);
+    hc = opj_int_min(((f & (T1_SIG_E | T1_SGN_E)) ==
+                      T1_SIG_E) + ((f & (T1_SIG_W | T1_SGN_W)) == T1_SIG_W),
+                     1) - opj_int_min(((f & (T1_SIG_E | T1_SGN_E)) ==
+                                       (T1_SIG_E | T1_SGN_E)) +
+                                      ((f & (T1_SIG_W | T1_SGN_W)) ==
+                                       (T1_SIG_W | T1_SGN_W)), 1);
 
-       vc = opj_int_min(((f & (T1_SIG_N | T1_SGN_N)) ==
-                               T1_SIG_N) + ((f & (T1_SIG_S | T1_SGN_S)) == T1_SIG_S),
-                       1) - opj_int_min(((f & (T1_SIG_N | T1_SGN_N)) ==
-                                       (T1_SIG_N | T1_SGN_N)) +
-                               ((f & (T1_SIG_S | T1_SGN_S)) ==
-                                (T1_SIG_S | T1_SGN_S)), 1);
+    vc = opj_int_min(((f & (T1_SIG_N | T1_SGN_N)) ==
+                      T1_SIG_N) + ((f & (T1_SIG_S | T1_SGN_S)) == T1_SIG_S),
+                     1) - opj_int_min(((f & (T1_SIG_N | T1_SGN_N)) ==
+                                       (T1_SIG_N | T1_SGN_N)) +
+                                      ((f & (T1_SIG_S | T1_SGN_S)) ==
+                                       (T1_SIG_S | T1_SGN_S)), 1);
 
-       if (!hc && !vc)
-               n = 0;
-       else
-               n = (!(hc > 0 || (!hc && vc > 0)));
+    if (!hc && !vc) {
+        n = 0;
+    } else {
+        n = (!(hc > 0 || (!hc && vc > 0)));
+    }
 
-       return n;
+    return n;
 }
 
-static void dump_array16(int array[],int size){
-       int i;
-       --size;
-       for (i = 0; i < size; ++i) {
-               printf("0x%04x, ", array[i]);
-               if(!((i+1)&0x7))
-                       printf("\n  ");
-       }
-       printf("0x%04x\n};\n\n", array[size]);
+static void dump_array16(int array[], int size)
+{
+    int i;
+    --size;
+    for (i = 0; i < size; ++i) {
+        printf("0x%04x, ", array[i]);
+        if (!((i + 1) & 0x7)) {
+            printf("\n  ");
+        }
+    }
+    printf("0x%04x\n};\n\n", array[size]);
 }
 
 int main(int argc, char **argv)
 {
-       unsigned int i, j;
-       double u, v, t;
+    unsigned int i, j;
+    double u, v, t;
 
-       int lut_ctxno_zc[1024];
-       int lut_nmsedec_sig[1 << T1_NMSEDEC_BITS];
-       int lut_nmsedec_sig0[1 << T1_NMSEDEC_BITS];
-       int lut_nmsedec_ref[1 << T1_NMSEDEC_BITS];
-       int lut_nmsedec_ref0[1 << T1_NMSEDEC_BITS];
-  (void)argc; (void)argv;
+    int lut_ctxno_zc[1024];
+    int lut_nmsedec_sig[1 << T1_NMSEDEC_BITS];
+    int lut_nmsedec_sig0[1 << T1_NMSEDEC_BITS];
+    int lut_nmsedec_ref[1 << T1_NMSEDEC_BITS];
+    int lut_nmsedec_ref0[1 << T1_NMSEDEC_BITS];
+    (void)argc;
+    (void)argv;
 
-       printf("/* This file was automatically generated by t1_generate_luts.c */\n\n");
+    printf("/* This file was automatically generated by t1_generate_luts.c */\n\n");
 
-       /* lut_ctxno_zc */
-       for (j = 0U; j < 4U; ++j) {
-               for (i = 0U; i < 256U; ++i) {
-                       unsigned int orient = j;
-                       if (orient == 2U) {
-                               orient = 1U;
-                       } else if (orient == 1U) {
-                               orient = 2U;
-                       }
-                       lut_ctxno_zc[(orient << 8) | i] = t1_init_ctxno_zc(i, j);
-               }
-       }
+    /* lut_ctxno_zc */
+    for (j = 0U; j < 4U; ++j) {
+        for (i = 0U; i < 256U; ++i) {
+            unsigned int orient = j;
+            if (orient == 2U) {
+                orient = 1U;
+            } else if (orient == 1U) {
+                orient = 2U;
+            }
+            lut_ctxno_zc[(orient << 8) | i] = t1_init_ctxno_zc(i, j);
+        }
+    }
 
-       printf("static const OPJ_BYTE lut_ctxno_zc[1024] = {\n  ");
-       for (i = 0U; i < 1023U; ++i) {
-               printf("%i, ", lut_ctxno_zc[i]);
-               if(!((i+1U)&0x1fU))
-                       printf("\n  ");
-       }
-       printf("%i\n};\n\n", lut_ctxno_zc[1023]);
+    printf("static const OPJ_BYTE lut_ctxno_zc[1024] = {\n  ");
+    for (i = 0U; i < 1023U; ++i) {
+        printf("%i, ", lut_ctxno_zc[i]);
+        if (!((i + 1U) & 0x1fU)) {
+            printf("\n  ");
+        }
+    }
+    printf("%i\n};\n\n", lut_ctxno_zc[1023]);
 
-       /* lut_ctxno_sc */
-       printf("static const OPJ_BYTE lut_ctxno_sc[256] = {\n  ");
-       for (i = 0U; i < 255U; ++i) {
-               printf("0x%x, ", t1_init_ctxno_sc(i << 4));
-               if(!((i+1U)&0xfU))
-                       printf("\n  ");
-       }
-       printf("0x%x\n};\n\n", t1_init_ctxno_sc(255U << 4));
+    /* lut_ctxno_sc */
+    printf("static const OPJ_BYTE lut_ctxno_sc[256] = {\n  ");
+    for (i = 0U; i < 255U; ++i) {
+        printf("0x%x, ", t1_init_ctxno_sc(i << 4));
+        if (!((i + 1U) & 0xfU)) {
+            printf("\n  ");
+        }
+    }
+    printf("0x%x\n};\n\n", t1_init_ctxno_sc(255U << 4));
 
-       /* lut_spb */
-       printf("static const OPJ_BYTE lut_spb[256] = {\n  ");
-       for (i = 0U; i < 255U; ++i) {
-               printf("%i, ", t1_init_spb(i << 4));
-               if(!((i+1U)&0x1fU))
-                       printf("\n  ");
-       }
-       printf("%i\n};\n\n", t1_init_spb(255U << 4));
+    /* lut_spb */
+    printf("static const OPJ_BYTE lut_spb[256] = {\n  ");
+    for (i = 0U; i < 255U; ++i) {
+        printf("%i, ", t1_init_spb(i << 4));
+        if (!((i + 1U) & 0x1fU)) {
+            printf("\n  ");
+        }
+    }
+    printf("%i\n};\n\n", t1_init_spb(255U << 4));
 
-       /* FIXME FIXME FIXME */
-       /* fprintf(stdout,"nmsedec luts:\n"); */
-       for (i = 0U; i < (1U << T1_NMSEDEC_BITS); ++i) {
-               t = i / pow(2, T1_NMSEDEC_FRACBITS);
-               u = t;
-               v = t - 1.5;
-               lut_nmsedec_sig[i] = 
-                       opj_int_max(0, 
-                                       (int) (floor((u * u - v * v) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0));
-               lut_nmsedec_sig0[i] =
-                       opj_int_max(0,
-                                       (int) (floor((u * u) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0));
-               u = t - 1.0;
-               if (i & (1 << (T1_NMSEDEC_BITS - 1))) {
-                       v = t - 1.5;
-               } else {
-                       v = t - 0.5;
-               }
-               lut_nmsedec_ref[i] =
-                       opj_int_max(0,
-                                       (int) (floor((u * u - v * v) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0));
-               lut_nmsedec_ref0[i] =
-                       opj_int_max(0,
-                                       (int) (floor((u * u) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0));
-       }
+    /* FIXME FIXME FIXME */
+    /* fprintf(stdout,"nmsedec luts:\n"); */
+    for (i = 0U; i < (1U << T1_NMSEDEC_BITS); ++i) {
+        t = i / pow(2, T1_NMSEDEC_FRACBITS);
+        u = t;
+        v = t - 1.5;
+        lut_nmsedec_sig[i] =
+            opj_int_max(0,
+                        (int)(floor((u * u - v * v) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2,
+                                T1_NMSEDEC_FRACBITS) * 8192.0));
+        lut_nmsedec_sig0[i] =
+            opj_int_max(0,
+                        (int)(floor((u * u) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2,
+                                T1_NMSEDEC_FRACBITS) * 8192.0));
+        u = t - 1.0;
+        if (i & (1 << (T1_NMSEDEC_BITS - 1))) {
+            v = t - 1.5;
+        } else {
+            v = t - 0.5;
+        }
+        lut_nmsedec_ref[i] =
+            opj_int_max(0,
+                        (int)(floor((u * u - v * v) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2,
+                                T1_NMSEDEC_FRACBITS) * 8192.0));
+        lut_nmsedec_ref0[i] =
+            opj_int_max(0,
+                        (int)(floor((u * u) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2,
+                                T1_NMSEDEC_FRACBITS) * 8192.0));
+    }
 
-       printf("static const OPJ_INT16 lut_nmsedec_sig[1U << T1_NMSEDEC_BITS] = {\n  ");
-       dump_array16(lut_nmsedec_sig, 1U << T1_NMSEDEC_BITS);
+    printf("static const OPJ_INT16 lut_nmsedec_sig[1U << T1_NMSEDEC_BITS] = {\n  ");
+    dump_array16(lut_nmsedec_sig, 1U << T1_NMSEDEC_BITS);
 
-       printf("static const OPJ_INT16 lut_nmsedec_sig0[1U << T1_NMSEDEC_BITS] = {\n  ");
-       dump_array16(lut_nmsedec_sig0, 1U << T1_NMSEDEC_BITS);
+    printf("static const OPJ_INT16 lut_nmsedec_sig0[1U << T1_NMSEDEC_BITS] = {\n  ");
+    dump_array16(lut_nmsedec_sig0, 1U << T1_NMSEDEC_BITS);
 
-       printf("static const OPJ_INT16 lut_nmsedec_ref[1U << T1_NMSEDEC_BITS] = {\n  ");
-       dump_array16(lut_nmsedec_ref, 1U << T1_NMSEDEC_BITS);
+    printf("static const OPJ_INT16 lut_nmsedec_ref[1U << T1_NMSEDEC_BITS] = {\n  ");
+    dump_array16(lut_nmsedec_ref, 1U << T1_NMSEDEC_BITS);
 
-       printf("static const OPJ_INT16 lut_nmsedec_ref0[1U << T1_NMSEDEC_BITS] = {\n  ");
-       dump_array16(lut_nmsedec_ref0, 1U << T1_NMSEDEC_BITS);
+    printf("static const OPJ_INT16 lut_nmsedec_ref0[1U << T1_NMSEDEC_BITS] = {\n  ");
+    dump_array16(lut_nmsedec_ref0, 1U << T1_NMSEDEC_BITS);
 
-       return 0;
+    return 0;
 }
index 5a8d440c71678616a5886e01b321d5d083375855..b0990963a2a4e722e134a8036305e4f535fb3b23 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,10 +8,10 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR 
+ * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR
  * Copyright (c) 2012, CS Systemes d'Information, France
  * All rights reserved.
  *
@@ -47,7 +47,7 @@
 
 static void opj_t2_putcommacode(opj_bio_t *bio, OPJ_INT32 n);
 
-static OPJ_UINT32 opj_t2_getcommacode(opj_bio_t *bio); 
+static OPJ_UINT32 opj_t2_getcommacode(opj_bio_t *bio);
 /**
 Variable length code for signalling delta Zil (truncation point)
 @param bio  Bit Input/Output component
@@ -68,14 +68,14 @@ Encode a packet of a tile to a destination buffer
 @param cstr_info Codestream information structure
 @return
 */
-static OPJ_BOOL opj_t2_encode_packet(   OPJ_UINT32 tileno,
-                                        opj_tcd_tile_t *tile,
-                                        opj_tcp_t *tcp,
-                                        opj_pi_iterator_t *pi,
-                                        OPJ_BYTE *dest,
-                                        OPJ_UINT32 * p_data_written,
-                                        OPJ_UINT32 len,
-                                        opj_codestream_info_t *cstr_info);
+static OPJ_BOOL opj_t2_encode_packet(OPJ_UINT32 tileno,
+                                     opj_tcd_tile_t *tile,
+                                     opj_tcp_t *tcp,
+                                     opj_pi_iterator_t *pi,
+                                     OPJ_BYTE *dest,
+                                     OPJ_UINT32 * p_data_written,
+                                     OPJ_UINT32 len,
+                                     opj_codestream_info_t *cstr_info);
 
 /**
 Decode a packet of a tile from a source buffer
@@ -90,36 +90,36 @@ Decode a packet of a tile from a source buffer
 
 @return  FIXME DOC
 */
-static OPJ_BOOL opj_t2_decode_packet(   opj_t2_t* t2,
-                                        opj_tcd_tile_t *tile,
-                                        opj_tcp_t *tcp,
-                                        opj_pi_iterator_t *pi,
-                                        OPJ_BYTE *src,
-                                        OPJ_UINT32 * data_read,
-                                        OPJ_UINT32 max_length,
-                                        opj_packet_info_t *pack_info,
-                                        opj_event_mgr_t *p_manager);
-
-static OPJ_BOOL opj_t2_skip_packet( opj_t2_t* p_t2,
-                                    opj_tcd_tile_t *p_tile,
-                                    opj_tcp_t *p_tcp,
-                                    opj_pi_iterator_t *p_pi,
-                                    OPJ_BYTE *p_src,
-                                    OPJ_UINT32 * p_data_read,
-                                    OPJ_UINT32 p_max_length,
-                                    opj_packet_info_t *p_pack_info,
-                                    opj_event_mgr_t *p_manager);
-
-static OPJ_BOOL opj_t2_read_packet_header(  opj_t2_t* p_t2,
-                                            opj_tcd_tile_t *p_tile,
-                                            opj_tcp_t *p_tcp,
-                                            opj_pi_iterator_t *p_pi,
-                                            OPJ_BOOL * p_is_data_present,
-                                            OPJ_BYTE *p_src_data,
-                                            OPJ_UINT32 * p_data_read,
-                                            OPJ_UINT32 p_max_length,
-                                            opj_packet_info_t *p_pack_info,
-                                            opj_event_mgr_t *p_manager);
+static OPJ_BOOL opj_t2_decode_packet(opj_t2_t* t2,
+                                     opj_tcd_tile_t *tile,
+                                     opj_tcp_t *tcp,
+                                     opj_pi_iterator_t *pi,
+                                     OPJ_BYTE *src,
+                                     OPJ_UINT32 * data_read,
+                                     OPJ_UINT32 max_length,
+                                     opj_packet_info_t *pack_info,
+                                     opj_event_mgr_t *p_manager);
+
+static OPJ_BOOL opj_t2_skip_packet(opj_t2_t* p_t2,
+                                   opj_tcd_tile_t *p_tile,
+                                   opj_tcp_t *p_tcp,
+                                   opj_pi_iterator_t *p_pi,
+                                   OPJ_BYTE *p_src,
+                                   OPJ_UINT32 * p_data_read,
+                                   OPJ_UINT32 p_max_length,
+                                   opj_packet_info_t *p_pack_info,
+                                   opj_event_mgr_t *p_manager);
+
+static OPJ_BOOL opj_t2_read_packet_header(opj_t2_t* p_t2,
+        opj_tcd_tile_t *p_tile,
+        opj_tcp_t *p_tcp,
+        opj_pi_iterator_t *p_pi,
+        OPJ_BOOL * p_is_data_present,
+        OPJ_BYTE *p_src_data,
+        OPJ_UINT32 * p_data_read,
+        OPJ_UINT32 p_max_length,
+        opj_packet_info_t *p_pack_info,
+        opj_event_mgr_t *p_manager);
 
 static OPJ_BOOL opj_t2_read_packet_data(opj_t2_t* p_t2,
                                         opj_tcd_tile_t *p_tile,
@@ -144,10 +144,10 @@ static OPJ_BOOL opj_t2_skip_packet_data(opj_t2_t* p_t2,
 @param cblksty
 @param first
 */
-static OPJ_BOOL opj_t2_init_seg(    opj_tcd_cblk_dec_t* cblk,
-                                    OPJ_UINT32 index,
-                                    OPJ_UINT32 cblksty,
-                                    OPJ_UINT32 first);
+static OPJ_BOOL opj_t2_init_seg(opj_tcd_cblk_dec_t* cblk,
+                                OPJ_UINT32 index,
+                                OPJ_UINT32 cblksty,
+                                OPJ_UINT32 first);
 
 /*@}*/
 
@@ -156,179 +156,192 @@ static OPJ_BOOL opj_t2_init_seg(    opj_tcd_cblk_dec_t* cblk,
 /* ----------------------------------------------------------------------- */
 
 /* #define RESTART 0x04 */
-static void opj_t2_putcommacode(opj_bio_t *bio, OPJ_INT32 n) {
-        while (--n >= 0) {
-                opj_bio_write(bio, 1, 1);
-        }
-        opj_bio_write(bio, 0, 1);
+static void opj_t2_putcommacode(opj_bio_t *bio, OPJ_INT32 n)
+{
+    while (--n >= 0) {
+        opj_bio_write(bio, 1, 1);
+    }
+    opj_bio_write(bio, 0, 1);
 }
 
 static OPJ_UINT32 opj_t2_getcommacode(opj_bio_t *bio)
 {
     OPJ_UINT32 n = 0;
     while (opj_bio_read(bio, 1)) {
-           ++n;
+        ++n;
     }
     return n;
 }
 
-static void opj_t2_putnumpasses(opj_bio_t *bio, OPJ_UINT32 n) {
-        if (n == 1) {
-                opj_bio_write(bio, 0, 1);
-        } else if (n == 2) {
-                opj_bio_write(bio, 2, 2);
-        } else if (n <= 5) {
-                opj_bio_write(bio, 0xc | (n - 3), 4);
-        } else if (n <= 36) {
-                opj_bio_write(bio, 0x1e0 | (n - 6), 9);
-        } else if (n <= 164) {
-                opj_bio_write(bio, 0xff80 | (n - 37), 16);
-        }
+static void opj_t2_putnumpasses(opj_bio_t *bio, OPJ_UINT32 n)
+{
+    if (n == 1) {
+        opj_bio_write(bio, 0, 1);
+    } else if (n == 2) {
+        opj_bio_write(bio, 2, 2);
+    } else if (n <= 5) {
+        opj_bio_write(bio, 0xc | (n - 3), 4);
+    } else if (n <= 36) {
+        opj_bio_write(bio, 0x1e0 | (n - 6), 9);
+    } else if (n <= 164) {
+        opj_bio_write(bio, 0xff80 | (n - 37), 16);
+    }
 }
 
-static OPJ_UINT32 opj_t2_getnumpasses(opj_bio_t *bio) {
-        OPJ_UINT32 n;
-        if (!opj_bio_read(bio, 1))
-                return 1;
-        if (!opj_bio_read(bio, 1))
-                return 2;
-        if ((n = opj_bio_read(bio, 2)) != 3)
-                return (3 + n);
-        if ((n = opj_bio_read(bio, 5)) != 31)
-                return (6 + n);
-        return (37 + opj_bio_read(bio, 7));
+static OPJ_UINT32 opj_t2_getnumpasses(opj_bio_t *bio)
+{
+    OPJ_UINT32 n;
+    if (!opj_bio_read(bio, 1)) {
+        return 1;
+    }
+    if (!opj_bio_read(bio, 1)) {
+        return 2;
+    }
+    if ((n = opj_bio_read(bio, 2)) != 3) {
+        return (3 + n);
+    }
+    if ((n = opj_bio_read(bio, 5)) != 31) {
+        return (6 + n);
+    }
+    return (37 + opj_bio_read(bio, 7));
 }
 
 /* ----------------------------------------------------------------------- */
 
-OPJ_BOOL opj_t2_encode_packets( opj_t2_t* p_t2,
-                                OPJ_UINT32 p_tile_no,
-                                opj_tcd_tile_t *p_tile,
-                                OPJ_UINT32 p_maxlayers,
-                                OPJ_BYTE *p_dest,
-                                OPJ_UINT32 * p_data_written,
-                                OPJ_UINT32 p_max_len,
-                                opj_codestream_info_t *cstr_info,
-                                OPJ_UINT32 p_tp_num,
-                                OPJ_INT32 p_tp_pos,
-                                OPJ_UINT32 p_pino,
-                                J2K_T2_MODE p_t2_mode)
+OPJ_BOOL opj_t2_encode_packets(opj_t2_t* p_t2,
+                               OPJ_UINT32 p_tile_no,
+                               opj_tcd_tile_t *p_tile,
+                               OPJ_UINT32 p_maxlayers,
+                               OPJ_BYTE *p_dest,
+                               OPJ_UINT32 * p_data_written,
+                               OPJ_UINT32 p_max_len,
+                               opj_codestream_info_t *cstr_info,
+                               OPJ_UINT32 p_tp_num,
+                               OPJ_INT32 p_tp_pos,
+                               OPJ_UINT32 p_pino,
+                               J2K_T2_MODE p_t2_mode)
 {
-        OPJ_BYTE *l_current_data = p_dest;
-        OPJ_UINT32 l_nb_bytes = 0;
-        OPJ_UINT32 compno;
-        OPJ_UINT32 poc;
-        opj_pi_iterator_t *l_pi = 00;
-        opj_pi_iterator_t *l_current_pi = 00;
-        opj_image_t *l_image = p_t2->image;
-        opj_cp_t *l_cp = p_t2->cp;
-        opj_tcp_t *l_tcp = &l_cp->tcps[p_tile_no];
-        OPJ_UINT32 pocno = (l_cp->rsiz == OPJ_PROFILE_CINEMA_4K)? 2: 1;
-        OPJ_UINT32 l_max_comp = l_cp->m_specific_param.m_enc.m_max_comp_size > 0 ? l_image->numcomps : 1;
-        OPJ_UINT32 l_nb_pocs = l_tcp->numpocs + 1;
-
-        l_pi = opj_pi_initialise_encode(l_image, l_cp, p_tile_no, p_t2_mode);
-        if (!l_pi) {
-                return OPJ_FALSE;
-        }
-
-        * p_data_written = 0;
+    OPJ_BYTE *l_current_data = p_dest;
+    OPJ_UINT32 l_nb_bytes = 0;
+    OPJ_UINT32 compno;
+    OPJ_UINT32 poc;
+    opj_pi_iterator_t *l_pi = 00;
+    opj_pi_iterator_t *l_current_pi = 00;
+    opj_image_t *l_image = p_t2->image;
+    opj_cp_t *l_cp = p_t2->cp;
+    opj_tcp_t *l_tcp = &l_cp->tcps[p_tile_no];
+    OPJ_UINT32 pocno = (l_cp->rsiz == OPJ_PROFILE_CINEMA_4K) ? 2 : 1;
+    OPJ_UINT32 l_max_comp = l_cp->m_specific_param.m_enc.m_max_comp_size > 0 ?
+                            l_image->numcomps : 1;
+    OPJ_UINT32 l_nb_pocs = l_tcp->numpocs + 1;
+
+    l_pi = opj_pi_initialise_encode(l_image, l_cp, p_tile_no, p_t2_mode);
+    if (!l_pi) {
+        return OPJ_FALSE;
+    }
 
-        if (p_t2_mode == THRESH_CALC ){ /* Calculating threshold */
-                l_current_pi = l_pi;
+    * p_data_written = 0;
 
-                for     (compno = 0; compno < l_max_comp; ++compno) {
-                        OPJ_UINT32 l_comp_len = 0;
-                        l_current_pi = l_pi;
+    if (p_t2_mode == THRESH_CALC) { /* Calculating threshold */
+        l_current_pi = l_pi;
 
-                        for (poc = 0; poc < pocno ; ++poc) {
-                                OPJ_UINT32 l_tp_num = compno;
+        for (compno = 0; compno < l_max_comp; ++compno) {
+            OPJ_UINT32 l_comp_len = 0;
+            l_current_pi = l_pi;
 
-                                /* TODO MSD : check why this function cannot fail (cf. v1) */
-                                opj_pi_create_encode(l_pi, l_cp,p_tile_no,poc,l_tp_num,p_tp_pos,p_t2_mode);
+            for (poc = 0; poc < pocno ; ++poc) {
+                OPJ_UINT32 l_tp_num = compno;
 
-                                if (l_current_pi->poc.prg == OPJ_PROG_UNKNOWN) {
-                                    /* TODO ADE : add an error */
-                                    opj_pi_destroy(l_pi, l_nb_pocs);
-                                    return OPJ_FALSE;
-                                }
-                                while (opj_pi_next(l_current_pi)) {
-                                        if (l_current_pi->layno < p_maxlayers) {
-                                                l_nb_bytes = 0;
+                /* TODO MSD : check why this function cannot fail (cf. v1) */
+                opj_pi_create_encode(l_pi, l_cp, p_tile_no, poc, l_tp_num, p_tp_pos, p_t2_mode);
 
-                                                if (! opj_t2_encode_packet(p_tile_no,p_tile, l_tcp, l_current_pi, l_current_data, &l_nb_bytes, p_max_len, cstr_info)) {
-                                                        opj_pi_destroy(l_pi, l_nb_pocs);
-                                                        return OPJ_FALSE;
-                                                }
+                if (l_current_pi->poc.prg == OPJ_PROG_UNKNOWN) {
+                    /* TODO ADE : add an error */
+                    opj_pi_destroy(l_pi, l_nb_pocs);
+                    return OPJ_FALSE;
+                }
+                while (opj_pi_next(l_current_pi)) {
+                    if (l_current_pi->layno < p_maxlayers) {
+                        l_nb_bytes = 0;
 
-                                                l_comp_len += l_nb_bytes;
-                                                l_current_data += l_nb_bytes;
-                                                p_max_len -= l_nb_bytes;
+                        if (! opj_t2_encode_packet(p_tile_no, p_tile, l_tcp, l_current_pi,
+                                                   l_current_data, &l_nb_bytes, p_max_len, cstr_info)) {
+                            opj_pi_destroy(l_pi, l_nb_pocs);
+                            return OPJ_FALSE;
+                        }
 
-                                                * p_data_written += l_nb_bytes;
-                                        }
-                                }
+                        l_comp_len += l_nb_bytes;
+                        l_current_data += l_nb_bytes;
+                        p_max_len -= l_nb_bytes;
 
-                                if (l_cp->m_specific_param.m_enc.m_max_comp_size) {
-                                        if (l_comp_len > l_cp->m_specific_param.m_enc.m_max_comp_size) {
-                                                opj_pi_destroy(l_pi, l_nb_pocs);
-                                                return OPJ_FALSE;
-                                        }
-                                }
+                        * p_data_written += l_nb_bytes;
+                    }
+                }
 
-                                ++l_current_pi;
-                        }
+                if (l_cp->m_specific_param.m_enc.m_max_comp_size) {
+                    if (l_comp_len > l_cp->m_specific_param.m_enc.m_max_comp_size) {
+                        opj_pi_destroy(l_pi, l_nb_pocs);
+                        return OPJ_FALSE;
+                    }
                 }
+
+                ++l_current_pi;
+            }
         }
-        else {  /* t2_mode == FINAL_PASS  */
-                opj_pi_create_encode(l_pi, l_cp,p_tile_no,p_pino,p_tp_num,p_tp_pos,p_t2_mode);
+    } else { /* t2_mode == FINAL_PASS  */
+        opj_pi_create_encode(l_pi, l_cp, p_tile_no, p_pino, p_tp_num, p_tp_pos,
+                             p_t2_mode);
+
+        l_current_pi = &l_pi[p_pino];
+        if (l_current_pi->poc.prg == OPJ_PROG_UNKNOWN) {
+            /* TODO ADE : add an error */
+            opj_pi_destroy(l_pi, l_nb_pocs);
+            return OPJ_FALSE;
+        }
+        while (opj_pi_next(l_current_pi)) {
+            if (l_current_pi->layno < p_maxlayers) {
+                l_nb_bytes = 0;
 
-                l_current_pi = &l_pi[p_pino];
-                if (l_current_pi->poc.prg == OPJ_PROG_UNKNOWN) {
-                    /* TODO ADE : add an error */
+                if (! opj_t2_encode_packet(p_tile_no, p_tile, l_tcp, l_current_pi,
+                                           l_current_data, &l_nb_bytes, p_max_len, cstr_info)) {
                     opj_pi_destroy(l_pi, l_nb_pocs);
                     return OPJ_FALSE;
                 }
-                while (opj_pi_next(l_current_pi)) {
-                        if (l_current_pi->layno < p_maxlayers) {
-                                l_nb_bytes=0;
-
-                                if (! opj_t2_encode_packet(p_tile_no,p_tile, l_tcp, l_current_pi, l_current_data, &l_nb_bytes, p_max_len, cstr_info)) {
-                                        opj_pi_destroy(l_pi, l_nb_pocs);
-                                        return OPJ_FALSE;
-                                }
-
-                                l_current_data += l_nb_bytes;
-                                p_max_len -= l_nb_bytes;
-
-                                * p_data_written += l_nb_bytes;
-
-                                /* INDEX >> */
-                                if(cstr_info) {
-                                        if(cstr_info->index_write) {
-                                                opj_tile_info_t *info_TL = &cstr_info->tile[p_tile_no];
-                                                opj_packet_info_t *info_PK = &info_TL->packet[cstr_info->packno];
-                                                if (!cstr_info->packno) {
-                                                        info_PK->start_pos = info_TL->end_header + 1;
-                                                } else {
-                                                        info_PK->start_pos = ((l_cp->m_specific_param.m_enc.m_tp_on | l_tcp->POC)&& info_PK->start_pos) ? info_PK->start_pos : info_TL->packet[cstr_info->packno - 1].end_pos + 1;
-                                                }
-                                                info_PK->end_pos = info_PK->start_pos + l_nb_bytes - 1;
-                                                info_PK->end_ph_pos += info_PK->start_pos - 1;  /* End of packet header which now only represents the distance
-                                                                                                                                                                                                                                                   to start of packet is incremented by value of start of packet*/
-                                        }
 
-                                        cstr_info->packno++;
-                                }
-                                /* << INDEX */
-                                ++p_tile->packno;
+                l_current_data += l_nb_bytes;
+                p_max_len -= l_nb_bytes;
+
+                * p_data_written += l_nb_bytes;
+
+                /* INDEX >> */
+                if (cstr_info) {
+                    if (cstr_info->index_write) {
+                        opj_tile_info_t *info_TL = &cstr_info->tile[p_tile_no];
+                        opj_packet_info_t *info_PK = &info_TL->packet[cstr_info->packno];
+                        if (!cstr_info->packno) {
+                            info_PK->start_pos = info_TL->end_header + 1;
+                        } else {
+                            info_PK->start_pos = ((l_cp->m_specific_param.m_enc.m_tp_on | l_tcp->POC) &&
+                                                  info_PK->start_pos) ? info_PK->start_pos : info_TL->packet[cstr_info->packno -
+                                                                            1].end_pos + 1;
                         }
+                        info_PK->end_pos = info_PK->start_pos + l_nb_bytes - 1;
+                        info_PK->end_ph_pos += info_PK->start_pos -
+                                               1;  /* End of packet header which now only represents the distance
+                                                                                                                                                                                                                                                   to start of packet is incremented by value of start of packet*/
+                    }
+
+                    cstr_info->packno++;
                 }
+                /* << INDEX */
+                ++p_tile->packno;
+            }
         }
+    }
 
-        opj_pi_destroy(l_pi, l_nb_pocs);
+    opj_pi_destroy(l_pi, l_nb_pocs);
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 /* see issue 80 */
@@ -338,154 +351,167 @@ OPJ_BOOL opj_t2_encode_packets( opj_t2_t* p_t2,
 /* issue 290 */
 static void opj_null_jas_fprintf(FILE* file, const char * format, ...)
 {
-  (void)file;
-  (void)format;
+    (void)file;
+    (void)format;
 }
 #define JAS_FPRINTF opj_null_jas_fprintf
 #endif
 
-OPJ_BOOL opj_t2_decode_packets( opj_t2_t *p_t2,
-                                OPJ_UINT32 p_tile_no,
-                                opj_tcd_tile_t *p_tile,
-                                OPJ_BYTE *p_src,
-                                OPJ_UINT32 * p_data_read,
-                                OPJ_UINT32 p_max_len,
-                                opj_codestream_index_t *p_cstr_index,
-                                opj_event_mgr_t *p_manager)
+OPJ_BOOL opj_t2_decode_packets(opj_t2_t *p_t2,
+                               OPJ_UINT32 p_tile_no,
+                               opj_tcd_tile_t *p_tile,
+                               OPJ_BYTE *p_src,
+                               OPJ_UINT32 * p_data_read,
+                               OPJ_UINT32 p_max_len,
+                               opj_codestream_index_t *p_cstr_index,
+                               opj_event_mgr_t *p_manager)
 {
-        OPJ_BYTE *l_current_data = p_src;
-        opj_pi_iterator_t *l_pi = 00;
-        OPJ_UINT32 pino;
-        opj_image_t *l_image = p_t2->image;
-        opj_cp_t *l_cp = p_t2->cp;
-        opj_tcp_t *l_tcp = &(p_t2->cp->tcps[p_tile_no]);
-        OPJ_UINT32 l_nb_bytes_read;
-        OPJ_UINT32 l_nb_pocs = l_tcp->numpocs + 1;
-        opj_pi_iterator_t *l_current_pi = 00;
+    OPJ_BYTE *l_current_data = p_src;
+    opj_pi_iterator_t *l_pi = 00;
+    OPJ_UINT32 pino;
+    opj_image_t *l_image = p_t2->image;
+    opj_cp_t *l_cp = p_t2->cp;
+    opj_tcp_t *l_tcp = &(p_t2->cp->tcps[p_tile_no]);
+    OPJ_UINT32 l_nb_bytes_read;
+    OPJ_UINT32 l_nb_pocs = l_tcp->numpocs + 1;
+    opj_pi_iterator_t *l_current_pi = 00;
 #ifdef TODO_MSD
-        OPJ_UINT32 curtp = 0;
-        OPJ_UINT32 tp_start_packno;
-#endif 
-        opj_packet_info_t *l_pack_info = 00;
-        opj_image_comp_t* l_img_comp = 00;
+    OPJ_UINT32 curtp = 0;
+    OPJ_UINT32 tp_start_packno;
+#endif
+    opj_packet_info_t *l_pack_info = 00;
+    opj_image_comp_t* l_img_comp = 00;
 
-        OPJ_ARG_NOT_USED(p_cstr_index);
+    OPJ_ARG_NOT_USED(p_cstr_index);
 
 #ifdef TODO_MSD
-        if (p_cstr_index) {
-                l_pack_info = p_cstr_index->tile_index[p_tile_no].packet;
-        }
+    if (p_cstr_index) {
+        l_pack_info = p_cstr_index->tile_index[p_tile_no].packet;
+    }
 #endif
 
-        /* create a packet iterator */
-        l_pi = opj_pi_create_decode(l_image, l_cp, p_tile_no);
-        if (!l_pi) {
-                return OPJ_FALSE;
+    /* create a packet iterator */
+    l_pi = opj_pi_create_decode(l_image, l_cp, p_tile_no);
+    if (!l_pi) {
+        return OPJ_FALSE;
+    }
+
+
+    l_current_pi = l_pi;
+
+    for (pino = 0; pino <= l_tcp->numpocs; ++pino) {
+
+        /* if the resolution needed is too low, one dim of the tilec could be equal to zero
+         * and no packets are used to decode this resolution and
+         * l_current_pi->resno is always >= p_tile->comps[l_current_pi->compno].minimum_num_resolutions
+         * and no l_img_comp->resno_decoded are computed
+         */
+        OPJ_BOOL* first_pass_failed = NULL;
+
+        if (l_current_pi->poc.prg == OPJ_PROG_UNKNOWN) {
+            /* TODO ADE : add an error */
+            opj_pi_destroy(l_pi, l_nb_pocs);
+            return OPJ_FALSE;
         }
 
+        first_pass_failed = (OPJ_BOOL*)opj_malloc(l_image->numcomps * sizeof(OPJ_BOOL));
+        if (!first_pass_failed) {
+            opj_pi_destroy(l_pi, l_nb_pocs);
+            return OPJ_FALSE;
+        }
+        memset(first_pass_failed, OPJ_TRUE, l_image->numcomps * sizeof(OPJ_BOOL));
 
-        l_current_pi = l_pi;
+        while (opj_pi_next(l_current_pi)) {
+            JAS_FPRINTF(stderr,
+                        "packet offset=00000166 prg=%d cmptno=%02d rlvlno=%02d prcno=%03d lyrno=%02d\n\n",
+                        l_current_pi->poc.prg1, l_current_pi->compno, l_current_pi->resno,
+                        l_current_pi->precno, l_current_pi->layno);
+
+            if (l_tcp->num_layers_to_decode > l_current_pi->layno
+                    && l_current_pi->resno <
+                    p_tile->comps[l_current_pi->compno].minimum_num_resolutions) {
+                l_nb_bytes_read = 0;
 
-        for     (pino = 0; pino <= l_tcp->numpocs; ++pino) {
+                first_pass_failed[l_current_pi->compno] = OPJ_FALSE;
 
-                /* if the resolution needed is too low, one dim of the tilec could be equal to zero
-                 * and no packets are used to decode this resolution and
-                 * l_current_pi->resno is always >= p_tile->comps[l_current_pi->compno].minimum_num_resolutions
-                 * and no l_img_comp->resno_decoded are computed
-                 */
-                OPJ_BOOL* first_pass_failed = NULL;
-                                       
-                if (l_current_pi->poc.prg == OPJ_PROG_UNKNOWN) {
-                    /* TODO ADE : add an error */
+                if (! opj_t2_decode_packet(p_t2, p_tile, l_tcp, l_current_pi, l_current_data,
+                                           &l_nb_bytes_read, p_max_len, l_pack_info, p_manager)) {
                     opj_pi_destroy(l_pi, l_nb_pocs);
+                    opj_free(first_pass_failed);
                     return OPJ_FALSE;
                 }
-                                       
-                first_pass_failed = (OPJ_BOOL*)opj_malloc(l_image->numcomps * sizeof(OPJ_BOOL));
-                if (!first_pass_failed)
-                {
-                    opj_pi_destroy(l_pi,l_nb_pocs);
+
+                l_img_comp = &(l_image->comps[l_current_pi->compno]);
+                l_img_comp->resno_decoded = opj_uint_max(l_current_pi->resno,
+                                            l_img_comp->resno_decoded);
+            } else {
+                l_nb_bytes_read = 0;
+                if (! opj_t2_skip_packet(p_t2, p_tile, l_tcp, l_current_pi, l_current_data,
+                                         &l_nb_bytes_read, p_max_len, l_pack_info, p_manager)) {
+                    opj_pi_destroy(l_pi, l_nb_pocs);
+                    opj_free(first_pass_failed);
                     return OPJ_FALSE;
                 }
-                memset(first_pass_failed, OPJ_TRUE, l_image->numcomps * sizeof(OPJ_BOOL));
-
-                while (opj_pi_next(l_current_pi)) {
-                  JAS_FPRINTF( stderr, "packet offset=00000166 prg=%d cmptno=%02d rlvlno=%02d prcno=%03d lyrno=%02d\n\n",
-                    l_current_pi->poc.prg1, l_current_pi->compno, l_current_pi->resno, l_current_pi->precno, l_current_pi->layno );
-
-                        if (l_tcp->num_layers_to_decode > l_current_pi->layno
-                                        && l_current_pi->resno < p_tile->comps[l_current_pi->compno].minimum_num_resolutions) {
-                                l_nb_bytes_read = 0;
-
-                                first_pass_failed[l_current_pi->compno] = OPJ_FALSE;
+            }
 
-                                if (! opj_t2_decode_packet(p_t2,p_tile,l_tcp,l_current_pi,l_current_data,&l_nb_bytes_read,p_max_len,l_pack_info, p_manager)) {
-                                        opj_pi_destroy(l_pi,l_nb_pocs);
-                                        opj_free(first_pass_failed);
-                                        return OPJ_FALSE;
-                                }
-
-                                l_img_comp = &(l_image->comps[l_current_pi->compno]);
-                                l_img_comp->resno_decoded = opj_uint_max(l_current_pi->resno, l_img_comp->resno_decoded);
-                        }
-                        else {
-                                l_nb_bytes_read = 0;
-                                if (! opj_t2_skip_packet(p_t2,p_tile,l_tcp,l_current_pi,l_current_data,&l_nb_bytes_read,p_max_len,l_pack_info, p_manager)) {
-                                        opj_pi_destroy(l_pi,l_nb_pocs);
-                                        opj_free(first_pass_failed);
-                                        return OPJ_FALSE;
-                                }
-                        }
-
-                        if (first_pass_failed[l_current_pi->compno]) {
-                                l_img_comp = &(l_image->comps[l_current_pi->compno]);
-                                if (l_img_comp->resno_decoded == 0)
-                                        l_img_comp->resno_decoded = p_tile->comps[l_current_pi->compno].minimum_num_resolutions - 1;
-                        }
+            if (first_pass_failed[l_current_pi->compno]) {
+                l_img_comp = &(l_image->comps[l_current_pi->compno]);
+                if (l_img_comp->resno_decoded == 0) {
+                    l_img_comp->resno_decoded =
+                        p_tile->comps[l_current_pi->compno].minimum_num_resolutions - 1;
+                }
+            }
 
-                        l_current_data += l_nb_bytes_read;
-                        p_max_len -= l_nb_bytes_read;
+            l_current_data += l_nb_bytes_read;
+            p_max_len -= l_nb_bytes_read;
 
-                        /* INDEX >> */
+            /* INDEX >> */
 #ifdef TODO_MSD
-                        if(p_cstr_info) {
-                                opj_tile_info_v2_t *info_TL = &p_cstr_info->tile[p_tile_no];
-                                opj_packet_info_t *info_PK = &info_TL->packet[p_cstr_info->packno];
-                                tp_start_packno = 0;
-                                if (!p_cstr_info->packno) {
-                                        info_PK->start_pos = info_TL->end_header + 1;
-                                } else if (info_TL->packet[p_cstr_info->packno-1].end_pos >= (OPJ_INT32)p_cstr_info->tile[p_tile_no].tp[curtp].tp_end_pos){ /* New tile part */
-                                        info_TL->tp[curtp].tp_numpacks = p_cstr_info->packno - tp_start_packno; /* Number of packets in previous tile-part */
-                                        tp_start_packno = p_cstr_info->packno;
-                                        curtp++;
-                                        info_PK->start_pos = p_cstr_info->tile[p_tile_no].tp[curtp].tp_end_header+1;
-                                } else {
-                                        info_PK->start_pos = (l_cp->m_specific_param.m_enc.m_tp_on && info_PK->start_pos) ? info_PK->start_pos : info_TL->packet[p_cstr_info->packno - 1].end_pos + 1;
-                                }
-                                info_PK->end_pos = info_PK->start_pos + l_nb_bytes_read - 1;
-                                info_PK->end_ph_pos += info_PK->start_pos - 1;  /* End of packet header which now only represents the distance */
-                                ++p_cstr_info->packno;
-                        }
-#endif
-                        /* << INDEX */
+            if (p_cstr_info) {
+                opj_tile_info_v2_t *info_TL = &p_cstr_info->tile[p_tile_no];
+                opj_packet_info_t *info_PK = &info_TL->packet[p_cstr_info->packno];
+                tp_start_packno = 0;
+                if (!p_cstr_info->packno) {
+                    info_PK->start_pos = info_TL->end_header + 1;
+                } else if (info_TL->packet[p_cstr_info->packno - 1].end_pos >=
+                           (OPJ_INT32)
+                           p_cstr_info->tile[p_tile_no].tp[curtp].tp_end_pos) { /* New tile part */
+                    info_TL->tp[curtp].tp_numpacks = p_cstr_info->packno -
+                                                     tp_start_packno; /* Number of packets in previous tile-part */
+                    tp_start_packno = p_cstr_info->packno;
+                    curtp++;
+                    info_PK->start_pos = p_cstr_info->tile[p_tile_no].tp[curtp].tp_end_header + 1;
+                } else {
+                    info_PK->start_pos = (l_cp->m_specific_param.m_enc.m_tp_on &&
+                                          info_PK->start_pos) ? info_PK->start_pos : info_TL->packet[p_cstr_info->packno -
+                                                                      1].end_pos + 1;
                 }
-                ++l_current_pi;
-
-                opj_free(first_pass_failed);
+                info_PK->end_pos = info_PK->start_pos + l_nb_bytes_read - 1;
+                info_PK->end_ph_pos += info_PK->start_pos -
+                                       1;  /* End of packet header which now only represents the distance */
+                ++p_cstr_info->packno;
+            }
+#endif
+            /* << INDEX */
         }
-        /* INDEX >> */
+        ++l_current_pi;
+
+        opj_free(first_pass_failed);
+    }
+    /* INDEX >> */
 #ifdef TODO_MSD
-        if
-                (p_cstr_info) {
-                p_cstr_info->tile[p_tile_no].tp[curtp].tp_numpacks = p_cstr_info->packno - tp_start_packno; /* Number of packets in last tile-part */
-        }
+    if
+    (p_cstr_info) {
+        p_cstr_info->tile[p_tile_no].tp[curtp].tp_numpacks = p_cstr_info->packno -
+                tp_start_packno; /* Number of packets in last tile-part */
+    }
 #endif
-        /* << INDEX */
+    /* << INDEX */
 
-        /* don't forget to release pi */
-        opj_pi_destroy(l_pi,l_nb_pocs);
-        *p_data_read = (OPJ_UINT32)(l_current_data - p_src);
-        return OPJ_TRUE;
+    /* don't forget to release pi */
+    opj_pi_destroy(l_pi, l_nb_pocs);
+    *p_data_read = (OPJ_UINT32)(l_current_data - p_src);
+    return OPJ_TRUE;
 }
 
 /* ----------------------------------------------------------------------- */
@@ -499,888 +525,916 @@ OPJ_BOOL opj_t2_decode_packets( opj_t2_t *p_t2,
 */
 opj_t2_t* opj_t2_create(opj_image_t *p_image, opj_cp_t *p_cp)
 {
-        /* create the t2 structure */
-        opj_t2_t *l_t2 = (opj_t2_t*)opj_calloc(1,sizeof(opj_t2_t));
-        if (!l_t2) {
-                return NULL;
-        }
+    /* create the t2 structure */
+    opj_t2_t *l_t2 = (opj_t2_t*)opj_calloc(1, sizeof(opj_t2_t));
+    if (!l_t2) {
+        return NULL;
+    }
 
-        l_t2->image = p_image;
-        l_t2->cp = p_cp;
+    l_t2->image = p_image;
+    l_t2->cp = p_cp;
 
-        return l_t2;
+    return l_t2;
 }
 
-void opj_t2_destroy(opj_t2_t *t2) {
-        if(t2) {
-                opj_free(t2);
-        }
+void opj_t2_destroy(opj_t2_t *t2)
+{
+    if (t2) {
+        opj_free(t2);
+    }
 }
 
-static OPJ_BOOL opj_t2_decode_packet(  opj_t2_t* p_t2,
-                                opj_tcd_tile_t *p_tile,
-                                opj_tcp_t *p_tcp,
-                                opj_pi_iterator_t *p_pi,
-                                OPJ_BYTE *p_src,
-                                OPJ_UINT32 * p_data_read,
-                                OPJ_UINT32 p_max_length,
-                                opj_packet_info_t *p_pack_info,
-                                opj_event_mgr_t *p_manager)
+static OPJ_BOOL opj_t2_decode_packet(opj_t2_t* p_t2,
+                                     opj_tcd_tile_t *p_tile,
+                                     opj_tcp_t *p_tcp,
+                                     opj_pi_iterator_t *p_pi,
+                                     OPJ_BYTE *p_src,
+                                     OPJ_UINT32 * p_data_read,
+                                     OPJ_UINT32 p_max_length,
+                                     opj_packet_info_t *p_pack_info,
+                                     opj_event_mgr_t *p_manager)
 {
-        OPJ_BOOL l_read_data;
-        OPJ_UINT32 l_nb_bytes_read = 0;
-        OPJ_UINT32 l_nb_total_bytes_read = 0;
-
-        *p_data_read = 0;
+    OPJ_BOOL l_read_data;
+    OPJ_UINT32 l_nb_bytes_read = 0;
+    OPJ_UINT32 l_nb_total_bytes_read = 0;
 
-        if (! opj_t2_read_packet_header(p_t2,p_tile,p_tcp,p_pi,&l_read_data,p_src,&l_nb_bytes_read,p_max_length,p_pack_info, p_manager)) {
-                return OPJ_FALSE;
-        }
+    *p_data_read = 0;
 
-        p_src += l_nb_bytes_read;
-        l_nb_total_bytes_read += l_nb_bytes_read;
-        p_max_length -= l_nb_bytes_read;
+    if (! opj_t2_read_packet_header(p_t2, p_tile, p_tcp, p_pi, &l_read_data, p_src,
+                                    &l_nb_bytes_read, p_max_length, p_pack_info, p_manager)) {
+        return OPJ_FALSE;
+    }
 
-        /* we should read data for the packet */
-        if (l_read_data) {
-                l_nb_bytes_read = 0;
+    p_src += l_nb_bytes_read;
+    l_nb_total_bytes_read += l_nb_bytes_read;
+    p_max_length -= l_nb_bytes_read;
 
-                if (! opj_t2_read_packet_data(p_t2,p_tile,p_pi,p_src,&l_nb_bytes_read,p_max_length,p_pack_info, p_manager)) {
-                        return OPJ_FALSE;
-                }
+    /* we should read data for the packet */
+    if (l_read_data) {
+        l_nb_bytes_read = 0;
 
-                l_nb_total_bytes_read += l_nb_bytes_read;
+        if (! opj_t2_read_packet_data(p_t2, p_tile, p_pi, p_src, &l_nb_bytes_read,
+                                      p_max_length, p_pack_info, p_manager)) {
+            return OPJ_FALSE;
         }
 
-        *p_data_read = l_nb_total_bytes_read;
+        l_nb_total_bytes_read += l_nb_bytes_read;
+    }
 
-        return OPJ_TRUE;
+    *p_data_read = l_nb_total_bytes_read;
+
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_t2_encode_packet(  OPJ_UINT32 tileno,
-                                opj_tcd_tile_t * tile,
-                                opj_tcp_t * tcp,
-                                opj_pi_iterator_t *pi,
-                                OPJ_BYTE *dest,
-                                OPJ_UINT32 * p_data_written,
-                                OPJ_UINT32 length,
-                                opj_codestream_info_t *cstr_info)
+static OPJ_BOOL opj_t2_encode_packet(OPJ_UINT32 tileno,
+                                     opj_tcd_tile_t * tile,
+                                     opj_tcp_t * tcp,
+                                     opj_pi_iterator_t *pi,
+                                     OPJ_BYTE *dest,
+                                     OPJ_UINT32 * p_data_written,
+                                     OPJ_UINT32 length,
+                                     opj_codestream_info_t *cstr_info)
 {
-        OPJ_UINT32 bandno, cblkno;
-        OPJ_BYTE* c = dest;
-        OPJ_UINT32 l_nb_bytes;
-        OPJ_UINT32 compno = pi->compno;     /* component value */
-        OPJ_UINT32 resno  = pi->resno;      /* resolution level value */
-        OPJ_UINT32 precno = pi->precno;     /* precinct value */
-        OPJ_UINT32 layno  = pi->layno;      /* quality layer value */
-        OPJ_UINT32 l_nb_blocks;
-        opj_tcd_band_t *band = 00;
-        opj_tcd_cblk_enc_t* cblk = 00;
-        opj_tcd_pass_t *pass = 00;
-
-        opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-        opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-
-        opj_bio_t *bio = 00;    /* BIO component */
-
-        /* <SOP 0xff91> */
-        if (tcp->csty & J2K_CP_CSTY_SOP) {
-                c[0] = 255;
-                c[1] = 145;
-                c[2] = 0;
-                c[3] = 4;
+    OPJ_UINT32 bandno, cblkno;
+    OPJ_BYTE* c = dest;
+    OPJ_UINT32 l_nb_bytes;
+    OPJ_UINT32 compno = pi->compno;     /* component value */
+    OPJ_UINT32 resno  = pi->resno;      /* resolution level value */
+    OPJ_UINT32 precno = pi->precno;     /* precinct value */
+    OPJ_UINT32 layno  = pi->layno;      /* quality layer value */
+    OPJ_UINT32 l_nb_blocks;
+    opj_tcd_band_t *band = 00;
+    opj_tcd_cblk_enc_t* cblk = 00;
+    opj_tcd_pass_t *pass = 00;
+
+    opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+    opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+
+    opj_bio_t *bio = 00;    /* BIO component */
+
+    /* <SOP 0xff91> */
+    if (tcp->csty & J2K_CP_CSTY_SOP) {
+        c[0] = 255;
+        c[1] = 145;
+        c[2] = 0;
+        c[3] = 4;
 #if 0
-                c[4] = (tile->packno % 65536) / 256;
-                c[5] = (tile->packno % 65536) % 256;
+        c[4] = (tile->packno % 65536) / 256;
+        c[5] = (tile->packno % 65536) % 256;
 #else
-                c[4] = (tile->packno >> 8) & 0xff; /* packno is uint32_t */
-                c[5] = tile->packno & 0xff;
+        c[4] = (tile->packno >> 8) & 0xff; /* packno is uint32_t */
+        c[5] = tile->packno & 0xff;
 #endif
-                c += 6;
-                length -= 6;
-        }
-        /* </SOP> */
-
-        if (!layno) {
-                band = res->bands;
+        c += 6;
+        length -= 6;
+    }
+    /* </SOP> */
 
-                for(bandno = 0; bandno < res->numbands; ++bandno) {
-                        opj_tcd_precinct_t *prc = &band->precincts[precno];
+    if (!layno) {
+        band = res->bands;
 
-                        opj_tgt_reset(prc->incltree);
-                        opj_tgt_reset(prc->imsbtree);
+        for (bandno = 0; bandno < res->numbands; ++bandno) {
+            opj_tcd_precinct_t *prc = &band->precincts[precno];
 
-                        l_nb_blocks = prc->cw * prc->ch;
-                        for     (cblkno = 0; cblkno < l_nb_blocks; ++cblkno) {
-                                cblk = &prc->cblks.enc[cblkno];
+            opj_tgt_reset(prc->incltree);
+            opj_tgt_reset(prc->imsbtree);
 
-                                cblk->numpasses = 0;
-                                opj_tgt_setvalue(prc->imsbtree, cblkno, band->numbps - (OPJ_INT32)cblk->numbps);
-                        }
-                        ++band;
-                }
-        }
+            l_nb_blocks = prc->cw * prc->ch;
+            for (cblkno = 0; cblkno < l_nb_blocks; ++cblkno) {
+                cblk = &prc->cblks.enc[cblkno];
 
-        bio = opj_bio_create();
-        if (!bio) {
-                /* FIXME event manager error callback */
-                return OPJ_FALSE;
+                cblk->numpasses = 0;
+                opj_tgt_setvalue(prc->imsbtree, cblkno, band->numbps - (OPJ_INT32)cblk->numbps);
+            }
+            ++band;
         }
-        opj_bio_init_enc(bio, c, length);
-        opj_bio_write(bio, 1, 1);           /* Empty header bit */
+    }
 
-        /* Writing Packet header */
-        band = res->bands;
-        for (bandno = 0; bandno < res->numbands; ++bandno)      {
-                opj_tcd_precinct_t *prc = &band->precincts[precno];
+    bio = opj_bio_create();
+    if (!bio) {
+        /* FIXME event manager error callback */
+        return OPJ_FALSE;
+    }
+    opj_bio_init_enc(bio, c, length);
+    opj_bio_write(bio, 1, 1);           /* Empty header bit */
 
-                l_nb_blocks = prc->cw * prc->ch;
-                cblk = prc->cblks.enc;
+    /* Writing Packet header */
+    band = res->bands;
+    for (bandno = 0; bandno < res->numbands; ++bandno)      {
+        opj_tcd_precinct_t *prc = &band->precincts[precno];
 
-                for (cblkno = 0; cblkno < l_nb_blocks; ++cblkno) {
-                        opj_tcd_layer_t *layer = &cblk->layers[layno];
+        l_nb_blocks = prc->cw * prc->ch;
+        cblk = prc->cblks.enc;
 
-                        if (!cblk->numpasses && layer->numpasses) {
-                                opj_tgt_setvalue(prc->incltree, cblkno, (OPJ_INT32)layno);
-                        }
+        for (cblkno = 0; cblkno < l_nb_blocks; ++cblkno) {
+            opj_tcd_layer_t *layer = &cblk->layers[layno];
 
-                        ++cblk;
-                }
+            if (!cblk->numpasses && layer->numpasses) {
+                opj_tgt_setvalue(prc->incltree, cblkno, (OPJ_INT32)layno);
+            }
 
-                cblk = prc->cblks.enc;
-                for (cblkno = 0; cblkno < l_nb_blocks; cblkno++) {
-                        opj_tcd_layer_t *layer = &cblk->layers[layno];
-                        OPJ_UINT32 increment = 0;
-                        OPJ_UINT32 nump = 0;
-                        OPJ_UINT32 len = 0, passno;
-                        OPJ_UINT32 l_nb_passes;
-
-                        /* cblk inclusion bits */
-                        if (!cblk->numpasses) {
-                                opj_tgt_encode(bio, prc->incltree, cblkno, (OPJ_INT32)(layno + 1));
-                        } else {
-                                opj_bio_write(bio, layer->numpasses != 0, 1);
-                        }
-
-                        /* if cblk not included, go to the next cblk  */
-                        if (!layer->numpasses) {
-                                ++cblk;
-                                continue;
-                        }
-
-                        /* if first instance of cblk --> zero bit-planes information */
-                        if (!cblk->numpasses) {
-                                cblk->numlenbits = 3;
-                                opj_tgt_encode(bio, prc->imsbtree, cblkno, 999);
-                        }
+            ++cblk;
+        }
 
-                        /* number of coding passes included */
-                        opj_t2_putnumpasses(bio, layer->numpasses);
-                        l_nb_passes = cblk->numpasses + layer->numpasses;
-                        pass = cblk->passes +  cblk->numpasses;
+        cblk = prc->cblks.enc;
+        for (cblkno = 0; cblkno < l_nb_blocks; cblkno++) {
+            opj_tcd_layer_t *layer = &cblk->layers[layno];
+            OPJ_UINT32 increment = 0;
+            OPJ_UINT32 nump = 0;
+            OPJ_UINT32 len = 0, passno;
+            OPJ_UINT32 l_nb_passes;
+
+            /* cblk inclusion bits */
+            if (!cblk->numpasses) {
+                opj_tgt_encode(bio, prc->incltree, cblkno, (OPJ_INT32)(layno + 1));
+            } else {
+                opj_bio_write(bio, layer->numpasses != 0, 1);
+            }
+
+            /* if cblk not included, go to the next cblk  */
+            if (!layer->numpasses) {
+                ++cblk;
+                continue;
+            }
+
+            /* if first instance of cblk --> zero bit-planes information */
+            if (!cblk->numpasses) {
+                cblk->numlenbits = 3;
+                opj_tgt_encode(bio, prc->imsbtree, cblkno, 999);
+            }
+
+            /* number of coding passes included */
+            opj_t2_putnumpasses(bio, layer->numpasses);
+            l_nb_passes = cblk->numpasses + layer->numpasses;
+            pass = cblk->passes +  cblk->numpasses;
+
+            /* computation of the increase of the length indicator and insertion in the header     */
+            for (passno = cblk->numpasses; passno < l_nb_passes; ++passno) {
+                ++nump;
+                len += pass->len;
+
+                if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) {
+                    increment = (OPJ_UINT32)opj_int_max((OPJ_INT32)increment,
+                                                        opj_int_floorlog2((OPJ_INT32)len) + 1
+                                                        - ((OPJ_INT32)cblk->numlenbits + opj_int_floorlog2((OPJ_INT32)nump)));
+                    len = 0;
+                    nump = 0;
+                }
 
-                        /* computation of the increase of the length indicator and insertion in the header     */
-                        for (passno = cblk->numpasses; passno < l_nb_passes; ++passno) {
-                                ++nump;
-                                len += pass->len;
+                ++pass;
+            }
+            opj_t2_putcommacode(bio, (OPJ_INT32)increment);
 
-                                if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) {
-                                  increment = (OPJ_UINT32)opj_int_max((OPJ_INT32)increment, opj_int_floorlog2((OPJ_INT32)len) + 1
-                                    - ((OPJ_INT32)cblk->numlenbits + opj_int_floorlog2((OPJ_INT32)nump)));
-                                        len = 0;
-                                        nump = 0;
-                                }
+            /* computation of the new Length indicator */
+            cblk->numlenbits += increment;
 
-                                ++pass;
-                        }
-                        opj_t2_putcommacode(bio, (OPJ_INT32)increment);
-
-                        /* computation of the new Length indicator */
-                        cblk->numlenbits += increment;
-
-                        pass = cblk->passes +  cblk->numpasses;
-                        /* insertion of the codeword segment length */
-                        for (passno = cblk->numpasses; passno < l_nb_passes; ++passno) {
-                                nump++;
-                                len += pass->len;
-
-                                if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) {
-                                        opj_bio_write(bio, (OPJ_UINT32)len, cblk->numlenbits + (OPJ_UINT32)opj_int_floorlog2((OPJ_INT32)nump));
-                                        len = 0;
-                                        nump = 0;
-                                }
-                                ++pass;
-                        }
+            pass = cblk->passes +  cblk->numpasses;
+            /* insertion of the codeword segment length */
+            for (passno = cblk->numpasses; passno < l_nb_passes; ++passno) {
+                nump++;
+                len += pass->len;
 
-                        ++cblk;
+                if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) {
+                    opj_bio_write(bio, (OPJ_UINT32)len,
+                                  cblk->numlenbits + (OPJ_UINT32)opj_int_floorlog2((OPJ_INT32)nump));
+                    len = 0;
+                    nump = 0;
                 }
+                ++pass;
+            }
 
-                ++band;
-        }
-
-        if (!opj_bio_flush(bio)) {
-                opj_bio_destroy(bio);
-                return OPJ_FALSE;               /* modified to eliminate longjmp !! */
+            ++cblk;
         }
 
-        l_nb_bytes = (OPJ_UINT32)opj_bio_numbytes(bio);
-        c += l_nb_bytes;
-        length -= l_nb_bytes;
+        ++band;
+    }
 
+    if (!opj_bio_flush(bio)) {
         opj_bio_destroy(bio);
+        return OPJ_FALSE;               /* modified to eliminate longjmp !! */
+    }
 
-        /* <EPH 0xff92> */
-        if (tcp->csty & J2K_CP_CSTY_EPH) {
-                c[0] = 255;
-                c[1] = 146;
-                c += 2;
-                length -= 2;
-        }
-        /* </EPH> */
+    l_nb_bytes = (OPJ_UINT32)opj_bio_numbytes(bio);
+    c += l_nb_bytes;
+    length -= l_nb_bytes;
 
-        /* << INDEX */
-        /* End of packet header position. Currently only represents the distance to start of packet
-           Will be updated later by incrementing with packet start value*/
-        if(cstr_info && cstr_info->index_write) {
-                opj_packet_info_t *info_PK = &cstr_info->tile[tileno].packet[cstr_info->packno];
-                info_PK->end_ph_pos = (OPJ_INT32)(c - dest);
-        }
-        /* INDEX >> */
+    opj_bio_destroy(bio);
 
-        /* Writing the packet body */
-        band = res->bands;
-        for (bandno = 0; bandno < res->numbands; bandno++) {
-                opj_tcd_precinct_t *prc = &band->precincts[precno];
+    /* <EPH 0xff92> */
+    if (tcp->csty & J2K_CP_CSTY_EPH) {
+        c[0] = 255;
+        c[1] = 146;
+        c += 2;
+        length -= 2;
+    }
+    /* </EPH> */
+
+    /* << INDEX */
+    /* End of packet header position. Currently only represents the distance to start of packet
+       Will be updated later by incrementing with packet start value*/
+    if (cstr_info && cstr_info->index_write) {
+        opj_packet_info_t *info_PK = &cstr_info->tile[tileno].packet[cstr_info->packno];
+        info_PK->end_ph_pos = (OPJ_INT32)(c - dest);
+    }
+    /* INDEX >> */
 
-                l_nb_blocks = prc->cw * prc->ch;
-                cblk = prc->cblks.enc;
+    /* Writing the packet body */
+    band = res->bands;
+    for (bandno = 0; bandno < res->numbands; bandno++) {
+        opj_tcd_precinct_t *prc = &band->precincts[precno];
 
-                for (cblkno = 0; cblkno < l_nb_blocks; ++cblkno) {
-                        opj_tcd_layer_t *layer = &cblk->layers[layno];
+        l_nb_blocks = prc->cw * prc->ch;
+        cblk = prc->cblks.enc;
 
-                        if (!layer->numpasses) {
-                                ++cblk;
-                                continue;
-                        }
+        for (cblkno = 0; cblkno < l_nb_blocks; ++cblkno) {
+            opj_tcd_layer_t *layer = &cblk->layers[layno];
 
-                        if (layer->len > length) {
-                                return OPJ_FALSE;
-                        }
+            if (!layer->numpasses) {
+                ++cblk;
+                continue;
+            }
 
-                        memcpy(c, layer->data, layer->len);
-                        cblk->numpasses += layer->numpasses;
-                        c += layer->len;
-                        length -= layer->len;
-
-                        /* << INDEX */
-                        if(cstr_info && cstr_info->index_write) {
-                                opj_packet_info_t *info_PK = &cstr_info->tile[tileno].packet[cstr_info->packno];
-                                info_PK->disto += layer->disto;
-                                if (cstr_info->D_max < info_PK->disto) {
-                                        cstr_info->D_max = info_PK->disto;
-                                }
-                        }
+            if (layer->len > length) {
+                return OPJ_FALSE;
+            }
+
+            memcpy(c, layer->data, layer->len);
+            cblk->numpasses += layer->numpasses;
+            c += layer->len;
+            length -= layer->len;
 
-                        ++cblk;
-                        /* INDEX >> */
+            /* << INDEX */
+            if (cstr_info && cstr_info->index_write) {
+                opj_packet_info_t *info_PK = &cstr_info->tile[tileno].packet[cstr_info->packno];
+                info_PK->disto += layer->disto;
+                if (cstr_info->D_max < info_PK->disto) {
+                    cstr_info->D_max = info_PK->disto;
                 }
-                ++band;
+            }
+
+            ++cblk;
+            /* INDEX >> */
         }
+        ++band;
+    }
 
-        assert( c >= dest );
-        * p_data_written += (OPJ_UINT32)(c - dest);
+    assert(c >= dest);
+    * p_data_written += (OPJ_UINT32)(c - dest);
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_t2_skip_packet( opj_t2_t* p_t2,
-                                    opj_tcd_tile_t *p_tile,
-                                    opj_tcp_t *p_tcp,
-                                    opj_pi_iterator_t *p_pi,
-                                    OPJ_BYTE *p_src,
-                                    OPJ_UINT32 * p_data_read,
-                                    OPJ_UINT32 p_max_length,
-                                    opj_packet_info_t *p_pack_info,
-                                    opj_event_mgr_t *p_manager)
+static OPJ_BOOL opj_t2_skip_packet(opj_t2_t* p_t2,
+                                   opj_tcd_tile_t *p_tile,
+                                   opj_tcp_t *p_tcp,
+                                   opj_pi_iterator_t *p_pi,
+                                   OPJ_BYTE *p_src,
+                                   OPJ_UINT32 * p_data_read,
+                                   OPJ_UINT32 p_max_length,
+                                   opj_packet_info_t *p_pack_info,
+                                   opj_event_mgr_t *p_manager)
 {
-        OPJ_BOOL l_read_data;
-        OPJ_UINT32 l_nb_bytes_read = 0;
-        OPJ_UINT32 l_nb_total_bytes_read = 0;
+    OPJ_BOOL l_read_data;
+    OPJ_UINT32 l_nb_bytes_read = 0;
+    OPJ_UINT32 l_nb_total_bytes_read = 0;
 
-        *p_data_read = 0;
+    *p_data_read = 0;
 
-        if (! opj_t2_read_packet_header(p_t2,p_tile,p_tcp,p_pi,&l_read_data,p_src,&l_nb_bytes_read,p_max_length,p_pack_info, p_manager)) {
-                return OPJ_FALSE;
-        }
-
-        p_src += l_nb_bytes_read;
-        l_nb_total_bytes_read += l_nb_bytes_read;
-        p_max_length -= l_nb_bytes_read;
+    if (! opj_t2_read_packet_header(p_t2, p_tile, p_tcp, p_pi, &l_read_data, p_src,
+                                    &l_nb_bytes_read, p_max_length, p_pack_info, p_manager)) {
+        return OPJ_FALSE;
+    }
 
-        /* we should read data for the packet */
-        if (l_read_data) {
-                l_nb_bytes_read = 0;
+    p_src += l_nb_bytes_read;
+    l_nb_total_bytes_read += l_nb_bytes_read;
+    p_max_length -= l_nb_bytes_read;
 
-                if (! opj_t2_skip_packet_data(p_t2,p_tile,p_pi,&l_nb_bytes_read,p_max_length,p_pack_info, p_manager)) {
-                        return OPJ_FALSE;
-                }
+    /* we should read data for the packet */
+    if (l_read_data) {
+        l_nb_bytes_read = 0;
 
-                l_nb_total_bytes_read += l_nb_bytes_read;
+        if (! opj_t2_skip_packet_data(p_t2, p_tile, p_pi, &l_nb_bytes_read,
+                                      p_max_length, p_pack_info, p_manager)) {
+            return OPJ_FALSE;
         }
-        *p_data_read = l_nb_total_bytes_read;
 
-        return OPJ_TRUE;
+        l_nb_total_bytes_read += l_nb_bytes_read;
+    }
+    *p_data_read = l_nb_total_bytes_read;
+
+    return OPJ_TRUE;
 }
 
 
-static OPJ_BOOL opj_t2_read_packet_header( opj_t2_t* p_t2,
-                                    opj_tcd_tile_t *p_tile,
-                                    opj_tcp_t *p_tcp,
-                                    opj_pi_iterator_t *p_pi,
-                                    OPJ_BOOL * p_is_data_present,
-                                    OPJ_BYTE *p_src_data,
-                                    OPJ_UINT32 * p_data_read,
-                                    OPJ_UINT32 p_max_length,
-                                    opj_packet_info_t *p_pack_info,
-                                    opj_event_mgr_t *p_manager)
+static OPJ_BOOL opj_t2_read_packet_header(opj_t2_t* p_t2,
+        opj_tcd_tile_t *p_tile,
+        opj_tcp_t *p_tcp,
+        opj_pi_iterator_t *p_pi,
+        OPJ_BOOL * p_is_data_present,
+        OPJ_BYTE *p_src_data,
+        OPJ_UINT32 * p_data_read,
+        OPJ_UINT32 p_max_length,
+        opj_packet_info_t *p_pack_info,
+        opj_event_mgr_t *p_manager)
 
 {
-        /* loop */
-        OPJ_UINT32 bandno, cblkno;
-        OPJ_UINT32 l_nb_code_blocks;
-        OPJ_UINT32 l_remaining_length;
-        OPJ_UINT32 l_header_length;
-        OPJ_UINT32 * l_modified_length_ptr = 00;
-        OPJ_BYTE *l_current_data = p_src_data;
-        opj_cp_t *l_cp = p_t2->cp;
-        opj_bio_t *l_bio = 00;  /* BIO component */
-        opj_tcd_band_t *l_band = 00;
-        opj_tcd_cblk_dec_t* l_cblk = 00;
-        opj_tcd_resolution_t* l_res = &p_tile->comps[p_pi->compno].resolutions[p_pi->resno];
-
-        OPJ_BYTE *l_header_data = 00;
-        OPJ_BYTE **l_header_data_start = 00;
-
-        OPJ_UINT32 l_present;
-
-        if (p_pi->layno == 0) {
-                l_band = l_res->bands;
-
-                /* reset tagtrees */
-                for (bandno = 0; bandno < l_res->numbands; ++bandno) {
-                        if ( ! ((l_band->x1-l_band->x0 == 0)||(l_band->y1-l_band->y0 == 0)) ) {
-                                opj_tcd_precinct_t *l_prc = &l_band->precincts[p_pi->precno];
-                                if (!(p_pi->precno < (l_band->precincts_data_size / sizeof(opj_tcd_precinct_t)))) {
-                                        opj_event_msg(p_manager, EVT_ERROR, "Invalid precinct\n");
-                                        return OPJ_FALSE;
-                                }
-                                                                                                       
-                                                                                                       
-                                opj_tgt_reset(l_prc->incltree);
-                                opj_tgt_reset(l_prc->imsbtree);
-                                l_cblk = l_prc->cblks.dec;
-
-                                l_nb_code_blocks = l_prc->cw * l_prc->ch;
-                                for (cblkno = 0; cblkno < l_nb_code_blocks; ++cblkno) {
-                                        l_cblk->numsegs = 0;
-                                        l_cblk->real_num_segs = 0;
-                                        ++l_cblk;
-                                }
-                        }
+    /* loop */
+    OPJ_UINT32 bandno, cblkno;
+    OPJ_UINT32 l_nb_code_blocks;
+    OPJ_UINT32 l_remaining_length;
+    OPJ_UINT32 l_header_length;
+    OPJ_UINT32 * l_modified_length_ptr = 00;
+    OPJ_BYTE *l_current_data = p_src_data;
+    opj_cp_t *l_cp = p_t2->cp;
+    opj_bio_t *l_bio = 00;  /* BIO component */
+    opj_tcd_band_t *l_band = 00;
+    opj_tcd_cblk_dec_t* l_cblk = 00;
+    opj_tcd_resolution_t* l_res =
+        &p_tile->comps[p_pi->compno].resolutions[p_pi->resno];
+
+    OPJ_BYTE *l_header_data = 00;
+    OPJ_BYTE **l_header_data_start = 00;
+
+    OPJ_UINT32 l_present;
+
+    if (p_pi->layno == 0) {
+        l_band = l_res->bands;
 
-                        ++l_band;
+        /* reset tagtrees */
+        for (bandno = 0; bandno < l_res->numbands; ++bandno) {
+            if (!((l_band->x1 - l_band->x0 == 0) || (l_band->y1 - l_band->y0 == 0))) {
+                opj_tcd_precinct_t *l_prc = &l_band->precincts[p_pi->precno];
+                if (!(p_pi->precno < (l_band->precincts_data_size / sizeof(
+                                          opj_tcd_precinct_t)))) {
+                    opj_event_msg(p_manager, EVT_ERROR, "Invalid precinct\n");
+                    return OPJ_FALSE;
                 }
-        }
 
-        /* SOP markers */
 
-        if (p_tcp->csty & J2K_CP_CSTY_SOP) {
-                if (p_max_length < 6) {
-                                                                                               opj_event_msg(p_manager, EVT_WARNING, "Not enough space for expected SOP marker\n");
-                } else if ((*l_current_data) != 0xff || (*(l_current_data + 1) != 0x91)) {
-                        opj_event_msg(p_manager, EVT_WARNING, "Expected SOP marker\n");
-                } else {
-                        l_current_data += 6;
-                }
-
-                /** TODO : check the Nsop value */
-        }
+                opj_tgt_reset(l_prc->incltree);
+                opj_tgt_reset(l_prc->imsbtree);
+                l_cblk = l_prc->cblks.dec;
 
-        /*
-        When the marker PPT/PPM is used the packet header are store in PPT/PPM marker
-        This part deal with this caracteristic
-        step 1: Read packet header in the saved structure
-        step 2: Return to codestream for decoding
-        */
+                l_nb_code_blocks = l_prc->cw * l_prc->ch;
+                for (cblkno = 0; cblkno < l_nb_code_blocks; ++cblkno) {
+                    l_cblk->numsegs = 0;
+                    l_cblk->real_num_segs = 0;
+                    ++l_cblk;
+                }
+            }
 
-        l_bio = opj_bio_create();
-        if (! l_bio) {
-                return OPJ_FALSE;
+            ++l_band;
         }
+    }
 
-        if (l_cp->ppm == 1) { /* PPM */
-                l_header_data_start = &l_cp->ppm_data;
-                l_header_data = *l_header_data_start;
-                l_modified_length_ptr = &(l_cp->ppm_len);
+    /* SOP markers */
 
+    if (p_tcp->csty & J2K_CP_CSTY_SOP) {
+        if (p_max_length < 6) {
+            opj_event_msg(p_manager, EVT_WARNING,
+                          "Not enough space for expected SOP marker\n");
+        } else if ((*l_current_data) != 0xff || (*(l_current_data + 1) != 0x91)) {
+            opj_event_msg(p_manager, EVT_WARNING, "Expected SOP marker\n");
+        } else {
+            l_current_data += 6;
         }
-        else if (p_tcp->ppt == 1) { /* PPT */
-                l_header_data_start = &(p_tcp->ppt_data);
-                l_header_data = *l_header_data_start;
-                l_modified_length_ptr = &(p_tcp->ppt_len);
-        }
-        else {  /* Normal Case */
-                l_header_data_start = &(l_current_data);
-                l_header_data = *l_header_data_start;
-                l_remaining_length = (OPJ_UINT32)(p_src_data+p_max_length-l_header_data);
-                l_modified_length_ptr = &(l_remaining_length);
-        }
-
-        opj_bio_init_dec(l_bio, l_header_data,*l_modified_length_ptr);
-
-        l_present = opj_bio_read(l_bio, 1);
-        JAS_FPRINTF(stderr, "present=%d \n", l_present );
-        if (!l_present) {
-            /* TODO MSD: no test to control the output of this function*/
-                opj_bio_inalign(l_bio);
-                l_header_data += opj_bio_numbytes(l_bio);
-                opj_bio_destroy(l_bio);
-
-                /* EPH markers */
-                if (p_tcp->csty & J2K_CP_CSTY_EPH) {
-                        if ((*l_modified_length_ptr - (OPJ_UINT32)(l_header_data - *l_header_data_start)) < 2U) {
-                                opj_event_msg(p_manager, EVT_WARNING, "Not enough space for expected EPH marker\n");
-                        } else if ((*l_header_data) != 0xff || (*(l_header_data + 1) != 0x92)) {
-                                opj_event_msg(p_manager, EVT_WARNING, "Expected EPH marker\n");
-                        } else {
-                                l_header_data += 2;
-                        }
-                }
 
-                l_header_length = (OPJ_UINT32)(l_header_data - *l_header_data_start);
-                *l_modified_length_ptr -= l_header_length;
-                *l_header_data_start += l_header_length;
+        /** TODO : check the Nsop value */
+    }
 
-                /* << INDEX */
-                /* End of packet header position. Currently only represents the distance to start of packet
-                   Will be updated later by incrementing with packet start value */
-                if (p_pack_info) {
-                        p_pack_info->end_ph_pos = (OPJ_INT32)(l_current_data - p_src_data);
-                }
-                /* INDEX >> */
+    /*
+    When the marker PPT/PPM is used the packet header are store in PPT/PPM marker
+    This part deal with this caracteristic
+    step 1: Read packet header in the saved structure
+    step 2: Return to codestream for decoding
+    */
 
-                * p_is_data_present = OPJ_FALSE;
-                *p_data_read = (OPJ_UINT32)(l_current_data - p_src_data);
-                return OPJ_TRUE;
-        }
+    l_bio = opj_bio_create();
+    if (! l_bio) {
+        return OPJ_FALSE;
+    }
 
-        l_band = l_res->bands;
-        for (bandno = 0; bandno < l_res->numbands; ++bandno) {
-                opj_tcd_precinct_t *l_prc = &(l_band->precincts[p_pi->precno]);
+    if (l_cp->ppm == 1) { /* PPM */
+        l_header_data_start = &l_cp->ppm_data;
+        l_header_data = *l_header_data_start;
+        l_modified_length_ptr = &(l_cp->ppm_len);
+
+    } else if (p_tcp->ppt == 1) { /* PPT */
+        l_header_data_start = &(p_tcp->ppt_data);
+        l_header_data = *l_header_data_start;
+        l_modified_length_ptr = &(p_tcp->ppt_len);
+    } else { /* Normal Case */
+        l_header_data_start = &(l_current_data);
+        l_header_data = *l_header_data_start;
+        l_remaining_length = (OPJ_UINT32)(p_src_data + p_max_length - l_header_data);
+        l_modified_length_ptr = &(l_remaining_length);
+    }
 
-                if ((l_band->x1-l_band->x0 == 0)||(l_band->y1-l_band->y0 == 0)) {
-                        ++l_band;
-                        continue;
-                }
+    opj_bio_init_dec(l_bio, l_header_data, *l_modified_length_ptr);
 
-                l_nb_code_blocks = l_prc->cw * l_prc->ch;
-                l_cblk = l_prc->cblks.dec;
-                for (cblkno = 0; cblkno < l_nb_code_blocks; cblkno++) {
-                        OPJ_UINT32 l_included,l_increment, l_segno;
-                        OPJ_INT32 n;
-
-                        /* if cblk not yet included before --> inclusion tagtree */
-                        if (!l_cblk->numsegs) {
-                                l_included = opj_tgt_decode(l_bio, l_prc->incltree, cblkno, (OPJ_INT32)(p_pi->layno + 1));
-                                /* else one bit */
-                        }
-                        else {
-                                l_included = opj_bio_read(l_bio, 1);
-                        }
+    l_present = opj_bio_read(l_bio, 1);
+    JAS_FPRINTF(stderr, "present=%d \n", l_present);
+    if (!l_present) {
+        /* TODO MSD: no test to control the output of this function*/
+        opj_bio_inalign(l_bio);
+        l_header_data += opj_bio_numbytes(l_bio);
+        opj_bio_destroy(l_bio);
 
-                        /* if cblk not included */
-                        if (!l_included) {
-                                l_cblk->numnewpasses = 0;
-                                ++l_cblk;
-                                JAS_FPRINTF(stderr, "included=%d \n", l_included);
-                                continue;
-                        }
+        /* EPH markers */
+        if (p_tcp->csty & J2K_CP_CSTY_EPH) {
+            if ((*l_modified_length_ptr - (OPJ_UINT32)(l_header_data -
+                    *l_header_data_start)) < 2U) {
+                opj_event_msg(p_manager, EVT_WARNING,
+                              "Not enough space for expected EPH marker\n");
+            } else if ((*l_header_data) != 0xff || (*(l_header_data + 1) != 0x92)) {
+                opj_event_msg(p_manager, EVT_WARNING, "Expected EPH marker\n");
+            } else {
+                l_header_data += 2;
+            }
+        }
 
-                        /* if cblk not yet included --> zero-bitplane tagtree */
-                        if (!l_cblk->numsegs) {
-                                OPJ_UINT32 i = 0;
+        l_header_length = (OPJ_UINT32)(l_header_data - *l_header_data_start);
+        *l_modified_length_ptr -= l_header_length;
+        *l_header_data_start += l_header_length;
 
-                                while (!opj_tgt_decode(l_bio, l_prc->imsbtree, cblkno, (OPJ_INT32)i)) {
-                                        ++i;
-                                }
+        /* << INDEX */
+        /* End of packet header position. Currently only represents the distance to start of packet
+           Will be updated later by incrementing with packet start value */
+        if (p_pack_info) {
+            p_pack_info->end_ph_pos = (OPJ_INT32)(l_current_data - p_src_data);
+        }
+        /* INDEX >> */
 
-                                l_cblk->numbps = (OPJ_UINT32)l_band->numbps + 1 - i;
-                                l_cblk->numlenbits = 3;
-                        }
+        * p_is_data_present = OPJ_FALSE;
+        *p_data_read = (OPJ_UINT32)(l_current_data - p_src_data);
+        return OPJ_TRUE;
+    }
 
-                        /* number of coding passes */
-                        l_cblk->numnewpasses = opj_t2_getnumpasses(l_bio);
-                        l_increment = opj_t2_getcommacode(l_bio);
+    l_band = l_res->bands;
+    for (bandno = 0; bandno < l_res->numbands; ++bandno) {
+        opj_tcd_precinct_t *l_prc = &(l_band->precincts[p_pi->precno]);
 
-                        /* length indicator increment */
-                        l_cblk->numlenbits += l_increment;
-                        l_segno = 0;
+        if ((l_band->x1 - l_band->x0 == 0) || (l_band->y1 - l_band->y0 == 0)) {
+            ++l_band;
+            continue;
+        }
 
-                        if (!l_cblk->numsegs) {
-                                if (! opj_t2_init_seg(l_cblk, l_segno, p_tcp->tccps[p_pi->compno].cblksty, 1)) {
-                                        opj_bio_destroy(l_bio);
-                                        return OPJ_FALSE;
-                                }
-                        }
-                        else {
-                                l_segno = l_cblk->numsegs - 1;
-                                if (l_cblk->segs[l_segno].numpasses == l_cblk->segs[l_segno].maxpasses) {
-                                        ++l_segno;
-                                        if (! opj_t2_init_seg(l_cblk, l_segno, p_tcp->tccps[p_pi->compno].cblksty, 0)) {
-                                                opj_bio_destroy(l_bio);
-                                                return OPJ_FALSE;
-                                        }
-                                }
-                        }
-                        n = (OPJ_INT32)l_cblk->numnewpasses;
+        l_nb_code_blocks = l_prc->cw * l_prc->ch;
+        l_cblk = l_prc->cblks.dec;
+        for (cblkno = 0; cblkno < l_nb_code_blocks; cblkno++) {
+            OPJ_UINT32 l_included, l_increment, l_segno;
+            OPJ_INT32 n;
+
+            /* if cblk not yet included before --> inclusion tagtree */
+            if (!l_cblk->numsegs) {
+                l_included = opj_tgt_decode(l_bio, l_prc->incltree, cblkno,
+                                            (OPJ_INT32)(p_pi->layno + 1));
+                /* else one bit */
+            } else {
+                l_included = opj_bio_read(l_bio, 1);
+            }
+
+            /* if cblk not included */
+            if (!l_included) {
+                l_cblk->numnewpasses = 0;
+                ++l_cblk;
+                JAS_FPRINTF(stderr, "included=%d \n", l_included);
+                continue;
+            }
+
+            /* if cblk not yet included --> zero-bitplane tagtree */
+            if (!l_cblk->numsegs) {
+                OPJ_UINT32 i = 0;
+
+                while (!opj_tgt_decode(l_bio, l_prc->imsbtree, cblkno, (OPJ_INT32)i)) {
+                    ++i;
+                }
 
-                        do {
-                                l_cblk->segs[l_segno].numnewpasses = (OPJ_UINT32)opj_int_min((OPJ_INT32)(l_cblk->segs[l_segno].maxpasses - l_cblk->segs[l_segno].numpasses), n);
-                                l_cblk->segs[l_segno].newlen = opj_bio_read(l_bio, l_cblk->numlenbits + opj_uint_floorlog2(l_cblk->segs[l_segno].numnewpasses));
-                                        JAS_FPRINTF(stderr, "included=%d numnewpasses=%d increment=%d len=%d \n", l_included, l_cblk->segs[l_segno].numnewpasses, l_increment, l_cblk->segs[l_segno].newlen );
+                l_cblk->numbps = (OPJ_UINT32)l_band->numbps + 1 - i;
+                l_cblk->numlenbits = 3;
+            }
 
-                                n -= (OPJ_INT32)l_cblk->segs[l_segno].numnewpasses;
-                                if (n > 0) {
-                                        ++l_segno;
+            /* number of coding passes */
+            l_cblk->numnewpasses = opj_t2_getnumpasses(l_bio);
+            l_increment = opj_t2_getcommacode(l_bio);
 
-                                        if (! opj_t2_init_seg(l_cblk, l_segno, p_tcp->tccps[p_pi->compno].cblksty, 0)) {
-                                                opj_bio_destroy(l_bio);
-                                                return OPJ_FALSE;
-                                        }
-                                }
-                        } while (n > 0);
+            /* length indicator increment */
+            l_cblk->numlenbits += l_increment;
+            l_segno = 0;
 
-                        ++l_cblk;
+            if (!l_cblk->numsegs) {
+                if (! opj_t2_init_seg(l_cblk, l_segno, p_tcp->tccps[p_pi->compno].cblksty, 1)) {
+                    opj_bio_destroy(l_bio);
+                    return OPJ_FALSE;
+                }
+            } else {
+                l_segno = l_cblk->numsegs - 1;
+                if (l_cblk->segs[l_segno].numpasses == l_cblk->segs[l_segno].maxpasses) {
+                    ++l_segno;
+                    if (! opj_t2_init_seg(l_cblk, l_segno, p_tcp->tccps[p_pi->compno].cblksty, 0)) {
+                        opj_bio_destroy(l_bio);
+                        return OPJ_FALSE;
+                    }
+                }
+            }
+            n = (OPJ_INT32)l_cblk->numnewpasses;
+
+            do {
+                l_cblk->segs[l_segno].numnewpasses = (OPJ_UINT32)opj_int_min((OPJ_INT32)(
+                        l_cblk->segs[l_segno].maxpasses - l_cblk->segs[l_segno].numpasses), n);
+                l_cblk->segs[l_segno].newlen = opj_bio_read(l_bio,
+                                               l_cblk->numlenbits + opj_uint_floorlog2(l_cblk->segs[l_segno].numnewpasses));
+                JAS_FPRINTF(stderr, "included=%d numnewpasses=%d increment=%d len=%d \n",
+                            l_included, l_cblk->segs[l_segno].numnewpasses, l_increment,
+                            l_cblk->segs[l_segno].newlen);
+
+                n -= (OPJ_INT32)l_cblk->segs[l_segno].numnewpasses;
+                if (n > 0) {
+                    ++l_segno;
+
+                    if (! opj_t2_init_seg(l_cblk, l_segno, p_tcp->tccps[p_pi->compno].cblksty, 0)) {
+                        opj_bio_destroy(l_bio);
+                        return OPJ_FALSE;
+                    }
                 }
+            } while (n > 0);
 
-                ++l_band;
+            ++l_cblk;
         }
 
-        if (!opj_bio_inalign(l_bio)) {
-                opj_bio_destroy(l_bio);
-                return OPJ_FALSE;
-        }
+        ++l_band;
+    }
 
-        l_header_data += opj_bio_numbytes(l_bio);
+    if (!opj_bio_inalign(l_bio)) {
         opj_bio_destroy(l_bio);
+        return OPJ_FALSE;
+    }
 
-        /* EPH markers */
-        if (p_tcp->csty & J2K_CP_CSTY_EPH) {
-                if ((*l_modified_length_ptr - (OPJ_UINT32)(l_header_data - *l_header_data_start)) < 2U) {
-                        opj_event_msg(p_manager, EVT_WARNING, "Not enough space for expected EPH marker\n");
-                } else if ((*l_header_data) != 0xff || (*(l_header_data + 1) != 0x92)) {
-                        opj_event_msg(p_manager, EVT_WARNING, "Expected EPH marker\n");
-                } else {
-                        l_header_data += 2;
-                }
+    l_header_data += opj_bio_numbytes(l_bio);
+    opj_bio_destroy(l_bio);
+
+    /* EPH markers */
+    if (p_tcp->csty & J2K_CP_CSTY_EPH) {
+        if ((*l_modified_length_ptr - (OPJ_UINT32)(l_header_data -
+                *l_header_data_start)) < 2U) {
+            opj_event_msg(p_manager, EVT_WARNING,
+                          "Not enough space for expected EPH marker\n");
+        } else if ((*l_header_data) != 0xff || (*(l_header_data + 1) != 0x92)) {
+            opj_event_msg(p_manager, EVT_WARNING, "Expected EPH marker\n");
+        } else {
+            l_header_data += 2;
         }
+    }
 
-        l_header_length = (OPJ_UINT32)(l_header_data - *l_header_data_start);
-        JAS_FPRINTF( stderr, "hdrlen=%d \n", l_header_length );
-        JAS_FPRINTF( stderr, "packet body\n");
-        *l_modified_length_ptr -= l_header_length;
-        *l_header_data_start += l_header_length;
-
-        /* << INDEX */
-        /* End of packet header position. Currently only represents the distance to start of packet
-         Will be updated later by incrementing with packet start value */
-        if (p_pack_info) {
-                p_pack_info->end_ph_pos = (OPJ_INT32)(l_current_data - p_src_data);
-        }
-        /* INDEX >> */
+    l_header_length = (OPJ_UINT32)(l_header_data - *l_header_data_start);
+    JAS_FPRINTF(stderr, "hdrlen=%d \n", l_header_length);
+    JAS_FPRINTF(stderr, "packet body\n");
+    *l_modified_length_ptr -= l_header_length;
+    *l_header_data_start += l_header_length;
+
+    /* << INDEX */
+    /* End of packet header position. Currently only represents the distance to start of packet
+     Will be updated later by incrementing with packet start value */
+    if (p_pack_info) {
+        p_pack_info->end_ph_pos = (OPJ_INT32)(l_current_data - p_src_data);
+    }
+    /* INDEX >> */
 
-        *p_is_data_present = OPJ_TRUE;
-        *p_data_read = (OPJ_UINT32)(l_current_data - p_src_data);
+    *p_is_data_present = OPJ_TRUE;
+    *p_data_read = (OPJ_UINT32)(l_current_data - p_src_data);
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_t2_read_packet_data(   opj_t2_t* p_t2,
-                                    opj_tcd_tile_t *p_tile,
-                                    opj_pi_iterator_t *p_pi,
-                                    OPJ_BYTE *p_src_data,
-                                    OPJ_UINT32 * p_data_read,
-                                    OPJ_UINT32 p_max_length,
-                                    opj_packet_info_t *pack_info,
-                                    opj_event_mgr_t* p_manager)
+static OPJ_BOOL opj_t2_read_packet_data(opj_t2_t* p_t2,
+                                        opj_tcd_tile_t *p_tile,
+                                        opj_pi_iterator_t *p_pi,
+                                        OPJ_BYTE *p_src_data,
+                                        OPJ_UINT32 * p_data_read,
+                                        OPJ_UINT32 p_max_length,
+                                        opj_packet_info_t *pack_info,
+                                        opj_event_mgr_t* p_manager)
 {
-        OPJ_UINT32 bandno, cblkno;
-        OPJ_UINT32 l_nb_code_blocks;
-        OPJ_BYTE *l_current_data = p_src_data;
-        opj_tcd_band_t *l_band = 00;
-        opj_tcd_cblk_dec_t* l_cblk = 00;
-        opj_tcd_resolution_t* l_res = &p_tile->comps[p_pi->compno].resolutions[p_pi->resno];
+    OPJ_UINT32 bandno, cblkno;
+    OPJ_UINT32 l_nb_code_blocks;
+    OPJ_BYTE *l_current_data = p_src_data;
+    opj_tcd_band_t *l_band = 00;
+    opj_tcd_cblk_dec_t* l_cblk = 00;
+    opj_tcd_resolution_t* l_res =
+        &p_tile->comps[p_pi->compno].resolutions[p_pi->resno];
+
+    OPJ_ARG_NOT_USED(p_t2);
+    OPJ_ARG_NOT_USED(pack_info);
+
+    l_band = l_res->bands;
+    for (bandno = 0; bandno < l_res->numbands; ++bandno) {
+        opj_tcd_precinct_t *l_prc = &l_band->precincts[p_pi->precno];
+
+        if ((l_band->x1 - l_band->x0 == 0) || (l_band->y1 - l_band->y0 == 0)) {
+            ++l_band;
+            continue;
+        }
 
-        OPJ_ARG_NOT_USED(p_t2);
-        OPJ_ARG_NOT_USED(pack_info);
+        l_nb_code_blocks = l_prc->cw * l_prc->ch;
+        l_cblk = l_prc->cblks.dec;
 
-        l_band = l_res->bands;
-        for (bandno = 0; bandno < l_res->numbands; ++bandno) {
-                opj_tcd_precinct_t *l_prc = &l_band->precincts[p_pi->precno];
+        for (cblkno = 0; cblkno < l_nb_code_blocks; ++cblkno) {
+            opj_tcd_seg_t *l_seg = 00;
+
+            if (!l_cblk->numnewpasses) {
+                /* nothing to do */
+                ++l_cblk;
+                continue;
+            }
 
-                if ((l_band->x1-l_band->x0 == 0)||(l_band->y1-l_band->y0 == 0)) {
-                        ++l_band;
-                        continue;
+            if (!l_cblk->numsegs) {
+                l_seg = l_cblk->segs;
+                ++l_cblk->numsegs;
+                l_cblk->data_current_size = 0;
+            } else {
+                l_seg = &l_cblk->segs[l_cblk->numsegs - 1];
+
+                if (l_seg->numpasses == l_seg->maxpasses) {
+                    ++l_seg;
+                    ++l_cblk->numsegs;
+                }
+            }
+
+            do {
+                /* Check possible overflow (on l_current_data only, assumes input args already checked) then size */
+                if ((((OPJ_SIZE_T)l_current_data + (OPJ_SIZE_T)l_seg->newlen) <
+                        (OPJ_SIZE_T)l_current_data) ||
+                        (l_current_data + l_seg->newlen > p_src_data + p_max_length)) {
+                    opj_event_msg(p_manager, EVT_ERROR,
+                                  "read: segment too long (%d) with max (%d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n",
+                                  l_seg->newlen, p_max_length, cblkno, p_pi->precno, bandno, p_pi->resno,
+                                  p_pi->compno);
+                    return OPJ_FALSE;
                 }
 
-                l_nb_code_blocks = l_prc->cw * l_prc->ch;
-                l_cblk = l_prc->cblks.dec;
+#ifdef USE_JPWL
+                /* we need here a j2k handle to verify if making a check to
+                the validity of cblocks parameters is selected from user (-W) */
+
+                /* let's check that we are not exceeding */
+                if ((l_cblk->len + l_seg->newlen) > 8192) {
+                    opj_event_msg(p_manager, EVT_WARNING,
+                                  "JPWL: segment too long (%d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n",
+                                  l_seg->newlen, cblkno, p_pi->precno, bandno, p_pi->resno, p_pi->compno);
+                    if (!JPWL_ASSUME) {
+                        opj_event_msg(p_manager, EVT_ERROR, "JPWL: giving up\n");
+                        return OPJ_FALSE;
+                    }
+                    l_seg->newlen = 8192 - l_cblk->len;
+                    opj_event_msg(p_manager, EVT_WARNING, "      - truncating segment to %d\n",
+                                  l_seg->newlen);
+                    break;
+                };
 
-                for (cblkno = 0; cblkno < l_nb_code_blocks; ++cblkno) {
-                        opj_tcd_seg_t *l_seg = 00;
+#endif /* USE_JPWL */
+                /* Check possible overflow on size */
+                if ((l_cblk->data_current_size + l_seg->newlen) < l_cblk->data_current_size) {
+                    opj_event_msg(p_manager, EVT_ERROR,
+                                  "read: segment too long (%d) with current size (%d > %d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n",
+                                  l_seg->newlen, l_cblk->data_current_size, 0xFFFFFFFF - l_seg->newlen, cblkno,
+                                  p_pi->precno, bandno, p_pi->resno, p_pi->compno);
+                    return OPJ_FALSE;
+                }
+                /* Check if the cblk->data have allocated enough memory */
+                if ((l_cblk->data_current_size + l_seg->newlen) > l_cblk->data_max_size) {
+                    OPJ_BYTE* new_cblk_data = (OPJ_BYTE*) opj_realloc(l_cblk->data,
+                                              l_cblk->data_current_size + l_seg->newlen);
+                    if (! new_cblk_data) {
+                        opj_free(l_cblk->data);
+                        l_cblk->data = NULL;
+                        l_cblk->data_max_size = 0;
+                        /* opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to realloc code block cata!\n"); */
+                        return OPJ_FALSE;
+                    }
+                    l_cblk->data_max_size = l_cblk->data_current_size + l_seg->newlen;
+                    l_cblk->data = new_cblk_data;
+                }
 
-                        if (!l_cblk->numnewpasses) {
-                                /* nothing to do */
-                                ++l_cblk;
-                                continue;
-                        }
+                memcpy(l_cblk->data + l_cblk->data_current_size, l_current_data, l_seg->newlen);
 
-                        if (!l_cblk->numsegs) {
-                                l_seg = l_cblk->segs;
-                                ++l_cblk->numsegs;
-                                l_cblk->data_current_size = 0;
-                        }
-                        else {
-                                l_seg = &l_cblk->segs[l_cblk->numsegs - 1];
+                if (l_seg->numpasses == 0) {
+                    l_seg->data = &l_cblk->data;
+                    l_seg->dataindex = l_cblk->data_current_size;
+                }
 
-                                if (l_seg->numpasses == l_seg->maxpasses) {
-                                        ++l_seg;
-                                        ++l_cblk->numsegs;
-                                }
-                        }
+                l_current_data += l_seg->newlen;
+                l_seg->numpasses += l_seg->numnewpasses;
+                l_cblk->numnewpasses -= l_seg->numnewpasses;
 
-                        do {
-                                /* Check possible overflow (on l_current_data only, assumes input args already checked) then size */
-                                if ((((OPJ_SIZE_T)l_current_data + (OPJ_SIZE_T)l_seg->newlen) < (OPJ_SIZE_T)l_current_data) || (l_current_data + l_seg->newlen > p_src_data + p_max_length)) {
-                                        opj_event_msg(p_manager, EVT_ERROR, "read: segment too long (%d) with max (%d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n",
-                                                                                                                                                                                               l_seg->newlen, p_max_length, cblkno, p_pi->precno, bandno, p_pi->resno, p_pi->compno);
-                                        return OPJ_FALSE;
-                                }
+                l_seg->real_num_passes = l_seg->numpasses;
+                l_cblk->data_current_size += l_seg->newlen;
+                l_seg->len += l_seg->newlen;
 
-#ifdef USE_JPWL
-                        /* we need here a j2k handle to verify if making a check to
-                        the validity of cblocks parameters is selected from user (-W) */
-
-                                /* let's check that we are not exceeding */
-                                if ((l_cblk->len + l_seg->newlen) > 8192) {
-                                        opj_event_msg(p_manager, EVT_WARNING,
-                                                "JPWL: segment too long (%d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n",
-                                                l_seg->newlen, cblkno, p_pi->precno, bandno, p_pi->resno, p_pi->compno);
-                                        if (!JPWL_ASSUME) {
-                                                opj_event_msg(p_manager, EVT_ERROR, "JPWL: giving up\n");
-                                                return OPJ_FALSE;
-                                        }
-                                        l_seg->newlen = 8192 - l_cblk->len;
-                                        opj_event_msg(p_manager, EVT_WARNING, "      - truncating segment to %d\n", l_seg->newlen);
-                                        break;
-                                };
+                if (l_cblk->numnewpasses > 0) {
+                    ++l_seg;
+                    ++l_cblk->numsegs;
+                }
+            } while (l_cblk->numnewpasses > 0);
 
-#endif /* USE_JPWL */
-                                /* Check possible overflow on size */
-                                if ((l_cblk->data_current_size + l_seg->newlen) < l_cblk->data_current_size) {
-                                        opj_event_msg(p_manager, EVT_ERROR, "read: segment too long (%d) with current size (%d > %d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n",
-                                                l_seg->newlen, l_cblk->data_current_size, 0xFFFFFFFF - l_seg->newlen, cblkno, p_pi->precno, bandno, p_pi->resno, p_pi->compno);
-                                        return OPJ_FALSE;
-                                }
-                                /* Check if the cblk->data have allocated enough memory */
-                                if ((l_cblk->data_current_size + l_seg->newlen) > l_cblk->data_max_size) {
-                                    OPJ_BYTE* new_cblk_data = (OPJ_BYTE*) opj_realloc(l_cblk->data, l_cblk->data_current_size + l_seg->newlen);
-                                    if(! new_cblk_data) {
-                                        opj_free(l_cblk->data);
-                                        l_cblk->data = NULL;
-                                        l_cblk->data_max_size = 0;
-                                        /* opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to realloc code block cata!\n"); */
-                                        return OPJ_FALSE;
-                                    }
-                                    l_cblk->data_max_size = l_cblk->data_current_size + l_seg->newlen;
-                                    l_cblk->data = new_cblk_data;
-                                }
-                               
-                                memcpy(l_cblk->data + l_cblk->data_current_size, l_current_data, l_seg->newlen);
-
-                                if (l_seg->numpasses == 0) {
-                                        l_seg->data = &l_cblk->data;
-                                        l_seg->dataindex = l_cblk->data_current_size;
-                                }
-
-                                l_current_data += l_seg->newlen;
-                                l_seg->numpasses += l_seg->numnewpasses;
-                                l_cblk->numnewpasses -= l_seg->numnewpasses;
-
-                                l_seg->real_num_passes = l_seg->numpasses;
-                                l_cblk->data_current_size += l_seg->newlen;
-                                l_seg->len += l_seg->newlen;
-
-                                if (l_cblk->numnewpasses > 0) {
-                                        ++l_seg;
-                                        ++l_cblk->numsegs;
-                                }
-                        } while (l_cblk->numnewpasses > 0);
-
-                        l_cblk->real_num_segs = l_cblk->numsegs;
-                        ++l_cblk;
-                } /* next code_block */
-
-                ++l_band;
-        }
+            l_cblk->real_num_segs = l_cblk->numsegs;
+            ++l_cblk;
+        } /* next code_block */
+
+        ++l_band;
+    }
 
-        *(p_data_read) = (OPJ_UINT32)(l_current_data - p_src_data);
+    *(p_data_read) = (OPJ_UINT32)(l_current_data - p_src_data);
 
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_t2_skip_packet_data(   opj_t2_t* p_t2,
-                                    opj_tcd_tile_t *p_tile,
-                                    opj_pi_iterator_t *p_pi,
-                                    OPJ_UINT32 * p_data_read,
-                                    OPJ_UINT32 p_max_length,
-                                    opj_packet_info_t *pack_info,
-                                    opj_event_mgr_t *p_manager)
+static OPJ_BOOL opj_t2_skip_packet_data(opj_t2_t* p_t2,
+                                        opj_tcd_tile_t *p_tile,
+                                        opj_pi_iterator_t *p_pi,
+                                        OPJ_UINT32 * p_data_read,
+                                        OPJ_UINT32 p_max_length,
+                                        opj_packet_info_t *pack_info,
+                                        opj_event_mgr_t *p_manager)
 {
-        OPJ_UINT32 bandno, cblkno;
-        OPJ_UINT32 l_nb_code_blocks;
-        opj_tcd_band_t *l_band = 00;
-        opj_tcd_cblk_dec_t* l_cblk = 00;
-        opj_tcd_resolution_t* l_res = &p_tile->comps[p_pi->compno].resolutions[p_pi->resno];
+    OPJ_UINT32 bandno, cblkno;
+    OPJ_UINT32 l_nb_code_blocks;
+    opj_tcd_band_t *l_band = 00;
+    opj_tcd_cblk_dec_t* l_cblk = 00;
+    opj_tcd_resolution_t* l_res =
+        &p_tile->comps[p_pi->compno].resolutions[p_pi->resno];
 
-        OPJ_ARG_NOT_USED(p_t2);
-        OPJ_ARG_NOT_USED(pack_info);
-
-        *p_data_read = 0;
-        l_band = l_res->bands;
+    OPJ_ARG_NOT_USED(p_t2);
+    OPJ_ARG_NOT_USED(pack_info);
 
-        for (bandno = 0; bandno < l_res->numbands; ++bandno) {
-                opj_tcd_precinct_t *l_prc = &l_band->precincts[p_pi->precno];
+    *p_data_read = 0;
+    l_band = l_res->bands;
 
-                if ((l_band->x1-l_band->x0 == 0)||(l_band->y1-l_band->y0 == 0)) {
-                        ++l_band;
-                        continue;
-                }
+    for (bandno = 0; bandno < l_res->numbands; ++bandno) {
+        opj_tcd_precinct_t *l_prc = &l_band->precincts[p_pi->precno];
 
-                l_nb_code_blocks = l_prc->cw * l_prc->ch;
-                l_cblk = l_prc->cblks.dec;
+        if ((l_band->x1 - l_band->x0 == 0) || (l_band->y1 - l_band->y0 == 0)) {
+            ++l_band;
+            continue;
+        }
 
-                for (cblkno = 0; cblkno < l_nb_code_blocks; ++cblkno) {
-                        opj_tcd_seg_t *l_seg = 00;
+        l_nb_code_blocks = l_prc->cw * l_prc->ch;
+        l_cblk = l_prc->cblks.dec;
 
-                        if (!l_cblk->numnewpasses) {
-                                /* nothing to do */
-                                ++l_cblk;
-                                continue;
-                        }
+        for (cblkno = 0; cblkno < l_nb_code_blocks; ++cblkno) {
+            opj_tcd_seg_t *l_seg = 00;
 
-                        if (!l_cblk->numsegs) {
-                                l_seg = l_cblk->segs;
-                                ++l_cblk->numsegs;
-                                l_cblk->data_current_size = 0;
-                        }
-                        else {
-                                l_seg = &l_cblk->segs[l_cblk->numsegs - 1];
+            if (!l_cblk->numnewpasses) {
+                /* nothing to do */
+                ++l_cblk;
+                continue;
+            }
 
-                                if (l_seg->numpasses == l_seg->maxpasses) {
-                                        ++l_seg;
-                                        ++l_cblk->numsegs;
-                                }
-                        }
+            if (!l_cblk->numsegs) {
+                l_seg = l_cblk->segs;
+                ++l_cblk->numsegs;
+                l_cblk->data_current_size = 0;
+            } else {
+                l_seg = &l_cblk->segs[l_cblk->numsegs - 1];
 
-                        do {
-                                /* Check possible overflow then size */
-                                if (((*p_data_read + l_seg->newlen) < (*p_data_read)) || ((*p_data_read + l_seg->newlen) > p_max_length)) {
-                                        opj_event_msg(p_manager, EVT_ERROR, "skip: segment too long (%d) with max (%d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n",
-                                                l_seg->newlen, p_max_length, cblkno, p_pi->precno, bandno, p_pi->resno, p_pi->compno);
-                                        return OPJ_FALSE;
-                                }
+                if (l_seg->numpasses == l_seg->maxpasses) {
+                    ++l_seg;
+                    ++l_cblk->numsegs;
+                }
+            }
+
+            do {
+                /* Check possible overflow then size */
+                if (((*p_data_read + l_seg->newlen) < (*p_data_read)) ||
+                        ((*p_data_read + l_seg->newlen) > p_max_length)) {
+                    opj_event_msg(p_manager, EVT_ERROR,
+                                  "skip: segment too long (%d) with max (%d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n",
+                                  l_seg->newlen, p_max_length, cblkno, p_pi->precno, bandno, p_pi->resno,
+                                  p_pi->compno);
+                    return OPJ_FALSE;
+                }
 
 #ifdef USE_JPWL
-                        /* we need here a j2k handle to verify if making a check to
-                        the validity of cblocks parameters is selected from user (-W) */
-
-                                /* let's check that we are not exceeding */
-                                if ((l_cblk->len + l_seg->newlen) > 8192) {
-                                        opj_event_msg(p_manager, EVT_WARNING,
-                                                "JPWL: segment too long (%d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n",
-                                                l_seg->newlen, cblkno, p_pi->precno, bandno, p_pi->resno, p_pi->compno);
-                                        if (!JPWL_ASSUME) {
-                                                opj_event_msg(p_manager, EVT_ERROR, "JPWL: giving up\n");
-                                                return -999;
-                                        }
-                                        l_seg->newlen = 8192 - l_cblk->len;
-                                        opj_event_msg(p_manager, EVT_WARNING, "      - truncating segment to %d\n", l_seg->newlen);
-                                        break;
-                                };
+                /* we need here a j2k handle to verify if making a check to
+                the validity of cblocks parameters is selected from user (-W) */
+
+                /* let's check that we are not exceeding */
+                if ((l_cblk->len + l_seg->newlen) > 8192) {
+                    opj_event_msg(p_manager, EVT_WARNING,
+                                  "JPWL: segment too long (%d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n",
+                                  l_seg->newlen, cblkno, p_pi->precno, bandno, p_pi->resno, p_pi->compno);
+                    if (!JPWL_ASSUME) {
+                        opj_event_msg(p_manager, EVT_ERROR, "JPWL: giving up\n");
+                        return -999;
+                    }
+                    l_seg->newlen = 8192 - l_cblk->len;
+                    opj_event_msg(p_manager, EVT_WARNING, "      - truncating segment to %d\n",
+                                  l_seg->newlen);
+                    break;
+                };
 
 #endif /* USE_JPWL */
-                                        JAS_FPRINTF(stderr, "p_data_read (%d) newlen (%d) \n", *p_data_read, l_seg->newlen );
-                                *(p_data_read) += l_seg->newlen;
-
-                                l_seg->numpasses += l_seg->numnewpasses;
-                                l_cblk->numnewpasses -= l_seg->numnewpasses;
-                                if (l_cblk->numnewpasses > 0)
-                                {
-                                        ++l_seg;
-                                        ++l_cblk->numsegs;
-                                }
-                        } while (l_cblk->numnewpasses > 0);
-
-                        ++l_cblk;
+                JAS_FPRINTF(stderr, "p_data_read (%d) newlen (%d) \n", *p_data_read,
+                            l_seg->newlen);
+                *(p_data_read) += l_seg->newlen;
+
+                l_seg->numpasses += l_seg->numnewpasses;
+                l_cblk->numnewpasses -= l_seg->numnewpasses;
+                if (l_cblk->numnewpasses > 0) {
+                    ++l_seg;
+                    ++l_cblk->numsegs;
                 }
+            } while (l_cblk->numnewpasses > 0);
 
-                ++l_band;
+            ++l_cblk;
         }
 
-        return OPJ_TRUE;
+        ++l_band;
+    }
+
+    return OPJ_TRUE;
 }
 
 
-static OPJ_BOOL opj_t2_init_seg(   opj_tcd_cblk_dec_t* cblk,
-                            OPJ_UINT32 index, 
-                            OPJ_UINT32 cblksty, 
-                            OPJ_UINT32 first)
+static OPJ_BOOL opj_t2_init_seg(opj_tcd_cblk_dec_t* cblk,
+                                OPJ_UINT32 index,
+                                OPJ_UINT32 cblksty,
+                                OPJ_UINT32 first)
 {
-        opj_tcd_seg_t* seg = 00;
-        OPJ_UINT32 l_nb_segs = index + 1;
-
-        if (l_nb_segs > cblk->m_current_max_segs) {
-                opj_tcd_seg_t* new_segs;
-                cblk->m_current_max_segs += OPJ_J2K_DEFAULT_NB_SEGS;
-
-                new_segs = (opj_tcd_seg_t*) opj_realloc(cblk->segs, cblk->m_current_max_segs * sizeof(opj_tcd_seg_t));
-                if(! new_segs) {
-                        opj_free(cblk->segs);
-                        cblk->segs = NULL;
-                        cblk->m_current_max_segs = 0;
-                        /* opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to initialize segment %d\n", l_nb_segs); */
-                        return OPJ_FALSE;
-                }
-                cblk->segs = new_segs;
+    opj_tcd_seg_t* seg = 00;
+    OPJ_UINT32 l_nb_segs = index + 1;
+
+    if (l_nb_segs > cblk->m_current_max_segs) {
+        opj_tcd_seg_t* new_segs;
+        cblk->m_current_max_segs += OPJ_J2K_DEFAULT_NB_SEGS;
+
+        new_segs = (opj_tcd_seg_t*) opj_realloc(cblk->segs,
+                                                cblk->m_current_max_segs * sizeof(opj_tcd_seg_t));
+        if (! new_segs) {
+            opj_free(cblk->segs);
+            cblk->segs = NULL;
+            cblk->m_current_max_segs = 0;
+            /* opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to initialize segment %d\n", l_nb_segs); */
+            return OPJ_FALSE;
         }
+        cblk->segs = new_segs;
+    }
 
-        seg = &cblk->segs[index];
-        memset(seg,0,sizeof(opj_tcd_seg_t));
+    seg = &cblk->segs[index];
+    memset(seg, 0, sizeof(opj_tcd_seg_t));
 
-        if (cblksty & J2K_CCP_CBLKSTY_TERMALL) {
-                seg->maxpasses = 1;
-        }
-        else if (cblksty & J2K_CCP_CBLKSTY_LAZY) {
-                if (first) {
-                        seg->maxpasses = 10;
-                } else {
-                        seg->maxpasses = (((seg - 1)->maxpasses == 1) || ((seg - 1)->maxpasses == 10)) ? 2 : 1;
-                }
+    if (cblksty & J2K_CCP_CBLKSTY_TERMALL) {
+        seg->maxpasses = 1;
+    } else if (cblksty & J2K_CCP_CBLKSTY_LAZY) {
+        if (first) {
+            seg->maxpasses = 10;
         } else {
-                seg->maxpasses = 109;
+            seg->maxpasses = (((seg - 1)->maxpasses == 1) ||
+                              ((seg - 1)->maxpasses == 10)) ? 2 : 1;
         }
+    } else {
+        seg->maxpasses = 109;
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
index 18e14480b0eeeaed8079aeaed51aefdd494130c8..f1e1c1c35e23752853e2264e3634cbe4423da90f 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,11 +8,11 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * Copyright (c) 2006-2007, Parvatha Elangovan
- * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR 
+ * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR
  * Copyright (c) 2012, CS Systemes d'Information, France
  * All rights reserved.
  *
 /* ----------------------------------------------------------------------- */
 
 /* TODO MSD: */
-#ifdef TODO_MSD 
-void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_image_t * img) {
-        int tileno, compno, resno, bandno, precno;/*, cblkno;*/
-
-        fprintf(fd, "image {\n");
-        fprintf(fd, "  tw=%d, th=%d x0=%d x1=%d y0=%d y1=%d\n", 
-                img->tw, img->th, tcd->image->x0, tcd->image->x1, tcd->image->y0, tcd->image->y1);
-
-        for (tileno = 0; tileno < img->th * img->tw; tileno++) {
-                opj_tcd_tile_t *tile = &tcd->tcd_image->tiles[tileno];
-                fprintf(fd, "  tile {\n");
-                fprintf(fd, "    x0=%d, y0=%d, x1=%d, y1=%d, numcomps=%d\n",
-                        tile->x0, tile->y0, tile->x1, tile->y1, tile->numcomps);
-                for (compno = 0; compno < tile->numcomps; compno++) {
-                        opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-                        fprintf(fd, "    tilec {\n");
+#ifdef TODO_MSD
+void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_image_t * img)
+{
+    int tileno, compno, resno, bandno, precno;/*, cblkno;*/
+
+    fprintf(fd, "image {\n");
+    fprintf(fd, "  tw=%d, th=%d x0=%d x1=%d y0=%d y1=%d\n",
+            img->tw, img->th, tcd->image->x0, tcd->image->x1, tcd->image->y0,
+            tcd->image->y1);
+
+    for (tileno = 0; tileno < img->th * img->tw; tileno++) {
+        opj_tcd_tile_t *tile = &tcd->tcd_image->tiles[tileno];
+        fprintf(fd, "  tile {\n");
+        fprintf(fd, "    x0=%d, y0=%d, x1=%d, y1=%d, numcomps=%d\n",
+                tile->x0, tile->y0, tile->x1, tile->y1, tile->numcomps);
+        for (compno = 0; compno < tile->numcomps; compno++) {
+            opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+            fprintf(fd, "    tilec {\n");
+            fprintf(fd,
+                    "      x0=%d, y0=%d, x1=%d, y1=%d, numresolutions=%d\n",
+                    tilec->x0, tilec->y0, tilec->x1, tilec->y1, tilec->numresolutions);
+            for (resno = 0; resno < tilec->numresolutions; resno++) {
+                opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+                fprintf(fd, "\n   res {\n");
+                fprintf(fd,
+                        "          x0=%d, y0=%d, x1=%d, y1=%d, pw=%d, ph=%d, numbands=%d\n",
+                        res->x0, res->y0, res->x1, res->y1, res->pw, res->ph, res->numbands);
+                for (bandno = 0; bandno < res->numbands; bandno++) {
+                    opj_tcd_band_t *band = &res->bands[bandno];
+                    fprintf(fd, "        band {\n");
+                    fprintf(fd,
+                            "          x0=%d, y0=%d, x1=%d, y1=%d, stepsize=%f, numbps=%d\n",
+                            band->x0, band->y0, band->x1, band->y1, band->stepsize, band->numbps);
+                    for (precno = 0; precno < res->pw * res->ph; precno++) {
+                        opj_tcd_precinct_t *prec = &band->precincts[precno];
+                        fprintf(fd, "          prec {\n");
                         fprintf(fd,
-                                "      x0=%d, y0=%d, x1=%d, y1=%d, numresolutions=%d\n",
-                                tilec->x0, tilec->y0, tilec->x1, tilec->y1, tilec->numresolutions);
-                        for (resno = 0; resno < tilec->numresolutions; resno++) {
-                                opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-                                fprintf(fd, "\n   res {\n");
+                                "            x0=%d, y0=%d, x1=%d, y1=%d, cw=%d, ch=%d\n",
+                                prec->x0, prec->y0, prec->x1, prec->y1, prec->cw, prec->ch);
+                        /*
+                        for (cblkno = 0; cblkno < prec->cw * prec->ch; cblkno++) {
+                                opj_tcd_cblk_t *cblk = &prec->cblks[cblkno];
+                                fprintf(fd, "            cblk {\n");
                                 fprintf(fd,
-                                        "          x0=%d, y0=%d, x1=%d, y1=%d, pw=%d, ph=%d, numbands=%d\n",
-                                        res->x0, res->y0, res->x1, res->y1, res->pw, res->ph, res->numbands);
-                                for (bandno = 0; bandno < res->numbands; bandno++) {
-                                        opj_tcd_band_t *band = &res->bands[bandno];
-                                        fprintf(fd, "        band {\n");
-                                        fprintf(fd,
-                                                "          x0=%d, y0=%d, x1=%d, y1=%d, stepsize=%f, numbps=%d\n",
-                                                band->x0, band->y0, band->x1, band->y1, band->stepsize, band->numbps);
-                                        for (precno = 0; precno < res->pw * res->ph; precno++) {
-                                                opj_tcd_precinct_t *prec = &band->precincts[precno];
-                                                fprintf(fd, "          prec {\n");
-                                                fprintf(fd,
-                                                        "            x0=%d, y0=%d, x1=%d, y1=%d, cw=%d, ch=%d\n",
-                                                        prec->x0, prec->y0, prec->x1, prec->y1, prec->cw, prec->ch);
-                                                /*
-                                                for (cblkno = 0; cblkno < prec->cw * prec->ch; cblkno++) {
-                                                        opj_tcd_cblk_t *cblk = &prec->cblks[cblkno];
-                                                        fprintf(fd, "            cblk {\n");
-                                                        fprintf(fd,
-                                                                "              x0=%d, y0=%d, x1=%d, y1=%d\n",
-                                                                cblk->x0, cblk->y0, cblk->x1, cblk->y1);
-                                                        fprintf(fd, "            }\n");
-                                                }
-                                                */
-                                                fprintf(fd, "          }\n");
-                                        }
-                                        fprintf(fd, "        }\n");
-                                }
-                                fprintf(fd, "      }\n");
+                                        "              x0=%d, y0=%d, x1=%d, y1=%d\n",
+                                        cblk->x0, cblk->y0, cblk->x1, cblk->y1);
+                                fprintf(fd, "            }\n");
                         }
-                        fprintf(fd, "    }\n");
+                        */
+                        fprintf(fd, "          }\n");
+                    }
+                    fprintf(fd, "        }\n");
                 }
-                fprintf(fd, "  }\n");
+                fprintf(fd, "      }\n");
+            }
+            fprintf(fd, "    }\n");
         }
-        fprintf(fd, "}\n");
+        fprintf(fd, "  }\n");
+    }
+    fprintf(fd, "}\n");
 }
 #endif
 
 /**
  * Initializes tile coding/decoding
  */
-static INLINE OPJ_BOOL opj_tcd_init_tile(opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no, OPJ_BOOL isEncoder, OPJ_FLOAT32 fraction, OPJ_SIZE_T sizeof_block, opj_event_mgr_t* manager);
+static INLINE OPJ_BOOL opj_tcd_init_tile(opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no,
+        OPJ_BOOL isEncoder, OPJ_FLOAT32 fraction, OPJ_SIZE_T sizeof_block,
+        opj_event_mgr_t* manager);
 
 /**
 * Allocates memory for a decoding code block.
 */
-static OPJ_BOOL opj_tcd_code_block_dec_allocate (opj_tcd_cblk_dec_t * p_code_block);
+static OPJ_BOOL opj_tcd_code_block_dec_allocate(opj_tcd_cblk_dec_t *
+        p_code_block);
 
 /**
  * Deallocates the decoding data of the given precinct.
  */
-static void opj_tcd_code_block_dec_deallocate (opj_tcd_precinct_t * p_precinct);
+static void opj_tcd_code_block_dec_deallocate(opj_tcd_precinct_t * p_precinct);
 
 /**
  * Allocates memory for an encoding code block (but not data).
  */
-static OPJ_BOOL opj_tcd_code_block_enc_allocate (opj_tcd_cblk_enc_t * p_code_block);
+static OPJ_BOOL opj_tcd_code_block_enc_allocate(opj_tcd_cblk_enc_t *
+        p_code_block);
 
 /**
  * Allocates data for an encoding code block
  */
-static OPJ_BOOL opj_tcd_code_block_enc_allocate_data (opj_tcd_cblk_enc_t * p_code_block);
+static OPJ_BOOL opj_tcd_code_block_enc_allocate_data(opj_tcd_cblk_enc_t *
+        p_code_block);
 
 /**
  * Deallocates the encoding data of the given precinct.
  */
-static void opj_tcd_code_block_enc_deallocate (opj_tcd_precinct_t * p_precinct);
+static void opj_tcd_code_block_enc_deallocate(opj_tcd_precinct_t * p_precinct);
 
 
 /**
@@ -142,40 +149,41 @@ Free the memory allocated for encoding
 static void opj_tcd_free_tile(opj_tcd_t *tcd);
 
 
-static OPJ_BOOL opj_tcd_t2_decode ( opj_tcd_t *p_tcd,
-                                    OPJ_BYTE * p_src_data,
-                                    OPJ_UINT32 * p_data_read,
-                                    OPJ_UINT32 p_max_src_size,
-                                    opj_codestream_index_t *p_cstr_index,
-                                    opj_event_mgr_t *p_manager);
+static OPJ_BOOL opj_tcd_t2_decode(opj_tcd_t *p_tcd,
+                                  OPJ_BYTE * p_src_data,
+                                  OPJ_UINT32 * p_data_read,
+                                  OPJ_UINT32 p_max_src_size,
+                                  opj_codestream_index_t *p_cstr_index,
+                                  opj_event_mgr_t *p_manager);
 
-static OPJ_BOOL opj_tcd_t1_decode (opj_tcd_t *p_tcd);
+static OPJ_BOOL opj_tcd_t1_decode(opj_tcd_t *p_tcd);
 
-static OPJ_BOOL opj_tcd_dwt_decode (opj_tcd_t *p_tcd);
+static OPJ_BOOL opj_tcd_dwt_decode(opj_tcd_t *p_tcd);
 
-static OPJ_BOOL opj_tcd_mct_decode (opj_tcd_t *p_tcd, opj_event_mgr_t *p_manager);
+static OPJ_BOOL opj_tcd_mct_decode(opj_tcd_t *p_tcd,
+                                   opj_event_mgr_t *p_manager);
 
-static OPJ_BOOL opj_tcd_dc_level_shift_decode (opj_tcd_t *p_tcd);
+static OPJ_BOOL opj_tcd_dc_level_shift_decode(opj_tcd_t *p_tcd);
 
 
-static OPJ_BOOL opj_tcd_dc_level_shift_encode ( opj_tcd_t *p_tcd );
+static OPJ_BOOL opj_tcd_dc_level_shift_encode(opj_tcd_t *p_tcd);
 
-static OPJ_BOOL opj_tcd_mct_encode ( opj_tcd_t *p_tcd );
+static OPJ_BOOL opj_tcd_mct_encode(opj_tcd_t *p_tcd);
 
-static OPJ_BOOL opj_tcd_dwt_encode ( opj_tcd_t *p_tcd );
+static OPJ_BOOL opj_tcd_dwt_encode(opj_tcd_t *p_tcd);
 
-static OPJ_BOOL opj_tcd_t1_encode ( opj_tcd_t *p_tcd );
+static OPJ_BOOL opj_tcd_t1_encode(opj_tcd_t *p_tcd);
 
-static OPJ_BOOL opj_tcd_t2_encode (     opj_tcd_t *p_tcd,
-                                                                    OPJ_BYTE * p_dest_data,
-                                                                    OPJ_UINT32 * p_data_written,
-                                                                    OPJ_UINT32 p_max_dest_size,
-                                                                    opj_codestream_info_t *p_cstr_info );
+static OPJ_BOOL opj_tcd_t2_encode(opj_tcd_t *p_tcd,
+                                  OPJ_BYTE * p_dest_data,
+                                  OPJ_UINT32 * p_data_written,
+                                  OPJ_UINT32 p_max_dest_size,
+                                  opj_codestream_info_t *p_cstr_info);
 
-static OPJ_BOOL opj_tcd_rate_allocate_encode(   opj_tcd_t *p_tcd,
-                                                                                        OPJ_BYTE * p_dest_data,
-                                                                                        OPJ_UINT32 p_max_dest_size,
-                                                                                        opj_codestream_info_t *p_cstr_info );
+static OPJ_BOOL opj_tcd_rate_allocate_encode(opj_tcd_t *p_tcd,
+        OPJ_BYTE * p_dest_data,
+        OPJ_UINT32 p_max_dest_size,
+        opj_codestream_info_t *p_cstr_info);
 
 /* ----------------------------------------------------------------------- */
 
@@ -184,1277 +192,1345 @@ Create a new TCD handle
 */
 opj_tcd_t* opj_tcd_create(OPJ_BOOL p_is_decoder)
 {
-        opj_tcd_t *l_tcd = 00;
+    opj_tcd_t *l_tcd = 00;
 
-        /* create the tcd structure */
-        l_tcd = (opj_tcd_t*) opj_calloc(1,sizeof(opj_tcd_t));
-        if (!l_tcd) {
-                return 00;
-        }
+    /* create the tcd structure */
+    l_tcd = (opj_tcd_t*) opj_calloc(1, sizeof(opj_tcd_t));
+    if (!l_tcd) {
+        return 00;
+    }
 
-        l_tcd->m_is_decoder = p_is_decoder ? 1 : 0;
+    l_tcd->m_is_decoder = p_is_decoder ? 1 : 0;
 
-        l_tcd->tcd_image = (opj_tcd_image_t*)opj_calloc(1,sizeof(opj_tcd_image_t));
-        if (!l_tcd->tcd_image) {
-                opj_free(l_tcd);
-                return 00;
-        }
+    l_tcd->tcd_image = (opj_tcd_image_t*)opj_calloc(1, sizeof(opj_tcd_image_t));
+    if (!l_tcd->tcd_image) {
+        opj_free(l_tcd);
+        return 00;
+    }
 
-        return l_tcd;
+    return l_tcd;
 }
 
 
 /* ----------------------------------------------------------------------- */
 
-void opj_tcd_rateallocate_fixed(opj_tcd_t *tcd) {
-        OPJ_UINT32 layno;
+void opj_tcd_rateallocate_fixed(opj_tcd_t *tcd)
+{
+    OPJ_UINT32 layno;
 
-        for (layno = 0; layno < tcd->tcp->numlayers; layno++) {
-                opj_tcd_makelayer_fixed(tcd, layno, 1);
-        }
+    for (layno = 0; layno < tcd->tcp->numlayers; layno++) {
+        opj_tcd_makelayer_fixed(tcd, layno, 1);
+    }
 }
 
 
-void opj_tcd_makelayer( opj_tcd_t *tcd,
-                                                OPJ_UINT32 layno,
-                                                OPJ_FLOAT64 thresh,
-                                                OPJ_UINT32 final)
+void opj_tcd_makelayer(opj_tcd_t *tcd,
+                       OPJ_UINT32 layno,
+                       OPJ_FLOAT64 thresh,
+                       OPJ_UINT32 final)
 {
-        OPJ_UINT32 compno, resno, bandno, precno, cblkno;
-        OPJ_UINT32 passno;
-
-        opj_tcd_tile_t *tcd_tile = tcd->tcd_image->tiles;
-
-        tcd_tile->distolayer[layno] = 0;        /* fixed_quality */
-
-        for (compno = 0; compno < tcd_tile->numcomps; compno++) {
-                opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
-
-                for (resno = 0; resno < tilec->numresolutions; resno++) {
-                        opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-
-                        for (bandno = 0; bandno < res->numbands; bandno++) {
-                                opj_tcd_band_t *band = &res->bands[bandno];
-
-                                for (precno = 0; precno < res->pw * res->ph; precno++) {
-                                        opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-                                        for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                                                opj_tcd_cblk_enc_t *cblk = &prc->cblks.enc[cblkno];
-                                                opj_tcd_layer_t *layer = &cblk->layers[layno];
-                                                OPJ_UINT32 n;
-
-                                                if (layno == 0) {
-                                                        cblk->numpassesinlayers = 0;
-                                                }
-
-                                                n = cblk->numpassesinlayers;
-
-                                                for (passno = cblk->numpassesinlayers; passno < cblk->totalpasses; passno++) {
-                                                        OPJ_UINT32 dr;
-                                                        OPJ_FLOAT64 dd;
-                                                        opj_tcd_pass_t *pass = &cblk->passes[passno];
-
-                                                        if (n == 0) {
-                                                                dr = pass->rate;
-                                                                dd = pass->distortiondec;
-                                                        } else {
-                                                                dr = pass->rate - cblk->passes[n - 1].rate;
-                                                                dd = pass->distortiondec - cblk->passes[n - 1].distortiondec;
-                                                        }
-
-                                                        if (!dr) {
-                                                                if (dd != 0)
-                                                                        n = passno + 1;
-                                                                continue;
-                                                        }
-                                                        if (thresh - (dd / dr) < DBL_EPSILON) /* do not rely on float equality, check with DBL_EPSILON margin */
-                                                                n = passno + 1;
-                                                }
-
-                                                layer->numpasses = n - cblk->numpassesinlayers;
-
-                                                if (!layer->numpasses) {
-                                                        layer->disto = 0;
-                                                        continue;
-                                                }
-
-                                                if (cblk->numpassesinlayers == 0) {
-                                                        layer->len = cblk->passes[n - 1].rate;
-                                                        layer->data = cblk->data;
-                                                        layer->disto = cblk->passes[n - 1].distortiondec;
-                                                } else {
-                                                        layer->len = cblk->passes[n - 1].rate - cblk->passes[cblk->numpassesinlayers - 1].rate;
-                                                        layer->data = cblk->data + cblk->passes[cblk->numpassesinlayers - 1].rate;
-                                                        layer->disto = cblk->passes[n - 1].distortiondec - cblk->passes[cblk->numpassesinlayers - 1].distortiondec;
-                                                }
-
-                                                tcd_tile->distolayer[layno] += layer->disto;    /* fixed_quality */
-
-                                                if (final)
-                                                        cblk->numpassesinlayers = n;
-                                        }
-                                }
+    OPJ_UINT32 compno, resno, bandno, precno, cblkno;
+    OPJ_UINT32 passno;
+
+    opj_tcd_tile_t *tcd_tile = tcd->tcd_image->tiles;
+
+    tcd_tile->distolayer[layno] = 0;        /* fixed_quality */
+
+    for (compno = 0; compno < tcd_tile->numcomps; compno++) {
+        opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
+
+        for (resno = 0; resno < tilec->numresolutions; resno++) {
+            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+
+            for (bandno = 0; bandno < res->numbands; bandno++) {
+                opj_tcd_band_t *band = &res->bands[bandno];
+
+                for (precno = 0; precno < res->pw * res->ph; precno++) {
+                    opj_tcd_precinct_t *prc = &band->precincts[precno];
+
+                    for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
+                        opj_tcd_cblk_enc_t *cblk = &prc->cblks.enc[cblkno];
+                        opj_tcd_layer_t *layer = &cblk->layers[layno];
+                        OPJ_UINT32 n;
+
+                        if (layno == 0) {
+                            cblk->numpassesinlayers = 0;
                         }
-                }
-        }
-}
 
-void opj_tcd_makelayer_fixed(opj_tcd_t *tcd, OPJ_UINT32 layno, OPJ_UINT32 final) {
-        OPJ_UINT32 compno, resno, bandno, precno, cblkno;
-        OPJ_INT32 value;                        /*, matrice[tcd_tcp->numlayers][tcd_tile->comps[0].numresolutions][3]; */
-        OPJ_INT32 matrice[10][10][3];
-        OPJ_UINT32 i, j, k;
-
-        opj_cp_t *cp = tcd->cp;
-        opj_tcd_tile_t *tcd_tile = tcd->tcd_image->tiles;
-        opj_tcp_t *tcd_tcp = tcd->tcp;
-
-        for (compno = 0; compno < tcd_tile->numcomps; compno++) {
-                opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
-
-                for (i = 0; i < tcd_tcp->numlayers; i++) {
-                        for (j = 0; j < tilec->numresolutions; j++) {
-                                for (k = 0; k < 3; k++) {
-                                        matrice[i][j][k] =
-                                                (OPJ_INT32) ((OPJ_FLOAT32)cp->m_specific_param.m_enc.m_matrice[i * tilec->numresolutions * 3 + j * 3 + k]
-                                                * (OPJ_FLOAT32) (tcd->image->comps[compno].prec / 16.0));
+                        n = cblk->numpassesinlayers;
+
+                        for (passno = cblk->numpassesinlayers; passno < cblk->totalpasses; passno++) {
+                            OPJ_UINT32 dr;
+                            OPJ_FLOAT64 dd;
+                            opj_tcd_pass_t *pass = &cblk->passes[passno];
+
+                            if (n == 0) {
+                                dr = pass->rate;
+                                dd = pass->distortiondec;
+                            } else {
+                                dr = pass->rate - cblk->passes[n - 1].rate;
+                                dd = pass->distortiondec - cblk->passes[n - 1].distortiondec;
+                            }
+
+                            if (!dr) {
+                                if (dd != 0) {
+                                    n = passno + 1;
                                 }
+                                continue;
+                            }
+                            if (thresh - (dd / dr) <
+                                    DBL_EPSILON) { /* do not rely on float equality, check with DBL_EPSILON margin */
+                                n = passno + 1;
+                            }
                         }
-                }
 
-                for (resno = 0; resno < tilec->numresolutions; resno++) {
-                        opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-
-                        for (bandno = 0; bandno < res->numbands; bandno++) {
-                                opj_tcd_band_t *band = &res->bands[bandno];
-
-                                for (precno = 0; precno < res->pw * res->ph; precno++) {
-                                        opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-                                        for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                                                opj_tcd_cblk_enc_t *cblk = &prc->cblks.enc[cblkno];
-                                                opj_tcd_layer_t *layer = &cblk->layers[layno];
-                                                OPJ_UINT32 n;
-                                                OPJ_INT32 imsb = (OPJ_INT32)(tcd->image->comps[compno].prec - cblk->numbps); /* number of bit-plan equal to zero */
-
-                                                /* Correction of the matrix of coefficient to include the IMSB information */
-                                                if (layno == 0) {
-                                                        value = matrice[layno][resno][bandno];
-                                                        if (imsb >= value) {
-                                                                value = 0;
-                                                        } else {
-                                                                value -= imsb;
-                                                        }
-                                                } else {
-                                                        value = matrice[layno][resno][bandno] - matrice[layno - 1][resno][bandno];
-                                                        if (imsb >= matrice[layno - 1][resno][bandno]) {
-                                                                value -= (imsb - matrice[layno - 1][resno][bandno]);
-                                                                if (value < 0) {
-                                                                        value = 0;
-                                                                }
-                                                        }
-                                                }
-
-                                                if (layno == 0) {
-                                                        cblk->numpassesinlayers = 0;
-                                                }
-
-                                                n = cblk->numpassesinlayers;
-                                                if (cblk->numpassesinlayers == 0) {
-                                                        if (value != 0) {
-                                                                n = 3 * (OPJ_UINT32)value - 2 + cblk->numpassesinlayers;
-                                                        } else {
-                                                                n = cblk->numpassesinlayers;
-                                                        }
-                                                } else {
-                                                        n = 3 * (OPJ_UINT32)value + cblk->numpassesinlayers;
-                                                }
-
-                                                layer->numpasses = n - cblk->numpassesinlayers;
-
-                                                if (!layer->numpasses)
-                                                        continue;
-
-                                                if (cblk->numpassesinlayers == 0) {
-                                                        layer->len = cblk->passes[n - 1].rate;
-                                                        layer->data = cblk->data;
-                                                } else {
-                                                        layer->len = cblk->passes[n - 1].rate - cblk->passes[cblk->numpassesinlayers - 1].rate;
-                                                        layer->data = cblk->data + cblk->passes[cblk->numpassesinlayers - 1].rate;
-                                                }
-
-                                                if (final)
-                                                        cblk->numpassesinlayers = n;
-                                        }
-                                }
+                        layer->numpasses = n - cblk->numpassesinlayers;
+
+                        if (!layer->numpasses) {
+                            layer->disto = 0;
+                            continue;
                         }
+
+                        if (cblk->numpassesinlayers == 0) {
+                            layer->len = cblk->passes[n - 1].rate;
+                            layer->data = cblk->data;
+                            layer->disto = cblk->passes[n - 1].distortiondec;
+                        } else {
+                            layer->len = cblk->passes[n - 1].rate - cblk->passes[cblk->numpassesinlayers -
+                                         1].rate;
+                            layer->data = cblk->data + cblk->passes[cblk->numpassesinlayers - 1].rate;
+                            layer->disto = cblk->passes[n - 1].distortiondec -
+                                           cblk->passes[cblk->numpassesinlayers - 1].distortiondec;
+                        }
+
+                        tcd_tile->distolayer[layno] += layer->disto;    /* fixed_quality */
+
+                        if (final) {
+                            cblk->numpassesinlayers = n;
+                        }
+                    }
                 }
+            }
         }
+    }
 }
 
-OPJ_BOOL opj_tcd_rateallocate(  opj_tcd_t *tcd,
-                                                                OPJ_BYTE *dest,
-                                                                OPJ_UINT32 * p_data_written,
-                                                                OPJ_UINT32 len,
-                                                                opj_codestream_info_t *cstr_info)
+void opj_tcd_makelayer_fixed(opj_tcd_t *tcd, OPJ_UINT32 layno,
+                             OPJ_UINT32 final)
 {
-        OPJ_UINT32 compno, resno, bandno, precno, cblkno, layno;
-        OPJ_UINT32 passno;
-        OPJ_FLOAT64 min, max;
-        OPJ_FLOAT64 cumdisto[100];      /* fixed_quality */
-        const OPJ_FLOAT64 K = 1;                /* 1.1; fixed_quality */
-        OPJ_FLOAT64 maxSE = 0;
-
-        opj_cp_t *cp = tcd->cp;
-        opj_tcd_tile_t *tcd_tile = tcd->tcd_image->tiles;
-        opj_tcp_t *tcd_tcp = tcd->tcp;
-
-        min = DBL_MAX;
-        max = 0;
-
-        tcd_tile->numpix = 0;           /* fixed_quality */
-
-        for (compno = 0; compno < tcd_tile->numcomps; compno++) {
-                opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
-                tilec->numpix = 0;
-
-                for (resno = 0; resno < tilec->numresolutions; resno++) {
-                        opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-
-                        for (bandno = 0; bandno < res->numbands; bandno++) {
-                                opj_tcd_band_t *band = &res->bands[bandno];
-
-                                for (precno = 0; precno < res->pw * res->ph; precno++) {
-                                        opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-                                        for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                                                opj_tcd_cblk_enc_t *cblk = &prc->cblks.enc[cblkno];
-
-                                                for (passno = 0; passno < cblk->totalpasses; passno++) {
-                                                        opj_tcd_pass_t *pass = &cblk->passes[passno];
-                                                        OPJ_INT32 dr;
-                                                        OPJ_FLOAT64 dd, rdslope;
-
-                                                        if (passno == 0) {
-                                                                dr = (OPJ_INT32)pass->rate;
-                                                                dd = pass->distortiondec;
-                                                        } else {
-                                                                dr = (OPJ_INT32)(pass->rate - cblk->passes[passno - 1].rate);
-                                                                dd = pass->distortiondec - cblk->passes[passno - 1].distortiondec;
-                                                        }
-
-                                                        if (dr == 0) {
-                                                                continue;
-                                                        }
-
-                                                        rdslope = dd / dr;
-                                                        if (rdslope < min) {
-                                                                min = rdslope;
-                                                        }
-
-                                                        if (rdslope > max) {
-                                                                max = rdslope;
-                                                        }
-                                                } /* passno */
-
-                                                /* fixed_quality */
-                                                tcd_tile->numpix += ((cblk->x1 - cblk->x0) * (cblk->y1 - cblk->y0));
-                                                tilec->numpix += ((cblk->x1 - cblk->x0) * (cblk->y1 - cblk->y0));
-                                        } /* cbklno */
-                                } /* precno */
-                        } /* bandno */
-                } /* resno */
-
-                maxSE += (((OPJ_FLOAT64)(1 << tcd->image->comps[compno].prec) - 1.0)
-                        * ((OPJ_FLOAT64)(1 << tcd->image->comps[compno].prec) -1.0))
-                        * ((OPJ_FLOAT64)(tilec->numpix));
-        } /* compno */
-
-        /* index file */
-        if(cstr_info) {
-                opj_tile_info_t *tile_info = &cstr_info->tile[tcd->tcd_tileno];
-                tile_info->numpix = tcd_tile->numpix;
-                tile_info->distotile = tcd_tile->distotile;
-                tile_info->thresh = (OPJ_FLOAT64 *) opj_malloc(tcd_tcp->numlayers * sizeof(OPJ_FLOAT64));
-                if (!tile_info->thresh) {
-                        /* FIXME event manager error callback */
-                        return OPJ_FALSE;
+    OPJ_UINT32 compno, resno, bandno, precno, cblkno;
+    OPJ_INT32 value;                        /*, matrice[tcd_tcp->numlayers][tcd_tile->comps[0].numresolutions][3]; */
+    OPJ_INT32 matrice[10][10][3];
+    OPJ_UINT32 i, j, k;
+
+    opj_cp_t *cp = tcd->cp;
+    opj_tcd_tile_t *tcd_tile = tcd->tcd_image->tiles;
+    opj_tcp_t *tcd_tcp = tcd->tcp;
+
+    for (compno = 0; compno < tcd_tile->numcomps; compno++) {
+        opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
+
+        for (i = 0; i < tcd_tcp->numlayers; i++) {
+            for (j = 0; j < tilec->numresolutions; j++) {
+                for (k = 0; k < 3; k++) {
+                    matrice[i][j][k] =
+                        (OPJ_INT32)((OPJ_FLOAT32)cp->m_specific_param.m_enc.m_matrice[i *
+                                      tilec->numresolutions * 3 + j * 3 + k]
+                                    * (OPJ_FLOAT32)(tcd->image->comps[compno].prec / 16.0));
                 }
+            }
         }
 
-        for (layno = 0; layno < tcd_tcp->numlayers; layno++) {
-                OPJ_FLOAT64 lo = min;
-                OPJ_FLOAT64 hi = max;
-                OPJ_UINT32 maxlen = tcd_tcp->rates[layno] > 0.0f ? opj_uint_min(((OPJ_UINT32) ceil(tcd_tcp->rates[layno])), len) : len;
-                OPJ_FLOAT64 goodthresh = 0;
-                OPJ_FLOAT64 stable_thresh = 0;
-                OPJ_UINT32 i;
-                OPJ_FLOAT64 distotarget;                /* fixed_quality */
-
-                /* fixed_quality */
-                distotarget = tcd_tile->distotile - ((K * maxSE) / pow((OPJ_FLOAT32)10, tcd_tcp->distoratio[layno] / 10));
-
-                /* Don't try to find an optimal threshold but rather take everything not included yet, if
-                  -r xx,yy,zz,0   (disto_alloc == 1 and rates == 0)
-                  -q xx,yy,zz,0   (fixed_quality == 1 and distoratio == 0)
-                  ==> possible to have some lossy layers and the last layer for sure lossless */
-                if ( ((cp->m_specific_param.m_enc.m_disto_alloc==1) && (tcd_tcp->rates[layno]>0.0f)) || ((cp->m_specific_param.m_enc.m_fixed_quality==1) && (tcd_tcp->distoratio[layno]>0.0))) {
-                        opj_t2_t*t2 = opj_t2_create(tcd->image, cp);
-                        OPJ_FLOAT64 thresh = 0;
-
-                        if (t2 == 00) {
-                                return OPJ_FALSE;
+        for (resno = 0; resno < tilec->numresolutions; resno++) {
+            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+
+            for (bandno = 0; bandno < res->numbands; bandno++) {
+                opj_tcd_band_t *band = &res->bands[bandno];
+
+                for (precno = 0; precno < res->pw * res->ph; precno++) {
+                    opj_tcd_precinct_t *prc = &band->precincts[precno];
+
+                    for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
+                        opj_tcd_cblk_enc_t *cblk = &prc->cblks.enc[cblkno];
+                        opj_tcd_layer_t *layer = &cblk->layers[layno];
+                        OPJ_UINT32 n;
+                        OPJ_INT32 imsb = (OPJ_INT32)(tcd->image->comps[compno].prec -
+                                                     cblk->numbps); /* number of bit-plan equal to zero */
+
+                        /* Correction of the matrix of coefficient to include the IMSB information */
+                        if (layno == 0) {
+                            value = matrice[layno][resno][bandno];
+                            if (imsb >= value) {
+                                value = 0;
+                            } else {
+                                value -= imsb;
+                            }
+                        } else {
+                            value = matrice[layno][resno][bandno] - matrice[layno - 1][resno][bandno];
+                            if (imsb >= matrice[layno - 1][resno][bandno]) {
+                                value -= (imsb - matrice[layno - 1][resno][bandno]);
+                                if (value < 0) {
+                                    value = 0;
+                                }
+                            }
                         }
 
-                        for     (i = 0; i < 128; ++i) {
-                                OPJ_FLOAT64 distoachieved = 0;  /* fixed_quality */
-
-                                thresh = (lo + hi) / 2;
-
-                                opj_tcd_makelayer(tcd, layno, thresh, 0);
-
-                                if (cp->m_specific_param.m_enc.m_fixed_quality) {       /* fixed_quality */
-                                        if(OPJ_IS_CINEMA(cp->rsiz)){
-                                                if (! opj_t2_encode_packets(t2,tcd->tcd_tileno, tcd_tile, layno + 1, dest, p_data_written, maxlen, cstr_info,tcd->cur_tp_num,tcd->tp_pos,tcd->cur_pino,THRESH_CALC)) {
-
-                                                        lo = thresh;
-                                                        continue;
-                                                }
-                                                else {
-                                                        distoachieved = layno == 0 ?
-                                                                        tcd_tile->distolayer[0] : cumdisto[layno - 1] + tcd_tile->distolayer[layno];
-
-                                                        if (distoachieved < distotarget) {
-                                                                hi=thresh;
-                                                                stable_thresh = thresh;
-                                                                continue;
-                                                        }else{
-                                                                lo=thresh;
-                                                        }
-                                                }
-                                        }else{
-                                                distoachieved = (layno == 0) ?
-                                                                tcd_tile->distolayer[0] : (cumdisto[layno - 1] + tcd_tile->distolayer[layno]);
-
-                                                if (distoachieved < distotarget) {
-                                                        hi = thresh;
-                                                        stable_thresh = thresh;
-                                                        continue;
-                                                }
-                                                lo = thresh;
-                                        }
-                                } else {
-                                        if (! opj_t2_encode_packets(t2, tcd->tcd_tileno, tcd_tile, layno + 1, dest,p_data_written, maxlen, cstr_info,tcd->cur_tp_num,tcd->tp_pos,tcd->cur_pino,THRESH_CALC))
-                                        {
-                                                /* TODO: what to do with l ??? seek / tell ??? */
-                                                /* opj_event_msg(tcd->cinfo, EVT_INFO, "rate alloc: len=%d, max=%d\n", l, maxlen); */
-                                                lo = thresh;
-                                                continue;
-                                        }
-
-                                        hi = thresh;
-                                        stable_thresh = thresh;
-                                }
+                        if (layno == 0) {
+                            cblk->numpassesinlayers = 0;
                         }
 
-                        goodthresh = stable_thresh == 0? thresh : stable_thresh;
+                        n = cblk->numpassesinlayers;
+                        if (cblk->numpassesinlayers == 0) {
+                            if (value != 0) {
+                                n = 3 * (OPJ_UINT32)value - 2 + cblk->numpassesinlayers;
+                            } else {
+                                n = cblk->numpassesinlayers;
+                            }
+                        } else {
+                            n = 3 * (OPJ_UINT32)value + cblk->numpassesinlayers;
+                        }
 
-                        opj_t2_destroy(t2);
-                } else {
-                        goodthresh = min;
-                }
+                        layer->numpasses = n - cblk->numpassesinlayers;
 
-                if(cstr_info) { /* Threshold for Marcela Index */
-                        cstr_info->tile[tcd->tcd_tileno].thresh[layno] = goodthresh;
-                }
+                        if (!layer->numpasses) {
+                            continue;
+                        }
 
-                opj_tcd_makelayer(tcd, layno, goodthresh, 1);
+                        if (cblk->numpassesinlayers == 0) {
+                            layer->len = cblk->passes[n - 1].rate;
+                            layer->data = cblk->data;
+                        } else {
+                            layer->len = cblk->passes[n - 1].rate - cblk->passes[cblk->numpassesinlayers -
+                                         1].rate;
+                            layer->data = cblk->data + cblk->passes[cblk->numpassesinlayers - 1].rate;
+                        }
 
-                /* fixed_quality */
-                cumdisto[layno] = (layno == 0) ? tcd_tile->distolayer[0] : (cumdisto[layno - 1] + tcd_tile->distolayer[layno]);
+                        if (final) {
+                            cblk->numpassesinlayers = n;
+                        }
+                    }
+                }
+            }
         }
-
-        return OPJ_TRUE;
+    }
 }
 
-OPJ_BOOL opj_tcd_init( opj_tcd_t *p_tcd,
-                                           opj_image_t * p_image,
-                                           opj_cp_t * p_cp,
-                       opj_thread_pool_t* p_tp )
+OPJ_BOOL opj_tcd_rateallocate(opj_tcd_t *tcd,
+                              OPJ_BYTE *dest,
+                              OPJ_UINT32 * p_data_written,
+                              OPJ_UINT32 len,
+                              opj_codestream_info_t *cstr_info)
 {
-        p_tcd->image = p_image;
-        p_tcd->cp = p_cp;
-
-        p_tcd->tcd_image->tiles = (opj_tcd_tile_t *) opj_calloc(1,sizeof(opj_tcd_tile_t));
-        if (! p_tcd->tcd_image->tiles) {
+    OPJ_UINT32 compno, resno, bandno, precno, cblkno, layno;
+    OPJ_UINT32 passno;
+    OPJ_FLOAT64 min, max;
+    OPJ_FLOAT64 cumdisto[100];      /* fixed_quality */
+    const OPJ_FLOAT64 K = 1;                /* 1.1; fixed_quality */
+    OPJ_FLOAT64 maxSE = 0;
+
+    opj_cp_t *cp = tcd->cp;
+    opj_tcd_tile_t *tcd_tile = tcd->tcd_image->tiles;
+    opj_tcp_t *tcd_tcp = tcd->tcp;
+
+    min = DBL_MAX;
+    max = 0;
+
+    tcd_tile->numpix = 0;           /* fixed_quality */
+
+    for (compno = 0; compno < tcd_tile->numcomps; compno++) {
+        opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
+        tilec->numpix = 0;
+
+        for (resno = 0; resno < tilec->numresolutions; resno++) {
+            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+
+            for (bandno = 0; bandno < res->numbands; bandno++) {
+                opj_tcd_band_t *band = &res->bands[bandno];
+
+                for (precno = 0; precno < res->pw * res->ph; precno++) {
+                    opj_tcd_precinct_t *prc = &band->precincts[precno];
+
+                    for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
+                        opj_tcd_cblk_enc_t *cblk = &prc->cblks.enc[cblkno];
+
+                        for (passno = 0; passno < cblk->totalpasses; passno++) {
+                            opj_tcd_pass_t *pass = &cblk->passes[passno];
+                            OPJ_INT32 dr;
+                            OPJ_FLOAT64 dd, rdslope;
+
+                            if (passno == 0) {
+                                dr = (OPJ_INT32)pass->rate;
+                                dd = pass->distortiondec;
+                            } else {
+                                dr = (OPJ_INT32)(pass->rate - cblk->passes[passno - 1].rate);
+                                dd = pass->distortiondec - cblk->passes[passno - 1].distortiondec;
+                            }
+
+                            if (dr == 0) {
+                                continue;
+                            }
+
+                            rdslope = dd / dr;
+                            if (rdslope < min) {
+                                min = rdslope;
+                            }
+
+                            if (rdslope > max) {
+                                max = rdslope;
+                            }
+                        } /* passno */
+
+                        /* fixed_quality */
+                        tcd_tile->numpix += ((cblk->x1 - cblk->x0) * (cblk->y1 - cblk->y0));
+                        tilec->numpix += ((cblk->x1 - cblk->x0) * (cblk->y1 - cblk->y0));
+                    } /* cbklno */
+                } /* precno */
+            } /* bandno */
+        } /* resno */
+
+        maxSE += (((OPJ_FLOAT64)(1 << tcd->image->comps[compno].prec) - 1.0)
+                  * ((OPJ_FLOAT64)(1 << tcd->image->comps[compno].prec) - 1.0))
+                 * ((OPJ_FLOAT64)(tilec->numpix));
+    } /* compno */
+
+    /* index file */
+    if (cstr_info) {
+        opj_tile_info_t *tile_info = &cstr_info->tile[tcd->tcd_tileno];
+        tile_info->numpix = tcd_tile->numpix;
+        tile_info->distotile = tcd_tile->distotile;
+        tile_info->thresh = (OPJ_FLOAT64 *) opj_malloc(tcd_tcp->numlayers * sizeof(
+                                OPJ_FLOAT64));
+        if (!tile_info->thresh) {
+            /* FIXME event manager error callback */
+            return OPJ_FALSE;
+        }
+    }
+
+    for (layno = 0; layno < tcd_tcp->numlayers; layno++) {
+        OPJ_FLOAT64 lo = min;
+        OPJ_FLOAT64 hi = max;
+        OPJ_UINT32 maxlen = tcd_tcp->rates[layno] > 0.0f ? opj_uint_min(((
+                                OPJ_UINT32) ceil(tcd_tcp->rates[layno])), len) : len;
+        OPJ_FLOAT64 goodthresh = 0;
+        OPJ_FLOAT64 stable_thresh = 0;
+        OPJ_UINT32 i;
+        OPJ_FLOAT64 distotarget;                /* fixed_quality */
+
+        /* fixed_quality */
+        distotarget = tcd_tile->distotile - ((K * maxSE) / pow((OPJ_FLOAT32)10,
+                                             tcd_tcp->distoratio[layno] / 10));
+
+        /* Don't try to find an optimal threshold but rather take everything not included yet, if
+          -r xx,yy,zz,0   (disto_alloc == 1 and rates == 0)
+          -q xx,yy,zz,0   (fixed_quality == 1 and distoratio == 0)
+          ==> possible to have some lossy layers and the last layer for sure lossless */
+        if (((cp->m_specific_param.m_enc.m_disto_alloc == 1) &&
+                (tcd_tcp->rates[layno] > 0.0f)) ||
+                ((cp->m_specific_param.m_enc.m_fixed_quality == 1) &&
+                 (tcd_tcp->distoratio[layno] > 0.0))) {
+            opj_t2_t*t2 = opj_t2_create(tcd->image, cp);
+            OPJ_FLOAT64 thresh = 0;
+
+            if (t2 == 00) {
                 return OPJ_FALSE;
+            }
+
+            for (i = 0; i < 128; ++i) {
+                OPJ_FLOAT64 distoachieved = 0;  /* fixed_quality */
+
+                thresh = (lo + hi) / 2;
+
+                opj_tcd_makelayer(tcd, layno, thresh, 0);
+
+                if (cp->m_specific_param.m_enc.m_fixed_quality) {       /* fixed_quality */
+                    if (OPJ_IS_CINEMA(cp->rsiz)) {
+                        if (! opj_t2_encode_packets(t2, tcd->tcd_tileno, tcd_tile, layno + 1, dest,
+                                                    p_data_written, maxlen, cstr_info, tcd->cur_tp_num, tcd->tp_pos, tcd->cur_pino,
+                                                    THRESH_CALC)) {
+
+                            lo = thresh;
+                            continue;
+                        } else {
+                            distoachieved = layno == 0 ?
+                                            tcd_tile->distolayer[0] : cumdisto[layno - 1] + tcd_tile->distolayer[layno];
+
+                            if (distoachieved < distotarget) {
+                                hi = thresh;
+                                stable_thresh = thresh;
+                                continue;
+                            } else {
+                                lo = thresh;
+                            }
+                        }
+                    } else {
+                        distoachieved = (layno == 0) ?
+                                        tcd_tile->distolayer[0] : (cumdisto[layno - 1] + tcd_tile->distolayer[layno]);
+
+                        if (distoachieved < distotarget) {
+                            hi = thresh;
+                            stable_thresh = thresh;
+                            continue;
+                        }
+                        lo = thresh;
+                    }
+                } else {
+                    if (! opj_t2_encode_packets(t2, tcd->tcd_tileno, tcd_tile, layno + 1, dest,
+                                                p_data_written, maxlen, cstr_info, tcd->cur_tp_num, tcd->tp_pos, tcd->cur_pino,
+                                                THRESH_CALC)) {
+                        /* TODO: what to do with l ??? seek / tell ??? */
+                        /* opj_event_msg(tcd->cinfo, EVT_INFO, "rate alloc: len=%d, max=%d\n", l, maxlen); */
+                        lo = thresh;
+                        continue;
+                    }
+
+                    hi = thresh;
+                    stable_thresh = thresh;
+                }
+            }
+
+            goodthresh = stable_thresh == 0 ? thresh : stable_thresh;
+
+            opj_t2_destroy(t2);
+        } else {
+            goodthresh = min;
         }
 
-        p_tcd->tcd_image->tiles->comps = (opj_tcd_tilecomp_t *) opj_calloc(p_image->numcomps,sizeof(opj_tcd_tilecomp_t));
-        if (! p_tcd->tcd_image->tiles->comps ) {
-                return OPJ_FALSE;
+        if (cstr_info) { /* Threshold for Marcela Index */
+            cstr_info->tile[tcd->tcd_tileno].thresh[layno] = goodthresh;
         }
 
-        p_tcd->tcd_image->tiles->numcomps = p_image->numcomps;
-        p_tcd->tp_pos = p_cp->m_specific_param.m_enc.m_tp_pos;
-        p_tcd->thread_pool = p_tp;
+        opj_tcd_makelayer(tcd, layno, goodthresh, 1);
 
-        return OPJ_TRUE;
+        /* fixed_quality */
+        cumdisto[layno] = (layno == 0) ? tcd_tile->distolayer[0] :
+                          (cumdisto[layno - 1] + tcd_tile->distolayer[layno]);
+    }
+
+    return OPJ_TRUE;
+}
+
+OPJ_BOOL opj_tcd_init(opj_tcd_t *p_tcd,
+                      opj_image_t * p_image,
+                      opj_cp_t * p_cp,
+                      opj_thread_pool_t* p_tp)
+{
+    p_tcd->image = p_image;
+    p_tcd->cp = p_cp;
+
+    p_tcd->tcd_image->tiles = (opj_tcd_tile_t *) opj_calloc(1,
+                              sizeof(opj_tcd_tile_t));
+    if (! p_tcd->tcd_image->tiles) {
+        return OPJ_FALSE;
+    }
+
+    p_tcd->tcd_image->tiles->comps = (opj_tcd_tilecomp_t *) opj_calloc(
+                                         p_image->numcomps, sizeof(opj_tcd_tilecomp_t));
+    if (! p_tcd->tcd_image->tiles->comps) {
+        return OPJ_FALSE;
+    }
+
+    p_tcd->tcd_image->tiles->numcomps = p_image->numcomps;
+    p_tcd->tp_pos = p_cp->m_specific_param.m_enc.m_tp_pos;
+    p_tcd->thread_pool = p_tp;
+
+    return OPJ_TRUE;
 }
 
 /**
 Destroy a previously created TCD handle
 */
-void opj_tcd_destroy(opj_tcd_t *tcd) {
-        if (tcd) {
-                opj_tcd_free_tile(tcd);
+void opj_tcd_destroy(opj_tcd_t *tcd)
+{
+    if (tcd) {
+        opj_tcd_free_tile(tcd);
 
-                if (tcd->tcd_image) {
-                        opj_free(tcd->tcd_image);
-                        tcd->tcd_image = 00;
-                }
-                opj_free(tcd);
+        if (tcd->tcd_image) {
+            opj_free(tcd->tcd_image);
+            tcd->tcd_image = 00;
         }
+        opj_free(tcd);
+    }
 }
 
 OPJ_BOOL opj_alloc_tile_component_data(opj_tcd_tilecomp_t *l_tilec)
 {
-       if ((l_tilec->data == 00) || ((l_tilec->data_size_needed > l_tilec->data_size) && (l_tilec->ownsData == OPJ_FALSE))) {
-               l_tilec->data = (OPJ_INT32 *) opj_aligned_malloc(l_tilec->data_size_needed);
-               if (! l_tilec->data ) {
-                       return OPJ_FALSE;
-               }
-               /*fprintf(stderr, "tAllocate data of tilec (int): %d x OPJ_UINT32n",l_data_size);*/
-               l_tilec->data_size = l_tilec->data_size_needed;
-               l_tilec->ownsData = OPJ_TRUE;
-       }
-       else if (l_tilec->data_size_needed > l_tilec->data_size) {
-               /* We don't need to keep old data */
-               opj_aligned_free(l_tilec->data);
-               l_tilec->data = (OPJ_INT32 *) opj_aligned_malloc(l_tilec->data_size_needed);
-               if (! l_tilec->data ) {
-                       l_tilec->data_size = 0;
-                       l_tilec->data_size_needed = 0;
-                       l_tilec->ownsData = OPJ_FALSE;
-                       return OPJ_FALSE;
-               }
-               /*fprintf(stderr, "tReallocate data of tilec (int): from %d to %d x OPJ_UINT32n", l_tilec->data_size, l_data_size);*/
-               l_tilec->data_size = l_tilec->data_size_needed;
-               l_tilec->ownsData = OPJ_TRUE;
-       }
-       return OPJ_TRUE;
+    if ((l_tilec->data == 00) ||
+            ((l_tilec->data_size_needed > l_tilec->data_size) &&
+             (l_tilec->ownsData == OPJ_FALSE))) {
+        l_tilec->data = (OPJ_INT32 *) opj_aligned_malloc(l_tilec->data_size_needed);
+        if (! l_tilec->data) {
+            return OPJ_FALSE;
+        }
+        /*fprintf(stderr, "tAllocate data of tilec (int): %d x OPJ_UINT32n",l_data_size);*/
+        l_tilec->data_size = l_tilec->data_size_needed;
+        l_tilec->ownsData = OPJ_TRUE;
+    } else if (l_tilec->data_size_needed > l_tilec->data_size) {
+        /* We don't need to keep old data */
+        opj_aligned_free(l_tilec->data);
+        l_tilec->data = (OPJ_INT32 *) opj_aligned_malloc(l_tilec->data_size_needed);
+        if (! l_tilec->data) {
+            l_tilec->data_size = 0;
+            l_tilec->data_size_needed = 0;
+            l_tilec->ownsData = OPJ_FALSE;
+            return OPJ_FALSE;
+        }
+        /*fprintf(stderr, "tReallocate data of tilec (int): from %d to %d x OPJ_UINT32n", l_tilec->data_size, l_data_size);*/
+        l_tilec->data_size = l_tilec->data_size_needed;
+        l_tilec->ownsData = OPJ_TRUE;
+    }
+    return OPJ_TRUE;
 }
 
 /* ----------------------------------------------------------------------- */
 
-static INLINE OPJ_BOOL opj_tcd_init_tile(opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no, OPJ_BOOL isEncoder, OPJ_FLOAT32 fraction, OPJ_SIZE_T sizeof_block, opj_event_mgr_t* manager)
+static INLINE OPJ_BOOL opj_tcd_init_tile(opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no,
+        OPJ_BOOL isEncoder, OPJ_FLOAT32 fraction, OPJ_SIZE_T sizeof_block,
+        opj_event_mgr_t* manager)
 {
-       OPJ_UINT32 (*l_gain_ptr)(OPJ_UINT32) = 00;
-       OPJ_UINT32 compno, resno, bandno, precno, cblkno;
-       opj_tcp_t * l_tcp = 00;
-       opj_cp_t * l_cp = 00;
-       opj_tcd_tile_t * l_tile = 00;
-       opj_tccp_t *l_tccp = 00;
-       opj_tcd_tilecomp_t *l_tilec = 00;
-       opj_image_comp_t * l_image_comp = 00;
-       opj_tcd_resolution_t *l_res = 00;
-       opj_tcd_band_t *l_band = 00;
-       opj_stepsize_t * l_step_size = 00;
-       opj_tcd_precinct_t *l_current_precinct = 00;
-       opj_image_t *l_image = 00;
-       OPJ_UINT32 p,q;
-       OPJ_UINT32 l_level_no;
-       OPJ_UINT32 l_pdx, l_pdy;
-       OPJ_UINT32 l_gain;
-       OPJ_INT32 l_x0b, l_y0b;
-       OPJ_UINT32 l_tx0, l_ty0;
-       /* extent of precincts , top left, bottom right**/
-       OPJ_INT32 l_tl_prc_x_start, l_tl_prc_y_start, l_br_prc_x_end, l_br_prc_y_end;
-       /* number of precinct for a resolution */
-       OPJ_UINT32 l_nb_precincts;
-       /* room needed to store l_nb_precinct precinct for a resolution */
-       OPJ_UINT32 l_nb_precinct_size;
-       /* number of code blocks for a precinct*/
-       OPJ_UINT32 l_nb_code_blocks;
-       /* room needed to store l_nb_code_blocks code blocks for a precinct*/
-       OPJ_UINT32 l_nb_code_blocks_size;
-       /* size of data for a tile */
-       OPJ_UINT32 l_data_size;
-       
-       l_cp = p_tcd->cp;
-       l_tcp = &(l_cp->tcps[p_tile_no]);
-       l_tile = p_tcd->tcd_image->tiles;
-       l_tccp = l_tcp->tccps;
-       l_tilec = l_tile->comps;
-       l_image = p_tcd->image;
-       l_image_comp = p_tcd->image->comps;
-       
-       p = p_tile_no % l_cp->tw;       /* tile coordinates */
-       q = p_tile_no / l_cp->tw;
-       /*fprintf(stderr, "Tile coordinate = %d,%d\n", p, q);*/
-       
-       /* 4 borders of the tile rescale on the image if necessary */
-       l_tx0 = l_cp->tx0 + p * l_cp->tdx; /* can't be greater than l_image->x1 so won't overflow */
-       l_tile->x0 = (OPJ_INT32)opj_uint_max(l_tx0, l_image->x0);
-       l_tile->x1 = (OPJ_INT32)opj_uint_min(opj_uint_adds(l_tx0, l_cp->tdx), l_image->x1);
-       /* all those OPJ_UINT32 are casted to OPJ_INT32, let's do some sanity check */
-       if ((l_tile->x0 < 0) || (l_tile->x1 <= l_tile->x0)) {
-               opj_event_msg(manager, EVT_ERROR, "Tile X coordinates are not supported\n");
-               return OPJ_FALSE;
-       }
-       l_ty0 = l_cp->ty0 + q * l_cp->tdy; /* can't be greater than l_image->y1 so won't overflow */
-       l_tile->y0 = (OPJ_INT32)opj_uint_max(l_ty0, l_image->y0);
-       l_tile->y1 = (OPJ_INT32)opj_uint_min(opj_uint_adds(l_ty0, l_cp->tdy), l_image->y1);
-       /* all those OPJ_UINT32 are casted to OPJ_INT32, let's do some sanity check */
-       if ((l_tile->y0 < 0) || (l_tile->y1 <= l_tile->y0)) {
-               opj_event_msg(manager, EVT_ERROR, "Tile Y coordinates are not supported\n");
-               return OPJ_FALSE;
-       }
-       
-
-       /* testcase 1888.pdf.asan.35.988 */
-       if (l_tccp->numresolutions == 0) {
-               opj_event_msg(manager, EVT_ERROR, "tiles require at least one resolution\n");
-               return OPJ_FALSE;
-       }
-       /*fprintf(stderr, "Tile border = %d,%d,%d,%d\n", l_tile->x0, l_tile->y0,l_tile->x1,l_tile->y1);*/
-       
-       /*tile->numcomps = image->numcomps; */
-       for (compno = 0; compno < l_tile->numcomps; ++compno) {
-               /*fprintf(stderr, "compno = %d/%d\n", compno, l_tile->numcomps);*/
-               l_image_comp->resno_decoded = 0;
-               /* border of each l_tile component (global) */
-               l_tilec->x0 = opj_int_ceildiv(l_tile->x0, (OPJ_INT32)l_image_comp->dx);
-               l_tilec->y0 = opj_int_ceildiv(l_tile->y0, (OPJ_INT32)l_image_comp->dy);
-               l_tilec->x1 = opj_int_ceildiv(l_tile->x1, (OPJ_INT32)l_image_comp->dx);
-               l_tilec->y1 = opj_int_ceildiv(l_tile->y1, (OPJ_INT32)l_image_comp->dy);
-               /*fprintf(stderr, "\tTile compo border = %d,%d,%d,%d\n", l_tilec->x0, l_tilec->y0,l_tilec->x1,l_tilec->y1);*/
-               
-               /* compute l_data_size with overflow check */
-               l_data_size = (OPJ_UINT32)(l_tilec->x1 - l_tilec->x0);
-               /* issue 733, l_data_size == 0U, probably something wrong should be checked before getting here */
-               if ((l_data_size > 0U) && ((((OPJ_UINT32)-1) / l_data_size) < (OPJ_UINT32)(l_tilec->y1 - l_tilec->y0))) {
-                       opj_event_msg(manager, EVT_ERROR, "Not enough memory for tile data\n");
-                       return OPJ_FALSE;
-               }
-               l_data_size = l_data_size * (OPJ_UINT32)(l_tilec->y1 - l_tilec->y0);
-               
-               if ((((OPJ_UINT32)-1) / (OPJ_UINT32)sizeof(OPJ_UINT32)) < l_data_size) {
-                       opj_event_msg(manager, EVT_ERROR, "Not enough memory for tile data\n");
-                       return OPJ_FALSE;
-               }
-               l_data_size = l_data_size * (OPJ_UINT32)sizeof(OPJ_UINT32);
-               l_tilec->numresolutions = l_tccp->numresolutions;
-               if (l_tccp->numresolutions < l_cp->m_specific_param.m_dec.m_reduce) {
-                       l_tilec->minimum_num_resolutions = 1;
-               }
-               else {
-                       l_tilec->minimum_num_resolutions = l_tccp->numresolutions - l_cp->m_specific_param.m_dec.m_reduce;
-               }
-               
-               l_tilec->data_size_needed = l_data_size;
-               if (p_tcd->m_is_decoder && !opj_alloc_tile_component_data(l_tilec)) {
-                       opj_event_msg(manager, EVT_ERROR, "Not enough memory for tile data\n");
-                       return OPJ_FALSE;
-               }
-               
-               l_data_size = l_tilec->numresolutions * (OPJ_UINT32)sizeof(opj_tcd_resolution_t);
-               
-               if (l_tilec->resolutions == 00) {
-                       l_tilec->resolutions = (opj_tcd_resolution_t *) opj_malloc(l_data_size);
-                       if (! l_tilec->resolutions ) {
-                               return OPJ_FALSE;
-                       }
-                       /*fprintf(stderr, "\tAllocate resolutions of tilec (opj_tcd_resolution_t): %d\n",l_data_size);*/
-                       l_tilec->resolutions_size = l_data_size;
-                       memset(l_tilec->resolutions,0,l_data_size);
-               }
-               else if (l_data_size > l_tilec->resolutions_size) {
-                       opj_tcd_resolution_t* new_resolutions = (opj_tcd_resolution_t *) opj_realloc(l_tilec->resolutions, l_data_size);
-                       if (! new_resolutions) {
-                               opj_event_msg(manager, EVT_ERROR, "Not enough memory for tile resolutions\n");
-                               opj_free(l_tilec->resolutions);
-                               l_tilec->resolutions = NULL;
-                               l_tilec->resolutions_size = 0;
-                               return OPJ_FALSE;
-                       }
-                       l_tilec->resolutions = new_resolutions;
-                       /*fprintf(stderr, "\tReallocate data of tilec (int): from %d to %d x OPJ_UINT32\n", l_tilec->resolutions_size, l_data_size);*/
-                       memset(((OPJ_BYTE*) l_tilec->resolutions)+l_tilec->resolutions_size,0,l_data_size - l_tilec->resolutions_size);
-                       l_tilec->resolutions_size = l_data_size;
-               }
-               
-               l_level_no = l_tilec->numresolutions;
-               l_res = l_tilec->resolutions;
-               l_step_size = l_tccp->stepsizes;
-               if (l_tccp->qmfbid == 0) {
-                       l_gain_ptr = &opj_dwt_getgain_real;
-               }
-               else {
-                       l_gain_ptr  = &opj_dwt_getgain;
-               }
-               /*fprintf(stderr, "\tlevel_no=%d\n",l_level_no);*/
-               
-               for (resno = 0; resno < l_tilec->numresolutions; ++resno) {
-                       /*fprintf(stderr, "\t\tresno = %d/%d\n", resno, l_tilec->numresolutions);*/
-                       OPJ_INT32 tlcbgxstart, tlcbgystart /*, brcbgxend, brcbgyend*/;
-                       OPJ_UINT32 cbgwidthexpn, cbgheightexpn;
-                       OPJ_UINT32 cblkwidthexpn, cblkheightexpn;
-                       
-                       --l_level_no;
-                       
-                       /* border for each resolution level (global) */
-                       l_res->x0 = opj_int_ceildivpow2(l_tilec->x0, (OPJ_INT32)l_level_no);
-                       l_res->y0 = opj_int_ceildivpow2(l_tilec->y0, (OPJ_INT32)l_level_no);
-                       l_res->x1 = opj_int_ceildivpow2(l_tilec->x1, (OPJ_INT32)l_level_no);
-                       l_res->y1 = opj_int_ceildivpow2(l_tilec->y1, (OPJ_INT32)l_level_no);
-                       /*fprintf(stderr, "\t\t\tres_x0= %d, res_y0 =%d, res_x1=%d, res_y1=%d\n", l_res->x0, l_res->y0, l_res->x1, l_res->y1);*/
-                       /* p. 35, table A-23, ISO/IEC FDIS154444-1 : 2000 (18 august 2000) */
-                       l_pdx = l_tccp->prcw[resno];
-                       l_pdy = l_tccp->prch[resno];
-                       /*fprintf(stderr, "\t\t\tpdx=%d, pdy=%d\n", l_pdx, l_pdy);*/
-                       /* p. 64, B.6, ISO/IEC FDIS15444-1 : 2000 (18 august 2000)  */
-                       l_tl_prc_x_start = opj_int_floordivpow2(l_res->x0, (OPJ_INT32)l_pdx) << l_pdx;
-                       l_tl_prc_y_start = opj_int_floordivpow2(l_res->y0, (OPJ_INT32)l_pdy) << l_pdy;
-                       l_br_prc_x_end = opj_int_ceildivpow2(l_res->x1, (OPJ_INT32)l_pdx) << l_pdx;
-                       l_br_prc_y_end = opj_int_ceildivpow2(l_res->y1, (OPJ_INT32)l_pdy) << l_pdy;
-                       /*fprintf(stderr, "\t\t\tprc_x_start=%d, prc_y_start=%d, br_prc_x_end=%d, br_prc_y_end=%d \n", l_tl_prc_x_start, l_tl_prc_y_start, l_br_prc_x_end ,l_br_prc_y_end );*/
-                       
-                       l_res->pw = (l_res->x0 == l_res->x1) ? 0U : (OPJ_UINT32)((l_br_prc_x_end - l_tl_prc_x_start) >> l_pdx);
-                       l_res->ph = (l_res->y0 == l_res->y1) ? 0U : (OPJ_UINT32)((l_br_prc_y_end - l_tl_prc_y_start) >> l_pdy);
-                       /*fprintf(stderr, "\t\t\tres_pw=%d, res_ph=%d\n", l_res->pw, l_res->ph );*/
-
-                       if ((l_res->pw != 0U) && ((((OPJ_UINT32)-1) / l_res->pw) < l_res->ph)) {
-                               opj_event_msg(manager, EVT_ERROR, "Not enough memory for tile data\n");
-                               return OPJ_FALSE;
-                       }
-                       l_nb_precincts = l_res->pw * l_res->ph;
-
-                       if ((((OPJ_UINT32)-1) / (OPJ_UINT32)sizeof(opj_tcd_precinct_t)) < l_nb_precincts) {
-                               opj_event_msg(manager, EVT_ERROR, "Not enough memory for tile data\n");
-                               return OPJ_FALSE;
-                       }
-                       l_nb_precinct_size = l_nb_precincts * (OPJ_UINT32)sizeof(opj_tcd_precinct_t);
-
-                       if (resno == 0) {
-                               tlcbgxstart = l_tl_prc_x_start;
-                               tlcbgystart = l_tl_prc_y_start;
-                               /*brcbgxend = l_br_prc_x_end;*/
-                               /* brcbgyend = l_br_prc_y_end;*/
-                               cbgwidthexpn = l_pdx;
-                               cbgheightexpn = l_pdy;
-                               l_res->numbands = 1;
-                       }
-                       else {
-                               tlcbgxstart = opj_int_ceildivpow2(l_tl_prc_x_start, 1);
-                               tlcbgystart = opj_int_ceildivpow2(l_tl_prc_y_start, 1);
-                               /*brcbgxend = opj_int_ceildivpow2(l_br_prc_x_end, 1);*/
-                               /*brcbgyend = opj_int_ceildivpow2(l_br_prc_y_end, 1);*/
-                               cbgwidthexpn = l_pdx - 1;
-                               cbgheightexpn = l_pdy - 1;
-                               l_res->numbands = 3;
-                       }
-                       
-                       cblkwidthexpn = opj_uint_min(l_tccp->cblkw, cbgwidthexpn);
-                       cblkheightexpn = opj_uint_min(l_tccp->cblkh, cbgheightexpn);
-                       l_band = l_res->bands;
-                       
-                       for (bandno = 0; bandno < l_res->numbands; ++bandno) {
-                               OPJ_INT32 numbps;
-                               /*fprintf(stderr, "\t\t\tband_no=%d/%d\n", bandno, l_res->numbands );*/
-                               
-                               if (resno == 0) {
-                                       l_band->bandno = 0 ;
-                                       l_band->x0 = opj_int_ceildivpow2(l_tilec->x0, (OPJ_INT32)l_level_no);
-                                       l_band->y0 = opj_int_ceildivpow2(l_tilec->y0, (OPJ_INT32)l_level_no);
-                                       l_band->x1 = opj_int_ceildivpow2(l_tilec->x1, (OPJ_INT32)l_level_no);
-                                       l_band->y1 = opj_int_ceildivpow2(l_tilec->y1, (OPJ_INT32)l_level_no);
-                               }
-                               else {
-                                       l_band->bandno = bandno + 1;
-                                       /* x0b = 1 if bandno = 1 or 3 */
-                                       l_x0b = l_band->bandno&1;
-                                       /* y0b = 1 if bandno = 2 or 3 */
-                                       l_y0b = (OPJ_INT32)((l_band->bandno)>>1);
-                                       /* l_band border (global) */
-                                       l_band->x0 = opj_int64_ceildivpow2(l_tilec->x0 - ((OPJ_INT64)l_x0b << l_level_no), (OPJ_INT32)(l_level_no + 1));
-                                       l_band->y0 = opj_int64_ceildivpow2(l_tilec->y0 - ((OPJ_INT64)l_y0b << l_level_no), (OPJ_INT32)(l_level_no + 1));
-                                       l_band->x1 = opj_int64_ceildivpow2(l_tilec->x1 - ((OPJ_INT64)l_x0b << l_level_no), (OPJ_INT32)(l_level_no + 1));
-                                       l_band->y1 = opj_int64_ceildivpow2(l_tilec->y1 - ((OPJ_INT64)l_y0b << l_level_no), (OPJ_INT32)(l_level_no + 1));
-                               }
-                               
-                               /** avoid an if with storing function pointer */
-                               l_gain = (*l_gain_ptr) (l_band->bandno);
-                               numbps = (OPJ_INT32)(l_image_comp->prec + l_gain);
-                               l_band->stepsize = (OPJ_FLOAT32)(((1.0 + l_step_size->mant / 2048.0) * pow(2.0, (OPJ_INT32) (numbps - l_step_size->expn)))) * fraction;
-                               l_band->numbps = l_step_size->expn + (OPJ_INT32)l_tccp->numgbits - 1;      /* WHY -1 ? */
-                               
-                               if (!l_band->precincts && (l_nb_precincts > 0U)) {
-                                       l_band->precincts = (opj_tcd_precinct_t *) opj_malloc( /*3 * */ l_nb_precinct_size);
-                                       if (! l_band->precincts) {
-                                               opj_event_msg(manager, EVT_ERROR, "Not enough memory to handle band precints\n");
-                                               return OPJ_FALSE;
-                                       }
-                                       /*fprintf(stderr, "\t\t\t\tAllocate precincts of a band (opj_tcd_precinct_t): %d\n",l_nb_precinct_size);     */
-                                       memset(l_band->precincts,0,l_nb_precinct_size);
-                                       l_band->precincts_data_size = l_nb_precinct_size;
-                               }
-                               else if (l_band->precincts_data_size < l_nb_precinct_size) {
-                                       
-                                       opj_tcd_precinct_t * new_precincts = (opj_tcd_precinct_t *) opj_realloc(l_band->precincts,/*3 * */ l_nb_precinct_size);
-                                       if (! new_precincts) {
-                                               opj_event_msg(manager, EVT_ERROR, "Not enough memory to handle band precints\n");
-                                               opj_free(l_band->precincts);
-                                               l_band->precincts = NULL;
-                                               l_band->precincts_data_size = 0;
-                                               return OPJ_FALSE;
-                                       }
-                                       l_band->precincts = new_precincts;
-                                       /*fprintf(stderr, "\t\t\t\tReallocate precincts of a band (opj_tcd_precinct_t): from %d to %d\n",l_band->precincts_data_size, l_nb_precinct_size);*/
-                                       memset(((OPJ_BYTE *) l_band->precincts) + l_band->precincts_data_size,0,l_nb_precinct_size - l_band->precincts_data_size);
-                                       l_band->precincts_data_size = l_nb_precinct_size;
-                               }
-                               
-                               l_current_precinct = l_band->precincts;
-                               for (precno = 0; precno < l_nb_precincts; ++precno) {
-                                       OPJ_INT32 tlcblkxstart, tlcblkystart, brcblkxend, brcblkyend;
-                                       OPJ_INT32 cbgxstart = tlcbgxstart + (OPJ_INT32)(precno % l_res->pw) * (1 << cbgwidthexpn);
-                                       OPJ_INT32 cbgystart = tlcbgystart + (OPJ_INT32)(precno / l_res->pw) * (1 << cbgheightexpn);
-                                       OPJ_INT32 cbgxend = cbgxstart + (1 << cbgwidthexpn);
-                                       OPJ_INT32 cbgyend = cbgystart + (1 << cbgheightexpn);
-                                       /*fprintf(stderr, "\t precno=%d; bandno=%d, resno=%d; compno=%d\n", precno, bandno , resno, compno);*/
-                                       /*fprintf(stderr, "\t tlcbgxstart(=%d) + (precno(=%d) percent res->pw(=%d)) * (1 << cbgwidthexpn(=%d)) \n",tlcbgxstart,precno,l_res->pw,cbgwidthexpn);*/
-                                       
-                                       /* precinct size (global) */
-                                       /*fprintf(stderr, "\t cbgxstart=%d, l_band->x0 = %d \n",cbgxstart, l_band->x0);*/
-                                       
-                                       l_current_precinct->x0 = opj_int_max(cbgxstart, l_band->x0);
-                                       l_current_precinct->y0 = opj_int_max(cbgystart, l_band->y0);
-                                       l_current_precinct->x1 = opj_int_min(cbgxend, l_band->x1);
-                                       l_current_precinct->y1 = opj_int_min(cbgyend, l_band->y1);
-                                       /*fprintf(stderr, "\t prc_x0=%d; prc_y0=%d, prc_x1=%d; prc_y1=%d\n",l_current_precinct->x0, l_current_precinct->y0 ,l_current_precinct->x1, l_current_precinct->y1);*/
-                                       
-                                       tlcblkxstart = opj_int_floordivpow2(l_current_precinct->x0, (OPJ_INT32)cblkwidthexpn) << cblkwidthexpn;
-                                       /*fprintf(stderr, "\t tlcblkxstart =%d\n",tlcblkxstart );*/
-                                       tlcblkystart = opj_int_floordivpow2(l_current_precinct->y0, (OPJ_INT32)cblkheightexpn) << cblkheightexpn;
-                                       /*fprintf(stderr, "\t tlcblkystart =%d\n",tlcblkystart );*/
-                                       brcblkxend = opj_int_ceildivpow2(l_current_precinct->x1, (OPJ_INT32)cblkwidthexpn) << cblkwidthexpn;
-                                       /*fprintf(stderr, "\t brcblkxend =%d\n",brcblkxend );*/
-                                       brcblkyend = opj_int_ceildivpow2(l_current_precinct->y1, (OPJ_INT32)cblkheightexpn) << cblkheightexpn;
-                                       /*fprintf(stderr, "\t brcblkyend =%d\n",brcblkyend );*/
-                                       l_current_precinct->cw = (OPJ_UINT32)((brcblkxend - tlcblkxstart) >> cblkwidthexpn);
-                                       l_current_precinct->ch = (OPJ_UINT32)((brcblkyend - tlcblkystart) >> cblkheightexpn);
-                                       
-                                       l_nb_code_blocks = l_current_precinct->cw * l_current_precinct->ch;
-                                       /*fprintf(stderr, "\t\t\t\t precinct_cw = %d x recinct_ch = %d\n",l_current_precinct->cw, l_current_precinct->ch);      */
-                                       l_nb_code_blocks_size = l_nb_code_blocks * (OPJ_UINT32)sizeof_block;
-                                       
-                                       if (!l_current_precinct->cblks.blocks && (l_nb_code_blocks > 0U)) {
-                                               l_current_precinct->cblks.blocks = opj_malloc(l_nb_code_blocks_size);
-                                               if (! l_current_precinct->cblks.blocks ) {
-                                                       return OPJ_FALSE;
-                                               }
-                                               /*fprintf(stderr, "\t\t\t\tAllocate cblks of a precinct (opj_tcd_cblk_dec_t): %d\n",l_nb_code_blocks_size);*/
-                                               
-                                               memset(l_current_precinct->cblks.blocks,0,l_nb_code_blocks_size);
-                                               
-                                               l_current_precinct->block_size = l_nb_code_blocks_size;
-                                       }
-                                       else if (l_nb_code_blocks_size > l_current_precinct->block_size) {
-                                               void *new_blocks = opj_realloc(l_current_precinct->cblks.blocks, l_nb_code_blocks_size);
-                                               if (! new_blocks) {
-                                                       opj_free(l_current_precinct->cblks.blocks);
-                                                       l_current_precinct->cblks.blocks = NULL;
-                                                       l_current_precinct->block_size = 0;
-                                                       opj_event_msg(manager, EVT_ERROR, "Not enough memory for current precinct codeblock element\n");
-                                                       return OPJ_FALSE;
-                                               }
-                                               l_current_precinct->cblks.blocks = new_blocks;
-                                               /*fprintf(stderr, "\t\t\t\tReallocate cblks of a precinct (opj_tcd_cblk_dec_t): from %d to %d\n",l_current_precinct->block_size, l_nb_code_blocks_size);     */
-                                               
-                                               memset(((OPJ_BYTE *) l_current_precinct->cblks.blocks) + l_current_precinct->block_size
-                                                                        ,0
-                                                                        ,l_nb_code_blocks_size - l_current_precinct->block_size);
-                                               
-                                               l_current_precinct->block_size = l_nb_code_blocks_size;
-                                       }
-                                       
-                                       if (! l_current_precinct->incltree) {
-                                               l_current_precinct->incltree = opj_tgt_create(l_current_precinct->cw, l_current_precinct->ch, manager);
-                                       }
-                                       else{
-                                               l_current_precinct->incltree = opj_tgt_init(l_current_precinct->incltree, l_current_precinct->cw, l_current_precinct->ch, manager);
-                                       }
-
-                                       if (! l_current_precinct->imsbtree) {
-                                               l_current_precinct->imsbtree = opj_tgt_create(l_current_precinct->cw, l_current_precinct->ch, manager);
-                                       }
-                                       else {
-                                               l_current_precinct->imsbtree = opj_tgt_init(l_current_precinct->imsbtree, l_current_precinct->cw, l_current_precinct->ch, manager);
-                                       }
-
-                                       for (cblkno = 0; cblkno < l_nb_code_blocks; ++cblkno) {
-                                               OPJ_INT32 cblkxstart = tlcblkxstart + (OPJ_INT32)(cblkno % l_current_precinct->cw) * (1 << cblkwidthexpn);
-                                               OPJ_INT32 cblkystart = tlcblkystart + (OPJ_INT32)(cblkno / l_current_precinct->cw) * (1 << cblkheightexpn);
-                                               OPJ_INT32 cblkxend = cblkxstart + (1 << cblkwidthexpn);
-                                               OPJ_INT32 cblkyend = cblkystart + (1 << cblkheightexpn);
-                                               
-                                               if (isEncoder) {
-                                                       opj_tcd_cblk_enc_t* l_code_block = l_current_precinct->cblks.enc + cblkno;
-                                                       
-                                                       if (! opj_tcd_code_block_enc_allocate(l_code_block)) {
-                                                               return OPJ_FALSE;
-                                                       }
-                                                       /* code-block size (global) */
-                                                       l_code_block->x0 = opj_int_max(cblkxstart, l_current_precinct->x0);
-                                                       l_code_block->y0 = opj_int_max(cblkystart, l_current_precinct->y0);
-                                                       l_code_block->x1 = opj_int_min(cblkxend, l_current_precinct->x1);
-                                                       l_code_block->y1 = opj_int_min(cblkyend, l_current_precinct->y1);
-                                                       
-                                                       if (! opj_tcd_code_block_enc_allocate_data(l_code_block)) {
-                                                               return OPJ_FALSE;
-                                                       }
-                                               } else {
-                                                       opj_tcd_cblk_dec_t* l_code_block = l_current_precinct->cblks.dec + cblkno;
-                                                       
-                                                       if (! opj_tcd_code_block_dec_allocate(l_code_block)) {
-                                                               return OPJ_FALSE;
-                                                       }
-                                                       /* code-block size (global) */
-                                                       l_code_block->x0 = opj_int_max(cblkxstart, l_current_precinct->x0);
-                                                       l_code_block->y0 = opj_int_max(cblkystart, l_current_precinct->y0);
-                                                       l_code_block->x1 = opj_int_min(cblkxend, l_current_precinct->x1);
-                                                       l_code_block->y1 = opj_int_min(cblkyend, l_current_precinct->y1);
-                                               }
-                                       }
-                                       ++l_current_precinct;
-                               } /* precno */
-                               ++l_band;
-                               ++l_step_size;
-                       } /* bandno */
-                       ++l_res;
-               } /* resno */
-               ++l_tccp;
-               ++l_tilec;
-               ++l_image_comp;
-       } /* compno */
-       return OPJ_TRUE;
+    OPJ_UINT32(*l_gain_ptr)(OPJ_UINT32) = 00;
+    OPJ_UINT32 compno, resno, bandno, precno, cblkno;
+    opj_tcp_t * l_tcp = 00;
+    opj_cp_t * l_cp = 00;
+    opj_tcd_tile_t * l_tile = 00;
+    opj_tccp_t *l_tccp = 00;
+    opj_tcd_tilecomp_t *l_tilec = 00;
+    opj_image_comp_t * l_image_comp = 00;
+    opj_tcd_resolution_t *l_res = 00;
+    opj_tcd_band_t *l_band = 00;
+    opj_stepsize_t * l_step_size = 00;
+    opj_tcd_precinct_t *l_current_precinct = 00;
+    opj_image_t *l_image = 00;
+    OPJ_UINT32 p, q;
+    OPJ_UINT32 l_level_no;
+    OPJ_UINT32 l_pdx, l_pdy;
+    OPJ_UINT32 l_gain;
+    OPJ_INT32 l_x0b, l_y0b;
+    OPJ_UINT32 l_tx0, l_ty0;
+    /* extent of precincts , top left, bottom right**/
+    OPJ_INT32 l_tl_prc_x_start, l_tl_prc_y_start, l_br_prc_x_end, l_br_prc_y_end;
+    /* number of precinct for a resolution */
+    OPJ_UINT32 l_nb_precincts;
+    /* room needed to store l_nb_precinct precinct for a resolution */
+    OPJ_UINT32 l_nb_precinct_size;
+    /* number of code blocks for a precinct*/
+    OPJ_UINT32 l_nb_code_blocks;
+    /* room needed to store l_nb_code_blocks code blocks for a precinct*/
+    OPJ_UINT32 l_nb_code_blocks_size;
+    /* size of data for a tile */
+    OPJ_UINT32 l_data_size;
+
+    l_cp = p_tcd->cp;
+    l_tcp = &(l_cp->tcps[p_tile_no]);
+    l_tile = p_tcd->tcd_image->tiles;
+    l_tccp = l_tcp->tccps;
+    l_tilec = l_tile->comps;
+    l_image = p_tcd->image;
+    l_image_comp = p_tcd->image->comps;
+
+    p = p_tile_no % l_cp->tw;       /* tile coordinates */
+    q = p_tile_no / l_cp->tw;
+    /*fprintf(stderr, "Tile coordinate = %d,%d\n", p, q);*/
+
+    /* 4 borders of the tile rescale on the image if necessary */
+    l_tx0 = l_cp->tx0 + p *
+            l_cp->tdx; /* can't be greater than l_image->x1 so won't overflow */
+    l_tile->x0 = (OPJ_INT32)opj_uint_max(l_tx0, l_image->x0);
+    l_tile->x1 = (OPJ_INT32)opj_uint_min(opj_uint_adds(l_tx0, l_cp->tdx),
+                                         l_image->x1);
+    /* all those OPJ_UINT32 are casted to OPJ_INT32, let's do some sanity check */
+    if ((l_tile->x0 < 0) || (l_tile->x1 <= l_tile->x0)) {
+        opj_event_msg(manager, EVT_ERROR, "Tile X coordinates are not supported\n");
+        return OPJ_FALSE;
+    }
+    l_ty0 = l_cp->ty0 + q *
+            l_cp->tdy; /* can't be greater than l_image->y1 so won't overflow */
+    l_tile->y0 = (OPJ_INT32)opj_uint_max(l_ty0, l_image->y0);
+    l_tile->y1 = (OPJ_INT32)opj_uint_min(opj_uint_adds(l_ty0, l_cp->tdy),
+                                         l_image->y1);
+    /* all those OPJ_UINT32 are casted to OPJ_INT32, let's do some sanity check */
+    if ((l_tile->y0 < 0) || (l_tile->y1 <= l_tile->y0)) {
+        opj_event_msg(manager, EVT_ERROR, "Tile Y coordinates are not supported\n");
+        return OPJ_FALSE;
+    }
+
+
+    /* testcase 1888.pdf.asan.35.988 */
+    if (l_tccp->numresolutions == 0) {
+        opj_event_msg(manager, EVT_ERROR, "tiles require at least one resolution\n");
+        return OPJ_FALSE;
+    }
+    /*fprintf(stderr, "Tile border = %d,%d,%d,%d\n", l_tile->x0, l_tile->y0,l_tile->x1,l_tile->y1);*/
+
+    /*tile->numcomps = image->numcomps; */
+    for (compno = 0; compno < l_tile->numcomps; ++compno) {
+        /*fprintf(stderr, "compno = %d/%d\n", compno, l_tile->numcomps);*/
+        l_image_comp->resno_decoded = 0;
+        /* border of each l_tile component (global) */
+        l_tilec->x0 = opj_int_ceildiv(l_tile->x0, (OPJ_INT32)l_image_comp->dx);
+        l_tilec->y0 = opj_int_ceildiv(l_tile->y0, (OPJ_INT32)l_image_comp->dy);
+        l_tilec->x1 = opj_int_ceildiv(l_tile->x1, (OPJ_INT32)l_image_comp->dx);
+        l_tilec->y1 = opj_int_ceildiv(l_tile->y1, (OPJ_INT32)l_image_comp->dy);
+        /*fprintf(stderr, "\tTile compo border = %d,%d,%d,%d\n", l_tilec->x0, l_tilec->y0,l_tilec->x1,l_tilec->y1);*/
+
+        /* compute l_data_size with overflow check */
+        l_data_size = (OPJ_UINT32)(l_tilec->x1 - l_tilec->x0);
+        /* issue 733, l_data_size == 0U, probably something wrong should be checked before getting here */
+        if ((l_data_size > 0U) &&
+                ((((OPJ_UINT32) - 1) / l_data_size) < (OPJ_UINT32)(l_tilec->y1 -
+                        l_tilec->y0))) {
+            opj_event_msg(manager, EVT_ERROR, "Not enough memory for tile data\n");
+            return OPJ_FALSE;
+        }
+        l_data_size = l_data_size * (OPJ_UINT32)(l_tilec->y1 - l_tilec->y0);
+
+        if ((((OPJ_UINT32) - 1) / (OPJ_UINT32)sizeof(OPJ_UINT32)) < l_data_size) {
+            opj_event_msg(manager, EVT_ERROR, "Not enough memory for tile data\n");
+            return OPJ_FALSE;
+        }
+        l_data_size = l_data_size * (OPJ_UINT32)sizeof(OPJ_UINT32);
+        l_tilec->numresolutions = l_tccp->numresolutions;
+        if (l_tccp->numresolutions < l_cp->m_specific_param.m_dec.m_reduce) {
+            l_tilec->minimum_num_resolutions = 1;
+        } else {
+            l_tilec->minimum_num_resolutions = l_tccp->numresolutions -
+                                               l_cp->m_specific_param.m_dec.m_reduce;
+        }
+
+        l_tilec->data_size_needed = l_data_size;
+        if (p_tcd->m_is_decoder && !opj_alloc_tile_component_data(l_tilec)) {
+            opj_event_msg(manager, EVT_ERROR, "Not enough memory for tile data\n");
+            return OPJ_FALSE;
+        }
+
+        l_data_size = l_tilec->numresolutions * (OPJ_UINT32)sizeof(
+                          opj_tcd_resolution_t);
+
+        if (l_tilec->resolutions == 00) {
+            l_tilec->resolutions = (opj_tcd_resolution_t *) opj_malloc(l_data_size);
+            if (! l_tilec->resolutions) {
+                return OPJ_FALSE;
+            }
+            /*fprintf(stderr, "\tAllocate resolutions of tilec (opj_tcd_resolution_t): %d\n",l_data_size);*/
+            l_tilec->resolutions_size = l_data_size;
+            memset(l_tilec->resolutions, 0, l_data_size);
+        } else if (l_data_size > l_tilec->resolutions_size) {
+            opj_tcd_resolution_t* new_resolutions = (opj_tcd_resolution_t *) opj_realloc(
+                    l_tilec->resolutions, l_data_size);
+            if (! new_resolutions) {
+                opj_event_msg(manager, EVT_ERROR, "Not enough memory for tile resolutions\n");
+                opj_free(l_tilec->resolutions);
+                l_tilec->resolutions = NULL;
+                l_tilec->resolutions_size = 0;
+                return OPJ_FALSE;
+            }
+            l_tilec->resolutions = new_resolutions;
+            /*fprintf(stderr, "\tReallocate data of tilec (int): from %d to %d x OPJ_UINT32\n", l_tilec->resolutions_size, l_data_size);*/
+            memset(((OPJ_BYTE*) l_tilec->resolutions) + l_tilec->resolutions_size, 0,
+                   l_data_size - l_tilec->resolutions_size);
+            l_tilec->resolutions_size = l_data_size;
+        }
+
+        l_level_no = l_tilec->numresolutions;
+        l_res = l_tilec->resolutions;
+        l_step_size = l_tccp->stepsizes;
+        if (l_tccp->qmfbid == 0) {
+            l_gain_ptr = &opj_dwt_getgain_real;
+        } else {
+            l_gain_ptr  = &opj_dwt_getgain;
+        }
+        /*fprintf(stderr, "\tlevel_no=%d\n",l_level_no);*/
+
+        for (resno = 0; resno < l_tilec->numresolutions; ++resno) {
+            /*fprintf(stderr, "\t\tresno = %d/%d\n", resno, l_tilec->numresolutions);*/
+            OPJ_INT32 tlcbgxstart, tlcbgystart /*, brcbgxend, brcbgyend*/;
+            OPJ_UINT32 cbgwidthexpn, cbgheightexpn;
+            OPJ_UINT32 cblkwidthexpn, cblkheightexpn;
+
+            --l_level_no;
+
+            /* border for each resolution level (global) */
+            l_res->x0 = opj_int_ceildivpow2(l_tilec->x0, (OPJ_INT32)l_level_no);
+            l_res->y0 = opj_int_ceildivpow2(l_tilec->y0, (OPJ_INT32)l_level_no);
+            l_res->x1 = opj_int_ceildivpow2(l_tilec->x1, (OPJ_INT32)l_level_no);
+            l_res->y1 = opj_int_ceildivpow2(l_tilec->y1, (OPJ_INT32)l_level_no);
+            /*fprintf(stderr, "\t\t\tres_x0= %d, res_y0 =%d, res_x1=%d, res_y1=%d\n", l_res->x0, l_res->y0, l_res->x1, l_res->y1);*/
+            /* p. 35, table A-23, ISO/IEC FDIS154444-1 : 2000 (18 august 2000) */
+            l_pdx = l_tccp->prcw[resno];
+            l_pdy = l_tccp->prch[resno];
+            /*fprintf(stderr, "\t\t\tpdx=%d, pdy=%d\n", l_pdx, l_pdy);*/
+            /* p. 64, B.6, ISO/IEC FDIS15444-1 : 2000 (18 august 2000)  */
+            l_tl_prc_x_start = opj_int_floordivpow2(l_res->x0, (OPJ_INT32)l_pdx) << l_pdx;
+            l_tl_prc_y_start = opj_int_floordivpow2(l_res->y0, (OPJ_INT32)l_pdy) << l_pdy;
+            l_br_prc_x_end = opj_int_ceildivpow2(l_res->x1, (OPJ_INT32)l_pdx) << l_pdx;
+            l_br_prc_y_end = opj_int_ceildivpow2(l_res->y1, (OPJ_INT32)l_pdy) << l_pdy;
+            /*fprintf(stderr, "\t\t\tprc_x_start=%d, prc_y_start=%d, br_prc_x_end=%d, br_prc_y_end=%d \n", l_tl_prc_x_start, l_tl_prc_y_start, l_br_prc_x_end ,l_br_prc_y_end );*/
+
+            l_res->pw = (l_res->x0 == l_res->x1) ? 0U : (OPJ_UINT32)((
+                            l_br_prc_x_end - l_tl_prc_x_start) >> l_pdx);
+            l_res->ph = (l_res->y0 == l_res->y1) ? 0U : (OPJ_UINT32)((
+                            l_br_prc_y_end - l_tl_prc_y_start) >> l_pdy);
+            /*fprintf(stderr, "\t\t\tres_pw=%d, res_ph=%d\n", l_res->pw, l_res->ph );*/
+
+            if ((l_res->pw != 0U) && ((((OPJ_UINT32) - 1) / l_res->pw) < l_res->ph)) {
+                opj_event_msg(manager, EVT_ERROR, "Not enough memory for tile data\n");
+                return OPJ_FALSE;
+            }
+            l_nb_precincts = l_res->pw * l_res->ph;
+
+            if ((((OPJ_UINT32) - 1) / (OPJ_UINT32)sizeof(opj_tcd_precinct_t)) <
+                    l_nb_precincts) {
+                opj_event_msg(manager, EVT_ERROR, "Not enough memory for tile data\n");
+                return OPJ_FALSE;
+            }
+            l_nb_precinct_size = l_nb_precincts * (OPJ_UINT32)sizeof(opj_tcd_precinct_t);
+
+            if (resno == 0) {
+                tlcbgxstart = l_tl_prc_x_start;
+                tlcbgystart = l_tl_prc_y_start;
+                /*brcbgxend = l_br_prc_x_end;*/
+                /* brcbgyend = l_br_prc_y_end;*/
+                cbgwidthexpn = l_pdx;
+                cbgheightexpn = l_pdy;
+                l_res->numbands = 1;
+            } else {
+                tlcbgxstart = opj_int_ceildivpow2(l_tl_prc_x_start, 1);
+                tlcbgystart = opj_int_ceildivpow2(l_tl_prc_y_start, 1);
+                /*brcbgxend = opj_int_ceildivpow2(l_br_prc_x_end, 1);*/
+                /*brcbgyend = opj_int_ceildivpow2(l_br_prc_y_end, 1);*/
+                cbgwidthexpn = l_pdx - 1;
+                cbgheightexpn = l_pdy - 1;
+                l_res->numbands = 3;
+            }
+
+            cblkwidthexpn = opj_uint_min(l_tccp->cblkw, cbgwidthexpn);
+            cblkheightexpn = opj_uint_min(l_tccp->cblkh, cbgheightexpn);
+            l_band = l_res->bands;
+
+            for (bandno = 0; bandno < l_res->numbands; ++bandno) {
+                OPJ_INT32 numbps;
+                /*fprintf(stderr, "\t\t\tband_no=%d/%d\n", bandno, l_res->numbands );*/
+
+                if (resno == 0) {
+                    l_band->bandno = 0 ;
+                    l_band->x0 = opj_int_ceildivpow2(l_tilec->x0, (OPJ_INT32)l_level_no);
+                    l_band->y0 = opj_int_ceildivpow2(l_tilec->y0, (OPJ_INT32)l_level_no);
+                    l_band->x1 = opj_int_ceildivpow2(l_tilec->x1, (OPJ_INT32)l_level_no);
+                    l_band->y1 = opj_int_ceildivpow2(l_tilec->y1, (OPJ_INT32)l_level_no);
+                } else {
+                    l_band->bandno = bandno + 1;
+                    /* x0b = 1 if bandno = 1 or 3 */
+                    l_x0b = l_band->bandno & 1;
+                    /* y0b = 1 if bandno = 2 or 3 */
+                    l_y0b = (OPJ_INT32)((l_band->bandno) >> 1);
+                    /* l_band border (global) */
+                    l_band->x0 = opj_int64_ceildivpow2(l_tilec->x0 - ((OPJ_INT64)l_x0b <<
+                                                       l_level_no), (OPJ_INT32)(l_level_no + 1));
+                    l_band->y0 = opj_int64_ceildivpow2(l_tilec->y0 - ((OPJ_INT64)l_y0b <<
+                                                       l_level_no), (OPJ_INT32)(l_level_no + 1));
+                    l_band->x1 = opj_int64_ceildivpow2(l_tilec->x1 - ((OPJ_INT64)l_x0b <<
+                                                       l_level_no), (OPJ_INT32)(l_level_no + 1));
+                    l_band->y1 = opj_int64_ceildivpow2(l_tilec->y1 - ((OPJ_INT64)l_y0b <<
+                                                       l_level_no), (OPJ_INT32)(l_level_no + 1));
+                }
+
+                /** avoid an if with storing function pointer */
+                l_gain = (*l_gain_ptr)(l_band->bandno);
+                numbps = (OPJ_INT32)(l_image_comp->prec + l_gain);
+                l_band->stepsize = (OPJ_FLOAT32)(((1.0 + l_step_size->mant / 2048.0) * pow(2.0,
+                                                  (OPJ_INT32)(numbps - l_step_size->expn)))) * fraction;
+                l_band->numbps = l_step_size->expn + (OPJ_INT32)l_tccp->numgbits -
+                                 1;      /* WHY -1 ? */
+
+                if (!l_band->precincts && (l_nb_precincts > 0U)) {
+                    l_band->precincts = (opj_tcd_precinct_t *) opj_malloc(/*3 * */
+                                            l_nb_precinct_size);
+                    if (! l_band->precincts) {
+                        opj_event_msg(manager, EVT_ERROR,
+                                      "Not enough memory to handle band precints\n");
+                        return OPJ_FALSE;
+                    }
+                    /*fprintf(stderr, "\t\t\t\tAllocate precincts of a band (opj_tcd_precinct_t): %d\n",l_nb_precinct_size);     */
+                    memset(l_band->precincts, 0, l_nb_precinct_size);
+                    l_band->precincts_data_size = l_nb_precinct_size;
+                } else if (l_band->precincts_data_size < l_nb_precinct_size) {
+
+                    opj_tcd_precinct_t * new_precincts = (opj_tcd_precinct_t *) opj_realloc(
+                            l_band->precincts,/*3 * */ l_nb_precinct_size);
+                    if (! new_precincts) {
+                        opj_event_msg(manager, EVT_ERROR,
+                                      "Not enough memory to handle band precints\n");
+                        opj_free(l_band->precincts);
+                        l_band->precincts = NULL;
+                        l_band->precincts_data_size = 0;
+                        return OPJ_FALSE;
+                    }
+                    l_band->precincts = new_precincts;
+                    /*fprintf(stderr, "\t\t\t\tReallocate precincts of a band (opj_tcd_precinct_t): from %d to %d\n",l_band->precincts_data_size, l_nb_precinct_size);*/
+                    memset(((OPJ_BYTE *) l_band->precincts) + l_band->precincts_data_size, 0,
+                           l_nb_precinct_size - l_band->precincts_data_size);
+                    l_band->precincts_data_size = l_nb_precinct_size;
+                }
+
+                l_current_precinct = l_band->precincts;
+                for (precno = 0; precno < l_nb_precincts; ++precno) {
+                    OPJ_INT32 tlcblkxstart, tlcblkystart, brcblkxend, brcblkyend;
+                    OPJ_INT32 cbgxstart = tlcbgxstart + (OPJ_INT32)(precno % l_res->pw) *
+                                          (1 << cbgwidthexpn);
+                    OPJ_INT32 cbgystart = tlcbgystart + (OPJ_INT32)(precno / l_res->pw) *
+                                          (1 << cbgheightexpn);
+                    OPJ_INT32 cbgxend = cbgxstart + (1 << cbgwidthexpn);
+                    OPJ_INT32 cbgyend = cbgystart + (1 << cbgheightexpn);
+                    /*fprintf(stderr, "\t precno=%d; bandno=%d, resno=%d; compno=%d\n", precno, bandno , resno, compno);*/
+                    /*fprintf(stderr, "\t tlcbgxstart(=%d) + (precno(=%d) percent res->pw(=%d)) * (1 << cbgwidthexpn(=%d)) \n",tlcbgxstart,precno,l_res->pw,cbgwidthexpn);*/
+
+                    /* precinct size (global) */
+                    /*fprintf(stderr, "\t cbgxstart=%d, l_band->x0 = %d \n",cbgxstart, l_band->x0);*/
+
+                    l_current_precinct->x0 = opj_int_max(cbgxstart, l_band->x0);
+                    l_current_precinct->y0 = opj_int_max(cbgystart, l_band->y0);
+                    l_current_precinct->x1 = opj_int_min(cbgxend, l_band->x1);
+                    l_current_precinct->y1 = opj_int_min(cbgyend, l_band->y1);
+                    /*fprintf(stderr, "\t prc_x0=%d; prc_y0=%d, prc_x1=%d; prc_y1=%d\n",l_current_precinct->x0, l_current_precinct->y0 ,l_current_precinct->x1, l_current_precinct->y1);*/
+
+                    tlcblkxstart = opj_int_floordivpow2(l_current_precinct->x0,
+                                                        (OPJ_INT32)cblkwidthexpn) << cblkwidthexpn;
+                    /*fprintf(stderr, "\t tlcblkxstart =%d\n",tlcblkxstart );*/
+                    tlcblkystart = opj_int_floordivpow2(l_current_precinct->y0,
+                                                        (OPJ_INT32)cblkheightexpn) << cblkheightexpn;
+                    /*fprintf(stderr, "\t tlcblkystart =%d\n",tlcblkystart );*/
+                    brcblkxend = opj_int_ceildivpow2(l_current_precinct->x1,
+                                                     (OPJ_INT32)cblkwidthexpn) << cblkwidthexpn;
+                    /*fprintf(stderr, "\t brcblkxend =%d\n",brcblkxend );*/
+                    brcblkyend = opj_int_ceildivpow2(l_current_precinct->y1,
+                                                     (OPJ_INT32)cblkheightexpn) << cblkheightexpn;
+                    /*fprintf(stderr, "\t brcblkyend =%d\n",brcblkyend );*/
+                    l_current_precinct->cw = (OPJ_UINT32)((brcblkxend - tlcblkxstart) >>
+                                                          cblkwidthexpn);
+                    l_current_precinct->ch = (OPJ_UINT32)((brcblkyend - tlcblkystart) >>
+                                                          cblkheightexpn);
+
+                    l_nb_code_blocks = l_current_precinct->cw * l_current_precinct->ch;
+                    /*fprintf(stderr, "\t\t\t\t precinct_cw = %d x recinct_ch = %d\n",l_current_precinct->cw, l_current_precinct->ch);      */
+                    l_nb_code_blocks_size = l_nb_code_blocks * (OPJ_UINT32)sizeof_block;
+
+                    if (!l_current_precinct->cblks.blocks && (l_nb_code_blocks > 0U)) {
+                        l_current_precinct->cblks.blocks = opj_malloc(l_nb_code_blocks_size);
+                        if (! l_current_precinct->cblks.blocks) {
+                            return OPJ_FALSE;
+                        }
+                        /*fprintf(stderr, "\t\t\t\tAllocate cblks of a precinct (opj_tcd_cblk_dec_t): %d\n",l_nb_code_blocks_size);*/
+
+                        memset(l_current_precinct->cblks.blocks, 0, l_nb_code_blocks_size);
+
+                        l_current_precinct->block_size = l_nb_code_blocks_size;
+                    } else if (l_nb_code_blocks_size > l_current_precinct->block_size) {
+                        void *new_blocks = opj_realloc(l_current_precinct->cblks.blocks,
+                                                       l_nb_code_blocks_size);
+                        if (! new_blocks) {
+                            opj_free(l_current_precinct->cblks.blocks);
+                            l_current_precinct->cblks.blocks = NULL;
+                            l_current_precinct->block_size = 0;
+                            opj_event_msg(manager, EVT_ERROR,
+                                          "Not enough memory for current precinct codeblock element\n");
+                            return OPJ_FALSE;
+                        }
+                        l_current_precinct->cblks.blocks = new_blocks;
+                        /*fprintf(stderr, "\t\t\t\tReallocate cblks of a precinct (opj_tcd_cblk_dec_t): from %d to %d\n",l_current_precinct->block_size, l_nb_code_blocks_size);     */
+
+                        memset(((OPJ_BYTE *) l_current_precinct->cblks.blocks) +
+                               l_current_precinct->block_size
+                               , 0
+                               , l_nb_code_blocks_size - l_current_precinct->block_size);
+
+                        l_current_precinct->block_size = l_nb_code_blocks_size;
+                    }
+
+                    if (! l_current_precinct->incltree) {
+                        l_current_precinct->incltree = opj_tgt_create(l_current_precinct->cw,
+                                                       l_current_precinct->ch, manager);
+                    } else {
+                        l_current_precinct->incltree = opj_tgt_init(l_current_precinct->incltree,
+                                                       l_current_precinct->cw, l_current_precinct->ch, manager);
+                    }
+
+                    if (! l_current_precinct->imsbtree) {
+                        l_current_precinct->imsbtree = opj_tgt_create(l_current_precinct->cw,
+                                                       l_current_precinct->ch, manager);
+                    } else {
+                        l_current_precinct->imsbtree = opj_tgt_init(l_current_precinct->imsbtree,
+                                                       l_current_precinct->cw, l_current_precinct->ch, manager);
+                    }
+
+                    for (cblkno = 0; cblkno < l_nb_code_blocks; ++cblkno) {
+                        OPJ_INT32 cblkxstart = tlcblkxstart + (OPJ_INT32)(cblkno %
+                                               l_current_precinct->cw) * (1 << cblkwidthexpn);
+                        OPJ_INT32 cblkystart = tlcblkystart + (OPJ_INT32)(cblkno /
+                                               l_current_precinct->cw) * (1 << cblkheightexpn);
+                        OPJ_INT32 cblkxend = cblkxstart + (1 << cblkwidthexpn);
+                        OPJ_INT32 cblkyend = cblkystart + (1 << cblkheightexpn);
+
+                        if (isEncoder) {
+                            opj_tcd_cblk_enc_t* l_code_block = l_current_precinct->cblks.enc + cblkno;
+
+                            if (! opj_tcd_code_block_enc_allocate(l_code_block)) {
+                                return OPJ_FALSE;
+                            }
+                            /* code-block size (global) */
+                            l_code_block->x0 = opj_int_max(cblkxstart, l_current_precinct->x0);
+                            l_code_block->y0 = opj_int_max(cblkystart, l_current_precinct->y0);
+                            l_code_block->x1 = opj_int_min(cblkxend, l_current_precinct->x1);
+                            l_code_block->y1 = opj_int_min(cblkyend, l_current_precinct->y1);
+
+                            if (! opj_tcd_code_block_enc_allocate_data(l_code_block)) {
+                                return OPJ_FALSE;
+                            }
+                        } else {
+                            opj_tcd_cblk_dec_t* l_code_block = l_current_precinct->cblks.dec + cblkno;
+
+                            if (! opj_tcd_code_block_dec_allocate(l_code_block)) {
+                                return OPJ_FALSE;
+                            }
+                            /* code-block size (global) */
+                            l_code_block->x0 = opj_int_max(cblkxstart, l_current_precinct->x0);
+                            l_code_block->y0 = opj_int_max(cblkystart, l_current_precinct->y0);
+                            l_code_block->x1 = opj_int_min(cblkxend, l_current_precinct->x1);
+                            l_code_block->y1 = opj_int_min(cblkyend, l_current_precinct->y1);
+                        }
+                    }
+                    ++l_current_precinct;
+                } /* precno */
+                ++l_band;
+                ++l_step_size;
+            } /* bandno */
+            ++l_res;
+        } /* resno */
+        ++l_tccp;
+        ++l_tilec;
+        ++l_image_comp;
+    } /* compno */
+    return OPJ_TRUE;
 }
 
-OPJ_BOOL opj_tcd_init_encode_tile (opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no, opj_event_mgr_t* p_manager)
+OPJ_BOOL opj_tcd_init_encode_tile(opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no,
+                                  opj_event_mgr_t* p_manager)
 {
-       return opj_tcd_init_tile(p_tcd, p_tile_no, OPJ_TRUE, 1.0F, sizeof(opj_tcd_cblk_enc_t), p_manager);
+    return opj_tcd_init_tile(p_tcd, p_tile_no, OPJ_TRUE, 1.0F,
+                             sizeof(opj_tcd_cblk_enc_t), p_manager);
 }
 
-OPJ_BOOL opj_tcd_init_decode_tile (opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no, opj_event_mgr_t* p_manager)
+OPJ_BOOL opj_tcd_init_decode_tile(opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no,
+                                  opj_event_mgr_t* p_manager)
 {
-       return opj_tcd_init_tile(p_tcd, p_tile_no, OPJ_FALSE, 0.5F, sizeof(opj_tcd_cblk_dec_t), p_manager);
+    return opj_tcd_init_tile(p_tcd, p_tile_no, OPJ_FALSE, 0.5F,
+                             sizeof(opj_tcd_cblk_dec_t), p_manager);
 }
 
 /**
  * Allocates memory for an encoding code block (but not data memory).
  */
-static OPJ_BOOL opj_tcd_code_block_enc_allocate (opj_tcd_cblk_enc_t * p_code_block)
+static OPJ_BOOL opj_tcd_code_block_enc_allocate(opj_tcd_cblk_enc_t *
+        p_code_block)
 {
-       if (! p_code_block->layers) {
-               /* no memset since data */
-               p_code_block->layers = (opj_tcd_layer_t*) opj_calloc(100, sizeof(opj_tcd_layer_t));
-               if (! p_code_block->layers) {
-                       return OPJ_FALSE;
-               }
-       }
-       if (! p_code_block->passes) {
-               p_code_block->passes = (opj_tcd_pass_t*) opj_calloc(100, sizeof(opj_tcd_pass_t));
-               if (! p_code_block->passes) {
-                       return OPJ_FALSE;
-               }
-       }
-       return OPJ_TRUE;
+    if (! p_code_block->layers) {
+        /* no memset since data */
+        p_code_block->layers = (opj_tcd_layer_t*) opj_calloc(100,
+                               sizeof(opj_tcd_layer_t));
+        if (! p_code_block->layers) {
+            return OPJ_FALSE;
+        }
+    }
+    if (! p_code_block->passes) {
+        p_code_block->passes = (opj_tcd_pass_t*) opj_calloc(100,
+                               sizeof(opj_tcd_pass_t));
+        if (! p_code_block->passes) {
+            return OPJ_FALSE;
+        }
+    }
+    return OPJ_TRUE;
 }
 
 /**
  * Allocates data memory for an encoding code block.
  */
-static OPJ_BOOL opj_tcd_code_block_enc_allocate_data (opj_tcd_cblk_enc_t * p_code_block)
+static OPJ_BOOL opj_tcd_code_block_enc_allocate_data(opj_tcd_cblk_enc_t *
+        p_code_block)
 {
-       OPJ_UINT32 l_data_size;
-       
-       l_data_size = (OPJ_UINT32)((p_code_block->x1 - p_code_block->x0) * (p_code_block->y1 - p_code_block->y0) * (OPJ_INT32)sizeof(OPJ_UINT32));
-       
-       if (l_data_size > p_code_block->data_size) {
-               if (p_code_block->data) {
-                       opj_free(p_code_block->data - 1); /* again, why -1 */
-               }
-               p_code_block->data = (OPJ_BYTE*) opj_malloc(l_data_size+1);
-               if(! p_code_block->data) {
-                       p_code_block->data_size = 0U;
-                       return OPJ_FALSE;
-               }
-               p_code_block->data_size = l_data_size;
-               
-               p_code_block->data[0] = 0;
-               p_code_block->data+=1;   /*why +1 ?*/
-       }
-       return OPJ_TRUE;
-}
+    OPJ_UINT32 l_data_size;
 
-/**
- * Allocates memory for a decoding code block.
- */
-static OPJ_BOOL opj_tcd_code_block_dec_allocate (opj_tcd_cblk_dec_t * p_code_block)
-{
-        if (! p_code_block->data) {
+    l_data_size = (OPJ_UINT32)((p_code_block->x1 - p_code_block->x0) *
+                               (p_code_block->y1 - p_code_block->y0) * (OPJ_INT32)sizeof(OPJ_UINT32));
 
-                p_code_block->data = (OPJ_BYTE*) opj_malloc(OPJ_J2K_DEFAULT_CBLK_DATA_SIZE);
-                if (! p_code_block->data) {
-                        return OPJ_FALSE;
-                }
-                p_code_block->data_max_size = OPJ_J2K_DEFAULT_CBLK_DATA_SIZE;
-                /*fprintf(stderr, "Allocate 8192 elements of code_block->data\n");*/
-
-                p_code_block->segs = (opj_tcd_seg_t *) opj_calloc(OPJ_J2K_DEFAULT_NB_SEGS,sizeof(opj_tcd_seg_t));
-                if (! p_code_block->segs) {
-                        return OPJ_FALSE;
-                }
-                /*fprintf(stderr, "Allocate %d elements of code_block->data\n", OPJ_J2K_DEFAULT_NB_SEGS * sizeof(opj_tcd_seg_t));*/
-
-                p_code_block->m_current_max_segs = OPJ_J2K_DEFAULT_NB_SEGS;
-                /*fprintf(stderr, "m_current_max_segs of code_block->data = %d\n", p_code_block->m_current_max_segs);*/
-        } else {
-                                       /* sanitize */
-                                       OPJ_BYTE* l_data = p_code_block->data;
-                                       OPJ_UINT32 l_data_max_size = p_code_block->data_max_size;
-                                       opj_tcd_seg_t * l_segs = p_code_block->segs;
-                                       OPJ_UINT32 l_current_max_segs = p_code_block->m_current_max_segs;
-
-                                       memset(p_code_block, 0, sizeof(opj_tcd_cblk_dec_t));
-                                       p_code_block->data = l_data;
-                                       p_code_block->data_max_size = l_data_max_size;
-                                       p_code_block->segs = l_segs;
-                                       p_code_block->m_current_max_segs = l_current_max_segs;
-                               }
+    if (l_data_size > p_code_block->data_size) {
+        if (p_code_block->data) {
+            opj_free(p_code_block->data - 1); /* again, why -1 */
+        }
+        p_code_block->data = (OPJ_BYTE*) opj_malloc(l_data_size + 1);
+        if (! p_code_block->data) {
+            p_code_block->data_size = 0U;
+            return OPJ_FALSE;
+        }
+        p_code_block->data_size = l_data_size;
 
-        return OPJ_TRUE;
+        p_code_block->data[0] = 0;
+        p_code_block->data += 1; /*why +1 ?*/
+    }
+    return OPJ_TRUE;
 }
 
-OPJ_UINT32 opj_tcd_get_decoded_tile_size ( opj_tcd_t *p_tcd )
+/**
+ * Allocates memory for a decoding code block.
+ */
+static OPJ_BOOL opj_tcd_code_block_dec_allocate(opj_tcd_cblk_dec_t *
+        p_code_block)
 {
-        OPJ_UINT32 i;
-        OPJ_UINT32 l_data_size = 0;
-        opj_image_comp_t * l_img_comp = 00;
-        opj_tcd_tilecomp_t * l_tile_comp = 00;
-        opj_tcd_resolution_t * l_res = 00;
-        OPJ_UINT32 l_size_comp, l_remaining;
-
-        l_tile_comp = p_tcd->tcd_image->tiles->comps;
-        l_img_comp = p_tcd->image->comps;
-
-        for (i=0;i<p_tcd->image->numcomps;++i) {
-                l_size_comp = l_img_comp->prec >> 3; /*(/ 8)*/
-                l_remaining = l_img_comp->prec & 7;  /* (%8) */
+    if (! p_code_block->data) {
 
-                if(l_remaining) {
-                        ++l_size_comp;
-                }
-
-                if (l_size_comp == 3) {
-                        l_size_comp = 4;
-                }
-
-                l_res = l_tile_comp->resolutions + l_tile_comp->minimum_num_resolutions - 1;
-                l_data_size += l_size_comp * (OPJ_UINT32)((l_res->x1 - l_res->x0) * (l_res->y1 - l_res->y0));
-                ++l_img_comp;
-                ++l_tile_comp;
+        p_code_block->data = (OPJ_BYTE*) opj_malloc(OPJ_J2K_DEFAULT_CBLK_DATA_SIZE);
+        if (! p_code_block->data) {
+            return OPJ_FALSE;
         }
+        p_code_block->data_max_size = OPJ_J2K_DEFAULT_CBLK_DATA_SIZE;
+        /*fprintf(stderr, "Allocate 8192 elements of code_block->data\n");*/
 
-        return l_data_size;
+        p_code_block->segs = (opj_tcd_seg_t *) opj_calloc(OPJ_J2K_DEFAULT_NB_SEGS,
+                             sizeof(opj_tcd_seg_t));
+        if (! p_code_block->segs) {
+            return OPJ_FALSE;
+        }
+        /*fprintf(stderr, "Allocate %d elements of code_block->data\n", OPJ_J2K_DEFAULT_NB_SEGS * sizeof(opj_tcd_seg_t));*/
+
+        p_code_block->m_current_max_segs = OPJ_J2K_DEFAULT_NB_SEGS;
+        /*fprintf(stderr, "m_current_max_segs of code_block->data = %d\n", p_code_block->m_current_max_segs);*/
+    } else {
+        /* sanitize */
+        OPJ_BYTE* l_data = p_code_block->data;
+        OPJ_UINT32 l_data_max_size = p_code_block->data_max_size;
+        opj_tcd_seg_t * l_segs = p_code_block->segs;
+        OPJ_UINT32 l_current_max_segs = p_code_block->m_current_max_segs;
+
+        memset(p_code_block, 0, sizeof(opj_tcd_cblk_dec_t));
+        p_code_block->data = l_data;
+        p_code_block->data_max_size = l_data_max_size;
+        p_code_block->segs = l_segs;
+        p_code_block->m_current_max_segs = l_current_max_segs;
+    }
+
+    return OPJ_TRUE;
 }
 
-OPJ_BOOL opj_tcd_encode_tile(   opj_tcd_t *p_tcd,
-                                                        OPJ_UINT32 p_tile_no,
-                                                        OPJ_BYTE *p_dest,
-                                                        OPJ_UINT32 * p_data_written,
-                                                        OPJ_UINT32 p_max_length,
-                                                        opj_codestream_info_t *p_cstr_info)
+OPJ_UINT32 opj_tcd_get_decoded_tile_size(opj_tcd_t *p_tcd)
 {
-
-        if (p_tcd->cur_tp_num == 0) {
-
-                p_tcd->tcd_tileno = p_tile_no;
-                p_tcd->tcp = &p_tcd->cp->tcps[p_tile_no];
-
-                /* INDEX >> "Precinct_nb_X et Precinct_nb_Y" */
-                if(p_cstr_info)  {
-                        OPJ_UINT32 l_num_packs = 0;
-                        OPJ_UINT32 i;
-                        opj_tcd_tilecomp_t *l_tilec_idx = &p_tcd->tcd_image->tiles->comps[0];        /* based on component 0 */
-                        opj_tccp_t *l_tccp = p_tcd->tcp->tccps; /* based on component 0 */
-
-                        for (i = 0; i < l_tilec_idx->numresolutions; i++) {
-                                opj_tcd_resolution_t *l_res_idx = &l_tilec_idx->resolutions[i];
-
-                                p_cstr_info->tile[p_tile_no].pw[i] = (int)l_res_idx->pw;
-                                p_cstr_info->tile[p_tile_no].ph[i] = (int)l_res_idx->ph;
-
-                                l_num_packs += l_res_idx->pw * l_res_idx->ph;
-                                p_cstr_info->tile[p_tile_no].pdx[i] = (int)l_tccp->prcw[i];
-                                p_cstr_info->tile[p_tile_no].pdy[i] = (int)l_tccp->prch[i];
-                        }
-                        p_cstr_info->tile[p_tile_no].packet = (opj_packet_info_t*) opj_calloc((size_t)p_cstr_info->numcomps * (size_t)p_cstr_info->numlayers * l_num_packs, sizeof(opj_packet_info_t));
-                        if (!p_cstr_info->tile[p_tile_no].packet) {
-                                /* FIXME event manager error callback */
-                                return OPJ_FALSE;
-                        }
-                }
-                /* << INDEX */
-
-                /* FIXME _ProfStart(PGROUP_DC_SHIFT); */
-                /*---------------TILE-------------------*/
-                if (! opj_tcd_dc_level_shift_encode(p_tcd)) {
-                        return OPJ_FALSE;
-                }
-                /* FIXME _ProfStop(PGROUP_DC_SHIFT); */
-
-                /* FIXME _ProfStart(PGROUP_MCT); */
-                if (! opj_tcd_mct_encode(p_tcd)) {
-                        return OPJ_FALSE;
-                }
-                /* FIXME _ProfStop(PGROUP_MCT); */
-
-                /* FIXME _ProfStart(PGROUP_DWT); */
-                if (! opj_tcd_dwt_encode(p_tcd)) {
-                        return OPJ_FALSE;
-                }
-                /* FIXME  _ProfStop(PGROUP_DWT); */
-
-                /* FIXME  _ProfStart(PGROUP_T1); */
-                if (! opj_tcd_t1_encode(p_tcd)) {
-                        return OPJ_FALSE;
-                }
-                /* FIXME _ProfStop(PGROUP_T1); */
-
-                /* FIXME _ProfStart(PGROUP_RATE); */
-                if (! opj_tcd_rate_allocate_encode(p_tcd,p_dest,p_max_length,p_cstr_info)) {
-                        return OPJ_FALSE;
-                }
-                /* FIXME _ProfStop(PGROUP_RATE); */
-
+    OPJ_UINT32 i;
+    OPJ_UINT32 l_data_size = 0;
+    opj_image_comp_t * l_img_comp = 00;
+    opj_tcd_tilecomp_t * l_tile_comp = 00;
+    opj_tcd_resolution_t * l_res = 00;
+    OPJ_UINT32 l_size_comp, l_remaining;
+
+    l_tile_comp = p_tcd->tcd_image->tiles->comps;
+    l_img_comp = p_tcd->image->comps;
+
+    for (i = 0; i < p_tcd->image->numcomps; ++i) {
+        l_size_comp = l_img_comp->prec >> 3; /*(/ 8)*/
+        l_remaining = l_img_comp->prec & 7;  /* (%8) */
+
+        if (l_remaining) {
+            ++l_size_comp;
         }
-        /*--------------TIER2------------------*/
 
-        /* INDEX */
-        if (p_cstr_info) {
-                p_cstr_info->index_write = 1;
+        if (l_size_comp == 3) {
+            l_size_comp = 4;
         }
-        /* FIXME _ProfStart(PGROUP_T2); */
 
-        if (! opj_tcd_t2_encode(p_tcd,p_dest,p_data_written,p_max_length,p_cstr_info)) {
-                return OPJ_FALSE;
-        }
-        /* FIXME _ProfStop(PGROUP_T2); */
-
-        /*---------------CLEAN-------------------*/
+        l_res = l_tile_comp->resolutions + l_tile_comp->minimum_num_resolutions - 1;
+        l_data_size += l_size_comp * (OPJ_UINT32)((l_res->x1 - l_res->x0) *
+                       (l_res->y1 - l_res->y0));
+        ++l_img_comp;
+        ++l_tile_comp;
+    }
 
-        return OPJ_TRUE;
+    return l_data_size;
 }
 
-OPJ_BOOL opj_tcd_decode_tile(   opj_tcd_t *p_tcd,
-                                OPJ_BYTE *p_src,
-                                OPJ_UINT32 p_max_length,
-                                OPJ_UINT32 p_tile_no,
-                                opj_codestream_index_t *p_cstr_index,
-                                opj_event_mgr_t *p_manager
-                                )
+OPJ_BOOL opj_tcd_encode_tile(opj_tcd_t *p_tcd,
+                             OPJ_UINT32 p_tile_no,
+                             OPJ_BYTE *p_dest,
+                             OPJ_UINT32 * p_data_written,
+                             OPJ_UINT32 p_max_length,
+                             opj_codestream_info_t *p_cstr_info)
 {
-        OPJ_UINT32 l_data_read;
+
+    if (p_tcd->cur_tp_num == 0) {
+
         p_tcd->tcd_tileno = p_tile_no;
-        p_tcd->tcp = &(p_tcd->cp->tcps[p_tile_no]);
+        p_tcd->tcp = &p_tcd->cp->tcps[p_tile_no];
 
-#ifdef TODO_MSD /* FIXME */
-        /* INDEX >>  */
-        if(p_cstr_info) {
-                OPJ_UINT32 resno, compno, numprec = 0;
-                for (compno = 0; compno < (OPJ_UINT32) p_cstr_info->numcomps; compno++) {
-                        opj_tcp_t *tcp = &p_tcd->cp->tcps[0];
-                        opj_tccp_t *tccp = &tcp->tccps[compno];
-                        opj_tcd_tilecomp_t *tilec_idx = &p_tcd->tcd_image->tiles->comps[compno];
-                        for (resno = 0; resno < tilec_idx->numresolutions; resno++) {
-                                opj_tcd_resolution_t *res_idx = &tilec_idx->resolutions[resno];
-                                p_cstr_info->tile[p_tile_no].pw[resno] = res_idx->pw;
-                                p_cstr_info->tile[p_tile_no].ph[resno] = res_idx->ph;
-                                numprec += res_idx->pw * res_idx->ph;
-                                p_cstr_info->tile[p_tile_no].pdx[resno] = tccp->prcw[resno];
-                                p_cstr_info->tile[p_tile_no].pdy[resno] = tccp->prch[resno];
-                        }
-                }
-                p_cstr_info->tile[p_tile_no].packet = (opj_packet_info_t *) opj_malloc(p_cstr_info->numlayers * numprec * sizeof(opj_packet_info_t));
-                p_cstr_info->packno = 0;
+        /* INDEX >> "Precinct_nb_X et Precinct_nb_Y" */
+        if (p_cstr_info)  {
+            OPJ_UINT32 l_num_packs = 0;
+            OPJ_UINT32 i;
+            opj_tcd_tilecomp_t *l_tilec_idx =
+                &p_tcd->tcd_image->tiles->comps[0];        /* based on component 0 */
+            opj_tccp_t *l_tccp = p_tcd->tcp->tccps; /* based on component 0 */
+
+            for (i = 0; i < l_tilec_idx->numresolutions; i++) {
+                opj_tcd_resolution_t *l_res_idx = &l_tilec_idx->resolutions[i];
+
+                p_cstr_info->tile[p_tile_no].pw[i] = (int)l_res_idx->pw;
+                p_cstr_info->tile[p_tile_no].ph[i] = (int)l_res_idx->ph;
+
+                l_num_packs += l_res_idx->pw * l_res_idx->ph;
+                p_cstr_info->tile[p_tile_no].pdx[i] = (int)l_tccp->prcw[i];
+                p_cstr_info->tile[p_tile_no].pdy[i] = (int)l_tccp->prch[i];
+            }
+            p_cstr_info->tile[p_tile_no].packet = (opj_packet_info_t*) opj_calloc((
+                    size_t)p_cstr_info->numcomps * (size_t)p_cstr_info->numlayers * l_num_packs,
+                                                  sizeof(opj_packet_info_t));
+            if (!p_cstr_info->tile[p_tile_no].packet) {
+                /* FIXME event manager error callback */
+                return OPJ_FALSE;
+            }
         }
         /* << INDEX */
-#endif
 
-        /*--------------TIER2------------------*/
-        /* FIXME _ProfStart(PGROUP_T2); */
-        l_data_read = 0;
-        if (! opj_tcd_t2_decode(p_tcd, p_src, &l_data_read, p_max_length, p_cstr_index, p_manager))
-        {
-                return OPJ_FALSE;
+        /* FIXME _ProfStart(PGROUP_DC_SHIFT); */
+        /*---------------TILE-------------------*/
+        if (! opj_tcd_dc_level_shift_encode(p_tcd)) {
+            return OPJ_FALSE;
         }
-        /* FIXME _ProfStop(PGROUP_T2); */
-
-        /*------------------TIER1-----------------*/
+        /* FIXME _ProfStop(PGROUP_DC_SHIFT); */
 
-        /* FIXME _ProfStart(PGROUP_T1); */
-        if
-                (! opj_tcd_t1_decode(p_tcd))
-        {
-                return OPJ_FALSE;
+        /* FIXME _ProfStart(PGROUP_MCT); */
+        if (! opj_tcd_mct_encode(p_tcd)) {
+            return OPJ_FALSE;
         }
-        /* FIXME _ProfStop(PGROUP_T1); */
-
-        /*----------------DWT---------------------*/
+        /* FIXME _ProfStop(PGROUP_MCT); */
 
         /* FIXME _ProfStart(PGROUP_DWT); */
-        if
-                (! opj_tcd_dwt_decode(p_tcd))
-        {
-                return OPJ_FALSE;
+        if (! opj_tcd_dwt_encode(p_tcd)) {
+            return OPJ_FALSE;
         }
-        /* FIXME _ProfStop(PGROUP_DWT); */
+        /* FIXME  _ProfStop(PGROUP_DWT); */
 
-        /*----------------MCT-------------------*/
-        /* FIXME _ProfStart(PGROUP_MCT); */
-        if
-                (! opj_tcd_mct_decode(p_tcd, p_manager))
-        {
-                return OPJ_FALSE;
+        /* FIXME  _ProfStart(PGROUP_T1); */
+        if (! opj_tcd_t1_encode(p_tcd)) {
+            return OPJ_FALSE;
         }
-        /* FIXME _ProfStop(PGROUP_MCT); */
+        /* FIXME _ProfStop(PGROUP_T1); */
 
-        /* FIXME _ProfStart(PGROUP_DC_SHIFT); */
-        if
-                (! opj_tcd_dc_level_shift_decode(p_tcd))
-        {
-                return OPJ_FALSE;
+        /* FIXME _ProfStart(PGROUP_RATE); */
+        if (! opj_tcd_rate_allocate_encode(p_tcd, p_dest, p_max_length, p_cstr_info)) {
+            return OPJ_FALSE;
         }
-        /* FIXME _ProfStop(PGROUP_DC_SHIFT); */
+        /* FIXME _ProfStop(PGROUP_RATE); */
 
+    }
+    /*--------------TIER2------------------*/
 
-        /*---------------TILE-------------------*/
-        return OPJ_TRUE;
+    /* INDEX */
+    if (p_cstr_info) {
+        p_cstr_info->index_write = 1;
+    }
+    /* FIXME _ProfStart(PGROUP_T2); */
+
+    if (! opj_tcd_t2_encode(p_tcd, p_dest, p_data_written, p_max_length,
+                            p_cstr_info)) {
+        return OPJ_FALSE;
+    }
+    /* FIXME _ProfStop(PGROUP_T2); */
+
+    /*---------------CLEAN-------------------*/
+
+    return OPJ_TRUE;
 }
 
-OPJ_BOOL opj_tcd_update_tile_data ( opj_tcd_t *p_tcd,
-                                    OPJ_BYTE * p_dest,
-                                    OPJ_UINT32 p_dest_length
-                                    )
+OPJ_BOOL opj_tcd_decode_tile(opj_tcd_t *p_tcd,
+                             OPJ_BYTE *p_src,
+                             OPJ_UINT32 p_max_length,
+                             OPJ_UINT32 p_tile_no,
+                             opj_codestream_index_t *p_cstr_index,
+                             opj_event_mgr_t *p_manager
+                            )
 {
-        OPJ_UINT32 i,j,k,l_data_size = 0;
-        opj_image_comp_t * l_img_comp = 00;
-        opj_tcd_tilecomp_t * l_tilec = 00;
-        opj_tcd_resolution_t * l_res;
-        OPJ_UINT32 l_size_comp, l_remaining;
-        OPJ_UINT32 l_stride, l_width,l_height;
-
-        l_data_size = opj_tcd_get_decoded_tile_size(p_tcd);
-        if (l_data_size > p_dest_length) {
-                return OPJ_FALSE;
+    OPJ_UINT32 l_data_read;
+    p_tcd->tcd_tileno = p_tile_no;
+    p_tcd->tcp = &(p_tcd->cp->tcps[p_tile_no]);
+
+#ifdef TODO_MSD /* FIXME */
+    /* INDEX >>  */
+    if (p_cstr_info) {
+        OPJ_UINT32 resno, compno, numprec = 0;
+        for (compno = 0; compno < (OPJ_UINT32) p_cstr_info->numcomps; compno++) {
+            opj_tcp_t *tcp = &p_tcd->cp->tcps[0];
+            opj_tccp_t *tccp = &tcp->tccps[compno];
+            opj_tcd_tilecomp_t *tilec_idx = &p_tcd->tcd_image->tiles->comps[compno];
+            for (resno = 0; resno < tilec_idx->numresolutions; resno++) {
+                opj_tcd_resolution_t *res_idx = &tilec_idx->resolutions[resno];
+                p_cstr_info->tile[p_tile_no].pw[resno] = res_idx->pw;
+                p_cstr_info->tile[p_tile_no].ph[resno] = res_idx->ph;
+                numprec += res_idx->pw * res_idx->ph;
+                p_cstr_info->tile[p_tile_no].pdx[resno] = tccp->prcw[resno];
+                p_cstr_info->tile[p_tile_no].pdy[resno] = tccp->prch[resno];
+            }
         }
+        p_cstr_info->tile[p_tile_no].packet = (opj_packet_info_t *) opj_malloc(
+                p_cstr_info->numlayers * numprec * sizeof(opj_packet_info_t));
+        p_cstr_info->packno = 0;
+    }
+    /* << INDEX */
+#endif
 
-        l_tilec = p_tcd->tcd_image->tiles->comps;
-        l_img_comp = p_tcd->image->comps;
+    /*--------------TIER2------------------*/
+    /* FIXME _ProfStart(PGROUP_T2); */
+    l_data_read = 0;
+    if (! opj_tcd_t2_decode(p_tcd, p_src, &l_data_read, p_max_length, p_cstr_index,
+                            p_manager)) {
+        return OPJ_FALSE;
+    }
+    /* FIXME _ProfStop(PGROUP_T2); */
+
+    /*------------------TIER1-----------------*/
+
+    /* FIXME _ProfStart(PGROUP_T1); */
+    if
+    (! opj_tcd_t1_decode(p_tcd)) {
+        return OPJ_FALSE;
+    }
+    /* FIXME _ProfStop(PGROUP_T1); */
+
+    /*----------------DWT---------------------*/
+
+    /* FIXME _ProfStart(PGROUP_DWT); */
+    if
+    (! opj_tcd_dwt_decode(p_tcd)) {
+        return OPJ_FALSE;
+    }
+    /* FIXME _ProfStop(PGROUP_DWT); */
+
+    /*----------------MCT-------------------*/
+    /* FIXME _ProfStart(PGROUP_MCT); */
+    if
+    (! opj_tcd_mct_decode(p_tcd, p_manager)) {
+        return OPJ_FALSE;
+    }
+    /* FIXME _ProfStop(PGROUP_MCT); */
+
+    /* FIXME _ProfStart(PGROUP_DC_SHIFT); */
+    if
+    (! opj_tcd_dc_level_shift_decode(p_tcd)) {
+        return OPJ_FALSE;
+    }
+    /* FIXME _ProfStop(PGROUP_DC_SHIFT); */
+
+
+    /*---------------TILE-------------------*/
+    return OPJ_TRUE;
+}
 
-        for (i=0;i<p_tcd->image->numcomps;++i) {
-                l_size_comp = l_img_comp->prec >> 3; /*(/ 8)*/
-                l_remaining = l_img_comp->prec & 7;  /* (%8) */
-                l_res = l_tilec->resolutions + l_img_comp->resno_decoded;
-                l_width = (OPJ_UINT32)(l_res->x1 - l_res->x0);
-                l_height = (OPJ_UINT32)(l_res->y1 - l_res->y0);
-                l_stride = (OPJ_UINT32)(l_tilec->x1 - l_tilec->x0) - l_width;
+OPJ_BOOL opj_tcd_update_tile_data(opj_tcd_t *p_tcd,
+                                  OPJ_BYTE * p_dest,
+                                  OPJ_UINT32 p_dest_length
+                                 )
+{
+    OPJ_UINT32 i, j, k, l_data_size = 0;
+    opj_image_comp_t * l_img_comp = 00;
+    opj_tcd_tilecomp_t * l_tilec = 00;
+    opj_tcd_resolution_t * l_res;
+    OPJ_UINT32 l_size_comp, l_remaining;
+    OPJ_UINT32 l_stride, l_width, l_height;
+
+    l_data_size = opj_tcd_get_decoded_tile_size(p_tcd);
+    if (l_data_size > p_dest_length) {
+        return OPJ_FALSE;
+    }
+
+    l_tilec = p_tcd->tcd_image->tiles->comps;
+    l_img_comp = p_tcd->image->comps;
+
+    for (i = 0; i < p_tcd->image->numcomps; ++i) {
+        l_size_comp = l_img_comp->prec >> 3; /*(/ 8)*/
+        l_remaining = l_img_comp->prec & 7;  /* (%8) */
+        l_res = l_tilec->resolutions + l_img_comp->resno_decoded;
+        l_width = (OPJ_UINT32)(l_res->x1 - l_res->x0);
+        l_height = (OPJ_UINT32)(l_res->y1 - l_res->y0);
+        l_stride = (OPJ_UINT32)(l_tilec->x1 - l_tilec->x0) - l_width;
+
+        if (l_remaining) {
+            ++l_size_comp;
+        }
+
+        if (l_size_comp == 3) {
+            l_size_comp = 4;
+        }
 
-                if (l_remaining) {
-                        ++l_size_comp;
+        switch (l_size_comp) {
+        case 1: {
+            OPJ_CHAR * l_dest_ptr = (OPJ_CHAR *) p_dest;
+            const OPJ_INT32 * l_src_ptr = l_tilec->data;
+
+            if (l_img_comp->sgnd) {
+                for (j = 0; j < l_height; ++j) {
+                    for (k = 0; k < l_width; ++k) {
+                        *(l_dest_ptr++) = (OPJ_CHAR)(*(l_src_ptr++));
+                    }
+                    l_src_ptr += l_stride;
+                }
+            } else {
+                for (j = 0; j < l_height; ++j) {
+                    for (k = 0; k < l_width; ++k) {
+                        *(l_dest_ptr++) = (OPJ_CHAR)((*(l_src_ptr++)) & 0xff);
+                    }
+                    l_src_ptr += l_stride;
                 }
+            }
 
-                if (l_size_comp == 3) {
-                        l_size_comp = 4;
+            p_dest = (OPJ_BYTE *)l_dest_ptr;
+        }
+        break;
+        case 2: {
+            const OPJ_INT32 * l_src_ptr = l_tilec->data;
+            OPJ_INT16 * l_dest_ptr = (OPJ_INT16 *) p_dest;
+
+            if (l_img_comp->sgnd) {
+                for (j = 0; j < l_height; ++j) {
+                    for (k = 0; k < l_width; ++k) {
+                        *(l_dest_ptr++) = (OPJ_INT16)(*(l_src_ptr++));
+                    }
+                    l_src_ptr += l_stride;
+                }
+            } else {
+                for (j = 0; j < l_height; ++j) {
+                    for (k = 0; k < l_width; ++k) {
+                        *(l_dest_ptr++) = (OPJ_INT16)((*(l_src_ptr++)) & 0xffff);
+                    }
+                    l_src_ptr += l_stride;
                 }
+            }
 
-                switch (l_size_comp)
-                        {
-                        case 1:
-                                {
-                                        OPJ_CHAR * l_dest_ptr = (OPJ_CHAR *) p_dest;
-                                        const OPJ_INT32 * l_src_ptr = l_tilec->data;
-
-                                        if (l_img_comp->sgnd) {
-                                                for (j=0;j<l_height;++j) {
-                                                        for (k=0;k<l_width;++k) {
-                                                                *(l_dest_ptr++) = (OPJ_CHAR) (*(l_src_ptr++));
-                                                        }
-                                                        l_src_ptr += l_stride;
-                                                }
-                                        }
-                                        else {
-                                                for (j=0;j<l_height;++j) {
-                                                        for     (k=0;k<l_width;++k) {
-                                                                *(l_dest_ptr++) = (OPJ_CHAR) ((*(l_src_ptr++))&0xff);
-                                                        }
-                                                        l_src_ptr += l_stride;
-                                                }
-                                        }
-
-                                        p_dest = (OPJ_BYTE *)l_dest_ptr;
-                                }
-                                break;
-                        case 2:
-                                {
-                                        const OPJ_INT32 * l_src_ptr = l_tilec->data;
-                                        OPJ_INT16 * l_dest_ptr = (OPJ_INT16 *) p_dest;
-
-                                        if (l_img_comp->sgnd) {
-                                                for (j=0;j<l_height;++j) {
-                                                        for (k=0;k<l_width;++k) {
-                                                                *(l_dest_ptr++) = (OPJ_INT16) (*(l_src_ptr++));
-                                                        }
-                                                        l_src_ptr += l_stride;
-                                                }
-                                        }
-                                        else {
-                                                for (j=0;j<l_height;++j) {
-                                                        for (k=0;k<l_width;++k) {
-                                                                *(l_dest_ptr++) = (OPJ_INT16) ((*(l_src_ptr++))&0xffff);
-                                                        }
-                                                        l_src_ptr += l_stride;
-                                                }
-                                        }
-
-                                        p_dest = (OPJ_BYTE*) l_dest_ptr;
-                                }
-                                break;
-                        case 4:
-                                {
-                                        OPJ_INT32 * l_dest_ptr = (OPJ_INT32 *) p_dest;
-                                        OPJ_INT32 * l_src_ptr = l_tilec->data;
-
-                                        for (j=0;j<l_height;++j) {
-                                                for (k=0;k<l_width;++k) {
-                                                        *(l_dest_ptr++) = (*(l_src_ptr++));
-                                                }
-                                                l_src_ptr += l_stride;
-                                        }
-
-                                        p_dest = (OPJ_BYTE*) l_dest_ptr;
-                                }
-                                break;
+            p_dest = (OPJ_BYTE*) l_dest_ptr;
+        }
+        break;
+        case 4: {
+            OPJ_INT32 * l_dest_ptr = (OPJ_INT32 *) p_dest;
+            OPJ_INT32 * l_src_ptr = l_tilec->data;
+
+            for (j = 0; j < l_height; ++j) {
+                for (k = 0; k < l_width; ++k) {
+                    *(l_dest_ptr++) = (*(l_src_ptr++));
                 }
+                l_src_ptr += l_stride;
+            }
 
-                ++l_img_comp;
-                ++l_tilec;
+            p_dest = (OPJ_BYTE*) l_dest_ptr;
+        }
+        break;
         }
 
-        return OPJ_TRUE;
+        ++l_img_comp;
+        ++l_tilec;
+    }
+
+    return OPJ_TRUE;
 }
 
 
@@ -1462,323 +1538,327 @@ OPJ_BOOL opj_tcd_update_tile_data ( opj_tcd_t *p_tcd,
 
 static void opj_tcd_free_tile(opj_tcd_t *p_tcd)
 {
-        OPJ_UINT32 compno, resno, bandno, precno;
-        opj_tcd_tile_t *l_tile = 00;
-        opj_tcd_tilecomp_t *l_tile_comp = 00;
-        opj_tcd_resolution_t *l_res = 00;
-        opj_tcd_band_t *l_band = 00;
-        opj_tcd_precinct_t *l_precinct = 00;
-        OPJ_UINT32 l_nb_resolutions, l_nb_precincts;
-        void (* l_tcd_code_block_deallocate) (opj_tcd_precinct_t *) = 00;
-
-        if (! p_tcd) {
-                return;
-        }
-
-        if (! p_tcd->tcd_image) {
-                return;
-        }
+    OPJ_UINT32 compno, resno, bandno, precno;
+    opj_tcd_tile_t *l_tile = 00;
+    opj_tcd_tilecomp_t *l_tile_comp = 00;
+    opj_tcd_resolution_t *l_res = 00;
+    opj_tcd_band_t *l_band = 00;
+    opj_tcd_precinct_t *l_precinct = 00;
+    OPJ_UINT32 l_nb_resolutions, l_nb_precincts;
+    void (* l_tcd_code_block_deallocate)(opj_tcd_precinct_t *) = 00;
+
+    if (! p_tcd) {
+        return;
+    }
+
+    if (! p_tcd->tcd_image) {
+        return;
+    }
+
+    if (p_tcd->m_is_decoder) {
+        l_tcd_code_block_deallocate = opj_tcd_code_block_dec_deallocate;
+    } else {
+        l_tcd_code_block_deallocate = opj_tcd_code_block_enc_deallocate;
+    }
+
+    l_tile = p_tcd->tcd_image->tiles;
+    if (! l_tile) {
+        return;
+    }
+
+    l_tile_comp = l_tile->comps;
+
+    for (compno = 0; compno < l_tile->numcomps; ++compno) {
+        l_res = l_tile_comp->resolutions;
+        if (l_res) {
+
+            l_nb_resolutions = l_tile_comp->resolutions_size / sizeof(opj_tcd_resolution_t);
+            for (resno = 0; resno < l_nb_resolutions; ++resno) {
+                l_band = l_res->bands;
+                for (bandno = 0; bandno < 3; ++bandno) {
+                    l_precinct = l_band->precincts;
+                    if (l_precinct) {
+
+                        l_nb_precincts = l_band->precincts_data_size / sizeof(opj_tcd_precinct_t);
+                        for (precno = 0; precno < l_nb_precincts; ++precno) {
+                            opj_tgt_destroy(l_precinct->incltree);
+                            l_precinct->incltree = 00;
+                            opj_tgt_destroy(l_precinct->imsbtree);
+                            l_precinct->imsbtree = 00;
+                            (*l_tcd_code_block_deallocate)(l_precinct);
+                            ++l_precinct;
+                        }
 
-        if (p_tcd->m_is_decoder) {
-                l_tcd_code_block_deallocate = opj_tcd_code_block_dec_deallocate;
-        }
-        else {
-                l_tcd_code_block_deallocate = opj_tcd_code_block_enc_deallocate;
-        }
+                        opj_free(l_band->precincts);
+                        l_band->precincts = 00;
+                    }
+                    ++l_band;
+                } /* for (resno */
+                ++l_res;
+            }
 
-        l_tile = p_tcd->tcd_image->tiles;
-        if (! l_tile) {
-                return;
+            opj_free(l_tile_comp->resolutions);
+            l_tile_comp->resolutions = 00;
         }
 
-        l_tile_comp = l_tile->comps;
-
-        for (compno = 0; compno < l_tile->numcomps; ++compno) {
-                l_res = l_tile_comp->resolutions;
-                if (l_res) {
-
-                        l_nb_resolutions = l_tile_comp->resolutions_size / sizeof(opj_tcd_resolution_t);
-                        for (resno = 0; resno < l_nb_resolutions; ++resno) {
-                                l_band = l_res->bands;
-                                for     (bandno = 0; bandno < 3; ++bandno) {
-                                        l_precinct = l_band->precincts;
-                                        if (l_precinct) {
-
-                                                l_nb_precincts = l_band->precincts_data_size / sizeof(opj_tcd_precinct_t);
-                                                for (precno = 0; precno < l_nb_precincts; ++precno) {
-                                                        opj_tgt_destroy(l_precinct->incltree);
-                                                        l_precinct->incltree = 00;
-                                                        opj_tgt_destroy(l_precinct->imsbtree);
-                                                        l_precinct->imsbtree = 00;
-                                                        (*l_tcd_code_block_deallocate) (l_precinct);
-                                                        ++l_precinct;
-                                                }
-
-                                                opj_free(l_band->precincts);
-                                                l_band->precincts = 00;
-                                        }
-                                        ++l_band;
-                                } /* for (resno */
-                                ++l_res;
-                        }
-
-                        opj_free(l_tile_comp->resolutions);
-                        l_tile_comp->resolutions = 00;
-                }
-
-                if (l_tile_comp->ownsData && l_tile_comp->data) {
-                        opj_aligned_free(l_tile_comp->data);
-                        l_tile_comp->data = 00;
-                        l_tile_comp->ownsData = 0;
-                        l_tile_comp->data_size = 0;
-                        l_tile_comp->data_size_needed = 0;
-                }
-                ++l_tile_comp;
+        if (l_tile_comp->ownsData && l_tile_comp->data) {
+            opj_aligned_free(l_tile_comp->data);
+            l_tile_comp->data = 00;
+            l_tile_comp->ownsData = 0;
+            l_tile_comp->data_size = 0;
+            l_tile_comp->data_size_needed = 0;
         }
+        ++l_tile_comp;
+    }
 
-        opj_free(l_tile->comps);
-        l_tile->comps = 00;
-        opj_free(p_tcd->tcd_image->tiles);
-        p_tcd->tcd_image->tiles = 00;
+    opj_free(l_tile->comps);
+    l_tile->comps = 00;
+    opj_free(p_tcd->tcd_image->tiles);
+    p_tcd->tcd_image->tiles = 00;
 }
 
 
-static OPJ_BOOL opj_tcd_t2_decode (opj_tcd_t *p_tcd,
-                            OPJ_BYTE * p_src_data,
-                            OPJ_UINT32 * p_data_read,
-                            OPJ_UINT32 p_max_src_size,
-                            opj_codestream_index_t *p_cstr_index,
-                            opj_event_mgr_t *p_manager
-                            )
+static OPJ_BOOL opj_tcd_t2_decode(opj_tcd_t *p_tcd,
+                                  OPJ_BYTE * p_src_data,
+                                  OPJ_UINT32 * p_data_read,
+                                  OPJ_UINT32 p_max_src_size,
+                                  opj_codestream_index_t *p_cstr_index,
+                                  opj_event_mgr_t *p_manager
+                                 )
 {
-        opj_t2_t * l_t2;
-
-        l_t2 = opj_t2_create(p_tcd->image, p_tcd->cp);
-        if (l_t2 == 00) {
-                return OPJ_FALSE;
-        }
-
-        if (! opj_t2_decode_packets(
-                                        l_t2,
-                                        p_tcd->tcd_tileno,
-                                        p_tcd->tcd_image->tiles,
-                                        p_src_data,
-                                        p_data_read,
-                                        p_max_src_size,
-                                        p_cstr_index,
-                                        p_manager)) {
-                opj_t2_destroy(l_t2);
-                return OPJ_FALSE;
-        }
-
+    opj_t2_t * l_t2;
+
+    l_t2 = opj_t2_create(p_tcd->image, p_tcd->cp);
+    if (l_t2 == 00) {
+        return OPJ_FALSE;
+    }
+
+    if (! opj_t2_decode_packets(
+                l_t2,
+                p_tcd->tcd_tileno,
+                p_tcd->tcd_image->tiles,
+                p_src_data,
+                p_data_read,
+                p_max_src_size,
+                p_cstr_index,
+                p_manager)) {
         opj_t2_destroy(l_t2);
+        return OPJ_FALSE;
+    }
 
-        /*---------------CLEAN-------------------*/
-        return OPJ_TRUE;
+    opj_t2_destroy(l_t2);
+
+    /*---------------CLEAN-------------------*/
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_tcd_t1_decode ( opj_tcd_t *p_tcd )
+static OPJ_BOOL opj_tcd_t1_decode(opj_tcd_t *p_tcd)
 {
-        OPJ_UINT32 compno;
-        opj_tcd_tile_t * l_tile = p_tcd->tcd_image->tiles;
-        opj_tcd_tilecomp_t* l_tile_comp = l_tile->comps;
-        opj_tccp_t * l_tccp = p_tcd->tcp->tccps;
-        volatile OPJ_BOOL ret = OPJ_TRUE;
-
-        for (compno = 0; compno < l_tile->numcomps; ++compno) {
-                opj_t1_decode_cblks(p_tcd->thread_pool, &ret, l_tile_comp, l_tccp);
-                if( !ret )
-                    break;
-                ++l_tile_comp;
-                ++l_tccp;
+    OPJ_UINT32 compno;
+    opj_tcd_tile_t * l_tile = p_tcd->tcd_image->tiles;
+    opj_tcd_tilecomp_t* l_tile_comp = l_tile->comps;
+    opj_tccp_t * l_tccp = p_tcd->tcp->tccps;
+    volatile OPJ_BOOL ret = OPJ_TRUE;
+
+    for (compno = 0; compno < l_tile->numcomps; ++compno) {
+        opj_t1_decode_cblks(p_tcd->thread_pool, &ret, l_tile_comp, l_tccp);
+        if (!ret) {
+            break;
         }
+        ++l_tile_comp;
+        ++l_tccp;
+    }
 
-        opj_thread_pool_wait_completion(p_tcd->thread_pool, 0);
+    opj_thread_pool_wait_completion(p_tcd->thread_pool, 0);
 
-        return ret;
+    return ret;
 }
 
 
-static OPJ_BOOL opj_tcd_dwt_decode ( opj_tcd_t *p_tcd )
+static OPJ_BOOL opj_tcd_dwt_decode(opj_tcd_t *p_tcd)
 {
-        OPJ_UINT32 compno;
-        opj_tcd_tile_t * l_tile = p_tcd->tcd_image->tiles;
-        opj_tcd_tilecomp_t * l_tile_comp = l_tile->comps;
-        opj_tccp_t * l_tccp = p_tcd->tcp->tccps;
-        opj_image_comp_t * l_img_comp = p_tcd->image->comps;
-
-        for (compno = 0; compno < l_tile->numcomps; compno++) {
-                /*
-                if (tcd->cp->reduce != 0) {
-                        tcd->image->comps[compno].resno_decoded =
-                                tile->comps[compno].numresolutions - tcd->cp->reduce - 1;
-                        if (tcd->image->comps[compno].resno_decoded < 0)
-                        {
-                                return false;
-                        }
-                }
-                numres2decode = tcd->image->comps[compno].resno_decoded + 1;
-                if(numres2decode > 0){
-                */
-
-                if (l_tccp->qmfbid == 1) {
-                        if (! opj_dwt_decode(p_tcd->thread_pool, l_tile_comp, l_img_comp->resno_decoded+1)) {
-                                return OPJ_FALSE;
-                        }
-                }
-                else {
-                        if (! opj_dwt_decode_real(l_tile_comp, l_img_comp->resno_decoded+1)) {
-                                return OPJ_FALSE;
-                        }
+    OPJ_UINT32 compno;
+    opj_tcd_tile_t * l_tile = p_tcd->tcd_image->tiles;
+    opj_tcd_tilecomp_t * l_tile_comp = l_tile->comps;
+    opj_tccp_t * l_tccp = p_tcd->tcp->tccps;
+    opj_image_comp_t * l_img_comp = p_tcd->image->comps;
+
+    for (compno = 0; compno < l_tile->numcomps; compno++) {
+        /*
+        if (tcd->cp->reduce != 0) {
+                tcd->image->comps[compno].resno_decoded =
+                        tile->comps[compno].numresolutions - tcd->cp->reduce - 1;
+                if (tcd->image->comps[compno].resno_decoded < 0)
+                {
+                        return false;
                 }
+        }
+        numres2decode = tcd->image->comps[compno].resno_decoded + 1;
+        if(numres2decode > 0){
+        */
 
-                ++l_tile_comp;
-                ++l_img_comp;
-                ++l_tccp;
+        if (l_tccp->qmfbid == 1) {
+            if (! opj_dwt_decode(p_tcd->thread_pool, l_tile_comp,
+                                 l_img_comp->resno_decoded + 1)) {
+                return OPJ_FALSE;
+            }
+        } else {
+            if (! opj_dwt_decode_real(l_tile_comp, l_img_comp->resno_decoded + 1)) {
+                return OPJ_FALSE;
+            }
         }
 
-        return OPJ_TRUE;
+        ++l_tile_comp;
+        ++l_img_comp;
+        ++l_tccp;
+    }
+
+    return OPJ_TRUE;
 }
-static OPJ_BOOL opj_tcd_mct_decode ( opj_tcd_t *p_tcd, opj_event_mgr_t *p_manager)
+static OPJ_BOOL opj_tcd_mct_decode(opj_tcd_t *p_tcd, opj_event_mgr_t *p_manager)
 {
-        opj_tcd_tile_t * l_tile = p_tcd->tcd_image->tiles;
-        opj_tcp_t * l_tcp = p_tcd->tcp;
-        opj_tcd_tilecomp_t * l_tile_comp = l_tile->comps;
-        OPJ_UINT32 l_samples,i;
+    opj_tcd_tile_t * l_tile = p_tcd->tcd_image->tiles;
+    opj_tcp_t * l_tcp = p_tcd->tcp;
+    opj_tcd_tilecomp_t * l_tile_comp = l_tile->comps;
+    OPJ_UINT32 l_samples, i;
 
-        if (! l_tcp->mct) {
+    if (! l_tcp->mct) {
+        return OPJ_TRUE;
+    }
+
+    l_samples = (OPJ_UINT32)((l_tile_comp->x1 - l_tile_comp->x0) *
+                             (l_tile_comp->y1 - l_tile_comp->y0));
+
+    if (l_tile->numcomps >= 3) {
+        /* testcase 1336.pdf.asan.47.376 */
+        if ((l_tile->comps[0].x1 - l_tile->comps[0].x0) * (l_tile->comps[0].y1 -
+                l_tile->comps[0].y0) < (OPJ_INT32)l_samples ||
+                (l_tile->comps[1].x1 - l_tile->comps[1].x0) * (l_tile->comps[1].y1 -
+                        l_tile->comps[1].y0) < (OPJ_INT32)l_samples ||
+                (l_tile->comps[2].x1 - l_tile->comps[2].x0) * (l_tile->comps[2].y1 -
+                        l_tile->comps[2].y0) < (OPJ_INT32)l_samples) {
+            opj_event_msg(p_manager, EVT_ERROR,
+                          "Tiles don't all have the same dimension. Skip the MCT step.\n");
+            return OPJ_FALSE;
+        } else if (l_tcp->mct == 2) {
+            OPJ_BYTE ** l_data;
+
+            if (! l_tcp->m_mct_decoding_matrix) {
                 return OPJ_TRUE;
-        }
-
-        l_samples = (OPJ_UINT32)((l_tile_comp->x1 - l_tile_comp->x0) * (l_tile_comp->y1 - l_tile_comp->y0));
-
-        if (l_tile->numcomps >= 3 ){
-                /* testcase 1336.pdf.asan.47.376 */
-                if ((l_tile->comps[0].x1 - l_tile->comps[0].x0) * (l_tile->comps[0].y1 - l_tile->comps[0].y0) < (OPJ_INT32)l_samples ||
-                    (l_tile->comps[1].x1 - l_tile->comps[1].x0) * (l_tile->comps[1].y1 - l_tile->comps[1].y0) < (OPJ_INT32)l_samples ||
-                    (l_tile->comps[2].x1 - l_tile->comps[2].x0) * (l_tile->comps[2].y1 - l_tile->comps[2].y0) < (OPJ_INT32)l_samples) {
-                        opj_event_msg(p_manager, EVT_ERROR, "Tiles don't all have the same dimension. Skip the MCT step.\n");
-                        return OPJ_FALSE;
-                }
-                else if (l_tcp->mct == 2) {
-                        OPJ_BYTE ** l_data;
-
-                        if (! l_tcp->m_mct_decoding_matrix) {
-                                return OPJ_TRUE;
-                        }
-
-                        l_data = (OPJ_BYTE **) opj_malloc(l_tile->numcomps*sizeof(OPJ_BYTE*));
-                        if (! l_data) {
-                                return OPJ_FALSE;
-                        }
+            }
 
-                        for (i=0;i<l_tile->numcomps;++i) {
-                                l_data[i] = (OPJ_BYTE*) l_tile_comp->data;
-                                ++l_tile_comp;
-                        }
+            l_data = (OPJ_BYTE **) opj_malloc(l_tile->numcomps * sizeof(OPJ_BYTE*));
+            if (! l_data) {
+                return OPJ_FALSE;
+            }
 
-                        if (! opj_mct_decode_custom(/* MCT data */
-                                                                        (OPJ_BYTE*) l_tcp->m_mct_decoding_matrix,
-                                                                        /* size of components */
-                                                                        l_samples,
-                                                                        /* components */
-                                                                        l_data,
-                                                                        /* nb of components (i.e. size of pData) */
-                                                                        l_tile->numcomps,
-                                                                        /* tells if the data is signed */
-                                                                        p_tcd->image->comps->sgnd)) {
-                                opj_free(l_data);
-                                return OPJ_FALSE;
-                        }
+            for (i = 0; i < l_tile->numcomps; ++i) {
+                l_data[i] = (OPJ_BYTE*) l_tile_comp->data;
+                ++l_tile_comp;
+            }
+
+            if (! opj_mct_decode_custom(/* MCT data */
+                        (OPJ_BYTE*) l_tcp->m_mct_decoding_matrix,
+                        /* size of components */
+                        l_samples,
+                        /* components */
+                        l_data,
+                        /* nb of components (i.e. size of pData) */
+                        l_tile->numcomps,
+                        /* tells if the data is signed */
+                        p_tcd->image->comps->sgnd)) {
+                opj_free(l_data);
+                return OPJ_FALSE;
+            }
 
-                        opj_free(l_data);
-                }
-                else {
-                        if (l_tcp->tccps->qmfbid == 1) {
-                                opj_mct_decode(     l_tile->comps[0].data,
-                                                        l_tile->comps[1].data,
-                                                        l_tile->comps[2].data,
-                                                        l_samples);
-                        }
-                        else {
-                            opj_mct_decode_real((OPJ_FLOAT32*)l_tile->comps[0].data,
-                                                (OPJ_FLOAT32*)l_tile->comps[1].data,
-                                                (OPJ_FLOAT32*)l_tile->comps[2].data,
-                                                l_samples);
-                        }
-                }
-        }
-        else {
-                opj_event_msg(p_manager, EVT_ERROR, "Number of components (%d) is inconsistent with a MCT. Skip the MCT step.\n",l_tile->numcomps);
+            opj_free(l_data);
+        } else {
+            if (l_tcp->tccps->qmfbid == 1) {
+                opj_mct_decode(l_tile->comps[0].data,
+                               l_tile->comps[1].data,
+                               l_tile->comps[2].data,
+                               l_samples);
+            } else {
+                opj_mct_decode_real((OPJ_FLOAT32*)l_tile->comps[0].data,
+                                    (OPJ_FLOAT32*)l_tile->comps[1].data,
+                                    (OPJ_FLOAT32*)l_tile->comps[2].data,
+                                    l_samples);
+            }
         }
+    } else {
+        opj_event_msg(p_manager, EVT_ERROR,
+                      "Number of components (%d) is inconsistent with a MCT. Skip the MCT step.\n",
+                      l_tile->numcomps);
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 
-static OPJ_BOOL opj_tcd_dc_level_shift_decode ( opj_tcd_t *p_tcd )
+static OPJ_BOOL opj_tcd_dc_level_shift_decode(opj_tcd_t *p_tcd)
 {
-        OPJ_UINT32 compno;
-        opj_tcd_tilecomp_t * l_tile_comp = 00;
-        opj_tccp_t * l_tccp = 00;
-        opj_image_comp_t * l_img_comp = 00;
-        opj_tcd_resolution_t* l_res = 00;
-        opj_tcd_tile_t * l_tile;
-        OPJ_UINT32 l_width,l_height,i,j;
-        OPJ_INT32 * l_current_ptr;
-        OPJ_INT32 l_min, l_max;
-        OPJ_UINT32 l_stride;
-
-        l_tile = p_tcd->tcd_image->tiles;
-        l_tile_comp = l_tile->comps;
-        l_tccp = p_tcd->tcp->tccps;
-        l_img_comp = p_tcd->image->comps;
-
-        for (compno = 0; compno < l_tile->numcomps; compno++) {
-                l_res = l_tile_comp->resolutions + l_img_comp->resno_decoded;
-                l_width = (OPJ_UINT32)(l_res->x1 - l_res->x0);
-                l_height = (OPJ_UINT32)(l_res->y1 - l_res->y0);
-                l_stride = (OPJ_UINT32)(l_tile_comp->x1 - l_tile_comp->x0) - l_width;
-
-                assert(l_height == 0 || l_width + l_stride <= l_tile_comp->data_size / l_height); /*MUPDF*/
-
-                if (l_img_comp->sgnd) {
-                        l_min = -(1 << (l_img_comp->prec - 1));
-                        l_max = (1 << (l_img_comp->prec - 1)) - 1;
-                }
-                else {
+    OPJ_UINT32 compno;
+    opj_tcd_tilecomp_t * l_tile_comp = 00;
+    opj_tccp_t * l_tccp = 00;
+    opj_image_comp_t * l_img_comp = 00;
+    opj_tcd_resolution_t* l_res = 00;
+    opj_tcd_tile_t * l_tile;
+    OPJ_UINT32 l_width, l_height, i, j;
+    OPJ_INT32 * l_current_ptr;
+    OPJ_INT32 l_min, l_max;
+    OPJ_UINT32 l_stride;
+
+    l_tile = p_tcd->tcd_image->tiles;
+    l_tile_comp = l_tile->comps;
+    l_tccp = p_tcd->tcp->tccps;
+    l_img_comp = p_tcd->image->comps;
+
+    for (compno = 0; compno < l_tile->numcomps; compno++) {
+        l_res = l_tile_comp->resolutions + l_img_comp->resno_decoded;
+        l_width = (OPJ_UINT32)(l_res->x1 - l_res->x0);
+        l_height = (OPJ_UINT32)(l_res->y1 - l_res->y0);
+        l_stride = (OPJ_UINT32)(l_tile_comp->x1 - l_tile_comp->x0) - l_width;
+
+        assert(l_height == 0 ||
+               l_width + l_stride <= l_tile_comp->data_size / l_height); /*MUPDF*/
+
+        if (l_img_comp->sgnd) {
+            l_min = -(1 << (l_img_comp->prec - 1));
+            l_max = (1 << (l_img_comp->prec - 1)) - 1;
+        } else {
             l_min = 0;
-                        l_max = (1 << l_img_comp->prec) - 1;
-                }
+            l_max = (1 << l_img_comp->prec) - 1;
+        }
 
-                l_current_ptr = l_tile_comp->data;
+        l_current_ptr = l_tile_comp->data;
 
-                if (l_tccp->qmfbid == 1) {
-                        for (j=0;j<l_height;++j) {
-                                for (i = 0; i < l_width; ++i) {
-                                        *l_current_ptr = opj_int_clamp(*l_current_ptr + l_tccp->m_dc_level_shift, l_min, l_max);
-                                        ++l_current_ptr;
-                                }
-                                l_current_ptr += l_stride;
-                        }
+        if (l_tccp->qmfbid == 1) {
+            for (j = 0; j < l_height; ++j) {
+                for (i = 0; i < l_width; ++i) {
+                    *l_current_ptr = opj_int_clamp(*l_current_ptr + l_tccp->m_dc_level_shift, l_min,
+                                                   l_max);
+                    ++l_current_ptr;
                 }
-                else {
-                        for (j=0;j<l_height;++j) {
-                                for (i = 0; i < l_width; ++i) {
-                                        OPJ_FLOAT32 l_value = *((OPJ_FLOAT32 *) l_current_ptr);
-                                        *l_current_ptr = opj_int_clamp((OPJ_INT32)opj_lrintf(l_value) + l_tccp->m_dc_level_shift, l_min, l_max); ;
-                                        ++l_current_ptr;
-                                }
-                                l_current_ptr += l_stride;
-                        }
+                l_current_ptr += l_stride;
+            }
+        } else {
+            for (j = 0; j < l_height; ++j) {
+                for (i = 0; i < l_width; ++i) {
+                    OPJ_FLOAT32 l_value = *((OPJ_FLOAT32 *) l_current_ptr);
+                    *l_current_ptr = opj_int_clamp((OPJ_INT32)opj_lrintf(l_value) +
+                                                   l_tccp->m_dc_level_shift, l_min, l_max); ;
+                    ++l_current_ptr;
                 }
-
-                ++l_img_comp;
-                ++l_tccp;
-                ++l_tile_comp;
+                l_current_ptr += l_stride;
+            }
         }
 
-        return OPJ_TRUE;
+        ++l_img_comp;
+        ++l_tccp;
+        ++l_tile_comp;
+    }
+
+    return OPJ_TRUE;
 }
 
 
@@ -1786,415 +1866,410 @@ static OPJ_BOOL opj_tcd_dc_level_shift_decode ( opj_tcd_t *p_tcd )
 /**
  * Deallocates the encoding data of the given precinct.
  */
-static void opj_tcd_code_block_dec_deallocate (opj_tcd_precinct_t * p_precinct)
+static void opj_tcd_code_block_dec_deallocate(opj_tcd_precinct_t * p_precinct)
 {
-        OPJ_UINT32 cblkno , l_nb_code_blocks;
+    OPJ_UINT32 cblkno, l_nb_code_blocks;
 
-        opj_tcd_cblk_dec_t * l_code_block = p_precinct->cblks.dec;
-        if (l_code_block) {
-                /*fprintf(stderr,"deallocate codeblock:{\n");*/
-                /*fprintf(stderr,"\t x0=%d, y0=%d, x1=%d, y1=%d\n",l_code_block->x0, l_code_block->y0, l_code_block->x1, l_code_block->y1);*/
-                /*fprintf(stderr,"\t numbps=%d, numlenbits=%d, len=%d, numnewpasses=%d, real_num_segs=%d, m_current_max_segs=%d\n ",
-                                l_code_block->numbps, l_code_block->numlenbits, l_code_block->len, l_code_block->numnewpasses, l_code_block->real_num_segs, l_code_block->m_current_max_segs );*/
+    opj_tcd_cblk_dec_t * l_code_block = p_precinct->cblks.dec;
+    if (l_code_block) {
+        /*fprintf(stderr,"deallocate codeblock:{\n");*/
+        /*fprintf(stderr,"\t x0=%d, y0=%d, x1=%d, y1=%d\n",l_code_block->x0, l_code_block->y0, l_code_block->x1, l_code_block->y1);*/
+        /*fprintf(stderr,"\t numbps=%d, numlenbits=%d, len=%d, numnewpasses=%d, real_num_segs=%d, m_current_max_segs=%d\n ",
+                        l_code_block->numbps, l_code_block->numlenbits, l_code_block->len, l_code_block->numnewpasses, l_code_block->real_num_segs, l_code_block->m_current_max_segs );*/
 
 
-                l_nb_code_blocks = p_precinct->block_size / sizeof(opj_tcd_cblk_dec_t);
-                /*fprintf(stderr,"nb_code_blocks =%d\t}\n", l_nb_code_blocks);*/
+        l_nb_code_blocks = p_precinct->block_size / sizeof(opj_tcd_cblk_dec_t);
+        /*fprintf(stderr,"nb_code_blocks =%d\t}\n", l_nb_code_blocks);*/
 
-                for (cblkno = 0; cblkno < l_nb_code_blocks; ++cblkno) {
+        for (cblkno = 0; cblkno < l_nb_code_blocks; ++cblkno) {
 
-                        if (l_code_block->data) {
-                                opj_free(l_code_block->data);
-                                l_code_block->data = 00;
-                        }
-
-                        if (l_code_block->segs) {
-                                opj_free(l_code_block->segs );
-                                l_code_block->segs = 00;
-                        }
+            if (l_code_block->data) {
+                opj_free(l_code_block->data);
+                l_code_block->data = 00;
+            }
 
-                        ++l_code_block;
-                }
+            if (l_code_block->segs) {
+                opj_free(l_code_block->segs);
+                l_code_block->segs = 00;
+            }
 
-                opj_free(p_precinct->cblks.dec);
-                p_precinct->cblks.dec = 00;
+            ++l_code_block;
         }
+
+        opj_free(p_precinct->cblks.dec);
+        p_precinct->cblks.dec = 00;
+    }
 }
 
 /**
  * Deallocates the encoding data of the given precinct.
  */
-static void opj_tcd_code_block_enc_deallocate (opj_tcd_precinct_t * p_precinct)
-{       
-        OPJ_UINT32 cblkno , l_nb_code_blocks;
-
-        opj_tcd_cblk_enc_t * l_code_block = p_precinct->cblks.enc;
-        if (l_code_block) {
-                l_nb_code_blocks = p_precinct->block_size / sizeof(opj_tcd_cblk_enc_t);
-                
-                for     (cblkno = 0; cblkno < l_nb_code_blocks; ++cblkno)  {
-                        if (l_code_block->data) {
-                                opj_free(l_code_block->data - 1);
-                                l_code_block->data = 00;
-                        }
+static void opj_tcd_code_block_enc_deallocate(opj_tcd_precinct_t * p_precinct)
+{
+    OPJ_UINT32 cblkno, l_nb_code_blocks;
+
+    opj_tcd_cblk_enc_t * l_code_block = p_precinct->cblks.enc;
+    if (l_code_block) {
+        l_nb_code_blocks = p_precinct->block_size / sizeof(opj_tcd_cblk_enc_t);
+
+        for (cblkno = 0; cblkno < l_nb_code_blocks; ++cblkno)  {
+            if (l_code_block->data) {
+                opj_free(l_code_block->data - 1);
+                l_code_block->data = 00;
+            }
+
+            if (l_code_block->layers) {
+                opj_free(l_code_block->layers);
+                l_code_block->layers = 00;
+            }
+
+            if (l_code_block->passes) {
+                opj_free(l_code_block->passes);
+                l_code_block->passes = 00;
+            }
+            ++l_code_block;
+        }
 
-                        if (l_code_block->layers) {
-                                opj_free(l_code_block->layers );
-                                l_code_block->layers = 00;
-                        }
+        opj_free(p_precinct->cblks.enc);
 
-                        if (l_code_block->passes) {
-                                opj_free(l_code_block->passes );
-                                l_code_block->passes = 00;
-                        }
-                        ++l_code_block;
-                }
-
-                opj_free(p_precinct->cblks.enc);
-                
-                p_precinct->cblks.enc = 00;
-        }
+        p_precinct->cblks.enc = 00;
+    }
 }
 
-OPJ_UINT32 opj_tcd_get_encoded_tile_size ( opj_tcd_t *p_tcd )
+OPJ_UINT32 opj_tcd_get_encoded_tile_size(opj_tcd_t *p_tcd)
 {
-        OPJ_UINT32 i,l_data_size = 0;
-        opj_image_comp_t * l_img_comp = 00;
-        opj_tcd_tilecomp_t * l_tilec = 00;
-        OPJ_UINT32 l_size_comp, l_remaining;
-
-        l_tilec = p_tcd->tcd_image->tiles->comps;
-        l_img_comp = p_tcd->image->comps;
-        for (i=0;i<p_tcd->image->numcomps;++i) {
-                l_size_comp = l_img_comp->prec >> 3; /*(/ 8)*/
-                l_remaining = l_img_comp->prec & 7;  /* (%8) */
-
-                if (l_remaining) {
-                        ++l_size_comp;
-                }
-
-                if (l_size_comp == 3) {
-                        l_size_comp = 4;
-                }
+    OPJ_UINT32 i, l_data_size = 0;
+    opj_image_comp_t * l_img_comp = 00;
+    opj_tcd_tilecomp_t * l_tilec = 00;
+    OPJ_UINT32 l_size_comp, l_remaining;
+
+    l_tilec = p_tcd->tcd_image->tiles->comps;
+    l_img_comp = p_tcd->image->comps;
+    for (i = 0; i < p_tcd->image->numcomps; ++i) {
+        l_size_comp = l_img_comp->prec >> 3; /*(/ 8)*/
+        l_remaining = l_img_comp->prec & 7;  /* (%8) */
+
+        if (l_remaining) {
+            ++l_size_comp;
+        }
 
-                l_data_size += l_size_comp * (OPJ_UINT32)((l_tilec->x1 - l_tilec->x0) * (l_tilec->y1 - l_tilec->y0));
-                ++l_img_comp;
-                ++l_tilec;
+        if (l_size_comp == 3) {
+            l_size_comp = 4;
         }
 
-        return l_data_size;
+        l_data_size += l_size_comp * (OPJ_UINT32)((l_tilec->x1 - l_tilec->x0) *
+                       (l_tilec->y1 - l_tilec->y0));
+        ++l_img_comp;
+        ++l_tilec;
+    }
+
+    return l_data_size;
 }
-                
-static OPJ_BOOL opj_tcd_dc_level_shift_encode ( opj_tcd_t *p_tcd )
-{
-        OPJ_UINT32 compno;
-        opj_tcd_tilecomp_t * l_tile_comp = 00;
-        opj_tccp_t * l_tccp = 00;
-        opj_image_comp_t * l_img_comp = 00;
-        opj_tcd_tile_t * l_tile;
-        OPJ_UINT32 l_nb_elem,i;
-        OPJ_INT32 * l_current_ptr;
-
-        l_tile = p_tcd->tcd_image->tiles;
-        l_tile_comp = l_tile->comps;
-        l_tccp = p_tcd->tcp->tccps;
-        l_img_comp = p_tcd->image->comps;
-
-        for (compno = 0; compno < l_tile->numcomps; compno++) {
-                l_current_ptr = l_tile_comp->data;
-                l_nb_elem = (OPJ_UINT32)((l_tile_comp->x1 - l_tile_comp->x0) * (l_tile_comp->y1 - l_tile_comp->y0));
-
-                if (l_tccp->qmfbid == 1) {
-                        for     (i = 0; i < l_nb_elem; ++i) {
-                                *l_current_ptr -= l_tccp->m_dc_level_shift ;
-                                ++l_current_ptr;
-                        }
-                }
-                else {
-                        for (i = 0; i < l_nb_elem; ++i) {
-                                *l_current_ptr = (*l_current_ptr - l_tccp->m_dc_level_shift) * (1 << 11);
-                                ++l_current_ptr;
-                        }
-                }
 
-                ++l_img_comp;
-                ++l_tccp;
-                ++l_tile_comp;
+static OPJ_BOOL opj_tcd_dc_level_shift_encode(opj_tcd_t *p_tcd)
+{
+    OPJ_UINT32 compno;
+    opj_tcd_tilecomp_t * l_tile_comp = 00;
+    opj_tccp_t * l_tccp = 00;
+    opj_image_comp_t * l_img_comp = 00;
+    opj_tcd_tile_t * l_tile;
+    OPJ_UINT32 l_nb_elem, i;
+    OPJ_INT32 * l_current_ptr;
+
+    l_tile = p_tcd->tcd_image->tiles;
+    l_tile_comp = l_tile->comps;
+    l_tccp = p_tcd->tcp->tccps;
+    l_img_comp = p_tcd->image->comps;
+
+    for (compno = 0; compno < l_tile->numcomps; compno++) {
+        l_current_ptr = l_tile_comp->data;
+        l_nb_elem = (OPJ_UINT32)((l_tile_comp->x1 - l_tile_comp->x0) *
+                                 (l_tile_comp->y1 - l_tile_comp->y0));
+
+        if (l_tccp->qmfbid == 1) {
+            for (i = 0; i < l_nb_elem; ++i) {
+                *l_current_ptr -= l_tccp->m_dc_level_shift ;
+                ++l_current_ptr;
+            }
+        } else {
+            for (i = 0; i < l_nb_elem; ++i) {
+                *l_current_ptr = (*l_current_ptr - l_tccp->m_dc_level_shift) * (1 << 11);
+                ++l_current_ptr;
+            }
         }
 
-        return OPJ_TRUE;
+        ++l_img_comp;
+        ++l_tccp;
+        ++l_tile_comp;
+    }
+
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_tcd_mct_encode ( opj_tcd_t *p_tcd )
+static OPJ_BOOL opj_tcd_mct_encode(opj_tcd_t *p_tcd)
 {
-        opj_tcd_tile_t * l_tile = p_tcd->tcd_image->tiles;
-        opj_tcd_tilecomp_t * l_tile_comp = p_tcd->tcd_image->tiles->comps;
-        OPJ_UINT32 samples = (OPJ_UINT32)((l_tile_comp->x1 - l_tile_comp->x0) * (l_tile_comp->y1 - l_tile_comp->y0));
-        OPJ_UINT32 i;
-        OPJ_BYTE ** l_data = 00;
-        opj_tcp_t * l_tcp = p_tcd->tcp;
+    opj_tcd_tile_t * l_tile = p_tcd->tcd_image->tiles;
+    opj_tcd_tilecomp_t * l_tile_comp = p_tcd->tcd_image->tiles->comps;
+    OPJ_UINT32 samples = (OPJ_UINT32)((l_tile_comp->x1 - l_tile_comp->x0) *
+                                      (l_tile_comp->y1 - l_tile_comp->y0));
+    OPJ_UINT32 i;
+    OPJ_BYTE ** l_data = 00;
+    opj_tcp_t * l_tcp = p_tcd->tcp;
+
+    if (!p_tcd->tcp->mct) {
+        return OPJ_TRUE;
+    }
 
-        if(!p_tcd->tcp->mct) {
-                return OPJ_TRUE;
+    if (p_tcd->tcp->mct == 2) {
+        if (! p_tcd->tcp->m_mct_coding_matrix) {
+            return OPJ_TRUE;
         }
 
-        if (p_tcd->tcp->mct == 2) {
-                if (! p_tcd->tcp->m_mct_coding_matrix) {
-                        return OPJ_TRUE;
-                }
-
-        l_data = (OPJ_BYTE **) opj_malloc(l_tile->numcomps*sizeof(OPJ_BYTE*));
-                if (! l_data) {
-                        return OPJ_FALSE;
-                }
+        l_data = (OPJ_BYTE **) opj_malloc(l_tile->numcomps * sizeof(OPJ_BYTE*));
+        if (! l_data) {
+            return OPJ_FALSE;
+        }
 
-                for (i=0;i<l_tile->numcomps;++i) {
-                        l_data[i] = (OPJ_BYTE*) l_tile_comp->data;
-                        ++l_tile_comp;
-                }
+        for (i = 0; i < l_tile->numcomps; ++i) {
+            l_data[i] = (OPJ_BYTE*) l_tile_comp->data;
+            ++l_tile_comp;
+        }
 
-                if (! opj_mct_encode_custom(/* MCT data */
-                                        (OPJ_BYTE*) p_tcd->tcp->m_mct_coding_matrix,
-                                        /* size of components */
-                                        samples,
-                                        /* components */
-                                        l_data,
-                                        /* nb of components (i.e. size of pData) */
-                                        l_tile->numcomps,
-                                        /* tells if the data is signed */
-                                        p_tcd->image->comps->sgnd) )
-                {
+        if (! opj_mct_encode_custom(/* MCT data */
+                    (OPJ_BYTE*) p_tcd->tcp->m_mct_coding_matrix,
+                    /* size of components */
+                    samples,
+                    /* components */
+                    l_data,
+                    /* nb of components (i.e. size of pData) */
+                    l_tile->numcomps,
+                    /* tells if the data is signed */
+                    p_tcd->image->comps->sgnd)) {
             opj_free(l_data);
-                        return OPJ_FALSE;
-                }
-
-                opj_free(l_data);
-        }
-        else if (l_tcp->tccps->qmfbid == 0) {
-                opj_mct_encode_real(l_tile->comps[0].data, l_tile->comps[1].data, l_tile->comps[2].data, samples);
-        }
-        else {
-                opj_mct_encode(l_tile->comps[0].data, l_tile->comps[1].data, l_tile->comps[2].data, samples);
+            return OPJ_FALSE;
         }
 
-        return OPJ_TRUE;
+        opj_free(l_data);
+    } else if (l_tcp->tccps->qmfbid == 0) {
+        opj_mct_encode_real(l_tile->comps[0].data, l_tile->comps[1].data,
+                            l_tile->comps[2].data, samples);
+    } else {
+        opj_mct_encode(l_tile->comps[0].data, l_tile->comps[1].data,
+                       l_tile->comps[2].data, samples);
+    }
+
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_tcd_dwt_encode ( opj_tcd_t *p_tcd )
+static OPJ_BOOL opj_tcd_dwt_encode(opj_tcd_t *p_tcd)
 {
-        opj_tcd_tile_t * l_tile = p_tcd->tcd_image->tiles;
-        opj_tcd_tilecomp_t * l_tile_comp = p_tcd->tcd_image->tiles->comps;
-        opj_tccp_t * l_tccp = p_tcd->tcp->tccps;
-        OPJ_UINT32 compno;
-
-        for (compno = 0; compno < l_tile->numcomps; ++compno) {
-                if (l_tccp->qmfbid == 1) {
-                        if (! opj_dwt_encode(l_tile_comp)) {
-                                return OPJ_FALSE;
-                        }
-                }
-                else if (l_tccp->qmfbid == 0) {
-                        if (! opj_dwt_encode_real(l_tile_comp)) {
-                                return OPJ_FALSE;
-                        }
-                }
-
-                ++l_tile_comp;
-                ++l_tccp;
+    opj_tcd_tile_t * l_tile = p_tcd->tcd_image->tiles;
+    opj_tcd_tilecomp_t * l_tile_comp = p_tcd->tcd_image->tiles->comps;
+    opj_tccp_t * l_tccp = p_tcd->tcp->tccps;
+    OPJ_UINT32 compno;
+
+    for (compno = 0; compno < l_tile->numcomps; ++compno) {
+        if (l_tccp->qmfbid == 1) {
+            if (! opj_dwt_encode(l_tile_comp)) {
+                return OPJ_FALSE;
+            }
+        } else if (l_tccp->qmfbid == 0) {
+            if (! opj_dwt_encode_real(l_tile_comp)) {
+                return OPJ_FALSE;
+            }
         }
 
-        return OPJ_TRUE;
+        ++l_tile_comp;
+        ++l_tccp;
+    }
+
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_tcd_t1_encode ( opj_tcd_t *p_tcd )
+static OPJ_BOOL opj_tcd_t1_encode(opj_tcd_t *p_tcd)
 {
-        opj_t1_t * l_t1;
-        const OPJ_FLOAT64 * l_mct_norms;
-        OPJ_UINT32 l_mct_numcomps = 0U;
-        opj_tcp_t * l_tcp = p_tcd->tcp;
-
-        l_t1 = opj_t1_create(OPJ_TRUE);
-        if (l_t1 == 00) {
-                return OPJ_FALSE;
-        }
-
-        if (l_tcp->mct == 1) {
-                l_mct_numcomps = 3U;
-                /* irreversible encoding */
-                if (l_tcp->tccps->qmfbid == 0) {
-                        l_mct_norms = opj_mct_get_mct_norms_real();
-                }
-                else {
-                        l_mct_norms = opj_mct_get_mct_norms();
-                }
-        }
-        else {
-                l_mct_numcomps = p_tcd->image->numcomps;
-                l_mct_norms = (const OPJ_FLOAT64 *) (l_tcp->mct_norms);
+    opj_t1_t * l_t1;
+    const OPJ_FLOAT64 * l_mct_norms;
+    OPJ_UINT32 l_mct_numcomps = 0U;
+    opj_tcp_t * l_tcp = p_tcd->tcp;
+
+    l_t1 = opj_t1_create(OPJ_TRUE);
+    if (l_t1 == 00) {
+        return OPJ_FALSE;
+    }
+
+    if (l_tcp->mct == 1) {
+        l_mct_numcomps = 3U;
+        /* irreversible encoding */
+        if (l_tcp->tccps->qmfbid == 0) {
+            l_mct_norms = opj_mct_get_mct_norms_real();
+        } else {
+            l_mct_norms = opj_mct_get_mct_norms();
         }
+    } else {
+        l_mct_numcomps = p_tcd->image->numcomps;
+        l_mct_norms = (const OPJ_FLOAT64 *)(l_tcp->mct_norms);
+    }
 
-        if (! opj_t1_encode_cblks(l_t1, p_tcd->tcd_image->tiles , l_tcp, l_mct_norms, l_mct_numcomps)) {
+    if (! opj_t1_encode_cblks(l_t1, p_tcd->tcd_image->tiles, l_tcp, l_mct_norms,
+                              l_mct_numcomps)) {
         opj_t1_destroy(l_t1);
-                return OPJ_FALSE;
-        }
+        return OPJ_FALSE;
+    }
 
-        opj_t1_destroy(l_t1);
+    opj_t1_destroy(l_t1);
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static OPJ_BOOL opj_tcd_t2_encode (opj_tcd_t *p_tcd,
-                                                OPJ_BYTE * p_dest_data,
-                                                OPJ_UINT32 * p_data_written,
-                                                OPJ_UINT32 p_max_dest_size,
-                                                opj_codestream_info_t *p_cstr_info )
+static OPJ_BOOL opj_tcd_t2_encode(opj_tcd_t *p_tcd,
+                                  OPJ_BYTE * p_dest_data,
+                                  OPJ_UINT32 * p_data_written,
+                                  OPJ_UINT32 p_max_dest_size,
+                                  opj_codestream_info_t *p_cstr_info)
 {
-        opj_t2_t * l_t2;
-
-        l_t2 = opj_t2_create(p_tcd->image, p_tcd->cp);
-        if (l_t2 == 00) {
-                return OPJ_FALSE;
-        }
-
-        if (! opj_t2_encode_packets(
-                                        l_t2,
-                                        p_tcd->tcd_tileno,
-                                        p_tcd->tcd_image->tiles,
-                                        p_tcd->tcp->numlayers,
-                                        p_dest_data,
-                                        p_data_written,
-                                        p_max_dest_size,
-                                        p_cstr_info,
-                                        p_tcd->tp_num,
-                                        p_tcd->tp_pos,
-                                        p_tcd->cur_pino,
-                                        FINAL_PASS))
-        {
-                opj_t2_destroy(l_t2);
-                return OPJ_FALSE;
-        }
-
+    opj_t2_t * l_t2;
+
+    l_t2 = opj_t2_create(p_tcd->image, p_tcd->cp);
+    if (l_t2 == 00) {
+        return OPJ_FALSE;
+    }
+
+    if (! opj_t2_encode_packets(
+                l_t2,
+                p_tcd->tcd_tileno,
+                p_tcd->tcd_image->tiles,
+                p_tcd->tcp->numlayers,
+                p_dest_data,
+                p_data_written,
+                p_max_dest_size,
+                p_cstr_info,
+                p_tcd->tp_num,
+                p_tcd->tp_pos,
+                p_tcd->cur_pino,
+                FINAL_PASS)) {
         opj_t2_destroy(l_t2);
+        return OPJ_FALSE;
+    }
 
-        /*---------------CLEAN-------------------*/
-        return OPJ_TRUE;
+    opj_t2_destroy(l_t2);
+
+    /*---------------CLEAN-------------------*/
+    return OPJ_TRUE;
 }
 
 
-static OPJ_BOOL opj_tcd_rate_allocate_encode(  opj_tcd_t *p_tcd,
-                                                                            OPJ_BYTE * p_dest_data,
-                                                                            OPJ_UINT32 p_max_dest_size,
-                                                                            opj_codestream_info_t *p_cstr_info )
+static OPJ_BOOL opj_tcd_rate_allocate_encode(opj_tcd_t *p_tcd,
+        OPJ_BYTE * p_dest_data,
+        OPJ_UINT32 p_max_dest_size,
+        opj_codestream_info_t *p_cstr_info)
 {
-        opj_cp_t * l_cp = p_tcd->cp;
-        OPJ_UINT32 l_nb_written = 0;
-
-        if (p_cstr_info)  {
-                p_cstr_info->index_write = 0;
-        }
-
-        if (l_cp->m_specific_param.m_enc.m_disto_alloc|| l_cp->m_specific_param.m_enc.m_fixed_quality)  {
-                /* fixed_quality */
-                /* Normal Rate/distortion allocation */
-                if (! opj_tcd_rateallocate(p_tcd, p_dest_data,&l_nb_written, p_max_dest_size, p_cstr_info)) {
-                        return OPJ_FALSE;
-                }
-        }
-        else {
-                /* Fixed layer allocation */
-                opj_tcd_rateallocate_fixed(p_tcd);
+    opj_cp_t * l_cp = p_tcd->cp;
+    OPJ_UINT32 l_nb_written = 0;
+
+    if (p_cstr_info)  {
+        p_cstr_info->index_write = 0;
+    }
+
+    if (l_cp->m_specific_param.m_enc.m_disto_alloc ||
+            l_cp->m_specific_param.m_enc.m_fixed_quality)  {
+        /* fixed_quality */
+        /* Normal Rate/distortion allocation */
+        if (! opj_tcd_rateallocate(p_tcd, p_dest_data, &l_nb_written, p_max_dest_size,
+                                   p_cstr_info)) {
+            return OPJ_FALSE;
         }
+    } else {
+        /* Fixed layer allocation */
+        opj_tcd_rateallocate_fixed(p_tcd);
+    }
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 
-OPJ_BOOL opj_tcd_copy_tile_data (       opj_tcd_t *p_tcd,
-                                                                    OPJ_BYTE * p_src,
-                                                                    OPJ_UINT32 p_src_length )
+OPJ_BOOL opj_tcd_copy_tile_data(opj_tcd_t *p_tcd,
+                                OPJ_BYTE * p_src,
+                                OPJ_UINT32 p_src_length)
 {
-        OPJ_UINT32 i,j,l_data_size = 0;
-        opj_image_comp_t * l_img_comp = 00;
-        opj_tcd_tilecomp_t * l_tilec = 00;
-        OPJ_UINT32 l_size_comp, l_remaining;
-        OPJ_UINT32 l_nb_elem;
-
-        l_data_size = opj_tcd_get_encoded_tile_size(p_tcd);
-        if (l_data_size != p_src_length) {
-                return OPJ_FALSE;
+    OPJ_UINT32 i, j, l_data_size = 0;
+    opj_image_comp_t * l_img_comp = 00;
+    opj_tcd_tilecomp_t * l_tilec = 00;
+    OPJ_UINT32 l_size_comp, l_remaining;
+    OPJ_UINT32 l_nb_elem;
+
+    l_data_size = opj_tcd_get_encoded_tile_size(p_tcd);
+    if (l_data_size != p_src_length) {
+        return OPJ_FALSE;
+    }
+
+    l_tilec = p_tcd->tcd_image->tiles->comps;
+    l_img_comp = p_tcd->image->comps;
+    for (i = 0; i < p_tcd->image->numcomps; ++i) {
+        l_size_comp = l_img_comp->prec >> 3; /*(/ 8)*/
+        l_remaining = l_img_comp->prec & 7;  /* (%8) */
+        l_nb_elem = (OPJ_UINT32)((l_tilec->x1 - l_tilec->x0) * (l_tilec->y1 -
+                                 l_tilec->y0));
+
+        if (l_remaining) {
+            ++l_size_comp;
         }
 
-        l_tilec = p_tcd->tcd_image->tiles->comps;
-        l_img_comp = p_tcd->image->comps;
-        for (i=0;i<p_tcd->image->numcomps;++i) {
-                l_size_comp = l_img_comp->prec >> 3; /*(/ 8)*/
-                l_remaining = l_img_comp->prec & 7;  /* (%8) */
-                l_nb_elem = (OPJ_UINT32)((l_tilec->x1 - l_tilec->x0) * (l_tilec->y1 - l_tilec->y0));
+        if (l_size_comp == 3) {
+            l_size_comp = 4;
+        }
 
-                if (l_remaining) {
-                        ++l_size_comp;
-                }
+        switch (l_size_comp) {
+        case 1: {
+            OPJ_CHAR * l_src_ptr = (OPJ_CHAR *) p_src;
+            OPJ_INT32 * l_dest_ptr = l_tilec->data;
 
-                if (l_size_comp == 3) {
-                        l_size_comp = 4;
+            if (l_img_comp->sgnd) {
+                for (j = 0; j < l_nb_elem; ++j) {
+                    *(l_dest_ptr++) = (OPJ_INT32)(*(l_src_ptr++));
                 }
+            } else {
+                for (j = 0; j < l_nb_elem; ++j) {
+                    *(l_dest_ptr++) = (*(l_src_ptr++)) & 0xff;
+                }
+            }
 
-                switch (l_size_comp) {
-                        case 1:
-                                {
-                                        OPJ_CHAR * l_src_ptr = (OPJ_CHAR *) p_src;
-                                        OPJ_INT32 * l_dest_ptr = l_tilec->data;
-
-                                        if (l_img_comp->sgnd) {
-                                                for (j=0;j<l_nb_elem;++j) {
-                                                        *(l_dest_ptr++) = (OPJ_INT32) (*(l_src_ptr++));
-                                                }
-                                        }
-                                        else {
-                                                for (j=0;j<l_nb_elem;++j) {
-                                                        *(l_dest_ptr++) = (*(l_src_ptr++))&0xff;
-                                                }
-                                        }
-
-                                        p_src = (OPJ_BYTE*) l_src_ptr;
-                                }
-                                break;
-                        case 2:
-                                {
-                                        OPJ_INT32 * l_dest_ptr = l_tilec->data;
-                                        OPJ_INT16 * l_src_ptr = (OPJ_INT16 *) p_src;
-
-                                        if (l_img_comp->sgnd) {
-                                                for (j=0;j<l_nb_elem;++j) {
-                                                        *(l_dest_ptr++) = (OPJ_INT32) (*(l_src_ptr++));
-                                                }
-                                        }
-                                        else {
-                                                for (j=0;j<l_nb_elem;++j) {
-                                                        *(l_dest_ptr++) = (*(l_src_ptr++))&0xffff;
-                                                }
-                                        }
-
-                                        p_src = (OPJ_BYTE*) l_src_ptr;
-                                }
-                                break;
-                        case 4:
-                                {
-                                        OPJ_INT32 * l_src_ptr = (OPJ_INT32 *) p_src;
-                                        OPJ_INT32 * l_dest_ptr = l_tilec->data;
+            p_src = (OPJ_BYTE*) l_src_ptr;
+        }
+        break;
+        case 2: {
+            OPJ_INT32 * l_dest_ptr = l_tilec->data;
+            OPJ_INT16 * l_src_ptr = (OPJ_INT16 *) p_src;
+
+            if (l_img_comp->sgnd) {
+                for (j = 0; j < l_nb_elem; ++j) {
+                    *(l_dest_ptr++) = (OPJ_INT32)(*(l_src_ptr++));
+                }
+            } else {
+                for (j = 0; j < l_nb_elem; ++j) {
+                    *(l_dest_ptr++) = (*(l_src_ptr++)) & 0xffff;
+                }
+            }
 
-                                        for (j=0;j<l_nb_elem;++j) {
-                                                *(l_dest_ptr++) = (OPJ_INT32) (*(l_src_ptr++));
-                                        }
+            p_src = (OPJ_BYTE*) l_src_ptr;
+        }
+        break;
+        case 4: {
+            OPJ_INT32 * l_src_ptr = (OPJ_INT32 *) p_src;
+            OPJ_INT32 * l_dest_ptr = l_tilec->data;
 
-                                        p_src = (OPJ_BYTE*) l_src_ptr;
-                                }
-                                break;
-                }
+            for (j = 0; j < l_nb_elem; ++j) {
+                *(l_dest_ptr++) = (OPJ_INT32)(*(l_src_ptr++));
+            }
 
-                ++l_img_comp;
-                ++l_tilec;
+            p_src = (OPJ_BYTE*) l_src_ptr;
+        }
+        break;
         }
 
-        return OPJ_TRUE;
+        ++l_img_comp;
+        ++l_tilec;
+    }
+
+    return OPJ_TRUE;
 }
index 4892df6b7db6a11c83437ac03a3ae4d457f01f82..25b202356e9541252c6981c275df999dc7e85a58 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,10 +8,10 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR 
+ * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR
  * Copyright (c) 2012, CS Systemes d'Information, France
  * All rights reserved.
  *
 
 #include "opj_includes.h"
 
-/* 
+/*
 ==========================================================
    Tag-tree coder interface
 ==========================================================
 */
 
-opj_tgt_tree_t *opj_tgt_create(OPJ_UINT32 numleafsh, OPJ_UINT32 numleafsv, opj_event_mgr_t *manager) {
-        OPJ_INT32 nplh[32];
-        OPJ_INT32 nplv[32];
-        opj_tgt_node_t *node = 00;
-        opj_tgt_node_t *l_parent_node = 00;
-        opj_tgt_node_t *l_parent_node0 = 00;
-        opj_tgt_tree_t *tree = 00;
-        OPJ_UINT32 i;
-        OPJ_INT32  j,k;
-        OPJ_UINT32 numlvls;
-        OPJ_UINT32 n;
-
-        tree = (opj_tgt_tree_t *) opj_calloc(1,sizeof(opj_tgt_tree_t));
-        if(!tree) {
-                opj_event_msg(manager, EVT_ERROR, "Not enough memory to create Tag-tree\n");
-                return 00;
-        }
+opj_tgt_tree_t *opj_tgt_create(OPJ_UINT32 numleafsh, OPJ_UINT32 numleafsv,
+                               opj_event_mgr_t *manager)
+{
+    OPJ_INT32 nplh[32];
+    OPJ_INT32 nplv[32];
+    opj_tgt_node_t *node = 00;
+    opj_tgt_node_t *l_parent_node = 00;
+    opj_tgt_node_t *l_parent_node0 = 00;
+    opj_tgt_tree_t *tree = 00;
+    OPJ_UINT32 i;
+    OPJ_INT32  j, k;
+    OPJ_UINT32 numlvls;
+    OPJ_UINT32 n;
 
-        tree->numleafsh = numleafsh;
-        tree->numleafsv = numleafsv;
+    tree = (opj_tgt_tree_t *) opj_calloc(1, sizeof(opj_tgt_tree_t));
+    if (!tree) {
+        opj_event_msg(manager, EVT_ERROR, "Not enough memory to create Tag-tree\n");
+        return 00;
+    }
 
-        numlvls = 0;
-        nplh[0] = (OPJ_INT32)numleafsh;
-        nplv[0] = (OPJ_INT32)numleafsv;
-        tree->numnodes = 0;
-        do {
-                n = (OPJ_UINT32)(nplh[numlvls] * nplv[numlvls]);
-                nplh[numlvls + 1] = (nplh[numlvls] + 1) / 2;
-                nplv[numlvls + 1] = (nplv[numlvls] + 1) / 2;
-                tree->numnodes += n;
-                ++numlvls;
-        } while (n > 1);
+    tree->numleafsh = numleafsh;
+    tree->numleafsv = numleafsv;
 
-        /* ADD */
-        if (tree->numnodes == 0) {
-                opj_free(tree);
-                return 00;
-        }
+    numlvls = 0;
+    nplh[0] = (OPJ_INT32)numleafsh;
+    nplv[0] = (OPJ_INT32)numleafsv;
+    tree->numnodes = 0;
+    do {
+        n = (OPJ_UINT32)(nplh[numlvls] * nplv[numlvls]);
+        nplh[numlvls + 1] = (nplh[numlvls] + 1) / 2;
+        nplv[numlvls + 1] = (nplv[numlvls] + 1) / 2;
+        tree->numnodes += n;
+        ++numlvls;
+    } while (n > 1);
 
-        tree->nodes = (opj_tgt_node_t*) opj_calloc(tree->numnodes, sizeof(opj_tgt_node_t));
-        if(!tree->nodes) {
-                opj_event_msg(manager, EVT_ERROR, "Not enough memory to create Tag-tree nodes\n");
-                opj_free(tree);
-                return 00;
-        }
-        tree->nodes_size = tree->numnodes * (OPJ_UINT32)sizeof(opj_tgt_node_t);
+    /* ADD */
+    if (tree->numnodes == 0) {
+        opj_free(tree);
+        return 00;
+    }
 
-        node = tree->nodes;
-        l_parent_node = &tree->nodes[tree->numleafsh * tree->numleafsv];
-        l_parent_node0 = l_parent_node;
+    tree->nodes = (opj_tgt_node_t*) opj_calloc(tree->numnodes,
+                  sizeof(opj_tgt_node_t));
+    if (!tree->nodes) {
+        opj_event_msg(manager, EVT_ERROR,
+                      "Not enough memory to create Tag-tree nodes\n");
+        opj_free(tree);
+        return 00;
+    }
+    tree->nodes_size = tree->numnodes * (OPJ_UINT32)sizeof(opj_tgt_node_t);
+
+    node = tree->nodes;
+    l_parent_node = &tree->nodes[tree->numleafsh * tree->numleafsv];
+    l_parent_node0 = l_parent_node;
 
-        for (i = 0; i < numlvls - 1; ++i) {
-                for (j = 0; j < nplv[i]; ++j) {
-                        k = nplh[i];
-                        while (--k >= 0) {
-                                node->parent = l_parent_node;
-                                ++node;
-                                if (--k >= 0) {
-                                        node->parent = l_parent_node;
-                                        ++node;
-                                }
-                                ++l_parent_node;
-                        }
-                        if ((j & 1) || j == nplv[i] - 1) {
-                                l_parent_node0 = l_parent_node;
-                        } else {
-                                l_parent_node = l_parent_node0;
-                                l_parent_node0 += nplh[i];
-                        }
+    for (i = 0; i < numlvls - 1; ++i) {
+        for (j = 0; j < nplv[i]; ++j) {
+            k = nplh[i];
+            while (--k >= 0) {
+                node->parent = l_parent_node;
+                ++node;
+                if (--k >= 0) {
+                    node->parent = l_parent_node;
+                    ++node;
                 }
+                ++l_parent_node;
+            }
+            if ((j & 1) || j == nplv[i] - 1) {
+                l_parent_node0 = l_parent_node;
+            } else {
+                l_parent_node = l_parent_node0;
+                l_parent_node0 += nplh[i];
+            }
         }
-        node->parent = 0;
-        opj_tgt_reset(tree);
-        return tree;
+    }
+    node->parent = 0;
+    opj_tgt_reset(tree);
+    return tree;
 }
 
 /**
@@ -129,206 +133,212 @@ opj_tgt_tree_t *opj_tgt_create(OPJ_UINT32 numleafsh, OPJ_UINT32 numleafsv, opj_e
  * @param       p_num_leafs_v           the height of the array of leafs of the tree
  * @return      a new tag-tree if successful, NULL otherwise
 */
-opj_tgt_tree_t *opj_tgt_init(opj_tgt_tree_t * p_tree,OPJ_UINT32 p_num_leafs_h, OPJ_UINT32 p_num_leafs_v, opj_event_mgr_t *p_manager)
+opj_tgt_tree_t *opj_tgt_init(opj_tgt_tree_t * p_tree, OPJ_UINT32 p_num_leafs_h,
+                             OPJ_UINT32 p_num_leafs_v, opj_event_mgr_t *p_manager)
 {
-        OPJ_INT32 l_nplh[32];
-        OPJ_INT32 l_nplv[32];
-        opj_tgt_node_t *l_node = 00;
-        opj_tgt_node_t *l_parent_node = 00;
-        opj_tgt_node_t *l_parent_node0 = 00;
-        OPJ_UINT32 i;
-        OPJ_INT32 j,k;
-        OPJ_UINT32 l_num_levels;
-        OPJ_UINT32 n;
-        OPJ_UINT32 l_node_size;
-
-        if (! p_tree){
-                return 00;
+    OPJ_INT32 l_nplh[32];
+    OPJ_INT32 l_nplv[32];
+    opj_tgt_node_t *l_node = 00;
+    opj_tgt_node_t *l_parent_node = 00;
+    opj_tgt_node_t *l_parent_node0 = 00;
+    OPJ_UINT32 i;
+    OPJ_INT32 j, k;
+    OPJ_UINT32 l_num_levels;
+    OPJ_UINT32 n;
+    OPJ_UINT32 l_node_size;
+
+    if (! p_tree) {
+        return 00;
+    }
+
+    if ((p_tree->numleafsh != p_num_leafs_h) ||
+            (p_tree->numleafsv != p_num_leafs_v)) {
+        p_tree->numleafsh = p_num_leafs_h;
+        p_tree->numleafsv = p_num_leafs_v;
+
+        l_num_levels = 0;
+        l_nplh[0] = (OPJ_INT32)p_num_leafs_h;
+        l_nplv[0] = (OPJ_INT32)p_num_leafs_v;
+        p_tree->numnodes = 0;
+        do {
+            n = (OPJ_UINT32)(l_nplh[l_num_levels] * l_nplv[l_num_levels]);
+            l_nplh[l_num_levels + 1] = (l_nplh[l_num_levels] + 1) / 2;
+            l_nplv[l_num_levels + 1] = (l_nplv[l_num_levels] + 1) / 2;
+            p_tree->numnodes += n;
+            ++l_num_levels;
+        } while (n > 1);
+
+        /* ADD */
+        if (p_tree->numnodes == 0) {
+            opj_tgt_destroy(p_tree);
+            return 00;
         }
+        l_node_size = p_tree->numnodes * (OPJ_UINT32)sizeof(opj_tgt_node_t);
 
-        if ((p_tree->numleafsh != p_num_leafs_h) || (p_tree->numleafsv != p_num_leafs_v)) {
-                p_tree->numleafsh = p_num_leafs_h;
-                p_tree->numleafsv = p_num_leafs_v;
-
-                l_num_levels = 0;
-                l_nplh[0] = (OPJ_INT32)p_num_leafs_h;
-                l_nplv[0] = (OPJ_INT32)p_num_leafs_v;
-                p_tree->numnodes = 0;
-                do
-                {
-                        n = (OPJ_UINT32)(l_nplh[l_num_levels] * l_nplv[l_num_levels]);
-                        l_nplh[l_num_levels + 1] = (l_nplh[l_num_levels] + 1) / 2;
-                        l_nplv[l_num_levels + 1] = (l_nplv[l_num_levels] + 1) / 2;
-                        p_tree->numnodes += n;
-                        ++l_num_levels;
-                }
-                while (n > 1);
+        if (l_node_size > p_tree->nodes_size) {
+            opj_tgt_node_t* new_nodes = (opj_tgt_node_t*) opj_realloc(p_tree->nodes,
+                                        l_node_size);
+            if (! new_nodes) {
+                opj_event_msg(p_manager, EVT_ERROR,
+                              "Not enough memory to reinitialize the tag tree\n");
+                opj_tgt_destroy(p_tree);
+                return 00;
+            }
+            p_tree->nodes = new_nodes;
+            memset(((char *) p_tree->nodes) + p_tree->nodes_size, 0,
+                   l_node_size - p_tree->nodes_size);
+            p_tree->nodes_size = l_node_size;
+        }
+        l_node = p_tree->nodes;
+        l_parent_node = &p_tree->nodes[p_tree->numleafsh * p_tree->numleafsv];
+        l_parent_node0 = l_parent_node;
 
-                /* ADD */
-                if (p_tree->numnodes == 0) {
-                        opj_tgt_destroy(p_tree);
-                        return 00;
-                }
-                l_node_size = p_tree->numnodes * (OPJ_UINT32)sizeof(opj_tgt_node_t);
-                
-                if (l_node_size > p_tree->nodes_size) {
-                        opj_tgt_node_t* new_nodes = (opj_tgt_node_t*) opj_realloc(p_tree->nodes, l_node_size);
-                        if (! new_nodes) {
-                                opj_event_msg(p_manager, EVT_ERROR, "Not enough memory to reinitialize the tag tree\n");
-                                opj_tgt_destroy(p_tree);
-                                return 00;
-                        }
-                        p_tree->nodes = new_nodes;
-                        memset(((char *) p_tree->nodes) + p_tree->nodes_size, 0 , l_node_size - p_tree->nodes_size);
-                        p_tree->nodes_size = l_node_size;
+        for (i = 0; i < l_num_levels - 1; ++i) {
+            for (j = 0; j < l_nplv[i]; ++j) {
+                k = l_nplh[i];
+                while (--k >= 0) {
+                    l_node->parent = l_parent_node;
+                    ++l_node;
+                    if (--k >= 0) {
+                        l_node->parent = l_parent_node;
+                        ++l_node;
+                    }
+                    ++l_parent_node;
                 }
-                l_node = p_tree->nodes;
-                l_parent_node = &p_tree->nodes[p_tree->numleafsh * p_tree->numleafsv];
-                l_parent_node0 = l_parent_node;
-
-                for (i = 0; i < l_num_levels - 1; ++i) {
-                        for (j = 0; j < l_nplv[i]; ++j) {
-                                k = l_nplh[i];
-                                while (--k >= 0) {
-                                        l_node->parent = l_parent_node;
-                                        ++l_node;
-                                        if (--k >= 0) {
-                                                l_node->parent = l_parent_node;
-                                                ++l_node;
-                                        }
-                                        ++l_parent_node;
-                                        }
-                                if ((j & 1) || j == l_nplv[i] - 1)
-                                {
-                                        l_parent_node0 = l_parent_node;
-                                }
-                                else
-                                {
-                                        l_parent_node = l_parent_node0;
-                                        l_parent_node0 += l_nplh[i];
-                                }
-                        }
+                if ((j & 1) || j == l_nplv[i] - 1) {
+                    l_parent_node0 = l_parent_node;
+                } else {
+                    l_parent_node = l_parent_node0;
+                    l_parent_node0 += l_nplh[i];
                 }
-                l_node->parent = 0;
+            }
         }
-        opj_tgt_reset(p_tree);
+        l_node->parent = 0;
+    }
+    opj_tgt_reset(p_tree);
 
-        return p_tree;
+    return p_tree;
 }
 
 void opj_tgt_destroy(opj_tgt_tree_t *p_tree)
 {
-        if (! p_tree) {
-                return;
-        }
+    if (! p_tree) {
+        return;
+    }
 
-        if (p_tree->nodes) {
-                opj_free(p_tree->nodes);
-                p_tree->nodes = 00;
-        }
-        opj_free(p_tree);
+    if (p_tree->nodes) {
+        opj_free(p_tree->nodes);
+        p_tree->nodes = 00;
+    }
+    opj_free(p_tree);
 }
 
-void opj_tgt_reset(opj_tgt_tree_t *p_tree) {
-        OPJ_UINT32 i;
-        opj_tgt_node_t * l_current_node = 00;;
+void opj_tgt_reset(opj_tgt_tree_t *p_tree)
+{
+    OPJ_UINT32 i;
+    opj_tgt_node_t * l_current_node = 00;;
 
-        if (! p_tree) {
-                return;
-        }
+    if (! p_tree) {
+        return;
+    }
 
-        l_current_node = p_tree->nodes;
-        for     (i = 0; i < p_tree->numnodes; ++i)
-        {
-                l_current_node->value = 999;
-                l_current_node->low = 0;
-                l_current_node->known = 0;
-                ++l_current_node;
-        }
+    l_current_node = p_tree->nodes;
+    for (i = 0; i < p_tree->numnodes; ++i) {
+        l_current_node->value = 999;
+        l_current_node->low = 0;
+        l_current_node->known = 0;
+        ++l_current_node;
+    }
 }
 
-void opj_tgt_setvalue(opj_tgt_tree_t *tree, OPJ_UINT32 leafno, OPJ_INT32 value) {
-        opj_tgt_node_t *node;
-        node = &tree->nodes[leafno];
-        while (node && node->value > value) {
-                node->value = value;
-                node = node->parent;
-        }
+void opj_tgt_setvalue(opj_tgt_tree_t *tree, OPJ_UINT32 leafno, OPJ_INT32 value)
+{
+    opj_tgt_node_t *node;
+    node = &tree->nodes[leafno];
+    while (node && node->value > value) {
+        node->value = value;
+        node = node->parent;
+    }
 }
 
-void opj_tgt_encode(opj_bio_t *bio, opj_tgt_tree_t *tree, OPJ_UINT32 leafno, OPJ_INT32 threshold) {
-        opj_tgt_node_t *stk[31];
-        opj_tgt_node_t **stkptr;
-        opj_tgt_node_t *node;
-        OPJ_INT32 low;
-
-        stkptr = stk;
-        node = &tree->nodes[leafno];
-        while (node->parent) {
-                *stkptr++ = node;
-                node = node->parent;
+void opj_tgt_encode(opj_bio_t *bio, opj_tgt_tree_t *tree, OPJ_UINT32 leafno,
+                    OPJ_INT32 threshold)
+{
+    opj_tgt_node_t *stk[31];
+    opj_tgt_node_t **stkptr;
+    opj_tgt_node_t *node;
+    OPJ_INT32 low;
+
+    stkptr = stk;
+    node = &tree->nodes[leafno];
+    while (node->parent) {
+        *stkptr++ = node;
+        node = node->parent;
+    }
+
+    low = 0;
+    for (;;) {
+        if (low > node->low) {
+            node->low = low;
+        } else {
+            low = node->low;
         }
-        
-        low = 0;
-        for (;;) {
-                if (low > node->low) {
-                        node->low = low;
-                } else {
-                        low = node->low;
-                }
-                
-                while (low < threshold) {
-                        if (low >= node->value) {
-                                if (!node->known) {
-                                        opj_bio_write(bio, 1, 1);
-                                        node->known = 1;
-                                }
-                                break;
-                        }
-                        opj_bio_write(bio, 0, 1);
-                        ++low;
+
+        while (low < threshold) {
+            if (low >= node->value) {
+                if (!node->known) {
+                    opj_bio_write(bio, 1, 1);
+                    node->known = 1;
                 }
-                
-                node->low = low;
-                if (stkptr == stk)
-                        break;
-                node = *--stkptr;
+                break;
+            }
+            opj_bio_write(bio, 0, 1);
+            ++low;
+        }
+
+        node->low = low;
+        if (stkptr == stk) {
+            break;
         }
+        node = *--stkptr;
+    }
 }
 
-OPJ_UINT32 opj_tgt_decode(opj_bio_t *bio, opj_tgt_tree_t *tree, OPJ_UINT32 leafno, OPJ_INT32 threshold) {
-        opj_tgt_node_t *stk[31];
-        opj_tgt_node_t **stkptr;
-        opj_tgt_node_t *node;
-        OPJ_INT32 low;
-
-        stkptr = stk;
-        node = &tree->nodes[leafno];
-        while (node->parent) {
-                *stkptr++ = node;
-                node = node->parent;
+OPJ_UINT32 opj_tgt_decode(opj_bio_t *bio, opj_tgt_tree_t *tree,
+                          OPJ_UINT32 leafno, OPJ_INT32 threshold)
+{
+    opj_tgt_node_t *stk[31];
+    opj_tgt_node_t **stkptr;
+    opj_tgt_node_t *node;
+    OPJ_INT32 low;
+
+    stkptr = stk;
+    node = &tree->nodes[leafno];
+    while (node->parent) {
+        *stkptr++ = node;
+        node = node->parent;
+    }
+
+    low = 0;
+    for (;;) {
+        if (low > node->low) {
+            node->low = low;
+        } else {
+            low = node->low;
         }
-        
-        low = 0;
-        for (;;) {
-                if (low > node->low) {
-                        node->low = low;
-                } else {
-                        low = node->low;
-                }
-                while (low < threshold && low < node->value) {
-                        if (opj_bio_read(bio, 1)) {
-                                node->value = low;
-                        } else {
-                                ++low;
-                        }
-                }
-                node->low = low;
-                if (stkptr == stk) {
-                        break;
-                }
-                node = *--stkptr;
+        while (low < threshold && low < node->value) {
+            if (opj_bio_read(bio, 1)) {
+                node->value = low;
+            } else {
+                ++low;
+            }
+        }
+        node->low = low;
+        if (stkptr == stk) {
+            break;
         }
-        
-        return (node->value < threshold) ? 1 : 0;
+        node = *--stkptr;
+    }
+
+    return (node->value < threshold) ? 1 : 0;
 }
index 0bd798979322800c1443889205169a9ff5c0f063..8a2f4f268e5336c9a3bababa02cc8b50f35adb84 100644 (file)
 
 
 
-int opj_write_thix( int coff, opj_codestream_info_t cstr_info, opj_stream_private_t *cio,
-              opj_event_mgr_t * p_manager )
+int opj_write_thix(int coff, opj_codestream_info_t cstr_info,
+                   opj_stream_private_t *cio,
+                   opj_event_mgr_t * p_manager)
 {
-  OPJ_BYTE l_data_header [4];
-  int i;
-  int tileno;
-  opj_jp2_box_t *box;
-  OPJ_UINT32 len;
-  OPJ_OFF_T lenp;
-
-  lenp = 0;
-  box = (opj_jp2_box_t *)opj_calloc( (size_t)(cstr_info.tw*cstr_info.th), sizeof(opj_jp2_box_t));
-  if(box == NULL){
-       return 0;
-  }
-  for ( i = 0; i < 2 ; i++ ){
-    if (i)
-      opj_stream_seek( cio, lenp, p_manager);
-
-    lenp = opj_stream_tell(cio);
-    opj_stream_skip(cio, 4, p_manager);             /* L [at the end] */
-    opj_write_bytes(l_data_header,JPIP_THIX,4); /* THIX */
-    opj_stream_write_data(cio,l_data_header,4,p_manager);
-
-    opj_write_manf( i, cstr_info.tw*cstr_info.th, box, cio, p_manager);
-    
-    for (tileno = 0; tileno < cstr_info.tw*cstr_info.th; tileno++){
-      box[tileno].length = (OPJ_UINT32)opj_write_tilemhix( coff, cstr_info, tileno, cio,p_manager);
-      box[tileno].type = JPIP_MHIX;
+    OPJ_BYTE l_data_header [4];
+    int i;
+    int tileno;
+    opj_jp2_box_t *box;
+    OPJ_UINT32 len;
+    OPJ_OFF_T lenp;
+
+    lenp = 0;
+    box = (opj_jp2_box_t *)opj_calloc((size_t)(cstr_info.tw * cstr_info.th),
+                                      sizeof(opj_jp2_box_t));
+    if (box == NULL) {
+        return 0;
     }
-    len = (OPJ_UINT32)(opj_stream_tell(cio)-lenp);
-    opj_stream_seek(cio, lenp, p_manager);
-    opj_write_bytes(l_data_header,len,4); /* L              */
-    opj_stream_write_data(cio,l_data_header,4,p_manager);
-    opj_stream_seek( cio, lenp+len,p_manager);
+    for (i = 0; i < 2 ; i++) {
+        if (i) {
+            opj_stream_seek(cio, lenp, p_manager);
+        }
+
+        lenp = opj_stream_tell(cio);
+        opj_stream_skip(cio, 4, p_manager);             /* L [at the end] */
+        opj_write_bytes(l_data_header, JPIP_THIX, 4); /* THIX */
+        opj_stream_write_data(cio, l_data_header, 4, p_manager);
+
+        opj_write_manf(i, cstr_info.tw * cstr_info.th, box, cio, p_manager);
+
+        for (tileno = 0; tileno < cstr_info.tw * cstr_info.th; tileno++) {
+            box[tileno].length = (OPJ_UINT32)opj_write_tilemhix(coff, cstr_info, tileno,
+                                 cio, p_manager);
+            box[tileno].type = JPIP_MHIX;
+        }
+
+        len = (OPJ_UINT32)(opj_stream_tell(cio) - lenp);
+        opj_stream_seek(cio, lenp, p_manager);
+        opj_write_bytes(l_data_header, len, 4); /* L              */
+        opj_stream_write_data(cio, l_data_header, 4, p_manager);
+        opj_stream_seek(cio, lenp + len, p_manager);
 
-  }
+    }
 
-  opj_free(box);
+    opj_free(box);
 
-  return (int)len;
+    return (int)len;
 }
 
-/* 
+/*
  * Write tile-part headers mhix box
  *
  * @param[in] coff      offset of j2k codestream
@@ -90,47 +94,53 @@ int opj_write_thix( int coff, opj_codestream_info_t cstr_info, opj_stream_privat
  * @param[in] cio       file output handle
  * @return              length of mhix box
  */
-int opj_write_tilemhix( int coff, opj_codestream_info_t cstr_info, int tileno, opj_stream_private_t *cio,
-              opj_event_mgr_t * p_manager )
+int opj_write_tilemhix(int coff, opj_codestream_info_t cstr_info, int tileno,
+                       opj_stream_private_t *cio,
+                       opj_event_mgr_t * p_manager)
 {
-  OPJ_BYTE l_data_header [8];
-  int i;
-  opj_tile_info_t tile;
-  opj_tp_info_t tp;
-  opj_marker_info_t *marker;
-  OPJ_UINT32 len;
-  OPJ_OFF_T lenp;
-
-  lenp = opj_stream_tell (cio);
-  opj_stream_skip(cio, 4, p_manager);               /* L [at the end]                    */
-  opj_write_bytes(l_data_header,JPIP_MHIX,4);       /* MHIX                              */
-  opj_stream_write_data(cio,l_data_header,4,p_manager);
-
-  tile = cstr_info.tile[tileno];
-  tp = tile.tp[0];
-
-  opj_write_bytes(l_data_header,(OPJ_UINT32)(tp.tp_end_header-tp.tp_start_pos+1), 8);        /* TLEN                              */
-  opj_stream_write_data(cio,l_data_header,8,p_manager);
-
-  marker = cstr_info.tile[tileno].marker;
-
-  for( i=0; i<cstr_info.tile[tileno].marknum; i++){             /* Marker restricted to 1 apparition */
-    opj_write_bytes( l_data_header, marker[i].type, 2);
-    opj_write_bytes( l_data_header+2, 0, 2);
-    opj_stream_write_data(cio,l_data_header,4,p_manager);
-    opj_write_bytes( l_data_header, (OPJ_UINT32)(marker[i].pos-coff), 8);
-    opj_stream_write_data(cio,l_data_header,8,p_manager);
-    opj_write_bytes( l_data_header, (OPJ_UINT32)marker[i].len, 2);
-    opj_stream_write_data(cio,l_data_header,2,p_manager);
-  }
-     
-  /*  free( marker);*/
-
-  len = (OPJ_UINT32)(opj_stream_tell(cio)-lenp);
-  opj_stream_seek(cio, lenp,p_manager);
-  opj_write_bytes(l_data_header,len,4);/* L  */
-  opj_stream_write_data(cio,l_data_header,4,p_manager);
-  opj_stream_seek(cio, lenp+len,p_manager);
-
-  return (int)len;
+    OPJ_BYTE l_data_header [8];
+    int i;
+    opj_tile_info_t tile;
+    opj_tp_info_t tp;
+    opj_marker_info_t *marker;
+    OPJ_UINT32 len;
+    OPJ_OFF_T lenp;
+
+    lenp = opj_stream_tell(cio);
+    opj_stream_skip(cio, 4,
+                    p_manager);               /* L [at the end]                    */
+    opj_write_bytes(l_data_header, JPIP_MHIX,
+                    4);     /* MHIX                              */
+    opj_stream_write_data(cio, l_data_header, 4, p_manager);
+
+    tile = cstr_info.tile[tileno];
+    tp = tile.tp[0];
+
+    opj_write_bytes(l_data_header,
+                    (OPJ_UINT32)(tp.tp_end_header - tp.tp_start_pos + 1),
+                    8);        /* TLEN                              */
+    opj_stream_write_data(cio, l_data_header, 8, p_manager);
+
+    marker = cstr_info.tile[tileno].marker;
+
+    for (i = 0; i < cstr_info.tile[tileno].marknum;
+            i++) {        /* Marker restricted to 1 apparition */
+        opj_write_bytes(l_data_header, marker[i].type, 2);
+        opj_write_bytes(l_data_header + 2, 0, 2);
+        opj_stream_write_data(cio, l_data_header, 4, p_manager);
+        opj_write_bytes(l_data_header, (OPJ_UINT32)(marker[i].pos - coff), 8);
+        opj_stream_write_data(cio, l_data_header, 8, p_manager);
+        opj_write_bytes(l_data_header, (OPJ_UINT32)marker[i].len, 2);
+        opj_stream_write_data(cio, l_data_header, 2, p_manager);
+    }
+
+    /*  free( marker);*/
+
+    len = (OPJ_UINT32)(opj_stream_tell(cio) - lenp);
+    opj_stream_seek(cio, lenp, p_manager);
+    opj_write_bytes(l_data_header, len, 4); /* L  */
+    opj_stream_write_data(cio, l_data_header, 4, p_manager);
+    opj_stream_seek(cio, lenp + len, p_manager);
+
+    return (int)len;
 }
index 79a9d5fb496ac20b12dd21eb94fb610c3b0cbae8..8b56aa4d5ccfefe29b89ec3ad73878ec1bd49001 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -57,51 +57,52 @@ int OPJ_CALLCONV opj_get_num_cpus(void)
     DWORD dwNum;
     GetSystemInfo(&info);
     dwNum = info.dwNumberOfProcessors;
-    if( dwNum < 1 )
+    if (dwNum < 1) {
         return 1;
+    }
     return (int)dwNum;
 }
 
-struct opj_mutex_t
-{
+struct opj_mutex_t {
     CRITICAL_SECTION cs;
 };
 
 opj_mutex_t* opj_mutex_create(void)
 {
     opj_mutex_t* mutex = (opj_mutex_t*) opj_malloc(sizeof(opj_mutex_t));
-    if( !mutex )
+    if (!mutex) {
         return NULL;
+    }
     InitializeCriticalSectionAndSpinCount(&(mutex->cs), 4000);
     return mutex;
 }
 
 void opj_mutex_lock(opj_mutex_t* mutex)
 {
-    EnterCriticalSection( &(mutex->cs) );
+    EnterCriticalSection(&(mutex->cs));
 }
 
 void opj_mutex_unlock(opj_mutex_t* mutex)
 {
-    LeaveCriticalSection( &(mutex->cs) );
+    LeaveCriticalSection(&(mutex->cs));
 }
 
 void opj_mutex_destroy(opj_mutex_t* mutex)
 {
-    if( !mutex ) return;
-    DeleteCriticalSection( &(mutex->cs) );
-    opj_free( mutex );
+    if (!mutex) {
+        return;
+    }
+    DeleteCriticalSection(&(mutex->cs));
+    opj_free(mutex);
 }
 
-struct opj_cond_waiter_list_t
-{
+struct opj_cond_waiter_list_t {
     HANDLE hEvent;
     struct opj_cond_waiter_list_t* next;
 };
 typedef struct opj_cond_waiter_list_t opj_cond_waiter_list_t;
 
-struct opj_cond_t
-{
+struct opj_cond_t {
     opj_mutex_t             *internal_mutex;
     opj_cond_waiter_list_t  *waiter_list;
 };
@@ -113,21 +114,20 @@ static volatile int TLSKeyInit = OPJ_FALSE;
 opj_cond_t* opj_cond_create(void)
 {
     opj_cond_t* cond = (opj_cond_t*) opj_malloc(sizeof(opj_cond_t));
-    if( !cond )
+    if (!cond) {
         return NULL;
+    }
 
     /* Make sure that the TLS key is allocated in a thread-safe way */
     /* We cannot use a global mutex/critical section since its creation itself would not be */
     /* thread-safe, so use InterlockedCompareExchange trick */
-    while( OPJ_TRUE )
-    {
+    while (OPJ_TRUE) {
 
 #if HAVE_INTERLOCKED_COMPARE_EXCHANGE
-        if( InterlockedCompareExchange(&inTLSLockedSection, 1, 0) == 0 )
+        if (InterlockedCompareExchange(&inTLSLockedSection, 1, 0) == 0)
 #endif
         {
-            if( !TLSKeyInit )
-            {
+            if (!TLSKeyInit) {
                 TLSKey = TlsAlloc();
                 TLSKeyInit = OPJ_TRUE;
             }
@@ -138,14 +138,12 @@ opj_cond_t* opj_cond_create(void)
         }
     }
 
-    if( TLSKey == TLS_OUT_OF_INDEXES )
-    {
+    if (TLSKey == TLS_OUT_OF_INDEXES) {
         opj_free(cond);
         return NULL;
     }
     cond->internal_mutex = opj_mutex_create();
-    if (cond->internal_mutex == NULL)
-    {
+    if (cond->internal_mutex == NULL) {
         opj_free(cond);
         return NULL;
     }
@@ -156,16 +154,15 @@ opj_cond_t* opj_cond_create(void)
 void opj_cond_wait(opj_cond_t* cond, opj_mutex_t* mutex)
 {
     opj_cond_waiter_list_t* item;
-    HANDLE hEvent = (HANDLE) TlsGetValue( TLSKey );
-    if (hEvent == NULL)
-    {
+    HANDLE hEvent = (HANDLE) TlsGetValue(TLSKey);
+    if (hEvent == NULL) {
         hEvent = CreateEvent(NULL, /* security attributes */
                              0,    /* manual reset = no */
                              0,    /* initial state = unsignaled */
                              NULL  /* no name */);
         assert(hEvent);
 
-        TlsSetValue( TLSKey, hEvent );
+        TlsSetValue(TLSKey, hEvent);
     }
 
     /* Insert the waiter into the waiter list of the condition */
@@ -200,8 +197,7 @@ void opj_cond_signal(opj_cond_t* cond)
     opj_mutex_lock(cond->internal_mutex);
 
     psIter = cond->waiter_list;
-    if (psIter != NULL)
-    {
+    if (psIter != NULL) {
         SetEvent(psIter->hEvent);
         cond->waiter_list = psIter->next;
         opj_free(psIter);
@@ -212,37 +208,36 @@ void opj_cond_signal(opj_cond_t* cond)
 
 void opj_cond_destroy(opj_cond_t* cond)
 {
-    if( !cond ) return;
+    if (!cond) {
+        return;
+    }
     opj_mutex_destroy(cond->internal_mutex);
     assert(cond->waiter_list == NULL);
     opj_free(cond);
 }
 
-struct opj_thread_t
-{
+struct opj_thread_t {
     opj_thread_fn thread_fn;
     void* user_data;
     HANDLE hThread;
 };
 
-unsigned int __stdcall opj_thread_callback_adapter( void *info )
+unsigned int __stdcall opj_thread_callback_adapter(void *info)
 {
     opj_thread_t* thread = (opj_thread_t*) info;
     HANDLE hEvent = NULL;
 
-    thread->thread_fn( thread->user_data );
+    thread->thread_fn(thread->user_data);
 
     /* Free the handle possible allocated by a cond */
-    while( OPJ_TRUE )
-    {
+    while (OPJ_TRUE) {
         /* Make sure TLSKey is not being created just at that moment... */
 #if HAVE_INTERLOCKED_COMPARE_EXCHANGE
-        if( InterlockedCompareExchange(&inTLSLockedSection, 1, 0) == 0 )
+        if (InterlockedCompareExchange(&inTLSLockedSection, 1, 0) == 0)
 #endif
         {
-            if( TLSKeyInit )
-            {
-                hEvent = (HANDLE) TlsGetValue( TLSKey );
+            if (TLSKeyInit) {
+                hEvent = (HANDLE) TlsGetValue(TLSKey);
             }
 #if HAVE_INTERLOCKED_COMPARE_EXCHANGE
             InterlockedCompareExchange(&inTLSLockedSection, 0, 1);
@@ -250,39 +245,40 @@ unsigned int __stdcall opj_thread_callback_adapter( void *info )
             break;
         }
     }
-    if( hEvent )
+    if (hEvent) {
         CloseHandle(hEvent);
+    }
 
     return 0;
 }
 
-opj_thread_t* opj_thread_create( opj_thread_fn thread_fn, void* user_data )
+opj_thread_t* opj_thread_create(opj_thread_fn thread_fn, void* user_data)
 {
     opj_thread_t* thread;
 
-    assert( thread_fn );
+    assert(thread_fn);
 
-    thread = (opj_thread_t*) opj_malloc( sizeof(opj_thread_t) );
-    if( !thread )
+    thread = (opj_thread_t*) opj_malloc(sizeof(opj_thread_t));
+    if (!thread) {
         return NULL;
+    }
     thread->thread_fn = thread_fn;
     thread->user_data = user_data;
 
     thread->hThread = (HANDLE)_beginthreadex(NULL, 0,
-                                    opj_thread_callback_adapter, thread, 0, NULL);
+                      opj_thread_callback_adapter, thread, 0, NULL);
 
-    if( thread->hThread == NULL )
-    {
-        opj_free( thread );
+    if (thread->hThread == NULL) {
+        opj_free(thread);
         return NULL;
     }
     return thread;
 }
 
-void opj_thread_join( opj_thread_t* thread )
+void opj_thread_join(opj_thread_t* thread)
 {
     WaitForSingleObject(thread->hThread, INFINITE);
-    CloseHandle( thread->hThread );
+    CloseHandle(thread->hThread);
 
     opj_free(thread);
 }
@@ -307,16 +303,15 @@ int OPJ_CALLCONV opj_get_num_cpus(void)
 #endif
 }
 
-struct opj_mutex_t
-{
+struct opj_mutex_t {
     pthread_mutex_t mutex;
 };
 
 opj_mutex_t* opj_mutex_create(void)
 {
     opj_mutex_t* mutex = (opj_mutex_t*) opj_calloc(1U, sizeof(opj_mutex_t));
-    if( mutex != NULL ) {
-        if ( pthread_mutex_init(&mutex->mutex, NULL) != 0) {
+    if (mutex != NULL) {
+        if (pthread_mutex_init(&mutex->mutex, NULL) != 0) {
             opj_free(mutex);
             mutex = NULL;
         }
@@ -336,23 +331,24 @@ void opj_mutex_unlock(opj_mutex_t* mutex)
 
 void opj_mutex_destroy(opj_mutex_t* mutex)
 {
-    if( !mutex ) return;
+    if (!mutex) {
+        return;
+    }
     pthread_mutex_destroy(&(mutex->mutex));
     opj_free(mutex);
 }
 
-struct opj_cond_t
-{
+struct opj_cond_t {
     pthread_cond_t cond;
 };
 
 opj_cond_t* opj_cond_create(void)
 {
     opj_cond_t* cond = (opj_cond_t*) opj_malloc(sizeof(opj_cond_t));
-    if( !cond )
+    if (!cond) {
         return NULL;
-    if( pthread_cond_init(&(cond->cond), NULL) != 0 )
-    {
+    }
+    if (pthread_cond_init(&(cond->cond), NULL) != 0) {
         opj_free(cond);
         return NULL;
     }
@@ -373,54 +369,55 @@ void opj_cond_signal(opj_cond_t* cond)
 
 void opj_cond_destroy(opj_cond_t* cond)
 {
-    if( !cond ) return;
+    if (!cond) {
+        return;
+    }
     pthread_cond_destroy(&(cond->cond));
     opj_free(cond);
 }
 
 
-struct opj_thread_t
-{
+struct opj_thread_t {
     opj_thread_fn thread_fn;
     void* user_data;
     pthread_t thread;
 };
 
-static void* opj_thread_callback_adapter( void* info )
+static void* opj_thread_callback_adapter(void* info)
 {
     opj_thread_t* thread = (opj_thread_t*) info;
-    thread->thread_fn( thread->user_data );
+    thread->thread_fn(thread->user_data);
     return NULL;
 }
 
-opj_thread_t* opj_thread_create( opj_thread_fn thread_fn, void* user_data )
+opj_thread_t* opj_thread_create(opj_thread_fn thread_fn, void* user_data)
 {
     pthread_attr_t attr;
     opj_thread_t* thread;
 
-    assert( thread_fn );
+    assert(thread_fn);
 
-    thread = (opj_thread_t*) opj_malloc( sizeof(opj_thread_t) );
-    if( !thread )
+    thread = (opj_thread_t*) opj_malloc(sizeof(opj_thread_t));
+    if (!thread) {
         return NULL;
+    }
     thread->thread_fn = thread_fn;
     thread->user_data = user_data;
 
-    pthread_attr_init( &attr );
-    pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_JOINABLE );
-    if( pthread_create( &(thread->thread), &attr,
-                        opj_thread_callback_adapter, (void *) thread ) != 0 )
-    {
-        opj_free( thread );
+    pthread_attr_init(&attr);
+    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+    if (pthread_create(&(thread->thread), &attr,
+                       opj_thread_callback_adapter, (void *) thread) != 0) {
+        opj_free(thread);
         return NULL;
     }
     return thread;
 }
 
-void opj_thread_join( opj_thread_t* thread )
+void opj_thread_join(opj_thread_t* thread)
 {
     void* status;
-    pthread_join( thread->thread, &status);
+    pthread_join(thread->thread, &status);
 
     opj_free(thread);
 }
@@ -479,29 +476,27 @@ void opj_cond_destroy(opj_cond_t* cond)
     (void) cond;
 }
 
-opj_thread_t* opj_thread_create( opj_thread_fn thread_fn, void* user_data )
+opj_thread_t* opj_thread_create(opj_thread_fn thread_fn, void* user_data)
 {
-    (void) thread_fn; 
+    (void) thread_fn;
     (void) user_data;
     return NULL;
 }
 
-void opj_thread_join( opj_thread_t* thread )
+void opj_thread_join(opj_thread_t* thread)
 {
     (void) thread;
 }
 
 #endif
 
-typedef struct
-{
+typedef struct {
     int key;
     void* value;
     opj_tls_free_func opj_free_func;
 } opj_tls_key_val_t;
 
-struct opj_tls_t
-{
+struct opj_tls_t {
     opj_tls_key_val_t* key_val;
     int                key_val_count;
 };
@@ -514,11 +509,13 @@ static opj_tls_t* opj_tls_new(void)
 static void opj_tls_destroy(opj_tls_t* tls)
 {
     int i;
-    if( !tls ) return;
-    for(i=0;i<tls->key_val_count;i++)
-    {
-        if( tls->key_val[i].opj_free_func )
+    if (!tls) {
+        return;
+    }
+    for (i = 0; i < tls->key_val_count; i++) {
+        if (tls->key_val[i].opj_free_func) {
             tls->key_val[i].opj_free_func(tls->key_val[i].value);
+        }
     }
     opj_free(tls->key_val);
     opj_free(tls);
@@ -527,27 +524,26 @@ static void opj_tls_destroy(opj_tls_t* tls)
 void* opj_tls_get(opj_tls_t* tls, int key)
 {
     int i;
-    for(i=0;i<tls->key_val_count;i++)
-    {
-        if( tls->key_val[i].key == key )
+    for (i = 0; i < tls->key_val_count; i++) {
+        if (tls->key_val[i].key == key) {
             return tls->key_val[i].value;
+        }
     }
     return NULL;
 }
 
-OPJ_BOOL opj_tls_set(opj_tls_t* tls, int key, void* value, opj_tls_free_func opj_free_func)
+OPJ_BOOL opj_tls_set(opj_tls_t* tls, int key, void* value,
+                     opj_tls_free_func opj_free_func)
 {
     opj_tls_key_val_t* new_key_val;
     int i;
-       
+
     if (tls->key_val_count == INT_MAX) {
         return OPJ_FALSE;
     }
-    for(i=0;i<tls->key_val_count;i++)
-    {
-        if( tls->key_val[i].key == key )
-        {
-            if( tls->key_val[i].opj_free_func ) {
+    for (i = 0; i < tls->key_val_count; i++) {
+        if (tls->key_val[i].key == key) {
+            if (tls->key_val[i].opj_free_func) {
                 tls->key_val[i].opj_free_func(tls->key_val[i].value);
             }
             tls->key_val[i].value = value;
@@ -555,10 +551,11 @@ OPJ_BOOL opj_tls_set(opj_tls_t* tls, int key, void* value, opj_tls_free_func opj
             return OPJ_TRUE;
         }
     }
-    new_key_val = (opj_tls_key_val_t*) opj_realloc( tls->key_val,
-                        ((size_t)tls->key_val_count + 1U) * sizeof(opj_tls_key_val_t) );
-    if( !new_key_val )
+    new_key_val = (opj_tls_key_val_t*) opj_realloc(tls->key_val,
+                  ((size_t)tls->key_val_count + 1U) * sizeof(opj_tls_key_val_t));
+    if (!new_key_val) {
         return OPJ_FALSE;
+    }
     tls->key_val = new_key_val;
     new_key_val[tls->key_val_count].key = key;
     new_key_val[tls->key_val_count].value = value;
@@ -568,14 +565,12 @@ OPJ_BOOL opj_tls_set(opj_tls_t* tls, int key, void* value, opj_tls_free_func opj
 }
 
 
-typedef struct
-{
+typedef struct {
     opj_job_fn          job_fn;
     void               *user_data;
 } opj_worker_thread_job_t;
 
-typedef struct
-{
+typedef struct {
     opj_thread_pool_t   *tp;
     opj_thread_t        *thread;
     int                  marked_as_waiting;
@@ -584,29 +579,25 @@ typedef struct
     opj_cond_t          *cond;
 } opj_worker_thread_t;
 
-typedef enum
-{
+typedef enum {
     OPJWTS_OK,
     OPJWTS_STOP,
     OPJWTS_ERROR
 } opj_worker_thread_state;
 
-struct opj_job_list_t
-{
+struct opj_job_list_t {
     opj_worker_thread_job_t* job;
     struct opj_job_list_t* next;
 };
 typedef struct opj_job_list_t opj_job_list_t;
 
-struct opj_worker_thread_list_t
-{
+struct opj_worker_thread_list_t {
     opj_worker_thread_t* worker_thread;
     struct opj_worker_thread_list_t* next;
 };
 typedef struct opj_worker_thread_list_t opj_worker_thread_list_t;
 
-struct opj_thread_pool_t
-{
+struct opj_thread_pool_t {
     opj_worker_thread_t*             worker_threads;
     int                              worker_threads_count;
     opj_cond_t*                      cond;
@@ -621,24 +612,24 @@ struct opj_thread_pool_t
 };
 
 static OPJ_BOOL opj_thread_pool_setup(opj_thread_pool_t* tp, int num_threads);
-static opj_worker_thread_job_t* opj_thread_pool_get_next_job(opj_thread_pool_t* tp,
-                                                             opj_worker_thread_t* worker_thread,
-                                                             OPJ_BOOL signal_job_finished);
+static opj_worker_thread_job_t* opj_thread_pool_get_next_job(
+    opj_thread_pool_t* tp,
+    opj_worker_thread_t* worker_thread,
+    OPJ_BOOL signal_job_finished);
 
 opj_thread_pool_t* opj_thread_pool_create(int num_threads)
 {
     opj_thread_pool_t* tp;
 
     tp = (opj_thread_pool_t*) opj_calloc(1, sizeof(opj_thread_pool_t));
-    if( !tp )
+    if (!tp) {
         return NULL;
+    }
     tp->state = OPJWTS_OK;
 
-    if( num_threads <= 0 )
-    {
+    if (num_threads <= 0) {
         tp->tls = opj_tls_new();
-        if( !tp->tls )
-        {
+        if (!tp->tls) {
             opj_free(tp);
             tp = NULL;
         }
@@ -646,13 +637,11 @@ opj_thread_pool_t* opj_thread_pool_create(int num_threads)
     }
 
     tp->mutex = opj_mutex_create();
-    if( !tp->mutex )
-    {
+    if (!tp->mutex) {
         opj_free(tp);
         return NULL;
     }
-    if( !opj_thread_pool_setup(tp, num_threads) )
-    {
+    if (!opj_thread_pool_setup(tp, num_threads)) {
         opj_thread_pool_destroy(tp);
         return NULL;
     }
@@ -666,18 +655,18 @@ static void opj_worker_thread_function(void* user_data)
     opj_tls_t* tls;
     OPJ_BOOL job_finished = OPJ_FALSE;
 
-    worker_thread = (opj_worker_thread_t* ) user_data;
+    worker_thread = (opj_worker_thread_t*) user_data;
     tp = worker_thread->tp;
     tls = opj_tls_new();
 
-    while( OPJ_TRUE )
-    {
-        opj_worker_thread_job_t* job = opj_thread_pool_get_next_job(tp, worker_thread, job_finished);
-        if( job == NULL )
+    while (OPJ_TRUE) {
+        opj_worker_thread_job_t* job = opj_thread_pool_get_next_job(tp, worker_thread,
+                                       job_finished);
+        if (job == NULL) {
             break;
+        }
 
-        if( job->job_fn )
-        {
+        if (job->job_fn) {
             job->job_fn(job->user_data, tls);
         }
         opj_free(job);
@@ -692,33 +681,32 @@ static OPJ_BOOL opj_thread_pool_setup(opj_thread_pool_t* tp, int num_threads)
     int i;
     OPJ_BOOL bRet = OPJ_TRUE;
 
-    assert( num_threads > 0 );
+    assert(num_threads > 0);
 
     tp->cond = opj_cond_create();
-    if( tp->cond == NULL )
+    if (tp->cond == NULL) {
         return OPJ_FALSE;
+    }
 
-    tp->worker_threads = (opj_worker_thread_t*) opj_calloc( (size_t)num_threads,
-                                                        sizeof(opj_worker_thread_t) );
-    if( tp->worker_threads == NULL )
+    tp->worker_threads = (opj_worker_thread_t*) opj_calloc((size_t)num_threads,
+                         sizeof(opj_worker_thread_t));
+    if (tp->worker_threads == NULL) {
         return OPJ_FALSE;
+    }
     tp->worker_threads_count = num_threads;
 
-    for(i=0;i<num_threads;i++)
-    {
+    for (i = 0; i < num_threads; i++) {
         tp->worker_threads[i].tp = tp;
 
         tp->worker_threads[i].mutex = opj_mutex_create();
-        if( tp->worker_threads[i].mutex == NULL )
-        {
+        if (tp->worker_threads[i].mutex == NULL) {
             tp->worker_threads_count = i;
             bRet = OPJ_FALSE;
             break;
         }
 
         tp->worker_threads[i].cond = opj_cond_create();
-        if( tp->worker_threads[i].cond == NULL )
-        {
+        if (tp->worker_threads[i].cond == NULL) {
             opj_mutex_destroy(tp->worker_threads[i].mutex);
             tp->worker_threads_count = i;
             bRet = OPJ_FALSE;
@@ -728,9 +716,8 @@ static OPJ_BOOL opj_thread_pool_setup(opj_thread_pool_t* tp, int num_threads)
         tp->worker_threads[i].marked_as_waiting = OPJ_FALSE;
 
         tp->worker_threads[i].thread = opj_thread_create(opj_worker_thread_function,
-                                                         &(tp->worker_threads[i]));
-        if( tp->worker_threads[i].thread == NULL )
-        {
+                                       &(tp->worker_threads[i]));
+        if (tp->worker_threads[i].thread == NULL) {
             tp->worker_threads_count = i;
             bRet = OPJ_FALSE;
             break;
@@ -740,15 +727,15 @@ static OPJ_BOOL opj_thread_pool_setup(opj_thread_pool_t* tp, int num_threads)
     /* Wait all threads to be started */
     /* printf("waiting for all threads to be started\n"); */
     opj_mutex_lock(tp->mutex);
-    while( tp->waiting_worker_thread_count < num_threads )
-    {
+    while (tp->waiting_worker_thread_count < num_threads) {
         opj_cond_wait(tp->cond, tp->mutex);
     }
     opj_mutex_unlock(tp->mutex);
     /* printf("all threads started\n"); */
 
-    if( tp->state == OPJWTS_ERROR )
+    if (tp->state == OPJWTS_ERROR) {
         bRet = OPJ_FALSE;
+    }
 
     return bRet;
 }
@@ -760,33 +747,31 @@ void opj_waiting()
 }
 */
 
-static opj_worker_thread_job_t* opj_thread_pool_get_next_job(opj_thread_pool_t* tp,
-                                                             opj_worker_thread_t* worker_thread,
-                                                             OPJ_BOOL signal_job_finished)
+static opj_worker_thread_job_t* opj_thread_pool_get_next_job(
+    opj_thread_pool_t* tp,
+    opj_worker_thread_t* worker_thread,
+    OPJ_BOOL signal_job_finished)
 {
-    while( OPJ_TRUE )
-    {
+    while (OPJ_TRUE) {
         opj_job_list_t* top_job_iter;
 
         opj_mutex_lock(tp->mutex);
 
-        if( signal_job_finished )
-        {
+        if (signal_job_finished) {
             signal_job_finished = OPJ_FALSE;
             tp->pending_jobs_count --;
             /*printf("tp=%p, remaining jobs: %d\n", tp, tp->pending_jobs_count);*/
-            if( tp->pending_jobs_count <= tp->signaling_threshold )
+            if (tp->pending_jobs_count <= tp->signaling_threshold) {
                 opj_cond_signal(tp->cond);
+            }
         }
 
-        if( tp->state == OPJWTS_STOP )
-        {
+        if (tp->state == OPJWTS_STOP) {
             opj_mutex_unlock(tp->mutex);
             return NULL;
         }
         top_job_iter = tp->job_queue;
-        if( top_job_iter )
-        {
+        if (top_job_iter) {
             opj_worker_thread_job_t* job;
             tp->job_queue = top_job_iter->next;
 
@@ -797,17 +782,15 @@ static opj_worker_thread_job_t* opj_thread_pool_get_next_job(opj_thread_pool_t*
         }
 
         /* opj_waiting(); */
-        if( !worker_thread->marked_as_waiting )
-        {
+        if (!worker_thread->marked_as_waiting) {
             opj_worker_thread_list_t* item;
 
             worker_thread->marked_as_waiting = OPJ_TRUE;
             tp->waiting_worker_thread_count ++;
             assert(tp->waiting_worker_thread_count <= tp->worker_threads_count);
 
-            item= (opj_worker_thread_list_t*) opj_malloc(sizeof(opj_worker_thread_list_t));
-            if( item == NULL )
-            {
+            item = (opj_worker_thread_list_t*) opj_malloc(sizeof(opj_worker_thread_list_t));
+            if (item == NULL) {
                 tp->state = OPJWTS_ERROR;
                 opj_cond_signal(tp->cond);
 
@@ -827,7 +810,7 @@ static opj_worker_thread_job_t* opj_thread_pool_get_next_job(opj_thread_pool_t*
         opj_mutex_unlock(tp->mutex);
 
         /* printf("waiting for job\n"); */
-        opj_cond_wait( worker_thread->cond, worker_thread->mutex );
+        opj_cond_wait(worker_thread->cond, worker_thread->mutex);
 
         opj_mutex_unlock(worker_thread->mutex);
         /* printf("got job\n"); */
@@ -841,21 +824,20 @@ OPJ_BOOL opj_thread_pool_submit_job(opj_thread_pool_t* tp,
     opj_worker_thread_job_t* job;
     opj_job_list_t* item;
 
-    if( tp->mutex == NULL )
-    {
-        job_fn( user_data, tp->tls );
+    if (tp->mutex == NULL) {
+        job_fn(user_data, tp->tls);
         return OPJ_TRUE;
     }
 
     job = (opj_worker_thread_job_t*)opj_malloc(sizeof(opj_worker_thread_job_t));
-    if( job == NULL )
+    if (job == NULL) {
         return OPJ_FALSE;
+    }
     job->job_fn = job_fn;
     job->user_data = user_data;
 
     item = (opj_job_list_t*) opj_malloc(sizeof(opj_job_list_t));
-    if( item == NULL )
-    {
+    if (item == NULL) {
         opj_free(job);
         return OPJ_FALSE;
     }
@@ -864,8 +846,7 @@ OPJ_BOOL opj_thread_pool_submit_job(opj_thread_pool_t* tp,
     opj_mutex_lock(tp->mutex);
 
     tp->signaling_threshold = 100 * tp->worker_threads_count;
-    while( tp->pending_jobs_count > tp->signaling_threshold )
-    {
+    while (tp->pending_jobs_count > tp->signaling_threshold) {
         /* printf("%d jobs enqueued. Waiting\n", tp->pending_jobs_count); */
         opj_cond_wait(tp->cond, tp->mutex);
         /* printf("...%d jobs enqueued.\n", tp->pending_jobs_count); */
@@ -875,15 +856,14 @@ OPJ_BOOL opj_thread_pool_submit_job(opj_thread_pool_t* tp,
     tp->job_queue = item;
     tp->pending_jobs_count ++;
 
-    if( tp->waiting_worker_thread_list )
-    {
+    if (tp->waiting_worker_thread_list) {
         opj_worker_thread_t* worker_thread;
         opj_worker_thread_list_t* next;
         opj_worker_thread_list_t* to_opj_free;
 
         worker_thread = tp->waiting_worker_thread_list->worker_thread;
 
-        assert( worker_thread->marked_as_waiting );
+        assert(worker_thread->marked_as_waiting);
         worker_thread->marked_as_waiting = OPJ_FALSE;
 
         next = tp->waiting_worker_thread_list->next;
@@ -897,26 +877,26 @@ OPJ_BOOL opj_thread_pool_submit_job(opj_thread_pool_t* tp,
         opj_mutex_unlock(worker_thread->mutex);
 
         opj_free(to_opj_free);
-    }
-    else
+    } else {
         opj_mutex_unlock(tp->mutex);
+    }
 
     return OPJ_TRUE;
 }
 
-void opj_thread_pool_wait_completion(opj_thread_pool_t* tp, int max_remaining_jobs)
+void opj_thread_pool_wait_completion(opj_thread_pool_t* tp,
+                                     int max_remaining_jobs)
 {
-    if( tp->mutex == NULL )
-    {
+    if (tp->mutex == NULL) {
         return;
     }
 
-    if( max_remaining_jobs < 0 )
+    if (max_remaining_jobs < 0) {
         max_remaining_jobs = 0;
+    }
     opj_mutex_lock(tp->mutex);
     tp->signaling_threshold = max_remaining_jobs;
-    while( tp->pending_jobs_count > max_remaining_jobs )
-    {
+    while (tp->pending_jobs_count > max_remaining_jobs) {
         /*printf("tp=%p, jobs before wait = %d, max_remaining_jobs = %d\n", tp, tp->pending_jobs_count, max_remaining_jobs);*/
         opj_cond_wait(tp->cond, tp->mutex);
         /*printf("tp=%p, jobs after wait = %d\n", tp, tp->pending_jobs_count);*/
@@ -931,9 +911,10 @@ int opj_thread_pool_get_thread_count(opj_thread_pool_t* tp)
 
 void opj_thread_pool_destroy(opj_thread_pool_t* tp)
 {
-    if( !tp ) return;
-    if( tp->cond )
-    {
+    if (!tp) {
+        return;
+    }
+    if (tp->cond) {
         int i;
         opj_thread_pool_wait_completion(tp, 0);
 
@@ -941,8 +922,7 @@ void opj_thread_pool_destroy(opj_thread_pool_t* tp)
         tp->state = OPJWTS_STOP;
         opj_mutex_unlock(tp->mutex);
 
-        for(i=0;i<tp->worker_threads_count;i++)
-        {
+        for (i = 0; i < tp->worker_threads_count; i++) {
             opj_mutex_lock(tp->worker_threads[i].mutex);
             opj_cond_signal(tp->worker_threads[i].cond);
             opj_mutex_unlock(tp->worker_threads[i].mutex);
@@ -953,10 +933,9 @@ void opj_thread_pool_destroy(opj_thread_pool_t* tp)
 
         opj_free(tp->worker_threads);
 
-        while( tp->waiting_worker_thread_list != NULL )
-        {
+        while (tp->waiting_worker_thread_list != NULL) {
             opj_worker_thread_list_t* next = tp->waiting_worker_thread_list->next;
-            opj_free( tp->waiting_worker_thread_list );
+            opj_free(tp->waiting_worker_thread_list);
             tp->waiting_worker_thread_list = next;
         }
 
index 74c02ba7c298cd6e8477c79ef6c9dea29d8e0630..86701f32aceb5bb9d6ce8ac60ec7017f76e080a1 100644 (file)
 
 #define MAX(a,b) ((a)>(b)?(a):(b))
 
-/* 
+/*
  * Get number of maximum tile parts per tile
  *
  * @param[in] cstr_info codestream information
  * @return              number of maximum tile parts per tile
  */
-int get_num_max_tile_parts( opj_codestream_info_t cstr_info);
+int get_num_max_tile_parts(opj_codestream_info_t cstr_info);
 
 
-/* 
+/*
  * Write faix box of tpix
  *
  * @param[in] coff offset of j2k codestream
@@ -57,129 +57,134 @@ int get_num_max_tile_parts( opj_codestream_info_t cstr_info);
  * @return              length of faix box
  */
 
-int opj_write_tpix( int coff, 
-                    opj_codestream_info_t cstr_info, 
-                    int j2klen, opj_stream_private_t *cio,
-                    opj_event_mgr_t * p_manager )
+int opj_write_tpix(int coff,
+                   opj_codestream_info_t cstr_info,
+                   int j2klen, opj_stream_private_t *cio,
+                   opj_event_mgr_t * p_manager)
 {
-  OPJ_BYTE l_data_header [4];
-  OPJ_UINT32 len;
-  OPJ_OFF_T lenp;
-
-  lenp = opj_stream_tell(cio);
-  opj_stream_skip(cio, 4, p_manager);
-  opj_write_bytes(l_data_header,JPIP_TPIX,4); /* TPIX */
-  opj_stream_write_data(cio,l_data_header,4,p_manager);
-  
-  opj_write_tpixfaix( coff, 0, cstr_info, j2klen, cio,p_manager);
-
-  len = (OPJ_UINT32)(opj_stream_tell(cio)-lenp);
-  opj_stream_skip(cio, lenp, p_manager);
-  opj_write_bytes(l_data_header,len,4);/* L              */
-  opj_stream_write_data(cio,l_data_header,4,p_manager);
-  opj_stream_seek(cio, lenp+len,p_manager);
-
-  return (int)len;
+    OPJ_BYTE l_data_header [4];
+    OPJ_UINT32 len;
+    OPJ_OFF_T lenp;
+
+    lenp = opj_stream_tell(cio);
+    opj_stream_skip(cio, 4, p_manager);
+    opj_write_bytes(l_data_header, JPIP_TPIX, 4); /* TPIX */
+    opj_stream_write_data(cio, l_data_header, 4, p_manager);
+
+    opj_write_tpixfaix(coff, 0, cstr_info, j2klen, cio, p_manager);
+
+    len = (OPJ_UINT32)(opj_stream_tell(cio) - lenp);
+
+    opj_stream_skip(cio, lenp, p_manager);
+    opj_write_bytes(l_data_header, len, 4); /* L              */
+    opj_stream_write_data(cio, l_data_header, 4, p_manager);
+    opj_stream_seek(cio, lenp + len, p_manager);
+
+    return (int)len;
 }
 
-int opj_write_tpixfaix( int coff,
-                        int compno, 
-                        opj_codestream_info_t cstr_info, 
-                        int j2klen, 
-                        opj_stream_private_t *cio,
-                        opj_event_mgr_t * p_manager )
+int opj_write_tpixfaix(int coff,
+                       int compno,
+                       opj_codestream_info_t cstr_info,
+                       int j2klen,
+                       opj_stream_private_t *cio,
+                       opj_event_mgr_t * p_manager)
 {
-  OPJ_UINT32 len;
-  OPJ_OFF_T lenp;
-  OPJ_UINT32 i, j;
-  OPJ_UINT32 Aux;
-  OPJ_UINT32 num_max_tile_parts;
-  OPJ_UINT32 size_of_coding; /* 4 or 8 */
-  opj_tp_info_t tp;
-  OPJ_BYTE l_data_header [8];
-  OPJ_UINT32 version;
-
-  num_max_tile_parts = (OPJ_UINT32)get_num_max_tile_parts( cstr_info);
-
-  if( j2klen > pow( 2, 32)){
-    size_of_coding =  8;
-    version = num_max_tile_parts == 1 ? 1:3;
-  }
-  else{
-    size_of_coding = 4;
-    version = num_max_tile_parts == 1 ? 0:2;
-  }
-
-  lenp = opj_stream_tell(cio);
-  opj_stream_skip(cio, 4, p_manager);         /* L [at the end]      */
-  opj_write_bytes(l_data_header,JPIP_FAIX,4); /* FAIX */
-  opj_stream_write_data(cio,l_data_header,4,p_manager);
-  opj_write_bytes(l_data_header,version,1);   /* Version 0 = 4 bytes */
-  opj_stream_write_data(cio,l_data_header,1,p_manager);
-
-  opj_write_bytes(l_data_header,num_max_tile_parts,size_of_coding);         /* NMAX           */
-  opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
-  opj_write_bytes(l_data_header,(OPJ_UINT32)(cstr_info.tw*cstr_info.th),size_of_coding);  /* M              */
-  opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
-
-  for (i = 0; i < (OPJ_UINT32)(cstr_info.tw*cstr_info.th); i++)
-    {
-    for (j = 0; j < (OPJ_UINT32)cstr_info.tile[i].num_tps; j++)
-      {
-      tp = cstr_info.tile[i].tp[j];
-
-      opj_write_bytes(l_data_header,(OPJ_UINT32)(tp.tp_start_pos-coff),size_of_coding);            /* start position */
-      opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
-      opj_write_bytes(l_data_header,(OPJ_UINT32)(tp.tp_end_pos-tp.tp_start_pos+1),size_of_coding); /* length         */
-      opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
-
-      if (version & 0x02)
-        {
-        if( cstr_info.tile[i].num_tps == 1 && cstr_info.numdecompos[compno] > 1)
-          Aux = (OPJ_UINT32)(cstr_info.numdecompos[compno] + 1);
-        else
-          Aux = j + 1;
-
-        opj_write_bytes(l_data_header,Aux,4);
-        opj_stream_write_data(cio,l_data_header,4,p_manager);
-
-        /*cio_write(img.tile[i].tile_parts[j].num_reso_AUX,4);*/ /* Aux_i,j : Auxiliary value */
-        /* fprintf(stderr,"AUX value %d\n",Aux);*/
+    OPJ_UINT32 len;
+    OPJ_OFF_T lenp;
+    OPJ_UINT32 i, j;
+    OPJ_UINT32 Aux;
+    OPJ_UINT32 num_max_tile_parts;
+    OPJ_UINT32 size_of_coding; /* 4 or 8 */
+    opj_tp_info_t tp;
+    OPJ_BYTE l_data_header [8];
+    OPJ_UINT32 version;
+
+    num_max_tile_parts = (OPJ_UINT32)get_num_max_tile_parts(cstr_info);
+
+    if (j2klen > pow(2, 32)) {
+        size_of_coding =  8;
+        version = num_max_tile_parts == 1 ? 1 : 3;
+    } else {
+        size_of_coding = 4;
+        version = num_max_tile_parts == 1 ? 0 : 2;
+    }
+
+    lenp = opj_stream_tell(cio);
+    opj_stream_skip(cio, 4, p_manager);         /* L [at the end]      */
+    opj_write_bytes(l_data_header, JPIP_FAIX, 4); /* FAIX */
+    opj_stream_write_data(cio, l_data_header, 4, p_manager);
+    opj_write_bytes(l_data_header, version, 1); /* Version 0 = 4 bytes */
+    opj_stream_write_data(cio, l_data_header, 1, p_manager);
+
+    opj_write_bytes(l_data_header, num_max_tile_parts,
+                    size_of_coding);       /* NMAX           */
+    opj_stream_write_data(cio, l_data_header, size_of_coding, p_manager);
+    opj_write_bytes(l_data_header, (OPJ_UINT32)(cstr_info.tw * cstr_info.th),
+                    size_of_coding);  /* M              */
+    opj_stream_write_data(cio, l_data_header, size_of_coding, p_manager);
+
+    for (i = 0; i < (OPJ_UINT32)(cstr_info.tw * cstr_info.th); i++) {
+        for (j = 0; j < (OPJ_UINT32)cstr_info.tile[i].num_tps; j++) {
+            tp = cstr_info.tile[i].tp[j];
+
+            opj_write_bytes(l_data_header, (OPJ_UINT32)(tp.tp_start_pos - coff),
+                            size_of_coding);            /* start position */
+            opj_stream_write_data(cio, l_data_header, size_of_coding, p_manager);
+            opj_write_bytes(l_data_header,
+                            (OPJ_UINT32)(tp.tp_end_pos - tp.tp_start_pos + 1),
+                            size_of_coding); /* length         */
+            opj_stream_write_data(cio, l_data_header, size_of_coding, p_manager);
+
+            if (version & 0x02) {
+                if (cstr_info.tile[i].num_tps == 1 && cstr_info.numdecompos[compno] > 1) {
+                    Aux = (OPJ_UINT32)(cstr_info.numdecompos[compno] + 1);
+                } else {
+                    Aux = j + 1;
+                }
+
+                opj_write_bytes(l_data_header, Aux, 4);
+                opj_stream_write_data(cio, l_data_header, 4, p_manager);
+
+                /*cio_write(img.tile[i].tile_parts[j].num_reso_AUX,4);*/ /* Aux_i,j : Auxiliary value */
+                /* fprintf(stderr,"AUX value %d\n",Aux);*/
+            }
+            /*cio_write(0,4);*/
+        }
+        /* PADDING */
+        while (j < num_max_tile_parts) {
+
+            opj_write_bytes(l_data_header, 0,
+                            size_of_coding); /* start position            */
+            opj_stream_write_data(cio, l_data_header, size_of_coding, p_manager);
+            opj_write_bytes(l_data_header, 0,
+                            size_of_coding); /* length                    */
+            opj_stream_write_data(cio, l_data_header, size_of_coding, p_manager);
+
+            if (version & 0x02) {
+                opj_write_bytes(l_data_header, 0, 4);    /* Aux_i,j : Auxiliary value */
+            }
+            opj_stream_write_data(cio, l_data_header, 4, p_manager);
+            j++;
         }
-      /*cio_write(0,4);*/
-      }
-    /* PADDING */
-    while (j < num_max_tile_parts)
-      {
-
-          opj_write_bytes(l_data_header,0,size_of_coding);/* start position            */
-      opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
-      opj_write_bytes(l_data_header,0,size_of_coding);/* length                    */
-      opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
-
-      if (version & 0x02)
-      opj_write_bytes(l_data_header,0,4);      /* Aux_i,j : Auxiliary value */
-      opj_stream_write_data(cio,l_data_header,4,p_manager);
-      j++;
-      }
     }
-  
-  len = (OPJ_UINT32)(opj_stream_tell(cio)-lenp);
-  opj_stream_seek(cio, lenp,p_manager);
-  opj_write_bytes(l_data_header,len,4);/* L  */
-  opj_stream_write_data(cio,l_data_header,4,p_manager);
-  opj_stream_seek(cio, lenp+len,p_manager);
-
-  return (int)len;
+
+    len = (OPJ_UINT32)(opj_stream_tell(cio) - lenp);
+    opj_stream_seek(cio, lenp, p_manager);
+    opj_write_bytes(l_data_header, len, 4); /* L  */
+    opj_stream_write_data(cio, l_data_header, 4, p_manager);
+    opj_stream_seek(cio, lenp + len, p_manager);
+
+    return (int)len;
 }
 
-int get_num_max_tile_parts( opj_codestream_info_t cstr_info)
+int get_num_max_tile_parts(opj_codestream_info_t cstr_info)
 {
-  int num_max_tp = 0, i;
+    int num_max_tp = 0, i;
+
+    for (i = 0; i < cstr_info.tw * cstr_info.th; i++) {
+        num_max_tp = MAX(cstr_info.tile[i].num_tps, num_max_tp);
+    }
 
-  for( i=0; i<cstr_info.tw*cstr_info.th; i++)
-    num_max_tp = MAX( cstr_info.tile[i].num_tps, num_max_tp);
-  
-  return num_max_tp;
+    return num_max_tp;
 }
index ead89d0b155a69211dcd20d3a74ae72f87d7b413..7e1cf7dffba6cc089187690059d918f92b819579 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -71,124 +71,137 @@ static int bio_bytein(opj_bio_t *bio);
 /*@}*/
 
 
-/* 
+/*
 ==========================================================
    local functions
 ==========================================================
 */
 
-static int bio_byteout(opj_bio_t *bio) {
-       bio->buf = (bio->buf << 8) & 0xffff;
-       bio->ct = bio->buf == 0xff00 ? 7 : 8;
-       if (bio->bp >= bio->end) {
-               return 1;
-       }
-       *bio->bp++ = bio->buf >> 8;
-       return 0;
+static int bio_byteout(opj_bio_t *bio)
+{
+    bio->buf = (bio->buf << 8) & 0xffff;
+    bio->ct = bio->buf == 0xff00 ? 7 : 8;
+    if (bio->bp >= bio->end) {
+        return 1;
+    }
+    *bio->bp++ = bio->buf >> 8;
+    return 0;
 }
 
-static int bio_bytein(opj_bio_t *bio) {
-       bio->buf = (bio->buf << 8) & 0xffff;
-       bio->ct = bio->buf == 0xff00 ? 7 : 8;
-       if (bio->bp >= bio->end) {
-               return 1;
-       }
-       bio->buf |= *bio->bp++;
-       return 0;
+static int bio_bytein(opj_bio_t *bio)
+{
+    bio->buf = (bio->buf << 8) & 0xffff;
+    bio->ct = bio->buf == 0xff00 ? 7 : 8;
+    if (bio->bp >= bio->end) {
+        return 1;
+    }
+    bio->buf |= *bio->bp++;
+    return 0;
 }
 
-static void bio_putbit(opj_bio_t *bio, int b) {
-       if (bio->ct == 0) {
-               bio_byteout(bio);
-       }
-       bio->ct--;
-       bio->buf |= b << bio->ct;
+static void bio_putbit(opj_bio_t *bio, int b)
+{
+    if (bio->ct == 0) {
+        bio_byteout(bio);
+    }
+    bio->ct--;
+    bio->buf |= b << bio->ct;
 }
 
 /* MOD antonin */
-static int bio_getbit(opj_bio_t *bio) {
-/* DOM */
-       if (bio->ct == 0) {
-               bio_bytein(bio);
-       }
-       bio->ct--;
-       return (bio->buf >> bio->ct) & 1;
+static int bio_getbit(opj_bio_t *bio)
+{
+    /* DOM */
+    if (bio->ct == 0) {
+        bio_bytein(bio);
+    }
+    bio->ct--;
+    return (bio->buf >> bio->ct) & 1;
 }
 
-/* 
+/*
 ==========================================================
    Bit Input/Output interface
 ==========================================================
 */
 
-opj_bio_t* bio_create() {
-       opj_bio_t *bio = (opj_bio_t*)opj_malloc(sizeof(opj_bio_t));
-       return bio;
+opj_bio_t* bio_create()
+{
+    opj_bio_t *bio = (opj_bio_t*)opj_malloc(sizeof(opj_bio_t));
+    return bio;
 }
 
-void bio_destroy(opj_bio_t *bio) {
-       if(bio) {
-               opj_free(bio);
-       }
+void bio_destroy(opj_bio_t *bio)
+{
+    if (bio) {
+        opj_free(bio);
+    }
 }
 
-int bio_numbytes(opj_bio_t *bio) {
-       return (bio->bp - bio->start);
+int bio_numbytes(opj_bio_t *bio)
+{
+    return (bio->bp - bio->start);
 }
 
-void bio_init_enc(opj_bio_t *bio, unsigned char *bp, int len) {
-       bio->start = bp;
-       bio->end = bp + len;
-       bio->bp = bp;
-       bio->buf = 0;
-       bio->ct = 8;
+void bio_init_enc(opj_bio_t *bio, unsigned char *bp, int len)
+{
+    bio->start = bp;
+    bio->end = bp + len;
+    bio->bp = bp;
+    bio->buf = 0;
+    bio->ct = 8;
 }
 
-void bio_init_dec(opj_bio_t *bio, unsigned char *bp, int len) {
-       bio->start = bp;
-       bio->end = bp + len;
-       bio->bp = bp;
-       bio->buf = 0;
-       bio->ct = 0;
+void bio_init_dec(opj_bio_t *bio, unsigned char *bp, int len)
+{
+    bio->start = bp;
+    bio->end = bp + len;
+    bio->bp = bp;
+    bio->buf = 0;
+    bio->ct = 0;
 }
 
-void bio_write(opj_bio_t *bio, int v, int n) {
-       int i;
-       for (i = n - 1; i >= 0; i--) {
-               bio_putbit(bio, (v >> i) & 1);
-       }
+void bio_write(opj_bio_t *bio, int v, int n)
+{
+    int i;
+    for (i = n - 1; i >= 0; i--) {
+        bio_putbit(bio, (v >> i) & 1);
+    }
 }
 
-int bio_read(opj_bio_t *bio, int n) {
-       int i, v;
-       v = 0;
-       for (i = n - 1; i >= 0; i--) {
-               v += bio_getbit(bio) << i;
-       }
-       return v;
+int bio_read(opj_bio_t *bio, int n)
+{
+    int i, v;
+    v = 0;
+    for (i = n - 1; i >= 0; i--) {
+        v += bio_getbit(bio) << i;
+    }
+    return v;
 }
 
-int bio_flush(opj_bio_t *bio) {
-       bio->ct = 0;
-       if (bio_byteout(bio)) {
-               return 1;
-       }
-       if (bio->ct == 7) {
-               bio->ct = 0;
-               if (bio_byteout(bio)) {
-                       return 1;
-               }
-       }
-       return 0;
+int bio_flush(opj_bio_t *bio)
+{
+    bio->ct = 0;
+    if (bio_byteout(bio)) {
+        return 1;
+    }
+    if (bio->ct == 7) {
+        bio->ct = 0;
+        if (bio_byteout(bio)) {
+            return 1;
+        }
+    }
+    return 0;
 }
 
-int bio_inalign(opj_bio_t *bio) {
-       bio->ct = 0;
-       if ((bio->buf & 0xff) == 0xff) {
-               if (bio_bytein(bio)) {
-                       return 1;
-               }
-               bio->ct = 0;
-       }
-       return 0;
+int bio_inalign(opj_bio_t *bio)
+{
+    bio->ct = 0;
+    if ((bio->buf & 0xff) == 0xff) {
+        if (bio_bytein(bio)) {
+            return 1;
+        }
+        bio->ct = 0;
+    }
+    return 0;
 }
index fb42beecfb2e80973ded0c412b0f5a24f9390208..99007d0217d8ca11476120910d7b7648fff61074 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
 
 /* ----------------------------------------------------------------------- */
 
-opj_cio_t* OPJ_CALLCONV opj_cio_open(opj_common_ptr cinfo, unsigned char *buffer, int length) {
-       opj_cp_t *cp = NULL;
-       opj_cio_t *cio = (opj_cio_t*)opj_malloc(sizeof(opj_cio_t));
-       if(!cio) return NULL;
-       cio->cinfo = cinfo;
-       if(buffer && length) {
-               /* wrap a user buffer containing the encoded image */
-               cio->openmode = OPJ_STREAM_READ;
-               cio->buffer = buffer;
-               cio->length = length;
-       }
-       else if(!buffer && !length && cinfo) {
-               /* allocate a buffer for the encoded image */
-               cio->openmode = OPJ_STREAM_WRITE;
-               switch(cinfo->codec_format) {
-                       case CODEC_J3D:
-                       case CODEC_J2K:
-                               cp = ((opj_j3d_t*)cinfo->j3d_handle)->cp;
-                               break;
-                       default:
-                               opj_free(cio);
-                               return NULL;
-               }
-               cio->length = cp->tdx * cp->tdy * cp->tdz * cp->tw * cp->th * cp->tl * 4;
-               cio->buffer = (unsigned char *)opj_malloc(cio->length);
-               if(!cio->buffer) {
-                       opj_event_msg(cio->cinfo, EVT_ERROR, "Error allocating memory for compressed bitstream\n");
-                       opj_free(cio);
-                       return NULL;
-               }
-       }
-       else {
-               opj_free(cio);
-               return NULL;
-       }
-
-       /* Initialize byte IO */
-       cio->start = cio->buffer;
-       cio->end = cio->buffer + cio->length;
-       cio->bp = cio->buffer;
-
-       return cio;
+opj_cio_t* OPJ_CALLCONV opj_cio_open(opj_common_ptr cinfo,
+                                     unsigned char *buffer, int length)
+{
+    opj_cp_t *cp = NULL;
+    opj_cio_t *cio = (opj_cio_t*)opj_malloc(sizeof(opj_cio_t));
+    if (!cio) {
+        return NULL;
+    }
+    cio->cinfo = cinfo;
+    if (buffer && length) {
+        /* wrap a user buffer containing the encoded image */
+        cio->openmode = OPJ_STREAM_READ;
+        cio->buffer = buffer;
+        cio->length = length;
+    } else if (!buffer && !length && cinfo) {
+        /* allocate a buffer for the encoded image */
+        cio->openmode = OPJ_STREAM_WRITE;
+        switch (cinfo->codec_format) {
+        case CODEC_J3D:
+        case CODEC_J2K:
+            cp = ((opj_j3d_t*)cinfo->j3d_handle)->cp;
+            break;
+        default:
+            opj_free(cio);
+            return NULL;
+        }
+        cio->length = cp->tdx * cp->tdy * cp->tdz * cp->tw * cp->th * cp->tl * 4;
+        cio->buffer = (unsigned char *)opj_malloc(cio->length);
+        if (!cio->buffer) {
+            opj_event_msg(cio->cinfo, EVT_ERROR,
+                          "Error allocating memory for compressed bitstream\n");
+            opj_free(cio);
+            return NULL;
+        }
+    } else {
+        opj_free(cio);
+        return NULL;
+    }
+
+    /* Initialize byte IO */
+    cio->start = cio->buffer;
+    cio->end = cio->buffer + cio->length;
+    cio->bp = cio->buffer;
+
+    return cio;
 }
 
-void OPJ_CALLCONV opj_cio_close(opj_cio_t *cio) {
-       if(cio) {
-               if(cio->openmode == OPJ_STREAM_WRITE) {
-                       /* destroy the allocated buffer */
-                       opj_free(cio->buffer);
-               }
-               /* destroy the cio */
-               opj_free(cio);
-       }
+void OPJ_CALLCONV opj_cio_close(opj_cio_t *cio)
+{
+    if (cio) {
+        if (cio->openmode == OPJ_STREAM_WRITE) {
+            /* destroy the allocated buffer */
+            opj_free(cio->buffer);
+        }
+        /* destroy the cio */
+        opj_free(cio);
+    }
 }
 
 
@@ -98,8 +102,9 @@ void OPJ_CALLCONV opj_cio_close(opj_cio_t *cio) {
 /*
  * Get position in byte stream.
  */
-int OPJ_CALLCONV cio_tell(opj_cio_t *cio) {
-       return cio->bp - cio->start;
+int OPJ_CALLCONV cio_tell(opj_cio_t *cio)
+{
+    return cio->bp - cio->start;
 }
 
 /*
@@ -107,45 +112,50 @@ int OPJ_CALLCONV cio_tell(opj_cio_t *cio) {
  *
  * pos : position, in number of bytes, from the beginning of the stream
  */
-void OPJ_CALLCONV cio_seek(opj_cio_t *cio, int pos) {
-       cio->bp = cio->start + pos;
+void OPJ_CALLCONV cio_seek(opj_cio_t *cio, int pos)
+{
+    cio->bp = cio->start + pos;
 }
 
 /*
  * Number of bytes left before the end of the stream.
  */
-int cio_numbytesleft(opj_cio_t *cio) {
-       return cio->end - cio->bp;
+int cio_numbytesleft(opj_cio_t *cio)
+{
+    return cio->end - cio->bp;
 }
 
 /*
  * Get pointer to the current position in the stream.
  */
-unsigned char *cio_getbp(opj_cio_t *cio) {
-       return cio->bp;
+unsigned char *cio_getbp(opj_cio_t *cio)
+{
+    return cio->bp;
 }
 
 /*
  * Write a byte.
  */
-static bool cio_byteout(opj_cio_t *cio, unsigned char v) {
-       if (cio->bp >= cio->end) {
-               opj_event_msg(cio->cinfo, EVT_ERROR, "write error\n");
-               return false;
-       }
-       *cio->bp++ = v;
-       return true;
+static bool cio_byteout(opj_cio_t *cio, unsigned char v)
+{
+    if (cio->bp >= cio->end) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "write error\n");
+        return false;
+    }
+    *cio->bp++ = v;
+    return true;
 }
 
 /*
  * Read a byte.
  */
-static unsigned char cio_bytein(opj_cio_t *cio) {
-       if (cio->bp >= cio->end) {
-               opj_event_msg(cio->cinfo, EVT_ERROR, "read error\n");
-               return 0;
-       }
-       return *cio->bp++;
+static unsigned char cio_bytein(opj_cio_t *cio)
+{
+    if (cio->bp >= cio->end) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "read error\n");
+        return 0;
+    }
+    return *cio->bp++;
 }
 
 /*
@@ -154,13 +164,15 @@ static unsigned char cio_bytein(opj_cio_t *cio) {
  * v : value to write
  * n : number of bytes to write
  */
-unsigned int cio_write(opj_cio_t *cio, unsigned int v, int n) {
-       int i;
-       for (i = n - 1; i >= 0; i--) {
-               if( !cio_byteout(cio, (unsigned char) ((v >> (i << 3)) & 0xff)) )
-                       return 0;
-       }
-       return n;
+unsigned int cio_write(opj_cio_t *cio, unsigned int v, int n)
+{
+    int i;
+    for (i = n - 1; i >= 0; i--) {
+        if (!cio_byteout(cio, (unsigned char)((v >> (i << 3)) & 0xff))) {
+            return 0;
+        }
+    }
+    return n;
 }
 
 /*
@@ -170,23 +182,25 @@ unsigned int cio_write(opj_cio_t *cio, unsigned int v, int n) {
  *
  * return : value of the n bytes read
  */
-unsigned int cio_read(opj_cio_t *cio, int n) {
-       int i;
-       unsigned int v;
-       v = 0;
-       for (i = n - 1; i >= 0; i--) {
-               v += cio_bytein(cio) << (i << 3);
-       }
-       return v;
+unsigned int cio_read(opj_cio_t *cio, int n)
+{
+    int i;
+    unsigned int v;
+    v = 0;
+    for (i = n - 1; i >= 0; i--) {
+        v += cio_bytein(cio) << (i << 3);
+    }
+    return v;
 }
 
-/* 
+/*
  * Skip some bytes.
  *
  * n : number of bytes to skip
  */
-void cio_skip(opj_cio_t *cio, int n) {
-       cio->bp += n;
+void cio_skip(opj_cio_t *cio, int n)
+{
+    cio->bp += n;
 }
 
 /*
@@ -195,13 +209,15 @@ void cio_skip(opj_cio_t *cio, int n) {
  * v : value to write
  * n : number of bytes to write
  */
-int cio_write_int(opj_cio_t *cio, int v, int n) {
-       int i;
-       for (i = n - 1; i >= 0; i--) {
-               if( !cio_byteout(cio, (char) ((v >> (i << 3)) & 0xff)) )
-                       return 0;
-       }
-       return n;
+int cio_write_int(opj_cio_t *cio, int v, int n)
+{
+    int i;
+    for (i = n - 1; i >= 0; i--) {
+        if (!cio_byteout(cio, (char)((v >> (i << 3)) & 0xff))) {
+            return 0;
+        }
+    }
+    return n;
 }
 
 /*
@@ -211,13 +227,14 @@ int cio_write_int(opj_cio_t *cio, int v, int n) {
  *
  * return : value of the n bytes read
  */
-int cio_read_int(opj_cio_t *cio, int n) {
-       int i;
-       int v;
-       v = 0;
-       for (i = n - 1; i >= 0; i--) {
-               v += cio_bytein(cio) << (i << 3);
-       }
-       return v;
+int cio_read_int(opj_cio_t *cio, int n)
+{
+    int i;
+    int v;
+    v = 0;
+    for (i = n - 1; i >= 0; i--) {
+        v += cio_bytein(cio) << (i << 3);
+    }
+    return v;
 }
 
index a1e4e1046dec9d115877fdf1a7eff944190e032d..90a807ed1b75a5ec547279a670655a12be9d93f8 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -49,7 +49,7 @@
  *  the major bottleneck in the former version.
  *
  *  I have also removed the "Add Patrick" part because it is not longer
- *  needed.  
+ *  needed.
  *
  *  6/6/2005
  *  -Ive (aka Reiner Wahler)
@@ -101,11 +101,13 @@ static void dwt_decode_97(int *a, int dn, int sn, int cas);
 /**
 Computing of wavelet transform L2 norms for arbitrary transforms
 */
-static double dwt_calc_wtnorms(int orient, int level[3], int dwtid[3], opj_wtfilt_t *wtfiltx, opj_wtfilt_t *wtfilty, opj_wtfilt_t *wtfiltz);
+static double dwt_calc_wtnorms(int orient, int level[3], int dwtid[3],
+                               opj_wtfilt_t *wtfiltx, opj_wtfilt_t *wtfilty, opj_wtfilt_t *wtfiltz);
 /**
 Encoding of quantification stepsize
 */
-static void dwt_encode_stepsize(int stepsize, int numbps, opj_stepsize_t *bandno_stepsize);
+static void dwt_encode_stepsize(int stepsize, int numbps,
+                                opj_stepsize_t *bandno_stepsize);
 /*@}*/
 
 /*@}*/
@@ -125,209 +127,230 @@ static double dwt_norm[10][10][10][8];
 static int flagnorm[10][10][10][8];
 
 /*static const double dwt_norms[5][8][10] = {
-       {//ResZ=1
-               {1.000, 1.500, 2.750, 5.375, 10.68, 21.34, 42.67, 85.33, 170.7, 341.3},
-               {1.038, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
-               {1.038, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
-               {.7186, .9218, 1.586, 3.043, 6.019, 12.01, 24.00, 47.97, 95.93}
-       },{//ResZ=2
-               {1.000, 1.8371, 2.750, 5.375, 10.68, 21.34, 42.67, 85.33, 170.7, 341.3},
-               {1.2717, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
-               {1.2717, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
-               {.8803, .9218, 1.586, 3.043, 6.019, 12.01, 24.00, 47.97, 95.93},
-               {1.2717},
-               {.8803},
-               {.8803},
-               {.6093},
-       },{ //ResZ=3
-               {1.000, 1.8371, 4.5604, 5.375, 10.68, 21.34, 42.67, 85.33, 170.7, 341.3},
-               {1.2717, 2.6403, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
-               {1.2717, 2.6403, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
-               {.8803, 1.5286, 1.586, 3.043, 6.019, 12.01, 24.00, 47.97, 95.93},
-               {1.2717, 2.6403},
-               {.8803, 1.5286},
-               {.8803, 1.5286},
-               {.6093, 0.8850},
-       },{ //ResZ=4
-               {1.000, 1.8371, 4.5604, 12.4614, 10.68, 21.34, 42.67, 85.33, 170.7, 341.3},
-               {1.2717, 2.6403, 6.7691 , 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
-               {1.2717, 2.6403, 6.7691 , 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
-               {.8803, 1.5286, 3.6770 , 3.043, 6.019, 12.01, 24.00, 47.97, 95.93},
-               {1.2717, 2.6403, 6.7691 },
-               {.8803, 1.5286, 3.6770 },
-               {.8803, 1.5286, 3.6770 },
-               {.6093, 0.8850, 1.9974 },
-       },{ //ResZ=5
-               {1.000, 1.8371, 4.5604, 12.4614, 34.9025, 21.34, 42.67, 85.33, 170.7, 341.3},
-               {1.2717, 2.6403, 6.7691 , 18.6304 , 11.33, 22.64, 45.25, 90.48, 180.9},
-               {1.2717, 2.6403, 6.7691 , 18.6304, 11.33, 22.64, 45.25, 90.48, 180.9},
-               {.8803, 1.5286, 3.6770 , 9.9446, 6.019, 12.01, 24.00, 47.97, 95.93},
-               {1.2717, 2.6403, 6.7691, 18.6304},
-               {.8803, 1.5286, 3.6770, 9.9446 },
-               {.8803, 1.5286, 3.6770, 9.9446 },
-               {.6093, 0.8850, 1.9974, 5.3083 },
-       }
+    {//ResZ=1
+        {1.000, 1.500, 2.750, 5.375, 10.68, 21.34, 42.67, 85.33, 170.7, 341.3},
+        {1.038, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
+        {1.038, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
+        {.7186, .9218, 1.586, 3.043, 6.019, 12.01, 24.00, 47.97, 95.93}
+    },{//ResZ=2
+        {1.000, 1.8371, 2.750, 5.375, 10.68, 21.34, 42.67, 85.33, 170.7, 341.3},
+        {1.2717, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
+        {1.2717, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
+        {.8803, .9218, 1.586, 3.043, 6.019, 12.01, 24.00, 47.97, 95.93},
+        {1.2717},
+        {.8803},
+        {.8803},
+        {.6093},
+    },{ //ResZ=3
+        {1.000, 1.8371, 4.5604, 5.375, 10.68, 21.34, 42.67, 85.33, 170.7, 341.3},
+        {1.2717, 2.6403, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
+        {1.2717, 2.6403, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
+        {.8803, 1.5286, 1.586, 3.043, 6.019, 12.01, 24.00, 47.97, 95.93},
+        {1.2717, 2.6403},
+        {.8803, 1.5286},
+        {.8803, 1.5286},
+        {.6093, 0.8850},
+    },{ //ResZ=4
+        {1.000, 1.8371, 4.5604, 12.4614, 10.68, 21.34, 42.67, 85.33, 170.7, 341.3},
+        {1.2717, 2.6403, 6.7691 , 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
+        {1.2717, 2.6403, 6.7691 , 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
+        {.8803, 1.5286, 3.6770 , 3.043, 6.019, 12.01, 24.00, 47.97, 95.93},
+        {1.2717, 2.6403, 6.7691 },
+        {.8803, 1.5286, 3.6770 },
+        {.8803, 1.5286, 3.6770 },
+        {.6093, 0.8850, 1.9974 },
+    },{ //ResZ=5
+        {1.000, 1.8371, 4.5604, 12.4614, 34.9025, 21.34, 42.67, 85.33, 170.7, 341.3},
+        {1.2717, 2.6403, 6.7691 , 18.6304 , 11.33, 22.64, 45.25, 90.48, 180.9},
+        {1.2717, 2.6403, 6.7691 , 18.6304, 11.33, 22.64, 45.25, 90.48, 180.9},
+        {.8803, 1.5286, 3.6770 , 9.9446, 6.019, 12.01, 24.00, 47.97, 95.93},
+        {1.2717, 2.6403, 6.7691, 18.6304},
+        {.8803, 1.5286, 3.6770, 9.9446 },
+        {.8803, 1.5286, 3.6770, 9.9446 },
+        {.6093, 0.8850, 1.9974, 5.3083 },
+    }
 };*/
 
 /* <summary>                                                              */
 /* This table contains the norms of the 9-7 wavelets for different bands. */
 /* </summary>                                                             */
 /*static const double dwt_norms_real[5][8][10] = {
-       {//ResZ==1
-               {1.000, 1.9659, 4.1224, 8.4167, 16.9356, 33.9249, 67.8772, 135.7680, 271.5430, 543.0894},
-               {1.0113, 1.9968, 4.1834, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
-               {1.0113, 1.9968, 4.1834, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
-               {0.5202, 0.9672, 2.0793, 4.3005, 8.6867, 17.4188, 34.8608, 69.7332, 139.4722}
-       }, { //ResZ==2
-               {1.000, 2.7564, 4.1224, 8.4167, 16.9356, 33.9249, 67.8772, 135.7680, 271.5430, 543.0894},
-               {1.4179, 1.9968, 4.1834, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
-               {1.4179, 1.9968, 4.1834, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
-               {0.7294, 0.9672, 2.0793, 4.3005, 8.6867, 17.4188, 34.8608, 69.7332, 139.4722},
-               {1.4179},
-               {0.7294},
-               {0.7294},
-               {0.3752} //HHH
-       },{ //ResZ==3
-               {1.000, 2.7564, 8.3700, 8.4167, 16.9356, 33.9249, 67.8772, 135.7680, 271.5430, 543.0894},
-               {1.4179, 4.0543, 4.1834, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
-               {1.4179, 4.0543, 4.1834, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
-               {0.7294, 1.9638, 2.0793, 4.3005, 8.6867, 17.4188, 34.8608, 69.7332, 139.4722},
-               {1.4179, 4.0543},
-               {0.7294, 1.9638},
-               {0.7294, 1.9638},
-               {0.3752, 0.9512} //HHH
-       },{ //ResZ==4
-               {1.000, 2.7564, 8.3700, 24.4183, 16.9356, 33.9249, 67.8772, 135.7680, 271.5430, 543.0894},
-               {1.4179, 4.0543, 12.1366, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
-               {1.4179, 4.0543, 12.1366, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
-               {0.7294, 1.9638, 6.0323, 4.3005, 8.6867, 17.4188, 34.8608, 69.7332, 139.4722},
-               {1.4179, 4.0543, 12.1366},
-               {0.7294, 1.9638, 6.0323},
-               {0.7294, 1.9638, 6.0323},
-               {0.3752, 0.9512, 2.9982} //HHH
-       },{ //ResZ==5
-               {1.000, 2.7564, 8.3700, 24.4183, 69.6947, 33.9249, 67.8772, 135.7680, 271.5430, 543.0894},
-               {1.4179, 4.0543, 12.1366, 35.1203, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
-               {1.4179, 4.0543, 12.1366, 35.1203, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
-               {0.7294, 1.9638, 6.0323, 17.6977, 8.6867, 17.4188, 34.8608, 69.7332, 139.4722},
-               {1.4179, 4.0543, 12.1366, 35.1203},
-               {0.7294, 1.9638, 6.0323, 17.6977},
-               {0.7294, 1.9638, 6.0323, 17.6977},
-               {0.3752, 0.9512, 2.9982, 8.9182} //HHH
-       }
+    {//ResZ==1
+        {1.000, 1.9659, 4.1224, 8.4167, 16.9356, 33.9249, 67.8772, 135.7680, 271.5430, 543.0894},
+        {1.0113, 1.9968, 4.1834, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
+        {1.0113, 1.9968, 4.1834, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
+        {0.5202, 0.9672, 2.0793, 4.3005, 8.6867, 17.4188, 34.8608, 69.7332, 139.4722}
+    }, { //ResZ==2
+        {1.000, 2.7564, 4.1224, 8.4167, 16.9356, 33.9249, 67.8772, 135.7680, 271.5430, 543.0894},
+        {1.4179, 1.9968, 4.1834, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
+        {1.4179, 1.9968, 4.1834, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
+        {0.7294, 0.9672, 2.0793, 4.3005, 8.6867, 17.4188, 34.8608, 69.7332, 139.4722},
+        {1.4179},
+        {0.7294},
+        {0.7294},
+        {0.3752} //HHH
+    },{ //ResZ==3
+        {1.000, 2.7564, 8.3700, 8.4167, 16.9356, 33.9249, 67.8772, 135.7680, 271.5430, 543.0894},
+        {1.4179, 4.0543, 4.1834, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
+        {1.4179, 4.0543, 4.1834, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
+        {0.7294, 1.9638, 2.0793, 4.3005, 8.6867, 17.4188, 34.8608, 69.7332, 139.4722},
+        {1.4179, 4.0543},
+        {0.7294, 1.9638},
+        {0.7294, 1.9638},
+        {0.3752, 0.9512} //HHH
+    },{ //ResZ==4
+        {1.000, 2.7564, 8.3700, 24.4183, 16.9356, 33.9249, 67.8772, 135.7680, 271.5430, 543.0894},
+        {1.4179, 4.0543, 12.1366, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
+        {1.4179, 4.0543, 12.1366, 8.5341, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
+        {0.7294, 1.9638, 6.0323, 4.3005, 8.6867, 17.4188, 34.8608, 69.7332, 139.4722},
+        {1.4179, 4.0543, 12.1366},
+        {0.7294, 1.9638, 6.0323},
+        {0.7294, 1.9638, 6.0323},
+        {0.3752, 0.9512, 2.9982} //HHH
+    },{ //ResZ==5
+        {1.000, 2.7564, 8.3700, 24.4183, 69.6947, 33.9249, 67.8772, 135.7680, 271.5430, 543.0894},
+        {1.4179, 4.0543, 12.1366, 35.1203, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
+        {1.4179, 4.0543, 12.1366, 35.1203, 17.1667, 34.3852, 68.7967, 137.6065, 275.2196},
+        {0.7294, 1.9638, 6.0323, 17.6977, 8.6867, 17.4188, 34.8608, 69.7332, 139.4722},
+        {1.4179, 4.0543, 12.1366, 35.1203},
+        {0.7294, 1.9638, 6.0323, 17.6977},
+        {0.7294, 1.9638, 6.0323, 17.6977},
+        {0.3752, 0.9512, 2.9982, 8.9182} //HHH
+    }
 };*/
 
 static opj_atk_t atk_info_wt[] = {
-       {0, 1, J3D_ATK_WS, J3D_ATK_IRR, 0, J3D_ATK_WS, 1.230174104, 4, {0}, {0}, {0}, {1,1,1,1}, {-1.586134342059924, -0.052980118572961, 0.882911075530934, 0.443506852043971}},/* WT 9-7 IRR*/
-       {1, 0, J3D_ATK_WS, J3D_ATK_REV, 0, J3D_ATK_WS, 0, 2, {0}, {1,2}, {1,2}, {1,1}, {-1,1}},/* WT 5-3 REV*/
-       {2, 0, J3D_ATK_ARB, J3D_ATK_REV, 0, J3D_ATK_CON, 0, 2, {0,0}, {0,1}, {0,1}, {1,1}, {{-1},{1}}}, /* WT 2-2 REV*/
-       {3, 0, J3D_ATK_ARB, J3D_ATK_REV, 1, J3D_ATK_CON, 0, 3, {0,0,-1}, {0,1,2}, {0,1,2}, {1,1,3}, {{-1},{1},{1,0,-1}}}, /* WT 2-6 REV*/
-       {4, 0, J3D_ATK_ARB, J3D_ATK_REV, 1, J3D_ATK_CON, 0, 3, {0,0,-2}, {0,1,6}, {0,1,32}, {1,1,5}, {{-1},{1},{-3,22,0,-22,3}}}, /* WT 2-10 REV*/
-       {5, 1, J3D_ATK_ARB, J3D_ATK_IRR, 1, J3D_ATK_WS, 1, 7, {0}, {0}, {0}, {1,1,2,1,2,1,3},{{-1},{1.58613434206},{-0.460348209828, 0.460348209828},{0.25},{0.374213867768,-0.374213867768},{-1.33613434206},{0.29306717103,0,-0.29306717103}}}, /* WT 6-10 IRR*/
-       {6, 1, J3D_ATK_ARB, J3D_ATK_IRR, 0, J3D_ATK_WS, 1, 11, {0}, {0}, {0}, {1,1,2,1,2,1,2,1,2,1,5},{{-1},{0,99715069105},{-1.00573127827, 1.00573127827},{-0.27040357631},{2.20509972343, -2.20509972343},{0.08059995736},
-               {-1.62682532350, 1.62682532350},{0.52040357631},{0.60404664250, -0.60404664250},{-0.82775064841},{-0.06615812964, 0.29402137720, 0, -0.29402137720, 0.06615812964}}}, /* WT 10-18 IRR*/
-       {7, 1, J3D_ATK_WS, J3D_ATK_IRR, 0, J3D_ATK_WS, 1, 2, {0}, {0}, {0}, {1,1}, {-0.5, 0.25}},       /* WT 5-3 IRR*/
-       {8, 0, J3D_ATK_WS, J3D_ATK_REV, 0, J3D_ATK_WS, 0, 2, {0}, {4,4}, {8,8}, {2,2}, {{-9,1},{5,-1}}}         /* WT 13-7 REV*/
+    {0, 1, J3D_ATK_WS, J3D_ATK_IRR, 0, J3D_ATK_WS, 1.230174104, 4, {0}, {0}, {0}, {1, 1, 1, 1}, {-1.586134342059924, -0.052980118572961, 0.882911075530934, 0.443506852043971}}, /* WT 9-7 IRR*/
+    {1, 0, J3D_ATK_WS, J3D_ATK_REV, 0, J3D_ATK_WS, 0, 2, {0}, {1, 2}, {1, 2}, {1, 1}, {-1, 1}}, /* WT 5-3 REV*/
+    {2, 0, J3D_ATK_ARB, J3D_ATK_REV, 0, J3D_ATK_CON, 0, 2, {0, 0}, {0, 1}, {0, 1}, {1, 1}, {{-1}, {1}}}, /* WT 2-2 REV*/
+    {3, 0, J3D_ATK_ARB, J3D_ATK_REV, 1, J3D_ATK_CON, 0, 3, {0, 0, -1}, {0, 1, 2}, {0, 1, 2}, {1, 1, 3}, {{-1}, {1}, {1, 0, -1}}}, /* WT 2-6 REV*/
+    {4, 0, J3D_ATK_ARB, J3D_ATK_REV, 1, J3D_ATK_CON, 0, 3, {0, 0, -2}, {0, 1, 6}, {0, 1, 32}, {1, 1, 5}, {{-1}, {1}, {-3, 22, 0, -22, 3}}}, /* WT 2-10 REV*/
+    {5, 1, J3D_ATK_ARB, J3D_ATK_IRR, 1, J3D_ATK_WS, 1, 7, {0}, {0}, {0}, {1, 1, 2, 1, 2, 1, 3}, {{-1}, {1.58613434206}, {-0.460348209828, 0.460348209828}, {0.25}, {0.374213867768, -0.374213867768}, {-1.33613434206}, {0.29306717103, 0, -0.29306717103}}}, /* WT 6-10 IRR*/
+    {
+        6, 1, J3D_ATK_ARB, J3D_ATK_IRR, 0, J3D_ATK_WS, 1, 11, {0}, {0}, {0}, {1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 5}, {{-1}, {0, 99715069105}, {-1.00573127827, 1.00573127827}, {-0.27040357631}, {2.20509972343, -2.20509972343}, {0.08059995736},
+            {-1.62682532350, 1.62682532350}, {0.52040357631}, {0.60404664250, -0.60404664250}, {-0.82775064841}, {-0.06615812964, 0.29402137720, 0, -0.29402137720, 0.06615812964}
+        }
+    }, /* WT 10-18 IRR*/
+    {7, 1, J3D_ATK_WS, J3D_ATK_IRR, 0, J3D_ATK_WS, 1, 2, {0}, {0}, {0}, {1, 1}, {-0.5, 0.25}},  /* WT 5-3 IRR*/
+    {8, 0, J3D_ATK_WS, J3D_ATK_REV, 0, J3D_ATK_WS, 0, 2, {0}, {4, 4}, {8, 8}, {2, 2}, {{-9, 1}, {5, -1}}} /* WT 13-7 REV*/
 };
-/* 
+/*
 ==========================================================
    local functions
 ==========================================================
 */
 
-/* <summary>                                    */
+/* <summary>                             */
 /* Forward lazy transform (horizontal).  */
-/* </summary>                            */ 
-static void dwt_deinterleave_h(int *a, int *b, int dn, int sn, int cas) {
-       int i;
-    for (i=0; i<sn; i++) b[i]=a[2*i+cas];
-    for (i=0; i<dn; i++) b[sn+i]=a[(2*i+1-cas)];
+/* </summary>                            */
+static void dwt_deinterleave_h(int *a, int *b, int dn, int sn, int cas)
+{
+    int i;
+    for (i = 0; i < sn; i++) {
+        b[i] = a[2 * i + cas];
+    }
+    for (i = 0; i < dn; i++) {
+        b[sn + i] = a[(2 * i + 1 - cas)];
+    }
 }
 
-/* <summary>                             */  
+/* <summary>                             */
 /* Forward lazy transform (vertical).    */
-/* </summary>                            */ 
-static void dwt_deinterleave_v(int *a, int *b, int dn, int sn, int x, int cas) {
+/* </summary>                            */
+static void dwt_deinterleave_v(int *a, int *b, int dn, int sn, int x, int cas)
+{
     int i;
-    for (i=0; i<sn; i++) b[i*x]=a[2*i+cas];
-    for (i=0; i<dn; i++) b[(sn+i)*x]=a[(2*i+1-cas)];
+    for (i = 0; i < sn; i++) {
+        b[i * x] = a[2 * i + cas];
+    }
+    for (i = 0; i < dn; i++) {
+        b[(sn + i)*x] = a[(2 * i + 1 - cas)];
+    }
 }
 
-/* <summary>                             */  
+/* <summary>                             */
 /* Forward lazy transform (axial).       */
-/* </summary>                            */ 
-static void dwt_deinterleave_z(int *a, int *b, int dn, int sn, int xy, int cas) {
+/* </summary>                            */
+static void dwt_deinterleave_z(int *a, int *b, int dn, int sn, int xy, int cas)
+{
     int i;
-    for (i=0; i<sn; i++) b[i*xy]=a[2*i+cas];
-    for (i=0; i<dn; i++) b[(sn+i)*xy]=a[(2*i+1-cas)];
+    for (i = 0; i < sn; i++) {
+        b[i * xy] = a[2 * i + cas];
+    }
+    for (i = 0; i < dn; i++) {
+        b[(sn + i)*xy] = a[(2 * i + 1 - cas)];
+    }
 }
 
 /* <summary>                             */
 /* Inverse lazy transform (horizontal).  */
 /* </summary>                            */
-static void dwt_interleave_h(int *a, int *b, int dn, int sn, int cas) {
+static void dwt_interleave_h(int *a, int *b, int dn, int sn, int cas)
+{
     int i;
     int *ai = NULL;
     int *bi = NULL;
     ai = a;
     bi = b + cas;
     for (i = 0; i < sn; i++) {
-      *bi = *ai;  
-         bi += 2;  
-         ai++;
+        *bi = *ai;
+        bi += 2;
+        ai++;
     }
     ai = a + sn;
     bi = b + 1 - cas;
     for (i = 0; i < dn; i++) {
-      *bi = *ai;
-         bi += 2;
-         ai++;
+        *bi = *ai;
+        bi += 2;
+        ai++;
     }
 }
 
-/* <summary>                             */  
+/* <summary>                             */
 /* Inverse lazy transform (vertical).    */
-/* </summary>                            */ 
-static void dwt_interleave_v(int *a, int *b, int dn, int sn, int x, int cas) {
+/* </summary>                            */
+static void dwt_interleave_v(int *a, int *b, int dn, int sn, int x, int cas)
+{
     int i;
     int *ai = NULL;
     int *bi = NULL;
     ai = a;
     bi = b + cas;
     for (i = 0; i < sn; i++) {
-      *bi = *ai;
-         bi += 2;
-         ai += x;
+        *bi = *ai;
+        bi += 2;
+        ai += x;
     }
     ai = a + (sn * x);
     bi = b + 1 - cas;
     for (i = 0; i < dn; i++) {
-      *bi = *ai;
-         bi += 2;  
-         ai += x;
+        *bi = *ai;
+        bi += 2;
+        ai += x;
     }
 }
 
 /* <summary>                             */
 /* Inverse lazy transform (axial).  */
 /* </summary>                            */
-static void dwt_interleave_z(int *a, int *b, int dn, int sn, int xy, int cas) {
+static void dwt_interleave_z(int *a, int *b, int dn, int sn, int xy, int cas)
+{
     int i;
     int *ai = NULL;
     int *bi = NULL;
     ai = a;
     bi = b + cas;
     for (i = 0; i < sn; i++) {
-      *bi = *ai;  
-         bi += 2;  
-         ai += xy;
+        *bi = *ai;
+        bi += 2;
+        ai += xy;
     }
     ai = a + (sn * xy);
     bi = b + 1 - cas;
     for (i = 0; i < dn; i++) {
-      *bi = *ai;
-         bi += 2;
-         ai += xy;
+        *bi = *ai;
+        bi += 2;
+        ai += xy;
     }
 }
 
@@ -335,327 +358,389 @@ static void dwt_interleave_z(int *a, int *b, int dn, int sn, int xy, int cas) {
 /* <summary>                            */
 /* Forward 5-3 or 9-7 wavelet transform in 1-D. */
 /* </summary>                           */
-static void dwt_encode_53(int *a, int dn, int sn, int cas) {
-       int i;
-
-       if (!cas) {
-               if ((dn > 0) || (sn > 1)) {     /* NEW :  CASE ONE ELEMENT */
-                       /*for (i = 0; i < dn; i++) D(i) -= (S_(i) + S_(i + 1)) >> 1;*/
-                       /*for (i = 0; i < sn; i++) S(i) += (D_(i - 1) + D_(i) + 2) >> 2;*/
-                       for (i = 0; i < dn; i++){
-                               D(i) -= (S_(i) + S_(i + 1)) >> 1;
-                               /*ops += 2;*/
-                       }
-                       for (i = 0; i < sn; i++){
-                               S(i) += (D_(i - 1) + D_(i) + 2) >> 2;
-                               /*ops += 3;*/
-                       }
-               }
-       } else {
-               /*if (!sn && dn == 1)
-                       S(0) *= 2;
-               else {
-                       for (i = 0; i < dn; i++) S(i) -= (DD_(i) + DD_(i - 1)) >> 1;
-                       for (i = 0; i < sn; i++) D(i) += (SS_(i) + SS_(i + 1) + 2) >> 2;
-               }*/
-               if (!sn && dn == 1){
-                       S(0) *= 2;
-                       /*ops++;*/
-               } else {
-                       for (i = 0; i < dn; i++){
-                               S(i) -= (DD_(i) + DD_(i - 1)) >> 1;
-                       /*      ops += 2;*/
-                       }
-                       for (i = 0; i < sn; i++){
-                               D(i) += (SS_(i) + SS_(i + 1) + 2) >> 2;
-                       /*      ops += 3;*/
-                       }
-               }
-       }
+static void dwt_encode_53(int *a, int dn, int sn, int cas)
+{
+    int i;
+
+    if (!cas) {
+        if ((dn > 0) || (sn > 1)) { /* NEW :  CASE ONE ELEMENT */
+            /*for (i = 0; i < dn; i++) D(i) -= (S_(i) + S_(i + 1)) >> 1;*/
+            /*for (i = 0; i < sn; i++) S(i) += (D_(i - 1) + D_(i) + 2) >> 2;*/
+            for (i = 0; i < dn; i++) {
+                D(i) -= (S_(i) + S_(i + 1)) >> 1;
+                /*ops += 2;*/
+            }
+            for (i = 0; i < sn; i++) {
+                S(i) += (D_(i - 1) + D_(i) + 2) >> 2;
+                /*ops += 3;*/
+            }
+        }
+    } else {
+        /*if (!sn && dn == 1)
+            S(0) *= 2;
+        else {
+            for (i = 0; i < dn; i++) S(i) -= (DD_(i) + DD_(i - 1)) >> 1;
+            for (i = 0; i < sn; i++) D(i) += (SS_(i) + SS_(i + 1) + 2) >> 2;
+        }*/
+        if (!sn && dn == 1) {
+            S(0) *= 2;
+            /*ops++;*/
+        } else {
+            for (i = 0; i < dn; i++) {
+                S(i) -= (DD_(i) + DD_(i - 1)) >> 1;
+                /*  ops += 2;*/
+            }
+            for (i = 0; i < sn; i++) {
+                D(i) += (SS_(i) + SS_(i + 1) + 2) >> 2;
+                /*  ops += 3;*/
+            }
+        }
+    }
 }
-static void dwt_encode_97(int *a, int dn, int sn, int cas) {
-       int i;
-
-       if (!cas) {
-                       if ((dn > 0) || (sn > 1)) {     /* NEW :  CASE ONE ELEMENT */
-                               for (i = 0; i < dn; i++)
-                                       D(i) -= fix_mul(S_(i) + S_(i + 1), 12993);
-                               for (i = 0; i < sn; i++)
-                                       S(i) -= fix_mul(D_(i - 1) + D_(i), 434);
-                               for (i = 0; i < dn; i++)
-                                       D(i) += fix_mul(S_(i) + S_(i + 1), 7233);
-                               for (i = 0; i < sn; i++)
-                                       S(i) += fix_mul(D_(i - 1) + D_(i), 3633);
-                               for (i = 0; i < dn; i++)
-                                       D(i) = fix_mul(D(i), 5038);     /*5038 */
-                               for (i = 0; i < sn; i++)
-                                       S(i) = fix_mul(S(i), 6659);     /*6660 */
-                       }
-               } else {
-                       if ((sn > 0) || (dn > 1)) {     /* NEW :  CASE ONE ELEMENT */
-                               for (i = 0; i < dn; i++)
-                                       S(i) -= fix_mul(DD_(i) + DD_(i - 1), 12993);
-                               for (i = 0; i < sn; i++)
-                                       D(i) -= fix_mul(SS_(i) + SS_(i + 1), 434);
-                               for (i = 0; i < dn; i++)
-                                       S(i) += fix_mul(DD_(i) + DD_(i - 1), 7233);
-                               for (i = 0; i < sn; i++)
-                                       D(i) += fix_mul(SS_(i) + SS_(i + 1), 3633);
-                               for (i = 0; i < dn; i++)
-                                       S(i) = fix_mul(S(i), 5038);     /*5038 */
-                               for (i = 0; i < sn; i++)
-                                       D(i) = fix_mul(D(i), 6659);     /*6660 */
-                       }
-               }
+static void dwt_encode_97(int *a, int dn, int sn, int cas)
+{
+    int i;
+
+    if (!cas) {
+        if ((dn > 0) || (sn > 1)) { /* NEW :  CASE ONE ELEMENT */
+            for (i = 0; i < dn; i++) {
+                D(i) -= fix_mul(S_(i) + S_(i + 1), 12993);
+            }
+            for (i = 0; i < sn; i++) {
+                S(i) -= fix_mul(D_(i - 1) + D_(i), 434);
+            }
+            for (i = 0; i < dn; i++) {
+                D(i) += fix_mul(S_(i) + S_(i + 1), 7233);
+            }
+            for (i = 0; i < sn; i++) {
+                S(i) += fix_mul(D_(i - 1) + D_(i), 3633);
+            }
+            for (i = 0; i < dn; i++) {
+                D(i) = fix_mul(D(i), 5038);    /*5038 */
+            }
+            for (i = 0; i < sn; i++) {
+                S(i) = fix_mul(S(i), 6659);    /*6660 */
+            }
+        }
+    } else {
+        if ((sn > 0) || (dn > 1)) { /* NEW :  CASE ONE ELEMENT */
+            for (i = 0; i < dn; i++) {
+                S(i) -= fix_mul(DD_(i) + DD_(i - 1), 12993);
+            }
+            for (i = 0; i < sn; i++) {
+                D(i) -= fix_mul(SS_(i) + SS_(i + 1), 434);
+            }
+            for (i = 0; i < dn; i++) {
+                S(i) += fix_mul(DD_(i) + DD_(i - 1), 7233);
+            }
+            for (i = 0; i < sn; i++) {
+                D(i) += fix_mul(SS_(i) + SS_(i + 1), 3633);
+            }
+            for (i = 0; i < dn; i++) {
+                S(i) = fix_mul(S(i), 5038);    /*5038 */
+            }
+            for (i = 0; i < sn; i++) {
+                D(i) = fix_mul(D(i), 6659);    /*6660 */
+            }
+        }
+    }
 }
 /* <summary>                            */
 /* Inverse 5-3 or 9-7 wavelet transform in 1-D. */
-/* </summary>                           */ 
-static void dwt_decode_53(int *a, int dn, int sn, int cas) {
-       int i;
-       if (!cas) {
-               if ((dn > 0) || (sn > 1)) { /* NEW :  CASE ONE ELEMENT */
-                       for (i = 0; i < sn; i++) S(i) -= (D_(i - 1) + D_(i) + 2) >> 2;
-                       for (i = 0; i < dn; i++) D(i) += (S_(i) + S_(i + 1)) >> 1;
-               }
-       } else {
-               if (!sn  && dn == 1)          /* NEW :  CASE ONE ELEMENT */
-                       S(0) /= 2;
-               else {
-                       for (i = 0; i < sn; i++) D(i) -= (SS_(i) + SS_(i + 1) + 2) >> 2;
-                       for (i = 0; i < dn; i++) S(i) += (DD_(i) + DD_(i - 1)) >> 1;
-               }
-       }
+/* </summary>                           */
+static void dwt_decode_53(int *a, int dn, int sn, int cas)
+{
+    int i;
+    if (!cas) {
+        if ((dn > 0) || (sn > 1)) { /* NEW :  CASE ONE ELEMENT */
+            for (i = 0; i < sn; i++) {
+                S(i) -= (D_(i - 1) + D_(i) + 2) >> 2;
+            }
+            for (i = 0; i < dn; i++) {
+                D(i) += (S_(i) + S_(i + 1)) >> 1;
+            }
+        }
+    } else {
+        if (!sn  && dn == 1) {        /* NEW :  CASE ONE ELEMENT */
+            S(0) /= 2;
+        } else {
+            for (i = 0; i < sn; i++) {
+                D(i) -= (SS_(i) + SS_(i + 1) + 2) >> 2;
+            }
+            for (i = 0; i < dn; i++) {
+                S(i) += (DD_(i) + DD_(i - 1)) >> 1;
+            }
+        }
+    }
 }
-static void dwt_decode_97(int *a, int dn, int sn, int cas) {
-       int i;
-
-       if (!cas) {
-               if ((dn > 0) || (sn > 1)) {     /* NEW :  CASE ONE ELEMENT */
-                       for (i = 0; i < sn; i++)
-                               S(i) = fix_mul(S(i), 10078);    /* 10076 */
-                       for (i = 0; i < dn; i++)
-                               D(i) = fix_mul(D(i), 13318);    /* 13320 */
-                       for (i = 0; i < sn; i++)
-                               S(i) -= fix_mul(D_(i - 1) + D_(i), 3633);
-                       for (i = 0; i < dn; i++)
-                               D(i) -= fix_mul(S_(i) + S_(i + 1), 7233);
-                       for (i = 0; i < sn; i++)
-                               S(i) += fix_mul(D_(i - 1) + D_(i), 434);
-                       for (i = 0; i < dn; i++)
-                               D(i) += fix_mul(S_(i) + S_(i + 1), 12994);      /* 12993 */
-               }
-       } else {
-               if ((sn > 0) || (dn > 1)) {     /* NEW :  CASE ONE ELEMENT */
-                       for (i = 0; i < sn; i++)
-                               D(i) = fix_mul(D(i), 10078);    /* 10076 */
-                       for (i = 0; i < dn; i++)
-                               S(i) = fix_mul(S(i), 13318);    /* 13320 */
-                       for (i = 0; i < sn; i++)
-                               D(i) -= fix_mul(SS_(i) + SS_(i + 1), 3633);
-                       for (i = 0; i < dn; i++)
-                               S(i) -= fix_mul(DD_(i) + DD_(i - 1), 7233);
-                       for (i = 0; i < sn; i++)
-                               D(i) += fix_mul(SS_(i) + SS_(i + 1), 434);
-                       for (i = 0; i < dn; i++)
-                               S(i) += fix_mul(DD_(i) + DD_(i - 1), 12994);    /* 12993 */
-               }
-       }
+static void dwt_decode_97(int *a, int dn, int sn, int cas)
+{
+    int i;
+
+    if (!cas) {
+        if ((dn > 0) || (sn > 1)) { /* NEW :  CASE ONE ELEMENT */
+            for (i = 0; i < sn; i++) {
+                S(i) = fix_mul(S(i), 10078);    /* 10076 */
+            }
+            for (i = 0; i < dn; i++) {
+                D(i) = fix_mul(D(i), 13318);    /* 13320 */
+            }
+            for (i = 0; i < sn; i++) {
+                S(i) -= fix_mul(D_(i - 1) + D_(i), 3633);
+            }
+            for (i = 0; i < dn; i++) {
+                D(i) -= fix_mul(S_(i) + S_(i + 1), 7233);
+            }
+            for (i = 0; i < sn; i++) {
+                S(i) += fix_mul(D_(i - 1) + D_(i), 434);
+            }
+            for (i = 0; i < dn; i++) {
+                D(i) += fix_mul(S_(i) + S_(i + 1), 12994);    /* 12993 */
+            }
+        }
+    } else {
+        if ((sn > 0) || (dn > 1)) { /* NEW :  CASE ONE ELEMENT */
+            for (i = 0; i < sn; i++) {
+                D(i) = fix_mul(D(i), 10078);    /* 10076 */
+            }
+            for (i = 0; i < dn; i++) {
+                S(i) = fix_mul(S(i), 13318);    /* 13320 */
+            }
+            for (i = 0; i < sn; i++) {
+                D(i) -= fix_mul(SS_(i) + SS_(i + 1), 3633);
+            }
+            for (i = 0; i < dn; i++) {
+                S(i) -= fix_mul(DD_(i) + DD_(i - 1), 7233);
+            }
+            for (i = 0; i < sn; i++) {
+                D(i) += fix_mul(SS_(i) + SS_(i + 1), 434);
+            }
+            for (i = 0; i < dn; i++) {
+                S(i) += fix_mul(DD_(i) + DD_(i - 1), 12994);    /* 12993 */
+            }
+        }
+    }
 }
 
 
 /* <summary>                */
 /* Get norm of arbitrary wavelet transform. */
 /* </summary>               */
-static int upandconv(double *nXPS, double *LPS, int lenXPS, int lenLPS) {
-       /* Perform the convolution of the vectors. */
-       int i,j;
-       double *tmp = (double *)opj_malloc(2*lenXPS * sizeof(double));
-       /*Upsample*/
-       memset(tmp, 0, 2*lenXPS*sizeof(double));
-       for (i = 0; i < lenXPS; i++) {
-               *(tmp + 2*i) = *(nXPS + i);
-               *(nXPS + i) = 0;
-       }
-       /*Convolution*/
-       for (i = 0; i < 2*lenXPS; i++) {
-               for (j = 0; j < lenLPS; j++) {
-                       *(nXPS+i+j) = *(nXPS+i+j) + *(tmp + i) * *(LPS + j);
-                       /*fprintf(stdout,"*(tmp + %d) * *(LPS + %d) = %f * %f \n",i,j,*(tmp + i),*(LPS + j));*/
-               }
-       }
-       free(tmp);
-       return 2*lenXPS+lenLPS-1;
+static int upandconv(double *nXPS, double *LPS, int lenXPS, int lenLPS)
+{
+    /* Perform the convolution of the vectors. */
+    int i, j;
+    double *tmp = (double *)opj_malloc(2 * lenXPS * sizeof(double));
+    /*Upsample*/
+    memset(tmp, 0, 2 * lenXPS * sizeof(double));
+    for (i = 0; i < lenXPS; i++) {
+        *(tmp + 2 * i) = *(nXPS + i);
+        *(nXPS + i) = 0;
+    }
+    /*Convolution*/
+    for (i = 0; i < 2 * lenXPS; i++) {
+        for (j = 0; j < lenLPS; j++) {
+            *(nXPS + i + j) = *(nXPS + i + j) + *(tmp + i) * *(LPS + j);
+            /*fprintf(stdout,"*(tmp + %d) * *(LPS + %d) = %f * %f \n",i,j,*(tmp + i),*(LPS + j));*/
+        }
+    }
+    free(tmp);
+    return 2 * lenXPS + lenLPS - 1;
 }
 
-static double dwt_calc_wtnorms(int orient, int level[3], int dwtid[3], opj_wtfilt_t *wtfiltX,  opj_wtfilt_t *wtfiltY,  opj_wtfilt_t *wtfiltZ) {
-       int i, lenLPS, lenHPS;
-       double  Lx = 0, Ly= 0, Hx= 0, Hy= 0, Lz= 0, Hz= 0;
-       double *nLPSx, *nHPSx,*nLPSy, *nHPSy,*nLPSz, *nHPSz;
-       int levelx, levely, levelz;
-           
-       levelx = (orient == 0) ? level[0]-1 : level[0];
-       levely = (orient == 0) ? level[1]-1 : level[1];
-       levelz = (orient == 0) ? level[2]-1 : level[2];
-       
-       /*X axis*/
-       lenLPS = wtfiltX->lenLPS;
-       lenHPS = wtfiltX->lenHPS;
-       for (i = 0; i < levelx; i++) {
-               lenLPS *= 2;
-               lenHPS *= 2;
-               lenLPS += wtfiltX->lenLPS - 1;
-               lenHPS += wtfiltX->lenLPS - 1;
-       }
-       nLPSx = (double *)opj_malloc(lenLPS * sizeof(double));
-       nHPSx = (double *)opj_malloc(lenHPS * sizeof(double));
-
-       memcpy(nLPSx, wtfiltX->LPS, wtfiltX->lenLPS * sizeof(double));
-       memcpy(nHPSx, wtfiltX->HPS, wtfiltX->lenHPS * sizeof(double));
-       lenLPS = wtfiltX->lenLPS;
-       lenHPS = wtfiltX->lenHPS;
-       for (i = 0; i < levelx; i++) {
-               lenLPS = upandconv(nLPSx, wtfiltX->LPS, lenLPS, wtfiltX->lenLPS);
-               lenHPS = upandconv(nHPSx, wtfiltX->LPS, lenHPS, wtfiltX->lenLPS);
-       }
-       for (i = 0; i < lenLPS; i++)
-               Lx += nLPSx[i] * nLPSx[i];
-       for (i = 0; i < lenHPS; i++)
-               Hx += nHPSx[i] * nHPSx[i];
-       Lx = sqrt(Lx);
-       Hx = sqrt(Hx);
-       free(nLPSx);
-       free(nHPSx);
-       
-       /*Y axis*/
-       if (dwtid[0] != dwtid[1] || level[0] != level[1]){
-               lenLPS = wtfiltY->lenLPS;
-               lenHPS = wtfiltY->lenHPS;
-               for (i = 0; i < levely; i++) {
-                       lenLPS *= 2;
-                       lenHPS *= 2;
-                       lenLPS += wtfiltY->lenLPS - 1;
-                       lenHPS += wtfiltY->lenLPS - 1;
-               }
-               nLPSy = (double *)opj_malloc(lenLPS * sizeof(double));
-               nHPSy = (double *)opj_malloc(lenHPS * sizeof(double));
-
-               memcpy(nLPSy, wtfiltY->LPS, wtfiltY->lenLPS * sizeof(double));
-               memcpy(nHPSy, wtfiltY->HPS, wtfiltY->lenHPS * sizeof(double));
-               lenLPS = wtfiltY->lenLPS;
-               lenHPS = wtfiltY->lenHPS;
-               for (i = 0; i < levely; i++) {
-                       lenLPS = upandconv(nLPSy, wtfiltY->LPS, lenLPS, wtfiltY->lenLPS);
-                       lenHPS = upandconv(nHPSy, wtfiltY->LPS, lenHPS, wtfiltY->lenLPS);
-               }
-               for (i = 0; i < lenLPS; i++)
-                       Ly += nLPSy[i] * nLPSy[i];
-               for (i = 0; i < lenHPS; i++)
-                       Hy += nHPSy[i] * nHPSy[i];
-               Ly = sqrt(Ly);
-               Hy = sqrt(Hy);
-               free(nLPSy);
-               free(nHPSy);
-       } else { 
-               Ly = Lx;
-               Hy = Hx;
-       }
-       /*Z axis*/
-       if (levelz >= 0) { 
-               lenLPS = wtfiltZ->lenLPS;
-               lenHPS = wtfiltZ->lenHPS;
-               for (i = 0; i < levelz; i++) {
-                       lenLPS *= 2;
-                       lenHPS *= 2;
-                       lenLPS += wtfiltZ->lenLPS - 1;
-                       lenHPS += wtfiltZ->lenLPS - 1;
-               }
-               nLPSz = (double *)opj_malloc(lenLPS * sizeof(double));
-               nHPSz = (double *)opj_malloc(lenHPS * sizeof(double));
-
-               memcpy(nLPSz, wtfiltZ->LPS, wtfiltZ->lenLPS * sizeof(double));
-               memcpy(nHPSz, wtfiltZ->HPS, wtfiltZ->lenHPS * sizeof(double));
-               lenLPS = wtfiltZ->lenLPS;
-               lenHPS = wtfiltZ->lenHPS;
-               for (i = 0; i < levelz; i++) {
-                       lenLPS = upandconv(nLPSz, wtfiltZ->LPS, lenLPS, wtfiltZ->lenLPS);
-                       lenHPS = upandconv(nHPSz, wtfiltZ->LPS, lenHPS, wtfiltZ->lenLPS);
-               }
-               for (i = 0; i < lenLPS; i++)
-                       Lz += nLPSz[i] * nLPSz[i];
-               for (i = 0; i < lenHPS; i++)
-                       Hz += nHPSz[i] * nHPSz[i];
-               Lz = sqrt(Lz);
-               Hz = sqrt(Hz);
-               free(nLPSz);
-               free(nHPSz);
-       } else {
-               Lz = 1.0; Hz = 1.0;
-       }
-       switch (orient) {
-               case 0: 
-                       return Lx * Ly * Lz;
-               case 1:
-                       return Lx * Hy * Lz;
-               case 2:
-                       return Hx * Ly * Lz;
-               case 3:
-                       return Hx * Hy * Lz;
-               case 4:
-                       return Lx * Ly * Hz;
-               case 5:
-                       return Lx * Hy * Hz;
-               case 6: 
-                       return Hx * Ly * Hz;
-               case 7:
-                       return Hx * Hy * Hz;
-               default:
-                       return -1;
-       }
-       
+static double dwt_calc_wtnorms(int orient, int level[3], int dwtid[3],
+                               opj_wtfilt_t *wtfiltX,  opj_wtfilt_t *wtfiltY,  opj_wtfilt_t *wtfiltZ)
+{
+    int i, lenLPS, lenHPS;
+    double  Lx = 0, Ly = 0, Hx = 0, Hy = 0, Lz = 0, Hz = 0;
+    double *nLPSx, *nHPSx, *nLPSy, *nHPSy, *nLPSz, *nHPSz;
+    int levelx, levely, levelz;
+
+    levelx = (orient == 0) ? level[0] - 1 : level[0];
+    levely = (orient == 0) ? level[1] - 1 : level[1];
+    levelz = (orient == 0) ? level[2] - 1 : level[2];
+
+    /*X axis*/
+    lenLPS = wtfiltX->lenLPS;
+    lenHPS = wtfiltX->lenHPS;
+    for (i = 0; i < levelx; i++) {
+        lenLPS *= 2;
+        lenHPS *= 2;
+        lenLPS += wtfiltX->lenLPS - 1;
+        lenHPS += wtfiltX->lenLPS - 1;
+    }
+    nLPSx = (double *)opj_malloc(lenLPS * sizeof(double));
+    nHPSx = (double *)opj_malloc(lenHPS * sizeof(double));
+
+    memcpy(nLPSx, wtfiltX->LPS, wtfiltX->lenLPS * sizeof(double));
+    memcpy(nHPSx, wtfiltX->HPS, wtfiltX->lenHPS * sizeof(double));
+    lenLPS = wtfiltX->lenLPS;
+    lenHPS = wtfiltX->lenHPS;
+    for (i = 0; i < levelx; i++) {
+        lenLPS = upandconv(nLPSx, wtfiltX->LPS, lenLPS, wtfiltX->lenLPS);
+        lenHPS = upandconv(nHPSx, wtfiltX->LPS, lenHPS, wtfiltX->lenLPS);
+    }
+    for (i = 0; i < lenLPS; i++) {
+        Lx += nLPSx[i] * nLPSx[i];
+    }
+    for (i = 0; i < lenHPS; i++) {
+        Hx += nHPSx[i] * nHPSx[i];
+    }
+    Lx = sqrt(Lx);
+    Hx = sqrt(Hx);
+    free(nLPSx);
+    free(nHPSx);
+
+    /*Y axis*/
+    if (dwtid[0] != dwtid[1] || level[0] != level[1]) {
+        lenLPS = wtfiltY->lenLPS;
+        lenHPS = wtfiltY->lenHPS;
+        for (i = 0; i < levely; i++) {
+            lenLPS *= 2;
+            lenHPS *= 2;
+            lenLPS += wtfiltY->lenLPS - 1;
+            lenHPS += wtfiltY->lenLPS - 1;
+        }
+        nLPSy = (double *)opj_malloc(lenLPS * sizeof(double));
+        nHPSy = (double *)opj_malloc(lenHPS * sizeof(double));
+
+        memcpy(nLPSy, wtfiltY->LPS, wtfiltY->lenLPS * sizeof(double));
+        memcpy(nHPSy, wtfiltY->HPS, wtfiltY->lenHPS * sizeof(double));
+        lenLPS = wtfiltY->lenLPS;
+        lenHPS = wtfiltY->lenHPS;
+        for (i = 0; i < levely; i++) {
+            lenLPS = upandconv(nLPSy, wtfiltY->LPS, lenLPS, wtfiltY->lenLPS);
+            lenHPS = upandconv(nHPSy, wtfiltY->LPS, lenHPS, wtfiltY->lenLPS);
+        }
+        for (i = 0; i < lenLPS; i++) {
+            Ly += nLPSy[i] * nLPSy[i];
+        }
+        for (i = 0; i < lenHPS; i++) {
+            Hy += nHPSy[i] * nHPSy[i];
+        }
+        Ly = sqrt(Ly);
+        Hy = sqrt(Hy);
+        free(nLPSy);
+        free(nHPSy);
+    } else {
+        Ly = Lx;
+        Hy = Hx;
+    }
+    /*Z axis*/
+    if (levelz >= 0) {
+        lenLPS = wtfiltZ->lenLPS;
+        lenHPS = wtfiltZ->lenHPS;
+        for (i = 0; i < levelz; i++) {
+            lenLPS *= 2;
+            lenHPS *= 2;
+            lenLPS += wtfiltZ->lenLPS - 1;
+            lenHPS += wtfiltZ->lenLPS - 1;
+        }
+        nLPSz = (double *)opj_malloc(lenLPS * sizeof(double));
+        nHPSz = (double *)opj_malloc(lenHPS * sizeof(double));
+
+        memcpy(nLPSz, wtfiltZ->LPS, wtfiltZ->lenLPS * sizeof(double));
+        memcpy(nHPSz, wtfiltZ->HPS, wtfiltZ->lenHPS * sizeof(double));
+        lenLPS = wtfiltZ->lenLPS;
+        lenHPS = wtfiltZ->lenHPS;
+        for (i = 0; i < levelz; i++) {
+            lenLPS = upandconv(nLPSz, wtfiltZ->LPS, lenLPS, wtfiltZ->lenLPS);
+            lenHPS = upandconv(nHPSz, wtfiltZ->LPS, lenHPS, wtfiltZ->lenLPS);
+        }
+        for (i = 0; i < lenLPS; i++) {
+            Lz += nLPSz[i] * nLPSz[i];
+        }
+        for (i = 0; i < lenHPS; i++) {
+            Hz += nHPSz[i] * nHPSz[i];
+        }
+        Lz = sqrt(Lz);
+        Hz = sqrt(Hz);
+        free(nLPSz);
+        free(nHPSz);
+    } else {
+        Lz = 1.0;
+        Hz = 1.0;
+    }
+    switch (orient) {
+    case 0:
+        return Lx * Ly * Lz;
+    case 1:
+        return Lx * Hy * Lz;
+    case 2:
+        return Hx * Ly * Lz;
+    case 3:
+        return Hx * Hy * Lz;
+    case 4:
+        return Lx * Ly * Hz;
+    case 5:
+        return Lx * Hy * Hz;
+    case 6:
+        return Hx * Ly * Hz;
+    case 7:
+        return Hx * Hy * Hz;
+    default:
+        return -1;
+    }
+
 }
-static void dwt_getwtfilters(opj_wtfilt_t *wtfilt, int dwtid) {
-       if (dwtid == 0) { /*DWT 9-7 */
-                       wtfilt->lenLPS = 7;             wtfilt->lenHPS = 9;
-                       wtfilt->LPS = (double *)opj_malloc(wtfilt->lenLPS * sizeof(double));
-                       wtfilt->HPS = (double *)opj_malloc(wtfilt->lenHPS * sizeof(double));
-                       wtfilt->LPS[0] = -0.091271763114;       wtfilt->HPS[0] = 0.026748757411;
-                       wtfilt->LPS[1] = -0.057543526228;       wtfilt->HPS[1] = 0.016864118443;
-                       wtfilt->LPS[2] = 0.591271763114;        wtfilt->HPS[2] = -0.078223266529;
-                       wtfilt->LPS[3] = 1.115087052457;        wtfilt->HPS[3] = -0.266864118443;
-                       wtfilt->LPS[4] = 0.591271763114;        wtfilt->HPS[4] = 0.602949018236;
-                       wtfilt->LPS[5] = -0.057543526228;       wtfilt->HPS[5] = -0.266864118443;
-                       wtfilt->LPS[6] = -0.091271763114;       wtfilt->HPS[6] = -0.078223266529;
-                                                                                               wtfilt->HPS[7] = 0.016864118443;
-                                                                                               wtfilt->HPS[8] = 0.026748757411;                        
-       } else if (dwtid == 1) { /*DWT 5-3 */
-                       wtfilt->lenLPS = 3;             wtfilt->lenHPS = 5;
-                       wtfilt->LPS = (double *)opj_malloc(wtfilt->lenLPS * sizeof(double));
-                       wtfilt->HPS = (double *)opj_malloc(wtfilt->lenHPS * sizeof(double));
-                       wtfilt->LPS[0] = 0.5;   wtfilt->HPS[0] = -0.125; 
-                       wtfilt->LPS[1] = 1;             wtfilt->HPS[1] = -0.25; 
-                       wtfilt->LPS[2] = 0.5;   wtfilt->HPS[2] = 0.75;
-                                                                       wtfilt->HPS[3] = -0.25; 
-                                                                       wtfilt->HPS[4] = -0.125;
-       } else {
-               fprintf(stdout,"[ERROR] Sorry, this wavelet hasn't been implemented so far ... Try another one :-)\n");
-               exit(1);
-       }
+static void dwt_getwtfilters(opj_wtfilt_t *wtfilt, int dwtid)
+{
+    if (dwtid == 0) { /*DWT 9-7 */
+        wtfilt->lenLPS = 7;
+        wtfilt->lenHPS = 9;
+        wtfilt->LPS = (double *)opj_malloc(wtfilt->lenLPS * sizeof(double));
+        wtfilt->HPS = (double *)opj_malloc(wtfilt->lenHPS * sizeof(double));
+        wtfilt->LPS[0] = -0.091271763114;
+        wtfilt->HPS[0] = 0.026748757411;
+        wtfilt->LPS[1] = -0.057543526228;
+        wtfilt->HPS[1] = 0.016864118443;
+        wtfilt->LPS[2] = 0.591271763114;
+        wtfilt->HPS[2] = -0.078223266529;
+        wtfilt->LPS[3] = 1.115087052457;
+        wtfilt->HPS[3] = -0.266864118443;
+        wtfilt->LPS[4] = 0.591271763114;
+        wtfilt->HPS[4] = 0.602949018236;
+        wtfilt->LPS[5] = -0.057543526228;
+        wtfilt->HPS[5] = -0.266864118443;
+        wtfilt->LPS[6] = -0.091271763114;
+        wtfilt->HPS[6] = -0.078223266529;
+        wtfilt->HPS[7] = 0.016864118443;
+        wtfilt->HPS[8] = 0.026748757411;
+    } else if (dwtid == 1) { /*DWT 5-3 */
+        wtfilt->lenLPS = 3;
+        wtfilt->lenHPS = 5;
+        wtfilt->LPS = (double *)opj_malloc(wtfilt->lenLPS * sizeof(double));
+        wtfilt->HPS = (double *)opj_malloc(wtfilt->lenHPS * sizeof(double));
+        wtfilt->LPS[0] = 0.5;
+        wtfilt->HPS[0] = -0.125;
+        wtfilt->LPS[1] = 1;
+        wtfilt->HPS[1] = -0.25;
+        wtfilt->LPS[2] = 0.5;
+        wtfilt->HPS[2] = 0.75;
+        wtfilt->HPS[3] = -0.25;
+        wtfilt->HPS[4] = -0.125;
+    } else {
+        fprintf(stdout,
+                "[ERROR] Sorry, this wavelet hasn't been implemented so far ... Try another one :-)\n");
+        exit(1);
+    }
 }
 /* <summary>                            */
 /* Encoding of quantization stepsize for each subband. */
-/* </summary>                           */ 
-static void dwt_encode_stepsize(int stepsize, int numbps, opj_stepsize_t *bandno_stepsize) {
-       int p, n;
-       p = int_floorlog2(stepsize) - 13;
-       n = 11 - int_floorlog2(stepsize);
-       bandno_stepsize->mant = (n < 0 ? stepsize >> -n : stepsize << n) & 0x7ff;
-       bandno_stepsize->expn = numbps - p;
-       /*if J3D_CCP_QNTSTY_NOQNT --> stepsize = 8192.0 --> p = 0, n = -2 --> mant = 0; expn = (prec+gain)*/
-       /*else --> bandno_stepsize = (1<<(numbps - expn)) + (1<<(numbps - expn - 11)) * Ub*/
+/* </summary>                           */
+static void dwt_encode_stepsize(int stepsize, int numbps,
+                                opj_stepsize_t *bandno_stepsize)
+{
+    int p, n;
+    p = int_floorlog2(stepsize) - 13;
+    n = 11 - int_floorlog2(stepsize);
+    bandno_stepsize->mant = (n < 0 ? stepsize >> -n : stepsize << n) & 0x7ff;
+    bandno_stepsize->expn = numbps - p;
+    /*if J3D_CCP_QNTSTY_NOQNT --> stepsize = 8192.0 --> p = 0, n = -2 --> mant = 0; expn = (prec+gain)*/
+    /*else --> bandno_stepsize = (1<<(numbps - expn)) + (1<<(numbps - expn - 11)) * Ub*/
 }
 
-/* 
+/*
 ==========================================================
    DWT interface
 ==========================================================
@@ -663,261 +748,298 @@ static void dwt_encode_stepsize(int stepsize, int numbps, opj_stepsize_t *bandno
 /* <summary>                            */
 /* Forward 5-3 wavelet transform in 3-D. */
 /* </summary>                           */
-void dwt_encode(opj_tcd_tilecomp_t * tilec, int dwtid[3]) {
-       int i, j, k;
-       int x, y, z;
-       int w, h, wh, d;
-       int level,levelx,levely,levelz,diff;
-       int *a = NULL;
-       int *aj = NULL;
-       int *bj = NULL;
-       int *cj = NULL;
-       
-       /*ops = 0;*/
-
-       memset(flagnorm,0,8000*sizeof(int));
-       w = tilec->x1-tilec->x0;
-       h = tilec->y1-tilec->y0;
-       d = tilec->z1-tilec->z0;
-       wh = w * h;
-       levelx = tilec->numresolution[0]-1;
-       levely = tilec->numresolution[1]-1;
-       levelz = tilec->numresolution[2]-1;
-       level = int_max(levelx,int_max(levely,levelz));
-       diff = tilec->numresolution[0] - tilec->numresolution[2];
-
-       a = tilec->data;
-
-       for (x = 0, y = 0, z = 0; (x < levelx) && (y < levely); x++, y++, z++) {
-               int rw;                 /* width of the resolution level computed                                                           */
-               int rh;                 /* heigth of the resolution level computed                                                          */
-               int rd;                 /* depth of the resolution level computed                                                          */
-               int rw1;                /* width of the resolution level once lower than computed one                                       */
-               int rh1;                /* height of the resolution level once lower than computed one                                      */
-               int rd1;                /* depth of the resolution level once lower than computed one                                      */
-               int cas_col;    /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */
-               int cas_row;    /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering   */
-               int cas_axl;    /* 0 = non inversion on axial filtering 1 = inversion between low-pass and high-pass filtering   */
-               int dn, sn;
-               
-               rw = tilec->resolutions[level - x].x1 - tilec->resolutions[level - x].x0;
-               rh = tilec->resolutions[level - y].y1 - tilec->resolutions[level - y].y0;
-               rd = tilec->resolutions[level - z].z1 - tilec->resolutions[level - z].z0;
-               rw1= tilec->resolutions[level - x - 1].x1 - tilec->resolutions[level - x - 1].x0;
-               rh1= tilec->resolutions[level - y - 1].y1 - tilec->resolutions[level - y - 1].y0;
-               rd1= tilec->resolutions[level - z - 1].z1 - tilec->resolutions[level - z - 1].z0;
-               
-               cas_col = tilec->resolutions[level - x].x0 % 2; /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */
-               cas_row = tilec->resolutions[level - y].y0 % 2; /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering   */
-               cas_axl = tilec->resolutions[level - z].z0 % 2;
-       
-               /*fprintf(stdout," x %d y %d z %d \n",x,y,z);
-               fprintf(stdout," levelx %d levely %d levelz %d \n",levelx,levely,levelz);
-               fprintf(stdout," z1 %d z0 %d\n",tilec->resolutions[level - z].z1,tilec->resolutions[level - z].z0);
-               fprintf(stdout," rw %d rh %d rd %d \n rw1 %d rh1 %d rd1 %d \n",rw,rh,rd,rw1,rh1,rd1);*/
-
-               for (i = 0; i < rd; i++) {
-                       
-                       cj = a + (i * wh);
-                       
-                       /*Horizontal*/
-                       sn = rw1;
-                       dn = rw - rw1;
-                       bj = (int*)opj_malloc(rw * sizeof(int));
-                       if (dwtid[0] == 0) {
-                               for (j = 0; j < rh; j++) {
-                                       aj = cj + j * w;
-                                       for (k = 0; k < rw; k++)  bj[k] = aj[k];
-                                       dwt_encode_97(bj, dn, sn, cas_row);
-                                       dwt_deinterleave_h(bj, aj, dn, sn, cas_row);
-                               }
-                       } else if (dwtid[0] == 1) {
-                               for (j = 0; j < rh; j++) {
-                                       aj = cj + j * w;
-                                       for (k = 0; k < rw; k++)  bj[k] = aj[k];
-                                       dwt_encode_53(bj, dn, sn, cas_row);
-                                       dwt_deinterleave_h(bj, aj, dn, sn, cas_row);
-                               }
-                       } 
-                       opj_free(bj);
-
-                       /*Vertical*/
-                       sn = rh1;
-                       dn = rh - rh1;
-                       bj = (int*)opj_malloc(rh * sizeof(int));
-                       if (dwtid[1] == 0) { /*DWT 9-7*/
-                               for (j = 0; j < rw; j++) {
-                                       aj = cj + j;
-                                       for (k = 0; k < rh; k++)  bj[k] = aj[k*w];
-                                       dwt_encode_97(bj, dn, sn, cas_col);
-                                       dwt_deinterleave_v(bj, aj, dn, sn, w, cas_col);
-                               }
+void dwt_encode(opj_tcd_tilecomp_t * tilec, int dwtid[3])
+{
+    int i, j, k;
+    int x, y, z;
+    int w, h, wh, d;
+    int level, levelx, levely, levelz, diff;
+    int *a = NULL;
+    int *aj = NULL;
+    int *bj = NULL;
+    int *cj = NULL;
+
+    /*ops = 0;*/
+
+    memset(flagnorm, 0, 8000 * sizeof(int));
+    w = tilec->x1 - tilec->x0;
+    h = tilec->y1 - tilec->y0;
+    d = tilec->z1 - tilec->z0;
+    wh = w * h;
+    levelx = tilec->numresolution[0] - 1;
+    levely = tilec->numresolution[1] - 1;
+    levelz = tilec->numresolution[2] - 1;
+    level = int_max(levelx, int_max(levely, levelz));
+    diff = tilec->numresolution[0] - tilec->numresolution[2];
+
+    a = tilec->data;
+
+    for (x = 0, y = 0, z = 0; (x < levelx) && (y < levely); x++, y++, z++) {
+        int rw;         /* width of the resolution level computed                                                           */
+        int rh;         /* heigth of the resolution level computed                                                          */
+        int rd;         /* depth of the resolution level computed                                                          */
+        int rw1;        /* width of the resolution level once lower than computed one                                       */
+        int rh1;        /* height of the resolution level once lower than computed one                                      */
+        int rd1;        /* depth of the resolution level once lower than computed one                                      */
+        int cas_col;    /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */
+        int cas_row;    /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering   */
+        int cas_axl;    /* 0 = non inversion on axial filtering 1 = inversion between low-pass and high-pass filtering   */
+        int dn, sn;
+
+        rw = tilec->resolutions[level - x].x1 - tilec->resolutions[level - x].x0;
+        rh = tilec->resolutions[level - y].y1 - tilec->resolutions[level - y].y0;
+        rd = tilec->resolutions[level - z].z1 - tilec->resolutions[level - z].z0;
+        rw1 = tilec->resolutions[level - x - 1].x1 - tilec->resolutions[level - x -
+                1].x0;
+        rh1 = tilec->resolutions[level - y - 1].y1 - tilec->resolutions[level - y -
+                1].y0;
+        rd1 = tilec->resolutions[level - z - 1].z1 - tilec->resolutions[level - z -
+                1].z0;
+
+        cas_col = tilec->resolutions[level - x].x0 %
+                  2; /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */
+        cas_row = tilec->resolutions[level - y].y0 %
+                  2; /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering   */
+        cas_axl = tilec->resolutions[level - z].z0 % 2;
+
+        /*fprintf(stdout," x %d y %d z %d \n",x,y,z);
+        fprintf(stdout," levelx %d levely %d levelz %d \n",levelx,levely,levelz);
+        fprintf(stdout," z1 %d z0 %d\n",tilec->resolutions[level - z].z1,tilec->resolutions[level - z].z0);
+        fprintf(stdout," rw %d rh %d rd %d \n rw1 %d rh1 %d rd1 %d \n",rw,rh,rd,rw1,rh1,rd1);*/
+
+        for (i = 0; i < rd; i++) {
+
+            cj = a + (i * wh);
+
+            /*Horizontal*/
+            sn = rw1;
+            dn = rw - rw1;
+            bj = (int*)opj_malloc(rw * sizeof(int));
+            if (dwtid[0] == 0) {
+                for (j = 0; j < rh; j++) {
+                    aj = cj + j * w;
+                    for (k = 0; k < rw; k++) {
+                        bj[k] = aj[k];
+                    }
+                    dwt_encode_97(bj, dn, sn, cas_row);
+                    dwt_deinterleave_h(bj, aj, dn, sn, cas_row);
+                }
+            } else if (dwtid[0] == 1) {
+                for (j = 0; j < rh; j++) {
+                    aj = cj + j * w;
+                    for (k = 0; k < rw; k++) {
+                        bj[k] = aj[k];
+                    }
+                    dwt_encode_53(bj, dn, sn, cas_row);
+                    dwt_deinterleave_h(bj, aj, dn, sn, cas_row);
+                }
+            }
+            opj_free(bj);
+
+            /*Vertical*/
+            sn = rh1;
+            dn = rh - rh1;
+            bj = (int*)opj_malloc(rh * sizeof(int));
+            if (dwtid[1] == 0) { /*DWT 9-7*/
+                for (j = 0; j < rw; j++) {
+                    aj = cj + j;
+                    for (k = 0; k < rh; k++) {
+                        bj[k] = aj[k * w];
+                    }
+                    dwt_encode_97(bj, dn, sn, cas_col);
+                    dwt_deinterleave_v(bj, aj, dn, sn, w, cas_col);
+                }
             } else if (dwtid[1] == 1) { /*DWT 5-3*/
-                               for (j = 0; j < rw; j++) {
-                                       aj = cj + j;
-                                       for (k = 0; k < rh; k++)  bj[k] = aj[k*w];
-                                       dwt_encode_53(bj, dn, sn, cas_col);
-                                       dwt_deinterleave_v(bj, aj, dn, sn, w, cas_col);
-                               }
-                       } 
-                       opj_free(bj);
-               }
-
-               if (z < levelz){
-                       /*Axial fprintf(stdout,"Axial DWT Transform %d %d %d\n",z,rd,rd1);*/
-                       sn = rd1;
-                       dn = rd - rd1;
-                       bj = (int*)opj_malloc(rd * sizeof(int));
-                       if (dwtid[2] == 0) {
-                for (j = 0; j < (rw*rh); j++) {
-                                       aj = a + j;
-                                       for (k = 0; k < rd; k++)  bj[k] = aj[k*wh];
-                                       dwt_encode_97(bj, dn, sn, cas_axl);
-                                       dwt_deinterleave_z(bj, aj, dn, sn, wh, cas_axl);
-                               }
-                       } else if (dwtid[2] == 1) {
-                               for (j = 0; j < (rw*rh); j++) {
-                                       aj = a + j;
-                                       for (k = 0; k < rd; k++)  bj[k] = aj[k*wh];
-                                       dwt_encode_53(bj, dn, sn, cas_axl);
-                                       dwt_deinterleave_z(bj, aj, dn, sn, wh, cas_axl);
-                               }
-                       } 
-                       opj_free(bj);
-               }
-       }
-
-       /*fprintf(stdout,"[INFO] Ops: %d \n",ops);*/
+                for (j = 0; j < rw; j++) {
+                    aj = cj + j;
+                    for (k = 0; k < rh; k++) {
+                        bj[k] = aj[k * w];
+                    }
+                    dwt_encode_53(bj, dn, sn, cas_col);
+                    dwt_deinterleave_v(bj, aj, dn, sn, w, cas_col);
+                }
+            }
+            opj_free(bj);
+        }
+
+        if (z < levelz) {
+            /*Axial fprintf(stdout,"Axial DWT Transform %d %d %d\n",z,rd,rd1);*/
+            sn = rd1;
+            dn = rd - rd1;
+            bj = (int*)opj_malloc(rd * sizeof(int));
+            if (dwtid[2] == 0) {
+                for (j = 0; j < (rw * rh); j++) {
+                    aj = a + j;
+                    for (k = 0; k < rd; k++) {
+                        bj[k] = aj[k * wh];
+                    }
+                    dwt_encode_97(bj, dn, sn, cas_axl);
+                    dwt_deinterleave_z(bj, aj, dn, sn, wh, cas_axl);
+                }
+            } else if (dwtid[2] == 1) {
+                for (j = 0; j < (rw * rh); j++) {
+                    aj = a + j;
+                    for (k = 0; k < rd; k++) {
+                        bj[k] = aj[k * wh];
+                    }
+                    dwt_encode_53(bj, dn, sn, cas_axl);
+                    dwt_deinterleave_z(bj, aj, dn, sn, wh, cas_axl);
+                }
+            }
+            opj_free(bj);
+        }
+    }
+
+    /*fprintf(stdout,"[INFO] Ops: %d \n",ops);*/
 }
 
 
 /* <summary>                            */
 /* Inverse 5-3 wavelet transform in 3-D. */
 /* </summary>                           */
-void dwt_decode(opj_tcd_tilecomp_t * tilec, int stops[3], int dwtid[3]) {
-       int i, j, k;
-       int x, y, z;
-       int w, h, wh, d;
-       int level, levelx, levely, levelz, diff;
-       int *a = NULL;
-       int *aj = NULL;
-       int *bj = NULL;
-       int *cj = NULL;
-       
-       a = tilec->data;
-
-       w = tilec->x1-tilec->x0;
-       h = tilec->y1-tilec->y0;
-       d = tilec->z1-tilec->z0;
-       wh = w * h;
-       levelx = tilec->numresolution[0]-1;
-       levely = tilec->numresolution[1]-1;
-       levelz = tilec->numresolution[2]-1;
-       level = int_max(levelx,int_max(levely,levelz));
-       diff = tilec->numresolution[0] - tilec->numresolution[2];
-               
-/* General lifting framework -- DCCS-LIWT */
-       for (x = level - 1, y = level - 1, z = level - 1; (x >= stops[0]) && (y >= stops[1]); x--, y--, z--) {
-               int rw;                 /* width of the resolution level computed                                                           */
-               int rh;                 /* heigth of the resolution level computed                                                          */
-               int rd;                 /* depth of the resolution level computed                                                          */
-               int rw1;                /* width of the resolution level once lower than computed one                                       */
-               int rh1;                /* height of the resolution level once lower than computed one                                      */
-               int rd1;                /* depth of the resolution level once lower than computed one                                      */
-               int cas_col;    /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */
-               int cas_row;    /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering   */
-               int cas_axl;    /* 0 = non inversion on axial filtering 1 = inversion between low-pass and high-pass filtering   */
-               int dn, sn;
-               
-               rw = tilec->resolutions[level - x].x1 - tilec->resolutions[level - x].x0;
-               rh = tilec->resolutions[level - y].y1 - tilec->resolutions[level - y].y0;
-               rd = tilec->resolutions[level - z].z1 - tilec->resolutions[level - z].z0;
-               rw1= tilec->resolutions[level - x - 1].x1 - tilec->resolutions[level - x - 1].x0;
-               rh1= tilec->resolutions[level - y - 1].y1 - tilec->resolutions[level - y - 1].y0;
-               rd1= tilec->resolutions[level - z - 1].z1 - tilec->resolutions[level - z - 1].z0;
-               
-               cas_col = tilec->resolutions[level - x].x0 % 2; /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */
-               cas_row = tilec->resolutions[level - y].y0 % 2; /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering   */
-               cas_axl = tilec->resolutions[level - z].z0 % 2;
-       
-               /*fprintf(stdout," x %d y %d z %d \n",x,y,z);
-               fprintf(stdout," levelx %d levely %d levelz %d \n",levelx,levely,levelz);
-               fprintf(stdout," dwtid[0] %d [1] %d [2] %d \n",dwtid[0],dwtid[1],dwtid[2]);
-               fprintf(stdout," rw %d rh %d rd %d \n rw1 %d rh1 %d rd1 %d \n",rw,rh,rd,rw1,rh1,rd1);
-               fprintf(stdout,"IDWT Transform %d %d %d %d\n",level, z, rd,rd1);*/
-
-               if (z >= stops[2] && rd != rd1) {
-                       /*fprintf(stdout,"Axial Transform %d %d %d %d\n",levelz, z, rd,rd1);*/
-                       sn = rd1;
-                       dn = rd - rd1;
-                       bj = (int*)opj_malloc(rd * sizeof(int));
-                       if (dwtid[2] == 0) {
-                               for (j = 0; j < (rw*rh); j++) {
-                                       aj = a + j;
-                                       dwt_interleave_z(aj, bj, dn, sn, wh, cas_axl);
-                                       dwt_decode_97(bj, dn, sn, cas_axl);
-                                       for (k = 0; k < rd; k++)  aj[k * wh] = bj[k];
-                               }
-                       } else if (dwtid[2] == 1) {
-                               for (j = 0; j < (rw*rh); j++) {
-                                       aj = a + j;
-                                       dwt_interleave_z(aj, bj, dn, sn, wh, cas_axl);
-                                       dwt_decode_53(bj, dn, sn, cas_axl);
-                                       for (k = 0; k < rd; k++)  aj[k * wh] = bj[k];
-                               }
-                       } 
-                       opj_free(bj);
-               }
-
-               for (i = 0; i < rd; i++) {
-                       /*Fetch corresponding slice for doing DWT-2D*/
-                       cj = tilec->data + (i * wh);
-                       
-                       /*Vertical*/
-                       sn = rh1;
-                       dn = rh - rh1;
-                       bj = (int*)opj_malloc(rh * sizeof(int));
-                       if (dwtid[1] == 0) {
-                               for (j = 0; j < rw; j++) {
-                                       aj = cj + j;
-                                       dwt_interleave_v(aj, bj, dn, sn, w, cas_col);
-                                       dwt_decode_97(bj, dn, sn, cas_col);
-                                       for (k = 0; k < rh; k++)  aj[k * w] = bj[k];
-                               }
-                       } else if (dwtid[1] == 1) {
-                               for (j = 0; j < rw; j++) {
-                                       aj = cj + j;
-                                       dwt_interleave_v(aj, bj, dn, sn, w, cas_col);
-                                       dwt_decode_53(bj, dn, sn, cas_col);
-                                       for (k = 0; k < rh; k++)  aj[k * w] = bj[k];
-                               }
-                       } 
-                       opj_free(bj);
-
-                       /*Horizontal*/
-                       sn = rw1;
-                       dn = rw - rw1;
-                       bj = (int*)opj_malloc(rw * sizeof(int));
-                       if (dwtid[0]==0) {
-                               for (j = 0; j < rh; j++) {
-                                       aj = cj + j*w;
-                                       dwt_interleave_h(aj, bj, dn, sn, cas_row);
-                                       dwt_decode_97(bj, dn, sn, cas_row);
-                                       for (k = 0; k < rw; k++)  aj[k] = bj[k];
-                               }
-                       } else if (dwtid[0]==1) {
-                               for (j = 0; j < rh; j++) {
-                                       aj = cj + j*w;
-                                       dwt_interleave_h(aj, bj, dn, sn, cas_row);
-                                       dwt_decode_53(bj, dn, sn, cas_row);
-                                       for (k = 0; k < rw; k++)  aj[k] = bj[k];
-                               }
-                       } 
-                       opj_free(bj);
-                       
-               }
-       
-       }
+void dwt_decode(opj_tcd_tilecomp_t * tilec, int stops[3], int dwtid[3])
+{
+    int i, j, k;
+    int x, y, z;
+    int w, h, wh, d;
+    int level, levelx, levely, levelz, diff;
+    int *a = NULL;
+    int *aj = NULL;
+    int *bj = NULL;
+    int *cj = NULL;
+
+    a = tilec->data;
+
+    w = tilec->x1 - tilec->x0;
+    h = tilec->y1 - tilec->y0;
+    d = tilec->z1 - tilec->z0;
+    wh = w * h;
+    levelx = tilec->numresolution[0] - 1;
+    levely = tilec->numresolution[1] - 1;
+    levelz = tilec->numresolution[2] - 1;
+    level = int_max(levelx, int_max(levely, levelz));
+    diff = tilec->numresolution[0] - tilec->numresolution[2];
+
+    /* General lifting framework -- DCCS-LIWT */
+    for (x = level - 1, y = level - 1, z = level - 1; (x >= stops[0]) &&
+            (y >= stops[1]); x--, y--, z--) {
+        int rw;         /* width of the resolution level computed                                                           */
+        int rh;         /* heigth of the resolution level computed                                                          */
+        int rd;         /* depth of the resolution level computed                                                          */
+        int rw1;        /* width of the resolution level once lower than computed one                                       */
+        int rh1;        /* height of the resolution level once lower than computed one                                      */
+        int rd1;        /* depth of the resolution level once lower than computed one                                      */
+        int cas_col;    /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */
+        int cas_row;    /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering   */
+        int cas_axl;    /* 0 = non inversion on axial filtering 1 = inversion between low-pass and high-pass filtering   */
+        int dn, sn;
+
+        rw = tilec->resolutions[level - x].x1 - tilec->resolutions[level - x].x0;
+        rh = tilec->resolutions[level - y].y1 - tilec->resolutions[level - y].y0;
+        rd = tilec->resolutions[level - z].z1 - tilec->resolutions[level - z].z0;
+        rw1 = tilec->resolutions[level - x - 1].x1 - tilec->resolutions[level - x -
+                1].x0;
+        rh1 = tilec->resolutions[level - y - 1].y1 - tilec->resolutions[level - y -
+                1].y0;
+        rd1 = tilec->resolutions[level - z - 1].z1 - tilec->resolutions[level - z -
+                1].z0;
+
+        cas_col = tilec->resolutions[level - x].x0 %
+                  2; /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */
+        cas_row = tilec->resolutions[level - y].y0 %
+                  2; /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering   */
+        cas_axl = tilec->resolutions[level - z].z0 % 2;
+
+        /*fprintf(stdout," x %d y %d z %d \n",x,y,z);
+        fprintf(stdout," levelx %d levely %d levelz %d \n",levelx,levely,levelz);
+        fprintf(stdout," dwtid[0] %d [1] %d [2] %d \n",dwtid[0],dwtid[1],dwtid[2]);
+        fprintf(stdout," rw %d rh %d rd %d \n rw1 %d rh1 %d rd1 %d \n",rw,rh,rd,rw1,rh1,rd1);
+        fprintf(stdout,"IDWT Transform %d %d %d %d\n",level, z, rd,rd1);*/
+
+        if (z >= stops[2] && rd != rd1) {
+            /*fprintf(stdout,"Axial Transform %d %d %d %d\n",levelz, z, rd,rd1);*/
+            sn = rd1;
+            dn = rd - rd1;
+            bj = (int*)opj_malloc(rd * sizeof(int));
+            if (dwtid[2] == 0) {
+                for (j = 0; j < (rw * rh); j++) {
+                    aj = a + j;
+                    dwt_interleave_z(aj, bj, dn, sn, wh, cas_axl);
+                    dwt_decode_97(bj, dn, sn, cas_axl);
+                    for (k = 0; k < rd; k++) {
+                        aj[k * wh] = bj[k];
+                    }
+                }
+            } else if (dwtid[2] == 1) {
+                for (j = 0; j < (rw * rh); j++) {
+                    aj = a + j;
+                    dwt_interleave_z(aj, bj, dn, sn, wh, cas_axl);
+                    dwt_decode_53(bj, dn, sn, cas_axl);
+                    for (k = 0; k < rd; k++) {
+                        aj[k * wh] = bj[k];
+                    }
+                }
+            }
+            opj_free(bj);
+        }
+
+        for (i = 0; i < rd; i++) {
+            /*Fetch corresponding slice for doing DWT-2D*/
+            cj = tilec->data + (i * wh);
+
+            /*Vertical*/
+            sn = rh1;
+            dn = rh - rh1;
+            bj = (int*)opj_malloc(rh * sizeof(int));
+            if (dwtid[1] == 0) {
+                for (j = 0; j < rw; j++) {
+                    aj = cj + j;
+                    dwt_interleave_v(aj, bj, dn, sn, w, cas_col);
+                    dwt_decode_97(bj, dn, sn, cas_col);
+                    for (k = 0; k < rh; k++) {
+                        aj[k * w] = bj[k];
+                    }
+                }
+            } else if (dwtid[1] == 1) {
+                for (j = 0; j < rw; j++) {
+                    aj = cj + j;
+                    dwt_interleave_v(aj, bj, dn, sn, w, cas_col);
+                    dwt_decode_53(bj, dn, sn, cas_col);
+                    for (k = 0; k < rh; k++) {
+                        aj[k * w] = bj[k];
+                    }
+                }
+            }
+            opj_free(bj);
+
+            /*Horizontal*/
+            sn = rw1;
+            dn = rw - rw1;
+            bj = (int*)opj_malloc(rw * sizeof(int));
+            if (dwtid[0] == 0) {
+                for (j = 0; j < rh; j++) {
+                    aj = cj + j * w;
+                    dwt_interleave_h(aj, bj, dn, sn, cas_row);
+                    dwt_decode_97(bj, dn, sn, cas_row);
+                    for (k = 0; k < rw; k++) {
+                        aj[k] = bj[k];
+                    }
+                }
+            } else if (dwtid[0] == 1) {
+                for (j = 0; j < rh; j++) {
+                    aj = cj + j * w;
+                    dwt_interleave_h(aj, bj, dn, sn, cas_row);
+                    dwt_decode_53(bj, dn, sn, cas_row);
+                    for (k = 0; k < rw; k++) {
+                        aj[k] = bj[k];
+                    }
+                }
+            }
+            opj_free(bj);
+
+        }
+
+    }
 
 }
 
@@ -925,96 +1047,111 @@ void dwt_decode(opj_tcd_tilecomp_t * tilec, int stops[3], int dwtid[3]) {
 /* <summary>                          */
 /* Get gain of wavelet transform. */
 /* </summary>                         */
-int dwt_getgain(int orient, int reversible) {
-       if (reversible == 1) { 
-               if (orient == 0)
-                       return 0;
-               else if (orient == 1 || orient == 2 || orient == 4 )
-                       return 1;
-               else if (orient == 3 || orient == 5 || orient == 6 )
-                       return 2;
-               else 
-                       return 3;
-       }
-       /*else if (reversible == 0){*/
-       return 0;
+int dwt_getgain(int orient, int reversible)
+{
+    if (reversible == 1) {
+        if (orient == 0) {
+            return 0;
+        } else if (orient == 1 || orient == 2 || orient == 4) {
+            return 1;
+        } else if (orient == 3 || orient == 5 || orient == 6) {
+            return 2;
+        } else {
+            return 3;
+        }
+    }
+    /*else if (reversible == 0){*/
+    return 0;
 }
 
 /* <summary>                */
 /* Get norm of wavelet transform. */
 /* </summary>               */
-double dwt_getnorm(int orient, int level[3], int dwtid[3]) {
-       int levelx = level[0];
-       int levely = level[1];
-       int levelz = (level[2] < 0) ? 0 : level[2];
-       double norm;
-
-       if (flagnorm[levelx][levely][levelz][orient] == 1) {
-               norm = dwt_norm[levelx][levely][levelz][orient];
-               /*fprintf(stdout,"[INFO] Level: %d %d %d Orient %d Dwt_norm: %f \n",level[0],level[1],level[2],orient,norm);*/
-       } else {
-               opj_wtfilt_t *wtfiltx =(opj_wtfilt_t *) opj_malloc(sizeof(opj_wtfilt_t));
-               opj_wtfilt_t *wtfilty =(opj_wtfilt_t *) opj_malloc(sizeof(opj_wtfilt_t));
-               opj_wtfilt_t *wtfiltz =(opj_wtfilt_t *) opj_malloc(sizeof(opj_wtfilt_t));
-               /*Fetch equivalent filters for each dimension*/
-               dwt_getwtfilters(wtfiltx, dwtid[0]);
-               dwt_getwtfilters(wtfilty, dwtid[1]);
-               dwt_getwtfilters(wtfiltz, dwtid[2]);
-               /*Calculate the corresponding norm */
-               norm = dwt_calc_wtnorms(orient, level, dwtid, wtfiltx, wtfilty, wtfiltz);
-               /*Save norm in array (no recalculation)*/
-               dwt_norm[levelx][levely][levelz][orient] = norm;
-               flagnorm[levelx][levely][levelz][orient] = 1;
-               /*Free reserved space*/
-               opj_free(wtfiltx->LPS); opj_free(wtfilty->LPS); opj_free(wtfiltz->LPS);
-               opj_free(wtfiltx->HPS); opj_free(wtfilty->HPS); opj_free(wtfiltz->HPS);
-               opj_free(wtfiltx);              opj_free(wtfilty);              opj_free(wtfiltz);
-               /*fprintf(stdout,"[INFO] Dwtid: %d %d %d Level: %d %d %d Orient %d Norm: %f \n",dwtid[0],dwtid[1],dwtid[2],level[0],level[1],level[2],orient,norm);*/
-       } 
-       return norm;
+double dwt_getnorm(int orient, int level[3], int dwtid[3])
+{
+    int levelx = level[0];
+    int levely = level[1];
+    int levelz = (level[2] < 0) ? 0 : level[2];
+    double norm;
+
+    if (flagnorm[levelx][levely][levelz][orient] == 1) {
+        norm = dwt_norm[levelx][levely][levelz][orient];
+        /*fprintf(stdout,"[INFO] Level: %d %d %d Orient %d Dwt_norm: %f \n",level[0],level[1],level[2],orient,norm);*/
+    } else {
+        opj_wtfilt_t *wtfiltx = (opj_wtfilt_t *) opj_malloc(sizeof(opj_wtfilt_t));
+        opj_wtfilt_t *wtfilty = (opj_wtfilt_t *) opj_malloc(sizeof(opj_wtfilt_t));
+        opj_wtfilt_t *wtfiltz = (opj_wtfilt_t *) opj_malloc(sizeof(opj_wtfilt_t));
+        /*Fetch equivalent filters for each dimension*/
+        dwt_getwtfilters(wtfiltx, dwtid[0]);
+        dwt_getwtfilters(wtfilty, dwtid[1]);
+        dwt_getwtfilters(wtfiltz, dwtid[2]);
+        /*Calculate the corresponding norm */
+        norm = dwt_calc_wtnorms(orient, level, dwtid, wtfiltx, wtfilty, wtfiltz);
+        /*Save norm in array (no recalculation)*/
+        dwt_norm[levelx][levely][levelz][orient] = norm;
+        flagnorm[levelx][levely][levelz][orient] = 1;
+        /*Free reserved space*/
+        opj_free(wtfiltx->LPS);
+        opj_free(wtfilty->LPS);
+        opj_free(wtfiltz->LPS);
+        opj_free(wtfiltx->HPS);
+        opj_free(wtfilty->HPS);
+        opj_free(wtfiltz->HPS);
+        opj_free(wtfiltx);
+        opj_free(wtfilty);
+        opj_free(wtfiltz);
+        /*fprintf(stdout,"[INFO] Dwtid: %d %d %d Level: %d %d %d Orient %d Norm: %f \n",dwtid[0],dwtid[1],dwtid[2],level[0],level[1],level[2],orient,norm);*/
+    }
+    return norm;
 }
-/* <summary>                                                           */
-/* Calculate explicit stepsizes for DWT.       */
-/* </summary>                                                          */
-void dwt_calc_explicit_stepsizes(opj_tccp_t * tccp, int prec) { 
-       int totnumbands, bandno, diff;
-       
-       assert(tccp->numresolution[0] >= tccp->numresolution[2]);       
-       diff = tccp->numresolution[0] - tccp->numresolution[2];         /*if RESx=RESy != RESz */
-       totnumbands = (7 * tccp->numresolution[0] - 6) - 4 * diff; /* 3-D */
-               
-       for (bandno = 0; bandno < totnumbands; bandno++) {
-               double stepsize;
-               int resno, level[3], orient, gain;
-
-               /* Bandno:      0 - LLL         1 - LHL 
-                                       2 - HLL         3 - HHL
-                                       4 - LLH         5 - LHH
-                                       6 - HLH         7 - HHH */
-
-               resno = (bandno == 0) ? 0 : ( (bandno <= 3 * diff) ? ((bandno - 1) / 3 + 1) : ((bandno + 4*diff - 1) / 7 + 1));
-               orient = (bandno == 0) ? 0 : ( (bandno <= 3 * diff) ? ((bandno - 1) % 3 + 1) : ((bandno + 4*diff - 1) % 7 + 1));
-               level[0] = tccp->numresolution[0] - 1 - resno;
-               level[1] = tccp->numresolution[1] - 1 - resno;
-               level[2] = tccp->numresolution[2] - 1 - resno;
-       
-               /* Gain:        0 - LLL         1 - LHL 
-                                       1 - HLL         2 - HHL
-                                       1 - LLH         2 - LHH
-                                       2 - HLH         3 - HHH         */
-               gain = (tccp->reversible == 0) ? 0 : ( (orient == 0) ? 0 : 
-                               ( ((orient == 1) || (orient == 2) || (orient == 4)) ? 1 : 
-                                               (((orient == 3) || (orient == 5) || (orient == 6)) ? 2 : 3)) );
-                               
-               if (tccp->qntsty == J3D_CCP_QNTSTY_NOQNT) {
-                       stepsize = 1.0;
-               } else {
-                       double norm = dwt_getnorm(orient,level,tccp->dwtid); /*Fetch norms if irreversible transform (by the moment only I9.7)*/
-                       stepsize = (1 << (gain + 1)) / norm;
-               }
-               /*fprintf(stdout,"[INFO] Bandno: %d Orient: %d Level: %d %d %d Stepsize: %f\n",bandno,orient,level[0],level[1],level[2],stepsize);*/
-               dwt_encode_stepsize((int) floor(stepsize * 8192.0), prec + gain, &tccp->stepsizes[bandno]);
-       }
+/* <summary>                                */
+/* Calculate explicit stepsizes for DWT.    */
+/* </summary>                               */
+void dwt_calc_explicit_stepsizes(opj_tccp_t * tccp, int prec)
+{
+    int totnumbands, bandno, diff;
+
+    assert(tccp->numresolution[0] >= tccp->numresolution[2]);
+    diff = tccp->numresolution[0] -
+           tccp->numresolution[2];     /*if RESx=RESy != RESz */
+    totnumbands = (7 * tccp->numresolution[0] - 6) - 4 * diff; /* 3-D */
+
+    for (bandno = 0; bandno < totnumbands; bandno++) {
+        double stepsize;
+        int resno, level[3], orient, gain;
+
+        /* Bandno:  0 - LLL     1 - LHL
+                    2 - HLL     3 - HHL
+                    4 - LLH     5 - LHH
+                    6 - HLH     7 - HHH */
+
+        resno = (bandno == 0) ? 0 : ((bandno <= 3 * diff) ? ((bandno - 1) / 3 + 1) : ((
+                                         bandno + 4 * diff - 1) / 7 + 1));
+        orient = (bandno == 0) ? 0 : ((bandno <= 3 * diff) ? ((bandno - 1) % 3 + 1) : ((
+                                          bandno + 4 * diff - 1) % 7 + 1));
+        level[0] = tccp->numresolution[0] - 1 - resno;
+        level[1] = tccp->numresolution[1] - 1 - resno;
+        level[2] = tccp->numresolution[2] - 1 - resno;
+
+        /* Gain:    0 - LLL     1 - LHL
+                    1 - HLL     2 - HHL
+                    1 - LLH     2 - LHH
+                    2 - HLH     3 - HHH     */
+        gain = (tccp->reversible == 0) ? 0 : ((orient == 0) ? 0 :
+                                              (((orient == 1) || (orient == 2) || (orient == 4)) ? 1 :
+                                               (((orient == 3) || (orient == 5) || (orient == 6)) ? 2 : 3)));
+
+        if (tccp->qntsty == J3D_CCP_QNTSTY_NOQNT) {
+            stepsize = 1.0;
+        } else {
+            double norm = dwt_getnorm(orient, level,
+                                      tccp->dwtid); /*Fetch norms if irreversible transform (by the moment only I9.7)*/
+            stepsize = (1 << (gain + 1)) / norm;
+        }
+        /*fprintf(stdout,"[INFO] Bandno: %d Orient: %d Level: %d %d %d Stepsize: %f\n",bandno,orient,level[0],level[1],level[2],stepsize);*/
+        dwt_encode_stepsize((int) floor(stepsize * 8192.0), prec + gain,
+                            &tccp->stepsizes[bandno]);
+    }
 }
 
 
index 941a28adc3650a3e11b2f21448747f9d280799c1..7b6a76725aa97573df5ed1e1030fd2b61479176f 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
 
 #ifndef _WIN32
 static char*
-i2a(unsigned i, char *a, unsigned r) {
-       if (i/r > 0) a = i2a(i/r,a,r);
-       *a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i%r];
-       return a+1;
+i2a(unsigned i, char *a, unsigned r)
+{
+    if (i / r > 0) {
+        a = i2a(i / r, a, r);
+    }
+    *a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i % r];
+    return a + 1;
 }
 
-/** 
- Transforms integer i into an ascii string and stores the result in a; 
+/**
+ Transforms integer i into an ascii string and stores the result in a;
  string is encoded in the base indicated by r.
  @param i Number to be converted
  @param a String result
@@ -52,135 +55,135 @@ i2a(unsigned i, char *a, unsigned r) {
  @return Returns a
 */
 static char *
-_itoa(int i, char *a, int r) {
-       r = ((r < 2) || (r > 36)) ? 10 : r;
-       if(i < 0) {
-               *a = '-';
-               *i2a(-i, a+1, r) = 0;
-       }
-       else *i2a(i, a, r) = 0;
-       return a;
+_itoa(int i, char *a, int r)
+{
+    r = ((r < 2) || (r > 36)) ? 10 : r;
+    if (i < 0) {
+        *a = '-';
+        *i2a(-i, a + 1, r) = 0;
+    } else {
+        *i2a(i, a, r) = 0;
+    }
+    return a;
 }
 
 #endif /* !_WIN32 */
 
 /* ----------------------------------------------------------------------- */
 
-opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo, opj_event_mgr_t *event_mgr, void *context) {
-       if(cinfo) {
-               opj_event_mgr_t *previous = cinfo->event_mgr;
-               cinfo->event_mgr = event_mgr;
-               cinfo->client_data = context;
-               return previous;
-       }
+opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo,
+        opj_event_mgr_t *event_mgr, void *context)
+{
+    if (cinfo) {
+        opj_event_mgr_t *previous = cinfo->event_mgr;
+        cinfo->event_mgr = event_mgr;
+        cinfo->client_data = context;
+        return previous;
+    }
 
-       return NULL;
+    return NULL;
 }
 
-bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...) {
+bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...)
+{
 #define MSG_SIZE 512 /* 512 bytes should be more than enough for a short message */
-       opj_msg_callback msg_handler = NULL;
+    opj_msg_callback msg_handler = NULL;
 
-       opj_event_mgr_t *event_mgr = cinfo->event_mgr;
-       if(event_mgr != NULL) {
-               switch(event_type) {
-                       case EVT_ERROR:
-                               msg_handler = event_mgr->error_handler;
-                               break;
-                       case EVT_WARNING:
-                               msg_handler = event_mgr->warning_handler;
-                               break;
-                       case EVT_INFO:
-                               msg_handler = event_mgr->info_handler;
-                               break;
-                       default:
-                               break;
-               }
-               if(msg_handler == NULL) {
-                       return false;
-               }
-       } else {
-               return false;
-       }
+    opj_event_mgr_t *event_mgr = cinfo->event_mgr;
+    if (event_mgr != NULL) {
+        switch (event_type) {
+        case EVT_ERROR:
+            msg_handler = event_mgr->error_handler;
+            break;
+        case EVT_WARNING:
+            msg_handler = event_mgr->warning_handler;
+            break;
+        case EVT_INFO:
+            msg_handler = event_mgr->info_handler;
+            break;
+        default:
+            break;
+        }
+        if (msg_handler == NULL) {
+            return false;
+        }
+    } else {
+        return false;
+    }
 
-       if ((fmt != NULL) && (event_mgr != NULL)) {
-               va_list arg;
-               int str_length, i, j;
-               char message[MSG_SIZE];
-               memset(message, 0, MSG_SIZE);
-               /* initialize the optional parameter list */
-               va_start(arg, fmt);
-               /* check the length of the format string */
-               str_length = (strlen(fmt) > MSG_SIZE) ? MSG_SIZE : strlen(fmt);
-               /* parse the format string and put the result in 'message' */
-               for (i = 0, j = 0; i < str_length; ++i) {
-                       if (fmt[i] == '%') {
-                               if (i + 1 < str_length) {
-                                       switch(tolower(fmt[i + 1])) {
-                                               case '%' :
-                                                       message[j++] = '%';
-                                                       break;
-                                               case 'o' : /* octal numbers */
-                                               {
-                                                       char tmp[16];
-                                                       _itoa(va_arg(arg, int), tmp, 8);
-                                                       strcat(message, tmp);
-                                                       j += strlen(tmp);
-                                                       ++i;
-                                                       break;
-                                               }
-                                               case 'i' : /* decimal numbers */
-                                               case 'd' :
-                                               {
-                                                       char tmp[16];
-                                                       _itoa(va_arg(arg, int), tmp, 10);
-                                                       strcat(message, tmp);
-                                                       j += strlen(tmp);
-                                                       ++i;
-                                                       break;
-                                               }
-                                               case 'x' : /* hexadecimal numbers */
-                                               {
-                                                       char tmp[16];
-                                                       _itoa(va_arg(arg, int), tmp, 16);
-                                                       strcat(message, tmp);
-                                                       j += strlen(tmp);
-                                                       ++i;
-                                                       break;
-                                               }
-                                               case 's' : /* strings */
-                                               {
-                                                       char *tmp = va_arg(arg, char*);
-                                                       strcat(message, tmp);
-                                                       j += strlen(tmp);
-                                                       ++i;
-                                                       break;
-                                               }
-                                               case 'f' :      /* floats */
-                                               {
-                                                       char tmp[16];
-                                                       double value = va_arg(arg, double);
-                                                       sprintf(tmp, "%f", value);
-                                                       strcat(message, tmp);
-                                                       j += strlen(tmp);
-                                                       ++i;
-                                                       break;
-                                               }
-                                       };
-                               } else {
-                                       message[j++] = fmt[i];
-                               }
-                       } else {
-                               message[j++] = fmt[i];
-                       };
-               }
-               /* deinitialize the optional parameter list */
-               va_end(arg);
+    if ((fmt != NULL) && (event_mgr != NULL)) {
+        va_list arg;
+        int str_length, i, j;
+        char message[MSG_SIZE];
+        memset(message, 0, MSG_SIZE);
+        /* initialize the optional parameter list */
+        va_start(arg, fmt);
+        /* check the length of the format string */
+        str_length = (strlen(fmt) > MSG_SIZE) ? MSG_SIZE : strlen(fmt);
+        /* parse the format string and put the result in 'message' */
+        for (i = 0, j = 0; i < str_length; ++i) {
+            if (fmt[i] == '%') {
+                if (i + 1 < str_length) {
+                    switch (tolower(fmt[i + 1])) {
+                    case '%' :
+                        message[j++] = '%';
+                        break;
+                    case 'o' : { /* octal numbers */
+                        char tmp[16];
+                        _itoa(va_arg(arg, int), tmp, 8);
+                        strcat(message, tmp);
+                        j += strlen(tmp);
+                        ++i;
+                        break;
+                    }
+                    case 'i' : /* decimal numbers */
+                    case 'd' : {
+                        char tmp[16];
+                        _itoa(va_arg(arg, int), tmp, 10);
+                        strcat(message, tmp);
+                        j += strlen(tmp);
+                        ++i;
+                        break;
+                    }
+                    case 'x' : { /* hexadecimal numbers */
+                        char tmp[16];
+                        _itoa(va_arg(arg, int), tmp, 16);
+                        strcat(message, tmp);
+                        j += strlen(tmp);
+                        ++i;
+                        break;
+                    }
+                    case 's' : { /* strings */
+                        char *tmp = va_arg(arg, char*);
+                        strcat(message, tmp);
+                        j += strlen(tmp);
+                        ++i;
+                        break;
+                    }
+                    case 'f' : { /* floats */
+                        char tmp[16];
+                        double value = va_arg(arg, double);
+                        sprintf(tmp, "%f", value);
+                        strcat(message, tmp);
+                        j += strlen(tmp);
+                        ++i;
+                        break;
+                    }
+                    };
+                } else {
+                    message[j++] = fmt[i];
+                }
+            } else {
+                message[j++] = fmt[i];
+            };
+        }
+        /* deinitialize the optional parameter list */
+        va_end(arg);
 
-               /* output the message to the user program */
-               msg_handler(message, cinfo->client_data);
-       }
+        /* output the message to the user program */
+        msg_handler(message, cinfo->client_data);
+    }
 
-       return true;
+    return true;
 }
 
index 9e060df741ae35e1e04a6e23d55fbce8ca17f2d2..8d9a73db5da3fb7984d324a236fb28a5ae9965c4 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -321,1662 +321,1810 @@ static void j3d_read_nlt(opj_j3d_t *j3d);
 
 /* ----------------------------------------------------------------------- */
 
-static void j3d_dump_volume(FILE *fd, opj_volume_t * vol) {
-       int compno;
-       fprintf(fd, "volume {\n");
-       fprintf(fd, "  x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d\n", vol->x0, vol->y0, vol->z0,vol->x1, vol->y1,  vol->z1);
-       fprintf(fd, "  numcomps=%d\n", vol->numcomps);
-       for (compno = 0; compno < vol->numcomps; compno++) {
-               opj_volume_comp_t *comp = &vol->comps[compno];
-               fprintf(fd, "  comp %d {\n", compno);
-               fprintf(fd, "    dx=%d, dy=%d, dz=%d\n", comp->dx, comp->dy, comp->dz);
-               fprintf(fd, "    prec=%d\n", comp->prec);
-               fprintf(fd, "    sgnd=%d\n", comp->sgnd);
-               fprintf(fd, "  }\n");
-       }
-       fprintf(fd, "}\n");
-}
-
-static void j3d_dump_cp(FILE *fd, opj_volume_t * vol, opj_cp_t * cp) {
-       int tileno, compno, layno, bandno, resno, numbands;
-       fprintf(fd, "coding parameters {\n");
-       fprintf(fd, "  tx0=%d, ty0=%d, tz0=%d\n", cp->tx0, cp->ty0, cp->tz0);
-       fprintf(fd, "  tdx=%d, tdy=%d, tdz=%d\n", cp->tdx, cp->tdy, cp->tdz);
-       fprintf(fd, "  tw=%d, th=%d, tl=%d\n", cp->tw, cp->th, cp->tl);
-       fprintf(fd, "  transform format: %d\n", cp->transform_format);
-       fprintf(fd, "  encoding format: %d\n", cp->encoding_format);
-       for (tileno = 0; tileno < cp->tw * cp->th * cp->tl; tileno++) {
-               opj_tcp_t *tcp = &cp->tcps[tileno];
-               fprintf(fd, "  tile %d {\n", tileno);
-               fprintf(fd, "    csty=%x\n", tcp->csty);
-               fprintf(fd, "    prg=%d\n", tcp->prg);
-               fprintf(fd, "    numlayers=%d\n", tcp->numlayers);
-               fprintf(fd, "    mct=%d\n", tcp->mct);
-               fprintf(fd, "    rates=");
-               for (layno = 0; layno < tcp->numlayers; layno++) {
-                       fprintf(fd, "%f ", tcp->rates[layno]);
-               }
-               fprintf(fd, "\n");
-               fprintf(fd, "    first=%d\n", tcp->first);
-               for (compno = 0; compno < vol->numcomps; compno++) {
-                       opj_tccp_t *tccp = &tcp->tccps[compno];
-                       fprintf(fd, "    comp %d {\n", compno);
-                       fprintf(fd, "      csty=%x\n", tccp->csty);
-                       fprintf(fd, "      numresx=%d, numresy=%d, numresz=%d\n", tccp->numresolution[0], tccp->numresolution[1], tccp->numresolution[2]);
-                       fprintf(fd, "      cblkw=%d, cblkh=%d, cblkl=%d\n", tccp->cblk[0], tccp->cblk[1], tccp->cblk[2]);
-                       fprintf(fd, "      cblksty=%x\n", tccp->cblksty);
-                       fprintf(fd, "      qntsty=%d\n", tccp->qntsty);
-                       fprintf(fd, "      numgbits=%d\n", tccp->numgbits);
-                       fprintf(fd, "      roishift=%d\n", tccp->roishift);
-                       fprintf(fd, "      reversible=%d\n", tccp->reversible);
-                       fprintf(fd, "      dwtidx=%d dwtidy=%d dwtidz=%d\n", tccp->dwtid[0], tccp->dwtid[1], tccp->dwtid[2]);
-                       if (tccp->atk != NULL) {
+static void j3d_dump_volume(FILE *fd, opj_volume_t * vol)
+{
+    int compno;
+    fprintf(fd, "volume {\n");
+    fprintf(fd, "  x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d\n", vol->x0, vol->y0,
+            vol->z0, vol->x1, vol->y1,  vol->z1);
+    fprintf(fd, "  numcomps=%d\n", vol->numcomps);
+    for (compno = 0; compno < vol->numcomps; compno++) {
+        opj_volume_comp_t *comp = &vol->comps[compno];
+        fprintf(fd, "  comp %d {\n", compno);
+        fprintf(fd, "    dx=%d, dy=%d, dz=%d\n", comp->dx, comp->dy, comp->dz);
+        fprintf(fd, "    prec=%d\n", comp->prec);
+        fprintf(fd, "    sgnd=%d\n", comp->sgnd);
+        fprintf(fd, "  }\n");
+    }
+    fprintf(fd, "}\n");
+}
+
+static void j3d_dump_cp(FILE *fd, opj_volume_t * vol, opj_cp_t * cp)
+{
+    int tileno, compno, layno, bandno, resno, numbands;
+    fprintf(fd, "coding parameters {\n");
+    fprintf(fd, "  tx0=%d, ty0=%d, tz0=%d\n", cp->tx0, cp->ty0, cp->tz0);
+    fprintf(fd, "  tdx=%d, tdy=%d, tdz=%d\n", cp->tdx, cp->tdy, cp->tdz);
+    fprintf(fd, "  tw=%d, th=%d, tl=%d\n", cp->tw, cp->th, cp->tl);
+    fprintf(fd, "  transform format: %d\n", cp->transform_format);
+    fprintf(fd, "  encoding format: %d\n", cp->encoding_format);
+    for (tileno = 0; tileno < cp->tw * cp->th * cp->tl; tileno++) {
+        opj_tcp_t *tcp = &cp->tcps[tileno];
+        fprintf(fd, "  tile %d {\n", tileno);
+        fprintf(fd, "    csty=%x\n", tcp->csty);
+        fprintf(fd, "    prg=%d\n", tcp->prg);
+        fprintf(fd, "    numlayers=%d\n", tcp->numlayers);
+        fprintf(fd, "    mct=%d\n", tcp->mct);
+        fprintf(fd, "    rates=");
+        for (layno = 0; layno < tcp->numlayers; layno++) {
+            fprintf(fd, "%f ", tcp->rates[layno]);
+        }
+        fprintf(fd, "\n");
+        fprintf(fd, "    first=%d\n", tcp->first);
+        for (compno = 0; compno < vol->numcomps; compno++) {
+            opj_tccp_t *tccp = &tcp->tccps[compno];
+            fprintf(fd, "    comp %d {\n", compno);
+            fprintf(fd, "      csty=%x\n", tccp->csty);
+            fprintf(fd, "      numresx=%d, numresy=%d, numresz=%d\n",
+                    tccp->numresolution[0], tccp->numresolution[1], tccp->numresolution[2]);
+            fprintf(fd, "      cblkw=%d, cblkh=%d, cblkl=%d\n", tccp->cblk[0],
+                    tccp->cblk[1], tccp->cblk[2]);
+            fprintf(fd, "      cblksty=%x\n", tccp->cblksty);
+            fprintf(fd, "      qntsty=%d\n", tccp->qntsty);
+            fprintf(fd, "      numgbits=%d\n", tccp->numgbits);
+            fprintf(fd, "      roishift=%d\n", tccp->roishift);
+            fprintf(fd, "      reversible=%d\n", tccp->reversible);
+            fprintf(fd, "      dwtidx=%d dwtidy=%d dwtidz=%d\n", tccp->dwtid[0],
+                    tccp->dwtid[1], tccp->dwtid[2]);
+            if (tccp->atk != NULL) {
                 fprintf(fd, "      atk.index=%d\n", tccp->atk->index);
-                               fprintf(fd, "      atk.coeff_typ=%d\n", tccp->atk->coeff_typ);
-                               fprintf(fd, "      atk.filt_cat=%d\n", tccp->atk->filt_cat);
-                               fprintf(fd, "      atk.exten=%d\n", tccp->atk->exten);
-                               fprintf(fd, "      atk.minit=%d\n", tccp->atk->minit);
-                               fprintf(fd, "      atk.wt_typ=%d\n", tccp->atk->wt_typ);
-                       }
-                       fprintf(fd, "      stepsizes of bands=");
+                fprintf(fd, "      atk.coeff_typ=%d\n", tccp->atk->coeff_typ);
+                fprintf(fd, "      atk.filt_cat=%d\n", tccp->atk->filt_cat);
+                fprintf(fd, "      atk.exten=%d\n", tccp->atk->exten);
+                fprintf(fd, "      atk.minit=%d\n", tccp->atk->minit);
+                fprintf(fd, "      atk.wt_typ=%d\n", tccp->atk->wt_typ);
+            }
+            fprintf(fd, "      stepsizes of bands=");
             numbands = (tccp->qntsty == J3D_CCP_QNTSTY_SIQNT) ? 1 :
-                       ( (cp->transform_format == TRF_2D_DWT) ? (tccp->numresolution[0] * 3 - 2) :
-                               (tccp->numresolution[0] * 7 - 6) - 4 *(tccp->numresolution[0] - tccp->numresolution[2]) );
-                       for (bandno = 0; bandno < numbands; bandno++) {
-                               fprintf(fd, "(%d,%d) ", tccp->stepsizes[bandno].mant,tccp->stepsizes[bandno].expn);
-                       }
-                       fprintf(fd, "\n");
-                       
-                       if (tccp->csty & J3D_CCP_CSTY_PRT) {
-                               fprintf(fd, "      prcw=");
-                               for (resno = 0; resno < tccp->numresolution[0]; resno++) {
-                                       fprintf(fd, "%d ", tccp->prctsiz[0][resno]);
-                               }
-                               fprintf(fd, "\n");
-                               fprintf(fd, "      prch=");
-                               for (resno = 0; resno < tccp->numresolution[0]; resno++) {
-                                       fprintf(fd, "%d ", tccp->prctsiz[1][resno]);
-                               }
-                               fprintf(fd, "\n");
-                               fprintf(fd, "      prcl=");
-                               for (resno = 0; resno < tccp->numresolution[0]; resno++) {
-                                       fprintf(fd, "%d ", tccp->prctsiz[2][resno]);
-                               }
-                               fprintf(fd, "\n");
-                       }
-                       fprintf(fd, "    }\n");
-               }
-               fprintf(fd, "  }\n");
-       }
-       fprintf(fd, "}\n");
-}
-
-/* ----------------------------------------------------------------------- 
+                       ((cp->transform_format == TRF_2D_DWT) ? (tccp->numresolution[0] * 3 - 2) :
+                        (tccp->numresolution[0] * 7 - 6) - 4 * (tccp->numresolution[0] -
+                                tccp->numresolution[2]));
+            for (bandno = 0; bandno < numbands; bandno++) {
+                fprintf(fd, "(%d,%d) ", tccp->stepsizes[bandno].mant,
+                        tccp->stepsizes[bandno].expn);
+            }
+            fprintf(fd, "\n");
+
+            if (tccp->csty & J3D_CCP_CSTY_PRT) {
+                fprintf(fd, "      prcw=");
+                for (resno = 0; resno < tccp->numresolution[0]; resno++) {
+                    fprintf(fd, "%d ", tccp->prctsiz[0][resno]);
+                }
+                fprintf(fd, "\n");
+                fprintf(fd, "      prch=");
+                for (resno = 0; resno < tccp->numresolution[0]; resno++) {
+                    fprintf(fd, "%d ", tccp->prctsiz[1][resno]);
+                }
+                fprintf(fd, "\n");
+                fprintf(fd, "      prcl=");
+                for (resno = 0; resno < tccp->numresolution[0]; resno++) {
+                    fprintf(fd, "%d ", tccp->prctsiz[2][resno]);
+                }
+                fprintf(fd, "\n");
+            }
+            fprintf(fd, "    }\n");
+        }
+        fprintf(fd, "  }\n");
+    }
+    fprintf(fd, "}\n");
+}
+
+/* -----------------------------------------------------------------------
 Extended capabilities
 ------------------------------------------------------------------------*/
 
-static void j3d_write_cap(opj_j3d_t *j3d){
-       int len,lenp;
+static void j3d_write_cap(opj_j3d_t *j3d)
+{
+    int len, lenp;
+
+    opj_cio_t *cio = j3d->cio;
+    cio_write(cio, J3D_MS_CAP, 2);  /* CAP */
+    lenp = cio_tell(cio);
+    cio_skip(cio, 2);
+    cio_write(cio, J3D_CAP_10, 4);
+    if (J3D_CAP_10) {
+        cio_write(cio, 0x0, 2);
+    }
+    len = cio_tell(cio) - lenp;
+    cio_seek(cio, lenp);
+    cio_write(cio, len, 2);     /* Lsiz */
+    cio_seek(cio, lenp + len);
+
+}
+static void j3d_read_cap(opj_j3d_t *j3d)
+{
+    int len, Cap;
+    opj_cio_t *cio = j3d->cio;
+    /*cio_read(cio, 2);  CAP */
+    len = cio_read(cio, 2);
+    Cap = cio_read(cio, 4);
+    if (Cap) {
+        cio_read(cio, 2);
+    }
+    assert(len == 2 + 4 + 2);
+}
+static void j3d_write_nsi(opj_j3d_t *j3d)
+{
+    int i;
+    int lenp, len;
+    int ndim = 3;
+
+    opj_cio_t *cio = j3d->cio;
+    opj_volume_t *volume = j3d->volume;
+    opj_cp_t *cp = j3d->cp;
+
+    cio_write(cio, J3D_MS_NSI, 2);  /* NSI */
+    lenp = cio_tell(cio);
+    cio_skip(cio, 2);
+    cio_write(cio, ndim, 1);    /* Ndim */
+    cio_write(cio, volume->z1, 4);  /* Zsiz */
+    cio_write(cio, volume->z0, 4);  /* Z0siz */
+    cio_write(cio, cp->tdz, 4);     /* ZTsiz */
+    cio_write(cio, cp->tz0, 4);     /* ZT0siz */
+    for (i = 0; i < volume->numcomps; i++) {
+        cio_write(cio, volume->comps[i].dz, 1); /* ZRsiz_i */
+    }
+    len = cio_tell(cio) - lenp;
+    cio_seek(cio, lenp);
+    cio_write(cio, len, 2);     /* Lsiz */
+    cio_seek(cio, lenp + len);
+}
+
+static void j3d_read_nsi(opj_j3d_t *j3d)
+{
+    int ndim;
+    int len, i;
+
+    opj_cio_t *cio = j3d->cio;
+    opj_volume_t *volume = j3d->volume;
+    opj_cp_t *cp = j3d->cp;
+
+    len = cio_read(cio, 2);         /* Lnsi */
+    ndim = cio_read(cio, 1);            /* Ndim */
+    assert(ndim == 3);
+    volume->z1 = cio_read(cio, 4);  /* Zsiz */
+    volume->z0 = cio_read(cio, 4);  /* Z0siz */
+    cp->tdz = cio_read(cio, 4);     /* ZTsiz */
+    cp->tz0 = cio_read(cio, 4);     /* ZT0siz */
+    for (i = 0; i < volume->numcomps; i++) {
+        volume->comps[i].dz = cio_read(cio, 1); /* ZRsiz_i */
+    }
 
-       opj_cio_t *cio = j3d->cio;
-       cio_write(cio, J3D_MS_CAP, 2);  /* CAP */
-       lenp = cio_tell(cio);
-       cio_skip(cio, 2);
-       cio_write(cio,J3D_CAP_10, 4); 
-  if( J3D_CAP_10 )
-    {
-    cio_write(cio, 0x0, 2); 
-    }
-       len = cio_tell(cio) - lenp;
-       cio_seek(cio, lenp);
-       cio_write(cio, len, 2);         /* Lsiz */
-       cio_seek(cio, lenp + len);
-
-}
-static void j3d_read_cap(opj_j3d_t *j3d){
-       int len, Cap;
-       opj_cio_t *cio = j3d->cio;
-       /*cio_read(cio, 2);      CAP */
-       len = cio_read(cio, 2);
-       Cap = cio_read(cio, 4);
-  if(Cap) {
-    cio_read(cio, 2);
-  }
-  assert( len == 2 + 4 + 2 );
-}
-static void j3d_write_nsi(opj_j3d_t *j3d) {
-       int i;
-       int lenp, len;
-  int ndim = 3;
-
-       opj_cio_t *cio = j3d->cio;
-       opj_volume_t *volume = j3d->volume;
-       opj_cp_t *cp = j3d->cp;
-       
-       cio_write(cio, J3D_MS_NSI, 2);  /* NSI */
-       lenp = cio_tell(cio);
-       cio_skip(cio, 2);
-       cio_write(cio, ndim, 1);        /* Ndim */
-       cio_write(cio, volume->z1, 4);  /* Zsiz */
-       cio_write(cio, volume->z0, 4);  /* Z0siz */
-       cio_write(cio, cp->tdz, 4);             /* ZTsiz */
-       cio_write(cio, cp->tz0, 4);             /* ZT0siz */
-       for (i = 0; i < volume->numcomps; i++) {
-               cio_write(cio, volume->comps[i].dz, 1); /* ZRsiz_i */
-       }
-       len = cio_tell(cio) - lenp;
-       cio_seek(cio, lenp);
-       cio_write(cio, len, 2);         /* Lsiz */
-       cio_seek(cio, lenp + len);
-}
-
-static void j3d_read_nsi(opj_j3d_t *j3d) {
-  int ndim;
-       int len, i;
-       
-       opj_cio_t *cio = j3d->cio;
-       opj_volume_t *volume = j3d->volume;
-       opj_cp_t *cp = j3d->cp;
-       
-       len = cio_read(cio, 2);                 /* Lnsi */
-       ndim = cio_read(cio, 1);                        /* Ndim */
-  assert( ndim == 3 );
-       volume->z1 = cio_read(cio, 4);  /* Zsiz */
-       volume->z0 = cio_read(cio, 4);  /* Z0siz */
-       cp->tdz = cio_read(cio, 4);             /* ZTsiz */
-       cp->tz0 = cio_read(cio, 4);             /* ZT0siz */
-       for (i = 0; i < volume->numcomps; i++) {
-               volume->comps[i].dz = cio_read(cio, 1); /* ZRsiz_i */
-       }
-       
-       /*Initialization of volume*/
-       cp->tw = int_ceildiv(volume->x1 - cp->tx0, cp->tdx);
-       cp->th = int_ceildiv(volume->y1 - cp->ty0, cp->tdy);
-       cp->tl = int_ceildiv(volume->z1 - cp->tz0, cp->tdz);
-       cp->tcps = (opj_tcp_t *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(opj_tcp_t));
-       cp->tileno = (int *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(int));
-       cp->tileno_size = 0;
-       
-       for (i = 0; i < cp->tw * cp->th * cp->tl ; i++) {
-               cp->tcps[i].POC = 0;
-               cp->tcps[i].numpocs = 0;
-               cp->tcps[i].first = 1;
-       }
-       
-       /* Initialization for PPM marker (Packets header)*/
-       cp->ppm = 0;
-       cp->ppm_data = NULL;
-       cp->ppm_data_first = NULL;
-       cp->ppm_previous = 0;
-       cp->ppm_store = 0;
-       
-       j3d->default_tcp->tccps = (opj_tccp_t *) opj_malloc(sizeof(opj_tccp_t) * volume->numcomps);
-       for (i = 0; i < cp->tw * cp->th * cp->tl ; i++) {
-               cp->tcps[i].tccps = (opj_tccp_t *) opj_malloc(sizeof(opj_tccp_t) * volume->numcomps);
-       }
-       j3d->tile_data = (unsigned char **) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(unsigned char *));
-       j3d->tile_len = (int *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(int));
-       j3d->state = J3D_STATE_MH;
-       
-}
-static void j3d_write_dco(opj_j3d_t *j3d){
-       int lenp, len, i;
-       int dcotype;    
-
-       opj_cio_t *cio = j3d->cio;
-       opj_volume_t *volume = j3d->volume;
-       opj_cp_t *cp = j3d->cp;
-       
-       dcotype = 1; /* Offsets are 16bit signed integers Table A21 15444-2 */
-       cio_write(cio, J3D_MS_DCO, 2);  /* DCO */
-       lenp = cio_tell(cio);
-       cio_skip(cio, 2);
-       cio_write(cio, dcotype, 1);     
-       if (dcotype == 0) {
-               for (i = 0; i < volume->numcomps; i++) 
-                       cio_write(cio, volume->comps[i].dcoffset, 1);   /* SPdco_i */
-       } else if (dcotype == 1) {
-               for (i = 0; i < volume->numcomps; i++){ 
-                       cio_write(cio, volume->comps[i].dcoffset, 1);   /* SPdco_i */
-                       opj_event_msg(j3d->cinfo, EVT_INFO, "dcotype %d DCO %d \n",dcotype,volume->comps[i].dcoffset);
-               }
-       }
-       len = cio_tell(cio) - lenp;
-       cio_seek(cio, lenp);
-       cio_write(cio, len, 2);         /* Ldco */
-       cio_seek(cio, lenp + len);
-
-}
-static void j3d_read_dco(opj_j3d_t *j3d){
-       int len, i;
-       int dcotype;
-
-       opj_cio_t *cio = j3d->cio;
-       opj_volume_t *volume = j3d->volume;
-       opj_cp_t *cp = j3d->cp;
-       
-       len = cio_read(cio, 2);                 /* Lsiz */
-       dcotype = cio_read(cio, 1); /*offset 8bit unsigned / 16bit signed integers*/
-       if (dcotype == 0) {
-               for (i = 0; i < volume->numcomps; i++) {
-                       volume->comps[i].dcoffset = cio_read(cio, 1);
-                       if (volume->comps[i].dcoffset > 128) 
-                               volume->comps[i].dcoffset = volume->comps[i].dcoffset - 256;
-               }
-       } else if (dcotype == 1) {
-               for (i = 0; i < volume->numcomps; i++) {
-                       volume->comps[i].dcoffset = cio_read(cio, 1);
-                       if (volume->comps[i].dcoffset > 128) 
-                               volume->comps[i].dcoffset = volume->comps[i].dcoffset - 256;
-               }
-       }
-       
-}
-static void j3d_write_atk(opj_j3d_t *j3d){
-       int lenp, len, s, k;
-
-       opj_cio_t *cio = j3d->cio;
-       opj_volume_t *volume = j3d->volume;
-       opj_atk_t *atk = j3d->cp->tcps->tccps->atk;
-       
-       cio_write(cio, J3D_MS_ATK, 2);  /* ATK */
-       lenp = cio_tell(cio);
-       cio_skip(cio, 2);                               
-       cio_write(cio, atk->index + (atk->coeff_typ << 8) + (atk->filt_cat << 11) 
-               + (atk->wt_typ << 12) + (atk->minit << 13) + (atk->exten << 14), 2);                    /* Satk */
-    if (atk->wt_typ == J3D_ATK_IRR) 
-               cio_write(cio,(unsigned int) (atk->Katk * 8192.0), 1 << atk->coeff_typ);
-       cio_write(cio, atk->Natk, 1);
-       for (s = 0; s < atk->Natk; s++){
-               if (atk->filt_cat == J3D_ATK_ARB) 
-                       cio_write(cio, atk->Oatk[s], 1);
-               if (atk->wt_typ == J3D_ATK_REV){
-                       cio_write(cio, atk->Eatk[s], 1);
-                       cio_write(cio, atk->Batk[s], 1);
-               }
-               cio_write(cio, atk->LCatk[s], 1);
-               for (k = 0; k < atk->LCatk[s]; k++)
-                       cio_write(cio,(unsigned int) (atk->Aatk[s][k] * 8192.0), 1 << atk->coeff_typ);
-       }
-       len = cio_tell(cio) - lenp;
-       cio_seek(cio, lenp);
-       cio_write(cio, len, 2);         /* Latk */
-       cio_seek(cio, lenp + len);
-}
-static void j3d_read_atk(opj_j3d_t *j3d){
-       int len, i, Satk, k;
-       
-       opj_cio_t *cio = j3d->cio;
-       opj_volume_t *volume = j3d->volume;
-       opj_cp_t *cp = j3d->cp;
-       opj_atk_t *atk = cp->tcps->tccps->atk; 
-       
-       len = cio_read(cio, 2);                 /* Latk */
-       Satk = cio_read(cio, 2); 
-       atk->index = Satk & 0x00ff;
-       atk->coeff_typ = Satk >> 8 & 0x0007;
-       atk->filt_cat = Satk >> 11 & 0x0001;
-       atk->wt_typ = Satk >> 12  & 0x0001;
-       atk->minit = Satk >> 13 & 0x0001;
-       atk->exten = Satk >> 14 & 0x0001;
-    if (atk->wt_typ == J3D_ATK_IRR) 
-               atk->Katk = ((double) cio_read(cio, 1 << atk->coeff_typ) / 8192.0);
-       atk->Natk = cio_read(cio, 1);
-       for (i = 0; i < atk->Natk; i++) {
-               if (atk->filt_cat == J3D_ATK_ARB) 
-                       atk->Oatk[i] = cio_read(cio, 1);
-               if (atk->wt_typ == J3D_ATK_REV){
-                       atk->Eatk[i] = cio_read(cio, 1);
-                       atk->Batk[i] = cio_read(cio, 1);
-               }
-               atk->LCatk[i] = cio_read(cio, 1);
-               for (k = 0; k < atk->LCatk[i]; k++)
-                       atk->Aatk[i][k] = ((double) cio_read(cio, 1 << atk->coeff_typ) / 8192.0);
-       }
-}
-static void j3d_write_cbd(opj_j3d_t *j3d){
-}
-static void j3d_read_cbd(opj_j3d_t *j3d){
-}
-static void j3d_write_mct(opj_j3d_t *j3d){
-}
-static void j3d_read_mct(opj_j3d_t *j3d){
-}
-static void j3d_write_mcc(opj_j3d_t *j3d){
-}
-static void j3d_read_mcc(opj_j3d_t *j3d){
-}
-static void j3d_write_mco(opj_j3d_t *j3d){
-}
-static void j3d_read_mco(opj_j3d_t *j3d){
-}
-static void j3d_write_nlt(opj_j3d_t *j3d){
-}
-static void j3d_read_nlt(opj_j3d_t *j3d){
-}
-/* ----------------------------------------------------------------------- 
+    /*Initialization of volume*/
+    cp->tw = int_ceildiv(volume->x1 - cp->tx0, cp->tdx);
+    cp->th = int_ceildiv(volume->y1 - cp->ty0, cp->tdy);
+    cp->tl = int_ceildiv(volume->z1 - cp->tz0, cp->tdz);
+    cp->tcps = (opj_tcp_t *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(
+                                            opj_tcp_t));
+    cp->tileno = (int *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(int));
+    cp->tileno_size = 0;
+
+    for (i = 0; i < cp->tw * cp->th * cp->tl ; i++) {
+        cp->tcps[i].POC = 0;
+        cp->tcps[i].numpocs = 0;
+        cp->tcps[i].first = 1;
+    }
+
+    /* Initialization for PPM marker (Packets header)*/
+    cp->ppm = 0;
+    cp->ppm_data = NULL;
+    cp->ppm_data_first = NULL;
+    cp->ppm_previous = 0;
+    cp->ppm_store = 0;
+
+    j3d->default_tcp->tccps = (opj_tccp_t *) opj_malloc(sizeof(
+                                  opj_tccp_t) * volume->numcomps);
+    for (i = 0; i < cp->tw * cp->th * cp->tl ; i++) {
+        cp->tcps[i].tccps = (opj_tccp_t *) opj_malloc(sizeof(opj_tccp_t) *
+                            volume->numcomps);
+    }
+    j3d->tile_data = (unsigned char **) opj_malloc(cp->tw * cp->th * cp->tl *
+                     sizeof(unsigned char *));
+    j3d->tile_len = (int *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(int));
+    j3d->state = J3D_STATE_MH;
+
+}
+static void j3d_write_dco(opj_j3d_t *j3d)
+{
+    int lenp, len, i;
+    int dcotype;
+
+    opj_cio_t *cio = j3d->cio;
+    opj_volume_t *volume = j3d->volume;
+    opj_cp_t *cp = j3d->cp;
+
+    dcotype = 1; /* Offsets are 16bit signed integers Table A21 15444-2 */
+    cio_write(cio, J3D_MS_DCO, 2);  /* DCO */
+    lenp = cio_tell(cio);
+    cio_skip(cio, 2);
+    cio_write(cio, dcotype, 1);
+    if (dcotype == 0) {
+        for (i = 0; i < volume->numcomps; i++) {
+            cio_write(cio, volume->comps[i].dcoffset, 1);    /* SPdco_i */
+        }
+    } else if (dcotype == 1) {
+        for (i = 0; i < volume->numcomps; i++) {
+            cio_write(cio, volume->comps[i].dcoffset, 1);   /* SPdco_i */
+            opj_event_msg(j3d->cinfo, EVT_INFO, "dcotype %d DCO %d \n", dcotype,
+                          volume->comps[i].dcoffset);
+        }
+    }
+    len = cio_tell(cio) - lenp;
+    cio_seek(cio, lenp);
+    cio_write(cio, len, 2);     /* Ldco */
+    cio_seek(cio, lenp + len);
+
+}
+static void j3d_read_dco(opj_j3d_t *j3d)
+{
+    int len, i;
+    int dcotype;
+
+    opj_cio_t *cio = j3d->cio;
+    opj_volume_t *volume = j3d->volume;
+    opj_cp_t *cp = j3d->cp;
+
+    len = cio_read(cio, 2);         /* Lsiz */
+    dcotype = cio_read(cio, 1); /*offset 8bit unsigned / 16bit signed integers*/
+    if (dcotype == 0) {
+        for (i = 0; i < volume->numcomps; i++) {
+            volume->comps[i].dcoffset = cio_read(cio, 1);
+            if (volume->comps[i].dcoffset > 128) {
+                volume->comps[i].dcoffset = volume->comps[i].dcoffset - 256;
+            }
+        }
+    } else if (dcotype == 1) {
+        for (i = 0; i < volume->numcomps; i++) {
+            volume->comps[i].dcoffset = cio_read(cio, 1);
+            if (volume->comps[i].dcoffset > 128) {
+                volume->comps[i].dcoffset = volume->comps[i].dcoffset - 256;
+            }
+        }
+    }
+
+}
+static void j3d_write_atk(opj_j3d_t *j3d)
+{
+    int lenp, len, s, k;
+
+    opj_cio_t *cio = j3d->cio;
+    opj_volume_t *volume = j3d->volume;
+    opj_atk_t *atk = j3d->cp->tcps->tccps->atk;
+
+    cio_write(cio, J3D_MS_ATK, 2);  /* ATK */
+    lenp = cio_tell(cio);
+    cio_skip(cio, 2);
+    cio_write(cio, atk->index + (atk->coeff_typ << 8) + (atk->filt_cat << 11)
+              + (atk->wt_typ << 12) + (atk->minit << 13) + (atk->exten << 14),
+              2);            /* Satk */
+    if (atk->wt_typ == J3D_ATK_IRR) {
+        cio_write(cio, (unsigned int)(atk->Katk * 8192.0), 1 << atk->coeff_typ);
+    }
+    cio_write(cio, atk->Natk, 1);
+    for (s = 0; s < atk->Natk; s++) {
+        if (atk->filt_cat == J3D_ATK_ARB) {
+            cio_write(cio, atk->Oatk[s], 1);
+        }
+        if (atk->wt_typ == J3D_ATK_REV) {
+            cio_write(cio, atk->Eatk[s], 1);
+            cio_write(cio, atk->Batk[s], 1);
+        }
+        cio_write(cio, atk->LCatk[s], 1);
+        for (k = 0; k < atk->LCatk[s]; k++) {
+            cio_write(cio, (unsigned int)(atk->Aatk[s][k] * 8192.0), 1 << atk->coeff_typ);
+        }
+    }
+    len = cio_tell(cio) - lenp;
+    cio_seek(cio, lenp);
+    cio_write(cio, len, 2);     /* Latk */
+    cio_seek(cio, lenp + len);
+}
+static void j3d_read_atk(opj_j3d_t *j3d)
+{
+    int len, i, Satk, k;
+
+    opj_cio_t *cio = j3d->cio;
+    opj_volume_t *volume = j3d->volume;
+    opj_cp_t *cp = j3d->cp;
+    opj_atk_t *atk = cp->tcps->tccps->atk;
+
+    len = cio_read(cio, 2);         /* Latk */
+    Satk = cio_read(cio, 2);
+    atk->index = Satk & 0x00ff;
+    atk->coeff_typ = Satk >> 8 & 0x0007;
+    atk->filt_cat = Satk >> 11 & 0x0001;
+    atk->wt_typ = Satk >> 12  & 0x0001;
+    atk->minit = Satk >> 13 & 0x0001;
+    atk->exten = Satk >> 14 & 0x0001;
+    if (atk->wt_typ == J3D_ATK_IRR) {
+        atk->Katk = ((double) cio_read(cio, 1 << atk->coeff_typ) / 8192.0);
+    }
+    atk->Natk = cio_read(cio, 1);
+    for (i = 0; i < atk->Natk; i++) {
+        if (atk->filt_cat == J3D_ATK_ARB) {
+            atk->Oatk[i] = cio_read(cio, 1);
+        }
+        if (atk->wt_typ == J3D_ATK_REV) {
+            atk->Eatk[i] = cio_read(cio, 1);
+            atk->Batk[i] = cio_read(cio, 1);
+        }
+        atk->LCatk[i] = cio_read(cio, 1);
+        for (k = 0; k < atk->LCatk[i]; k++) {
+            atk->Aatk[i][k] = ((double) cio_read(cio, 1 << atk->coeff_typ) / 8192.0);
+        }
+    }
+}
+static void j3d_write_cbd(opj_j3d_t *j3d)
+{
+}
+static void j3d_read_cbd(opj_j3d_t *j3d)
+{
+}
+static void j3d_write_mct(opj_j3d_t *j3d)
+{
+}
+static void j3d_read_mct(opj_j3d_t *j3d)
+{
+}
+static void j3d_write_mcc(opj_j3d_t *j3d)
+{
+}
+static void j3d_read_mcc(opj_j3d_t *j3d)
+{
+}
+static void j3d_write_mco(opj_j3d_t *j3d)
+{
+}
+static void j3d_read_mco(opj_j3d_t *j3d)
+{
+}
+static void j3d_write_nlt(opj_j3d_t *j3d)
+{
+}
+static void j3d_read_nlt(opj_j3d_t *j3d)
+{
+}
+/* -----------------------------------------------------------------------
 15444-1 codestream syntax
 ------------------------------------------------------------------------*/
-static void j3d_write_soc(opj_j3d_t *j3d) {
-       opj_cio_t *cio = j3d->cio;
-       cio_write(cio, J3D_MS_SOC, 2);
-}
-
-static void j3d_read_soc(opj_j3d_t *j3d) {
-       j3d->state = J3D_STATE_MHSIZ;
-}
-
-static void j3d_write_siz(opj_j3d_t *j3d) {
-       int i;
-       int lenp, len;
-       int Rsiz;
-
-       opj_cio_t *cio = j3d->cio;
-       opj_volume_t *volume = j3d->volume;
-       opj_cp_t *cp = j3d->cp;
-       
-       cio_write(cio, J3D_MS_SIZ, 2);  /* SIZ */
-       lenp = cio_tell(cio);
-       cio_skip(cio, 2);
-       /*cio_write(cio, 0, 2);*/                       /* Rsiz (capabilities of 15444-1 only) */
-       Rsiz = J3D_RSIZ_DCO | J3D_RSIZ_ATK; /** | J3D_RSIZ_MCT | J3D_RSIZ_NONLT (not implemented yet)*/
-       cio_write(cio, Rsiz, 2); /* capabilities of WDv5.2*/
-       cio_write(cio, volume->x1, 4);  /* Xsiz */
-       cio_write(cio, volume->y1, 4);  /* Ysiz */
-       cio_write(cio, volume->x0, 4);  /* X0siz */
-       cio_write(cio, volume->y0, 4);  /* Y0siz */
-       cio_write(cio, cp->tdx, 4);             /* XTsiz */
-       cio_write(cio, cp->tdy, 4);             /* YTsiz */
-       cio_write(cio, cp->tx0, 4);             /* XT0siz */
-       cio_write(cio, cp->ty0, 4);             /* YT0siz */
-       cio_write(cio, volume->numcomps, 2);    /* Csiz */
-       for (i = 0; i < volume->numcomps; i++) {
-               cio_write(cio, volume->comps[i].prec - 1 + (volume->comps[i].sgnd << 7), 1);    /* Ssiz_i */
-               cio_write(cio, volume->comps[i].dx, 1); /* XRsiz_i */
-               cio_write(cio, volume->comps[i].dy, 1); /* YRsiz_i */
-       }
-       len = cio_tell(cio) - lenp;
-       cio_seek(cio, lenp);
-       cio_write(cio, len, 2);         /* Lsiz */
-       cio_seek(cio, lenp + len);
-}
-
-static void j3d_read_siz(opj_j3d_t *j3d) {
-       int len, i;
-       
-       opj_cio_t *cio = j3d->cio;
-       opj_volume_t *volume = j3d->volume;
-       opj_cp_t *cp = j3d->cp;
-       
-       len = cio_read(cio, 2);                 /* Lsiz */
-       cp->rsiz = cio_read(cio, 2);    /* Rsiz (capabilities) */
-       volume->x1 = cio_read(cio, 4);  /* Xsiz */
-       volume->y1 = cio_read(cio, 4);  /* Ysiz */
-       volume->x0 = cio_read(cio, 4);  /* X0siz */
-       volume->y0 = cio_read(cio, 4);  /* Y0siz */
-       cp->tdx = cio_read(cio, 4);             /* XTsiz */
-       cp->tdy = cio_read(cio, 4);             /* YTsiz */
-       cp->tx0 = cio_read(cio, 4);             /* XT0siz */
-       cp->ty0 = cio_read(cio, 4);             /* YT0siz */
-       
-       volume->numcomps = cio_read(cio, 2);    /* Csiz */
-       volume->comps = (opj_volume_comp_t *) opj_malloc(volume->numcomps * sizeof(opj_volume_comp_t));
-       for (i = 0; i < volume->numcomps; i++) {
-               int tmp, j;
-               tmp = cio_read(cio, 1);         /* Ssiz_i */
-               volume->comps[i].prec = (tmp & 0x7f) + 1;
-               volume->comps[i].sgnd = tmp >> 7;
-               volume->comps[i].dx = cio_read(cio, 1); /* XRsiz_i */
-               volume->comps[i].dy = cio_read(cio, 1); /* YRsiz_i */
-               for (j = 0; j < 3; j++) {
-                       volume->comps[i].resno_decoded[j] = 0;          /* number of resolution decoded */
-                       volume->comps[i].factor[j] = 0;         /* reducing factor per component */
-               }
-       }
-
-       if (j3d->cinfo->codec_format == CODEC_J2K){
-               volume->z1 = 1;
-               volume->z0 = 0;
-               volume->numslices = 1;
-               cp->tdz = 1;
-               cp->tz0 = 0;
-               for (i = 0; i < volume->numcomps; i++) 
-                       volume->comps[i].dz = 1;
-
-               /*Initialization of volume*/
-               cp->tw = int_ceildiv(volume->x1 - cp->tx0, cp->tdx);
-               cp->th = int_ceildiv(volume->y1 - cp->ty0, cp->tdy);
-               cp->tl = int_ceildiv(volume->z1 - cp->tz0, cp->tdz);
-               cp->tcps = (opj_tcp_t *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(opj_tcp_t));
-               cp->tileno = (int *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(int));
-               cp->tileno_size = 0;
-               
-               for (i = 0; i < cp->tw * cp->th * cp->tl ; i++) {
-                       cp->tcps[i].POC = 0;
-                       cp->tcps[i].numpocs = 0;
-                       cp->tcps[i].first = 1;
-               }
-               
-               /* Initialization for PPM marker (Packets header)*/
-               cp->ppm = 0;
-               cp->ppm_data = NULL;
-               cp->ppm_data_first = NULL;
-               cp->ppm_previous = 0;
-               cp->ppm_store = 0;
-               
-               j3d->default_tcp->tccps = (opj_tccp_t *) opj_malloc(sizeof(opj_tccp_t) * volume->numcomps);
-               for (i = 0; i < cp->tw * cp->th * cp->tl ; i++) {
-                       cp->tcps[i].tccps = (opj_tccp_t *) opj_malloc(sizeof(opj_tccp_t) * volume->numcomps);
-               }
-               j3d->tile_data = (unsigned char **) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(unsigned char *));
-               j3d->tile_len = (int *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(int));
-               j3d->state = J3D_STATE_MH;
-       }
-}
-
-
-
-static void j3d_write_com(opj_j3d_t *j3d) {
-       unsigned int i;
-       int lenp, len;
-
-       opj_cio_t *cio = j3d->cio;
-
-       cio_write(cio, J3D_MS_COM, 2);
-       lenp = cio_tell(cio);
-       cio_skip(cio, 2);
-       cio_write(cio, 1, 2);
-       /*opj_event_msg(j3d->cinfo, EVT_INFO, "TRF %D ENCOD %d\n",j3d->cp->transform_format,j3d->cp->encoding_format);*/
-       if (j3d->cp->comment != NULL) {
-               char *comment = j3d->cp->comment;
-               for (i = 0; i < strlen(comment); i++) {
+static void j3d_write_soc(opj_j3d_t *j3d)
+{
+    opj_cio_t *cio = j3d->cio;
+    cio_write(cio, J3D_MS_SOC, 2);
+}
+
+static void j3d_read_soc(opj_j3d_t *j3d)
+{
+    j3d->state = J3D_STATE_MHSIZ;
+}
+
+static void j3d_write_siz(opj_j3d_t *j3d)
+{
+    int i;
+    int lenp, len;
+    int Rsiz;
+
+    opj_cio_t *cio = j3d->cio;
+    opj_volume_t *volume = j3d->volume;
+    opj_cp_t *cp = j3d->cp;
+
+    cio_write(cio, J3D_MS_SIZ, 2);  /* SIZ */
+    lenp = cio_tell(cio);
+    cio_skip(cio, 2);
+    /*cio_write(cio, 0, 2);*/           /* Rsiz (capabilities of 15444-1 only) */
+    Rsiz = J3D_RSIZ_DCO |
+           J3D_RSIZ_ATK; /** | J3D_RSIZ_MCT | J3D_RSIZ_NONLT (not implemented yet)*/
+    cio_write(cio, Rsiz, 2); /* capabilities of WDv5.2*/
+    cio_write(cio, volume->x1, 4);  /* Xsiz */
+    cio_write(cio, volume->y1, 4);  /* Ysiz */
+    cio_write(cio, volume->x0, 4);  /* X0siz */
+    cio_write(cio, volume->y0, 4);  /* Y0siz */
+    cio_write(cio, cp->tdx, 4);     /* XTsiz */
+    cio_write(cio, cp->tdy, 4);     /* YTsiz */
+    cio_write(cio, cp->tx0, 4);     /* XT0siz */
+    cio_write(cio, cp->ty0, 4);     /* YT0siz */
+    cio_write(cio, volume->numcomps, 2);    /* Csiz */
+    for (i = 0; i < volume->numcomps; i++) {
+        cio_write(cio, volume->comps[i].prec - 1 + (volume->comps[i].sgnd << 7),
+                  1);    /* Ssiz_i */
+        cio_write(cio, volume->comps[i].dx, 1); /* XRsiz_i */
+        cio_write(cio, volume->comps[i].dy, 1); /* YRsiz_i */
+    }
+    len = cio_tell(cio) - lenp;
+    cio_seek(cio, lenp);
+    cio_write(cio, len, 2);     /* Lsiz */
+    cio_seek(cio, lenp + len);
+}
+
+static void j3d_read_siz(opj_j3d_t *j3d)
+{
+    int len, i;
+
+    opj_cio_t *cio = j3d->cio;
+    opj_volume_t *volume = j3d->volume;
+    opj_cp_t *cp = j3d->cp;
+
+    len = cio_read(cio, 2);         /* Lsiz */
+    cp->rsiz = cio_read(cio, 2);    /* Rsiz (capabilities) */
+    volume->x1 = cio_read(cio, 4);  /* Xsiz */
+    volume->y1 = cio_read(cio, 4);  /* Ysiz */
+    volume->x0 = cio_read(cio, 4);  /* X0siz */
+    volume->y0 = cio_read(cio, 4);  /* Y0siz */
+    cp->tdx = cio_read(cio, 4);     /* XTsiz */
+    cp->tdy = cio_read(cio, 4);     /* YTsiz */
+    cp->tx0 = cio_read(cio, 4);     /* XT0siz */
+    cp->ty0 = cio_read(cio, 4);     /* YT0siz */
+
+    volume->numcomps = cio_read(cio, 2);    /* Csiz */
+    volume->comps = (opj_volume_comp_t *) opj_malloc(volume->numcomps * sizeof(
+                        opj_volume_comp_t));
+    for (i = 0; i < volume->numcomps; i++) {
+        int tmp, j;
+        tmp = cio_read(cio, 1);     /* Ssiz_i */
+        volume->comps[i].prec = (tmp & 0x7f) + 1;
+        volume->comps[i].sgnd = tmp >> 7;
+        volume->comps[i].dx = cio_read(cio, 1); /* XRsiz_i */
+        volume->comps[i].dy = cio_read(cio, 1); /* YRsiz_i */
+        for (j = 0; j < 3; j++) {
+            volume->comps[i].resno_decoded[j] = 0;      /* number of resolution decoded */
+            volume->comps[i].factor[j] = 0;     /* reducing factor per component */
+        }
+    }
+
+    if (j3d->cinfo->codec_format == CODEC_J2K) {
+        volume->z1 = 1;
+        volume->z0 = 0;
+        volume->numslices = 1;
+        cp->tdz = 1;
+        cp->tz0 = 0;
+        for (i = 0; i < volume->numcomps; i++) {
+            volume->comps[i].dz = 1;
+        }
+
+        /*Initialization of volume*/
+        cp->tw = int_ceildiv(volume->x1 - cp->tx0, cp->tdx);
+        cp->th = int_ceildiv(volume->y1 - cp->ty0, cp->tdy);
+        cp->tl = int_ceildiv(volume->z1 - cp->tz0, cp->tdz);
+        cp->tcps = (opj_tcp_t *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(
+                                                opj_tcp_t));
+        cp->tileno = (int *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(int));
+        cp->tileno_size = 0;
+
+        for (i = 0; i < cp->tw * cp->th * cp->tl ; i++) {
+            cp->tcps[i].POC = 0;
+            cp->tcps[i].numpocs = 0;
+            cp->tcps[i].first = 1;
+        }
+
+        /* Initialization for PPM marker (Packets header)*/
+        cp->ppm = 0;
+        cp->ppm_data = NULL;
+        cp->ppm_data_first = NULL;
+        cp->ppm_previous = 0;
+        cp->ppm_store = 0;
+
+        j3d->default_tcp->tccps = (opj_tccp_t *) opj_malloc(sizeof(
+                                      opj_tccp_t) * volume->numcomps);
+        for (i = 0; i < cp->tw * cp->th * cp->tl ; i++) {
+            cp->tcps[i].tccps = (opj_tccp_t *) opj_malloc(sizeof(opj_tccp_t) *
+                                volume->numcomps);
+        }
+        j3d->tile_data = (unsigned char **) opj_malloc(cp->tw * cp->th * cp->tl *
+                         sizeof(unsigned char *));
+        j3d->tile_len = (int *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(int));
+        j3d->state = J3D_STATE_MH;
+    }
+}
+
+
+
+static void j3d_write_com(opj_j3d_t *j3d)
+{
+    unsigned int i;
+    int lenp, len;
+
+    opj_cio_t *cio = j3d->cio;
+
+    cio_write(cio, J3D_MS_COM, 2);
+    lenp = cio_tell(cio);
+    cio_skip(cio, 2);
+    cio_write(cio, 1, 2);
+    /*opj_event_msg(j3d->cinfo, EVT_INFO, "TRF %D ENCOD %d\n",j3d->cp->transform_format,j3d->cp->encoding_format);*/
+    if (j3d->cp->comment != NULL) {
+        char *comment = j3d->cp->comment;
+        for (i = 0; i < strlen(comment); i++) {
             cio_write(cio, comment[i], 1);
-               }
-       }
-       len = cio_tell(cio) - lenp;
-       cio_seek(cio, lenp);
-       cio_write(cio, len, 2);
-       cio_seek(cio, lenp + len);
-}
-
-static void j3d_read_com(opj_j3d_t *j3d) {
-       int len;
-       opj_cio_t *cio = j3d->cio;
-
-       len = cio_read(cio, 2);
-       cio_read(cio, 2); // read registration
-       
-       /*opj_event_msg(j3d->cinfo, EVT_INFO, "TRF %D ENCOD %d\n",j3d->cp->transform_format,j3d->cp->encoding_format);*/
-
-       cio_skip(cio, len - 4);  /*posible comments*/
-}
-
-static void j3d_write_cox(opj_j3d_t *j3d, int compno) {
-       int i;
-  int shift = 2;
-
-       opj_cp_t *cp = j3d->cp;
-       opj_tcp_t *tcp = &cp->tcps[j3d->curtileno];
-       opj_tccp_t *tccp = &tcp->tccps[compno];
-       opj_cio_t *cio = j3d->cio;
-       
-       cio_write(cio, tccp->numresolution[0] - 1, 1);  /* SPcox (D) No of decomposition levels in x-axis*/
-       if (j3d->cinfo->codec_format == CODEC_J3D) {
-               cio_write(cio, tccp->numresolution[1] - 1, 1);  /* SPcox (E) No of decomposition levels in y-axis*/
-               cio_write(cio, tccp->numresolution[2] - 1, 1);  /* SPcox (F) No of decomposition levels in z-axis*/
-       }
-       if (j3d->cinfo->codec_format == CODEC_J3D) {
-    /* Table A.7 */
-    shift = 0;
-  }
-       /* (cblkw - 2) + (cblkh - 2) + (cblkl - 2) <= 18*/
-       cio_write(cio, tccp->cblk[0] - shift, 1);                               /* SPcox (G) Cblk width entre 10 y 2 (8 y 0)*/
-       cio_write(cio, tccp->cblk[1] - shift, 1);                               /* SPcox (H) Cblk height*/
-       if (j3d->cinfo->codec_format == CODEC_J3D) {
-               cio_write(cio, tccp->cblk[2] - shift, 1);                       /* SPcox (I) Cblk depth*/
-       }
-       cio_write(cio, tccp->cblksty, 1);                               /* SPcox (J) Cblk style*/
-       cio_write(cio, tccp->dwtid[0], 1);                              /* SPcox (K) WT in x-axis 15444-2 Table A10*/
-       if (j3d->cinfo->codec_format == CODEC_J3D) {
-               cio_write(cio, tccp->dwtid[1], 1);                              /* SPcox (L) WT in y-axis 15444-2 Table A10*/
-               cio_write(cio, tccp->dwtid[2], 1);                              /* SPcox (M) WT in z-axis 15444-2 Table A10*/
-       }
-       
-       if (tccp->csty & J3D_CCP_CSTY_PRT) {
-               for (i = 0; i < tccp->numresolution[0]; i++) {
-                       if (i < tccp->numresolution[2])
-                cio_write(cio, tccp->prctsiz[0][i] + (tccp->prctsiz[1][i] << 4) + (tccp->prctsiz[2][i] << 8), 2);      /* SPcox (N_i) Table A9*/
-                       else
-                               if (j3d->cinfo->codec_format == CODEC_J3D) 
-                    cio_write(cio, tccp->prctsiz[0][i] + (tccp->prctsiz[1][i] << 4), 2);       /* SPcox (N_i) Table A9*/
-                               else
-                    cio_write(cio, tccp->prctsiz[0][i] + (tccp->prctsiz[1][i] << 4), 1);       /* SPcox (N_i) Table A9*/               }
-       }
-}
-
-static void j3d_read_cox(opj_j3d_t *j3d, int compno) {
-       int i;
-  int shift = 2;
-
-       opj_cp_t *cp = j3d->cp;
-       opj_tcp_t *tcp = j3d->state == J3D_STATE_TPH ? &cp->tcps[j3d->curtileno] : j3d->default_tcp;
-       opj_tccp_t *tccp = &tcp->tccps[compno];
-       opj_cio_t *cio = j3d->cio;
-
-       tccp->numresolution[0] = cio_read(cio, 1) + 1;  /* SPcox (D) No of decomposition levels in x-axis*/
-       if (j3d->cinfo->codec_format == CODEC_J3D) {
-               tccp->numresolution[1] = cio_read(cio, 1) + 1;  /* SPcox (E) No of decomposition levels in y-axis*/
-               tccp->numresolution[2] = cio_read(cio, 1) + 1;  /* SPcox (F) No of decomposition levels in z-axis*/
-       }else if (j3d->cinfo->codec_format == CODEC_J2K) {
-               tccp->numresolution[1] = tccp->numresolution[0];        
-               tccp->numresolution[2] = 1;                                                     
-       }
-       /* check the reduce value */
-       cp->reduce[0] = int_min((tccp->numresolution[0])-1, cp->reduce[0]);
-       cp->reduce[1] = int_min((tccp->numresolution[1])-1, cp->reduce[1]);
-       cp->reduce[2] = int_min((tccp->numresolution[2])-1, cp->reduce[2]);
-       
-  if (j3d->cinfo->codec_format == CODEC_J3D) {
-    /* Table A.7 */
-    shift = 0;
-  }
-       tccp->cblk[0] = cio_read(cio, 1) + shift;       /* SPcox (G) */
-       tccp->cblk[1] = cio_read(cio, 1) + shift;       /* SPcox (H) */
-       if (j3d->cinfo->codec_format == CODEC_J3D)
-               tccp->cblk[2] = cio_read(cio, 1) + shift;       /* SPcox (I) */
-       else
-               tccp->cblk[2] = tccp->cblk[0];
-
-       tccp->cblksty = cio_read(cio, 1);       /* SPcox (J) */
-       tccp->dwtid[0] = cio_read(cio, 1);      /* SPcox (K) */
-       if (j3d->cinfo->codec_format == CODEC_J3D) {
-               tccp->dwtid[1] = cio_read(cio, 1);      /* SPcox (L) */
-               tccp->dwtid[2] = cio_read(cio, 1);      /* SPcox (M) */
-       }else{
-               tccp->dwtid[1] = tccp->dwtid[0];        /* SPcox (L) */
-               tccp->dwtid[2] = tccp->dwtid[0];        /* SPcox (M) */
-       }
-       tccp->reversible = (tccp->dwtid[0]>=1 && tccp->dwtid[1]>=1 && tccp->dwtid[2]>=1); /*TODO: only valid for irreversible 9x7 WTs*/
-       if (tccp->csty & J3D_CP_CSTY_PRT) {
-               for (i = 0; i < tccp->numresolution[0]; i++) {
-                       int tmp = cio_read(cio, 2);     /* SPcox (N_i) */
-                       tccp->prctsiz[0][i] = tmp & 0xf;
-                       tccp->prctsiz[1][i] = tmp >> 4;
-                       tccp->prctsiz[2][i] = tmp >> 8;
-               }
-       }
-}
-
-static void j3d_write_cod(opj_j3d_t *j3d) {
-       opj_cp_t *cp = NULL;
-       opj_tcp_t *tcp = NULL;
-       int lenp, len;
-
-       opj_cio_t *cio = j3d->cio;
-       
-       cio_write(cio, J3D_MS_COD, 2);  /* COD */
-       
-       lenp = cio_tell(cio);
-       cio_skip(cio, 2);
-       
-       cp = j3d->cp;
-       tcp = &cp->tcps[j3d->curtileno];
-
-       /* Scod : Table A-4*/
-       cio_write(cio, tcp->csty, 1);           /* Scod : Coding style parameters */
-       /* SGcod : Table A-5*/
-       cio_write(cio, tcp->prg, 1);            /* SGcod (A) : Progression order */
-       cio_write(cio, tcp->numlayers, 2);      /* SGcod (B) : No of layers */
-       cio_write(cio, tcp->mct, 1);            /* SGcod (C) : Multiple component transformation usage */
-       /* SPcod : Table A-6*/
-       j3d_write_cox(j3d, 0);                          
-       len = cio_tell(cio) - lenp;
-       cio_seek(cio, lenp);
-       cio_write(cio, len, 2);         /* Lcod */
-       cio_seek(cio, lenp + len);
-}
-
-static void j3d_read_cod(opj_j3d_t *j3d) {
-       int len, i, pos;
-       
-       opj_cio_t *cio = j3d->cio;
-       opj_cp_t *cp = j3d->cp;
-       opj_tcp_t *tcp = j3d->state == J3D_STATE_TPH ? &cp->tcps[j3d->curtileno] : j3d->default_tcp;
-       opj_volume_t *volume = j3d->volume;
-
-       /* Lcod */
-       len = cio_read(cio, 2);                         
-       /* Scod : Table A-4*/
-       tcp->csty = cio_read(cio, 1);           
-       /* SGcod : Table A-5*/
-       tcp->prg = (OPJ_PROG_ORDER)cio_read(cio, 1);
-       tcp->numlayers = cio_read(cio, 2);      
-       tcp->mct = cio_read(cio, 1);            
-       
-       pos = cio_tell(cio);
-       for (i = 0; i < volume->numcomps; i++) {
-               tcp->tccps[i].csty = tcp->csty & J3D_CP_CSTY_PRT;
-               cio_seek(cio, pos);
-               j3d_read_cox(j3d, i);
-       }
-}
-
-static void j3d_write_coc(opj_j3d_t *j3d, int compno) {
-       int lenp, len;
-
-       opj_cp_t *cp = j3d->cp;
-       opj_tcp_t *tcp = &cp->tcps[j3d->curtileno];
-       opj_volume_t *volume = j3d->volume;
-       opj_cio_t *cio = j3d->cio;
-       
-       cio_write(cio, J3D_MS_COC, 2);  /* COC */
-       lenp = cio_tell(cio);
-       cio_skip(cio, 2);
-       cio_write(cio, compno, volume->numcomps <= 256 ? 1 : 2);        /* Ccoc */
-       cio_write(cio, tcp->tccps[compno].csty, 1);                                     /* Scoc */
-       
-       j3d_write_cox(j3d, compno);
-       
-       len = cio_tell(cio) - lenp;
-       cio_seek(cio, lenp);
-       cio_write(cio, len, 2);                 /* Lcoc */
-       cio_seek(cio, lenp + len);
-}
-
-static void j3d_read_coc(opj_j3d_t *j3d) {
-       int len, compno;
-
-       opj_cp_t *cp = j3d->cp;
-       opj_tcp_t *tcp = j3d->state == J3D_STATE_TPH ? &cp->tcps[j3d->curtileno] : j3d->default_tcp;
-       opj_volume_t *volume = j3d->volume;
-       opj_cio_t *cio = j3d->cio;
-       
-       len = cio_read(cio, 2);         /* Lcoc */
-       compno = cio_read(cio, volume->numcomps <= 256 ? 1 : 2);        /* Ccoc */
-       tcp->tccps[compno].csty = cio_read(cio, 1);     /* Scoc */
-       j3d_read_cox(j3d, compno);
-}
-
-static void j3d_write_qcx(opj_j3d_t *j3d, int compno) {
-       int bandno, numbands;
-       int expn, mant;
-       
-       opj_cp_t *cp = j3d->cp;
-       opj_tcp_t *tcp = &cp->tcps[j3d->curtileno];
-       opj_tccp_t *tccp = &tcp->tccps[compno];
-       opj_cio_t *cio = j3d->cio;
-       
-       cio_write(cio, tccp->qntsty + (tccp->numgbits << 5), 1);        /* Sqcx : Table A28 de 15444-1*/
-       
-       numbands = 0; // compiler warning
-       if (j3d->cinfo->codec_format == CODEC_J2K)
-        numbands = tccp->qntsty == J3D_CCP_QNTSTY_SIQNT ? 1 : tccp->numresolution[0] * 3 - 2; 
-       else if (j3d->cinfo->codec_format == CODEC_J3D) {
-               int diff = tccp->numresolution[0] - tccp->numresolution[2];
-        numbands = (tccp->qntsty == J3D_CCP_QNTSTY_SIQNT) ? 1 : (tccp->numresolution[0] * 7 - 6) - 4 *diff; /* SIQNT vs. SEQNT */
-       }
-       
-       for (bandno = 0; bandno < numbands; bandno++) {
-               expn = tccp->stepsizes[bandno].expn;
-               mant = tccp->stepsizes[bandno].mant;
-               
-               if (tccp->qntsty == J3D_CCP_QNTSTY_NOQNT) {
-                       cio_write(cio, expn << 3, 1);   /* SPqcx_i */
-               } else {
-                       cio_write(cio, (expn << 11) + mant, 2); /* SPqcx_i */
-               }
-       }
-}
-
-static void j3d_read_qcx(opj_j3d_t *j3d, int compno, int len) {
-       int tmp;
-       int bandno, numbands;
-
-       opj_cp_t *cp = j3d->cp;
-       opj_tcp_t *tcp = j3d->state == J3D_STATE_TPH ? &cp->tcps[j3d->curtileno] : j3d->default_tcp;
-       opj_tccp_t *tccp = &tcp->tccps[compno];
-       opj_cio_t *cio = j3d->cio;
-
-       tmp = cio_read(cio, 1);         /* Sqcx */
-       tccp->qntsty = tmp & 0x1f;
-       tccp->numgbits = tmp >> 5;
-
-       /*Numbands = 1                          si SIQNT
-                            len - 1            si NOQNT
-                                (len - 1) / 2  si SEQNT */
-       numbands = tccp->qntsty == J3D_CCP_QNTSTY_SIQNT ? 1 : ((tccp->qntsty == J3D_CCP_QNTSTY_NOQNT) ? len - 1 : (len - 1) / 2);
-
-       for (bandno = 0; bandno < numbands; bandno++) {
-               int expn, mant;
-               if (tccp->qntsty == J3D_CCP_QNTSTY_NOQNT) {
-                       expn = cio_read(cio, 1) >> 3;   /* SPqcx_i */
-                       mant = 0;
-               } else {
-                       tmp = cio_read(cio, 2);                 /* SPqcx_i */
-                       expn = tmp >> 11;
-                       mant = tmp & 0x7ff;
-               }
-               tccp->stepsizes[bandno].expn = expn;
-               tccp->stepsizes[bandno].mant = mant;
-       }
-       
-       /* Add Antonin : if scalar_derived -> compute other stepsizes */
-       if (tccp->qntsty == J3D_CCP_QNTSTY_SIQNT) {
-               for (bandno = 1; bandno < J3D_MAXBANDS; bandno++) {
-                       int numbands = (cp->transform_format==TRF_2D_DWT) ? 3 : 7;
-                       tccp->stepsizes[bandno].expn = tccp->stepsizes[0].expn - ((bandno - 1) / numbands);
-                       tccp->stepsizes[bandno].mant = tccp->stepsizes[0].mant;
-               }
-       }
-       /* ddA */
-}
-
-static void j3d_write_qcd(opj_j3d_t *j3d) {
-       int lenp, len;
-
-       opj_cio_t *cio = j3d->cio;
-       
-       cio_write(cio, J3D_MS_QCD, 2);  /* QCD */
-       lenp = cio_tell(cio);
-       cio_skip(cio, 2);
-       j3d_write_qcx(j3d, 0);                  /* Sqcd*/
-       len = cio_tell(cio) - lenp;
-       cio_seek(cio, lenp);
-       cio_write(cio, len, 2);                 /* Lqcd */
-       cio_seek(cio, lenp + len);
-}
-
-static void j3d_read_qcd(opj_j3d_t *j3d) {
-       int len, i, pos;
-
-       opj_cio_t *cio = j3d->cio;
-       opj_volume_t *volume = j3d->volume;
-       
-       len = cio_read(cio, 2);         /* Lqcd */
-       pos = cio_tell(cio);
-       for (i = 0; i < volume->numcomps; i++) {
-               cio_seek(cio, pos);
-               j3d_read_qcx(j3d, i, len - 2);
-       }
-}
-
-static void j3d_write_qcc(opj_j3d_t *j3d, int compno) {
-       int lenp, len;
-
-       opj_cio_t *cio = j3d->cio;
-       
-       cio_write(cio, J3D_MS_QCC, 2);  /* QCC */
-       lenp = cio_tell(cio);
-       cio_skip(cio, 2);
-       cio_write(cio, compno, j3d->volume->numcomps <= 256 ? 1 : 2);   /* Cqcc */
-       j3d_write_qcx(j3d, compno);
-       len = cio_tell(cio) - lenp;
-       cio_seek(cio, lenp);
-       cio_write(cio, len, 2);                 /* Lqcc */
-       cio_seek(cio, lenp + len);
-}
-
-static void j3d_read_qcc(opj_j3d_t *j3d) {
-       int len, compno;
-       int numcomp = j3d->volume->numcomps;
-       opj_cio_t *cio = j3d->cio;
-       
-       len = cio_read(cio, 2); /* Lqcc */
-       compno = cio_read(cio, numcomp <= 256 ? 1 : 2); /* Cqcc */
-       j3d_read_qcx(j3d, compno, len - 2 - (numcomp <= 256 ? 1 : 2));
-}
-
-static void j3d_write_poc(opj_j3d_t *j3d) {
-       int len, numpchgs, i;
-
-       int numcomps = j3d->volume->numcomps;
-       
-       opj_cp_t *cp = j3d->cp;
-       opj_tcp_t *tcp = &cp->tcps[j3d->curtileno];
-       opj_tccp_t *tccp = &tcp->tccps[0];
-       opj_cio_t *cio = j3d->cio;
-
-       numpchgs = tcp->numpocs;
-       cio_write(cio, J3D_MS_POC, 2);  /* POC  */
-       len = 2 + (5 + 2 * (numcomps <= 256 ? 1 : 2)) * numpchgs;
-       cio_write(cio, len, 2);         /* Lpoc */
-       for (i = 0; i < numpchgs; i++) {
-               opj_poc_t *poc = &tcp->pocs[i];
-               cio_write(cio, poc->resno0, 1); /* RSpoc_i */
-               cio_write(cio, poc->compno0, (numcomps <= 256 ? 1 : 2));        /* CSpoc_i */
-               cio_write(cio, poc->layno1, 2); /* LYEpoc_i */
-               poc->layno1 = int_min(poc->layno1, tcp->numlayers);
-               cio_write(cio, poc->resno1, 1); /* REpoc_i */
-               poc->resno1 = int_min(poc->resno1, tccp->numresolution[0]);
-               cio_write(cio, poc->compno1, (numcomps <= 256 ? 1 : 2));        /* CEpoc_i */
-               poc->compno1 = int_min(poc->compno1, numcomps);
-               cio_write(cio, poc->prg, 1);    /* Ppoc_i */
-       }
-}
-
-static void j3d_read_poc(opj_j3d_t *j3d) {
-       int len, numpchgs, i, old_poc;
-
-       int numcomps = j3d->volume->numcomps;
-       
-       opj_cp_t *cp = j3d->cp;
-       opj_tcp_t *tcp = j3d->state == J3D_STATE_TPH ? &cp->tcps[j3d->curtileno] : j3d->default_tcp;
-       opj_tccp_t *tccp = &tcp->tccps[0];
-       opj_cio_t *cio = j3d->cio;
-       
-       old_poc = tcp->POC ? tcp->numpocs + 1 : 0;
-       tcp->POC = 1;
-       len = cio_read(cio, 2);         /* Lpoc */
-       numpchgs = (len - 2) / (5 + 2 * (numcomps <= 256 ? 1 : 2));
-       
-       for (i = old_poc; i < numpchgs + old_poc; i++) {
-               opj_poc_t *poc;
-               poc = &tcp->pocs[i];
-               poc->resno0 = cio_read(cio, 1); /* RSpoc_i */
-               poc->compno0 = cio_read(cio, numcomps <= 256 ? 1 : 2);  /* CSpoc_i */
-               poc->layno1 = int_min(cio_read(cio, 2), (unsigned int) tcp->numlayers); /* LYEpoc_i */
-               poc->resno1 = int_min(cio_read(cio, 1), (unsigned int) tccp->numresolution[0]); /* REpoc_i */
-               poc->compno1 = int_min(
-                       cio_read(cio, numcomps <= 256 ? 1 : 2), (unsigned int) numcomps);       /* CEpoc_i */
-               poc->prg = (OPJ_PROG_ORDER)cio_read(cio, 1);    /* Ppoc_i */
-       }
-       
-       tcp->numpocs = numpchgs + old_poc - 1;
-}
-
-static void j3d_read_crg(opj_j3d_t *j3d) {
-       int len, i, Xcrg_i, Ycrg_i, Zcrg_i;
-       
-       opj_cio_t *cio = j3d->cio;
-       int numcomps = j3d->volume->numcomps;
-       
-       len = cio_read(cio, 2);                 /* Lcrg */
-       for (i = 0; i < numcomps; i++) {
-               Xcrg_i = cio_read(cio, 2);      /* Xcrg_i */
-               Ycrg_i = cio_read(cio, 2);      /* Ycrg_i */
-               Zcrg_i = cio_read(cio, 2);      /* Zcrg_i */
-       }
-}
-
-static void j3d_read_tlm(opj_j3d_t *j3d) {
-       int len, Ztlm, Stlm, ST, SP, tile_tlm, i;
-       long int Ttlm_i, Ptlm_i;
-
-       opj_cio_t *cio = j3d->cio;
-       
-       len = cio_read(cio, 2);         /* Ltlm */
-       Ztlm = cio_read(cio, 1);        /* Ztlm */
-       Stlm = cio_read(cio, 1);        /* Stlm */
-       ST = ((Stlm >> 4) & 0x01) + ((Stlm >> 4) & 0x02);
-       SP = (Stlm >> 6) & 0x01;
-       tile_tlm = (len - 4) / ((SP + 1) * 2 + ST);
-       for (i = 0; i < tile_tlm; i++) {
-               Ttlm_i = cio_read(cio, ST);     /* Ttlm_i */
-               Ptlm_i = cio_read(cio, SP ? 4 : 2);     /* Ptlm_i */
-       }
-}
-
-static void j3d_read_plm(opj_j3d_t *j3d) {
-       int len, i, Zplm, Nplm, add, packet_len = 0;
-       
-       opj_cio_t *cio = j3d->cio;
-
-       len = cio_read(cio, 2);         /* Lplm */
-       Zplm = cio_read(cio, 1);        /* Zplm */
-       len -= 3;
-       while (len > 0) {
-               Nplm = cio_read(cio, 4);                /* Nplm */
-               len -= 4;
-               for (i = Nplm; i > 0; i--) {
-                       add = cio_read(cio, 1);
-                       len--;
-                       packet_len = (packet_len << 7) + add;   /* Iplm_ij */
-                       if ((add & 0x80) == 0) {
-                               /* New packet */
-                               packet_len = 0;
-                       }
-                       if (len <= 0)
-                               break;
-               }
-       }
-}
-
-static void j3d_read_plt(opj_j3d_t *j3d) {
-       int len, i, Zplt, packet_len = 0, add;
-       
-       opj_cio_t *cio = j3d->cio;
-       
-       len = cio_read(cio, 2);         /* Lplt */
-       Zplt = cio_read(cio, 1);        /* Zplt */
-       for (i = len - 3; i > 0; i--) {
-               add = cio_read(cio, 1);
-               packet_len = (packet_len << 7) + add;   /* Iplt_i */
-               if ((add & 0x80) == 0) {
-                       /* New packet */
-                       packet_len = 0;
-               }
-       }
-}
-
-static void j3d_read_ppm(opj_j3d_t *j3d) {
-       int len, Z_ppm, i, j;
-       int N_ppm;
-
-       opj_cp_t *cp = j3d->cp;
-       opj_cio_t *cio = j3d->cio;
-       
-       len = cio_read(cio, 2);
-       cp->ppm = 1;
-       
-       Z_ppm = cio_read(cio, 1);       /* Z_ppm */
-       len -= 3;
-       while (len > 0) {
-               if (cp->ppm_previous == 0) {
-                       N_ppm = cio_read(cio, 4);       /* N_ppm */
-                       len -= 4;
-               } else {
-                       N_ppm = cp->ppm_previous;
-               }
-               j = cp->ppm_store;
-               if (Z_ppm == 0) {       /* First PPM marker */
-                       cp->ppm_data = (unsigned char *) opj_malloc(N_ppm * sizeof(unsigned char));
-                       cp->ppm_data_first = cp->ppm_data;
-                       cp->ppm_len = N_ppm;
-               } else {                        /* NON-first PPM marker */
-                       cp->ppm_data = (unsigned char *) opj_realloc(cp->ppm_data, (N_ppm +     cp->ppm_store) * sizeof(unsigned char));
-                       cp->ppm_data_first = cp->ppm_data;
-                       cp->ppm_len = N_ppm + cp->ppm_store;
-               }
-               for (i = N_ppm; i > 0; i--) {   /* Read packet header */
-                       cp->ppm_data[j] = cio_read(cio, 1);
-                       j++;
-                       len--;
-                       if (len == 0)
-                               break;                  /* Case of non-finished packet header in present marker but finished in next one */
-               }
-               cp->ppm_previous = i - 1;
-               cp->ppm_store = j;
-       }
-}
-
-static void j3d_read_ppt(opj_j3d_t *j3d) {
-       int len, Z_ppt, i, j = 0;
-
-       opj_cp_t *cp = j3d->cp;
-       opj_tcp_t *tcp = cp->tcps + j3d->curtileno;
-       opj_cio_t *cio = j3d->cio;
-
-       len = cio_read(cio, 2);
-       Z_ppt = cio_read(cio, 1);
-       tcp->ppt = 1;
-       if (Z_ppt == 0) {               /* First PPT marker */
-               tcp->ppt_data = (unsigned char *) opj_malloc((len - 3) * sizeof(unsigned char));
-               tcp->ppt_data_first = tcp->ppt_data;
-               tcp->ppt_store = 0;
-               tcp->ppt_len = len - 3;
-       } else {                        /* NON-first PPT marker */
-               tcp->ppt_data = (unsigned char *) opj_realloc(tcp->ppt_data, (len - 3 + tcp->ppt_store) * sizeof(unsigned char));
-               tcp->ppt_data_first = tcp->ppt_data;
-               tcp->ppt_len = len - 3 + tcp->ppt_store;
-       }
-       j = tcp->ppt_store;
-       for (i = len - 3; i > 0; i--) {
-               tcp->ppt_data[j] = cio_read(cio, 1);
-               j++;
-       }
-       tcp->ppt_store = j;
-}
-
-static void j3d_write_sot(opj_j3d_t *j3d) {
-       int lenp, len;
-
-       opj_cio_t *cio = j3d->cio;
-
-       j3d->sot_start = cio_tell(cio);
-       cio_write(cio, J3D_MS_SOT, 2);          /* SOT */
-       lenp = cio_tell(cio);
-       cio_skip(cio, 2);                                       /* Lsot (further) */
-       cio_write(cio, j3d->curtileno, 2);      /* Isot */
-       cio_skip(cio, 4);                                       /* Psot (further in j3d_write_sod) */
-       cio_write(cio, 0, 1);                           /* TPsot */
-       cio_write(cio, 1, 1);                           /* TNsot (no of tile-parts of this tile in this codestream)*/
-       len = cio_tell(cio) - lenp;
-       cio_seek(cio, lenp);
-       cio_write(cio, len, 2);                         /* Lsot */
-       cio_seek(cio, lenp + len);
-}
-
-static void j3d_read_sot(opj_j3d_t *j3d) {
-       int len, tileno, totlen, partno, numparts, i;
-       opj_tcp_t *tcp = NULL;
-       char status = 0;
-
-       opj_cp_t *cp = j3d->cp;
-       opj_cio_t *cio = j3d->cio;
-       
-       len = cio_read(cio, 2);
-       tileno = cio_read(cio, 2);
-       
-       if (cp->tileno_size == 0) {
-               cp->tileno[cp->tileno_size] = tileno;
-               cp->tileno_size++;
-       } else {
-               i = 0;
-               while (i < cp->tileno_size && status == 0) {
-                       status = cp->tileno[i] == tileno ? 1 : 0;
-                       i++;
-               }
-               if (status == 0) {
-                       cp->tileno[cp->tileno_size] = tileno;
-                       cp->tileno_size++;
-               }
-       }
-       
-       totlen = cio_read(cio, 4);
-       if (!totlen)
-               totlen = cio_numbytesleft(cio) + 8;
-       
-       partno = cio_read(cio, 1);
-       numparts = cio_read(cio, 1);
-       
-       j3d->curtileno = tileno;
-       j3d->eot = cio_getbp(cio) - 12 + totlen;
-       j3d->state = J3D_STATE_TPH;
-       tcp = &cp->tcps[j3d->curtileno];
-       
-       if (tcp->first == 1) {
-               
-               /* Initialization PPT */
-               opj_tccp_t *tmp = tcp->tccps;
-               memcpy(tcp, j3d->default_tcp, sizeof(opj_tcp_t));
-               tcp->ppt = 0;
-               tcp->ppt_data = NULL;
-               tcp->ppt_data_first = NULL;
-               tcp->tccps = tmp;
-
-               for (i = 0; i < j3d->volume->numcomps; i++) {
-                       tcp->tccps[i] = j3d->default_tcp->tccps[i];
-               }
-               cp->tcps[j3d->curtileno].first = 0;
-       }
-}
-
-static void j3d_write_sod(opj_j3d_t *j3d, void *tile_coder) {
-       int l, layno;
-       int totlen;
-       opj_tcp_t *tcp = NULL;
-       opj_volume_info_t *volume_info = NULL;
-       
-       opj_tcd_t *tcd = (opj_tcd_t*)tile_coder;        /* cast is needed because of conflicts in header inclusions */
-       opj_cp_t *cp = j3d->cp;
-       opj_cio_t *cio = j3d->cio;
-       
-       cio_write(cio, J3D_MS_SOD, 2);
-       if (j3d->curtileno == 0) {
-               j3d->sod_start = cio_tell(cio) + j3d->pos_correction;
-       }
-       
-       /* INDEX >> */
-       volume_info = j3d->volume_info;
-       if (volume_info && volume_info->index_on) {
-               volume_info->tile[j3d->curtileno].end_header = cio_tell(cio) + j3d->pos_correction - 1;
-       }
-       /* << INDEX */
-       
-       tcp = &cp->tcps[j3d->curtileno];
-       for (layno = 0; layno < tcp->numlayers; layno++) {
-               tcp->rates[layno] -= tcp->rates[layno] ? (j3d->sod_start / (cp->th * cp->tw * cp->tl)) : 0;
-       }
-       
-       if(volume_info) {
-               volume_info->num = 0;
-       }
-
-       l = tcd_encode_tile(tcd, j3d->curtileno, cio_getbp(cio), cio_numbytesleft(cio) - 2, volume_info);
-       
-       /* Writing Psot in SOT marker */
-       totlen = cio_tell(cio) + l - j3d->sot_start;
-       cio_seek(cio, j3d->sot_start + 6);
-       cio_write(cio, totlen, 4);
-       cio_seek(cio, j3d->sot_start + totlen);
-}
-
-static void j3d_read_sod(opj_j3d_t *j3d) {
-       int len, truncate = 0, i;
-       unsigned char *data = NULL, *data_ptr = NULL;
-
-       opj_cio_t *cio = j3d->cio;
-       int curtileno = j3d->curtileno;
-       
-       len = int_min(j3d->eot - cio_getbp(cio), cio_numbytesleft(cio) + 1);
-       
-       if (len == cio_numbytesleft(cio) + 1) {
-               truncate = 1;           /* Case of a truncate codestream */
-       }
-       
-       data = (unsigned char *) opj_malloc((j3d->tile_len[curtileno] + len) * sizeof(unsigned char));
-
-       for (i = 0; i < j3d->tile_len[curtileno]; i++) {
-               data[i] = j3d->tile_data[curtileno][i];
-       }
-
-       data_ptr = data + j3d->tile_len[curtileno];
-       for (i = 0; i < len; i++) {
-               data_ptr[i] = cio_read(cio, 1);
-       }
-       
-       j3d->tile_len[curtileno] += len;
-       opj_free(j3d->tile_data[curtileno]);
-       j3d->tile_data[curtileno] = data;
-       
-       if (!truncate) {
-               j3d->state = J3D_STATE_TPHSOT;
-       } else {
-               j3d->state = J3D_STATE_NEOC;    /* RAJOUTE !! */
-       }
-}
-
-static void j3d_write_rgn(opj_j3d_t *j3d, int compno, int tileno) {
-       
-       opj_cp_t *cp = j3d->cp;
-       opj_tcp_t *tcp = &cp->tcps[tileno];
-       opj_cio_t *cio = j3d->cio;
-       int numcomps = j3d->volume->numcomps;
-       
-       cio_write(cio, J3D_MS_RGN, 2);                                          /* RGN  */
-       cio_write(cio, numcomps <= 256 ? 5 : 6, 2);                     /* Lrgn */
-       cio_write(cio, compno, numcomps <= 256 ? 1 : 2);        /* Crgn */
-       cio_write(cio, 0, 1);                                                           /* Srgn */
-       cio_write(cio, tcp->tccps[compno].roishift, 1);         /* SPrgn */
-}
-
-static void j3d_read_rgn(opj_j3d_t *j3d) {
-       int len, compno, roisty;
-
-       opj_cp_t *cp = j3d->cp;
-       opj_tcp_t *tcp = j3d->state == J3D_STATE_TPH ? &cp->tcps[j3d->curtileno] : j3d->default_tcp;
-       opj_cio_t *cio = j3d->cio;
-       int numcomps = j3d->volume->numcomps;
-
-       len = cio_read(cio, 2);                                                                         /* Lrgn */
-       compno = cio_read(cio, numcomps <= 256 ? 1 : 2);                        /* Crgn */
-       roisty = cio_read(cio, 1);                                                                      /* Srgn */
-       tcp->tccps[compno].roishift = cio_read(cio, 1);                         /* SPrgn */
-}
-
-static void j3d_write_eoc(opj_j3d_t *j3d) {
-       opj_cio_t *cio = j3d->cio;
-       /* opj_event_msg(j3d->cinfo, "%.8x: EOC\n", cio_tell(cio) + j3d->pos_correction); */
-       cio_write(cio, J3D_MS_EOC, 2);
-}
-
-static void j3d_read_eoc(opj_j3d_t *j3d) {
-       int i, tileno;
-
-#ifndef NO_PACKETS_DECODING  
-       opj_tcd_t *tcd = tcd_create(j3d->cinfo);
+        }
+    }
+    len = cio_tell(cio) - lenp;
+    cio_seek(cio, lenp);
+    cio_write(cio, len, 2);
+    cio_seek(cio, lenp + len);
+}
+
+static void j3d_read_com(opj_j3d_t *j3d)
+{
+    int len;
+    opj_cio_t *cio = j3d->cio;
+
+    len = cio_read(cio, 2);
+    cio_read(cio, 2); // read registration
+
+    /*opj_event_msg(j3d->cinfo, EVT_INFO, "TRF %D ENCOD %d\n",j3d->cp->transform_format,j3d->cp->encoding_format);*/
+
+    cio_skip(cio, len - 4);  /*posible comments*/
+}
+
+static void j3d_write_cox(opj_j3d_t *j3d, int compno)
+{
+    int i;
+    int shift = 2;
+
+    opj_cp_t *cp = j3d->cp;
+    opj_tcp_t *tcp = &cp->tcps[j3d->curtileno];
+    opj_tccp_t *tccp = &tcp->tccps[compno];
+    opj_cio_t *cio = j3d->cio;
+
+    cio_write(cio, tccp->numresolution[0] - 1,
+              1);  /* SPcox (D) No of decomposition levels in x-axis*/
+    if (j3d->cinfo->codec_format == CODEC_J3D) {
+        cio_write(cio, tccp->numresolution[1] - 1,
+                  1);  /* SPcox (E) No of decomposition levels in y-axis*/
+        cio_write(cio, tccp->numresolution[2] - 1,
+                  1);  /* SPcox (F) No of decomposition levels in z-axis*/
+    }
+    if (j3d->cinfo->codec_format == CODEC_J3D) {
+        /* Table A.7 */
+        shift = 0;
+    }
+    /* (cblkw - 2) + (cblkh - 2) + (cblkl - 2) <= 18*/
+    cio_write(cio, tccp->cblk[0] - shift,
+              1);               /* SPcox (G) Cblk width entre 10 y 2 (8 y 0)*/
+    cio_write(cio, tccp->cblk[1] - shift,
+              1);               /* SPcox (H) Cblk height*/
+    if (j3d->cinfo->codec_format == CODEC_J3D) {
+        cio_write(cio, tccp->cblk[2] - shift, 1);           /* SPcox (I) Cblk depth*/
+    }
+    cio_write(cio, tccp->cblksty, 1);               /* SPcox (J) Cblk style*/
+    cio_write(cio, tccp->dwtid[0],
+              1);              /* SPcox (K) WT in x-axis 15444-2 Table A10*/
+    if (j3d->cinfo->codec_format == CODEC_J3D) {
+        cio_write(cio, tccp->dwtid[1],
+                  1);              /* SPcox (L) WT in y-axis 15444-2 Table A10*/
+        cio_write(cio, tccp->dwtid[2],
+                  1);              /* SPcox (M) WT in z-axis 15444-2 Table A10*/
+    }
+
+    if (tccp->csty & J3D_CCP_CSTY_PRT) {
+        for (i = 0; i < tccp->numresolution[0]; i++) {
+            if (i < tccp->numresolution[2]) {
+                cio_write(cio, tccp->prctsiz[0][i] + (tccp->prctsiz[1][i] << 4) +
+                          (tccp->prctsiz[2][i] << 8), 2);    /* SPcox (N_i) Table A9*/
+            } else if (j3d->cinfo->codec_format == CODEC_J3D) {
+                cio_write(cio, tccp->prctsiz[0][i] + (tccp->prctsiz[1][i] << 4),
+                          2);    /* SPcox (N_i) Table A9*/
+            } else {
+                cio_write(cio, tccp->prctsiz[0][i] + (tccp->prctsiz[1][i] << 4), 1);
+            }    /* SPcox (N_i) Table A9*/
+        }
+    }
+}
+
+static void j3d_read_cox(opj_j3d_t *j3d, int compno)
+{
+    int i;
+    int shift = 2;
+
+    opj_cp_t *cp = j3d->cp;
+    opj_tcp_t *tcp = j3d->state == J3D_STATE_TPH ? &cp->tcps[j3d->curtileno] :
+                     j3d->default_tcp;
+    opj_tccp_t *tccp = &tcp->tccps[compno];
+    opj_cio_t *cio = j3d->cio;
+
+    tccp->numresolution[0] = cio_read(cio,
+                                      1) + 1;  /* SPcox (D) No of decomposition levels in x-axis*/
+    if (j3d->cinfo->codec_format == CODEC_J3D) {
+        tccp->numresolution[1] = cio_read(cio,
+                                          1) + 1;  /* SPcox (E) No of decomposition levels in y-axis*/
+        tccp->numresolution[2] = cio_read(cio,
+                                          1) + 1;  /* SPcox (F) No of decomposition levels in z-axis*/
+    } else if (j3d->cinfo->codec_format == CODEC_J2K) {
+        tccp->numresolution[1] = tccp->numresolution[0];
+        tccp->numresolution[2] = 1;
+    }
+    /* check the reduce value */
+    cp->reduce[0] = int_min((tccp->numresolution[0]) - 1, cp->reduce[0]);
+    cp->reduce[1] = int_min((tccp->numresolution[1]) - 1, cp->reduce[1]);
+    cp->reduce[2] = int_min((tccp->numresolution[2]) - 1, cp->reduce[2]);
+
+    if (j3d->cinfo->codec_format == CODEC_J3D) {
+        /* Table A.7 */
+        shift = 0;
+    }
+    tccp->cblk[0] = cio_read(cio, 1) + shift;   /* SPcox (G) */
+    tccp->cblk[1] = cio_read(cio, 1) + shift;   /* SPcox (H) */
+    if (j3d->cinfo->codec_format == CODEC_J3D) {
+        tccp->cblk[2] = cio_read(cio, 1) + shift;    /* SPcox (I) */
+    } else {
+        tccp->cblk[2] = tccp->cblk[0];
+    }
+
+    tccp->cblksty = cio_read(cio, 1);   /* SPcox (J) */
+    tccp->dwtid[0] = cio_read(cio, 1);  /* SPcox (K) */
+    if (j3d->cinfo->codec_format == CODEC_J3D) {
+        tccp->dwtid[1] = cio_read(cio, 1);  /* SPcox (L) */
+        tccp->dwtid[2] = cio_read(cio, 1);  /* SPcox (M) */
+    } else {
+        tccp->dwtid[1] = tccp->dwtid[0];    /* SPcox (L) */
+        tccp->dwtid[2] = tccp->dwtid[0];    /* SPcox (M) */
+    }
+    tccp->reversible = (tccp->dwtid[0] >= 1 && tccp->dwtid[1] >= 1 &&
+                        tccp->dwtid[2] >= 1); /*TODO: only valid for irreversible 9x7 WTs*/
+    if (tccp->csty & J3D_CP_CSTY_PRT) {
+        for (i = 0; i < tccp->numresolution[0]; i++) {
+            int tmp = cio_read(cio, 2); /* SPcox (N_i) */
+            tccp->prctsiz[0][i] = tmp & 0xf;
+            tccp->prctsiz[1][i] = tmp >> 4;
+            tccp->prctsiz[2][i] = tmp >> 8;
+        }
+    }
+}
+
+static void j3d_write_cod(opj_j3d_t *j3d)
+{
+    opj_cp_t *cp = NULL;
+    opj_tcp_t *tcp = NULL;
+    int lenp, len;
+
+    opj_cio_t *cio = j3d->cio;
+
+    cio_write(cio, J3D_MS_COD, 2);  /* COD */
+
+    lenp = cio_tell(cio);
+    cio_skip(cio, 2);
+
+    cp = j3d->cp;
+    tcp = &cp->tcps[j3d->curtileno];
+
+    /* Scod : Table A-4*/
+    cio_write(cio, tcp->csty, 1);       /* Scod : Coding style parameters */
+    /* SGcod : Table A-5*/
+    cio_write(cio, tcp->prg, 1);        /* SGcod (A) : Progression order */
+    cio_write(cio, tcp->numlayers, 2);  /* SGcod (B) : No of layers */
+    cio_write(cio, tcp->mct,
+              1);        /* SGcod (C) : Multiple component transformation usage */
+    /* SPcod : Table A-6*/
+    j3d_write_cox(j3d, 0);
+    len = cio_tell(cio) - lenp;
+    cio_seek(cio, lenp);
+    cio_write(cio, len, 2);     /* Lcod */
+    cio_seek(cio, lenp + len);
+}
+
+static void j3d_read_cod(opj_j3d_t *j3d)
+{
+    int len, i, pos;
+
+    opj_cio_t *cio = j3d->cio;
+    opj_cp_t *cp = j3d->cp;
+    opj_tcp_t *tcp = j3d->state == J3D_STATE_TPH ? &cp->tcps[j3d->curtileno] :
+                     j3d->default_tcp;
+    opj_volume_t *volume = j3d->volume;
+
+    /* Lcod */
+    len = cio_read(cio, 2);
+    /* Scod : Table A-4*/
+    tcp->csty = cio_read(cio, 1);
+    /* SGcod : Table A-5*/
+    tcp->prg = (OPJ_PROG_ORDER)cio_read(cio, 1);
+    tcp->numlayers = cio_read(cio, 2);
+    tcp->mct = cio_read(cio, 1);
+
+    pos = cio_tell(cio);
+    for (i = 0; i < volume->numcomps; i++) {
+        tcp->tccps[i].csty = tcp->csty & J3D_CP_CSTY_PRT;
+        cio_seek(cio, pos);
+        j3d_read_cox(j3d, i);
+    }
+}
+
+static void j3d_write_coc(opj_j3d_t *j3d, int compno)
+{
+    int lenp, len;
+
+    opj_cp_t *cp = j3d->cp;
+    opj_tcp_t *tcp = &cp->tcps[j3d->curtileno];
+    opj_volume_t *volume = j3d->volume;
+    opj_cio_t *cio = j3d->cio;
+
+    cio_write(cio, J3D_MS_COC, 2);  /* COC */
+    lenp = cio_tell(cio);
+    cio_skip(cio, 2);
+    cio_write(cio, compno, volume->numcomps <= 256 ? 1 : 2);    /* Ccoc */
+    cio_write(cio, tcp->tccps[compno].csty, 1);                 /* Scoc */
+
+    j3d_write_cox(j3d, compno);
+
+    len = cio_tell(cio) - lenp;
+    cio_seek(cio, lenp);
+    cio_write(cio, len, 2);         /* Lcoc */
+    cio_seek(cio, lenp + len);
+}
+
+static void j3d_read_coc(opj_j3d_t *j3d)
+{
+    int len, compno;
+
+    opj_cp_t *cp = j3d->cp;
+    opj_tcp_t *tcp = j3d->state == J3D_STATE_TPH ? &cp->tcps[j3d->curtileno] :
+                     j3d->default_tcp;
+    opj_volume_t *volume = j3d->volume;
+    opj_cio_t *cio = j3d->cio;
+
+    len = cio_read(cio, 2);     /* Lcoc */
+    compno = cio_read(cio, volume->numcomps <= 256 ? 1 : 2);    /* Ccoc */
+    tcp->tccps[compno].csty = cio_read(cio, 1); /* Scoc */
+    j3d_read_cox(j3d, compno);
+}
+
+static void j3d_write_qcx(opj_j3d_t *j3d, int compno)
+{
+    int bandno, numbands;
+    int expn, mant;
+
+    opj_cp_t *cp = j3d->cp;
+    opj_tcp_t *tcp = &cp->tcps[j3d->curtileno];
+    opj_tccp_t *tccp = &tcp->tccps[compno];
+    opj_cio_t *cio = j3d->cio;
+
+    cio_write(cio, tccp->qntsty + (tccp->numgbits << 5),
+              1);    /* Sqcx : Table A28 de 15444-1*/
+
+    numbands = 0; // compiler warning
+    if (j3d->cinfo->codec_format == CODEC_J2K) {
+        numbands = tccp->qntsty == J3D_CCP_QNTSTY_SIQNT ? 1 : tccp->numresolution[0] * 3
+                   - 2;
+    } else if (j3d->cinfo->codec_format == CODEC_J3D) {
+        int diff = tccp->numresolution[0] - tccp->numresolution[2];
+        numbands = (tccp->qntsty == J3D_CCP_QNTSTY_SIQNT) ? 1 :
+                   (tccp->numresolution[0] * 7 - 6) - 4 * diff; /* SIQNT vs. SEQNT */
+    }
+
+    for (bandno = 0; bandno < numbands; bandno++) {
+        expn = tccp->stepsizes[bandno].expn;
+        mant = tccp->stepsizes[bandno].mant;
+
+        if (tccp->qntsty == J3D_CCP_QNTSTY_NOQNT) {
+            cio_write(cio, expn << 3, 1);   /* SPqcx_i */
+        } else {
+            cio_write(cio, (expn << 11) + mant, 2); /* SPqcx_i */
+        }
+    }
+}
+
+static void j3d_read_qcx(opj_j3d_t *j3d, int compno, int len)
+{
+    int tmp;
+    int bandno, numbands;
+
+    opj_cp_t *cp = j3d->cp;
+    opj_tcp_t *tcp = j3d->state == J3D_STATE_TPH ? &cp->tcps[j3d->curtileno] :
+                     j3d->default_tcp;
+    opj_tccp_t *tccp = &tcp->tccps[compno];
+    opj_cio_t *cio = j3d->cio;
+
+    tmp = cio_read(cio, 1);     /* Sqcx */
+    tccp->qntsty = tmp & 0x1f;
+    tccp->numgbits = tmp >> 5;
+
+    /*Numbands = 1              si SIQNT
+                 len - 1        si NOQNT
+                 (len - 1) / 2  si SEQNT */
+    numbands = tccp->qntsty == J3D_CCP_QNTSTY_SIQNT ? 1 : ((
+                   tccp->qntsty == J3D_CCP_QNTSTY_NOQNT) ? len - 1 : (len - 1) / 2);
+
+    for (bandno = 0; bandno < numbands; bandno++) {
+        int expn, mant;
+        if (tccp->qntsty == J3D_CCP_QNTSTY_NOQNT) {
+            expn = cio_read(cio, 1) >> 3;   /* SPqcx_i */
+            mant = 0;
+        } else {
+            tmp = cio_read(cio, 2);         /* SPqcx_i */
+            expn = tmp >> 11;
+            mant = tmp & 0x7ff;
+        }
+        tccp->stepsizes[bandno].expn = expn;
+        tccp->stepsizes[bandno].mant = mant;
+    }
+
+    /* Add Antonin : if scalar_derived -> compute other stepsizes */
+    if (tccp->qntsty == J3D_CCP_QNTSTY_SIQNT) {
+        for (bandno = 1; bandno < J3D_MAXBANDS; bandno++) {
+            int numbands = (cp->transform_format == TRF_2D_DWT) ? 3 : 7;
+            tccp->stepsizes[bandno].expn = tccp->stepsizes[0].expn - ((
+                                               bandno - 1) / numbands);
+            tccp->stepsizes[bandno].mant = tccp->stepsizes[0].mant;
+        }
+    }
+    /* ddA */
+}
+
+static void j3d_write_qcd(opj_j3d_t *j3d)
+{
+    int lenp, len;
+
+    opj_cio_t *cio = j3d->cio;
+
+    cio_write(cio, J3D_MS_QCD, 2);  /* QCD */
+    lenp = cio_tell(cio);
+    cio_skip(cio, 2);
+    j3d_write_qcx(j3d, 0);          /* Sqcd*/
+    len = cio_tell(cio) - lenp;
+    cio_seek(cio, lenp);
+    cio_write(cio, len, 2);         /* Lqcd */
+    cio_seek(cio, lenp + len);
+}
+
+static void j3d_read_qcd(opj_j3d_t *j3d)
+{
+    int len, i, pos;
+
+    opj_cio_t *cio = j3d->cio;
+    opj_volume_t *volume = j3d->volume;
+
+    len = cio_read(cio, 2);     /* Lqcd */
+    pos = cio_tell(cio);
+    for (i = 0; i < volume->numcomps; i++) {
+        cio_seek(cio, pos);
+        j3d_read_qcx(j3d, i, len - 2);
+    }
+}
+
+static void j3d_write_qcc(opj_j3d_t *j3d, int compno)
+{
+    int lenp, len;
+
+    opj_cio_t *cio = j3d->cio;
+
+    cio_write(cio, J3D_MS_QCC, 2);  /* QCC */
+    lenp = cio_tell(cio);
+    cio_skip(cio, 2);
+    cio_write(cio, compno, j3d->volume->numcomps <= 256 ? 1 : 2);   /* Cqcc */
+    j3d_write_qcx(j3d, compno);
+    len = cio_tell(cio) - lenp;
+    cio_seek(cio, lenp);
+    cio_write(cio, len, 2);         /* Lqcc */
+    cio_seek(cio, lenp + len);
+}
+
+static void j3d_read_qcc(opj_j3d_t *j3d)
+{
+    int len, compno;
+    int numcomp = j3d->volume->numcomps;
+    opj_cio_t *cio = j3d->cio;
+
+    len = cio_read(cio, 2); /* Lqcc */
+    compno = cio_read(cio, numcomp <= 256 ? 1 : 2); /* Cqcc */
+    j3d_read_qcx(j3d, compno, len - 2 - (numcomp <= 256 ? 1 : 2));
+}
+
+static void j3d_write_poc(opj_j3d_t *j3d)
+{
+    int len, numpchgs, i;
+
+    int numcomps = j3d->volume->numcomps;
+
+    opj_cp_t *cp = j3d->cp;
+    opj_tcp_t *tcp = &cp->tcps[j3d->curtileno];
+    opj_tccp_t *tccp = &tcp->tccps[0];
+    opj_cio_t *cio = j3d->cio;
+
+    numpchgs = tcp->numpocs;
+    cio_write(cio, J3D_MS_POC, 2);  /* POC  */
+    len = 2 + (5 + 2 * (numcomps <= 256 ? 1 : 2)) * numpchgs;
+    cio_write(cio, len, 2);     /* Lpoc */
+    for (i = 0; i < numpchgs; i++) {
+        opj_poc_t *poc = &tcp->pocs[i];
+        cio_write(cio, poc->resno0, 1); /* RSpoc_i */
+        cio_write(cio, poc->compno0, (numcomps <= 256 ? 1 : 2));    /* CSpoc_i */
+        cio_write(cio, poc->layno1, 2); /* LYEpoc_i */
+        poc->layno1 = int_min(poc->layno1, tcp->numlayers);
+        cio_write(cio, poc->resno1, 1); /* REpoc_i */
+        poc->resno1 = int_min(poc->resno1, tccp->numresolution[0]);
+        cio_write(cio, poc->compno1, (numcomps <= 256 ? 1 : 2));    /* CEpoc_i */
+        poc->compno1 = int_min(poc->compno1, numcomps);
+        cio_write(cio, poc->prg, 1);    /* Ppoc_i */
+    }
+}
+
+static void j3d_read_poc(opj_j3d_t *j3d)
+{
+    int len, numpchgs, i, old_poc;
+
+    int numcomps = j3d->volume->numcomps;
+
+    opj_cp_t *cp = j3d->cp;
+    opj_tcp_t *tcp = j3d->state == J3D_STATE_TPH ? &cp->tcps[j3d->curtileno] :
+                     j3d->default_tcp;
+    opj_tccp_t *tccp = &tcp->tccps[0];
+    opj_cio_t *cio = j3d->cio;
+
+    old_poc = tcp->POC ? tcp->numpocs + 1 : 0;
+    tcp->POC = 1;
+    len = cio_read(cio, 2);     /* Lpoc */
+    numpchgs = (len - 2) / (5 + 2 * (numcomps <= 256 ? 1 : 2));
+
+    for (i = old_poc; i < numpchgs + old_poc; i++) {
+        opj_poc_t *poc;
+        poc = &tcp->pocs[i];
+        poc->resno0 = cio_read(cio, 1); /* RSpoc_i */
+        poc->compno0 = cio_read(cio, numcomps <= 256 ? 1 : 2);  /* CSpoc_i */
+        poc->layno1 = int_min(cio_read(cio, 2),
+                              (unsigned int) tcp->numlayers); /* LYEpoc_i */
+        poc->resno1 = int_min(cio_read(cio, 1),
+                              (unsigned int) tccp->numresolution[0]); /* REpoc_i */
+        poc->compno1 = int_min(
+                           cio_read(cio, numcomps <= 256 ? 1 : 2),
+                           (unsigned int) numcomps);   /* CEpoc_i */
+        poc->prg = (OPJ_PROG_ORDER)cio_read(cio, 1);    /* Ppoc_i */
+    }
+
+    tcp->numpocs = numpchgs + old_poc - 1;
+}
+
+static void j3d_read_crg(opj_j3d_t *j3d)
+{
+    int len, i, Xcrg_i, Ycrg_i, Zcrg_i;
+
+    opj_cio_t *cio = j3d->cio;
+    int numcomps = j3d->volume->numcomps;
+
+    len = cio_read(cio, 2);         /* Lcrg */
+    for (i = 0; i < numcomps; i++) {
+        Xcrg_i = cio_read(cio, 2);  /* Xcrg_i */
+        Ycrg_i = cio_read(cio, 2);  /* Ycrg_i */
+        Zcrg_i = cio_read(cio, 2);  /* Zcrg_i */
+    }
+}
+
+static void j3d_read_tlm(opj_j3d_t *j3d)
+{
+    int len, Ztlm, Stlm, ST, SP, tile_tlm, i;
+    long int Ttlm_i, Ptlm_i;
+
+    opj_cio_t *cio = j3d->cio;
+
+    len = cio_read(cio, 2);     /* Ltlm */
+    Ztlm = cio_read(cio, 1);    /* Ztlm */
+    Stlm = cio_read(cio, 1);    /* Stlm */
+    ST = ((Stlm >> 4) & 0x01) + ((Stlm >> 4) & 0x02);
+    SP = (Stlm >> 6) & 0x01;
+    tile_tlm = (len - 4) / ((SP + 1) * 2 + ST);
+    for (i = 0; i < tile_tlm; i++) {
+        Ttlm_i = cio_read(cio, ST); /* Ttlm_i */
+        Ptlm_i = cio_read(cio, SP ? 4 : 2); /* Ptlm_i */
+    }
+}
+
+static void j3d_read_plm(opj_j3d_t *j3d)
+{
+    int len, i, Zplm, Nplm, add, packet_len = 0;
+
+    opj_cio_t *cio = j3d->cio;
+
+    len = cio_read(cio, 2);     /* Lplm */
+    Zplm = cio_read(cio, 1);    /* Zplm */
+    len -= 3;
+    while (len > 0) {
+        Nplm = cio_read(cio, 4);        /* Nplm */
+        len -= 4;
+        for (i = Nplm; i > 0; i--) {
+            add = cio_read(cio, 1);
+            len--;
+            packet_len = (packet_len << 7) + add;   /* Iplm_ij */
+            if ((add & 0x80) == 0) {
+                /* New packet */
+                packet_len = 0;
+            }
+            if (len <= 0) {
+                break;
+            }
+        }
+    }
+}
+
+static void j3d_read_plt(opj_j3d_t *j3d)
+{
+    int len, i, Zplt, packet_len = 0, add;
+
+    opj_cio_t *cio = j3d->cio;
+
+    len = cio_read(cio, 2);     /* Lplt */
+    Zplt = cio_read(cio, 1);    /* Zplt */
+    for (i = len - 3; i > 0; i--) {
+        add = cio_read(cio, 1);
+        packet_len = (packet_len << 7) + add;   /* Iplt_i */
+        if ((add & 0x80) == 0) {
+            /* New packet */
+            packet_len = 0;
+        }
+    }
+}
+
+static void j3d_read_ppm(opj_j3d_t *j3d)
+{
+    int len, Z_ppm, i, j;
+    int N_ppm;
+
+    opj_cp_t *cp = j3d->cp;
+    opj_cio_t *cio = j3d->cio;
+
+    len = cio_read(cio, 2);
+    cp->ppm = 1;
+
+    Z_ppm = cio_read(cio, 1);   /* Z_ppm */
+    len -= 3;
+    while (len > 0) {
+        if (cp->ppm_previous == 0) {
+            N_ppm = cio_read(cio, 4);   /* N_ppm */
+            len -= 4;
+        } else {
+            N_ppm = cp->ppm_previous;
+        }
+        j = cp->ppm_store;
+        if (Z_ppm == 0) {   /* First PPM marker */
+            cp->ppm_data = (unsigned char *) opj_malloc(N_ppm * sizeof(unsigned char));
+            cp->ppm_data_first = cp->ppm_data;
+            cp->ppm_len = N_ppm;
+        } else {            /* NON-first PPM marker */
+            cp->ppm_data = (unsigned char *) opj_realloc(cp->ppm_data,
+                           (N_ppm + cp->ppm_store) * sizeof(unsigned char));
+            cp->ppm_data_first = cp->ppm_data;
+            cp->ppm_len = N_ppm + cp->ppm_store;
+        }
+        for (i = N_ppm; i > 0; i--) {   /* Read packet header */
+            cp->ppm_data[j] = cio_read(cio, 1);
+            j++;
+            len--;
+            if (len == 0) {
+                break;    /* Case of non-finished packet header in present marker but finished in next one */
+            }
+        }
+        cp->ppm_previous = i - 1;
+        cp->ppm_store = j;
+    }
+}
+
+static void j3d_read_ppt(opj_j3d_t *j3d)
+{
+    int len, Z_ppt, i, j = 0;
+
+    opj_cp_t *cp = j3d->cp;
+    opj_tcp_t *tcp = cp->tcps + j3d->curtileno;
+    opj_cio_t *cio = j3d->cio;
+
+    len = cio_read(cio, 2);
+    Z_ppt = cio_read(cio, 1);
+    tcp->ppt = 1;
+    if (Z_ppt == 0) {       /* First PPT marker */
+        tcp->ppt_data = (unsigned char *) opj_malloc((len - 3) * sizeof(unsigned char));
+        tcp->ppt_data_first = tcp->ppt_data;
+        tcp->ppt_store = 0;
+        tcp->ppt_len = len - 3;
+    } else {            /* NON-first PPT marker */
+        tcp->ppt_data = (unsigned char *) opj_realloc(tcp->ppt_data,
+                        (len - 3 + tcp->ppt_store) * sizeof(unsigned char));
+        tcp->ppt_data_first = tcp->ppt_data;
+        tcp->ppt_len = len - 3 + tcp->ppt_store;
+    }
+    j = tcp->ppt_store;
+    for (i = len - 3; i > 0; i--) {
+        tcp->ppt_data[j] = cio_read(cio, 1);
+        j++;
+    }
+    tcp->ppt_store = j;
+}
+
+static void j3d_write_sot(opj_j3d_t *j3d)
+{
+    int lenp, len;
+
+    opj_cio_t *cio = j3d->cio;
+
+    j3d->sot_start = cio_tell(cio);
+    cio_write(cio, J3D_MS_SOT, 2);      /* SOT */
+    lenp = cio_tell(cio);
+    cio_skip(cio, 2);                   /* Lsot (further) */
+    cio_write(cio, j3d->curtileno, 2);  /* Isot */
+    cio_skip(cio, 4);                   /* Psot (further in j3d_write_sod) */
+    cio_write(cio, 0, 1);               /* TPsot */
+    cio_write(cio, 1,
+              1);               /* TNsot (no of tile-parts of this tile in this codestream)*/
+    len = cio_tell(cio) - lenp;
+    cio_seek(cio, lenp);
+    cio_write(cio, len, 2);             /* Lsot */
+    cio_seek(cio, lenp + len);
+}
+
+static void j3d_read_sot(opj_j3d_t *j3d)
+{
+    int len, tileno, totlen, partno, numparts, i;
+    opj_tcp_t *tcp = NULL;
+    char status = 0;
+
+    opj_cp_t *cp = j3d->cp;
+    opj_cio_t *cio = j3d->cio;
+
+    len = cio_read(cio, 2);
+    tileno = cio_read(cio, 2);
+
+    if (cp->tileno_size == 0) {
+        cp->tileno[cp->tileno_size] = tileno;
+        cp->tileno_size++;
+    } else {
+        i = 0;
+        while (i < cp->tileno_size && status == 0) {
+            status = cp->tileno[i] == tileno ? 1 : 0;
+            i++;
+        }
+        if (status == 0) {
+            cp->tileno[cp->tileno_size] = tileno;
+            cp->tileno_size++;
+        }
+    }
+
+    totlen = cio_read(cio, 4);
+    if (!totlen) {
+        totlen = cio_numbytesleft(cio) + 8;
+    }
+
+    partno = cio_read(cio, 1);
+    numparts = cio_read(cio, 1);
+
+    j3d->curtileno = tileno;
+    j3d->eot = cio_getbp(cio) - 12 + totlen;
+    j3d->state = J3D_STATE_TPH;
+    tcp = &cp->tcps[j3d->curtileno];
+
+    if (tcp->first == 1) {
+
+        /* Initialization PPT */
+        opj_tccp_t *tmp = tcp->tccps;
+        memcpy(tcp, j3d->default_tcp, sizeof(opj_tcp_t));
+        tcp->ppt = 0;
+        tcp->ppt_data = NULL;
+        tcp->ppt_data_first = NULL;
+        tcp->tccps = tmp;
+
+        for (i = 0; i < j3d->volume->numcomps; i++) {
+            tcp->tccps[i] = j3d->default_tcp->tccps[i];
+        }
+        cp->tcps[j3d->curtileno].first = 0;
+    }
+}
+
+static void j3d_write_sod(opj_j3d_t *j3d, void *tile_coder)
+{
+    int l, layno;
+    int totlen;
+    opj_tcp_t *tcp = NULL;
+    opj_volume_info_t *volume_info = NULL;
+
+    opj_tcd_t *tcd = (opj_tcd_t*)
+                     tile_coder;    /* cast is needed because of conflicts in header inclusions */
+    opj_cp_t *cp = j3d->cp;
+    opj_cio_t *cio = j3d->cio;
+
+    cio_write(cio, J3D_MS_SOD, 2);
+    if (j3d->curtileno == 0) {
+        j3d->sod_start = cio_tell(cio) + j3d->pos_correction;
+    }
+
+    /* INDEX >> */
+    volume_info = j3d->volume_info;
+    if (volume_info && volume_info->index_on) {
+        volume_info->tile[j3d->curtileno].end_header = cio_tell(
+                    cio) + j3d->pos_correction - 1;
+    }
+    /* << INDEX */
+
+    tcp = &cp->tcps[j3d->curtileno];
+    for (layno = 0; layno < tcp->numlayers; layno++) {
+        tcp->rates[layno] -= tcp->rates[layno] ? (j3d->sod_start /
+                             (cp->th * cp->tw * cp->tl)) : 0;
+    }
+
+    if (volume_info) {
+        volume_info->num = 0;
+    }
+
+    l = tcd_encode_tile(tcd, j3d->curtileno, cio_getbp(cio),
+                        cio_numbytesleft(cio) - 2, volume_info);
+
+    /* Writing Psot in SOT marker */
+    totlen = cio_tell(cio) + l - j3d->sot_start;
+    cio_seek(cio, j3d->sot_start + 6);
+    cio_write(cio, totlen, 4);
+    cio_seek(cio, j3d->sot_start + totlen);
+}
+
+static void j3d_read_sod(opj_j3d_t *j3d)
+{
+    int len, truncate = 0, i;
+    unsigned char *data = NULL, *data_ptr = NULL;
+
+    opj_cio_t *cio = j3d->cio;
+    int curtileno = j3d->curtileno;
+
+    len = int_min(j3d->eot - cio_getbp(cio), cio_numbytesleft(cio) + 1);
+
+    if (len == cio_numbytesleft(cio) + 1) {
+        truncate = 1;       /* Case of a truncate codestream */
+    }
+
+    data = (unsigned char *) opj_malloc((j3d->tile_len[curtileno] + len) * sizeof(
+                                            unsigned char));
+
+    for (i = 0; i < j3d->tile_len[curtileno]; i++) {
+        data[i] = j3d->tile_data[curtileno][i];
+    }
+
+    data_ptr = data + j3d->tile_len[curtileno];
+    for (i = 0; i < len; i++) {
+        data_ptr[i] = cio_read(cio, 1);
+    }
+
+    j3d->tile_len[curtileno] += len;
+    opj_free(j3d->tile_data[curtileno]);
+    j3d->tile_data[curtileno] = data;
+
+    if (!truncate) {
+        j3d->state = J3D_STATE_TPHSOT;
+    } else {
+        j3d->state = J3D_STATE_NEOC;    /* RAJOUTE !! */
+    }
+}
+
+static void j3d_write_rgn(opj_j3d_t *j3d, int compno, int tileno)
+{
+
+    opj_cp_t *cp = j3d->cp;
+    opj_tcp_t *tcp = &cp->tcps[tileno];
+    opj_cio_t *cio = j3d->cio;
+    int numcomps = j3d->volume->numcomps;
+
+    cio_write(cio, J3D_MS_RGN, 2);                      /* RGN  */
+    cio_write(cio, numcomps <= 256 ? 5 : 6, 2);         /* Lrgn */
+    cio_write(cio, compno, numcomps <= 256 ? 1 : 2);    /* Crgn */
+    cio_write(cio, 0, 1);                               /* Srgn */
+    cio_write(cio, tcp->tccps[compno].roishift, 1);     /* SPrgn */
+}
+
+static void j3d_read_rgn(opj_j3d_t *j3d)
+{
+    int len, compno, roisty;
+
+    opj_cp_t *cp = j3d->cp;
+    opj_tcp_t *tcp = j3d->state == J3D_STATE_TPH ? &cp->tcps[j3d->curtileno] :
+                     j3d->default_tcp;
+    opj_cio_t *cio = j3d->cio;
+    int numcomps = j3d->volume->numcomps;
+
+    len = cio_read(cio, 2);                                     /* Lrgn */
+    compno = cio_read(cio, numcomps <= 256 ? 1 : 2);            /* Crgn */
+    roisty = cio_read(cio, 1);                                  /* Srgn */
+    tcp->tccps[compno].roishift = cio_read(cio, 1);             /* SPrgn */
+}
+
+static void j3d_write_eoc(opj_j3d_t *j3d)
+{
+    opj_cio_t *cio = j3d->cio;
+    /* opj_event_msg(j3d->cinfo, "%.8x: EOC\n", cio_tell(cio) + j3d->pos_correction); */
+    cio_write(cio, J3D_MS_EOC, 2);
+}
+
+static void j3d_read_eoc(opj_j3d_t *j3d)
+{
+    int i, tileno;
+
+#ifndef NO_PACKETS_DECODING
+    opj_tcd_t *tcd = tcd_create(j3d->cinfo);
     tcd_malloc_decode(tcd, j3d->volume, j3d->cp);
-       /*j3d_dump_volume(stdout, tcd->volume);
-       j3d_dump_cp(stdout, tcd->volume, tcd->cp);*/
-       for (i = 0; i < j3d->cp->tileno_size; i++) {
-               tileno = j3d->cp->tileno[i];
-               /*opj_event_msg(j3d->cinfo, EVT_INFO, "tcd_decode_tile \n");*/
-               tcd_decode_tile(tcd, j3d->tile_data[tileno], j3d->tile_len[tileno], tileno);
-               opj_free(j3d->tile_data[tileno]);
-               j3d->tile_data[tileno] = NULL;
-       }
-       tcd_free_decode(tcd);
-       tcd_destroy(tcd);
-#else 
-       for (i = 0; i < j3d->cp->tileno_size; i++) {
-               tileno = j3d->cp->tileno[i];
-               opj_free(j3d->tile_data[tileno]);
-               j3d->tile_data[tileno] = NULL;
-       }
+    /*j3d_dump_volume(stdout, tcd->volume);
+    j3d_dump_cp(stdout, tcd->volume, tcd->cp);*/
+    for (i = 0; i < j3d->cp->tileno_size; i++) {
+        tileno = j3d->cp->tileno[i];
+        /*opj_event_msg(j3d->cinfo, EVT_INFO, "tcd_decode_tile \n");*/
+        tcd_decode_tile(tcd, j3d->tile_data[tileno], j3d->tile_len[tileno], tileno);
+        opj_free(j3d->tile_data[tileno]);
+        j3d->tile_data[tileno] = NULL;
+    }
+    tcd_free_decode(tcd);
+    tcd_destroy(tcd);
+#else
+    for (i = 0; i < j3d->cp->tileno_size; i++) {
+        tileno = j3d->cp->tileno[i];
+        opj_free(j3d->tile_data[tileno]);
+        j3d->tile_data[tileno] = NULL;
+    }
 #endif
-       
-       j3d->state = J3D_STATE_MT;
+
+    j3d->state = J3D_STATE_MT;
 }
 
-static void j3d_read_unk(opj_j3d_t *j3d) {
-       opj_event_msg(j3d->cinfo, EVT_WARNING, "Unknown marker\n");
+static void j3d_read_unk(opj_j3d_t *j3d)
+{
+    opj_event_msg(j3d->cinfo, EVT_WARNING, "Unknown marker\n");
 }
 
 static opj_atk_t atk_info_wt[] = {
-       {0, 1, J3D_ATK_WS, J3D_ATK_IRR, 0, J3D_ATK_WS, 1.230174104, 4, {0}, {0}, {0}, {1,1,1,1}, {-1.586134342059924, -0.052980118572961, 0.882911075530934, 0.443506852043971}},/* WT 9-7 IRR*/
-       {1, 0, J3D_ATK_WS, J3D_ATK_REV, 0, J3D_ATK_WS, 0, 2, {0}, {1,2}, {1,2}, {1,1}, {-1.0,1.0}},/* WT 5-3 REV*/
-       {2, 0, J3D_ATK_ARB, J3D_ATK_REV, 0, J3D_ATK_CON, 0, 2, {0,0}, {0,1}, {0,1}, {1,1}, {{-1.0},{1.0}}}, /* WT 2-2 REV*/
-       {3, 0, J3D_ATK_ARB, J3D_ATK_REV, 1, J3D_ATK_CON, 0, 3, {0,0,-1}, {0,1,2}, {0,1,2}, {1,1,3}, {{-1.0},{1.0},{1.0,0.0,-1.0}}}, /* WT 2-6 REV*/
-       {4, 0, J3D_ATK_ARB, J3D_ATK_REV, 1, J3D_ATK_CON, 0, 3, {0,0,-2}, {0,1,6}, {0,1,32}, {1,1,5}, {{-1},{1},{-3.0,22.0,0.0,-22.0,3.0}}}, /* WT 2-10 REV*/
-       {5, 1, J3D_ATK_ARB, J3D_ATK_IRR, 1, J3D_ATK_WS, 1, 7, {0}, {0}, {0}, {1,1,2,1,2,1,3},{{-1},{1.58613434206},{-0.460348209828, 0.460348209828},{0.25},{0.374213867768,-0.374213867768},{-1.33613434206},{0.29306717103,0,-0.29306717103}}}, /* WT 6-10 IRR*/
-       {6, 1, J3D_ATK_ARB, J3D_ATK_IRR, 0, J3D_ATK_WS, 1, 11, {0}, {0}, {0}, {1,1,2,1,2,1,2,1,2,1,5},{{-1},{0,99715069105},{-1.00573127827, 1.00573127827},{-0.27040357631},{2.20509972343, -2.20509972343},{0.08059995736},
-               {-1.62682532350, 1.62682532350},{0.52040357631},{0.60404664250, -0.60404664250},{-0.82775064841},{-0.06615812964, 0.29402137720, 0, -0.29402137720, 0.06615812964}}}, /* WT 10-18 IRR*/
-       {7, 1, J3D_ATK_WS, J3D_ATK_IRR, 0, J3D_ATK_WS, 1, 2, {0}, {0}, {0}, {1,1}, {-0.5, 0.25}},       /* WT 5-3 IRR*/
-       {8, 0, J3D_ATK_WS, J3D_ATK_REV, 0, J3D_ATK_WS, 0, 2, {0}, {4,4}, {8,8}, {2,2}, {{-9,1},{5,-1}}}         /* WT 13-7 REV*/
+    {0, 1, J3D_ATK_WS, J3D_ATK_IRR, 0, J3D_ATK_WS, 1.230174104, 4, {0}, {0}, {0}, {1, 1, 1, 1}, {-1.586134342059924, -0.052980118572961, 0.882911075530934, 0.443506852043971}}, /* WT 9-7 IRR*/
+    {1, 0, J3D_ATK_WS, J3D_ATK_REV, 0, J3D_ATK_WS, 0, 2, {0}, {1, 2}, {1, 2}, {1, 1}, {-1.0, 1.0}}, /* WT 5-3 REV*/
+    {2, 0, J3D_ATK_ARB, J3D_ATK_REV, 0, J3D_ATK_CON, 0, 2, {0, 0}, {0, 1}, {0, 1}, {1, 1}, {{-1.0}, {1.0}}}, /* WT 2-2 REV*/
+    {3, 0, J3D_ATK_ARB, J3D_ATK_REV, 1, J3D_ATK_CON, 0, 3, {0, 0, -1}, {0, 1, 2}, {0, 1, 2}, {1, 1, 3}, {{-1.0}, {1.0}, {1.0, 0.0, -1.0}}}, /* WT 2-6 REV*/
+    {4, 0, J3D_ATK_ARB, J3D_ATK_REV, 1, J3D_ATK_CON, 0, 3, {0, 0, -2}, {0, 1, 6}, {0, 1, 32}, {1, 1, 5}, {{-1}, {1}, {-3.0, 22.0, 0.0, -22.0, 3.0}}}, /* WT 2-10 REV*/
+    {5, 1, J3D_ATK_ARB, J3D_ATK_IRR, 1, J3D_ATK_WS, 1, 7, {0}, {0}, {0}, {1, 1, 2, 1, 2, 1, 3}, {{-1}, {1.58613434206}, {-0.460348209828, 0.460348209828}, {0.25}, {0.374213867768, -0.374213867768}, {-1.33613434206}, {0.29306717103, 0, -0.29306717103}}}, /* WT 6-10 IRR*/
+    {
+        6, 1, J3D_ATK_ARB, J3D_ATK_IRR, 0, J3D_ATK_WS, 1, 11, {0}, {0}, {0}, {1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 5}, {{-1}, {0, 99715069105}, {-1.00573127827, 1.00573127827}, {-0.27040357631}, {2.20509972343, -2.20509972343}, {0.08059995736},
+            {-1.62682532350, 1.62682532350}, {0.52040357631}, {0.60404664250, -0.60404664250}, {-0.82775064841}, {-0.06615812964, 0.29402137720, 0, -0.29402137720, 0.06615812964}
+        }
+    }, /* WT 10-18 IRR*/
+    {7, 1, J3D_ATK_WS, J3D_ATK_IRR, 0, J3D_ATK_WS, 1, 2, {0}, {0}, {0}, {1, 1}, {-0.5, 0.25}},  /* WT 5-3 IRR*/
+    {8, 0, J3D_ATK_WS, J3D_ATK_REV, 0, J3D_ATK_WS, 0, 2, {0}, {4, 4}, {8, 8}, {2, 2}, {{-9, 1}, {5, -1}}} /* WT 13-7 REV*/
 };
 
 typedef struct opj_dec_mstabent {
-       /** marker value */
-       int id;
-       /** value of the state when the marker can appear */
-       int states;
-       /** action linked to the marker */
-       void (*handler) (opj_j3d_t *j3d);
+    /** marker value */
+    int id;
+    /** value of the state when the marker can appear */
+    int states;
+    /** action linked to the marker */
+    void (*handler)(opj_j3d_t *j3d);
 } opj_dec_mstabent_t;
 
 opj_dec_mstabent_t j3d_dec_mstab[] = {
-  {J3D_MS_SOC, J3D_STATE_MHSOC, j3d_read_soc},
-  {J3D_MS_SOT, J3D_STATE_MH | J3D_STATE_TPHSOT, j3d_read_sot},
-  {J3D_MS_SOD, J3D_STATE_TPH, j3d_read_sod},
-  {J3D_MS_EOC, J3D_STATE_TPHSOT, j3d_read_eoc},
-  {J3D_MS_CAP, J3D_STATE_MHSIZ, j3d_read_cap},
-  {J3D_MS_SIZ, J3D_STATE_MHSIZ, j3d_read_siz},
-  {J3D_MS_NSI, J3D_STATE_MHSIZ, j3d_read_nsi},
-  {J3D_MS_COD, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_cod},
-  {J3D_MS_COC, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_coc},
-  {J3D_MS_RGN, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_rgn},
-  {J3D_MS_QCD, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_qcd},
-  {J3D_MS_QCC, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_qcc},
-  {J3D_MS_POC, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_poc},
-  {J3D_MS_TLM, J3D_STATE_MH, j3d_read_tlm},
-  {J3D_MS_PLM, J3D_STATE_MH, j3d_read_plm},
-  {J3D_MS_PLT, J3D_STATE_TPH, j3d_read_plt},
-  {J3D_MS_PPM, J3D_STATE_MH, j3d_read_ppm},
-  {J3D_MS_PPT, J3D_STATE_TPH, j3d_read_ppt},
-  {J3D_MS_SOP, 0, 0},
-  {J3D_MS_CRG, J3D_STATE_MH, j3d_read_crg},
-  {J3D_MS_COM, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_com},
-  {J3D_MS_DCO, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_dco},
-  {J3D_MS_ATK, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_atk},
-  {0, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_unk}
-  /*, -->must define the j3d_read functions
-  {J3D_MS_CBD, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_cbd},
-  {J3D_MS_MCT, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_mct},
-  {J3D_MS_MCC, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_mcc},
-  {J3D_MS_MCO, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_mco},
-  {J3D_MS_NLT, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_nlt},
-  {J3D_MS_VMS, J3D_STATE_MH, j3d_read_vms},
-  {J3D_MS_DFS, J3D_STATE_MH, j3d_read_dfs},
-  {J3D_MS_ADS, J3D_STATE_MH, j3d_read_ads},
-  {J3D_MS_QPD, J3D_STATE_MH, j3d_read_qpd},
-  {J3D_MS_QPC, J3D_STATE_TPH, j3d_read_qpc}*/
+    {J3D_MS_SOC, J3D_STATE_MHSOC, j3d_read_soc},
+    {J3D_MS_SOT, J3D_STATE_MH | J3D_STATE_TPHSOT, j3d_read_sot},
+    {J3D_MS_SOD, J3D_STATE_TPH, j3d_read_sod},
+    {J3D_MS_EOC, J3D_STATE_TPHSOT, j3d_read_eoc},
+    {J3D_MS_CAP, J3D_STATE_MHSIZ, j3d_read_cap},
+    {J3D_MS_SIZ, J3D_STATE_MHSIZ, j3d_read_siz},
+    {J3D_MS_NSI, J3D_STATE_MHSIZ, j3d_read_nsi},
+    {J3D_MS_COD, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_cod},
+    {J3D_MS_COC, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_coc},
+    {J3D_MS_RGN, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_rgn},
+    {J3D_MS_QCD, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_qcd},
+    {J3D_MS_QCC, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_qcc},
+    {J3D_MS_POC, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_poc},
+    {J3D_MS_TLM, J3D_STATE_MH, j3d_read_tlm},
+    {J3D_MS_PLM, J3D_STATE_MH, j3d_read_plm},
+    {J3D_MS_PLT, J3D_STATE_TPH, j3d_read_plt},
+    {J3D_MS_PPM, J3D_STATE_MH, j3d_read_ppm},
+    {J3D_MS_PPT, J3D_STATE_TPH, j3d_read_ppt},
+    {J3D_MS_SOP, 0, 0},
+    {J3D_MS_CRG, J3D_STATE_MH, j3d_read_crg},
+    {J3D_MS_COM, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_com},
+    {J3D_MS_DCO, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_dco},
+    {J3D_MS_ATK, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_atk},
+    {0, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_unk}
+    /*, -->must define the j3d_read functions
+    {J3D_MS_CBD, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_cbd},
+    {J3D_MS_MCT, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_mct},
+    {J3D_MS_MCC, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_mcc},
+    {J3D_MS_MCO, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_mco},
+    {J3D_MS_NLT, J3D_STATE_MH | J3D_STATE_TPH, j3d_read_nlt},
+    {J3D_MS_VMS, J3D_STATE_MH, j3d_read_vms},
+    {J3D_MS_DFS, J3D_STATE_MH, j3d_read_dfs},
+    {J3D_MS_ADS, J3D_STATE_MH, j3d_read_ads},
+    {J3D_MS_QPD, J3D_STATE_MH, j3d_read_qpd},
+    {J3D_MS_QPC, J3D_STATE_TPH, j3d_read_qpc}*/
 };
 
 /**
 Read the lookup table containing all the marker, status and action
 @param id Marker value
 */
-static opj_dec_mstabent_t *j3d_dec_mstab_lookup(int id) {
-       opj_dec_mstabent_t *e;
-       for (e = j3d_dec_mstab; e->id != 0; e++) {
-               if (e->id == id) {
-                       break;
-               }
-       }
-       return e;
+static opj_dec_mstabent_t *j3d_dec_mstab_lookup(int id)
+{
+    opj_dec_mstabent_t *e;
+    for (e = j3d_dec_mstab; e->id != 0; e++) {
+        if (e->id == id) {
+            break;
+        }
+    }
+    return e;
 }
 
 /* ----------------------------------------------------------------------- */
 /* J3D / JPT decoder interface                                             */
 /* ----------------------------------------------------------------------- */
 
-opj_j3d_t* j3d_create_decompress(opj_common_ptr cinfo) {
-       opj_j3d_t *j3d = (opj_j3d_t*)opj_malloc(sizeof(opj_j3d_t));
-       if(j3d) {
-               j3d->cinfo = cinfo;
-               j3d->default_tcp = (opj_tcp_t*)opj_malloc(sizeof(opj_tcp_t));
-               if(!j3d->default_tcp) {
-                       opj_free(j3d);
-                       return NULL;
-               }
-       }
-       return j3d;
-}
-
-void j3d_destroy_decompress(opj_j3d_t *j3d) {
-       int i = 0;
-
-       if(j3d->tile_len != NULL) {
-               opj_free(j3d->tile_len);
-       }
-       if(j3d->tile_data != NULL) {
-               opj_free(j3d->tile_data);
-       }
-       if(j3d->default_tcp != NULL) {
-               opj_tcp_t *default_tcp = j3d->default_tcp;
-               if(default_tcp->ppt_data_first != NULL) {
-                       opj_free(default_tcp->ppt_data_first);
-               }
-               if(j3d->default_tcp->tccps != NULL) {
-                       opj_free(j3d->default_tcp->tccps);
-               }
-               opj_free(j3d->default_tcp);
-       }
-       if(j3d->cp != NULL) {
-               opj_cp_t *cp = j3d->cp;
-               if(cp->tcps != NULL) {
-                       for(i = 0; i < cp->tw * cp->th * cp->tl; i++) {
-                               if(cp->tcps[i].ppt_data_first != NULL) {
-                                       opj_free(cp->tcps[i].ppt_data_first);
-                               }
-                               if(cp->tcps[i].tccps != NULL) {
-                                       opj_free(cp->tcps[i].tccps);
-                               }
-                       }
-                       opj_free(cp->tcps);
-               }
-               if(cp->ppm_data_first != NULL) {
-                       opj_free(cp->ppm_data_first);
-               }
-               if(cp->tileno != NULL) {
-                       opj_free(cp->tileno);  
-               }
-               if(cp->comment != NULL) {
-                       opj_free(cp->comment);
-               }
-
-               opj_free(cp);
-       }
-
-       opj_free(j3d);
-}
-
-void j3d_setup_decoder(opj_j3d_t *j3d, opj_dparameters_t *parameters) {
-       if(j3d && parameters) {
-               /* create and initialize the coding parameters structure */
-               opj_cp_t *cp = (opj_cp_t*)opj_malloc(sizeof(opj_cp_t));
-               cp->reduce[0] = parameters->cp_reduce[0];
-               cp->reduce[1] = parameters->cp_reduce[1];
-               cp->reduce[2] = parameters->cp_reduce[2];
-               cp->layer = parameters->cp_layer;
-               cp->bigendian = parameters->bigendian;
-
-    /* MM: Settings of the following two member variables would take
-      place during j3d_read_com. FIXME */
-               cp->encoding_format = ENCOD_3EB;
-               cp->transform_format = TRF_2D_DWT;
-
-               /* keep a link to cp so that we can destroy it later in j3d_destroy_decompress */
-               j3d->cp = cp;
-       }
-}
-
-opj_volume_t* j3d_decode(opj_j3d_t *j3d, opj_cio_t *cio) {
-       opj_volume_t *volume = NULL;
-
-       opj_common_ptr cinfo = j3d->cinfo;
-
-       j3d->cio = cio;
-
-       /* create an empty volume */
-       volume = (opj_volume_t*)opj_malloc(sizeof(opj_volume_t));
-       j3d->volume = volume;
-
-       j3d->state = J3D_STATE_MHSOC;
-       
-       for (;;) {
-               opj_dec_mstabent_t *e;
-               int id = cio_read(cio, 2);
-               if (id >> 8 != 0xff) {
-                       opj_volume_destroy(volume);
-                       opj_event_msg(cinfo, EVT_ERROR, "%.8x: expected a marker instead of %x\n", cio_tell(cio) - 2, id);
-                       return 0;
-               }
-               e = j3d_dec_mstab_lookup(id);
-               /*opj_event_msg(cinfo, EVT_INFO, "MARKER %x PREVSTATE %d E->STATE %d\n",e->id,j3d->state,e->states);*/
-               if (!(j3d->state & e->states)) {
-                       opj_volume_destroy(volume);
-                       opj_event_msg(cinfo, EVT_ERROR, "%.8x: unexpected marker %x\n", cio_tell(cio) - 2, id);
-                       return 0;
-               }
-               if (e->handler) {
-                       (*e->handler)(j3d);
-               }
-               /*opj_event_msg(cinfo, EVT_INFO, "POSTSTATE %d\n",j3d->state);*/
-               if (j3d->state == J3D_STATE_MT) {
-                       break;
-               }
-               if (j3d->state == J3D_STATE_NEOC) {
-                       break;
-               }
-       }
-       if (j3d->state == J3D_STATE_NEOC) {
-               j3d_read_eoc(j3d);
-       }
-
-       if (j3d->state != J3D_STATE_MT) {
-               opj_event_msg(cinfo, EVT_WARNING, "Incomplete bitstream\n");
-       }
-       
-       return volume;
+opj_j3d_t* j3d_create_decompress(opj_common_ptr cinfo)
+{
+    opj_j3d_t *j3d = (opj_j3d_t*)opj_malloc(sizeof(opj_j3d_t));
+    if (j3d) {
+        j3d->cinfo = cinfo;
+        j3d->default_tcp = (opj_tcp_t*)opj_malloc(sizeof(opj_tcp_t));
+        if (!j3d->default_tcp) {
+            opj_free(j3d);
+            return NULL;
+        }
+    }
+    return j3d;
+}
+
+void j3d_destroy_decompress(opj_j3d_t *j3d)
+{
+    int i = 0;
+
+    if (j3d->tile_len != NULL) {
+        opj_free(j3d->tile_len);
+    }
+    if (j3d->tile_data != NULL) {
+        opj_free(j3d->tile_data);
+    }
+    if (j3d->default_tcp != NULL) {
+        opj_tcp_t *default_tcp = j3d->default_tcp;
+        if (default_tcp->ppt_data_first != NULL) {
+            opj_free(default_tcp->ppt_data_first);
+        }
+        if (j3d->default_tcp->tccps != NULL) {
+            opj_free(j3d->default_tcp->tccps);
+        }
+        opj_free(j3d->default_tcp);
+    }
+    if (j3d->cp != NULL) {
+        opj_cp_t *cp = j3d->cp;
+        if (cp->tcps != NULL) {
+            for (i = 0; i < cp->tw * cp->th * cp->tl; i++) {
+                if (cp->tcps[i].ppt_data_first != NULL) {
+                    opj_free(cp->tcps[i].ppt_data_first);
+                }
+                if (cp->tcps[i].tccps != NULL) {
+                    opj_free(cp->tcps[i].tccps);
+                }
+            }
+            opj_free(cp->tcps);
+        }
+        if (cp->ppm_data_first != NULL) {
+            opj_free(cp->ppm_data_first);
+        }
+        if (cp->tileno != NULL) {
+            opj_free(cp->tileno);
+        }
+        if (cp->comment != NULL) {
+            opj_free(cp->comment);
+        }
+
+        opj_free(cp);
+    }
+
+    opj_free(j3d);
+}
+
+void j3d_setup_decoder(opj_j3d_t *j3d, opj_dparameters_t *parameters)
+{
+    if (j3d && parameters) {
+        /* create and initialize the coding parameters structure */
+        opj_cp_t *cp = (opj_cp_t*)opj_malloc(sizeof(opj_cp_t));
+        cp->reduce[0] = parameters->cp_reduce[0];
+        cp->reduce[1] = parameters->cp_reduce[1];
+        cp->reduce[2] = parameters->cp_reduce[2];
+        cp->layer = parameters->cp_layer;
+        cp->bigendian = parameters->bigendian;
+
+        /* MM: Settings of the following two member variables would take
+          place during j3d_read_com. FIXME */
+        cp->encoding_format = ENCOD_3EB;
+        cp->transform_format = TRF_2D_DWT;
+
+        /* keep a link to cp so that we can destroy it later in j3d_destroy_decompress */
+        j3d->cp = cp;
+    }
+}
+
+opj_volume_t* j3d_decode(opj_j3d_t *j3d, opj_cio_t *cio)
+{
+    opj_volume_t *volume = NULL;
+
+    opj_common_ptr cinfo = j3d->cinfo;
+
+    j3d->cio = cio;
+
+    /* create an empty volume */
+    volume = (opj_volume_t*)opj_malloc(sizeof(opj_volume_t));
+    j3d->volume = volume;
+
+    j3d->state = J3D_STATE_MHSOC;
+
+    for (;;) {
+        opj_dec_mstabent_t *e;
+        int id = cio_read(cio, 2);
+        if (id >> 8 != 0xff) {
+            opj_volume_destroy(volume);
+            opj_event_msg(cinfo, EVT_ERROR, "%.8x: expected a marker instead of %x\n",
+                          cio_tell(cio) - 2, id);
+            return 0;
+        }
+        e = j3d_dec_mstab_lookup(id);
+        /*opj_event_msg(cinfo, EVT_INFO, "MARKER %x PREVSTATE %d E->STATE %d\n",e->id,j3d->state,e->states);*/
+        if (!(j3d->state & e->states)) {
+            opj_volume_destroy(volume);
+            opj_event_msg(cinfo, EVT_ERROR, "%.8x: unexpected marker %x\n",
+                          cio_tell(cio) - 2, id);
+            return 0;
+        }
+        if (e->handler) {
+            (*e->handler)(j3d);
+        }
+        /*opj_event_msg(cinfo, EVT_INFO, "POSTSTATE %d\n",j3d->state);*/
+        if (j3d->state == J3D_STATE_MT) {
+            break;
+        }
+        if (j3d->state == J3D_STATE_NEOC) {
+            break;
+        }
+    }
+    if (j3d->state == J3D_STATE_NEOC) {
+        j3d_read_eoc(j3d);
+    }
+
+    if (j3d->state != J3D_STATE_MT) {
+        opj_event_msg(cinfo, EVT_WARNING, "Incomplete bitstream\n");
+    }
+
+    return volume;
 }
 
 /* ----------------------------------------------------------------------- */
 /* J3D encoder interface                                                       */
 /* ----------------------------------------------------------------------- */
 
-opj_j3d_t* j3d_create_compress(opj_common_ptr cinfo) {
-       opj_j3d_t *j3d = (opj_j3d_t*)opj_malloc(sizeof(opj_j3d_t));
-       if(j3d) {
-               j3d->cinfo = cinfo;
-       }
-       return j3d;
-}
-
-void j3d_destroy_compress(opj_j3d_t *j3d) {
-       int tileno;
-
-       if(!j3d) return;
-
-       if(j3d->volume_info != NULL) {
-               opj_volume_info_t *volume_info = j3d->volume_info;
-               if (volume_info->index_on && j3d->cp) {
-                       opj_cp_t *cp = j3d->cp;
-                       for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
-                               opj_tile_info_t *tile_info = &volume_info->tile[tileno];
-                               opj_free(tile_info->thresh);
-                               opj_free(tile_info->packet);
-                       }
-                       opj_free(volume_info->tile);
-               }
-               opj_free(volume_info);
-       }
-       if(j3d->cp != NULL) {
-               opj_cp_t *cp = j3d->cp;
-
-               if(cp->comment) {
-                       opj_free(cp->comment);
-               }
-               if(cp->matrice) {
-                       opj_free(cp->matrice);
-               }
-               for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
-                       opj_free(cp->tcps[tileno].tccps);
-               }
-               opj_free(cp->tcps);
-               opj_free(cp);
-       }
-
-       opj_free(j3d);
-}
-
-void j3d_setup_encoder(opj_j3d_t *j3d, opj_cparameters_t *parameters, opj_volume_t *volume) {
-       int i, j, tileno, numpocs_tile;
-       opj_cp_t *cp = NULL;
-
-       if(!j3d || !parameters || ! volume) {
-               return;
-       }
-
-       /* create and initialize the coding parameters structure */
-       cp = (opj_cp_t*)opj_malloc(sizeof(opj_cp_t));
-
-       /* keep a link to cp so that we can destroy it later in j3d_destroy_compress */
-       j3d->cp = cp;
-
-       /* set default values for cp */
-       cp->tw = 1;
-       cp->th = 1;
-       cp->tl = 1;
-
-       /* copy user encoding parameters */
-       cp->disto_alloc = parameters->cp_disto_alloc;
-       cp->fixed_alloc = parameters->cp_fixed_alloc;
-       cp->fixed_quality = parameters->cp_fixed_quality;
-
-       /* transform and coding method */
-       cp->transform_format = parameters->transform_format;
-       cp->encoding_format = parameters->encoding_format;
-
-       /* mod fixed_quality */
-       if(parameters->cp_matrice) {
-               size_t array_size = parameters->tcp_numlayers * 3 * parameters->numresolution[0] * sizeof(int);
-               cp->matrice = (int *) opj_malloc(array_size);
-               memcpy(cp->matrice, parameters->cp_matrice, array_size);
-       } 
-
-       /* creation of an index file ? */
-       cp->index_on = parameters->index_on;
-       if(cp->index_on) {
-               j3d->volume_info = (opj_volume_info_t*)opj_malloc(sizeof(opj_volume_info_t));
-       }
-       
-       /* tiles */
-       cp->tdx = parameters->cp_tdx;
-       cp->tdy = parameters->cp_tdy;
-       cp->tdz = parameters->cp_tdz;
-       /* tile offset */
-       cp->tx0 = parameters->cp_tx0;
-       cp->ty0 = parameters->cp_ty0;
-       cp->tz0 = parameters->cp_tz0;
-       /* comment string */
-       if(parameters->cp_comment) {
-               cp->comment = (char*)opj_malloc(strlen(parameters->cp_comment) + 1);
-               if(cp->comment) {
-                       strcpy(cp->comment, parameters->cp_comment);
-               }
-       }
-
-       /*calculate other encoding parameters*/
-       if (parameters->tile_size_on) {
-               cp->tw = int_ceildiv(volume->x1 - cp->tx0, cp->tdx);
-               cp->th = int_ceildiv(volume->y1 - cp->ty0, cp->tdy);
-               cp->tl = int_ceildiv(volume->z1 - cp->tz0, cp->tdz);
-       } else {
-               cp->tdx = volume->x1 - cp->tx0;
-               cp->tdy = volume->y1 - cp->ty0;
-               cp->tdz = volume->z1 - cp->tz0;
-       }
-
-       /* initialize the multiple tiles */
-       /* ---------------------------- */
-       cp->tcps = (opj_tcp_t *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(opj_tcp_t));
-
-       for (tileno = 0; tileno < cp->tw * cp->th * cp->tl; tileno++) {
-               opj_tcp_t *tcp = &cp->tcps[tileno];
-               tcp->numlayers = parameters->tcp_numlayers;
-               for (j = 0; j < tcp->numlayers; j++) {
-                       if (cp->fixed_quality) {        /* add fixed_quality */
-                               tcp->distoratio[j] = parameters->tcp_distoratio[j];
-                       } else {
-                               tcp->rates[j] = parameters->tcp_rates[j];
-                       }
-               }
-               tcp->csty = parameters->csty;
-               tcp->prg = parameters->prog_order;
-               tcp->mct = volume->numcomps == 3 ? 1 : 0;
-
-               numpocs_tile = 0;
-               tcp->POC = 0;
-               if (parameters->numpocs) {
-                       /* initialisation of POC */
-                       tcp->POC = 1;
-                       for (i = 0; i < parameters->numpocs; i++) {
-                               if((tileno == parameters->POC[i].tile - 1) || (parameters->POC[i].tile == -1)) {
-                                       opj_poc_t *tcp_poc = &tcp->pocs[numpocs_tile];
-                                       tcp_poc->resno0         = parameters->POC[numpocs_tile].resno0;
-                                       tcp_poc->compno0        = parameters->POC[numpocs_tile].compno0;
-                                       tcp_poc->layno1         = parameters->POC[numpocs_tile].layno1;
-                                       tcp_poc->resno1         = parameters->POC[numpocs_tile].resno1;
-                                       tcp_poc->compno1        = parameters->POC[numpocs_tile].compno1;
-                                       tcp_poc->prg            = parameters->POC[numpocs_tile].prg;
-                                       tcp_poc->tile           = parameters->POC[numpocs_tile].tile;
-                                       numpocs_tile++;
-                               }
-                       }
-               }
-               tcp->numpocs = numpocs_tile;
-
-               tcp->tccps = (opj_tccp_t *) opj_malloc(volume->numcomps * sizeof(opj_tccp_t));
-               
-               for (i = 0; i < volume->numcomps; i++) {
-                       opj_tccp_t *tccp = &tcp->tccps[i];
-                       tccp->csty = parameters->csty & J3D_CCP_CSTY_PRT;       /* 0 => standard precint || 1 => custom-defined precinct  */
-                       tccp->numresolution[0] = parameters->numresolution[0];
-                       tccp->numresolution[1] = parameters->numresolution[1];
-                       tccp->numresolution[2] = parameters->numresolution[2];
-                                               assert (parameters->cblock_init[0] <= T1_MAXCBLKW);
-                                               assert (parameters->cblock_init[0] >= T1_MINCBLKW);
-                                               assert (parameters->cblock_init[1] <= T1_MAXCBLKH);
-                                               assert (parameters->cblock_init[1] >= T1_MINCBLKH);
-                                               assert (parameters->cblock_init[2] <= T1_MAXCBLKD);
-                                               assert (parameters->cblock_init[2] >= T1_MINCBLKD);
-                       tccp->cblk[0] = int_floorlog2(parameters->cblock_init[0]); 
-                       tccp->cblk[1] = int_floorlog2(parameters->cblock_init[1]); 
-                       tccp->cblk[2] = int_floorlog2(parameters->cblock_init[2]); 
-                                               assert (tccp->cblk[0]+tccp->cblk[1]+tccp->cblk[1] <= T1_MAXWHD);
-                       tccp->cblksty = parameters->mode; /*Codeblock style --> Table A.19 (default 0)*/
-
-                       /*ATK / transform */
-                       tccp->reversible = parameters->irreversible ? 0 : 1; /* 0 => DWT 9-7 || 1 => DWT 5-3  */
-                       for (j = 0; j < 3; j++) {
-                                       tccp->dwtid[j] = parameters->irreversible ? 0 : 1; /* 0 => DWT 9-7 || 1 => DWT 5-3  */
-                       }
-                                               
-                       /* Quantification: SEQNT (Scalar Expounded, value for each subband) / NOQNT (no quant)*/
-                       tccp->qntsty = parameters->irreversible ? J3D_CCP_QNTSTY_SEQNT : J3D_CCP_QNTSTY_NOQNT;
-                       tccp->numgbits = 2;
-                       if (i == parameters->roi_compno) {
-                               tccp->roishift = parameters->roi_shift;
-                       } else {
-                               tccp->roishift = 0;
-                       }
-                       /* Custom defined precints */
-                       if (parameters->csty & J3D_CCP_CSTY_PRT) {
-                               int k;
-                               for (k = 0; k < 3; k++) {
-                                       int p = 0;
-                                       for (j = tccp->numresolution[k] - 1; j >= 0; j--) {
-                                               if (p < parameters->res_spec) {/* p < number of precinct size specifications */
-                                                       if (parameters->prct_init[k][p] < 1) {
-                                                               tccp->prctsiz[k][j] = 1;
-                                                       } else {
-                                                               tccp->prctsiz[k][j] = int_floorlog2(parameters->prct_init[k][p]);
-                                                       }
-                                               } else {
-                                                       int res_spec = parameters->res_spec;
-                                                       int size_prct = parameters->prct_init[k][res_spec - 1] >> (p - (res_spec - 1));
-                                                       if (size_prct < 1) {
-                                                               tccp->prctsiz[k][j] = 1;
-                                                       } else {
-                                                               tccp->prctsiz[k][j] = int_floorlog2(size_prct);
-                                                       }
-                                               }
-                                       }
-                                       p++;
-                               }
-                       } else {
-                               int k;
-                               for (k = 0; k < 3; k++) {
+opj_j3d_t* j3d_create_compress(opj_common_ptr cinfo)
+{
+    opj_j3d_t *j3d = (opj_j3d_t*)opj_malloc(sizeof(opj_j3d_t));
+    if (j3d) {
+        j3d->cinfo = cinfo;
+    }
+    return j3d;
+}
+
+void j3d_destroy_compress(opj_j3d_t *j3d)
+{
+    int tileno;
+
+    if (!j3d) {
+        return;
+    }
+
+    if (j3d->volume_info != NULL) {
+        opj_volume_info_t *volume_info = j3d->volume_info;
+        if (volume_info->index_on && j3d->cp) {
+            opj_cp_t *cp = j3d->cp;
+            for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
+                opj_tile_info_t *tile_info = &volume_info->tile[tileno];
+                opj_free(tile_info->thresh);
+                opj_free(tile_info->packet);
+            }
+            opj_free(volume_info->tile);
+        }
+        opj_free(volume_info);
+    }
+    if (j3d->cp != NULL) {
+        opj_cp_t *cp = j3d->cp;
+
+        if (cp->comment) {
+            opj_free(cp->comment);
+        }
+        if (cp->matrice) {
+            opj_free(cp->matrice);
+        }
+        for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
+            opj_free(cp->tcps[tileno].tccps);
+        }
+        opj_free(cp->tcps);
+        opj_free(cp);
+    }
+
+    opj_free(j3d);
+}
+
+void j3d_setup_encoder(opj_j3d_t *j3d, opj_cparameters_t *parameters,
+                       opj_volume_t *volume)
+{
+    int i, j, tileno, numpocs_tile;
+    opj_cp_t *cp = NULL;
+
+    if (!j3d || !parameters || ! volume) {
+        return;
+    }
+
+    /* create and initialize the coding parameters structure */
+    cp = (opj_cp_t*)opj_malloc(sizeof(opj_cp_t));
+
+    /* keep a link to cp so that we can destroy it later in j3d_destroy_compress */
+    j3d->cp = cp;
+
+    /* set default values for cp */
+    cp->tw = 1;
+    cp->th = 1;
+    cp->tl = 1;
+
+    /* copy user encoding parameters */
+    cp->disto_alloc = parameters->cp_disto_alloc;
+    cp->fixed_alloc = parameters->cp_fixed_alloc;
+    cp->fixed_quality = parameters->cp_fixed_quality;
+
+    /* transform and coding method */
+    cp->transform_format = parameters->transform_format;
+    cp->encoding_format = parameters->encoding_format;
+
+    /* mod fixed_quality */
+    if (parameters->cp_matrice) {
+        size_t array_size = parameters->tcp_numlayers * 3 * parameters->numresolution[0]
+                            * sizeof(int);
+        cp->matrice = (int *) opj_malloc(array_size);
+        memcpy(cp->matrice, parameters->cp_matrice, array_size);
+    }
+
+    /* creation of an index file ? */
+    cp->index_on = parameters->index_on;
+    if (cp->index_on) {
+        j3d->volume_info = (opj_volume_info_t*)opj_malloc(sizeof(opj_volume_info_t));
+    }
+
+    /* tiles */
+    cp->tdx = parameters->cp_tdx;
+    cp->tdy = parameters->cp_tdy;
+    cp->tdz = parameters->cp_tdz;
+    /* tile offset */
+    cp->tx0 = parameters->cp_tx0;
+    cp->ty0 = parameters->cp_ty0;
+    cp->tz0 = parameters->cp_tz0;
+    /* comment string */
+    if (parameters->cp_comment) {
+        cp->comment = (char*)opj_malloc(strlen(parameters->cp_comment) + 1);
+        if (cp->comment) {
+            strcpy(cp->comment, parameters->cp_comment);
+        }
+    }
+
+    /*calculate other encoding parameters*/
+    if (parameters->tile_size_on) {
+        cp->tw = int_ceildiv(volume->x1 - cp->tx0, cp->tdx);
+        cp->th = int_ceildiv(volume->y1 - cp->ty0, cp->tdy);
+        cp->tl = int_ceildiv(volume->z1 - cp->tz0, cp->tdz);
+    } else {
+        cp->tdx = volume->x1 - cp->tx0;
+        cp->tdy = volume->y1 - cp->ty0;
+        cp->tdz = volume->z1 - cp->tz0;
+    }
+
+    /* initialize the multiple tiles */
+    /* ---------------------------- */
+    cp->tcps = (opj_tcp_t *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(
+                                            opj_tcp_t));
+
+    for (tileno = 0; tileno < cp->tw * cp->th * cp->tl; tileno++) {
+        opj_tcp_t *tcp = &cp->tcps[tileno];
+        tcp->numlayers = parameters->tcp_numlayers;
+        for (j = 0; j < tcp->numlayers; j++) {
+            if (cp->fixed_quality) {    /* add fixed_quality */
+                tcp->distoratio[j] = parameters->tcp_distoratio[j];
+            } else {
+                tcp->rates[j] = parameters->tcp_rates[j];
+            }
+        }
+        tcp->csty = parameters->csty;
+        tcp->prg = parameters->prog_order;
+        tcp->mct = volume->numcomps == 3 ? 1 : 0;
+
+        numpocs_tile = 0;
+        tcp->POC = 0;
+        if (parameters->numpocs) {
+            /* initialisation of POC */
+            tcp->POC = 1;
+            for (i = 0; i < parameters->numpocs; i++) {
+                if ((tileno == parameters->POC[i].tile - 1) ||
+                        (parameters->POC[i].tile == -1)) {
+                    opj_poc_t *tcp_poc = &tcp->pocs[numpocs_tile];
+                    tcp_poc->resno0     = parameters->POC[numpocs_tile].resno0;
+                    tcp_poc->compno0    = parameters->POC[numpocs_tile].compno0;
+                    tcp_poc->layno1     = parameters->POC[numpocs_tile].layno1;
+                    tcp_poc->resno1     = parameters->POC[numpocs_tile].resno1;
+                    tcp_poc->compno1    = parameters->POC[numpocs_tile].compno1;
+                    tcp_poc->prg        = parameters->POC[numpocs_tile].prg;
+                    tcp_poc->tile       = parameters->POC[numpocs_tile].tile;
+                    numpocs_tile++;
+                }
+            }
+        }
+        tcp->numpocs = numpocs_tile;
+
+        tcp->tccps = (opj_tccp_t *) opj_malloc(volume->numcomps * sizeof(opj_tccp_t));
+
+        for (i = 0; i < volume->numcomps; i++) {
+            opj_tccp_t *tccp = &tcp->tccps[i];
+            tccp->csty = parameters->csty &
+                         J3D_CCP_CSTY_PRT;   /* 0 => standard precint || 1 => custom-defined precinct  */
+            tccp->numresolution[0] = parameters->numresolution[0];
+            tccp->numresolution[1] = parameters->numresolution[1];
+            tccp->numresolution[2] = parameters->numresolution[2];
+            assert(parameters->cblock_init[0] <= T1_MAXCBLKW);
+            assert(parameters->cblock_init[0] >= T1_MINCBLKW);
+            assert(parameters->cblock_init[1] <= T1_MAXCBLKH);
+            assert(parameters->cblock_init[1] >= T1_MINCBLKH);
+            assert(parameters->cblock_init[2] <= T1_MAXCBLKD);
+            assert(parameters->cblock_init[2] >= T1_MINCBLKD);
+            tccp->cblk[0] = int_floorlog2(parameters->cblock_init[0]);
+            tccp->cblk[1] = int_floorlog2(parameters->cblock_init[1]);
+            tccp->cblk[2] = int_floorlog2(parameters->cblock_init[2]);
+            assert(tccp->cblk[0] + tccp->cblk[1] + tccp->cblk[1] <= T1_MAXWHD);
+            tccp->cblksty = parameters->mode; /*Codeblock style --> Table A.19 (default 0)*/
+
+            /*ATK / transform */
+            tccp->reversible = parameters->irreversible ? 0 :
+                               1; /* 0 => DWT 9-7 || 1 => DWT 5-3  */
+            for (j = 0; j < 3; j++) {
+                tccp->dwtid[j] = parameters->irreversible ? 0 :
+                                 1; /* 0 => DWT 9-7 || 1 => DWT 5-3  */
+            }
+
+            /* Quantification: SEQNT (Scalar Expounded, value for each subband) / NOQNT (no quant)*/
+            tccp->qntsty = parameters->irreversible ? J3D_CCP_QNTSTY_SEQNT :
+                           J3D_CCP_QNTSTY_NOQNT;
+            tccp->numgbits = 2;
+            if (i == parameters->roi_compno) {
+                tccp->roishift = parameters->roi_shift;
+            } else {
+                tccp->roishift = 0;
+            }
+            /* Custom defined precints */
+            if (parameters->csty & J3D_CCP_CSTY_PRT) {
+                int k;
+                for (k = 0; k < 3; k++) {
+                    int p = 0;
+                    for (j = tccp->numresolution[k] - 1; j >= 0; j--) {
+                        if (p < parameters->res_spec) {/* p < number of precinct size specifications */
+                            if (parameters->prct_init[k][p] < 1) {
+                                tccp->prctsiz[k][j] = 1;
+                            } else {
+                                tccp->prctsiz[k][j] = int_floorlog2(parameters->prct_init[k][p]);
+                            }
+                        } else {
+                            int res_spec = parameters->res_spec;
+                            int size_prct = parameters->prct_init[k][res_spec - 1] >> (p - (res_spec - 1));
+                            if (size_prct < 1) {
+                                tccp->prctsiz[k][j] = 1;
+                            } else {
+                                tccp->prctsiz[k][j] = int_floorlog2(size_prct);
+                            }
+                        }
+                    }
+                    p++;
+                }
+            } else {
+                int k;
+                for (k = 0; k < 3; k++) {
                     for (j = 0; j < tccp->numresolution[k]; j++) {
                         tccp->prctsiz[k][j] = 15;
-                                       }
-                               }
-                       }
-                       /*Calcular stepsize for each subband (if NOQNT -->stepsize = 1.0)*/
-                       dwt_calc_explicit_stepsizes(tccp, volume->comps[i].prec);
-               }
-       }
+                    }
+                }
+            }
+            /*Calcular stepsize for each subband (if NOQNT -->stepsize = 1.0)*/
+            dwt_calc_explicit_stepsizes(tccp, volume->comps[i].prec);
+        }
+    }
 }
 
 /**
@@ -1987,371 +2135,421 @@ Create an index file
 @param index Index filename
 @return Returns 1 if successful, returns 0 otherwise
 */
-static int j3d_create_index(opj_j3d_t *j3d, opj_cio_t *cio, opj_volume_info_t *volume_info, char *index) {
-       
-       int tileno, compno, layno, resno, precno, pack_nb, x, y, z;
-       FILE *stream = NULL;
-       double total_disto = 0;
-
-       volume_info->codestream_size = cio_tell(cio) + j3d->pos_correction;     /* Correction 14/4/03 suite rmq de Patrick */
-
-       stream = fopen(index, "w");
-       if (!stream) {
-               opj_event_msg(j3d->cinfo, EVT_ERROR, "failed to open %s for writing\n", index);
-               return 0;
-       }
-       
-       fprintf(stream, "w %d\t h %d\t l %d\n", volume_info->volume_w, volume_info->volume_h, volume_info->volume_l);
-       fprintf(stream, "TRASNFORM\t%d\n", volume_info->transform_format);
-       fprintf(stream, "ENTROPY CODING\t%d\n", volume_info->encoding_format);
-       fprintf(stream, "PROG\t%d\n", volume_info->prog);
-       fprintf(stream, "TILE\tx %d y %d z %d\n", volume_info->tile_x, volume_info->tile_y, volume_info->tile_z);
-       fprintf(stream, "NOTILE\tx %d y %d z %d\n", volume_info->tw, volume_info->th, volume_info->tl);
-       fprintf(stream, "COMPONENTS\t%d\n", volume_info->comp);
-       fprintf(stream, "LAYER\t%d\n", volume_info->layer);
-       fprintf(stream, "RESOLUTIONS\tx %d y %d z %d\n", volume_info->decomposition[0], volume_info->decomposition[1], volume_info->decomposition[2]);
-       
-       fprintf(stream, "Precint sizes for each resolution:\n");
-       for (resno = volume_info->decomposition[0]; resno >= 0; resno--) {
-               fprintf(stream, "Resno %d \t [%d,%d,%d] \n", resno,
-                       (1 << volume_info->tile[0].prctsiz[0][resno]), (1 << volume_info->tile[0].prctsiz[0][resno]), (1 << volume_info->tile[0].prctsiz[2][resno]));   /* based on tile 0 */
-       }
-       fprintf(stream, "HEADER_END\t%d\n", volume_info->main_head_end);
-       fprintf(stream, "CODESTREAM\t%d\n", volume_info->codestream_size);
-       fprintf(stream, "Num_tile Start_pos End_header End_pos Distotile Nbpix Ratio\n");
-       for (tileno = 0; tileno < (volume_info->tw * volume_info->th * volume_info->tl); tileno++) {
-               fprintf(stream, "%4d\t%9d\t%9d\t%9d\t%9e\t%9d\t%9e\n",
-                       volume_info->tile[tileno].num_tile,
-                       volume_info->tile[tileno].start_pos,
-                       volume_info->tile[tileno].end_header,
-                       volume_info->tile[tileno].end_pos,
-                       volume_info->tile[tileno].distotile, volume_info->tile[tileno].nbpix,
-                       volume_info->tile[tileno].distotile / volume_info->tile[tileno].nbpix);
-       }
-       
-       for (tileno = 0; tileno < (volume_info->tw * volume_info->th * volume_info->tl); tileno++) {
-               int start_pos, end_pos;
-               double disto = 0;
-               pack_nb = 0;
-               if (volume_info->prog == LRCP) {        /* LRCP */
-                       fprintf(stream, "pack_nb tileno layno resno compno precno start_pos  end_pos   disto\n");
-                       for (layno = 0; layno < volume_info->layer; layno++) {
-                               for (resno = 0; resno < volume_info->decomposition[0] + 1; resno++) {
-                                       for (compno = 0; compno < volume_info->comp; compno++) {
-                                               int prec_max = volume_info->tile[tileno].prctno[0][resno] * volume_info->tile[tileno].prctno[1][resno] * volume_info->tile[tileno].prctno[2][resno];
-                                               for (precno = 0; precno < prec_max; precno++) {
-                                                       start_pos = volume_info->tile[tileno].packet[pack_nb].start_pos;
-                                                       end_pos = volume_info->tile[tileno].packet[pack_nb].end_pos;
-                                                       disto = volume_info->tile[tileno].packet[pack_nb].disto;
-                                                       fprintf(stream, "%4d %6d %7d %5d %6d %6d %9d %9d %8e\n",pack_nb, tileno, layno, resno, compno, precno, start_pos, end_pos, disto);
-                                                       total_disto += disto;
-                                                       pack_nb++;
-                                               }
-                                       }
-                               }
-                       }
-               } /* LRCP */
-               else if (volume_info->prog == RLCP) {   /* RLCP */
-                       /*
-                       fprintf(stream, "pack_nb tileno resno layno compno precno start_pos  end_pos   disto");
-                       */
-                       for (resno = 0; resno < volume_info->decomposition[0] + 1; resno++) {
-                               for (layno = 0; layno < volume_info->layer; layno++) {
-                                       for (compno = 0; compno < volume_info->comp; compno++) {
-                                               int prec_max = volume_info->tile[tileno].prctno[0][resno] * volume_info->tile[tileno].prctno[1][resno]* volume_info->tile[tileno].prctno[2][resno];
-                                               for (precno = 0; precno < prec_max; precno++) {
-                                                       start_pos = volume_info->tile[tileno].packet[pack_nb].start_pos;
-                                                       end_pos = volume_info->tile[tileno].packet[pack_nb].end_pos;
-                                                       disto = volume_info->tile[tileno].packet[pack_nb].disto;
-                                                       fprintf(stream, "%4d %6d %5d %7d %6d %6d %9d %9d %8e\n",
-                                                               pack_nb, tileno, resno, layno, compno, precno, start_pos, end_pos, disto);
-                                                       total_disto += disto;
-                                                       pack_nb++;
-                                               }
-                                       }
-                               }
-                       }
-               } /* RLCP */
-               else if (volume_info->prog == RPCL) {   /* RPCL */
-                       /*
-                       fprintf(stream, "\npack_nb tileno resno precno compno layno start_pos  end_pos   disto\n"); 
-                       */
-                       for (resno = 0; resno < volume_info->decomposition[0] + 1; resno++) {
-                               /* I suppose components have same XRsiz, YRsiz */
-                               /*int x0 = volume_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)volume_info->tw ) * volume_info->tw * volume_info->tile_x;*/
-                               /*int y0 = volume_info->tile_Ox + (int)floor( (float)tileno/(float)volume_info->tw ) * volume_info->tile_y;*/
-                               int x0 = volume_info->tile_Ox + (int)floor( (float)tileno/(float)volume_info->tw ) * volume_info->tile_x;
-                               int y0 = volume_info->tile_Oy + (int)floor( (float)tileno/(float)volume_info->th ) * volume_info->tile_y;
-                               int z0 = volume_info->tile_Ox + (int)floor( (float)tileno/(float)volume_info->tl ) * volume_info->tile_z;
-                               int x1 = x0 + volume_info->tile_x;
-                               int y1 = y0 + volume_info->tile_y;
-                               int z1 = z0 + volume_info->tile_z;
-                               for(z = z0; z < z1; z++) {
-                                       for(y = y0; y < y1; y++) {
-                                               for(x = x0; x < x1; x++) {
-                                                       for (compno = 0; compno < volume_info->comp; compno++) {
-                                                               int prec_max = volume_info->tile[tileno].prctno[0][resno] * volume_info->tile[tileno].prctno[1][resno] * volume_info->tile[tileno].prctno[2][resno];
-                                                               for (precno = 0; precno < prec_max; precno++) {
-                                                                       int pcnx = volume_info->tile[tileno].prctno[0][resno];
-                                                                       int pcx = (int) pow( 2, volume_info->tile[tileno].prctsiz[0][resno] + volume_info->decomposition[0] - resno );
-                                                                       int pcy = (int) pow( 2, volume_info->tile[tileno].prctsiz[1][resno] + volume_info->decomposition[1] - resno );
-                                                                       int pcz = (int) pow( 2, volume_info->tile[tileno].prctsiz[2][resno] + volume_info->decomposition[2] - resno );
-                                                                       int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx;
-                                                                       int precno_y = (int) floor( (float)precno/(float)pcnx );
-                                                                       if (precno_y*pcy == y ) {
-                                                                               if (precno_x*pcx == x ) {
-                                                                                       for (layno = 0; layno < volume_info->layer; layno++) {
-                                                                                               start_pos = volume_info->tile[tileno].packet[pack_nb].start_pos;
-                                                                                               end_pos = volume_info->tile[tileno].packet[pack_nb].end_pos;
-                                                                                               disto = volume_info->tile[tileno].packet[pack_nb].disto;
-                                                                                               fprintf(stream, "%4d %6d %5d %6d %6d %7d %9d %9d %8e\n",
-                                                                                                       pack_nb, tileno, resno, precno, compno, layno, start_pos, end_pos, disto); 
-                                                                                               total_disto += disto;
-                                                                                               pack_nb++; 
-                                                                                       }
-                                                                               }
-                                                                       }
-                                                               } /* precno */
-                                                       } /* compno */
-                                               } /* x = x0..x1 */
-                                       } /* y = y0..y1 */
-                               } /* z = z0..z1 */
-                       } /* resno */
-               } /* RPCL */
-               else if (volume_info->prog == PCRL) {   /* PCRL */
-                       /* I suppose components have same XRsiz, YRsiz */
-                       int x0 = volume_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)volume_info->tw ) * volume_info->tw * volume_info->tile_x;
-                       int y0 = volume_info->tile_Ox + (int)floor( (float)tileno/(float)volume_info->tw ) * volume_info->tile_y;
-                       int z0 = volume_info->tile_Oz + (int)floor( (float)tileno/(float)volume_info->tw ) * volume_info->tile_z;
-                       int x1 = x0 + volume_info->tile_x;
-                       int y1 = y0 + volume_info->tile_y;
-                       int z1 = z0 + volume_info->tile_z;
-                       /*
-                       fprintf(stream, "\npack_nb tileno precno compno resno layno start_pos  end_pos   disto\n"); 
-                       */
-                       for(z = z0; z < z1; z++) {
-                               for(y = y0; y < y1; y++) {
-                                       for(x = x0; x < x1; x++) {
-                                               for (compno = 0; compno < volume_info->comp; compno++) {
-                                                       for (resno = 0; resno < volume_info->decomposition[0] + 1; resno++) {
-                                                               int prec_max = volume_info->tile[tileno].prctno[0][resno] * volume_info->tile[tileno].prctno[1][resno];
-                                                               for (precno = 0; precno < prec_max; precno++) {
-                                                               int pcnx = volume_info->tile[tileno].prctno[0][resno];
-                                                               int pcx = (int) pow( 2, volume_info->tile[tileno].prctsiz[0][resno] + volume_info->decomposition[0] - resno );
-                                                               int pcy = (int) pow( 2, volume_info->tile[tileno].prctsiz[1][resno] + volume_info->decomposition[1] - resno );
-                                                               int pcz = (int) pow( 2, volume_info->tile[tileno].prctsiz[2][resno] + volume_info->decomposition[2] - resno );
-                                                               int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx;
-                                                               int precno_y = (int) floor( (float)precno/(float)pcnx );
-                                                               int precno_z = (int) floor( (float)precno/(float)pcnx );
-                                                               if (precno_z*pcz == z ) {
-                                                                       if (precno_y*pcy == y ) {
-                                                                               if (precno_x*pcx == x ) {
-                                                                                       for (layno = 0; layno < volume_info->layer; layno++) {
-                                                                                               start_pos = volume_info->tile[tileno].packet[pack_nb].start_pos;
-                                                                                               end_pos = volume_info->tile[tileno].packet[pack_nb].end_pos;
-                                                                                               disto = volume_info->tile[tileno].packet[pack_nb].disto;
-                                                                                               fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %8e\n",
-                                                                                                       pack_nb, tileno, precno, compno, resno, layno, start_pos, end_pos, disto); 
-                                                                                               total_disto += disto;
-                                                                                               pack_nb++; 
-                                                                                       }
-                                                                               }
-                                                                       }
-                                                               }
-                                                       } /* precno */
-                                               } /* resno */
-                                       } /* compno */
-                               } /* x = x0..x1 */
-                       } /* y = y0..y1 */
-                       }
-               } /* PCRL */
-               else {  /* CPRL */
-                       /*
-                       fprintf(stream, "\npack_nb tileno compno precno resno layno start_pos  end_pos   disto\n"); 
-                       */
-                       for (compno = 0; compno < volume_info->comp; compno++) {
-                               /* I suppose components have same XRsiz, YRsiz */
-                               int x0 = volume_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)volume_info->tw ) * volume_info->tw * volume_info->tile_x;
-                               int y0 = volume_info->tile_Ox + (int)floor( (float)tileno/(float)volume_info->tw ) * volume_info->tile_y;
-                               int z0 = volume_info->tile_Oz + (int)floor( (float)tileno/(float)volume_info->tw ) * volume_info->tile_z;
-                               int x1 = x0 + volume_info->tile_x;
-                               int y1 = y0 + volume_info->tile_y;
-                               int z1 = z0 + volume_info->tile_z;
-                               for(z = z0; z < z1; z++) {
-                                       for(y = y0; y < y1; y++) {
-                                               for(x = x0; x < x1; x++) {
-                                                       for (resno = 0; resno < volume_info->decomposition[0] + 1; resno++) {
-                                                               int prec_max = volume_info->tile[tileno].prctno[0][resno] * volume_info->tile[tileno].prctno[1][resno] * volume_info->tile[tileno].prctno[2][resno];
-                                                               for (precno = 0; precno < prec_max; precno++) {
-                                                                       int pcnx = volume_info->tile[tileno].prctno[0][resno];
-                                                                       int pcny = volume_info->tile[tileno].prctno[1][resno];
-                                                                       int pcx = (int) pow( 2, volume_info->tile[tileno].prctsiz[0][resno] + volume_info->decomposition[0] - resno );
-                                                                       int pcy = (int) pow( 2, volume_info->tile[tileno].prctsiz[1][resno] + volume_info->decomposition[1] - resno );
-                                                                       int pcz = (int) pow( 2, volume_info->tile[tileno].prctsiz[2][resno] + volume_info->decomposition[2] - resno );
-                                                                       int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx;
-                                                                       int precno_y = (int) floor( (float)precno/(float)pcnx );
-                                                                       int precno_z = 0; /*???*/
-                                                                       if (precno_z*pcz == z ) {
-                                                                               if (precno_y*pcy == y ) {
-                                                                                       if (precno_x*pcx == x ) {
-                                                                                               for (layno = 0; layno < volume_info->layer; layno++) {
-                                                                                                       start_pos = volume_info->tile[tileno].packet[pack_nb].start_pos;
-                                                                                                       end_pos = volume_info->tile[tileno].packet[pack_nb].end_pos;
-                                                                                                       disto = volume_info->tile[tileno].packet[pack_nb].disto;
-                                                                                                       fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %8e\n",
-                                                                                                               pack_nb, tileno, compno, precno, resno, layno, start_pos, end_pos, disto); 
-                                                                                                       total_disto += disto;
-                                                                                                       pack_nb++; 
-                                                                                               }
-                                                                                       }
-                                                                               }
-                                                                       }
-                                                               } /* precno */
-                                                       } /* resno */
-                                               } /* x = x0..x1 */
-                                       } /* y = y0..y1 */
-                               } /* z = z0..z1 */
-                       } /* comno */
-               } /* CPRL */   
-       } /* tileno */
-       
-       fprintf(stream, "SE_MAX\t%8e\n", volume_info->D_max);   /* SE max */
-       fprintf(stream, "SE_TOTAL\t%.8e\n", total_disto);                       /* SE totale */
-       
-
-       fclose(stream);
-
-       return 1;
-}
-
-bool j3d_encode(opj_j3d_t *j3d, opj_cio_t *cio, opj_volume_t *volume, char *index) {
-       int tileno, compno;
-       opj_volume_info_t *volume_info = NULL;
-       opj_cp_t *cp = NULL;
-       opj_tcd_t *tcd = NULL;  /* TCD component */
-
-       j3d->cio = cio; 
-       j3d->volume = volume;
-       cp = j3d->cp;
-
-       /*j3d_dump_volume(stdout, volume);
-       j3d_dump_cp(stdout, volume, cp);*/
-
-       /* INDEX >> */
-       volume_info = j3d->volume_info;
-       if (volume_info && cp->index_on) {
-               volume_info->index_on = cp->index_on;
-               volume_info->tile = (opj_tile_info_t *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(opj_tile_info_t));
-               volume_info->volume_w = volume->x1 - volume->x0;
-               volume_info->volume_h = volume->y1 - volume->y0;
-               volume_info->volume_l = volume->z1 - volume->z0;
-               volume_info->prog = (&cp->tcps[0])->prg;
-               volume_info->tw = cp->tw;
-               volume_info->th = cp->th;
-               volume_info->tl = cp->tl;
-               volume_info->tile_x = cp->tdx;  /* new version parser */
-               volume_info->tile_y = cp->tdy;  /* new version parser */
-               volume_info->tile_z = cp->tdz;  /* new version parser */
-               volume_info->tile_Ox = cp->tx0; /* new version parser */
-               volume_info->tile_Oy = cp->ty0; /* new version parser */
-               volume_info->tile_Oz = cp->tz0; /* new version parser */
-               volume_info->transform_format = cp->transform_format;
-               volume_info->encoding_format = cp->encoding_format;
-               volume_info->comp = volume->numcomps;
-               volume_info->layer = (&cp->tcps[0])->numlayers;
-               volume_info->decomposition[0] = (&cp->tcps[0])->tccps->numresolution[0] - 1;
-               volume_info->decomposition[1] = (&cp->tcps[0])->tccps->numresolution[1] - 1;
-               volume_info->decomposition[2] = (&cp->tcps[0])->tccps->numresolution[2] - 1;
-               volume_info->D_max = 0;         /* ADD Marcela */
-       }
-       /* << INDEX */
-
-       j3d_write_soc(j3d);
-       j3d_write_siz(j3d);
-       if (j3d->cinfo->codec_format == CODEC_J3D) {
-               j3d_write_cap(j3d);
-               j3d_write_nsi(j3d);
-       }
-
-       /*if (j3d->cp->transform_format != TRF_2D_DWT || j3d->cp->encoding_format != ENCOD_2EB)*/
-               j3d_write_com(j3d);
-
-       j3d_write_cod(j3d);
-       j3d_write_qcd(j3d);
-       for (compno = 0; compno < volume->numcomps; compno++) {
-               opj_tcp_t *tcp = &cp->tcps[0];
-               if (tcp->tccps[compno].roishift)
-                       j3d_write_rgn(j3d, compno, 0);                  
-       }
-       /*Optional 15444-2 markers*/
-       if (j3d->cp->tcps->tccps[0].atk != NULL)
+static int j3d_create_index(opj_j3d_t *j3d, opj_cio_t *cio,
+                            opj_volume_info_t *volume_info, char *index)
+{
+
+    int tileno, compno, layno, resno, precno, pack_nb, x, y, z;
+    FILE *stream = NULL;
+    double total_disto = 0;
+
+    volume_info->codestream_size = cio_tell(cio) +
+                                   j3d->pos_correction; /* Correction 14/4/03 suite rmq de Patrick */
+
+    stream = fopen(index, "w");
+    if (!stream) {
+        opj_event_msg(j3d->cinfo, EVT_ERROR, "failed to open %s for writing\n", index);
+        return 0;
+    }
+
+    fprintf(stream, "w %d\t h %d\t l %d\n", volume_info->volume_w,
+            volume_info->volume_h, volume_info->volume_l);
+    fprintf(stream, "TRASNFORM\t%d\n", volume_info->transform_format);
+    fprintf(stream, "ENTROPY CODING\t%d\n", volume_info->encoding_format);
+    fprintf(stream, "PROG\t%d\n", volume_info->prog);
+    fprintf(stream, "TILE\tx %d y %d z %d\n", volume_info->tile_x,
+            volume_info->tile_y, volume_info->tile_z);
+    fprintf(stream, "NOTILE\tx %d y %d z %d\n", volume_info->tw, volume_info->th,
+            volume_info->tl);
+    fprintf(stream, "COMPONENTS\t%d\n", volume_info->comp);
+    fprintf(stream, "LAYER\t%d\n", volume_info->layer);
+    fprintf(stream, "RESOLUTIONS\tx %d y %d z %d\n", volume_info->decomposition[0],
+            volume_info->decomposition[1], volume_info->decomposition[2]);
+
+    fprintf(stream, "Precint sizes for each resolution:\n");
+    for (resno = volume_info->decomposition[0]; resno >= 0; resno--) {
+        fprintf(stream, "Resno %d \t [%d,%d,%d] \n", resno,
+                (1 << volume_info->tile[0].prctsiz[0][resno]),
+                (1 << volume_info->tile[0].prctsiz[0][resno]),
+                (1 << volume_info->tile[0].prctsiz[2][resno]));   /* based on tile 0 */
+    }
+    fprintf(stream, "HEADER_END\t%d\n", volume_info->main_head_end);
+    fprintf(stream, "CODESTREAM\t%d\n", volume_info->codestream_size);
+    fprintf(stream,
+            "Num_tile Start_pos End_header End_pos Distotile Nbpix Ratio\n");
+    for (tileno = 0; tileno < (volume_info->tw * volume_info->th * volume_info->tl);
+            tileno++) {
+        fprintf(stream, "%4d\t%9d\t%9d\t%9d\t%9e\t%9d\t%9e\n",
+                volume_info->tile[tileno].num_tile,
+                volume_info->tile[tileno].start_pos,
+                volume_info->tile[tileno].end_header,
+                volume_info->tile[tileno].end_pos,
+                volume_info->tile[tileno].distotile, volume_info->tile[tileno].nbpix,
+                volume_info->tile[tileno].distotile / volume_info->tile[tileno].nbpix);
+    }
+
+    for (tileno = 0; tileno < (volume_info->tw * volume_info->th * volume_info->tl);
+            tileno++) {
+        int start_pos, end_pos;
+        double disto = 0;
+        pack_nb = 0;
+        if (volume_info->prog == LRCP) {    /* LRCP */
+            fprintf(stream,
+                    "pack_nb tileno layno resno compno precno start_pos  end_pos   disto\n");
+            for (layno = 0; layno < volume_info->layer; layno++) {
+                for (resno = 0; resno < volume_info->decomposition[0] + 1; resno++) {
+                    for (compno = 0; compno < volume_info->comp; compno++) {
+                        int prec_max = volume_info->tile[tileno].prctno[0][resno] *
+                                       volume_info->tile[tileno].prctno[1][resno] *
+                                       volume_info->tile[tileno].prctno[2][resno];
+                        for (precno = 0; precno < prec_max; precno++) {
+                            start_pos = volume_info->tile[tileno].packet[pack_nb].start_pos;
+                            end_pos = volume_info->tile[tileno].packet[pack_nb].end_pos;
+                            disto = volume_info->tile[tileno].packet[pack_nb].disto;
+                            fprintf(stream, "%4d %6d %7d %5d %6d %6d %9d %9d %8e\n", pack_nb, tileno, layno,
+                                    resno, compno, precno, start_pos, end_pos, disto);
+                            total_disto += disto;
+                            pack_nb++;
+                        }
+                    }
+                }
+            }
+        } /* LRCP */
+        else if (volume_info->prog == RLCP) {   /* RLCP */
+            /*
+            fprintf(stream, "pack_nb tileno resno layno compno precno start_pos  end_pos   disto");
+            */
+            for (resno = 0; resno < volume_info->decomposition[0] + 1; resno++) {
+                for (layno = 0; layno < volume_info->layer; layno++) {
+                    for (compno = 0; compno < volume_info->comp; compno++) {
+                        int prec_max = volume_info->tile[tileno].prctno[0][resno] *
+                                       volume_info->tile[tileno].prctno[1][resno] *
+                                       volume_info->tile[tileno].prctno[2][resno];
+                        for (precno = 0; precno < prec_max; precno++) {
+                            start_pos = volume_info->tile[tileno].packet[pack_nb].start_pos;
+                            end_pos = volume_info->tile[tileno].packet[pack_nb].end_pos;
+                            disto = volume_info->tile[tileno].packet[pack_nb].disto;
+                            fprintf(stream, "%4d %6d %5d %7d %6d %6d %9d %9d %8e\n",
+                                    pack_nb, tileno, resno, layno, compno, precno, start_pos, end_pos, disto);
+                            total_disto += disto;
+                            pack_nb++;
+                        }
+                    }
+                }
+            }
+        } /* RLCP */
+        else if (volume_info->prog == RPCL) {   /* RPCL */
+            /*
+            fprintf(stream, "\npack_nb tileno resno precno compno layno start_pos  end_pos   disto\n");
+            */
+            for (resno = 0; resno < volume_info->decomposition[0] + 1; resno++) {
+                /* I suppose components have same XRsiz, YRsiz */
+                /*int x0 = volume_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)volume_info->tw ) * volume_info->tw * volume_info->tile_x;*/
+                /*int y0 = volume_info->tile_Ox + (int)floor( (float)tileno/(float)volume_info->tw ) * volume_info->tile_y;*/
+                int x0 = volume_info->tile_Ox + (int)floor((float)tileno /
+                         (float)volume_info->tw) * volume_info->tile_x;
+                int y0 = volume_info->tile_Oy + (int)floor((float)tileno /
+                         (float)volume_info->th) * volume_info->tile_y;
+                int z0 = volume_info->tile_Ox + (int)floor((float)tileno /
+                         (float)volume_info->tl) * volume_info->tile_z;
+                int x1 = x0 + volume_info->tile_x;
+                int y1 = y0 + volume_info->tile_y;
+                int z1 = z0 + volume_info->tile_z;
+                for (z = z0; z < z1; z++) {
+                    for (y = y0; y < y1; y++) {
+                        for (x = x0; x < x1; x++) {
+                            for (compno = 0; compno < volume_info->comp; compno++) {
+                                int prec_max = volume_info->tile[tileno].prctno[0][resno] *
+                                               volume_info->tile[tileno].prctno[1][resno] *
+                                               volume_info->tile[tileno].prctno[2][resno];
+                                for (precno = 0; precno < prec_max; precno++) {
+                                    int pcnx = volume_info->tile[tileno].prctno[0][resno];
+                                    int pcx = (int) pow(2, volume_info->tile[tileno].prctsiz[0][resno] +
+                                                        volume_info->decomposition[0] - resno);
+                                    int pcy = (int) pow(2, volume_info->tile[tileno].prctsiz[1][resno] +
+                                                        volume_info->decomposition[1] - resno);
+                                    int pcz = (int) pow(2, volume_info->tile[tileno].prctsiz[2][resno] +
+                                                        volume_info->decomposition[2] - resno);
+                                    int precno_x = precno - (int) floor((float)precno / (float)pcnx) * pcnx;
+                                    int precno_y = (int) floor((float)precno / (float)pcnx);
+                                    if (precno_y * pcy == y) {
+                                        if (precno_x * pcx == x) {
+                                            for (layno = 0; layno < volume_info->layer; layno++) {
+                                                start_pos = volume_info->tile[tileno].packet[pack_nb].start_pos;
+                                                end_pos = volume_info->tile[tileno].packet[pack_nb].end_pos;
+                                                disto = volume_info->tile[tileno].packet[pack_nb].disto;
+                                                fprintf(stream, "%4d %6d %5d %6d %6d %7d %9d %9d %8e\n",
+                                                        pack_nb, tileno, resno, precno, compno, layno, start_pos, end_pos, disto);
+                                                total_disto += disto;
+                                                pack_nb++;
+                                            }
+                                        }
+                                    }
+                                } /* precno */
+                            } /* compno */
+                        } /* x = x0..x1 */
+                    } /* y = y0..y1 */
+                } /* z = z0..z1 */
+            } /* resno */
+        } /* RPCL */
+        else if (volume_info->prog == PCRL) {   /* PCRL */
+            /* I suppose components have same XRsiz, YRsiz */
+            int x0 = volume_info->tile_Ox + tileno - (int)floor((float)tileno /
+                     (float)volume_info->tw) * volume_info->tw * volume_info->tile_x;
+            int y0 = volume_info->tile_Ox + (int)floor((float)tileno /
+                     (float)volume_info->tw) * volume_info->tile_y;
+            int z0 = volume_info->tile_Oz + (int)floor((float)tileno /
+                     (float)volume_info->tw) * volume_info->tile_z;
+            int x1 = x0 + volume_info->tile_x;
+            int y1 = y0 + volume_info->tile_y;
+            int z1 = z0 + volume_info->tile_z;
+            /*
+            fprintf(stream, "\npack_nb tileno precno compno resno layno start_pos  end_pos   disto\n");
+            */
+            for (z = z0; z < z1; z++) {
+                for (y = y0; y < y1; y++) {
+                    for (x = x0; x < x1; x++) {
+                        for (compno = 0; compno < volume_info->comp; compno++) {
+                            for (resno = 0; resno < volume_info->decomposition[0] + 1; resno++) {
+                                int prec_max = volume_info->tile[tileno].prctno[0][resno] *
+                                               volume_info->tile[tileno].prctno[1][resno];
+                                for (precno = 0; precno < prec_max; precno++) {
+                                    int pcnx = volume_info->tile[tileno].prctno[0][resno];
+                                    int pcx = (int) pow(2, volume_info->tile[tileno].prctsiz[0][resno] +
+                                                        volume_info->decomposition[0] - resno);
+                                    int pcy = (int) pow(2, volume_info->tile[tileno].prctsiz[1][resno] +
+                                                        volume_info->decomposition[1] - resno);
+                                    int pcz = (int) pow(2, volume_info->tile[tileno].prctsiz[2][resno] +
+                                                        volume_info->decomposition[2] - resno);
+                                    int precno_x = precno - (int) floor((float)precno / (float)pcnx) * pcnx;
+                                    int precno_y = (int) floor((float)precno / (float)pcnx);
+                                    int precno_z = (int) floor((float)precno / (float)pcnx);
+                                    if (precno_z * pcz == z) {
+                                        if (precno_y * pcy == y) {
+                                            if (precno_x * pcx == x) {
+                                                for (layno = 0; layno < volume_info->layer; layno++) {
+                                                    start_pos = volume_info->tile[tileno].packet[pack_nb].start_pos;
+                                                    end_pos = volume_info->tile[tileno].packet[pack_nb].end_pos;
+                                                    disto = volume_info->tile[tileno].packet[pack_nb].disto;
+                                                    fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %8e\n",
+                                                            pack_nb, tileno, precno, compno, resno, layno, start_pos, end_pos, disto);
+                                                    total_disto += disto;
+                                                    pack_nb++;
+                                                }
+                                            }
+                                        }
+                                    }
+                                } /* precno */
+                            } /* resno */
+                        } /* compno */
+                    } /* x = x0..x1 */
+                } /* y = y0..y1 */
+            }
+        } /* PCRL */
+        else {  /* CPRL */
+            /*
+            fprintf(stream, "\npack_nb tileno compno precno resno layno start_pos  end_pos   disto\n");
+            */
+            for (compno = 0; compno < volume_info->comp; compno++) {
+                /* I suppose components have same XRsiz, YRsiz */
+                int x0 = volume_info->tile_Ox + tileno - (int)floor((float)tileno /
+                         (float)volume_info->tw) * volume_info->tw * volume_info->tile_x;
+                int y0 = volume_info->tile_Ox + (int)floor((float)tileno /
+                         (float)volume_info->tw) * volume_info->tile_y;
+                int z0 = volume_info->tile_Oz + (int)floor((float)tileno /
+                         (float)volume_info->tw) * volume_info->tile_z;
+                int x1 = x0 + volume_info->tile_x;
+                int y1 = y0 + volume_info->tile_y;
+                int z1 = z0 + volume_info->tile_z;
+                for (z = z0; z < z1; z++) {
+                    for (y = y0; y < y1; y++) {
+                        for (x = x0; x < x1; x++) {
+                            for (resno = 0; resno < volume_info->decomposition[0] + 1; resno++) {
+                                int prec_max = volume_info->tile[tileno].prctno[0][resno] *
+                                               volume_info->tile[tileno].prctno[1][resno] *
+                                               volume_info->tile[tileno].prctno[2][resno];
+                                for (precno = 0; precno < prec_max; precno++) {
+                                    int pcnx = volume_info->tile[tileno].prctno[0][resno];
+                                    int pcny = volume_info->tile[tileno].prctno[1][resno];
+                                    int pcx = (int) pow(2, volume_info->tile[tileno].prctsiz[0][resno] +
+                                                        volume_info->decomposition[0] - resno);
+                                    int pcy = (int) pow(2, volume_info->tile[tileno].prctsiz[1][resno] +
+                                                        volume_info->decomposition[1] - resno);
+                                    int pcz = (int) pow(2, volume_info->tile[tileno].prctsiz[2][resno] +
+                                                        volume_info->decomposition[2] - resno);
+                                    int precno_x = precno - (int) floor((float)precno / (float)pcnx) * pcnx;
+                                    int precno_y = (int) floor((float)precno / (float)pcnx);
+                                    int precno_z = 0; /*???*/
+                                    if (precno_z * pcz == z) {
+                                        if (precno_y * pcy == y) {
+                                            if (precno_x * pcx == x) {
+                                                for (layno = 0; layno < volume_info->layer; layno++) {
+                                                    start_pos = volume_info->tile[tileno].packet[pack_nb].start_pos;
+                                                    end_pos = volume_info->tile[tileno].packet[pack_nb].end_pos;
+                                                    disto = volume_info->tile[tileno].packet[pack_nb].disto;
+                                                    fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %8e\n",
+                                                            pack_nb, tileno, compno, precno, resno, layno, start_pos, end_pos, disto);
+                                                    total_disto += disto;
+                                                    pack_nb++;
+                                                }
+                                            }
+                                        }
+                                    }
+                                } /* precno */
+                            } /* resno */
+                        } /* x = x0..x1 */
+                    } /* y = y0..y1 */
+                } /* z = z0..z1 */
+            } /* comno */
+        } /* CPRL */
+    } /* tileno */
+
+    fprintf(stream, "SE_MAX\t%8e\n", volume_info->D_max);   /* SE max */
+    fprintf(stream, "SE_TOTAL\t%.8e\n", total_disto);           /* SE totale */
+
+
+    fclose(stream);
+
+    return 1;
+}
+
+bool j3d_encode(opj_j3d_t *j3d, opj_cio_t *cio, opj_volume_t *volume,
+                char *index)
+{
+    int tileno, compno;
+    opj_volume_info_t *volume_info = NULL;
+    opj_cp_t *cp = NULL;
+    opj_tcd_t *tcd = NULL;  /* TCD component */
+
+    j3d->cio = cio;
+    j3d->volume = volume;
+    cp = j3d->cp;
+
+    /*j3d_dump_volume(stdout, volume);
+    j3d_dump_cp(stdout, volume, cp);*/
+
+    /* INDEX >> */
+    volume_info = j3d->volume_info;
+    if (volume_info && cp->index_on) {
+        volume_info->index_on = cp->index_on;
+        volume_info->tile = (opj_tile_info_t *) opj_malloc(cp->tw * cp->th * cp->tl *
+                            sizeof(opj_tile_info_t));
+        volume_info->volume_w = volume->x1 - volume->x0;
+        volume_info->volume_h = volume->y1 - volume->y0;
+        volume_info->volume_l = volume->z1 - volume->z0;
+        volume_info->prog = (&cp->tcps[0])->prg;
+        volume_info->tw = cp->tw;
+        volume_info->th = cp->th;
+        volume_info->tl = cp->tl;
+        volume_info->tile_x = cp->tdx;  /* new version parser */
+        volume_info->tile_y = cp->tdy;  /* new version parser */
+        volume_info->tile_z = cp->tdz;  /* new version parser */
+        volume_info->tile_Ox = cp->tx0; /* new version parser */
+        volume_info->tile_Oy = cp->ty0; /* new version parser */
+        volume_info->tile_Oz = cp->tz0; /* new version parser */
+        volume_info->transform_format = cp->transform_format;
+        volume_info->encoding_format = cp->encoding_format;
+        volume_info->comp = volume->numcomps;
+        volume_info->layer = (&cp->tcps[0])->numlayers;
+        volume_info->decomposition[0] = (&cp->tcps[0])->tccps->numresolution[0] - 1;
+        volume_info->decomposition[1] = (&cp->tcps[0])->tccps->numresolution[1] - 1;
+        volume_info->decomposition[2] = (&cp->tcps[0])->tccps->numresolution[2] - 1;
+        volume_info->D_max = 0;     /* ADD Marcela */
+    }
+    /* << INDEX */
+
+    j3d_write_soc(j3d);
+    j3d_write_siz(j3d);
+    if (j3d->cinfo->codec_format == CODEC_J3D) {
+        j3d_write_cap(j3d);
+        j3d_write_nsi(j3d);
+    }
+
+    /*if (j3d->cp->transform_format != TRF_2D_DWT || j3d->cp->encoding_format != ENCOD_2EB)*/
+    j3d_write_com(j3d);
+
+    j3d_write_cod(j3d);
+    j3d_write_qcd(j3d);
+    for (compno = 0; compno < volume->numcomps; compno++) {
+        opj_tcp_t *tcp = &cp->tcps[0];
+        if (tcp->tccps[compno].roishift) {
+            j3d_write_rgn(j3d, compno, 0);
+        }
+    }
+    /*Optional 15444-2 markers*/
+    if (j3d->cp->tcps->tccps[0].atk != NULL) {
         j3d_write_atk(j3d);
-       if (j3d->volume->comps[0].dcoffset != 0)
+    }
+    if (j3d->volume->comps[0].dcoffset != 0) {
         j3d_write_dco(j3d);
+    }
+
+    /* INDEX >> */
+    if (volume_info && volume_info->index_on) {
+        volume_info->main_head_end = cio_tell(cio) - 1;
+    }
+    /* << INDEX */
+
+    /* create the tile encoder */
+    tcd = tcd_create(j3d->cinfo);
+
+    /* encode each tile */
+    for (tileno = 0; tileno < cp->tw * cp->th * cp->tl; tileno++) {
+        opj_event_msg(j3d->cinfo, EVT_INFO, "tile number %d / %d\n", tileno + 1,
+                      cp->tw * cp->th * cp->tl);
+
+        j3d->curtileno = tileno;
+
+        /* initialisation before tile encoding  */
+        if (tileno == 0) {
+            tcd_malloc_encode(tcd, volume, cp, j3d->curtileno);
+        } else {
+            tcd_init_encode(tcd, volume, cp, j3d->curtileno);
+        }
+
+        /* INDEX >> */
+        if (volume_info && volume_info->index_on) {
+            volume_info->tile[j3d->curtileno].num_tile = j3d->curtileno;
+            volume_info->tile[j3d->curtileno].start_pos = cio_tell(cio) +
+                    j3d->pos_correction;
+        }
+        /* << INDEX */
+
+        j3d_write_sot(j3d);
+
+        for (compno = 1; compno < volume->numcomps; compno++) {
+            j3d_write_coc(j3d, compno);
+            j3d_write_qcc(j3d, compno);
+        }
+
+        if (cp->tcps[tileno].numpocs) {
+            j3d_write_poc(j3d);
+        }
+        j3d_write_sod(j3d, tcd); /*--> tcd_encode_tile*/
+
+        /* INDEX >> */
+        if (volume_info && volume_info->index_on) {
+            volume_info->tile[j3d->curtileno].end_pos = cio_tell(cio) + j3d->pos_correction
+                    - 1;
+        }
+        /* << INDEX */
+    }
+
+    /* destroy the tile encoder */
+    tcd_free_encode(tcd);
+    tcd_destroy(tcd);
+
+    j3d_write_eoc(j3d);
+
+    /* Creation of the index file */
+    if (volume_info && volume_info->index_on) {
+        if (!j3d_create_index(j3d, cio, volume_info, index)) {
+            opj_event_msg(j3d->cinfo, EVT_ERROR, "failed to create index file %s\n", index);
+            return false;
+        }
+    }
 
-       /* INDEX >> */
-       if(volume_info && volume_info->index_on) {
-               volume_info->main_head_end = cio_tell(cio) - 1;
-       }
-       /* << INDEX */
-
-       /* create the tile encoder */
-       tcd = tcd_create(j3d->cinfo);
-
-       /* encode each tile */
-       for (tileno = 0; tileno < cp->tw * cp->th * cp->tl; tileno++) {
-               opj_event_msg(j3d->cinfo, EVT_INFO, "tile number %d / %d\n", tileno + 1, cp->tw * cp->th * cp->tl);
-               
-               j3d->curtileno = tileno;
-
-               /* initialisation before tile encoding  */
-               if (tileno == 0) {      
-                       tcd_malloc_encode(tcd, volume, cp, j3d->curtileno);
-               } else {
-                       tcd_init_encode(tcd, volume, cp, j3d->curtileno);
-               }
-               
-               /* INDEX >> */
-               if(volume_info && volume_info->index_on) {
-                       volume_info->tile[j3d->curtileno].num_tile = j3d->curtileno;
-                       volume_info->tile[j3d->curtileno].start_pos = cio_tell(cio) + j3d->pos_correction;
-               }
-               /* << INDEX */
-               
-               j3d_write_sot(j3d);
-       
-               for (compno = 1; compno < volume->numcomps; compno++) {
-                       j3d_write_coc(j3d, compno);
-                       j3d_write_qcc(j3d, compno);
-               }
-
-               if (cp->tcps[tileno].numpocs) {
-                       j3d_write_poc(j3d);
-               }
-               j3d_write_sod(j3d, tcd); /*--> tcd_encode_tile*/
-
-               /* INDEX >> */
-               if(volume_info && volume_info->index_on) {
-                       volume_info->tile[j3d->curtileno].end_pos = cio_tell(cio) + j3d->pos_correction - 1;
-               }
-               /* << INDEX */          
-       }
-       
-       /* destroy the tile encoder */
-       tcd_free_encode(tcd);
-       tcd_destroy(tcd);
-
-       j3d_write_eoc(j3d);
-       
-       /* Creation of the index file */
-       if(volume_info && volume_info->index_on) {
-               if(!j3d_create_index(j3d, cio, volume_info, index)) {
-                       opj_event_msg(j3d->cinfo, EVT_ERROR, "failed to create index file %s\n", index);
-                       return false;
-               }
-       }
-         
-       return true;
+    return true;
 }
 
 /* ----------------------------------------------------------------------- */
index 03bd3955f48205724f8c6d0ca4db99ffb6c1d144..bccb3fbcadfdb5c3fec3624cd2d18ee0499571ce 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
 #endif /* _WIN32 */
 #include "opj_includes.h"
 
-double opj_clock() {
+double opj_clock()
+{
 #ifdef _WIN32
-       /* WIN32: use QueryPerformance (very accurate) */
-    LARGE_INTEGER freq , t ;
+    /* WIN32: use QueryPerformance (very accurate) */
+    LARGE_INTEGER freq, t ;
     /* freq is the clock speed of the CPU */
     QueryPerformanceFrequency(&freq) ;
-       /* cout << "freq = " << ((double) freq.QuadPart) << endl; */
+    /* cout << "freq = " << ((double) freq.QuadPart) << endl; */
     /* t is the high resolution performance counter (see MSDN) */
-    QueryPerformanceCounter ( & t ) ;
-    return ( t.QuadPart /(double) freq.QuadPart ) ;
+    QueryPerformanceCounter(& t) ;
+    return (t.QuadPart / (double) freq.QuadPart) ;
 #else
-       /* Unix or Linux: use resource usage */
+    /* Unix or Linux: use resource usage */
     struct rusage t;
     double procTime;
     /* (1) Get the rusage data structure at this moment (man getrusage) */
-    getrusage(0,&t);
+    getrusage(0, &t);
     /* (2) What is the elapsed time ? - CPU time = User time + System time */
-       /* (2a) Get the seconds */
+    /* (2a) Get the seconds */
     procTime = t.ru_utime.tv_sec + t.ru_stime.tv_sec;
     /* (2b) More precisely! Get the microseconds part ! */
-    return ( procTime + (t.ru_utime.tv_usec + t.ru_stime.tv_usec) * 1e-6 ) ;
+    return (procTime + (t.ru_utime.tv_usec + t.ru_stime.tv_usec) * 1e-6) ;
 #endif /* _WIN32 */
 }
 
-void* opj_malloc( size_t size ) {
-       void *memblock = malloc(size);
-       if(memblock) {
-               memset(memblock, 0, size);
-       }
-       return memblock;
+void* opj_malloc(size_t size)
+{
+    void *memblock = malloc(size);
+    if (memblock) {
+        memset(memblock, 0, size);
+    }
+    return memblock;
 }
 
-void* opj_realloc( void *memblock, size_t size ) {
-       return realloc(memblock, size);
+void* opj_realloc(void *memblock, size_t size)
+{
+    return realloc(memblock, size);
 }
 
-void opj_free( void *memblock ) {
-       free(memblock);
+void opj_free(void *memblock)
+{
+    free(memblock);
 }
 
 
index 685a9f888435a9953b76eb5e884ae6f6797c7d92..9acca1939e7e2228362b953453875ec2431c622c 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -48,89 +48,95 @@ static const double mct_norms_real[3] = { 1.732, 1.805, 1.573 };
 /* <summary> */
 /* Forward reversible MCT. */
 /* </summary> */
-void mct_encode(int *c0, int *c1, int *c2, int n) {
-       int i;
-       for (i = 0; i < n; i++) {
-               int r, g, b, y, u, v;
-               r = c0[i];
-               g = c1[i];
-               b = c2[i];
-               y = (r + (g << 1) + b) >> 2;
-               u = b - g;
-               v = r - g;
-               c0[i] = y;
-               c1[i] = u;
-               c2[i] = v;
-       }
+void mct_encode(int *c0, int *c1, int *c2, int n)
+{
+    int i;
+    for (i = 0; i < n; i++) {
+        int r, g, b, y, u, v;
+        r = c0[i];
+        g = c1[i];
+        b = c2[i];
+        y = (r + (g << 1) + b) >> 2;
+        u = b - g;
+        v = r - g;
+        c0[i] = y;
+        c1[i] = u;
+        c2[i] = v;
+    }
 }
 
 /* <summary> */
 /* Inverse reversible MCT. */
 /* </summary> */
-void mct_decode(int *c0, int *c1, int *c2, int n) {
-       int i;
-       for (i = 0; i < n; i++) {
-               int y, u, v, r, g, b;
-               y = c0[i];
-               u = c1[i];
-               v = c2[i];
-               g = y - ((u + v) >> 2);
-               r = v + g;
-               b = u + g;
-               c0[i] = r;
-               c1[i] = g;
-               c2[i] = b;
-       }
+void mct_decode(int *c0, int *c1, int *c2, int n)
+{
+    int i;
+    for (i = 0; i < n; i++) {
+        int y, u, v, r, g, b;
+        y = c0[i];
+        u = c1[i];
+        v = c2[i];
+        g = y - ((u + v) >> 2);
+        r = v + g;
+        b = u + g;
+        c0[i] = r;
+        c1[i] = g;
+        c2[i] = b;
+    }
 }
 
 /* <summary> */
 /* Get norm of basis function of reversible MCT. */
 /* </summary> */
-double mct_getnorm(int compno) {
-       return mct_norms[compno];
+double mct_getnorm(int compno)
+{
+    return mct_norms[compno];
 }
 
 /* <summary> */
 /* Forward irreversible MCT. */
 /* </summary> */
-void mct_encode_real(int *c0, int *c1, int *c2, int n) {
-       int i;
-       for (i = 0; i < n; i++) {
-               int r, g, b, y, u, v;
-               r = c0[i];
-               g = c1[i];
-               b = c2[i];
-               y = fix_mul(r, 2449) + fix_mul(g, 4809) + fix_mul(b, 934);
-               u = -fix_mul(r, 1382) - fix_mul(g, 2714) + fix_mul(b, 4096);
-               v = fix_mul(r, 4096) - fix_mul(g, 3430) - fix_mul(b, 666);
-               c0[i] = y;
-               c1[i] = u;
-               c2[i] = v;
-       }
+void mct_encode_real(int *c0, int *c1, int *c2, int n)
+{
+    int i;
+    for (i = 0; i < n; i++) {
+        int r, g, b, y, u, v;
+        r = c0[i];
+        g = c1[i];
+        b = c2[i];
+        y = fix_mul(r, 2449) + fix_mul(g, 4809) + fix_mul(b, 934);
+        u = -fix_mul(r, 1382) - fix_mul(g, 2714) + fix_mul(b, 4096);
+        v = fix_mul(r, 4096) - fix_mul(g, 3430) - fix_mul(b, 666);
+        c0[i] = y;
+        c1[i] = u;
+        c2[i] = v;
+    }
 }
 
 /* <summary> */
 /* Inverse irreversible MCT. */
 /* </summary> */
-void mct_decode_real(int *c0, int *c1, int *c2, int n) {
-       int i;
-       for (i = 0; i < n; i++) {
-               int y, u, v, r, g, b;
-               y = c0[i];
-               u = c1[i];
-               v = c2[i];
-               r = y + fix_mul(v, 11485);
-               g = y - fix_mul(u, 2819) - fix_mul(v, 5850);
-               b = y + fix_mul(u, 14516);
-               c0[i] = r;
-               c1[i] = g;
-               c2[i] = b;
-       }
+void mct_decode_real(int *c0, int *c1, int *c2, int n)
+{
+    int i;
+    for (i = 0; i < n; i++) {
+        int y, u, v, r, g, b;
+        y = c0[i];
+        u = c1[i];
+        v = c2[i];
+        r = y + fix_mul(v, 11485);
+        g = y - fix_mul(u, 2819) - fix_mul(v, 5850);
+        b = y + fix_mul(u, 14516);
+        c0[i] = r;
+        c1[i] = g;
+        c2[i] = b;
+    }
 }
 
 /* <summary> */
 /* Get norm of basis function of irreversible MCT. */
 /* </summary> */
-double mct_getnorm_real(int compno) {
-       return mct_norms_real[compno];
+double mct_getnorm_real(int compno)
+{
+    return mct_norms_real[compno];
 }
index caeccec929db7ccfb15e41d81694c4f5d9a3de15..f23c02619ef1b10de987ab9c8ce9948a774c3dc8 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -70,13 +70,13 @@ static void mqc_setbits(opj_mqc_t *mqc);
 /**
 Exchange MPS with LPS
 @param mqc MQC handle
-@return 
+@return
 */
 static int mqc_mpsexchange(opj_mqc_t *mqc);
 /**
 Exchange LPS with MPS
 @param mqc MQC handle
-@return 
+@return
 */
 static int mqc_lpsexchange(opj_mqc_t *mqc);
 /**
@@ -98,456 +98,488 @@ static void mqc_renormd(opj_mqc_t *mqc);
 /* This array defines all the possible states for a context. */
 /* </summary> */
 static opj_mqc_state_t mqc_states[47 * 2] = {
-       {0x5601, 0, &mqc_states[2], &mqc_states[3]},
-       {0x5601, 1, &mqc_states[3], &mqc_states[2]},
-       {0x3401, 0, &mqc_states[4], &mqc_states[12]},
-       {0x3401, 1, &mqc_states[5], &mqc_states[13]},
-       {0x1801, 0, &mqc_states[6], &mqc_states[18]},
-       {0x1801, 1, &mqc_states[7], &mqc_states[19]},
-       {0x0ac1, 0, &mqc_states[8], &mqc_states[24]},
-       {0x0ac1, 1, &mqc_states[9], &mqc_states[25]},
-       {0x0521, 0, &mqc_states[10], &mqc_states[58]},
-       {0x0521, 1, &mqc_states[11], &mqc_states[59]},
-       {0x0221, 0, &mqc_states[76], &mqc_states[66]},
-       {0x0221, 1, &mqc_states[77], &mqc_states[67]},
-       {0x5601, 0, &mqc_states[14], &mqc_states[13]},
-       {0x5601, 1, &mqc_states[15], &mqc_states[12]},
-       {0x5401, 0, &mqc_states[16], &mqc_states[28]},
-       {0x5401, 1, &mqc_states[17], &mqc_states[29]},
-       {0x4801, 0, &mqc_states[18], &mqc_states[28]},
-       {0x4801, 1, &mqc_states[19], &mqc_states[29]},
-       {0x3801, 0, &mqc_states[20], &mqc_states[28]},
-       {0x3801, 1, &mqc_states[21], &mqc_states[29]},
-       {0x3001, 0, &mqc_states[22], &mqc_states[34]},
-       {0x3001, 1, &mqc_states[23], &mqc_states[35]},
-       {0x2401, 0, &mqc_states[24], &mqc_states[36]},
-       {0x2401, 1, &mqc_states[25], &mqc_states[37]},
-       {0x1c01, 0, &mqc_states[26], &mqc_states[40]},
-       {0x1c01, 1, &mqc_states[27], &mqc_states[41]},
-       {0x1601, 0, &mqc_states[58], &mqc_states[42]},
-       {0x1601, 1, &mqc_states[59], &mqc_states[43]},
-       {0x5601, 0, &mqc_states[30], &mqc_states[29]},
-       {0x5601, 1, &mqc_states[31], &mqc_states[28]},
-       {0x5401, 0, &mqc_states[32], &mqc_states[28]},
-       {0x5401, 1, &mqc_states[33], &mqc_states[29]},
-       {0x5101, 0, &mqc_states[34], &mqc_states[30]},
-       {0x5101, 1, &mqc_states[35], &mqc_states[31]},
-       {0x4801, 0, &mqc_states[36], &mqc_states[32]},
-       {0x4801, 1, &mqc_states[37], &mqc_states[33]},
-       {0x3801, 0, &mqc_states[38], &mqc_states[34]},
-       {0x3801, 1, &mqc_states[39], &mqc_states[35]},
-       {0x3401, 0, &mqc_states[40], &mqc_states[36]},
-       {0x3401, 1, &mqc_states[41], &mqc_states[37]},
-       {0x3001, 0, &mqc_states[42], &mqc_states[38]},
-       {0x3001, 1, &mqc_states[43], &mqc_states[39]},
-       {0x2801, 0, &mqc_states[44], &mqc_states[38]},
-       {0x2801, 1, &mqc_states[45], &mqc_states[39]},
-       {0x2401, 0, &mqc_states[46], &mqc_states[40]},
-       {0x2401, 1, &mqc_states[47], &mqc_states[41]},
-       {0x2201, 0, &mqc_states[48], &mqc_states[42]},
-       {0x2201, 1, &mqc_states[49], &mqc_states[43]},
-       {0x1c01, 0, &mqc_states[50], &mqc_states[44]},
-       {0x1c01, 1, &mqc_states[51], &mqc_states[45]},
-       {0x1801, 0, &mqc_states[52], &mqc_states[46]},
-       {0x1801, 1, &mqc_states[53], &mqc_states[47]},
-       {0x1601, 0, &mqc_states[54], &mqc_states[48]},
-       {0x1601, 1, &mqc_states[55], &mqc_states[49]},
-       {0x1401, 0, &mqc_states[56], &mqc_states[50]},
-       {0x1401, 1, &mqc_states[57], &mqc_states[51]},
-       {0x1201, 0, &mqc_states[58], &mqc_states[52]},
-       {0x1201, 1, &mqc_states[59], &mqc_states[53]},
-       {0x1101, 0, &mqc_states[60], &mqc_states[54]},
-       {0x1101, 1, &mqc_states[61], &mqc_states[55]},
-       {0x0ac1, 0, &mqc_states[62], &mqc_states[56]},
-       {0x0ac1, 1, &mqc_states[63], &mqc_states[57]},
-       {0x09c1, 0, &mqc_states[64], &mqc_states[58]},
-       {0x09c1, 1, &mqc_states[65], &mqc_states[59]},
-       {0x08a1, 0, &mqc_states[66], &mqc_states[60]},
-       {0x08a1, 1, &mqc_states[67], &mqc_states[61]},
-       {0x0521, 0, &mqc_states[68], &mqc_states[62]},
-       {0x0521, 1, &mqc_states[69], &mqc_states[63]},
-       {0x0441, 0, &mqc_states[70], &mqc_states[64]},
-       {0x0441, 1, &mqc_states[71], &mqc_states[65]},
-       {0x02a1, 0, &mqc_states[72], &mqc_states[66]},
-       {0x02a1, 1, &mqc_states[73], &mqc_states[67]},
-       {0x0221, 0, &mqc_states[74], &mqc_states[68]},
-       {0x0221, 1, &mqc_states[75], &mqc_states[69]},
-       {0x0141, 0, &mqc_states[76], &mqc_states[70]},
-       {0x0141, 1, &mqc_states[77], &mqc_states[71]},
-       {0x0111, 0, &mqc_states[78], &mqc_states[72]},
-       {0x0111, 1, &mqc_states[79], &mqc_states[73]},
-       {0x0085, 0, &mqc_states[80], &mqc_states[74]},
-       {0x0085, 1, &mqc_states[81], &mqc_states[75]},
-       {0x0049, 0, &mqc_states[82], &mqc_states[76]},
-       {0x0049, 1, &mqc_states[83], &mqc_states[77]},
-       {0x0025, 0, &mqc_states[84], &mqc_states[78]},
-       {0x0025, 1, &mqc_states[85], &mqc_states[79]},
-       {0x0015, 0, &mqc_states[86], &mqc_states[80]},
-       {0x0015, 1, &mqc_states[87], &mqc_states[81]},
-       {0x0009, 0, &mqc_states[88], &mqc_states[82]},
-       {0x0009, 1, &mqc_states[89], &mqc_states[83]},
-       {0x0005, 0, &mqc_states[90], &mqc_states[84]},
-       {0x0005, 1, &mqc_states[91], &mqc_states[85]},
-       {0x0001, 0, &mqc_states[90], &mqc_states[86]},
-       {0x0001, 1, &mqc_states[91], &mqc_states[87]},
-       {0x5601, 0, &mqc_states[92], &mqc_states[92]},
-       {0x5601, 1, &mqc_states[93], &mqc_states[93]},
+    {0x5601, 0, &mqc_states[2], &mqc_states[3]},
+    {0x5601, 1, &mqc_states[3], &mqc_states[2]},
+    {0x3401, 0, &mqc_states[4], &mqc_states[12]},
+    {0x3401, 1, &mqc_states[5], &mqc_states[13]},
+    {0x1801, 0, &mqc_states[6], &mqc_states[18]},
+    {0x1801, 1, &mqc_states[7], &mqc_states[19]},
+    {0x0ac1, 0, &mqc_states[8], &mqc_states[24]},
+    {0x0ac1, 1, &mqc_states[9], &mqc_states[25]},
+    {0x0521, 0, &mqc_states[10], &mqc_states[58]},
+    {0x0521, 1, &mqc_states[11], &mqc_states[59]},
+    {0x0221, 0, &mqc_states[76], &mqc_states[66]},
+    {0x0221, 1, &mqc_states[77], &mqc_states[67]},
+    {0x5601, 0, &mqc_states[14], &mqc_states[13]},
+    {0x5601, 1, &mqc_states[15], &mqc_states[12]},
+    {0x5401, 0, &mqc_states[16], &mqc_states[28]},
+    {0x5401, 1, &mqc_states[17], &mqc_states[29]},
+    {0x4801, 0, &mqc_states[18], &mqc_states[28]},
+    {0x4801, 1, &mqc_states[19], &mqc_states[29]},
+    {0x3801, 0, &mqc_states[20], &mqc_states[28]},
+    {0x3801, 1, &mqc_states[21], &mqc_states[29]},
+    {0x3001, 0, &mqc_states[22], &mqc_states[34]},
+    {0x3001, 1, &mqc_states[23], &mqc_states[35]},
+    {0x2401, 0, &mqc_states[24], &mqc_states[36]},
+    {0x2401, 1, &mqc_states[25], &mqc_states[37]},
+    {0x1c01, 0, &mqc_states[26], &mqc_states[40]},
+    {0x1c01, 1, &mqc_states[27], &mqc_states[41]},
+    {0x1601, 0, &mqc_states[58], &mqc_states[42]},
+    {0x1601, 1, &mqc_states[59], &mqc_states[43]},
+    {0x5601, 0, &mqc_states[30], &mqc_states[29]},
+    {0x5601, 1, &mqc_states[31], &mqc_states[28]},
+    {0x5401, 0, &mqc_states[32], &mqc_states[28]},
+    {0x5401, 1, &mqc_states[33], &mqc_states[29]},
+    {0x5101, 0, &mqc_states[34], &mqc_states[30]},
+    {0x5101, 1, &mqc_states[35], &mqc_states[31]},
+    {0x4801, 0, &mqc_states[36], &mqc_states[32]},
+    {0x4801, 1, &mqc_states[37], &mqc_states[33]},
+    {0x3801, 0, &mqc_states[38], &mqc_states[34]},
+    {0x3801, 1, &mqc_states[39], &mqc_states[35]},
+    {0x3401, 0, &mqc_states[40], &mqc_states[36]},
+    {0x3401, 1, &mqc_states[41], &mqc_states[37]},
+    {0x3001, 0, &mqc_states[42], &mqc_states[38]},
+    {0x3001, 1, &mqc_states[43], &mqc_states[39]},
+    {0x2801, 0, &mqc_states[44], &mqc_states[38]},
+    {0x2801, 1, &mqc_states[45], &mqc_states[39]},
+    {0x2401, 0, &mqc_states[46], &mqc_states[40]},
+    {0x2401, 1, &mqc_states[47], &mqc_states[41]},
+    {0x2201, 0, &mqc_states[48], &mqc_states[42]},
+    {0x2201, 1, &mqc_states[49], &mqc_states[43]},
+    {0x1c01, 0, &mqc_states[50], &mqc_states[44]},
+    {0x1c01, 1, &mqc_states[51], &mqc_states[45]},
+    {0x1801, 0, &mqc_states[52], &mqc_states[46]},
+    {0x1801, 1, &mqc_states[53], &mqc_states[47]},
+    {0x1601, 0, &mqc_states[54], &mqc_states[48]},
+    {0x1601, 1, &mqc_states[55], &mqc_states[49]},
+    {0x1401, 0, &mqc_states[56], &mqc_states[50]},
+    {0x1401, 1, &mqc_states[57], &mqc_states[51]},
+    {0x1201, 0, &mqc_states[58], &mqc_states[52]},
+    {0x1201, 1, &mqc_states[59], &mqc_states[53]},
+    {0x1101, 0, &mqc_states[60], &mqc_states[54]},
+    {0x1101, 1, &mqc_states[61], &mqc_states[55]},
+    {0x0ac1, 0, &mqc_states[62], &mqc_states[56]},
+    {0x0ac1, 1, &mqc_states[63], &mqc_states[57]},
+    {0x09c1, 0, &mqc_states[64], &mqc_states[58]},
+    {0x09c1, 1, &mqc_states[65], &mqc_states[59]},
+    {0x08a1, 0, &mqc_states[66], &mqc_states[60]},
+    {0x08a1, 1, &mqc_states[67], &mqc_states[61]},
+    {0x0521, 0, &mqc_states[68], &mqc_states[62]},
+    {0x0521, 1, &mqc_states[69], &mqc_states[63]},
+    {0x0441, 0, &mqc_states[70], &mqc_states[64]},
+    {0x0441, 1, &mqc_states[71], &mqc_states[65]},
+    {0x02a1, 0, &mqc_states[72], &mqc_states[66]},
+    {0x02a1, 1, &mqc_states[73], &mqc_states[67]},
+    {0x0221, 0, &mqc_states[74], &mqc_states[68]},
+    {0x0221, 1, &mqc_states[75], &mqc_states[69]},
+    {0x0141, 0, &mqc_states[76], &mqc_states[70]},
+    {0x0141, 1, &mqc_states[77], &mqc_states[71]},
+    {0x0111, 0, &mqc_states[78], &mqc_states[72]},
+    {0x0111, 1, &mqc_states[79], &mqc_states[73]},
+    {0x0085, 0, &mqc_states[80], &mqc_states[74]},
+    {0x0085, 1, &mqc_states[81], &mqc_states[75]},
+    {0x0049, 0, &mqc_states[82], &mqc_states[76]},
+    {0x0049, 1, &mqc_states[83], &mqc_states[77]},
+    {0x0025, 0, &mqc_states[84], &mqc_states[78]},
+    {0x0025, 1, &mqc_states[85], &mqc_states[79]},
+    {0x0015, 0, &mqc_states[86], &mqc_states[80]},
+    {0x0015, 1, &mqc_states[87], &mqc_states[81]},
+    {0x0009, 0, &mqc_states[88], &mqc_states[82]},
+    {0x0009, 1, &mqc_states[89], &mqc_states[83]},
+    {0x0005, 0, &mqc_states[90], &mqc_states[84]},
+    {0x0005, 1, &mqc_states[91], &mqc_states[85]},
+    {0x0001, 0, &mqc_states[90], &mqc_states[86]},
+    {0x0001, 1, &mqc_states[91], &mqc_states[87]},
+    {0x5601, 0, &mqc_states[92], &mqc_states[92]},
+    {0x5601, 1, &mqc_states[93], &mqc_states[93]},
 };
 
-/* 
+/*
 ==========================================================
    local functions
 ==========================================================
 */
 
-static void mqc_byteout(opj_mqc_t *mqc) {
-       if (*mqc->bp == 0xff) {
-               mqc->bp++;
-               *mqc->bp = mqc->c >> 20;
-               mqc->c &= 0xfffff;
-               mqc->ct = 7;
-       } else {
-               if ((mqc->c & 0x8000000) == 0) {        /* ((mqc->c&0x8000000)==0) CHANGE */
-                       mqc->bp++;
-                       *mqc->bp = mqc->c >> 19;
-                       mqc->c &= 0x7ffff;
-                       mqc->ct = 8;
-               } else {
-                       (*mqc->bp)++;
-                       if (*mqc->bp == 0xff) {
-                               mqc->c &= 0x7ffffff;
-                               mqc->bp++;
-                               *mqc->bp = mqc->c >> 20;
-                               mqc->c &= 0xfffff;
-                               mqc->ct = 7;
-                       } else {
-                               mqc->bp++;
-                               *mqc->bp = mqc->c >> 19;
-                               mqc->c &= 0x7ffff;
-                               mqc->ct = 8;
-                       }
-               }
-       }
+static void mqc_byteout(opj_mqc_t *mqc)
+{
+    if (*mqc->bp == 0xff) {
+        mqc->bp++;
+        *mqc->bp = mqc->c >> 20;
+        mqc->c &= 0xfffff;
+        mqc->ct = 7;
+    } else {
+        if ((mqc->c & 0x8000000) == 0) {    /* ((mqc->c&0x8000000)==0) CHANGE */
+            mqc->bp++;
+            *mqc->bp = mqc->c >> 19;
+            mqc->c &= 0x7ffff;
+            mqc->ct = 8;
+        } else {
+            (*mqc->bp)++;
+            if (*mqc->bp == 0xff) {
+                mqc->c &= 0x7ffffff;
+                mqc->bp++;
+                *mqc->bp = mqc->c >> 20;
+                mqc->c &= 0xfffff;
+                mqc->ct = 7;
+            } else {
+                mqc->bp++;
+                *mqc->bp = mqc->c >> 19;
+                mqc->c &= 0x7ffff;
+                mqc->ct = 8;
+            }
+        }
+    }
 }
 
-static void mqc_renorme(opj_mqc_t *mqc) {
-       do {
-               mqc->a <<= 1;
-               mqc->c <<= 1;
-               mqc->ct--;
-               if (mqc->ct == 0) {
-                       mqc_byteout(mqc);
-               }
-       } while ((mqc->a & 0x8000) == 0);
+static void mqc_renorme(opj_mqc_t *mqc)
+{
+    do {
+        mqc->a <<= 1;
+        mqc->c <<= 1;
+        mqc->ct--;
+        if (mqc->ct == 0) {
+            mqc_byteout(mqc);
+        }
+    } while ((mqc->a & 0x8000) == 0);
 }
 
-static void mqc_codemps(opj_mqc_t *mqc) {
-       mqc->a -= (*mqc->curctx)->qeval;
-       if ((mqc->a & 0x8000) == 0) {
-               if (mqc->a < (*mqc->curctx)->qeval) {
-                       mqc->a = (*mqc->curctx)->qeval;
-               } else {
-                       mqc->c += (*mqc->curctx)->qeval;
-               }
-               *mqc->curctx = (*mqc->curctx)->nmps;
-               mqc_renorme(mqc);
-       } else {
-               mqc->c += (*mqc->curctx)->qeval;
-       }
+static void mqc_codemps(opj_mqc_t *mqc)
+{
+    mqc->a -= (*mqc->curctx)->qeval;
+    if ((mqc->a & 0x8000) == 0) {
+        if (mqc->a < (*mqc->curctx)->qeval) {
+            mqc->a = (*mqc->curctx)->qeval;
+        } else {
+            mqc->c += (*mqc->curctx)->qeval;
+        }
+        *mqc->curctx = (*mqc->curctx)->nmps;
+        mqc_renorme(mqc);
+    } else {
+        mqc->c += (*mqc->curctx)->qeval;
+    }
 }
 
-static void mqc_codelps(opj_mqc_t *mqc) {
-       mqc->a -= (*mqc->curctx)->qeval;
-       if (mqc->a < (*mqc->curctx)->qeval) {
-               mqc->c += (*mqc->curctx)->qeval;
-       } else {
-               mqc->a = (*mqc->curctx)->qeval;
-       }
-       *mqc->curctx = (*mqc->curctx)->nlps;
-       mqc_renorme(mqc);
+static void mqc_codelps(opj_mqc_t *mqc)
+{
+    mqc->a -= (*mqc->curctx)->qeval;
+    if (mqc->a < (*mqc->curctx)->qeval) {
+        mqc->c += (*mqc->curctx)->qeval;
+    } else {
+        mqc->a = (*mqc->curctx)->qeval;
+    }
+    *mqc->curctx = (*mqc->curctx)->nlps;
+    mqc_renorme(mqc);
 }
 
-static void mqc_setbits(opj_mqc_t *mqc) {
-       unsigned int tempc = mqc->c + mqc->a;
-       mqc->c |= 0xffff;
-       if (mqc->c >= tempc) {
-               mqc->c -= 0x8000;
-       }
+static void mqc_setbits(opj_mqc_t *mqc)
+{
+    unsigned int tempc = mqc->c + mqc->a;
+    mqc->c |= 0xffff;
+    if (mqc->c >= tempc) {
+        mqc->c -= 0x8000;
+    }
 }
 
-static int mqc_mpsexchange(opj_mqc_t *mqc) {
-       int d;
-       if (mqc->a < (*mqc->curctx)->qeval) {
-               d = 1 - (*mqc->curctx)->mps;
-               *mqc->curctx = (*mqc->curctx)->nlps;
-       } else {
-               d = (*mqc->curctx)->mps;
-               *mqc->curctx = (*mqc->curctx)->nmps;
-       }
-       
-       return d;
+static int mqc_mpsexchange(opj_mqc_t *mqc)
+{
+    int d;
+    if (mqc->a < (*mqc->curctx)->qeval) {
+        d = 1 - (*mqc->curctx)->mps;
+        *mqc->curctx = (*mqc->curctx)->nlps;
+    } else {
+        d = (*mqc->curctx)->mps;
+        *mqc->curctx = (*mqc->curctx)->nmps;
+    }
+
+    return d;
 }
 
-static int mqc_lpsexchange(opj_mqc_t *mqc) {
-       int d;
-       if (mqc->a < (*mqc->curctx)->qeval) {
-               mqc->a = (*mqc->curctx)->qeval;
-               d = (*mqc->curctx)->mps;
-               *mqc->curctx = (*mqc->curctx)->nmps;
-       } else {
-               mqc->a = (*mqc->curctx)->qeval;
-               d = 1 - (*mqc->curctx)->mps;
-               *mqc->curctx = (*mqc->curctx)->nlps;
-       }
-       
-       return d;
+static int mqc_lpsexchange(opj_mqc_t *mqc)
+{
+    int d;
+    if (mqc->a < (*mqc->curctx)->qeval) {
+        mqc->a = (*mqc->curctx)->qeval;
+        d = (*mqc->curctx)->mps;
+        *mqc->curctx = (*mqc->curctx)->nmps;
+    } else {
+        mqc->a = (*mqc->curctx)->qeval;
+        d = 1 - (*mqc->curctx)->mps;
+        *mqc->curctx = (*mqc->curctx)->nlps;
+    }
+
+    return d;
 }
 
-static void mqc_bytein(opj_mqc_t *mqc) {
-       if (mqc->bp != mqc->end) {
-               unsigned int c;
-               if (mqc->bp + 1 != mqc->end) {
-                       c = *(mqc->bp + 1);
-               } else {
-                       c = 0xff;
-               }
-               if (*mqc->bp == 0xff) {
-                       if (c > 0x8f) {
-                               mqc->c += 0xff00;
-                               mqc->ct = 8;
-                       } else {
-                               mqc->bp++;
-                               mqc->c += c << 9;
-                               mqc->ct = 7;
-                       }
-               } else {
-                       mqc->bp++;
-                       mqc->c += c << 8;
-                       mqc->ct = 8;
-               }
-       } else {
-               mqc->c += 0xff00;
-               mqc->ct = 8;
-       }
+static void mqc_bytein(opj_mqc_t *mqc)
+{
+    if (mqc->bp != mqc->end) {
+        unsigned int c;
+        if (mqc->bp + 1 != mqc->end) {
+            c = *(mqc->bp + 1);
+        } else {
+            c = 0xff;
+        }
+        if (*mqc->bp == 0xff) {
+            if (c > 0x8f) {
+                mqc->c += 0xff00;
+                mqc->ct = 8;
+            } else {
+                mqc->bp++;
+                mqc->c += c << 9;
+                mqc->ct = 7;
+            }
+        } else {
+            mqc->bp++;
+            mqc->c += c << 8;
+            mqc->ct = 8;
+        }
+    } else {
+        mqc->c += 0xff00;
+        mqc->ct = 8;
+    }
 }
 
-static void mqc_renormd(opj_mqc_t *mqc) {
-       do {
-               if (mqc->ct == 0) {
-                       mqc_bytein(mqc);
-               }
-               mqc->a <<= 1;
-               mqc->c <<= 1;
-               mqc->ct--;
-       } while (mqc->a < 0x8000);
+static void mqc_renormd(opj_mqc_t *mqc)
+{
+    do {
+        if (mqc->ct == 0) {
+            mqc_bytein(mqc);
+        }
+        mqc->a <<= 1;
+        mqc->c <<= 1;
+        mqc->ct--;
+    } while (mqc->a < 0x8000);
 }
 
-/* 
+/*
 ==========================================================
    MQ-Coder interface
 ==========================================================
 */
 
-opj_mqc_t* mqc_create() {
-       opj_mqc_t *mqc = (opj_mqc_t*)opj_malloc(sizeof(opj_mqc_t));
-       return mqc;
+opj_mqc_t* mqc_create()
+{
+    opj_mqc_t *mqc = (opj_mqc_t*)opj_malloc(sizeof(opj_mqc_t));
+    return mqc;
 }
 
-void mqc_destroy(opj_mqc_t *mqc) {
-       if(mqc) {
-               opj_free(mqc);
-       }
+void mqc_destroy(opj_mqc_t *mqc)
+{
+    if (mqc) {
+        opj_free(mqc);
+    }
 }
 
-int mqc_numbytes(opj_mqc_t *mqc) {
-       return mqc->bp - mqc->start;
+int mqc_numbytes(opj_mqc_t *mqc)
+{
+    return mqc->bp - mqc->start;
 }
 
-void mqc_init_enc(opj_mqc_t *mqc, unsigned char *bp) {
-       mqc_setcurctx(mqc, 0);
-       mqc->a = 0x8000;
-       mqc->c = 0;
-       mqc->bp = bp - 1;
-       mqc->ct = 12;
-       if (*mqc->bp == 0xff) {
-               mqc->ct = 13;
-       }
-       mqc->start = bp;
+void mqc_init_enc(opj_mqc_t *mqc, unsigned char *bp)
+{
+    mqc_setcurctx(mqc, 0);
+    mqc->a = 0x8000;
+    mqc->c = 0;
+    mqc->bp = bp - 1;
+    mqc->ct = 12;
+    if (*mqc->bp == 0xff) {
+        mqc->ct = 13;
+    }
+    mqc->start = bp;
 }
 
-void mqc_setcurctx(opj_mqc_t *mqc, int ctxno) {
-       mqc->curctx = &mqc->ctxs[ctxno];
+void mqc_setcurctx(opj_mqc_t *mqc, int ctxno)
+{
+    mqc->curctx = &mqc->ctxs[ctxno];
 }
 
-void mqc_encode(opj_mqc_t *mqc, int d) {
-       if ((*mqc->curctx)->mps == d) {
-               mqc_codemps(mqc);
-       } else {
-               mqc_codelps(mqc);
-       }
+void mqc_encode(opj_mqc_t *mqc, int d)
+{
+    if ((*mqc->curctx)->mps == d) {
+        mqc_codemps(mqc);
+    } else {
+        mqc_codelps(mqc);
+    }
 }
 
-void mqc_flush(opj_mqc_t *mqc) {
-       mqc_setbits(mqc);
-       mqc->c <<= mqc->ct;
-       mqc_byteout(mqc);
-       mqc->c <<= mqc->ct;
-       mqc_byteout(mqc);
-       
-       if (*mqc->bp != 0xff) {
-               mqc->bp++;
-       }
+void mqc_flush(opj_mqc_t *mqc)
+{
+    mqc_setbits(mqc);
+    mqc->c <<= mqc->ct;
+    mqc_byteout(mqc);
+    mqc->c <<= mqc->ct;
+    mqc_byteout(mqc);
+
+    if (*mqc->bp != 0xff) {
+        mqc->bp++;
+    }
 }
 
-void mqc_bypass_init_enc(opj_mqc_t *mqc) {
-       mqc->c = 0;
-       mqc->ct = 8;
-       /*if (*mqc->bp == 0xff) {
-       mqc->ct = 7;
+void mqc_bypass_init_enc(opj_mqc_t *mqc)
+{
+    mqc->c = 0;
+    mqc->ct = 8;
+    /*if (*mqc->bp == 0xff) {
+    mqc->ct = 7;
      } */
 }
 
-void mqc_bypass_enc(opj_mqc_t *mqc, int d) {
-       mqc->ct--;
-       mqc->c = mqc->c + (d << mqc->ct);
-       if (mqc->ct == 0) {
-               mqc->bp++;
-               *mqc->bp = mqc->c;
-               mqc->ct = 8;
-               if (*mqc->bp == 0xff) {
-                       mqc->ct = 7;
-               }
-               mqc->c = 0;
-       }
+void mqc_bypass_enc(opj_mqc_t *mqc, int d)
+{
+    mqc->ct--;
+    mqc->c = mqc->c + (d << mqc->ct);
+    if (mqc->ct == 0) {
+        mqc->bp++;
+        *mqc->bp = mqc->c;
+        mqc->ct = 8;
+        if (*mqc->bp == 0xff) {
+            mqc->ct = 7;
+        }
+        mqc->c = 0;
+    }
 }
 
-int mqc_bypass_flush_enc(opj_mqc_t *mqc) {
-       unsigned char bit_padding;
-       
-       bit_padding = 0;
-       
-       if (mqc->ct != 0) {
-               while (mqc->ct > 0) {
-                       mqc->ct--;
-                       mqc->c += bit_padding << mqc->ct;
-                       bit_padding = (bit_padding + 1) & 0x01;
-               }
-               mqc->bp++;
-               *mqc->bp = mqc->c;
-               mqc->ct = 8;
-               mqc->c = 0;
-       }
-       
-       return 1;
+int mqc_bypass_flush_enc(opj_mqc_t *mqc)
+{
+    unsigned char bit_padding;
+
+    bit_padding = 0;
+
+    if (mqc->ct != 0) {
+        while (mqc->ct > 0) {
+            mqc->ct--;
+            mqc->c += bit_padding << mqc->ct;
+            bit_padding = (bit_padding + 1) & 0x01;
+        }
+        mqc->bp++;
+        *mqc->bp = mqc->c;
+        mqc->ct = 8;
+        mqc->c = 0;
+    }
+
+    return 1;
 }
 
-void mqc_reset_enc(opj_mqc_t *mqc) {
-       mqc_resetstates(mqc);
-       mqc_setstate(mqc, 18, 0, 46);
-       mqc_setstate(mqc, 0, 0, 3);
-       mqc_setstate(mqc, 1, 0, 4);
+void mqc_reset_enc(opj_mqc_t *mqc)
+{
+    mqc_resetstates(mqc);
+    mqc_setstate(mqc, 18, 0, 46);
+    mqc_setstate(mqc, 0, 0, 3);
+    mqc_setstate(mqc, 1, 0, 4);
 }
 
-void mqc_reset_enc_3(opj_mqc_t *mqc) {
-       mqc_resetstates(mqc);
-       mqc_setstate(mqc, T1_3D_CTXNO_UNI, 0, 46);
-       mqc_setstate(mqc, T1_3D_CTXNO_AGG, 0, 3);
-       mqc_setstate(mqc, T1_3D_CTXNO_ZC, 0, 4);
+void mqc_reset_enc_3(opj_mqc_t *mqc)
+{
+    mqc_resetstates(mqc);
+    mqc_setstate(mqc, T1_3D_CTXNO_UNI, 0, 46);
+    mqc_setstate(mqc, T1_3D_CTXNO_AGG, 0, 3);
+    mqc_setstate(mqc, T1_3D_CTXNO_ZC, 0, 4);
 }
 
-int mqc_restart_enc(opj_mqc_t *mqc) {
-       int correction = 1;
-       
-       /* <flush part> */
-       int n = 27 - 15 - mqc->ct;
-       mqc->c <<= mqc->ct;
-       while (n > 0) {
-               mqc_byteout(mqc);
-               n -= mqc->ct;
-               mqc->c <<= mqc->ct;
-       }
-       mqc_byteout(mqc);
-       
-       return correction;
+int mqc_restart_enc(opj_mqc_t *mqc)
+{
+    int correction = 1;
+
+    /* <flush part> */
+    int n = 27 - 15 - mqc->ct;
+    mqc->c <<= mqc->ct;
+    while (n > 0) {
+        mqc_byteout(mqc);
+        n -= mqc->ct;
+        mqc->c <<= mqc->ct;
+    }
+    mqc_byteout(mqc);
+
+    return correction;
 }
 
-void mqc_restart_init_enc(opj_mqc_t *mqc) {
-       /* <Re-init part> */
-       mqc_setcurctx(mqc, 0);
-       mqc->a = 0x8000;
-       mqc->c = 0;
-       mqc->ct = 12;
-       mqc->bp--;
-       if (*mqc->bp == 0xff) {
-               mqc->ct = 13;
-       }
+void mqc_restart_init_enc(opj_mqc_t *mqc)
+{
+    /* <Re-init part> */
+    mqc_setcurctx(mqc, 0);
+    mqc->a = 0x8000;
+    mqc->c = 0;
+    mqc->ct = 12;
+    mqc->bp--;
+    if (*mqc->bp == 0xff) {
+        mqc->ct = 13;
+    }
 }
 
-void mqc_erterm_enc(opj_mqc_t *mqc) {
-       int k = 11 - mqc->ct + 1;
-       
-       while (k > 0) {
-               mqc->c <<= mqc->ct;
-               mqc->ct = 0;
-               mqc_byteout(mqc);
-               k -= mqc->ct;
-       }
-       
-       if (*mqc->bp != 0xff) {
-               mqc_byteout(mqc);
-       }
+void mqc_erterm_enc(opj_mqc_t *mqc)
+{
+    int k = 11 - mqc->ct + 1;
+
+    while (k > 0) {
+        mqc->c <<= mqc->ct;
+        mqc->ct = 0;
+        mqc_byteout(mqc);
+        k -= mqc->ct;
+    }
+
+    if (*mqc->bp != 0xff) {
+        mqc_byteout(mqc);
+    }
 }
 
-void mqc_segmark_enc(opj_mqc_t *mqc) {
-       int i;
-       mqc_setcurctx(mqc, 18);
-       
-       for (i = 1; i < 5; i++) {
-               mqc_encode(mqc, i % 2);
-       }
+void mqc_segmark_enc(opj_mqc_t *mqc)
+{
+    int i;
+    mqc_setcurctx(mqc, 18);
+
+    for (i = 1; i < 5; i++) {
+        mqc_encode(mqc, i % 2);
+    }
 }
 
-void mqc_init_dec(opj_mqc_t *mqc, unsigned char *bp, int len) {
-       mqc_setcurctx(mqc, 0);
-       mqc->start = bp;
-       mqc->end = bp + len;
-       mqc->bp = bp;
-       if (len==0) mqc->c = 0xff << 16;
-       else mqc->c = *mqc->bp << 16;
-       mqc_bytein(mqc);
-       mqc->c <<= 7;
-       mqc->ct -= 7;
-       mqc->a = 0x8000;
+void mqc_init_dec(opj_mqc_t *mqc, unsigned char *bp, int len)
+{
+    mqc_setcurctx(mqc, 0);
+    mqc->start = bp;
+    mqc->end = bp + len;
+    mqc->bp = bp;
+    if (len == 0) {
+        mqc->c = 0xff << 16;
+    } else {
+        mqc->c = *mqc->bp << 16;
+    }
+    mqc_bytein(mqc);
+    mqc->c <<= 7;
+    mqc->ct -= 7;
+    mqc->a = 0x8000;
 }
 
-int mqc_decode(opj_mqc_t *mqc) {
-       int d;
-       mqc->a -= (*mqc->curctx)->qeval;
-       if ((mqc->c >> 16) < (*mqc->curctx)->qeval) {
-               d = mqc_lpsexchange(mqc);
-               mqc_renormd(mqc);
-       } else {
-               mqc->c -= (*mqc->curctx)->qeval << 16;
-               if ((mqc->a & 0x8000) == 0) {
-                       d = mqc_mpsexchange(mqc);
-                       mqc_renormd(mqc);
-               } else {
-                       d = (*mqc->curctx)->mps;
-               }
-       }
-
-       return d;
+int mqc_decode(opj_mqc_t *mqc)
+{
+    int d;
+    mqc->a -= (*mqc->curctx)->qeval;
+    if ((mqc->c >> 16) < (*mqc->curctx)->qeval) {
+        d = mqc_lpsexchange(mqc);
+        mqc_renormd(mqc);
+    } else {
+        mqc->c -= (*mqc->curctx)->qeval << 16;
+        if ((mqc->a & 0x8000) == 0) {
+            d = mqc_mpsexchange(mqc);
+            mqc_renormd(mqc);
+        } else {
+            d = (*mqc->curctx)->mps;
+        }
+    }
+
+    return d;
 }
 
-void mqc_resetstates(opj_mqc_t *mqc) {
-       int i;
-       for (i = 0; i < MQC_NUMCTXS; i++) {
-               mqc->ctxs[i] = mqc_states;
-       }
+void mqc_resetstates(opj_mqc_t *mqc)
+{
+    int i;
+    for (i = 0; i < MQC_NUMCTXS; i++) {
+        mqc->ctxs[i] = mqc_states;
+    }
 }
 
-void mqc_setstate(opj_mqc_t *mqc, int ctxno, int msb, int prob) {
-       mqc->ctxs[ctxno] = &mqc_states[msb + (prob << 1)];
+void mqc_setstate(opj_mqc_t *mqc, int ctxno, int msb, int prob)
+{
+    mqc->ctxs[ctxno] = &mqc_states[msb + (prob << 1)];
 }
 
 
index c8889b8f6983e3d028d60ee99992320b1da09dcc..02a2d0094a4d5bcd512d14090dd771863a50ead3 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
 #ifdef _WIN32
 #ifndef OPJ_STATIC
 BOOL APIENTRY
-DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
-       switch (ul_reason_for_call) {
-               case DLL_PROCESS_ATTACH :
-                       break;
-               case DLL_PROCESS_DETACH :
-                       break;
-               case DLL_THREAD_ATTACH :
-               case DLL_THREAD_DETACH :
-                       break;
+DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
+{
+    switch (ul_reason_for_call) {
+    case DLL_PROCESS_ATTACH :
+        break;
+    case DLL_PROCESS_DETACH :
+        break;
+    case DLL_THREAD_ATTACH :
+    case DLL_THREAD_DETACH :
+        break;
     }
 
     return TRUE;
@@ -59,155 +60,175 @@ DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
 
 /* ---------------------------------------------------------------------- */
 
-const char* OPJ_CALLCONV opj_version() {
+const char* OPJ_CALLCONV opj_version()
+{
     return JP3D_VERSION;
 }
-opj_dinfo_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT format) {
-       opj_dinfo_t *dinfo = (opj_dinfo_t*)opj_malloc(sizeof(opj_dinfo_t));
-       if(!dinfo) return NULL;
-       dinfo->is_decompressor = true;
-       switch(format) {
-               case CODEC_J3D:
-               case CODEC_J2K:
-                       /* get a J3D decoder handle */
-                       dinfo->j3d_handle = (void*)j3d_create_decompress((opj_common_ptr)dinfo);
-                       if(!dinfo->j3d_handle) {
-                               opj_free(dinfo);
-                               return NULL;
-                       }
-                       break;
-               default:
-                       opj_free(dinfo);
-                       return NULL;
-       }
-
-       dinfo->codec_format = format;
-
-       return dinfo;
+opj_dinfo_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT format)
+{
+    opj_dinfo_t *dinfo = (opj_dinfo_t*)opj_malloc(sizeof(opj_dinfo_t));
+    if (!dinfo) {
+        return NULL;
+    }
+    dinfo->is_decompressor = true;
+    switch (format) {
+    case CODEC_J3D:
+    case CODEC_J2K:
+        /* get a J3D decoder handle */
+        dinfo->j3d_handle = (void*)j3d_create_decompress((opj_common_ptr)dinfo);
+        if (!dinfo->j3d_handle) {
+            opj_free(dinfo);
+            return NULL;
+        }
+        break;
+    default:
+        opj_free(dinfo);
+        return NULL;
+    }
+
+    dinfo->codec_format = format;
+
+    return dinfo;
 }
 
-void OPJ_CALLCONV opj_destroy_decompress(opj_dinfo_t *dinfo) {
-       if(dinfo) {
-               /* destroy the codec */
-               if(dinfo->codec_format != CODEC_UNKNOWN) {
-                       j3d_destroy_decompress((opj_j3d_t*)dinfo->j3d_handle);
-               }
-               /* destroy the decompressor */
-               opj_free(dinfo);
-       }
+void OPJ_CALLCONV opj_destroy_decompress(opj_dinfo_t *dinfo)
+{
+    if (dinfo) {
+        /* destroy the codec */
+        if (dinfo->codec_format != CODEC_UNKNOWN) {
+            j3d_destroy_decompress((opj_j3d_t*)dinfo->j3d_handle);
+        }
+        /* destroy the decompressor */
+        opj_free(dinfo);
+    }
 }
 
-void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t *parameters) {
-       if(parameters) {
-               memset(parameters, 0, sizeof(opj_dparameters_t));
-               /* default decoding parameters */
-               parameters->cp_layer = 0;
-               parameters->cp_reduce[0] = 0;
-               parameters->cp_reduce[1] = 0;
-               parameters->cp_reduce[2] = 0;
-               parameters->bigendian = 0;
-
-               parameters->decod_format = -1;
-               parameters->cod_format = -1;
-       }
+void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t
+        *parameters)
+{
+    if (parameters) {
+        memset(parameters, 0, sizeof(opj_dparameters_t));
+        /* default decoding parameters */
+        parameters->cp_layer = 0;
+        parameters->cp_reduce[0] = 0;
+        parameters->cp_reduce[1] = 0;
+        parameters->cp_reduce[2] = 0;
+        parameters->bigendian = 0;
+
+        parameters->decod_format = -1;
+        parameters->cod_format = -1;
+    }
 }
 
-void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo, opj_dparameters_t *parameters) {
-       if(dinfo && parameters) {
-               if (dinfo->codec_format != CODEC_UNKNOWN) {
-                       j3d_setup_decoder((opj_j3d_t*)dinfo->j3d_handle, parameters);
-               }
-       }
+void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo,
+                                    opj_dparameters_t *parameters)
+{
+    if (dinfo && parameters) {
+        if (dinfo->codec_format != CODEC_UNKNOWN) {
+            j3d_setup_decoder((opj_j3d_t*)dinfo->j3d_handle, parameters);
+        }
+    }
 }
 
-opj_volume_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, opj_cio_t *cio) {
-       if(dinfo && cio) {
-               if (dinfo->codec_format != CODEC_UNKNOWN) {
-                       return j3d_decode((opj_j3d_t*)dinfo->j3d_handle, cio);
-               }
-       }
+opj_volume_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, opj_cio_t *cio)
+{
+    if (dinfo && cio) {
+        if (dinfo->codec_format != CODEC_UNKNOWN) {
+            return j3d_decode((opj_j3d_t*)dinfo->j3d_handle, cio);
+        }
+    }
 
-       return NULL;
+    return NULL;
 }
 
-opj_cinfo_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT format) {
-       opj_cinfo_t *cinfo = (opj_cinfo_t*)opj_malloc(sizeof(opj_cinfo_t));
-       if(!cinfo) return NULL;
-       cinfo->is_decompressor = false;
-       switch(format) {
-               case CODEC_J3D:
-               case CODEC_J2K:
-                       /* get a J3D coder handle */
-                       cinfo->j3d_handle = (void*)j3d_create_compress((opj_common_ptr)cinfo);
-                       if(!cinfo->j3d_handle) {
-                               opj_free(cinfo);
-                               return NULL;
-                       }
-                       break;
-               default:
-                       opj_free(cinfo);
-                       return NULL;
-       }
-
-       cinfo->codec_format = format;
-
-       return cinfo;
+opj_cinfo_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT format)
+{
+    opj_cinfo_t *cinfo = (opj_cinfo_t*)opj_malloc(sizeof(opj_cinfo_t));
+    if (!cinfo) {
+        return NULL;
+    }
+    cinfo->is_decompressor = false;
+    switch (format) {
+    case CODEC_J3D:
+    case CODEC_J2K:
+        /* get a J3D coder handle */
+        cinfo->j3d_handle = (void*)j3d_create_compress((opj_common_ptr)cinfo);
+        if (!cinfo->j3d_handle) {
+            opj_free(cinfo);
+            return NULL;
+        }
+        break;
+    default:
+        opj_free(cinfo);
+        return NULL;
+    }
+
+    cinfo->codec_format = format;
+
+    return cinfo;
 }
 
-void OPJ_CALLCONV opj_destroy_compress(opj_cinfo_t *cinfo) {
-       if(cinfo) {
-               /* destroy the codec */
-               if (cinfo->codec_format != CODEC_UNKNOWN) {
-                               j3d_destroy_compress((opj_j3d_t*)cinfo->j3d_handle);
-               }
-               /* destroy the decompressor */
-               opj_free(cinfo);
-       }
+void OPJ_CALLCONV opj_destroy_compress(opj_cinfo_t *cinfo)
+{
+    if (cinfo) {
+        /* destroy the codec */
+        if (cinfo->codec_format != CODEC_UNKNOWN) {
+            j3d_destroy_compress((opj_j3d_t*)cinfo->j3d_handle);
+        }
+        /* destroy the decompressor */
+        opj_free(cinfo);
+    }
 }
 
-void OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameters_t *parameters) {
-       if(parameters) {
-               memset(parameters, 0, sizeof(opj_cparameters_t));
-               /* default coding parameters */
-               parameters->numresolution[0] = 3;
-               parameters->numresolution[1] = 3;
-               parameters->numresolution[2] = 1;
-               parameters->cblock_init[0] = 64;
-               parameters->cblock_init[1] = 64;
-               parameters->cblock_init[2] = 64;
-               parameters->prog_order = LRCP;
-               parameters->roi_compno = -1;            /* no ROI */
-               parameters->atk_wt[0] = 1;                              /* 5-3 WT */
-               parameters->atk_wt[1] = 1;                              /* 5-3 WT */
-               parameters->atk_wt[2] = 1;                              /* 5-3 WT */
-               parameters->irreversible = 0;
-               parameters->subsampling_dx = 1;
-               parameters->subsampling_dy = 1;
-               parameters->subsampling_dz = 1;
-
-               parameters->decod_format = -1;
-               parameters->cod_format = -1;
-               parameters->encoding_format = ENCOD_2EB;
-               parameters->transform_format = TRF_2D_DWT;
-       }
+void OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameters_t
+        *parameters)
+{
+    if (parameters) {
+        memset(parameters, 0, sizeof(opj_cparameters_t));
+        /* default coding parameters */
+        parameters->numresolution[0] = 3;
+        parameters->numresolution[1] = 3;
+        parameters->numresolution[2] = 1;
+        parameters->cblock_init[0] = 64;
+        parameters->cblock_init[1] = 64;
+        parameters->cblock_init[2] = 64;
+        parameters->prog_order = LRCP;
+        parameters->roi_compno = -1;        /* no ROI */
+        parameters->atk_wt[0] = 1;              /* 5-3 WT */
+        parameters->atk_wt[1] = 1;              /* 5-3 WT */
+        parameters->atk_wt[2] = 1;              /* 5-3 WT */
+        parameters->irreversible = 0;
+        parameters->subsampling_dx = 1;
+        parameters->subsampling_dy = 1;
+        parameters->subsampling_dz = 1;
+
+        parameters->decod_format = -1;
+        parameters->cod_format = -1;
+        parameters->encoding_format = ENCOD_2EB;
+        parameters->transform_format = TRF_2D_DWT;
+    }
 }
 
-void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo, opj_cparameters_t *parameters, opj_volume_t *volume) {
-       if(cinfo && parameters && volume) {
-               if (cinfo->codec_format != CODEC_UNKNOWN) {
-                       j3d_setup_encoder((opj_j3d_t*)cinfo->j3d_handle, parameters, volume);
-               }
-       }
+void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo,
+                                    opj_cparameters_t *parameters, opj_volume_t *volume)
+{
+    if (cinfo && parameters && volume) {
+        if (cinfo->codec_format != CODEC_UNKNOWN) {
+            j3d_setup_encoder((opj_j3d_t*)cinfo->j3d_handle, parameters, volume);
+        }
+    }
 }
 
-bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_volume_t *volume, char *index) {
-       if(cinfo && cio && volume) {
-               if (cinfo->codec_format != CODEC_UNKNOWN) {
-                       return j3d_encode((opj_j3d_t*)cinfo->j3d_handle, cio, volume, index);
-               }
-       }
+bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio,
+                             opj_volume_t *volume, char *index)
+{
+    if (cinfo && cio && volume) {
+        if (cinfo->codec_format != CODEC_UNKNOWN) {
+            return j3d_encode((opj_j3d_t*)cinfo->j3d_handle, cio, volume, index);
+        }
+    }
 
-       return false;
+    return false;
 }
 
 
index 1ea2ad59a8aab5660ceb038166d05e8e07eb7c04..00a198dab907ca56e7acca926e428b296e251f7d 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
 /**
 Get next packet in layer-resolution-component-precinct order.
 @param pi packet iterator to modify
-@return returns false if pi pointed to the last packet or else returns true 
+@return returns false if pi pointed to the last packet or else returns true
 */
 static bool pi_next_lrcp(opj_pi_iterator_t * pi);
 /**
 Get next packet in resolution-layer-component-precinct order.
 @param pi packet iterator to modify
-@return returns false if pi pointed to the last packet or else returns true 
+@return returns false if pi pointed to the last packet or else returns true
 */
 static bool pi_next_rlcp(opj_pi_iterator_t * pi);
 /**
 Get next packet in resolution-precinct-component-layer order.
 @param pi packet iterator to modify
-@return returns false if pi pointed to the last packet or else returns true 
+@return returns false if pi pointed to the last packet or else returns true
 */
 static bool pi_next_rpcl(opj_pi_iterator_t * pi);
 /**
 Get next packet in precinct-component-resolution-layer order.
 @param pi packet iterator to modify
-@return returns false if pi pointed to the last packet or else returns true 
+@return returns false if pi pointed to the last packet or else returns true
 */
 static bool pi_next_pcrl(opj_pi_iterator_t * pi);
 /**
 Get next packet in component-precinct-resolution-layer order.
 @param pi packet iterator to modify
-@return returns false if pi pointed to the last packet or else returns true 
+@return returns false if pi pointed to the last packet or else returns true
 */
 static bool pi_next_cprl(opj_pi_iterator_t * pi);
 
@@ -77,562 +77,609 @@ static bool pi_next_cprl(opj_pi_iterator_t * pi);
 
 /*@}*/
 
-/* 
+/*
 ==========================================================
    local functions
 ==========================================================
 */
 
-static bool pi_next_lrcp(opj_pi_iterator_t * pi) {
-       opj_pi_comp_t *comp = NULL;
-       opj_pi_resolution_t *res = NULL;
-       long index = 0;
-
-       if (!pi->first) {
-               comp = &pi->comps[pi->compno];
-               res = &comp->resolutions[pi->resno];
-               goto LABEL_SKIP;
-       } else {
-               pi->first = 0;
-       }
-
-       for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) {
-               for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) {
-                       for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-                               comp = &pi->comps[pi->compno];
-                               if (pi->resno >= comp->numresolution[0]) {
-                                       continue;
-                               }
-                               res = &comp->resolutions[pi->resno];
-                               /*for (pi->precno = 0; pi->precno < (res->prctno[0] * res->prctno[1]); pi->precno++) {*/
-                               for (pi->precno = 0; pi->precno < (res->prctno[0] * res->prctno[1] * res->prctno[2]); pi->precno++) {
-                                       index = pi->layno * pi->step_l 
-                                               + pi->resno * pi->step_r 
-                                               + pi->compno * pi->step_c 
-                                               + pi->precno * pi->step_p;
-                                       if (!pi->include[index]) {
-                                               pi->include[index] = 1;
-                                               return true;
-                                       }
-LABEL_SKIP:;
-
-                               }
-                       }
-               }
-       }
-       
-       return false;
+static bool pi_next_lrcp(opj_pi_iterator_t * pi)
+{
+    opj_pi_comp_t *comp = NULL;
+    opj_pi_resolution_t *res = NULL;
+    long index = 0;
+
+    if (!pi->first) {
+        comp = &pi->comps[pi->compno];
+        res = &comp->resolutions[pi->resno];
+        goto LABEL_SKIP;
+    } else {
+        pi->first = 0;
+    }
+
+    for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) {
+        for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) {
+            for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
+                comp = &pi->comps[pi->compno];
+                if (pi->resno >= comp->numresolution[0]) {
+                    continue;
+                }
+                res = &comp->resolutions[pi->resno];
+                /*for (pi->precno = 0; pi->precno < (res->prctno[0] * res->prctno[1]); pi->precno++) {*/
+                for (pi->precno = 0;
+                        pi->precno < (res->prctno[0] * res->prctno[1] * res->prctno[2]); pi->precno++) {
+                    index = pi->layno * pi->step_l
+                            + pi->resno * pi->step_r
+                            + pi->compno * pi->step_c
+                            + pi->precno * pi->step_p;
+                    if (!pi->include[index]) {
+                        pi->include[index] = 1;
+                        return true;
+                    }
+LABEL_SKIP:
+                    ;
+
+                }
+            }
+        }
+    }
+
+    return false;
 }
 
-static bool pi_next_rlcp(opj_pi_iterator_t * pi) {
-       opj_pi_comp_t *comp = NULL;
-       opj_pi_resolution_t *res = NULL;
-       long index = 0;
-
-       if (!pi->first) {
-               comp = &pi->comps[pi->compno];
-               res = &comp->resolutions[pi->resno];
-               goto LABEL_SKIP;
-       } else {
-               pi->first = 0;
-       }
-
-       for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) {
-               for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) {
-                       for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-                               comp = &pi->comps[pi->compno];
-                               if (pi->resno >= comp->numresolution[0]) {
-                                       continue;
-                               }
-                               res = &comp->resolutions[pi->resno];
-                               /*for (pi->precno = 0; pi->precno < (res->prctno[0] * res->prctno[1]); pi->precno++) {*/
-                               for (pi->precno = 0; pi->precno < (res->prctno[0] * res->prctno[1] * res->prctno[2]); pi->precno++) {
-                                       index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p;
-                                       if (!pi->include[index]) {
-                                               pi->include[index] = 1;
-                                               return true;
-                                       }
-LABEL_SKIP:;
-                               }
-                       }
-               }
-       }
-       
-       return false;
+static bool pi_next_rlcp(opj_pi_iterator_t * pi)
+{
+    opj_pi_comp_t *comp = NULL;
+    opj_pi_resolution_t *res = NULL;
+    long index = 0;
+
+    if (!pi->first) {
+        comp = &pi->comps[pi->compno];
+        res = &comp->resolutions[pi->resno];
+        goto LABEL_SKIP;
+    } else {
+        pi->first = 0;
+    }
+
+    for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) {
+        for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) {
+            for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
+                comp = &pi->comps[pi->compno];
+                if (pi->resno >= comp->numresolution[0]) {
+                    continue;
+                }
+                res = &comp->resolutions[pi->resno];
+                /*for (pi->precno = 0; pi->precno < (res->prctno[0] * res->prctno[1]); pi->precno++) {*/
+                for (pi->precno = 0;
+                        pi->precno < (res->prctno[0] * res->prctno[1] * res->prctno[2]); pi->precno++) {
+                    index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
+                            pi->step_c + pi->precno * pi->step_p;
+                    if (!pi->include[index]) {
+                        pi->include[index] = 1;
+                        return true;
+                    }
+LABEL_SKIP:
+                    ;
+                }
+            }
+        }
+    }
+
+    return false;
 }
 
-static bool pi_next_rpcl(opj_pi_iterator_t * pi) {
-       opj_pi_comp_t *comp = NULL;
-       opj_pi_resolution_t *res = NULL;
-       long index = 0;
-
-       if (!pi->first) {
-               goto LABEL_SKIP;
-       } else {
-               int compno, resno;
-               pi->first = 0;
-               pi->dx = 0;
-               pi->dy = 0;
-               for (compno = 0; compno < pi->numcomps; compno++) {
-                       comp = &pi->comps[compno];
-                       for (resno = 0; resno < comp->numresolution[0]; resno++) {
-                               int dx, dy,dz;
-                               res = &comp->resolutions[resno];
-                               dx = comp->dx * (1 << (res->pdx + comp->numresolution[0] - 1 - resno));
-                               dy = comp->dy * (1 << (res->pdy + comp->numresolution[1] - 1 - resno));
-                               dz = comp->dz * (1 << (res->pdz + comp->numresolution[2] - 1 - resno));
-                               pi->dx = !pi->dx ? dx : int_min(pi->dx, dx);
-                               pi->dy = !pi->dy ? dy : int_min(pi->dy, dy);
-                               pi->dz = !pi->dz ? dz : int_min(pi->dz, dz);
-                       }
-               }
-       }
-
-       for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) {
-               for (pi->z = pi->tz0; pi->z < pi->tz1; pi->z += pi->dz - (pi->z % pi->dz)) {
-                       for (pi->y = pi->ty0; pi->y < pi->ty1; pi->y += pi->dy - (pi->y % pi->dy)) {
-                               for (pi->x = pi->tx0; pi->x < pi->tx1; pi->x += pi->dx - (pi->x % pi->dx)) {
-                                       for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-                                               int levelnox, levelnoy, levelnoz;
-                                               int trx0, try0, trz0;
-                                               int trx1, try1, trz1;
-                                               int rpx, rpy, rpz;
-                                               int prci, prcj, prck;
-                                               comp = &pi->comps[pi->compno];
-                                               if (pi->resno >= comp->numresolution[0]) {
-                                                       continue;
-                                               }
-                                               res = &comp->resolutions[pi->resno];
-                                               levelnox = comp->numresolution[0] - 1 - pi->resno;
-                                               levelnoy = comp->numresolution[1] - 1 - pi->resno;
-                                               levelnoz = comp->numresolution[2] - 1 - pi->resno;
-                                               trx0 = int_ceildiv(pi->tx0, comp->dx << levelnox);
-                                               try0 = int_ceildiv(pi->ty0, comp->dy << levelnoy);
-                                               trz0 = int_ceildiv(pi->tz0, comp->dz << levelnoz);
-                                               trx1 = int_ceildiv(pi->tx1, comp->dx << levelnox);
-                                               try1 = int_ceildiv(pi->ty1, comp->dy << levelnoy);
-                                               trz1 = int_ceildiv(pi->tz1, comp->dz << levelnoz);
-                                               rpx = res->pdx + levelnox;
-                                               rpy = res->pdy + levelnoy;
-                                               rpz = res->pdz + levelnoz;
-                                               if ((!(pi->x % (comp->dx << rpx) == 0) || (pi->x == pi->tx0 && (trx0 << levelnox) % (1 << rpx)))) {
-                                                       continue;
-                                               }
-                                               if ((!(pi->y % (comp->dy << rpy) == 0) || (pi->y == pi->ty0 && (try0 << levelnoy) % (1 << rpx)))) {
-                                                       continue;
-                                               }
-                                               if ((!(pi->z % (comp->dz << rpz) == 0) || (pi->z == pi->tz0 && (trz0 << levelnoz) % (1 << rpx)))) {
-                                                       continue;
-                                               }
-                                               if ((res->prctno[0]==0)||(res->prctno[1]==0)||(res->prctno[2]==0)) continue;
-                                               
-                                               if ((trx0==trx1)||(try0==try1)||(trz0==trz1)) continue;
-                                               
-                                               prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelnox), res->pdx) 
-                                                       - int_floordivpow2(trx0, res->pdx);
-                                               prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelnoy), res->pdy) 
-                                                       - int_floordivpow2(try0, res->pdy);
-                                               prck = int_floordivpow2(int_ceildiv(pi->z, comp->dz << levelnoz), res->pdz) 
-                                                       - int_floordivpow2(trz0, res->pdz);
-                                               pi->precno = prci + prcj * res->prctno[0] + prck * res->prctno[0] * res->prctno[1];
-                                               for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) {
-                                                       index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p;
-                                                       if (!pi->include[index]) {
-                                                               pi->include[index] = 1;
-                                                               return true;
-                                                       }
-       LABEL_SKIP:;
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
-       
-       return false;
+static bool pi_next_rpcl(opj_pi_iterator_t * pi)
+{
+    opj_pi_comp_t *comp = NULL;
+    opj_pi_resolution_t *res = NULL;
+    long index = 0;
+
+    if (!pi->first) {
+        goto LABEL_SKIP;
+    } else {
+        int compno, resno;
+        pi->first = 0;
+        pi->dx = 0;
+        pi->dy = 0;
+        for (compno = 0; compno < pi->numcomps; compno++) {
+            comp = &pi->comps[compno];
+            for (resno = 0; resno < comp->numresolution[0]; resno++) {
+                int dx, dy, dz;
+                res = &comp->resolutions[resno];
+                dx = comp->dx * (1 << (res->pdx + comp->numresolution[0] - 1 - resno));
+                dy = comp->dy * (1 << (res->pdy + comp->numresolution[1] - 1 - resno));
+                dz = comp->dz * (1 << (res->pdz + comp->numresolution[2] - 1 - resno));
+                pi->dx = !pi->dx ? dx : int_min(pi->dx, dx);
+                pi->dy = !pi->dy ? dy : int_min(pi->dy, dy);
+                pi->dz = !pi->dz ? dz : int_min(pi->dz, dz);
+            }
+        }
+    }
+
+    for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) {
+        for (pi->z = pi->tz0; pi->z < pi->tz1; pi->z += pi->dz - (pi->z % pi->dz)) {
+            for (pi->y = pi->ty0; pi->y < pi->ty1; pi->y += pi->dy - (pi->y % pi->dy)) {
+                for (pi->x = pi->tx0; pi->x < pi->tx1; pi->x += pi->dx - (pi->x % pi->dx)) {
+                    for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
+                        int levelnox, levelnoy, levelnoz;
+                        int trx0, try0, trz0;
+                        int trx1, try1, trz1;
+                        int rpx, rpy, rpz;
+                        int prci, prcj, prck;
+                        comp = &pi->comps[pi->compno];
+                        if (pi->resno >= comp->numresolution[0]) {
+                            continue;
+                        }
+                        res = &comp->resolutions[pi->resno];
+                        levelnox = comp->numresolution[0] - 1 - pi->resno;
+                        levelnoy = comp->numresolution[1] - 1 - pi->resno;
+                        levelnoz = comp->numresolution[2] - 1 - pi->resno;
+                        trx0 = int_ceildiv(pi->tx0, comp->dx << levelnox);
+                        try0 = int_ceildiv(pi->ty0, comp->dy << levelnoy);
+                        trz0 = int_ceildiv(pi->tz0, comp->dz << levelnoz);
+                        trx1 = int_ceildiv(pi->tx1, comp->dx << levelnox);
+                        try1 = int_ceildiv(pi->ty1, comp->dy << levelnoy);
+                        trz1 = int_ceildiv(pi->tz1, comp->dz << levelnoz);
+                        rpx = res->pdx + levelnox;
+                        rpy = res->pdy + levelnoy;
+                        rpz = res->pdz + levelnoz;
+                        if ((!(pi->x % (comp->dx << rpx) == 0) || (pi->x == pi->tx0 &&
+                                (trx0 << levelnox) % (1 << rpx)))) {
+                            continue;
+                        }
+                        if ((!(pi->y % (comp->dy << rpy) == 0) || (pi->y == pi->ty0 &&
+                                (try0 << levelnoy) % (1 << rpx)))) {
+                            continue;
+                        }
+                        if ((!(pi->z % (comp->dz << rpz) == 0) || (pi->z == pi->tz0 &&
+                                (trz0 << levelnoz) % (1 << rpx)))) {
+                            continue;
+                        }
+                        if ((res->prctno[0] == 0) || (res->prctno[1] == 0) || (res->prctno[2] == 0)) {
+                            continue;
+                        }
+
+                        if ((trx0 == trx1) || (try0 == try1) || (trz0 == trz1)) {
+                            continue;
+                        }
+
+                        prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelnox), res->pdx)
+                               - int_floordivpow2(trx0, res->pdx);
+                        prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelnoy), res->pdy)
+                               - int_floordivpow2(try0, res->pdy);
+                        prck = int_floordivpow2(int_ceildiv(pi->z, comp->dz << levelnoz), res->pdz)
+                               - int_floordivpow2(trz0, res->pdz);
+                        pi->precno = prci + prcj * res->prctno[0] + prck * res->prctno[0] *
+                                     res->prctno[1];
+                        for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) {
+                            index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
+                                    pi->step_c + pi->precno * pi->step_p;
+                            if (!pi->include[index]) {
+                                pi->include[index] = 1;
+                                return true;
+                            }
+LABEL_SKIP:
+                            ;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    return false;
 }
 
-static bool pi_next_pcrl(opj_pi_iterator_t * pi) {
-       opj_pi_comp_t *comp = NULL;
-       opj_pi_resolution_t *res = NULL;
-       long index = 0;
-
-       if (!pi->first) {
-               comp = &pi->comps[pi->compno];
-               goto LABEL_SKIP;
-       } else {
-               int compno, resno;
-               pi->first = 0;
-               pi->dx = 0;
-               pi->dy = 0;
-               pi->dz = 0;
-               for (compno = 0; compno < pi->numcomps; compno++) {
-                       comp = &pi->comps[compno];
-                       for (resno = 0; resno < comp->numresolution[0]; resno++) {
-                               int dx, dy, dz;
-                               res = &comp->resolutions[resno];
-                               dx = comp->dx * (1 << (res->pdx + comp->numresolution[0] - 1 - resno));
-                               dy = comp->dy * (1 << (res->pdy + comp->numresolution[1] - 1 - resno));
-                               dz = comp->dz * (1 << (res->pdy + comp->numresolution[2] - 1 - resno));
-                               pi->dx = !pi->dx ? dx : int_min(pi->dx, dx);
-                               pi->dy = !pi->dy ? dy : int_min(pi->dy, dy);
-                               pi->dz = !pi->dz ? dz : int_min(pi->dz, dz);
-                       }
-               }
-       }
-
-for (pi->z = pi->tz0; pi->z < pi->tz1; pi->z += pi->dz - (pi->z % pi->dz)) {
-       for (pi->y = pi->ty0; pi->y < pi->ty1; pi->y += pi->dy - (pi->y % pi->dy)) {
-               for (pi->x = pi->tx0; pi->x < pi->tx1; pi->x += pi->dx - (pi->x % pi->dx)) {
-                       for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-                               comp = &pi->comps[pi->compno];
-                               for (pi->resno = pi->poc.resno0; pi->resno < int_min(pi->poc.resno1, comp->numresolution[0]); pi->resno++) {
-                                               int levelnox, levelnoy, levelnoz;
-                                               int trx0, try0, trz0;
-                                               int trx1, try1, trz1;
-                                               int rpx, rpy, rpz;
-                                               int prci, prcj, prck;
-                                               comp = &pi->comps[pi->compno];
-                                               if (pi->resno >= comp->numresolution[0]) {
-                                                       continue;
-                                               }
-                                               res = &comp->resolutions[pi->resno];
-                                               levelnox = comp->numresolution[0] - 1 - pi->resno;
-                                               levelnoy = comp->numresolution[1] - 1 - pi->resno;
-                                               levelnoz = comp->numresolution[2] - 1 - pi->resno;
-                                               trx0 = int_ceildiv(pi->tx0, comp->dx << levelnox);
-                                               try0 = int_ceildiv(pi->ty0, comp->dy << levelnoy);
-                                               trz0 = int_ceildiv(pi->tz0, comp->dz << levelnoz);
-                                               trx1 = int_ceildiv(pi->tx1, comp->dx << levelnox);
-                                               try1 = int_ceildiv(pi->ty1, comp->dy << levelnoy);
-                                               trz1 = int_ceildiv(pi->tz1, comp->dz << levelnoz);
-                                               rpx = res->pdx + levelnox;
-                                               rpy = res->pdy + levelnoy;
-                                               rpz = res->pdz + levelnoz;
-                                               if ((!(pi->x % (comp->dx << rpx) == 0) || (pi->x == pi->tx0 && (trx0 << levelnox) % (1 << rpx)))) {
-                                                       continue;
-                                               }
-                                               if ((!(pi->y % (comp->dy << rpy) == 0) || (pi->y == pi->ty0 && (try0 << levelnoy) % (1 << rpx)))) {
-                                                       continue;
-                                               }
-                                               if ((!(pi->z % (comp->dz << rpz) == 0) || (pi->z == pi->tz0 && (trz0 << levelnoz) % (1 << rpx)))) {
-                                                       continue;
-                                               }
-                                               if ((res->prctno[0]==0)||(res->prctno[1]==0)||(res->prctno[2]==0)) continue;
-                                               
-                                               if ((trx0==trx1)||(try0==try1)||(trz0==trz1)) continue;
-                                               
-                                               prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelnox), res->pdx) 
-                                                       - int_floordivpow2(trx0, res->pdx);
-                                               prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelnoy), res->pdy) 
-                                                       - int_floordivpow2(try0, res->pdy);
-                                               prck = int_floordivpow2(int_ceildiv(pi->z, comp->dz << levelnoz), res->pdz) 
-                                                       - int_floordivpow2(trz0, res->pdz);
-                                               pi->precno = prci + prcj * res->prctno[0] + prck * res->prctno[0] * res->prctno[1];
-                                               for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) {
-                                                       index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p;
-                                                       if (!pi->include[index]) {
-                                                               pi->include[index] = 1;
-                                                               return true;
-                                                       }       
-LABEL_SKIP:;
-                                       }
-                               }
-                       }
-               }
-       }
-}
-       
-       return false;
+static bool pi_next_pcrl(opj_pi_iterator_t * pi)
+{
+    opj_pi_comp_t *comp = NULL;
+    opj_pi_resolution_t *res = NULL;
+    long index = 0;
+
+    if (!pi->first) {
+        comp = &pi->comps[pi->compno];
+        goto LABEL_SKIP;
+    } else {
+        int compno, resno;
+        pi->first = 0;
+        pi->dx = 0;
+        pi->dy = 0;
+        pi->dz = 0;
+        for (compno = 0; compno < pi->numcomps; compno++) {
+            comp = &pi->comps[compno];
+            for (resno = 0; resno < comp->numresolution[0]; resno++) {
+                int dx, dy, dz;
+                res = &comp->resolutions[resno];
+                dx = comp->dx * (1 << (res->pdx + comp->numresolution[0] - 1 - resno));
+                dy = comp->dy * (1 << (res->pdy + comp->numresolution[1] - 1 - resno));
+                dz = comp->dz * (1 << (res->pdy + comp->numresolution[2] - 1 - resno));
+                pi->dx = !pi->dx ? dx : int_min(pi->dx, dx);
+                pi->dy = !pi->dy ? dy : int_min(pi->dy, dy);
+                pi->dz = !pi->dz ? dz : int_min(pi->dz, dz);
+            }
+        }
+    }
+
+    for (pi->z = pi->tz0; pi->z < pi->tz1; pi->z += pi->dz - (pi->z % pi->dz)) {
+        for (pi->y = pi->ty0; pi->y < pi->ty1; pi->y += pi->dy - (pi->y % pi->dy)) {
+            for (pi->x = pi->tx0; pi->x < pi->tx1; pi->x += pi->dx - (pi->x % pi->dx)) {
+                for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
+                    comp = &pi->comps[pi->compno];
+                    for (pi->resno = pi->poc.resno0;
+                            pi->resno < int_min(pi->poc.resno1, comp->numresolution[0]); pi->resno++) {
+                        int levelnox, levelnoy, levelnoz;
+                        int trx0, try0, trz0;
+                        int trx1, try1, trz1;
+                        int rpx, rpy, rpz;
+                        int prci, prcj, prck;
+                        comp = &pi->comps[pi->compno];
+                        if (pi->resno >= comp->numresolution[0]) {
+                            continue;
+                        }
+                        res = &comp->resolutions[pi->resno];
+                        levelnox = comp->numresolution[0] - 1 - pi->resno;
+                        levelnoy = comp->numresolution[1] - 1 - pi->resno;
+                        levelnoz = comp->numresolution[2] - 1 - pi->resno;
+                        trx0 = int_ceildiv(pi->tx0, comp->dx << levelnox);
+                        try0 = int_ceildiv(pi->ty0, comp->dy << levelnoy);
+                        trz0 = int_ceildiv(pi->tz0, comp->dz << levelnoz);
+                        trx1 = int_ceildiv(pi->tx1, comp->dx << levelnox);
+                        try1 = int_ceildiv(pi->ty1, comp->dy << levelnoy);
+                        trz1 = int_ceildiv(pi->tz1, comp->dz << levelnoz);
+                        rpx = res->pdx + levelnox;
+                        rpy = res->pdy + levelnoy;
+                        rpz = res->pdz + levelnoz;
+                        if ((!(pi->x % (comp->dx << rpx) == 0) || (pi->x == pi->tx0 &&
+                                (trx0 << levelnox) % (1 << rpx)))) {
+                            continue;
+                        }
+                        if ((!(pi->y % (comp->dy << rpy) == 0) || (pi->y == pi->ty0 &&
+                                (try0 << levelnoy) % (1 << rpx)))) {
+                            continue;
+                        }
+                        if ((!(pi->z % (comp->dz << rpz) == 0) || (pi->z == pi->tz0 &&
+                                (trz0 << levelnoz) % (1 << rpx)))) {
+                            continue;
+                        }
+                        if ((res->prctno[0] == 0) || (res->prctno[1] == 0) || (res->prctno[2] == 0)) {
+                            continue;
+                        }
+
+                        if ((trx0 == trx1) || (try0 == try1) || (trz0 == trz1)) {
+                            continue;
+                        }
+
+                        prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelnox), res->pdx)
+                               - int_floordivpow2(trx0, res->pdx);
+                        prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelnoy), res->pdy)
+                               - int_floordivpow2(try0, res->pdy);
+                        prck = int_floordivpow2(int_ceildiv(pi->z, comp->dz << levelnoz), res->pdz)
+                               - int_floordivpow2(trz0, res->pdz);
+                        pi->precno = prci + prcj * res->prctno[0] + prck * res->prctno[0] *
+                                     res->prctno[1];
+                        for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) {
+                            index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
+                                    pi->step_c + pi->precno * pi->step_p;
+                            if (!pi->include[index]) {
+                                pi->include[index] = 1;
+                                return true;
+                            }
+LABEL_SKIP:
+                            ;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    return false;
 }
 
-static bool pi_next_cprl(opj_pi_iterator_t * pi) {
-       opj_pi_comp_t *comp = NULL;
-       opj_pi_resolution_t *res = NULL;
-       long index = 0;
-
-       if (!pi->first) {
-               comp = &pi->comps[pi->compno];
-               goto LABEL_SKIP;
-       } else {
-               pi->first = 0;
-       }
-
-       for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-               int resno;
-               comp = &pi->comps[pi->compno];
-               pi->dx = 0;
-               pi->dy = 0;
-               pi->dz = 0;
-               for (resno = 0; resno < comp->numresolution[0]; resno++) {
-                       int dx, dy, dz;
-                       res = &comp->resolutions[resno];
-                       dx = comp->dx * (1 << (res->pdx + comp->numresolution[0] - 1 - resno));
-                       dy = comp->dy * (1 << (res->pdy + comp->numresolution[1] - 1 - resno));
-                       dz = comp->dz * (1 << (res->pdz + comp->numresolution[2] - 1 - resno));
-                       pi->dx = !pi->dx ? dx : int_min(pi->dx, dx);
-                       pi->dy = !pi->dy ? dy : int_min(pi->dy, dy);
-                       pi->dz = !pi->dz ? dz : int_min(pi->dz, dz);
-               }
-       for (pi->z = pi->tz0; pi->z < pi->tz1; pi->z += pi->dz - (pi->z % pi->dz)) {
-               for (pi->y = pi->ty0; pi->y < pi->ty1; pi->y += pi->dy - (pi->y % pi->dy)) {
-                       for (pi->x = pi->tx0; pi->x < pi->tx1; pi->x += pi->dx - (pi->x % pi->dx)) {
-                               for (pi->resno = pi->poc.resno0; pi->resno < int_min(pi->poc.resno1, comp->numresolution[0]); pi->resno++) {
-                                               int levelnox, levelnoy, levelnoz;
-                                               int trx0, try0, trz0;
-                                               int trx1, try1, trz1;
-                                               int rpx, rpy, rpz;
-                                               int prci, prcj, prck;
-                                               comp = &pi->comps[pi->compno];
-                                               if (pi->resno >= comp->numresolution[0]) {
-                                                       continue;
-                                               }
-                                               res = &comp->resolutions[pi->resno];
-                                               levelnox = comp->numresolution[0] - 1 - pi->resno;
-                                               levelnoy = comp->numresolution[1] - 1 - pi->resno;
-                                               levelnoz = comp->numresolution[2] - 1 - pi->resno;
-                                               trx0 = int_ceildiv(pi->tx0, comp->dx << levelnox);
-                                               try0 = int_ceildiv(pi->ty0, comp->dy << levelnoy);
-                                               trz0 = int_ceildiv(pi->tz0, comp->dz << levelnoz);
-                                               trx1 = int_ceildiv(pi->tx1, comp->dx << levelnox);
-                                               try1 = int_ceildiv(pi->ty1, comp->dy << levelnoy);
-                                               trz1 = int_ceildiv(pi->tz1, comp->dz << levelnoz);
-                                               rpx = res->pdx + levelnox;
-                                               rpy = res->pdy + levelnoy;
-                                               rpz = res->pdz + levelnoz;
-                                               if ((!(pi->x % (comp->dx << rpx) == 0) || (pi->x == pi->tx0 && (trx0 << levelnox) % (1 << rpx)))) {
-                                                       continue;
-                                               }
-                                               if ((!(pi->y % (comp->dy << rpy) == 0) || (pi->y == pi->ty0 && (try0 << levelnoy) % (1 << rpx)))) {
-                                                       continue;
-                                               }
-                                               if ((!(pi->z % (comp->dz << rpz) == 0) || (pi->z == pi->tz0 && (trz0 << levelnoz) % (1 << rpx)))) {
-                                                       continue;
-                                               }
-                                               if ((res->prctno[0]==0)||(res->prctno[1]==0)||(res->prctno[2]==0)) continue;
-                                               
-                                               if ((trx0==trx1)||(try0==try1)||(trz0==trz1)) continue;
-                                               
-                                               prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelnox), res->pdx) 
-                                                       - int_floordivpow2(trx0, res->pdx);
-                                               prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelnoy), res->pdy) 
-                                                       - int_floordivpow2(try0, res->pdy);
-                                               prck = int_floordivpow2(int_ceildiv(pi->z, comp->dz << levelnoz), res->pdz) 
-                                                       - int_floordivpow2(trz0, res->pdz);
-                                               pi->precno = prci + prcj * res->prctno[0] + prck * res->prctno[0] * res->prctno[1];
-                                               for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) {
-                                                       index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p;
-                                                       if (!pi->include[index]) {
-                                                               pi->include[index] = 1;
-                                                               return true;
-                                                       }
-       LABEL_SKIP:;
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
-       
-       return false;
+static bool pi_next_cprl(opj_pi_iterator_t * pi)
+{
+    opj_pi_comp_t *comp = NULL;
+    opj_pi_resolution_t *res = NULL;
+    long index = 0;
+
+    if (!pi->first) {
+        comp = &pi->comps[pi->compno];
+        goto LABEL_SKIP;
+    } else {
+        pi->first = 0;
+    }
+
+    for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
+        int resno;
+        comp = &pi->comps[pi->compno];
+        pi->dx = 0;
+        pi->dy = 0;
+        pi->dz = 0;
+        for (resno = 0; resno < comp->numresolution[0]; resno++) {
+            int dx, dy, dz;
+            res = &comp->resolutions[resno];
+            dx = comp->dx * (1 << (res->pdx + comp->numresolution[0] - 1 - resno));
+            dy = comp->dy * (1 << (res->pdy + comp->numresolution[1] - 1 - resno));
+            dz = comp->dz * (1 << (res->pdz + comp->numresolution[2] - 1 - resno));
+            pi->dx = !pi->dx ? dx : int_min(pi->dx, dx);
+            pi->dy = !pi->dy ? dy : int_min(pi->dy, dy);
+            pi->dz = !pi->dz ? dz : int_min(pi->dz, dz);
+        }
+        for (pi->z = pi->tz0; pi->z < pi->tz1; pi->z += pi->dz - (pi->z % pi->dz)) {
+            for (pi->y = pi->ty0; pi->y < pi->ty1; pi->y += pi->dy - (pi->y % pi->dy)) {
+                for (pi->x = pi->tx0; pi->x < pi->tx1; pi->x += pi->dx - (pi->x % pi->dx)) {
+                    for (pi->resno = pi->poc.resno0;
+                            pi->resno < int_min(pi->poc.resno1, comp->numresolution[0]); pi->resno++) {
+                        int levelnox, levelnoy, levelnoz;
+                        int trx0, try0, trz0;
+                        int trx1, try1, trz1;
+                        int rpx, rpy, rpz;
+                        int prci, prcj, prck;
+                        comp = &pi->comps[pi->compno];
+                        if (pi->resno >= comp->numresolution[0]) {
+                            continue;
+                        }
+                        res = &comp->resolutions[pi->resno];
+                        levelnox = comp->numresolution[0] - 1 - pi->resno;
+                        levelnoy = comp->numresolution[1] - 1 - pi->resno;
+                        levelnoz = comp->numresolution[2] - 1 - pi->resno;
+                        trx0 = int_ceildiv(pi->tx0, comp->dx << levelnox);
+                        try0 = int_ceildiv(pi->ty0, comp->dy << levelnoy);
+                        trz0 = int_ceildiv(pi->tz0, comp->dz << levelnoz);
+                        trx1 = int_ceildiv(pi->tx1, comp->dx << levelnox);
+                        try1 = int_ceildiv(pi->ty1, comp->dy << levelnoy);
+                        trz1 = int_ceildiv(pi->tz1, comp->dz << levelnoz);
+                        rpx = res->pdx + levelnox;
+                        rpy = res->pdy + levelnoy;
+                        rpz = res->pdz + levelnoz;
+                        if ((!(pi->x % (comp->dx << rpx) == 0) || (pi->x == pi->tx0 &&
+                                (trx0 << levelnox) % (1 << rpx)))) {
+                            continue;
+                        }
+                        if ((!(pi->y % (comp->dy << rpy) == 0) || (pi->y == pi->ty0 &&
+                                (try0 << levelnoy) % (1 << rpx)))) {
+                            continue;
+                        }
+                        if ((!(pi->z % (comp->dz << rpz) == 0) || (pi->z == pi->tz0 &&
+                                (trz0 << levelnoz) % (1 << rpx)))) {
+                            continue;
+                        }
+                        if ((res->prctno[0] == 0) || (res->prctno[1] == 0) || (res->prctno[2] == 0)) {
+                            continue;
+                        }
+
+                        if ((trx0 == trx1) || (try0 == try1) || (trz0 == trz1)) {
+                            continue;
+                        }
+
+                        prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelnox), res->pdx)
+                               - int_floordivpow2(trx0, res->pdx);
+                        prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelnoy), res->pdy)
+                               - int_floordivpow2(try0, res->pdy);
+                        prck = int_floordivpow2(int_ceildiv(pi->z, comp->dz << levelnoz), res->pdz)
+                               - int_floordivpow2(trz0, res->pdz);
+                        pi->precno = prci + prcj * res->prctno[0] + prck * res->prctno[0] *
+                                     res->prctno[1];
+                        for (pi->layno = 0; pi->layno < pi->poc.layno1; pi->layno++) {
+                            index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
+                                    pi->step_c + pi->precno * pi->step_p;
+                            if (!pi->include[index]) {
+                                pi->include[index] = 1;
+                                return true;
+                            }
+LABEL_SKIP:
+                            ;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    return false;
 }
 
-/* 
+/*
 ==========================================================
    Packet iterator interface
 ==========================================================
 */
 
-opj_pi_iterator_t *pi_create(opj_volume_t *volume, opj_cp_t *cp, int tileno) {
-       int p, q, r;
-       int compno, resno, pino;
-       opj_pi_iterator_t *pi = NULL;
-       opj_tcp_t *tcp = NULL;
-       opj_tccp_t *tccp = NULL;
-       size_t array_size;
-       
-       tcp = &cp->tcps[tileno];
-
-       array_size = (tcp->numpocs + 1) * sizeof(opj_pi_iterator_t);
-       pi = (opj_pi_iterator_t *) opj_malloc(array_size);
-       if(!pi) {
-               fprintf(stdout,"[ERROR] Malloc of opj_pi_iterator failed \n");
-               return NULL;
-       }
-       
-       for (pino = 0; pino < tcp->numpocs + 1; pino++) {       /* change */
-               int maxres = 0;
-               int maxprec = 0;
-               p = tileno % cp->tw;
-               q = tileno / cp->tw;
-               r = tileno / (cp->tw * cp->th);
-
-               pi[pino].tx0 = int_max(cp->tx0 + p * cp->tdx, volume->x0);
-               pi[pino].ty0 = int_max(cp->ty0 + q * cp->tdy, volume->y0);
-               pi[pino].tz0 = int_max(cp->tz0 + r * cp->tdz, volume->z0);
-               pi[pino].tx1 = int_min(cp->tx0 + (p + 1) * cp->tdx, volume->x1);
-               pi[pino].ty1 = int_min(cp->ty0 + (q + 1) * cp->tdy, volume->y1);
-               pi[pino].tz1 = int_min(cp->tz0 + (r + 1) * cp->tdz, volume->z1);
-               pi[pino].numcomps = volume->numcomps;
-
-               array_size = volume->numcomps * sizeof(opj_pi_comp_t);
-               pi[pino].comps = (opj_pi_comp_t *) opj_malloc(array_size);
-               if(!pi[pino].comps) {
-                       fprintf(stdout,"[ERROR] Malloc of opj_pi_comp failed \n");
-                       pi_destroy(pi, cp, tileno);
-                       return NULL;
-               }
-               memset(pi[pino].comps, 0, array_size);
-               
-               for (compno = 0; compno < pi->numcomps; compno++) {
-                       int tcx0, tcx1, tcy0, tcy1, tcz0, tcz1;
-                       int i;
-                       opj_pi_comp_t *comp = &pi[pino].comps[compno];
-                       tccp = &tcp->tccps[compno];
-                       
-                       comp->dx = volume->comps[compno].dx;
-                       comp->dy = volume->comps[compno].dy;
-                       comp->dz = volume->comps[compno].dz;
-                       for (i = 0; i < 3; i++) {
-                               comp->numresolution[i] = tccp->numresolution[i];
-                               if (comp->numresolution[i] > maxres) {
-                                       maxres = comp->numresolution[i];
-                               }
-                       }
-                       array_size = comp->numresolution[0] * sizeof(opj_pi_resolution_t);
-                       comp->resolutions =     (opj_pi_resolution_t *) opj_malloc(array_size);
-                       if(!comp->resolutions) {
-                               fprintf(stdout,"[ERROR] Malloc of opj_pi_resolution failed \n");
-                               pi_destroy(pi, cp, tileno);
-                               return NULL;
-                       }
-
-                       tcx0 = int_ceildiv(pi->tx0, comp->dx);
-                       tcy0 = int_ceildiv(pi->ty0, comp->dy);
-                       tcz0 = int_ceildiv(pi->tz0, comp->dz);
-                       tcx1 = int_ceildiv(pi->tx1, comp->dx);
-                       tcy1 = int_ceildiv(pi->ty1, comp->dy);
-                       tcz1 = int_ceildiv(pi->tz1, comp->dz);
-                       
-                       for (resno = 0; resno < comp->numresolution[0]; resno++) {
-                               int levelnox, levelnoy, levelnoz, diff;
-                               int rx0, ry0, rz0, rx1, ry1, rz1;
-                               int px0, py0, pz0, px1, py1, pz1;
-                               opj_pi_resolution_t *res = &comp->resolutions[resno];
-                               if (tccp->csty & J3D_CCP_CSTY_PRT) {
-                                       res->pdx = tccp->prctsiz[0][resno];
-                                       res->pdy = tccp->prctsiz[1][resno];
-                                       res->pdz = tccp->prctsiz[2][resno];
-                               } else {
-                                       res->pdx = 15;
-                                       res->pdy = 15;
-                                       res->pdz = 15;
-                               }
-                               levelnox = comp->numresolution[0] - 1 - resno;
-                               levelnoy = comp->numresolution[1] - 1 - resno;
-        levelnoz = comp->numresolution[2] - 1 - resno;
-                               if (levelnoz < 0) levelnoz = 0; 
-                               diff = comp->numresolution[0] - comp->numresolution[2];
-
-                               rx0 = int_ceildivpow2(tcx0, levelnox);
-                               ry0 = int_ceildivpow2(tcy0, levelnoy);
-                               rz0 = int_ceildivpow2(tcz0, levelnoz);
-                               rx1 = int_ceildivpow2(tcx1, levelnox);
-                               ry1 = int_ceildivpow2(tcy1, levelnoy);
-                               rz1 = int_ceildivpow2(tcz1, levelnoz);
-                               px0 = int_floordivpow2(rx0, res->pdx) << res->pdx;
-                               py0 = int_floordivpow2(ry0, res->pdy) << res->pdy;
-                               pz0 = int_floordivpow2(rz0, res->pdz) << res->pdz;
-                               px1 = int_ceildivpow2(rx1, res->pdx) << res->pdx;
-                               py1 = int_ceildivpow2(ry1, res->pdy) << res->pdy;
-                               pz1 = int_ceildivpow2(rz1, res->pdz) << res->pdz;
-                               res->prctno[0] = (rx0==rx1)? 0 : ((px1 - px0) >> res->pdx);
-                               res->prctno[1] = (ry0==ry1)? 0 : ((py1 - py0) >> res->pdy);
-                               res->prctno[2] = (rz0==rz1)? 0 : ((pz1 - pz0) >> res->pdz);
-
-                               if (res->prctno[0]*res->prctno[1]*res->prctno[2] > maxprec) {
-                                       maxprec = res->prctno[0]*res->prctno[1]*res->prctno[2];
-                               }
-                       }
-               }
-               
-               tccp = &tcp->tccps[0];
-               pi[pino].step_p = 1;
-               pi[pino].step_c = maxprec * pi[pino].step_p;
-               pi[pino].step_r = volume->numcomps * pi[pino].step_c;
-               pi[pino].step_l = maxres * pi[pino].step_r;
-               
-               if (pino == 0) {
-                       array_size = volume->numcomps * maxres * tcp->numlayers * maxprec * sizeof(short int);
-                       pi[pino].include = (short int *) opj_malloc(array_size);
-                       if(!pi[pino].include) {
-                               fprintf(stdout,"[ERROR] Malloc of pi[pino].include failed \n");
-                               pi_destroy(pi, cp, tileno);
-                               return NULL;
-                       }
-               }
-               else {
-                       pi[pino].include = pi[pino - 1].include;
-               }
-               
-               if (tcp->POC == 0) {
-                       pi[pino].first = 1;
-                       pi[pino].poc.resno0 = 0;
-                       pi[pino].poc.compno0 = 0;
-                       pi[pino].poc.layno1 = tcp->numlayers;
-                       pi[pino].poc.resno1 = maxres;
-                       pi[pino].poc.compno1 = volume->numcomps;
-                       pi[pino].poc.prg = tcp->prg;
-               } else {
-                       pi[pino].first = 1;
-                       pi[pino].poc.resno0 = tcp->pocs[pino].resno0;
-                       pi[pino].poc.compno0 = tcp->pocs[pino].compno0;
-                       pi[pino].poc.layno1 = tcp->pocs[pino].layno1;
-                       pi[pino].poc.resno1 = tcp->pocs[pino].resno1;
-                       pi[pino].poc.compno1 = tcp->pocs[pino].compno1;
-                       pi[pino].poc.prg = tcp->pocs[pino].prg;
-               }
-       }
-       
-       return pi;
+opj_pi_iterator_t *pi_create(opj_volume_t *volume, opj_cp_t *cp, int tileno)
+{
+    int p, q, r;
+    int compno, resno, pino;
+    opj_pi_iterator_t *pi = NULL;
+    opj_tcp_t *tcp = NULL;
+    opj_tccp_t *tccp = NULL;
+    size_t array_size;
+
+    tcp = &cp->tcps[tileno];
+
+    array_size = (tcp->numpocs + 1) * sizeof(opj_pi_iterator_t);
+    pi = (opj_pi_iterator_t *) opj_malloc(array_size);
+    if (!pi) {
+        fprintf(stdout, "[ERROR] Malloc of opj_pi_iterator failed \n");
+        return NULL;
+    }
+
+    for (pino = 0; pino < tcp->numpocs + 1; pino++) {   /* change */
+        int maxres = 0;
+        int maxprec = 0;
+        p = tileno % cp->tw;
+        q = tileno / cp->tw;
+        r = tileno / (cp->tw * cp->th);
+
+        pi[pino].tx0 = int_max(cp->tx0 + p * cp->tdx, volume->x0);
+        pi[pino].ty0 = int_max(cp->ty0 + q * cp->tdy, volume->y0);
+        pi[pino].tz0 = int_max(cp->tz0 + r * cp->tdz, volume->z0);
+        pi[pino].tx1 = int_min(cp->tx0 + (p + 1) * cp->tdx, volume->x1);
+        pi[pino].ty1 = int_min(cp->ty0 + (q + 1) * cp->tdy, volume->y1);
+        pi[pino].tz1 = int_min(cp->tz0 + (r + 1) * cp->tdz, volume->z1);
+        pi[pino].numcomps = volume->numcomps;
+
+        array_size = volume->numcomps * sizeof(opj_pi_comp_t);
+        pi[pino].comps = (opj_pi_comp_t *) opj_malloc(array_size);
+        if (!pi[pino].comps) {
+            fprintf(stdout, "[ERROR] Malloc of opj_pi_comp failed \n");
+            pi_destroy(pi, cp, tileno);
+            return NULL;
+        }
+        memset(pi[pino].comps, 0, array_size);
+
+        for (compno = 0; compno < pi->numcomps; compno++) {
+            int tcx0, tcx1, tcy0, tcy1, tcz0, tcz1;
+            int i;
+            opj_pi_comp_t *comp = &pi[pino].comps[compno];
+            tccp = &tcp->tccps[compno];
+
+            comp->dx = volume->comps[compno].dx;
+            comp->dy = volume->comps[compno].dy;
+            comp->dz = volume->comps[compno].dz;
+            for (i = 0; i < 3; i++) {
+                comp->numresolution[i] = tccp->numresolution[i];
+                if (comp->numresolution[i] > maxres) {
+                    maxres = comp->numresolution[i];
+                }
+            }
+            array_size = comp->numresolution[0] * sizeof(opj_pi_resolution_t);
+            comp->resolutions = (opj_pi_resolution_t *) opj_malloc(array_size);
+            if (!comp->resolutions) {
+                fprintf(stdout, "[ERROR] Malloc of opj_pi_resolution failed \n");
+                pi_destroy(pi, cp, tileno);
+                return NULL;
+            }
+
+            tcx0 = int_ceildiv(pi->tx0, comp->dx);
+            tcy0 = int_ceildiv(pi->ty0, comp->dy);
+            tcz0 = int_ceildiv(pi->tz0, comp->dz);
+            tcx1 = int_ceildiv(pi->tx1, comp->dx);
+            tcy1 = int_ceildiv(pi->ty1, comp->dy);
+            tcz1 = int_ceildiv(pi->tz1, comp->dz);
+
+            for (resno = 0; resno < comp->numresolution[0]; resno++) {
+                int levelnox, levelnoy, levelnoz, diff;
+                int rx0, ry0, rz0, rx1, ry1, rz1;
+                int px0, py0, pz0, px1, py1, pz1;
+                opj_pi_resolution_t *res = &comp->resolutions[resno];
+                if (tccp->csty & J3D_CCP_CSTY_PRT) {
+                    res->pdx = tccp->prctsiz[0][resno];
+                    res->pdy = tccp->prctsiz[1][resno];
+                    res->pdz = tccp->prctsiz[2][resno];
+                } else {
+                    res->pdx = 15;
+                    res->pdy = 15;
+                    res->pdz = 15;
+                }
+                levelnox = comp->numresolution[0] - 1 - resno;
+                levelnoy = comp->numresolution[1] - 1 - resno;
+                levelnoz = comp->numresolution[2] - 1 - resno;
+                if (levelnoz < 0) {
+                    levelnoz = 0;
+                }
+                diff = comp->numresolution[0] - comp->numresolution[2];
+
+                rx0 = int_ceildivpow2(tcx0, levelnox);
+                ry0 = int_ceildivpow2(tcy0, levelnoy);
+                rz0 = int_ceildivpow2(tcz0, levelnoz);
+                rx1 = int_ceildivpow2(tcx1, levelnox);
+                ry1 = int_ceildivpow2(tcy1, levelnoy);
+                rz1 = int_ceildivpow2(tcz1, levelnoz);
+                px0 = int_floordivpow2(rx0, res->pdx) << res->pdx;
+                py0 = int_floordivpow2(ry0, res->pdy) << res->pdy;
+                pz0 = int_floordivpow2(rz0, res->pdz) << res->pdz;
+                px1 = int_ceildivpow2(rx1, res->pdx) << res->pdx;
+                py1 = int_ceildivpow2(ry1, res->pdy) << res->pdy;
+                pz1 = int_ceildivpow2(rz1, res->pdz) << res->pdz;
+                res->prctno[0] = (rx0 == rx1) ? 0 : ((px1 - px0) >> res->pdx);
+                res->prctno[1] = (ry0 == ry1) ? 0 : ((py1 - py0) >> res->pdy);
+                res->prctno[2] = (rz0 == rz1) ? 0 : ((pz1 - pz0) >> res->pdz);
+
+                if (res->prctno[0]*res->prctno[1]*res->prctno[2] > maxprec) {
+                    maxprec = res->prctno[0] * res->prctno[1] * res->prctno[2];
+                }
+            }
+        }
+
+        tccp = &tcp->tccps[0];
+        pi[pino].step_p = 1;
+        pi[pino].step_c = maxprec * pi[pino].step_p;
+        pi[pino].step_r = volume->numcomps * pi[pino].step_c;
+        pi[pino].step_l = maxres * pi[pino].step_r;
+
+        if (pino == 0) {
+            array_size = volume->numcomps * maxres * tcp->numlayers * maxprec * sizeof(
+                             short int);
+            pi[pino].include = (short int *) opj_malloc(array_size);
+            if (!pi[pino].include) {
+                fprintf(stdout, "[ERROR] Malloc of pi[pino].include failed \n");
+                pi_destroy(pi, cp, tileno);
+                return NULL;
+            }
+        } else {
+            pi[pino].include = pi[pino - 1].include;
+        }
+
+        if (tcp->POC == 0) {
+            pi[pino].first = 1;
+            pi[pino].poc.resno0 = 0;
+            pi[pino].poc.compno0 = 0;
+            pi[pino].poc.layno1 = tcp->numlayers;
+            pi[pino].poc.resno1 = maxres;
+            pi[pino].poc.compno1 = volume->numcomps;
+            pi[pino].poc.prg = tcp->prg;
+        } else {
+            pi[pino].first = 1;
+            pi[pino].poc.resno0 = tcp->pocs[pino].resno0;
+            pi[pino].poc.compno0 = tcp->pocs[pino].compno0;
+            pi[pino].poc.layno1 = tcp->pocs[pino].layno1;
+            pi[pino].poc.resno1 = tcp->pocs[pino].resno1;
+            pi[pino].poc.compno1 = tcp->pocs[pino].compno1;
+            pi[pino].poc.prg = tcp->pocs[pino].prg;
+        }
+    }
+
+    return pi;
 }
 
-void pi_destroy(opj_pi_iterator_t *pi, opj_cp_t *cp, int tileno) {
-       int compno, pino;
-       opj_tcp_t *tcp = &cp->tcps[tileno];
-       if(pi) {
-               for (pino = 0; pino < tcp->numpocs + 1; pino++) {       
-                       if(pi[pino].comps) {
-                               for (compno = 0; compno < pi->numcomps; compno++) {
-                                       opj_pi_comp_t *comp = &pi[pino].comps[compno];
-                                       if(comp->resolutions) {
-                                               opj_free(comp->resolutions);
-                                       }
-                               }
-                               opj_free(pi[pino].comps);
-                       }
-               }
-               if(pi->include) {
-                       opj_free(pi->include);
-               }
-               opj_free(pi);
-       }
+void pi_destroy(opj_pi_iterator_t *pi, opj_cp_t *cp, int tileno)
+{
+    int compno, pino;
+    opj_tcp_t *tcp = &cp->tcps[tileno];
+    if (pi) {
+        for (pino = 0; pino < tcp->numpocs + 1; pino++) {
+            if (pi[pino].comps) {
+                for (compno = 0; compno < pi->numcomps; compno++) {
+                    opj_pi_comp_t *comp = &pi[pino].comps[compno];
+                    if (comp->resolutions) {
+                        opj_free(comp->resolutions);
+                    }
+                }
+                opj_free(pi[pino].comps);
+            }
+        }
+        if (pi->include) {
+            opj_free(pi->include);
+        }
+        opj_free(pi);
+    }
 }
 
-bool pi_next(opj_pi_iterator_t * pi) {
-       switch (pi->poc.prg) {
-               case LRCP:
-                       return pi_next_lrcp(pi);
-               case RLCP:
-                       return pi_next_rlcp(pi);
-               case RPCL:
-                       return pi_next_rpcl(pi);
-               case PCRL:
-                       return pi_next_pcrl(pi);
-               case CPRL:
-                       return pi_next_cprl(pi);
-       }
-       
-       return false;
+bool pi_next(opj_pi_iterator_t * pi)
+{
+    switch (pi->poc.prg) {
+    case LRCP:
+        return pi_next_lrcp(pi);
+    case RLCP:
+        return pi_next_rlcp(pi);
+    case RPCL:
+        return pi_next_rpcl(pi);
+    case PCRL:
+        return pi_next_pcrl(pi);
+    case CPRL:
+        return pi_next_cprl(pi);
+    }
+
+    return false;
 }
 
index 7f6a3ad51351baf02ad940d50d12c758db5015af..ab0c2d2b50136df0d25ec2177658504296048e70 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
 
 #include "opj_includes.h"
 
-/* 
+/*
 ==========================================================
    local functions
 ==========================================================
 */
 
 
-/* 
+/*
 ==========================================================
    RAW encoding interface
 ==========================================================
 */
 
-opj_raw_t* raw_create() {
-       opj_raw_t *raw = (opj_raw_t*)opj_malloc(sizeof(opj_raw_t));
-       return raw;
+opj_raw_t* raw_create()
+{
+    opj_raw_t *raw = (opj_raw_t*)opj_malloc(sizeof(opj_raw_t));
+    return raw;
 }
 
-void raw_destroy(opj_raw_t *raw) {
-       if(raw) {
-               opj_free(raw);
-       }
+void raw_destroy(opj_raw_t *raw)
+{
+    if (raw) {
+        opj_free(raw);
+    }
 }
 
-int raw_numbytes(opj_raw_t *raw) {
-       return raw->bp - raw->start;
+int raw_numbytes(opj_raw_t *raw)
+{
+    return raw->bp - raw->start;
 }
 
-void raw_init_dec(opj_raw_t *raw, unsigned char *bp, int len) {
-       raw->start = bp;
-       raw->lenmax = len;
-       raw->len = 0;
-       raw->c = 0;
-       raw->ct = 0;
+void raw_init_dec(opj_raw_t *raw, unsigned char *bp, int len)
+{
+    raw->start = bp;
+    raw->lenmax = len;
+    raw->len = 0;
+    raw->c = 0;
+    raw->ct = 0;
 }
 
-int raw_decode(opj_raw_t *raw) {
-       int d;
-       if (raw->ct == 0) {
-               raw->ct = 8;
-               if (raw->len == raw->lenmax) {
-                       raw->c = 0xff;
-               } else {
-                       if (raw->c == 0xff) {
-                               raw->ct = 7;
-                       }
-                       raw->c = *(raw->start + raw->len);
-                       raw->len++;
-               }
-       }
-       raw->ct--;
-       d = (raw->c >> raw->ct) & 0x01;
-       
-       return d;
+int raw_decode(opj_raw_t *raw)
+{
+    int d;
+    if (raw->ct == 0) {
+        raw->ct = 8;
+        if (raw->len == raw->lenmax) {
+            raw->c = 0xff;
+        } else {
+            if (raw->c == 0xff) {
+                raw->ct = 7;
+            }
+            raw->c = *(raw->start + raw->len);
+            raw->len++;
+        }
+    }
+    raw->ct--;
+    d = (raw->c >> raw->ct) & 0x01;
+
+    return d;
 }
 
index e5976161463ca6f17684b3382baee46adbb13afa..a10ba5e48bee7df1e44de5fe5af635b9137e4514 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -51,51 +51,63 @@ static void t1_updateflags(int *fp, int s);
 /**
 Encode significant pass
 */
-static void t1_enc_sigpass_step(opj_t1_t *t1, int *fp, int *dp, int orient, int bpno, int one, int *nmsedec, char type, int vsc);
+static void t1_enc_sigpass_step(opj_t1_t *t1, int *fp, int *dp, int orient,
+                                int bpno, int one, int *nmsedec, char type, int vsc);
 /**
 Decode significant pass
 */
-static void t1_dec_sigpass_step(opj_t1_t *t1, int *fp, int *dp, int orient, int oneplushalf, char type, int vsc);
+static void t1_dec_sigpass_step(opj_t1_t *t1, int *fp, int *dp, int orient,
+                                int oneplushalf, char type, int vsc);
 /**
 Encode significant pass
 */
-static void t1_enc_sigpass(opj_t1_t *t1, int w, int h, int l, int bpno, int orient, int *nmsedec, char type, int cblksty);
+static void t1_enc_sigpass(opj_t1_t *t1, int w, int h, int l, int bpno,
+                           int orient, int *nmsedec, char type, int cblksty);
 /**
 Decode significant pass
 */
-static void t1_dec_sigpass(opj_t1_t *t1, int w, int h, int l, int bpno, int orient, char type, int cblksty);
+static void t1_dec_sigpass(opj_t1_t *t1, int w, int h, int l, int bpno,
+                           int orient, char type, int cblksty);
 /**
 Encode refinement pass
 */
-static void t1_enc_refpass_step(opj_t1_t *t1, int *fp, int *dp, int bpno, int one, int *nmsedec, char type, int vsc);
+static void t1_enc_refpass_step(opj_t1_t *t1, int *fp, int *dp, int bpno,
+                                int one, int *nmsedec, char type, int vsc);
 /**
 Decode refinement pass
 */
-static void t1_dec_refpass_step(opj_t1_t *t1, int *fp, int *dp, int poshalf, int neghalf, char type, int vsc);
+static void t1_dec_refpass_step(opj_t1_t *t1, int *fp, int *dp, int poshalf,
+                                int neghalf, char type, int vsc);
 /**
 Encode refinement pass
 */
-static void t1_enc_refpass(opj_t1_t *t1, int w, int h, int l, int bpno, int *nmsedec, char type, int cblksty);
+static void t1_enc_refpass(opj_t1_t *t1, int w, int h, int l, int bpno,
+                           int *nmsedec, char type, int cblksty);
 /**
 Decode refinement pass
 */
-static void t1_dec_refpass(opj_t1_t *t1, int w, int h, int l, int bpno, char type, int cblksty);
+static void t1_dec_refpass(opj_t1_t *t1, int w, int h, int l, int bpno,
+                           char type, int cblksty);
 /**
 Encode clean-up pass
 */
-static void t1_enc_clnpass_step(opj_t1_t *t1, int *fp, int *dp, int orient, int bpno, int one, int *nmsedec, int partial, int vsc);
+static void t1_enc_clnpass_step(opj_t1_t *t1, int *fp, int *dp, int orient,
+                                int bpno, int one, int *nmsedec, int partial, int vsc);
 /**
 Decode clean-up pass
 */
-static void t1_dec_clnpass_step(opj_t1_t *t1, int *fp, int *dp, int orient, int oneplushalf, int partial, int vsc);
+static void t1_dec_clnpass_step(opj_t1_t *t1, int *fp, int *dp, int orient,
+                                int oneplushalf, int partial, int vsc);
 /**
 Encode clean-up pass
 */
-static void t1_enc_clnpass(opj_t1_t *t1, int w, int h, int l, int bpno, int orient, int *nmsedec, int cblksty);
+static void t1_enc_clnpass(opj_t1_t *t1, int w, int h, int l, int bpno,
+                           int orient, int *nmsedec, int cblksty);
 /**
 Decode clean-up pass
 */
-static void t1_dec_clnpass(opj_t1_t *t1, int w, int h, int l, int bpno, int orient, int cblksty);
+static void t1_dec_clnpass(opj_t1_t *t1, int w, int h, int l, int bpno,
+                           int orient, int cblksty);
 /**
 Encode 1 code-block
 @param t1 T1 handle
@@ -109,7 +121,9 @@ Encode 1 code-block
 @param numcomps
 @param tile
 */
-static void t1_encode_cblk(opj_t1_t *t1, opj_tcd_cblk_t * cblk, int orient, int compno, int level[3], int dwtid[3], double stepsize, int cblksty, int numcomps, opj_tcd_tile_t * tile);
+static void t1_encode_cblk(opj_t1_t *t1, opj_tcd_cblk_t * cblk, int orient,
+                           int compno, int level[3], int dwtid[3], double stepsize, int cblksty,
+                           int numcomps, opj_tcd_tile_t * tile);
 /**
 Decode 1 code-block
 @param t1 T1 handle
@@ -118,7 +132,8 @@ Decode 1 code-block
 @param roishift Region of interest shifting value
 @param cblksty Code-block style
 */
-static void t1_decode_cblk(opj_t1_t *t1, opj_tcd_cblk_t * cblk, int orient, int roishift, int cblksty);
+static void t1_decode_cblk(opj_t1_t *t1, opj_tcd_cblk_t * cblk, int orient,
+                           int roishift, int cblksty);
 
 static int t1_init_ctxno_zc(int f, int orient);
 static int t1_init_ctxno_sc(int f);
@@ -136,1051 +151,1144 @@ static void t1_init_luts(opj_t1_t *t1);
 
 /* ----------------------------------------------------------------------- */
 
-static int t1_getctxno_zc(opj_t1_t *t1, int f, int orient) {
-       return t1->lut_ctxno_zc[(orient << 8) | (f & T1_SIG_OTH)];
+static int t1_getctxno_zc(opj_t1_t *t1, int f, int orient)
+{
+    return t1->lut_ctxno_zc[(orient << 8) | (f & T1_SIG_OTH)];
 }
 
-static int t1_getctxno_sc(opj_t1_t *t1, int f) {
-       return t1->lut_ctxno_sc[(f & (T1_SIG_PRIM | T1_SGN)) >> 4];
+static int t1_getctxno_sc(opj_t1_t *t1, int f)
+{
+    return t1->lut_ctxno_sc[(f & (T1_SIG_PRIM | T1_SGN)) >> 4];
 }
 
-static int t1_getctxno_mag(opj_t1_t *t1, int f) {
-       return t1->lut_ctxno_mag[(f & T1_SIG_OTH) | (((f & T1_REFINE) != 0) << 11)];
+static int t1_getctxno_mag(opj_t1_t *t1, int f)
+{
+    return t1->lut_ctxno_mag[(f & T1_SIG_OTH) | (((f & T1_REFINE) != 0) << 11)];
 }
 
-static int t1_getspb(opj_t1_t *t1, int f) {
-       return t1->lut_spb[(f & (T1_SIG_PRIM | T1_SGN)) >> 4];
+static int t1_getspb(opj_t1_t *t1, int f)
+{
+    return t1->lut_spb[(f & (T1_SIG_PRIM | T1_SGN)) >> 4];
 }
 
-static int t1_getnmsedec_sig(opj_t1_t *t1, int x, int bitpos) {
-       if (bitpos > T1_NMSEDEC_FRACBITS) {
-               return t1->lut_nmsedec_sig[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((1 << T1_NMSEDEC_BITS) - 1)];
-       }
-       
-       return t1->lut_nmsedec_sig0[x & ((1 << T1_NMSEDEC_BITS) - 1)];
+static int t1_getnmsedec_sig(opj_t1_t *t1, int x, int bitpos)
+{
+    if (bitpos > T1_NMSEDEC_FRACBITS) {
+        return t1->lut_nmsedec_sig[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((
+                                                                             1 << T1_NMSEDEC_BITS) - 1)];
+    }
+
+    return t1->lut_nmsedec_sig0[x & ((1 << T1_NMSEDEC_BITS) - 1)];
 }
 
-static int t1_getnmsedec_ref(opj_t1_t *t1, int x, int bitpos) {
-       if (bitpos > T1_NMSEDEC_FRACBITS) {
-               return t1->lut_nmsedec_ref[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((1 << T1_NMSEDEC_BITS) - 1)];
-       }
+static int t1_getnmsedec_ref(opj_t1_t *t1, int x, int bitpos)
+{
+    if (bitpos > T1_NMSEDEC_FRACBITS) {
+        return t1->lut_nmsedec_ref[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((
+                                                                             1 << T1_NMSEDEC_BITS) - 1)];
+    }
 
     return t1->lut_nmsedec_ref0[x & ((1 << T1_NMSEDEC_BITS) - 1)];
 }
 
-static void t1_updateflags(int *fp, int s) {
-       int *np = fp - (T1_MAXCBLKW + 2);
-       int *sp = fp + (T1_MAXCBLKW + 2);
-       np[-1] |= T1_SIG_SE;
-       np[1] |= T1_SIG_SW;
-       sp[-1] |= T1_SIG_NE;
-       sp[1] |= T1_SIG_NW;
-       *np |= T1_SIG_S;
-       *sp |= T1_SIG_N;
-       fp[-1] |= T1_SIG_E;
-       fp[1] |= T1_SIG_W;
-       if (s) {
-               *np |= T1_SGN_S;
-               *sp |= T1_SGN_N;
-               fp[-1] |= T1_SGN_E;
-               fp[1] |= T1_SGN_W;
-       }
+static void t1_updateflags(int *fp, int s)
+{
+    int *np = fp - (T1_MAXCBLKW + 2);
+    int *sp = fp + (T1_MAXCBLKW + 2);
+    np[-1] |= T1_SIG_SE;
+    np[1] |= T1_SIG_SW;
+    sp[-1] |= T1_SIG_NE;
+    sp[1] |= T1_SIG_NW;
+    *np |= T1_SIG_S;
+    *sp |= T1_SIG_N;
+    fp[-1] |= T1_SIG_E;
+    fp[1] |= T1_SIG_W;
+    if (s) {
+        *np |= T1_SGN_S;
+        *sp |= T1_SGN_N;
+        fp[-1] |= T1_SGN_E;
+        fp[1] |= T1_SGN_W;
+    }
 }
 
-static void t1_enc_sigpass_step(opj_t1_t *t1, int *fp, int *dp, int orient, int bpno, int one, int *nmsedec, char type, int vsc) {
-       int v, flag;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp);
-       if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) {
-               v = int_abs(*dp) & one ? 1 : 0;
-               if (type == T1_TYPE_RAW) {      /* BYPASS/LAZY MODE */
-                       mqc_setcurctx(mqc, t1_getctxno_zc(t1, flag, orient));   /* ESSAI */
-                       mqc_bypass_enc(mqc, v);
-               } else {
-                       mqc_setcurctx(mqc, t1_getctxno_zc(t1, flag, orient));
-                       mqc_encode(mqc, v);
-               }
-               if (v) {
-                       v = *dp < 0 ? 1 : 0;
-                       *nmsedec +=     t1_getnmsedec_sig(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS);
-                       if (type == T1_TYPE_RAW) {      /* BYPASS/LAZY MODE */
-                               mqc_setcurctx(mqc, t1_getctxno_sc(t1, flag));   /* ESSAI */
-                               mqc_bypass_enc(mqc, v);
-                       } else {
-                               mqc_setcurctx(mqc, t1_getctxno_sc(t1, flag));
-                               mqc_encode(mqc, v ^ t1_getspb(t1, flag));
-                       }
-                       t1_updateflags(fp, v);
-                       *fp |= T1_SIG;
-               }
-               *fp |= T1_VISIT;
-       }
+static void t1_enc_sigpass_step(opj_t1_t *t1, int *fp, int *dp, int orient,
+                                int bpno, int one, int *nmsedec, char type, int vsc)
+{
+    int v, flag;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp);
+    if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) {
+        v = int_abs(*dp) & one ? 1 : 0;
+        if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
+            mqc_setcurctx(mqc, t1_getctxno_zc(t1, flag, orient));   /* ESSAI */
+            mqc_bypass_enc(mqc, v);
+        } else {
+            mqc_setcurctx(mqc, t1_getctxno_zc(t1, flag, orient));
+            mqc_encode(mqc, v);
+        }
+        if (v) {
+            v = *dp < 0 ? 1 : 0;
+            *nmsedec += t1_getnmsedec_sig(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS);
+            if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
+                mqc_setcurctx(mqc, t1_getctxno_sc(t1, flag));   /* ESSAI */
+                mqc_bypass_enc(mqc, v);
+            } else {
+                mqc_setcurctx(mqc, t1_getctxno_sc(t1, flag));
+                mqc_encode(mqc, v ^ t1_getspb(t1, flag));
+            }
+            t1_updateflags(fp, v);
+            *fp |= T1_SIG;
+        }
+        *fp |= T1_VISIT;
+    }
 }
 
-static void t1_dec_sigpass_step(opj_t1_t *t1, int *fp, int *dp, int orient, int oneplushalf, char type, int vsc) {
-       int v, flag;
-       
-       opj_raw_t *raw = t1->raw;       /* RAW component */
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp);
-       if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) {
-               if (type == T1_TYPE_RAW) {
-                       if (raw_decode(raw)) {
-                               v = raw_decode(raw);    /* ESSAI */
-                               *dp = v ? -oneplushalf : oneplushalf;
-                               t1_updateflags(fp, v);
-                               *fp |= T1_SIG;
-                       }
-               } else {
-                       mqc_setcurctx(mqc, t1_getctxno_zc(t1, flag, orient));
-                       if (mqc_decode(mqc)) {
-                               mqc_setcurctx(mqc, t1_getctxno_sc(t1, flag));
-                               v = mqc_decode(mqc) ^ t1_getspb(t1, flag);
-                               *dp = v ? -oneplushalf : oneplushalf;
-                               t1_updateflags(fp, v);
-                               *fp |= T1_SIG;
-                       }
-               }
-               *fp |= T1_VISIT;
-       }
-}                              /* VSC and  BYPASS by Antonin */
-
-static void t1_enc_sigpass(opj_t1_t *t1, int w, int h, int l, int bpno, int orient, int *nmsedec, char type, int cblksty) {
-       int i, j, k, m, one, vsc;
-       *nmsedec = 0;
-       one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
-       for (m = 0; m < l; m++) {
-       for (k = 0; k < h; k += 4) {
-               for (i = 0; i < w; i++) {
-                       for (j = k; j < k + 4 && j < h; j++) {
-                               vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
-                               t1_enc_sigpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->data[m][j][i], orient, bpno, one, nmsedec, type, vsc);
-                       }
-               }
-       }
-       }
+static void t1_dec_sigpass_step(opj_t1_t *t1, int *fp, int *dp, int orient,
+                                int oneplushalf, char type, int vsc)
+{
+    int v, flag;
+
+    opj_raw_t *raw = t1->raw;   /* RAW component */
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp);
+    if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) {
+        if (type == T1_TYPE_RAW) {
+            if (raw_decode(raw)) {
+                v = raw_decode(raw);    /* ESSAI */
+                *dp = v ? -oneplushalf : oneplushalf;
+                t1_updateflags(fp, v);
+                *fp |= T1_SIG;
+            }
+        } else {
+            mqc_setcurctx(mqc, t1_getctxno_zc(t1, flag, orient));
+            if (mqc_decode(mqc)) {
+                mqc_setcurctx(mqc, t1_getctxno_sc(t1, flag));
+                v = mqc_decode(mqc) ^ t1_getspb(t1, flag);
+                *dp = v ? -oneplushalf : oneplushalf;
+                t1_updateflags(fp, v);
+                *fp |= T1_SIG;
+            }
+        }
+        *fp |= T1_VISIT;
+    }
+}               /* VSC and  BYPASS by Antonin */
+
+static void t1_enc_sigpass(opj_t1_t *t1, int w, int h, int l, int bpno,
+                           int orient, int *nmsedec, char type, int cblksty)
+{
+    int i, j, k, m, one, vsc;
+    *nmsedec = 0;
+    one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
+    for (m = 0; m < l; m++) {
+        for (k = 0; k < h; k += 4) {
+            for (i = 0; i < w; i++) {
+                for (j = k; j < k + 4 && j < h; j++) {
+                    vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
+                    t1_enc_sigpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->data[m][j][i],
+                                        orient, bpno, one, nmsedec, type, vsc);
+                }
+            }
+        }
+    }
 }
 
-static void t1_dec_sigpass(opj_t1_t *t1, int w, int h, int l, int bpno, int orient, char type, int cblksty) {
-       int i, j, k, m, one, half, oneplushalf, vsc;
-       one = 1 << bpno;
-       half = one >> 1;
-       oneplushalf = one | half;
-       for (m = 0; m < l; m++) {
-       for (k = 0; k < h; k += 4) {
-               for (i = 0; i < w; i++) {
-                       for (j = k; j < k + 4 && j < h; j++) {
-                               vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
-                               t1_dec_sigpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->data[m][j][i], orient, oneplushalf, type, vsc);
-                       }
-               }
-       }
-       }
-}                              /* VSC and  BYPASS by Antonin */
-
-static void t1_enc_refpass_step(opj_t1_t *t1, int *fp, int *dp, int bpno, int one, int *nmsedec, char type, int vsc) {
-       int v, flag;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp);
-       if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) {
-               *nmsedec += t1_getnmsedec_ref(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS);
-               v = int_abs(*dp) & one ? 1 : 0;
-               if (type == T1_TYPE_RAW) {      /* BYPASS/LAZY MODE */
-                       mqc_setcurctx(mqc, t1_getctxno_mag(t1, flag));  /* ESSAI */
-                       mqc_bypass_enc(mqc, v);
-               } else {
-                       mqc_setcurctx(mqc, t1_getctxno_mag(t1, flag));
-                       mqc_encode(mqc, v);
-               }
-               *fp |= T1_REFINE;
-       }
+static void t1_dec_sigpass(opj_t1_t *t1, int w, int h, int l, int bpno,
+                           int orient, char type, int cblksty)
+{
+    int i, j, k, m, one, half, oneplushalf, vsc;
+    one = 1 << bpno;
+    half = one >> 1;
+    oneplushalf = one | half;
+    for (m = 0; m < l; m++) {
+        for (k = 0; k < h; k += 4) {
+            for (i = 0; i < w; i++) {
+                for (j = k; j < k + 4 && j < h; j++) {
+                    vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
+                    t1_dec_sigpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->data[m][j][i],
+                                        orient, oneplushalf, type, vsc);
+                }
+            }
+        }
+    }
+}               /* VSC and  BYPASS by Antonin */
+
+static void t1_enc_refpass_step(opj_t1_t *t1, int *fp, int *dp, int bpno,
+                                int one, int *nmsedec, char type, int vsc)
+{
+    int v, flag;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp);
+    if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) {
+        *nmsedec += t1_getnmsedec_ref(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS);
+        v = int_abs(*dp) & one ? 1 : 0;
+        if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
+            mqc_setcurctx(mqc, t1_getctxno_mag(t1, flag));  /* ESSAI */
+            mqc_bypass_enc(mqc, v);
+        } else {
+            mqc_setcurctx(mqc, t1_getctxno_mag(t1, flag));
+            mqc_encode(mqc, v);
+        }
+        *fp |= T1_REFINE;
+    }
 }
 
-static void t1_dec_refpass_step(opj_t1_t *t1, int *fp, int *dp, int poshalf, int neghalf, char type, int vsc) {
-       int v, t, flag;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       opj_raw_t *raw = t1->raw;       /* RAW component */
-       
-       flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp);
-       if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) {
-               if (type == T1_TYPE_RAW) {
-                       mqc_setcurctx(mqc, t1_getctxno_mag(t1, flag));  /* ESSAI */
-                       v = raw_decode(raw);
-               } else {
-                       mqc_setcurctx(mqc, t1_getctxno_mag(t1, flag));
-                       v = mqc_decode(mqc);
-               }
-               t = v ? poshalf : neghalf;
-               *dp += *dp < 0 ? -t : t;
-               *fp |= T1_REFINE;
-       }
-}                              /* VSC and  BYPASS by Antonin  */
-
-static void t1_enc_refpass(opj_t1_t *t1, int w, int h, int l, int bpno, int *nmsedec, char type, int cblksty) {
-       int i, j, k, m, one, vsc;
-       *nmsedec = 0;
-       one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
-       for (m = 0; m < l; m++) {
-               for (k = 0; k < h; k += 4) {
-               for (i = 0; i < w; i++) {
-                       for (j = k; j < k + 4 && j < h; j++) {
-                               vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
-                               t1_enc_refpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->data[m][j][i], bpno, one, nmsedec, type, vsc);
-                       }
-               }
-       }
-       }
+static void t1_dec_refpass_step(opj_t1_t *t1, int *fp, int *dp, int poshalf,
+                                int neghalf, char type, int vsc)
+{
+    int v, t, flag;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+    opj_raw_t *raw = t1->raw;   /* RAW component */
+
+    flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp);
+    if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) {
+        if (type == T1_TYPE_RAW) {
+            mqc_setcurctx(mqc, t1_getctxno_mag(t1, flag));  /* ESSAI */
+            v = raw_decode(raw);
+        } else {
+            mqc_setcurctx(mqc, t1_getctxno_mag(t1, flag));
+            v = mqc_decode(mqc);
+        }
+        t = v ? poshalf : neghalf;
+        *dp += *dp < 0 ? -t : t;
+        *fp |= T1_REFINE;
+    }
+}               /* VSC and  BYPASS by Antonin  */
+
+static void t1_enc_refpass(opj_t1_t *t1, int w, int h, int l, int bpno,
+                           int *nmsedec, char type, int cblksty)
+{
+    int i, j, k, m, one, vsc;
+    *nmsedec = 0;
+    one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
+    for (m = 0; m < l; m++) {
+        for (k = 0; k < h; k += 4) {
+            for (i = 0; i < w; i++) {
+                for (j = k; j < k + 4 && j < h; j++) {
+                    vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
+                    t1_enc_refpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->data[m][j][i],
+                                        bpno, one, nmsedec, type, vsc);
+                }
+            }
+        }
+    }
 }
 
-static void t1_dec_refpass(opj_t1_t *t1, int w, int h, int l, int bpno, char type, int cblksty) {
-       int i, j, k, m, one, poshalf, neghalf;
-       int vsc;
-       one = 1 << bpno;
-       poshalf = one >> 1;
-       neghalf = bpno > 0 ? -poshalf : -1;
-       for (m = 0; m < l; m++) {
-               for (k = 0; k < h; k += 4) {
-               for (i = 0; i < w; i++) {
-                       for (j = k; j < k + 4 && j < h; j++) {
-                               vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
-                               t1_dec_refpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->data[m][j][i], poshalf, neghalf, type, vsc);
-                       }
-               }
-       }
-       }
-}                              /* VSC and  BYPASS by Antonin */
-
-static void t1_enc_clnpass_step(opj_t1_t *t1, int *fp, int *dp, int orient, int bpno, int one, int *nmsedec, int partial, int vsc) {
-       int v, flag;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp);
-       if (partial) {
-               goto LABEL_PARTIAL;
-       }
-       if (!(*fp & (T1_SIG | T1_VISIT))) {
-               mqc_setcurctx(mqc, t1_getctxno_zc(t1, flag, orient));
-               v = int_abs(*dp) & one ? 1 : 0;
-               mqc_encode(mqc, v);
-               if (v) {
+static void t1_dec_refpass(opj_t1_t *t1, int w, int h, int l, int bpno,
+                           char type, int cblksty)
+{
+    int i, j, k, m, one, poshalf, neghalf;
+    int vsc;
+    one = 1 << bpno;
+    poshalf = one >> 1;
+    neghalf = bpno > 0 ? -poshalf : -1;
+    for (m = 0; m < l; m++) {
+        for (k = 0; k < h; k += 4) {
+            for (i = 0; i < w; i++) {
+                for (j = k; j < k + 4 && j < h; j++) {
+                    vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
+                    t1_dec_refpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->data[m][j][i],
+                                        poshalf, neghalf, type, vsc);
+                }
+            }
+        }
+    }
+}               /* VSC and  BYPASS by Antonin */
+
+static void t1_enc_clnpass_step(opj_t1_t *t1, int *fp, int *dp, int orient,
+                                int bpno, int one, int *nmsedec, int partial, int vsc)
+{
+    int v, flag;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp);
+    if (partial) {
+        goto LABEL_PARTIAL;
+    }
+    if (!(*fp & (T1_SIG | T1_VISIT))) {
+        mqc_setcurctx(mqc, t1_getctxno_zc(t1, flag, orient));
+        v = int_abs(*dp) & one ? 1 : 0;
+        mqc_encode(mqc, v);
+        if (v) {
 LABEL_PARTIAL:
-                       *nmsedec += t1_getnmsedec_sig(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS);
-                       mqc_setcurctx(mqc, t1_getctxno_sc(t1, flag));
-                       v = *dp < 0 ? 1 : 0;
-                       mqc_encode(mqc, v ^ t1_getspb(t1, flag));
-                       t1_updateflags(fp, v);
-                       *fp |= T1_SIG;
-               }
-       }
-       *fp &= ~T1_VISIT;
+            *nmsedec += t1_getnmsedec_sig(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS);
+            mqc_setcurctx(mqc, t1_getctxno_sc(t1, flag));
+            v = *dp < 0 ? 1 : 0;
+            mqc_encode(mqc, v ^ t1_getspb(t1, flag));
+            t1_updateflags(fp, v);
+            *fp |= T1_SIG;
+        }
+    }
+    *fp &= ~T1_VISIT;
 }
 
-static void t1_dec_clnpass_step(opj_t1_t *t1, int *fp, int *dp, int orient, int oneplushalf, int partial, int vsc) {
-       int v, flag;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp);
-       if (partial) {
-               goto LABEL_PARTIAL;
-       }
-       if (!(flag & (T1_SIG | T1_VISIT))) {
-               mqc_setcurctx(mqc, t1_getctxno_zc(t1, flag, orient));
-               if (mqc_decode(mqc)) {
+static void t1_dec_clnpass_step(opj_t1_t *t1, int *fp, int *dp, int orient,
+                                int oneplushalf, int partial, int vsc)
+{
+    int v, flag;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = vsc ? ((*fp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*fp);
+    if (partial) {
+        goto LABEL_PARTIAL;
+    }
+    if (!(flag & (T1_SIG | T1_VISIT))) {
+        mqc_setcurctx(mqc, t1_getctxno_zc(t1, flag, orient));
+        if (mqc_decode(mqc)) {
 LABEL_PARTIAL:
-                       mqc_setcurctx(mqc, t1_getctxno_sc(t1, flag));
-                       v = mqc_decode(mqc) ^ t1_getspb(t1, flag);
-                       *dp = v ? -oneplushalf : oneplushalf;
-                       t1_updateflags(fp, v);
-                       *fp |= T1_SIG;
-               }
-       }
-       *fp &= ~T1_VISIT;
-}                              /* VSC and  BYPASS by Antonin */
-
-static void t1_enc_clnpass(opj_t1_t *t1, int w, int h, int l, int bpno, int orient, int *nmsedec, int cblksty) {
-       int i, j, k, m, one, agg, runlen, vsc;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       *nmsedec = 0;
-       one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
-       for (m = 0; m < l; m++) {
-               for (k = 0; k < h; k += 4) {
-                       for (i = 0; i < w; i++) {
-                               if (k + 3 < h) {
-                                       if (cblksty & J3D_CCP_CBLKSTY_VSC) {
-                                               agg = !(t1->flags[1 + m][1 + k][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                                       || t1->flags[1 + m][1 + k + 1][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                                       || t1->flags[1 + m][1 + k + 2][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                                       || (t1->flags[1 + m][1 + k + 3][1 + i] 
-                                                       & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) & (T1_SIG | T1_VISIT | T1_SIG_OTH));
-                                       } else {
-                                               agg = !(t1->flags[1 + m][1 + k][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                                       || t1->flags[1 + m][1 + k + 1][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                                       || t1->flags[1 + m][1 + k + 2][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                                       || t1->flags[1 + m][1 + k + 3][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH));
-                                       }
-                               } else {
-                                       agg = 0;
-                               }
-                               if (agg) {
-                                       for (runlen = 0; runlen < 4; runlen++) {
-                                               if (int_abs(t1->data[m][k + runlen][i]) & one)
-                                                       break;
-                                       }
-                                       mqc_setcurctx(mqc, T1_CTXNO_AGG);
-                                       mqc_encode(mqc, runlen != 4);
-                                       if (runlen == 4) {
-                                               continue;
-                                       }
-                                       mqc_setcurctx(mqc, T1_CTXNO_UNI);
-                                       mqc_encode(mqc, runlen >> 1);
-                                       mqc_encode(mqc, runlen & 1);
-                               } else {
-                                       runlen = 0;
-                               }
-                               for (j = k + runlen; j < k + 4 && j < h; j++) {
-                                       vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
-                                       t1_enc_clnpass_step(t1, &(t1->flags[1 + m][1 + j][1 + i]), &(t1->data[m][j][i]), orient, bpno, one, nmsedec, agg && (j == k + runlen), vsc);
-                               }
-                       }
-       }
-       }
+            mqc_setcurctx(mqc, t1_getctxno_sc(t1, flag));
+            v = mqc_decode(mqc) ^ t1_getspb(t1, flag);
+            *dp = v ? -oneplushalf : oneplushalf;
+            t1_updateflags(fp, v);
+            *fp |= T1_SIG;
+        }
+    }
+    *fp &= ~T1_VISIT;
+}               /* VSC and  BYPASS by Antonin */
+
+static void t1_enc_clnpass(opj_t1_t *t1, int w, int h, int l, int bpno,
+                           int orient, int *nmsedec, int cblksty)
+{
+    int i, j, k, m, one, agg, runlen, vsc;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    *nmsedec = 0;
+    one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
+    for (m = 0; m < l; m++) {
+        for (k = 0; k < h; k += 4) {
+            for (i = 0; i < w; i++) {
+                if (k + 3 < h) {
+                    if (cblksty & J3D_CCP_CBLKSTY_VSC) {
+                        agg = !(t1->flags[1 + m][1 + k][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                                || t1->flags[1 + m][1 + k + 1][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                                || t1->flags[1 + m][1 + k + 2][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                                || (t1->flags[1 + m][1 + k + 3][1 + i]
+                                    & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) & (T1_SIG | T1_VISIT |
+                                            T1_SIG_OTH));
+                    } else {
+                        agg = !(t1->flags[1 + m][1 + k][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                                || t1->flags[1 + m][1 + k + 1][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                                || t1->flags[1 + m][1 + k + 2][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                                || t1->flags[1 + m][1 + k + 3][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH));
+                    }
+                } else {
+                    agg = 0;
+                }
+                if (agg) {
+                    for (runlen = 0; runlen < 4; runlen++) {
+                        if (int_abs(t1->data[m][k + runlen][i]) & one) {
+                            break;
+                        }
+                    }
+                    mqc_setcurctx(mqc, T1_CTXNO_AGG);
+                    mqc_encode(mqc, runlen != 4);
+                    if (runlen == 4) {
+                        continue;
+                    }
+                    mqc_setcurctx(mqc, T1_CTXNO_UNI);
+                    mqc_encode(mqc, runlen >> 1);
+                    mqc_encode(mqc, runlen & 1);
+                } else {
+                    runlen = 0;
+                }
+                for (j = k + runlen; j < k + 4 && j < h; j++) {
+                    vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
+                    t1_enc_clnpass_step(t1, &(t1->flags[1 + m][1 + j][1 + i]), &(t1->data[m][j][i]),
+                                        orient, bpno, one, nmsedec, agg && (j == k + runlen), vsc);
+                }
+            }
+        }
+    }
 }
 
-static void t1_dec_clnpass(opj_t1_t *t1, int w, int h, int l, int bpno, int orient, int cblksty) {
-       int i, j, k, m, one, half, oneplushalf, agg, runlen, vsc;
-       int segsym = cblksty & J3D_CCP_CBLKSTY_SEGSYM;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       one = 1 << bpno;
-       half = one >> 1;
-       oneplushalf = one | half;
-       for (m = 0; m < l; m++) {
-               for (k = 0; k < h; k += 4) {
-               for (i = 0; i < w; i++) {
-                       if (k + 3 < h) {
-                               if (cblksty & J3D_CCP_CBLKSTY_VSC) {
-                                       agg = !(t1->flags[1 + m][1 + k][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                               || t1->flags[1 + m][1 + k + 1][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                               || t1->flags[1 + m][1 + k + 2][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                               || (t1->flags[1 + m][1 + k + 3][1 + i] 
-                                               & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) & (T1_SIG | T1_VISIT | T1_SIG_OTH));
-                               } else {
-                                       agg = !(t1->flags[1 + m][1 + k][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                               || t1->flags[1 + m][1 + k + 1][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                               || t1->flags[1 + m][1 + k + 2][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                               || t1->flags[1 + m][1 + k + 3][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH));
-                               }
-                       } else {
-                               agg = 0;
-                       }
-                       if (agg) {
-                               mqc_setcurctx(mqc, T1_CTXNO_AGG);
-                               if (!mqc_decode(mqc)) {
-                                       continue;
-                               }
-                               mqc_setcurctx(mqc, T1_CTXNO_UNI);
-                               runlen = mqc_decode(mqc);
-                               runlen = (runlen << 1) | mqc_decode(mqc);
-                       } else {
-                               runlen = 0;
-                       }
-                       for (j = k + runlen; j < k + 4 && j < h; j++) {
-                               vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
-                               t1_dec_clnpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->data[m][j][i], orient, oneplushalf, agg && (j == k + runlen), vsc);
-                       }
-               }
-       }
-       }
-       if (segsym) {
-               int v = 0;
-               mqc_setcurctx(mqc, T1_CTXNO_UNI);
-               v = mqc_decode(mqc);
-               v = (v << 1) | mqc_decode(mqc);
-               v = (v << 1) | mqc_decode(mqc);
-               v = (v << 1) | mqc_decode(mqc);
-               /*
-               if (v!=0xa) {
-                       opj_event_msg(t1->cinfo, EVT_WARNING, "Bad segmentation symbol %x\n", v);
-               } 
-               */
-       }
-}                              /* VSC and  BYPASS by Antonin */
-
-
-static void t1_encode_cblk(opj_t1_t *t1, opj_tcd_cblk_t * cblk, int orient, int compno, int level[3], int dwtid[3], double stepsize, int cblksty, int numcomps, opj_tcd_tile_t * tile) {
-       int i, j, k;
-       int w, h, l;
-       int passno;
-       int bpno, passtype;
-       int max;
-       int nmsedec = 0;
-       double cumwmsedec = 0;
-       char type = T1_TYPE_MQ;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       w = cblk->x1 - cblk->x0;
-       h = cblk->y1 - cblk->y0;
-       l = cblk->z1 - cblk->z0;
-
-       max = 0;
-       for (k = 0; k < l; k++) {
-               for (j = 0; j < h; j++) {
-                       for (i = 0; i < w; i++) {
-                               max = int_max(max, int_abs(t1->data[k][j][i]));
-                       }
-               }
-       }
-       for (k = 0; k <= l; k++) {
-               for (j = 0; j <= h; j++) {
-                       for (i = 0; i <= w; i++) {
-                               t1->flags[k][j][i] = 0; 
-                       }
-               }
-       }
-
-       cblk->numbps = max ? (int_floorlog2(max) + 1) - T1_NMSEDEC_FRACBITS : 0;
-       
-       bpno = cblk->numbps - 1;
-       passtype = 2;
-       
-       mqc_reset_enc(mqc);
-       mqc_init_enc(mqc, cblk->data);
-       
-       for (passno = 0; bpno >= 0; passno++) {
-               opj_tcd_pass_t *pass = &cblk->passes[passno];
-               int correction = 3;
-               double tmpwmsedec;
-               type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) && (cblksty & J3D_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
-               /*fprintf(stdout,"passno %d passtype %d w %d h %d l %d bpno %d orient %d type %d cblksty %d\n",passno,passtype,w,h,l,bpno,orient,type,cblksty);*/
-
-               switch (passtype) {
-                       case 0:
-                               t1_enc_sigpass(t1, w, h, l, bpno, orient, &nmsedec, type, cblksty);
-                               break;
-                       case 1:
-                               t1_enc_refpass(t1, w, h, l, bpno, &nmsedec, type, cblksty);
-                               break;
-                       case 2:
-                               /*fprintf(stdout,"w %d h %d l %d bpno %d orient %d \n",w,h,l,bpno,orient);*/
-                               t1_enc_clnpass(t1, w, h, l, bpno, orient, &nmsedec, cblksty);
-                               /* code switch SEGMARK (i.e. SEGSYM) */
-                               if (cblksty & J3D_CCP_CBLKSTY_SEGSYM)
-                                       mqc_segmark_enc(mqc);
-                               break;
-               }
-               
-               /* fixed_quality */
-               tmpwmsedec = t1_getwmsedec(nmsedec, compno, level, orient, bpno, stepsize, numcomps, dwtid);
-               cumwmsedec += tmpwmsedec;
-               tile->distotile += tmpwmsedec;
-               
-               /* Code switch "RESTART" (i.e. TERMALL) */
-               if ((cblksty & J3D_CCP_CBLKSTY_TERMALL) && !((passtype == 2) && (bpno - 1 < 0))) {
-                       if (type == T1_TYPE_RAW) {
-                               mqc_flush(mqc);
-                               correction = 1;
-                               /* correction = mqc_bypass_flush_enc(); */
-                       } else {                        /* correction = mqc_restart_enc(); */
-                               mqc_flush(mqc);
-                               correction = 1;
-                       }
-                       pass->term = 1;
-               } else {
-                       if (((bpno < (cblk->numbps - 4) && (passtype > 0)) 
-                               || ((bpno == (cblk->numbps - 4)) && (passtype == 2))) && (cblksty & J3D_CCP_CBLKSTY_LAZY)) {
-                               if (type == T1_TYPE_RAW) {
-                                       mqc_flush(mqc);
-                                       correction = 1;
-                                       /* correction = mqc_bypass_flush_enc(); */
-                               } else {                /* correction = mqc_restart_enc(); */
-                                       mqc_flush(mqc);
-                                       correction = 1;
-                               }
-                               pass->term = 1;
-                       } else {
-                               pass->term = 0;
-                       }
-               }
-               
-               if (++passtype == 3) {
-                       passtype = 0;
-                       bpno--;
-               }
-               
-               if (pass->term && bpno > 0) {
-                       type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) && (cblksty & J3D_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
-                       if (type == T1_TYPE_RAW)
-                               mqc_bypass_init_enc(mqc);
-                       else
-                               mqc_restart_init_enc(mqc);
-               }
-               
-               pass->distortiondec = cumwmsedec;
-               pass->rate = mqc_numbytes(mqc) + correction;    /* FIXME */
-               pass->len = pass->rate - (passno == 0 ? 0 : cblk->passes[passno - 1].rate);
-               
-               /* Code-switch "RESET" */
-               if (cblksty & J3D_CCP_CBLKSTY_RESET)
-                       mqc_reset_enc(mqc);
-       }
-       
-       /* Code switch "ERTERM" (i.e. PTERM) */
-       if (cblksty & J3D_CCP_CBLKSTY_PTERM)
-               mqc_erterm_enc(mqc);
-       else /* Default coding */ if (!(cblksty & J3D_CCP_CBLKSTY_LAZY))
-               mqc_flush(mqc);
-       
-       cblk->totalpasses = passno;
+static void t1_dec_clnpass(opj_t1_t *t1, int w, int h, int l, int bpno,
+                           int orient, int cblksty)
+{
+    int i, j, k, m, one, half, oneplushalf, agg, runlen, vsc;
+    int segsym = cblksty & J3D_CCP_CBLKSTY_SEGSYM;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    one = 1 << bpno;
+    half = one >> 1;
+    oneplushalf = one | half;
+    for (m = 0; m < l; m++) {
+        for (k = 0; k < h; k += 4) {
+            for (i = 0; i < w; i++) {
+                if (k + 3 < h) {
+                    if (cblksty & J3D_CCP_CBLKSTY_VSC) {
+                        agg = !(t1->flags[1 + m][1 + k][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                                || t1->flags[1 + m][1 + k + 1][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                                || t1->flags[1 + m][1 + k + 2][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                                || (t1->flags[1 + m][1 + k + 3][1 + i]
+                                    & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) & (T1_SIG | T1_VISIT |
+                                            T1_SIG_OTH));
+                    } else {
+                        agg = !(t1->flags[1 + m][1 + k][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                                || t1->flags[1 + m][1 + k + 1][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                                || t1->flags[1 + m][1 + k + 2][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                                || t1->flags[1 + m][1 + k + 3][1 + i] & (T1_SIG | T1_VISIT | T1_SIG_OTH));
+                    }
+                } else {
+                    agg = 0;
+                }
+                if (agg) {
+                    mqc_setcurctx(mqc, T1_CTXNO_AGG);
+                    if (!mqc_decode(mqc)) {
+                        continue;
+                    }
+                    mqc_setcurctx(mqc, T1_CTXNO_UNI);
+                    runlen = mqc_decode(mqc);
+                    runlen = (runlen << 1) | mqc_decode(mqc);
+                } else {
+                    runlen = 0;
+                }
+                for (j = k + runlen; j < k + 4 && j < h; j++) {
+                    vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
+                    t1_dec_clnpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->data[m][j][i],
+                                        orient, oneplushalf, agg && (j == k + runlen), vsc);
+                }
+            }
+        }
+    }
+    if (segsym) {
+        int v = 0;
+        mqc_setcurctx(mqc, T1_CTXNO_UNI);
+        v = mqc_decode(mqc);
+        v = (v << 1) | mqc_decode(mqc);
+        v = (v << 1) | mqc_decode(mqc);
+        v = (v << 1) | mqc_decode(mqc);
+        /*
+        if (v!=0xa) {
+            opj_event_msg(t1->cinfo, EVT_WARNING, "Bad segmentation symbol %x\n", v);
+        }
+        */
+    }
+}               /* VSC and  BYPASS by Antonin */
+
+
+static void t1_encode_cblk(opj_t1_t *t1, opj_tcd_cblk_t * cblk, int orient,
+                           int compno, int level[3], int dwtid[3], double stepsize, int cblksty,
+                           int numcomps, opj_tcd_tile_t * tile)
+{
+    int i, j, k;
+    int w, h, l;
+    int passno;
+    int bpno, passtype;
+    int max;
+    int nmsedec = 0;
+    double cumwmsedec = 0;
+    char type = T1_TYPE_MQ;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    w = cblk->x1 - cblk->x0;
+    h = cblk->y1 - cblk->y0;
+    l = cblk->z1 - cblk->z0;
+
+    max = 0;
+    for (k = 0; k < l; k++) {
+        for (j = 0; j < h; j++) {
+            for (i = 0; i < w; i++) {
+                max = int_max(max, int_abs(t1->data[k][j][i]));
+            }
+        }
+    }
+    for (k = 0; k <= l; k++) {
+        for (j = 0; j <= h; j++) {
+            for (i = 0; i <= w; i++) {
+                t1->flags[k][j][i] = 0;
+            }
+        }
+    }
+
+    cblk->numbps = max ? (int_floorlog2(max) + 1) - T1_NMSEDEC_FRACBITS : 0;
+
+    bpno = cblk->numbps - 1;
+    passtype = 2;
+
+    mqc_reset_enc(mqc);
+    mqc_init_enc(mqc, cblk->data);
+
+    for (passno = 0; bpno >= 0; passno++) {
+        opj_tcd_pass_t *pass = &cblk->passes[passno];
+        int correction = 3;
+        double tmpwmsedec;
+        type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) &&
+                (cblksty & J3D_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
+        /*fprintf(stdout,"passno %d passtype %d w %d h %d l %d bpno %d orient %d type %d cblksty %d\n",passno,passtype,w,h,l,bpno,orient,type,cblksty);*/
+
+        switch (passtype) {
+        case 0:
+            t1_enc_sigpass(t1, w, h, l, bpno, orient, &nmsedec, type, cblksty);
+            break;
+        case 1:
+            t1_enc_refpass(t1, w, h, l, bpno, &nmsedec, type, cblksty);
+            break;
+        case 2:
+            /*fprintf(stdout,"w %d h %d l %d bpno %d orient %d \n",w,h,l,bpno,orient);*/
+            t1_enc_clnpass(t1, w, h, l, bpno, orient, &nmsedec, cblksty);
+            /* code switch SEGMARK (i.e. SEGSYM) */
+            if (cblksty & J3D_CCP_CBLKSTY_SEGSYM) {
+                mqc_segmark_enc(mqc);
+            }
+            break;
+        }
+
+        /* fixed_quality */
+        tmpwmsedec = t1_getwmsedec(nmsedec, compno, level, orient, bpno, stepsize,
+                                   numcomps, dwtid);
+        cumwmsedec += tmpwmsedec;
+        tile->distotile += tmpwmsedec;
+
+        /* Code switch "RESTART" (i.e. TERMALL) */
+        if ((cblksty & J3D_CCP_CBLKSTY_TERMALL) && !((passtype == 2) &&
+                (bpno - 1 < 0))) {
+            if (type == T1_TYPE_RAW) {
+                mqc_flush(mqc);
+                correction = 1;
+                /* correction = mqc_bypass_flush_enc(); */
+            } else {            /* correction = mqc_restart_enc(); */
+                mqc_flush(mqc);
+                correction = 1;
+            }
+            pass->term = 1;
+        } else {
+            if (((bpno < (cblk->numbps - 4) && (passtype > 0))
+                    || ((bpno == (cblk->numbps - 4)) && (passtype == 2))) &&
+                    (cblksty & J3D_CCP_CBLKSTY_LAZY)) {
+                if (type == T1_TYPE_RAW) {
+                    mqc_flush(mqc);
+                    correction = 1;
+                    /* correction = mqc_bypass_flush_enc(); */
+                } else {        /* correction = mqc_restart_enc(); */
+                    mqc_flush(mqc);
+                    correction = 1;
+                }
+                pass->term = 1;
+            } else {
+                pass->term = 0;
+            }
+        }
+
+        if (++passtype == 3) {
+            passtype = 0;
+            bpno--;
+        }
+
+        if (pass->term && bpno > 0) {
+            type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) &&
+                    (cblksty & J3D_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
+            if (type == T1_TYPE_RAW) {
+                mqc_bypass_init_enc(mqc);
+            } else {
+                mqc_restart_init_enc(mqc);
+            }
+        }
+
+        pass->distortiondec = cumwmsedec;
+        pass->rate = mqc_numbytes(mqc) + correction;    /* FIXME */
+        pass->len = pass->rate - (passno == 0 ? 0 : cblk->passes[passno - 1].rate);
+
+        /* Code-switch "RESET" */
+        if (cblksty & J3D_CCP_CBLKSTY_RESET) {
+            mqc_reset_enc(mqc);
+        }
+    }
+
+    /* Code switch "ERTERM" (i.e. PTERM) */
+    if (cblksty & J3D_CCP_CBLKSTY_PTERM) {
+        mqc_erterm_enc(mqc);
+    } else /* Default coding */ if (!(cblksty & J3D_CCP_CBLKSTY_LAZY)) {
+        mqc_flush(mqc);
+    }
+
+    cblk->totalpasses = passno;
 }
 
-static void t1_decode_cblk(opj_t1_t *t1, opj_tcd_cblk_t * cblk, int orient, int roishift, int cblksty) {
-       int i, j, k, w, h, l;
-       int bpno, passtype;
-       int segno, passno;
-       char type = T1_TYPE_MQ; /* BYPASS mode */
-       
-       opj_raw_t *raw = t1->raw;       /* RAW component */
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       w = cblk->x1 - cblk->x0;
-       h = cblk->y1 - cblk->y0;
-       l = cblk->z1 - cblk->z0;
+static void t1_decode_cblk(opj_t1_t *t1, opj_tcd_cblk_t * cblk, int orient,
+                           int roishift, int cblksty)
+{
+    int i, j, k, w, h, l;
+    int bpno, passtype;
+    int segno, passno;
+    char type = T1_TYPE_MQ; /* BYPASS mode */
+
+    opj_raw_t *raw = t1->raw;   /* RAW component */
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    w = cblk->x1 - cblk->x0;
+    h = cblk->y1 - cblk->y0;
+    l = cblk->z1 - cblk->z0;
 
     for (k = 0; k < l; k++) {
-               for (j = 0; j < h; j++) {
-                       for (i = 0; i < w; i++) {
-                               t1->data[k][j][i] = 0;
-                       }
-               }
-       }
-       
-       for (k = 0; k <= l; k++) {
-               for (j = 0; j <= h; j++) {
-                       for (i = 0; i <= w; i++) {
-                               t1->flags[k][j][i] = 0;
-                       }
-               }
-       }
-
-       bpno = roishift + cblk->numbps - 1;
-       passtype = 2;
-       
-       mqc_reset_enc(mqc);
-       
-       for (segno = 0; segno < cblk->numsegs; segno++) {
-               opj_tcd_seg_t *seg = &cblk->segs[segno];
-               
-               /* BYPASS mode */
-               type = ((bpno <= (cblk->numbps - 1) - 4) && (passtype < 2) && (cblksty & J3D_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
-               if (type == T1_TYPE_RAW) {
-                       raw_init_dec(raw, seg->data, seg->len);
-               } else {
-                       mqc_init_dec(mqc, seg->data, seg->len);
-               }
-
-               for (passno = 0; passno < seg->numpasses; passno++) {
-                       switch (passtype) {
-                               case 0:
-                                       t1_dec_sigpass(t1, w, h, l, bpno+1, orient, type, cblksty);
-                                       break;
-                               case 1:
-                                       t1_dec_refpass(t1, w, h, l, bpno+1, type, cblksty);
-                                       break;
-                               case 2:
-                                       t1_dec_clnpass(t1, w, h, l, bpno+1, orient, cblksty);
-                                       break;
-                       }
-                       
-                       if ((cblksty & J3D_CCP_CBLKSTY_RESET) && type == T1_TYPE_MQ) {
-                               mqc_reset_enc(mqc);
-                       }
-                       if (++passtype == 3) {
-                               passtype = 0;
-                               bpno--;
-                       }
-               }
-       }
+        for (j = 0; j < h; j++) {
+            for (i = 0; i < w; i++) {
+                t1->data[k][j][i] = 0;
+            }
+        }
+    }
+
+    for (k = 0; k <= l; k++) {
+        for (j = 0; j <= h; j++) {
+            for (i = 0; i <= w; i++) {
+                t1->flags[k][j][i] = 0;
+            }
+        }
+    }
+
+    bpno = roishift + cblk->numbps - 1;
+    passtype = 2;
+
+    mqc_reset_enc(mqc);
+
+    for (segno = 0; segno < cblk->numsegs; segno++) {
+        opj_tcd_seg_t *seg = &cblk->segs[segno];
+
+        /* BYPASS mode */
+        type = ((bpno <= (cblk->numbps - 1) - 4) && (passtype < 2) &&
+                (cblksty & J3D_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
+        if (type == T1_TYPE_RAW) {
+            raw_init_dec(raw, seg->data, seg->len);
+        } else {
+            mqc_init_dec(mqc, seg->data, seg->len);
+        }
+
+        for (passno = 0; passno < seg->numpasses; passno++) {
+            switch (passtype) {
+            case 0:
+                t1_dec_sigpass(t1, w, h, l, bpno + 1, orient, type, cblksty);
+                break;
+            case 1:
+                t1_dec_refpass(t1, w, h, l, bpno + 1, type, cblksty);
+                break;
+            case 2:
+                t1_dec_clnpass(t1, w, h, l, bpno + 1, orient, cblksty);
+                break;
+            }
+
+            if ((cblksty & J3D_CCP_CBLKSTY_RESET) && type == T1_TYPE_MQ) {
+                mqc_reset_enc(mqc);
+            }
+            if (++passtype == 3) {
+                passtype = 0;
+                bpno--;
+            }
+        }
+    }
 }
 
-static int t1_init_ctxno_zc(int f, int orient) {
-       int h, v, d, n, t, hv;
-       n = 0;
-       h = ((f & T1_SIG_W) != 0) + ((f & T1_SIG_E) != 0);
-       v = ((f & T1_SIG_N) != 0) + ((f & T1_SIG_S) != 0);
-       d = ((f & T1_SIG_NW) != 0) + ((f & T1_SIG_NE) != 0) + ((f & T1_SIG_SE) != 0) + ((f & T1_SIG_SW) != 0);
-       
-       switch (orient) {
-               case 2:
-                       t = h;
-                       h = v;
-                       v = t;
-               case 0:
-               case 1:
-                       if (!h) {
-                               if (!v) {
-                                       if (!d)
-                                               n = 0;
-                                       else if (d == 1)
-                                               n = 1;
-                                       else
-                                               n = 2;
-                               } else if (v == 1) {
-                                       n = 3;
-                               } else {
-                                       n = 4;
-                               }
-                       } else if (h == 1) {
-                               if (!v) {
-                                       if (!d)
-                                               n = 5;
-                                       else
-                                               n = 6;
-                               } else {
-                                       n = 7;
-                               }
-                       } else
-                               n = 8;
-                       break;
-               case 3:
-                       hv = h + v;
-                       if (!d) {
-                               if (!hv) {
-                                       n = 0;
-                               } else if (hv == 1) {
-                                       n = 1;
-                               } else {
-                                       n = 2;
-                               }
-                       } else if (d == 1) {
-                               if (!hv) {
-                                       n = 3;
-                               } else if (hv == 1) {
-                                       n = 4;
-                               } else {
-                                       n = 5;
-                               }
-                       } else if (d == 2) {
-                               if (!hv) {
-                                       n = 6;
-                               } else {
-                                       n = 7;
-                               }
-                       } else {
-                               n = 8;
-                       }
-                       break;
-       }
-       
-       return (T1_CTXNO_ZC + n);
+static int t1_init_ctxno_zc(int f, int orient)
+{
+    int h, v, d, n, t, hv;
+    n = 0;
+    h = ((f & T1_SIG_W) != 0) + ((f & T1_SIG_E) != 0);
+    v = ((f & T1_SIG_N) != 0) + ((f & T1_SIG_S) != 0);
+    d = ((f & T1_SIG_NW) != 0) + ((f & T1_SIG_NE) != 0) + ((
+                f & T1_SIG_SE) != 0) + ((f & T1_SIG_SW) != 0);
+
+    switch (orient) {
+    case 2:
+        t = h;
+        h = v;
+        v = t;
+    case 0:
+    case 1:
+        if (!h) {
+            if (!v) {
+                if (!d) {
+                    n = 0;
+                } else if (d == 1) {
+                    n = 1;
+                } else {
+                    n = 2;
+                }
+            } else if (v == 1) {
+                n = 3;
+            } else {
+                n = 4;
+            }
+        } else if (h == 1) {
+            if (!v) {
+                if (!d) {
+                    n = 5;
+                } else {
+                    n = 6;
+                }
+            } else {
+                n = 7;
+            }
+        } else {
+            n = 8;
+        }
+        break;
+    case 3:
+        hv = h + v;
+        if (!d) {
+            if (!hv) {
+                n = 0;
+            } else if (hv == 1) {
+                n = 1;
+            } else {
+                n = 2;
+            }
+        } else if (d == 1) {
+            if (!hv) {
+                n = 3;
+            } else if (hv == 1) {
+                n = 4;
+            } else {
+                n = 5;
+            }
+        } else if (d == 2) {
+            if (!hv) {
+                n = 6;
+            } else {
+                n = 7;
+            }
+        } else {
+            n = 8;
+        }
+        break;
+    }
+
+    return (T1_CTXNO_ZC + n);
 }
 
-static int t1_init_ctxno_sc(int f) {
-       int hc, vc, n;
-       n = 0;
-
-       hc = int_min(((f & (T1_SIG_E | T1_SGN_E)) ==
-               T1_SIG_E) + ((f & (T1_SIG_W | T1_SGN_W)) == T1_SIG_W),
-              1) - int_min(((f & (T1_SIG_E | T1_SGN_E)) ==
-                  (T1_SIG_E | T1_SGN_E)) +
-                  ((f & (T1_SIG_W | T1_SGN_W)) ==
-                  (T1_SIG_W | T1_SGN_W)), 1);
-       
-       vc = int_min(((f & (T1_SIG_N | T1_SGN_N)) ==
-               T1_SIG_N) + ((f & (T1_SIG_S | T1_SGN_S)) == T1_SIG_S),
-              1) - int_min(((f & (T1_SIG_N | T1_SGN_N)) ==
-                  (T1_SIG_N | T1_SGN_N)) +
-                  ((f & (T1_SIG_S | T1_SGN_S)) ==
-                  (T1_SIG_S | T1_SGN_S)), 1);
-       
-       if (hc < 0) {
-               hc = -hc;
-               vc = -vc;
-       }
-       if (!hc) {
-               if (vc == -1)
-                       n = 1;
-               else if (!vc)
-                       n = 0;
-               else
-                       n = 1;
-       } else if (hc == 1) {
-               if (vc == -1)
-                       n = 2;
-               else if (!vc)
-                       n = 3;
-               else
-                       n = 4;
-       }
-       
-       return (T1_CTXNO_SC + n);
+static int t1_init_ctxno_sc(int f)
+{
+    int hc, vc, n;
+    n = 0;
+
+    hc = int_min(((f & (T1_SIG_E | T1_SGN_E)) ==
+                  T1_SIG_E) + ((f & (T1_SIG_W | T1_SGN_W)) == T1_SIG_W),
+                 1) - int_min(((f & (T1_SIG_E | T1_SGN_E)) ==
+                               (T1_SIG_E | T1_SGN_E)) +
+                              ((f & (T1_SIG_W | T1_SGN_W)) ==
+                               (T1_SIG_W | T1_SGN_W)), 1);
+
+    vc = int_min(((f & (T1_SIG_N | T1_SGN_N)) ==
+                  T1_SIG_N) + ((f & (T1_SIG_S | T1_SGN_S)) == T1_SIG_S),
+                 1) - int_min(((f & (T1_SIG_N | T1_SGN_N)) ==
+                               (T1_SIG_N | T1_SGN_N)) +
+                              ((f & (T1_SIG_S | T1_SGN_S)) ==
+                               (T1_SIG_S | T1_SGN_S)), 1);
+
+    if (hc < 0) {
+        hc = -hc;
+        vc = -vc;
+    }
+    if (!hc) {
+        if (vc == -1) {
+            n = 1;
+        } else if (!vc) {
+            n = 0;
+        } else {
+            n = 1;
+        }
+    } else if (hc == 1) {
+        if (vc == -1) {
+            n = 2;
+        } else if (!vc) {
+            n = 3;
+        } else {
+            n = 4;
+        }
+    }
+
+    return (T1_CTXNO_SC + n);
 }
 
-static int t1_init_ctxno_mag(int f) {
-       int n;
-       if (!(f & T1_REFINE))
-               n = (f & (T1_SIG_OTH)) ? 1 : 0;
-       else
-               n = 2;
-       
-       return (T1_CTXNO_MAG + n);
+static int t1_init_ctxno_mag(int f)
+{
+    int n;
+    if (!(f & T1_REFINE)) {
+        n = (f & (T1_SIG_OTH)) ? 1 : 0;
+    } else {
+        n = 2;
+    }
+
+    return (T1_CTXNO_MAG + n);
 }
 
-static int t1_init_spb(int f) {
-       int hc, vc, n;
-       
-       hc = int_min(((f & (T1_SIG_E | T1_SGN_E)) ==
-               T1_SIG_E) + ((f & (T1_SIG_W | T1_SGN_W)) == T1_SIG_W),
-              1) - int_min(((f & (T1_SIG_E | T1_SGN_E)) ==
-                  (T1_SIG_E | T1_SGN_E)) +
-                  ((f & (T1_SIG_W | T1_SGN_W)) ==
-                  (T1_SIG_W | T1_SGN_W)), 1);
-       
-       vc = int_min(((f & (T1_SIG_N | T1_SGN_N)) ==
-               T1_SIG_N) + ((f & (T1_SIG_S | T1_SGN_S)) == T1_SIG_S),
-              1) - int_min(((f & (T1_SIG_N | T1_SGN_N)) ==
-                  (T1_SIG_N | T1_SGN_N)) +
-                  ((f & (T1_SIG_S | T1_SGN_S)) ==
-                  (T1_SIG_S | T1_SGN_S)), 1);
-       
-       if (!hc && !vc)
-               n = 0;
-       else
-               n = (!(hc > 0 || (!hc && vc > 0)));
-       
-       return n;
+static int t1_init_spb(int f)
+{
+    int hc, vc, n;
+
+    hc = int_min(((f & (T1_SIG_E | T1_SGN_E)) ==
+                  T1_SIG_E) + ((f & (T1_SIG_W | T1_SGN_W)) == T1_SIG_W),
+                 1) - int_min(((f & (T1_SIG_E | T1_SGN_E)) ==
+                               (T1_SIG_E | T1_SGN_E)) +
+                              ((f & (T1_SIG_W | T1_SGN_W)) ==
+                               (T1_SIG_W | T1_SGN_W)), 1);
+
+    vc = int_min(((f & (T1_SIG_N | T1_SGN_N)) ==
+                  T1_SIG_N) + ((f & (T1_SIG_S | T1_SGN_S)) == T1_SIG_S),
+                 1) - int_min(((f & (T1_SIG_N | T1_SGN_N)) ==
+                               (T1_SIG_N | T1_SGN_N)) +
+                              ((f & (T1_SIG_S | T1_SGN_S)) ==
+                               (T1_SIG_S | T1_SGN_S)), 1);
+
+    if (!hc && !vc) {
+        n = 0;
+    } else {
+        n = (!(hc > 0 || (!hc && vc > 0)));
+    }
+
+    return n;
 }
 
-static void t1_init_luts(opj_t1_t *t1) {
-       int i, j;
-       double u, v, t;
-       for (j = 0; j < 4; j++) {
-               for (i = 0; i < 256; ++i) {
-                       t1->lut_ctxno_zc[(j << 8) | i] = t1_init_ctxno_zc(i, j);
-               }
-       }
-       for (i = 0; i < 256; i++) {
-               t1->lut_ctxno_sc[i] = t1_init_ctxno_sc(i << 4);
-       }
-       for (j = 0; j < 2; j++) {
-               for (i = 0; i < 2048; ++i) {
-                       t1->lut_ctxno_mag[(j << 11) + i] = t1_init_ctxno_mag((j ? T1_REFINE : 0) | i);
-               }
-       }
-       for (i = 0; i < 256; ++i) {
-               t1->lut_spb[i] = t1_init_spb(i << 4);
-       }
-       /* FIXME FIXME FIXME */
-       /* fprintf(stdout,"nmsedec luts:\n"); */
-       for (i = 0; i < (1 << T1_NMSEDEC_BITS); i++) {
-               t = i / pow(2, T1_NMSEDEC_FRACBITS);
-               u = t;
-               v = t - 1.5;
-               t1->lut_nmsedec_sig[i] = 
-                       int_max(0, 
-                       (int) (floor((u * u - v * v) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0));
-               t1->lut_nmsedec_sig0[i] =
-                       int_max(0,
-                       (int) (floor((u * u) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0));
-               u = t - 1.0;
-               if (i & (1 << (T1_NMSEDEC_BITS - 1))) {
-                       v = t - 1.5;
-               } else {
-                       v = t - 0.5;
-               }
-               t1->lut_nmsedec_ref[i] =
-                       int_max(0,
-                       (int) (floor((u * u - v * v) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0));
-               t1->lut_nmsedec_ref0[i] =
-                       int_max(0,
-                       (int) (floor((u * u) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0));
-       }
+static void t1_init_luts(opj_t1_t *t1)
+{
+    int i, j;
+    double u, v, t;
+    for (j = 0; j < 4; j++) {
+        for (i = 0; i < 256; ++i) {
+            t1->lut_ctxno_zc[(j << 8) | i] = t1_init_ctxno_zc(i, j);
+        }
+    }
+    for (i = 0; i < 256; i++) {
+        t1->lut_ctxno_sc[i] = t1_init_ctxno_sc(i << 4);
+    }
+    for (j = 0; j < 2; j++) {
+        for (i = 0; i < 2048; ++i) {
+            t1->lut_ctxno_mag[(j << 11) + i] = t1_init_ctxno_mag((j ? T1_REFINE : 0) | i);
+        }
+    }
+    for (i = 0; i < 256; ++i) {
+        t1->lut_spb[i] = t1_init_spb(i << 4);
+    }
+    /* FIXME FIXME FIXME */
+    /* fprintf(stdout,"nmsedec luts:\n"); */
+    for (i = 0; i < (1 << T1_NMSEDEC_BITS); i++) {
+        t = i / pow(2, T1_NMSEDEC_FRACBITS);
+        u = t;
+        v = t - 1.5;
+        t1->lut_nmsedec_sig[i] =
+            int_max(0,
+                    (int)(floor((u * u - v * v) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2,
+                            T1_NMSEDEC_FRACBITS) * 8192.0));
+        t1->lut_nmsedec_sig0[i] =
+            int_max(0,
+                    (int)(floor((u * u) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2,
+                            T1_NMSEDEC_FRACBITS) * 8192.0));
+        u = t - 1.0;
+        if (i & (1 << (T1_NMSEDEC_BITS - 1))) {
+            v = t - 1.5;
+        } else {
+            v = t - 0.5;
+        }
+        t1->lut_nmsedec_ref[i] =
+            int_max(0,
+                    (int)(floor((u * u - v * v) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2,
+                            T1_NMSEDEC_FRACBITS) * 8192.0));
+        t1->lut_nmsedec_ref0[i] =
+            int_max(0,
+                    (int)(floor((u * u) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2,
+                            T1_NMSEDEC_FRACBITS) * 8192.0));
+    }
 }
 
 /* ----------------------------------------------------------------------- */
 
-opj_t1_t* t1_create(opj_common_ptr cinfo) {
-       opj_t1_t *t1 = (opj_t1_t*)opj_malloc(sizeof(opj_t1_t));
-       if(t1) {
-               t1->cinfo = cinfo;
-               /* create MQC and RAW handles */
-               t1->mqc = mqc_create();
-               t1->raw = raw_create();
-               /* initialize the look-up tables of the Tier-1 coder/decoder */
-               t1_init_luts(t1);
-       }
-       return t1;
+opj_t1_t* t1_create(opj_common_ptr cinfo)
+{
+    opj_t1_t *t1 = (opj_t1_t*)opj_malloc(sizeof(opj_t1_t));
+    if (t1) {
+        t1->cinfo = cinfo;
+        /* create MQC and RAW handles */
+        t1->mqc = mqc_create();
+        t1->raw = raw_create();
+        /* initialize the look-up tables of the Tier-1 coder/decoder */
+        t1_init_luts(t1);
+    }
+    return t1;
 }
 
-void t1_destroy(opj_t1_t *t1) {
-       if(t1) {
-               /* destroy MQC and RAW handles */
-               mqc_destroy(t1->mqc);
-               raw_destroy(t1->raw);
-               /*opj_free(t1->data);*/
-               /*opj_free(t1->flags);*/
-               opj_free(t1);
-       }
+void t1_destroy(opj_t1_t *t1)
+{
+    if (t1) {
+        /* destroy MQC and RAW handles */
+        mqc_destroy(t1->mqc);
+        raw_destroy(t1->raw);
+        /*opj_free(t1->data);*/
+        /*opj_free(t1->flags);*/
+        opj_free(t1);
+    }
 }
 
-void t1_encode_cblks(opj_t1_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp) {
-       int compno, resno, bandno, precno, cblkno;
-       int x, y, z, i, j, k, orient;
-       int n=0;
-       int level[3];
-       FILE *fid = NULL;
-/*     char filename[10];*/
-       tile->distotile = 0;            /* fixed_quality */
-       
-       for (compno = 0; compno < tile->numcomps; compno++) {
-               opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-
-               for (resno = 0; resno < tilec->numresolution[0]; resno++) {
-                       opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-                       
-                       /* Weighted first order entropy
-                       sprintf(filename,"res%d.txt",resno);
-                       if ((fid = fopen(filename,"w")) == 0){
-                               fprintf(stdout,"Error while opening %s\n", filename);
-                               exit(1);
-                       }
-                       */
-                       for (bandno = 0; bandno < res->numbands; bandno++) {
-                               opj_tcd_band_t *band = &res->bands[bandno];
-                               for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2]; precno++) {
-                                       opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-                                       for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) {
-                                               opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-
-                                               /*fprintf(stdout,"Precno %d Cblkno %d \n",precno,cblkno);*/
-                                               if (band->bandno == 0) {
-                                                       x = cblk->x0 - band->x0;
-                                                       y = cblk->y0 - band->y0;
-                                                       z = cblk->z0 - band->z0;
-                                               } else if (band->bandno == 1) {
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                                                       y = cblk->y0 - band->y0;
-                                                       z = cblk->z0 - band->z0;
-                                               } else if (band->bandno == 2) {
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = cblk->x0 - band->x0;
-                                                       y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                                                       z = cblk->z0 - band->z0;
-                                               } else if (band->bandno == 3) {         
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                                                       y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                                                       z = cblk->z0 - band->z0;
-                                               } else if (band->bandno == 4) {
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = cblk->x0 - band->x0;
-                                                       y = cblk->y0 - band->y0;
-                                                       z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                                               } else if (band->bandno == 5) {
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                                                       y = cblk->y0 - band->y0;
-                                                       z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                                               } else if (band->bandno == 6) {
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = cblk->x0 - band->x0;
-                                                       y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                                                       z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                                               } else if (band->bandno == 7) {         
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                                                       y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                                                       z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                                               }
-
-                                               if (tcp->tccps[compno].reversible == 1) {
-                                                       for (k = 0; k < cblk->z1 - cblk->z0; k++) {
-                                                               for (j = 0; j < cblk->y1 - cblk->y0; j++) {
+void t1_encode_cblks(opj_t1_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp)
+{
+    int compno, resno, bandno, precno, cblkno;
+    int x, y, z, i, j, k, orient;
+    int n = 0;
+    int level[3];
+    FILE *fid = NULL;
+    /*  char filename[10];*/
+    tile->distotile = 0;        /* fixed_quality */
+
+    for (compno = 0; compno < tile->numcomps; compno++) {
+        opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+
+        for (resno = 0; resno < tilec->numresolution[0]; resno++) {
+            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+
+            /* Weighted first order entropy
+            sprintf(filename,"res%d.txt",resno);
+            if ((fid = fopen(filename,"w")) == 0){
+                fprintf(stdout,"Error while opening %s\n", filename);
+                exit(1);
+            }
+            */
+            for (bandno = 0; bandno < res->numbands; bandno++) {
+                opj_tcd_band_t *band = &res->bands[bandno];
+                for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2];
+                        precno++) {
+                    opj_tcd_precinct_t *prc = &band->precincts[precno];
+
+                    for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
+                            cblkno++) {
+                        opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
+
+                        /*fprintf(stdout,"Precno %d Cblkno %d \n",precno,cblkno);*/
+                        if (band->bandno == 0) {
+                            x = cblk->x0 - band->x0;
+                            y = cblk->y0 - band->y0;
+                            z = cblk->z0 - band->z0;
+                        } else if (band->bandno == 1) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
+                            y = cblk->y0 - band->y0;
+                            z = cblk->z0 - band->z0;
+                        } else if (band->bandno == 2) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = cblk->x0 - band->x0;
+                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
+                            z = cblk->z0 - band->z0;
+                        } else if (band->bandno == 3) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
+                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
+                            z = cblk->z0 - band->z0;
+                        } else if (band->bandno == 4) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = cblk->x0 - band->x0;
+                            y = cblk->y0 - band->y0;
+                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
+                        } else if (band->bandno == 5) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
+                            y = cblk->y0 - band->y0;
+                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
+                        } else if (band->bandno == 6) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = cblk->x0 - band->x0;
+                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
+                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
+                        } else if (band->bandno == 7) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
+                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
+                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
+                        }
+
+                        if (tcp->tccps[compno].reversible == 1) {
+                            for (k = 0; k < cblk->z1 - cblk->z0; k++) {
+                                for (j = 0; j < cblk->y1 - cblk->y0; j++) {
                                     for (i = 0; i < cblk->x1 - cblk->x0; i++) {
-                                        t1->data[k][j][i] = 
-                                                                               tilec->data[(x + i) + (y + j) * (tilec->x1 - tilec->x0) + (z + k) * (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] << T1_NMSEDEC_FRACBITS;
-/*fprintf(fid," %d",t1->data[k][j][i]);*/
-                                                                       }
-                                                               }
-                                                       }
-                                               } else if (tcp->tccps[compno].reversible == 0) {
-                                                       for (k = 0; k < cblk->z1 - cblk->z0; k++) {
-                                                               for (j = 0; j < cblk->y1 - cblk->y0; j++) {
+                                        t1->data[k][j][i] =
+                                            tilec->data[(x + i) + (y + j) * (tilec->x1 - tilec->x0) + (z + k) *
+                                                                (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] << T1_NMSEDEC_FRACBITS;
+                                        /*fprintf(fid," %d",t1->data[k][j][i]);*/
+                                    }
+                                }
+                            }
+                        } else if (tcp->tccps[compno].reversible == 0) {
+                            for (k = 0; k < cblk->z1 - cblk->z0; k++) {
+                                for (j = 0; j < cblk->y1 - cblk->y0; j++) {
                                     for (i = 0; i < cblk->x1 - cblk->x0; i++) {
                                         t1->data[k][j][i] = fix_mul(
-                                                                               tilec->data[(x + i) + (y + j) * (tilec->x1 - tilec->x0) + (z + k) * (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)],
-                                                                               8192 * 8192 / ((int) floor(band->stepsize * 8192))) >> (13 - T1_NMSEDEC_FRACBITS);
-                                                                       }
-                                                               }
-                                                       }
-                                               }
-
-                                               orient = band->bandno;  /* FIXME */
-                                               if (orient == 2) {
-                                                       orient = 1;
-                                               } else if (orient == 1) {
-                                                       orient = 2;
-                                               }
-                                               for (i = 0; i < 3; i++) 
-                                                       level[i] = tilec->numresolution[i] - 1 - resno;
-                                               /*fprintf(stdout,"t1_encode_cblk(t1, cblk, %d, %d, %d %d %d, %d, %f, %d, %d, tile);\n", orient, compno, level[0], level[1], level[2], tcp->tccps[compno].reversible, band->stepsize, tcp->tccps[compno].cblksty, tile->numcomps);*/
-                                               t1_encode_cblk(t1, cblk, orient, compno, level, tcp->tccps[compno].dwtid, band->stepsize, tcp->tccps[compno].cblksty, tile->numcomps, tile);
-                                                       
-                                       } /* cblkno */
-                               } /* precno */
-/*fprintf(fid,"\n");*/
-                       } /* bandno */
-/*fclose(fid);*/
-               } /* resno  */
-       } /* compno  */
+                                                                tilec->data[(x + i) + (y + j) * (tilec->x1 - tilec->x0) + (z + k) *
+                                                                                    (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)],
+                                                                8192 * 8192 / ((int) floor(band->stepsize * 8192))) >> (13 -
+                                                                        T1_NMSEDEC_FRACBITS);
+                                    }
+                                }
+                            }
+                        }
+
+                        orient = band->bandno;  /* FIXME */
+                        if (orient == 2) {
+                            orient = 1;
+                        } else if (orient == 1) {
+                            orient = 2;
+                        }
+                        for (i = 0; i < 3; i++) {
+                            level[i] = tilec->numresolution[i] - 1 - resno;
+                        }
+                        /*fprintf(stdout,"t1_encode_cblk(t1, cblk, %d, %d, %d %d %d, %d, %f, %d, %d, tile);\n", orient, compno, level[0], level[1], level[2], tcp->tccps[compno].reversible, band->stepsize, tcp->tccps[compno].cblksty, tile->numcomps);*/
+                        t1_encode_cblk(t1, cblk, orient, compno, level, tcp->tccps[compno].dwtid,
+                                       band->stepsize, tcp->tccps[compno].cblksty, tile->numcomps, tile);
+
+                    } /* cblkno */
+                } /* precno */
+                /*fprintf(fid,"\n");*/
+            } /* bandno */
+            /*fclose(fid);*/
+        } /* resno  */
+    } /* compno  */
 }
 
-void t1_decode_cblks(opj_t1_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp) {
-       int compno, resno, bandno, precno, cblkno;
-       
-       for (compno = 0; compno < tile->numcomps; compno++) {
-               opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-
-               for (resno = 0; resno < tilec->numresolution[0]; resno++) {
-                       opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-
-                       for (bandno = 0; bandno < res->numbands; bandno++) {
-                               opj_tcd_band_t *band = &res->bands[bandno];
-
-                               for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2]; precno++) {
-                                       opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-                                       for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) {
-                                               int x, y, k, i, j, z, orient;
-                                               opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-
-                                               orient = band->bandno;  /* FIXME */
-                                               if (orient == 2) {
-                                                       orient = 1;
-                                               } else if (orient == 1) {
-                                                       orient = 2;
-                                               }
-
-                                               t1_decode_cblk(t1, cblk, orient, tcp->tccps[compno].roishift, tcp->tccps[compno].cblksty);
-
-                                               if (band->bandno == 0) {
-                                                       x = cblk->x0 - band->x0;
-                                                       y = cblk->y0 - band->y0;
-                                                       z = cblk->z0 - band->z0;
-                                               } else if (band->bandno == 1) {
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                                                       y = cblk->y0 - band->y0;
-                                                       z = cblk->z0 - band->z0;
-                                               } else if (band->bandno == 2) {
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = cblk->x0 - band->x0;
-                                                       y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                                                       z = cblk->z0 - band->z0;
-                                               } else if (band->bandno == 3) {         
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                                                       y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                                                       z = cblk->z0 - band->z0;
-                                               } else if (band->bandno == 4) {
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = cblk->x0 - band->x0;
-                                                       y = cblk->y0 - band->y0;
-                                                       z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                                               } else if (band->bandno == 5) {
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                                                       y = cblk->y0 - band->y0;
-                                                       z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                                               } else if (band->bandno == 6) {
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = cblk->x0 - band->x0;
-                                                       y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                                                       z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                                               } else if (band->bandno == 7) {         
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                                                       y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                                                       z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                                               }
-                                               
-                                               if (tcp->tccps[compno].roishift) {
-                                                       int thresh, val, mag;
-                                                       thresh = 1 << tcp->tccps[compno].roishift;
-                                                       for (k = 0; k < cblk->z1 - cblk->z0; k++) {
-                                                               for (j = 0; j < cblk->y1 - cblk->y0; j++) {
-                                                                       for (i = 0; i < cblk->x1 - cblk->x0; i++) {
-                                                                               val = t1->data[k][j][i];
-                                                                               mag = int_abs(val);
-                                                                               if (mag >= thresh) {
-                                                                                       mag >>= tcp->tccps[compno].roishift;
-                                                                                       t1->data[k][j][i] = val < 0 ? -mag : mag;
-                                                                               }
-                                                                       }
-                                                               }
-                                                       }
-                                               }
-                                               
-                                               if (tcp->tccps[compno].reversible == 1) {
-                                                       for (k = 0; k < cblk->z1 - cblk->z0; k++) {
-                                                               for (j = 0; j < cblk->y1 - cblk->y0; j++) {
-                                                                       for (i = 0; i < cblk->x1 - cblk->x0; i++) {
-                                                                               int tmp = t1->data[k][j][i];
-                                                                               tilec->data[x + i + (y + j) * (tilec->x1 - tilec->x0) + (z + k) * (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] = tmp/2;
-                                                                       }
-                                                               }
-                                                       }
-                                               } else {                /* if (tcp->tccps[compno].reversible == 0) */
-                                                       for (k = 0; k < cblk->z1 - cblk->z0; k++) {
-                                                               for (j = 0; j < cblk->y1 - cblk->y0; j++) {
-                                                                       for (i = 0; i < cblk->x1 - cblk->x0; i++) {
-                                                                               double tmp = (double)(t1->data[k][j][i] * band->stepsize * 4096.0);
-                                                                               if (t1->data[k][j][i] >> 1 == 0) {
-                                                                                       tilec->data[x + i + (y + j) * (tilec->x1 - tilec->x0) + (z + k) * (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] = 0;
-                                                                               } else {
-                                                                                       int tmp2 = ((int) (floor(fabs(tmp)))) + ((int) floor(fabs(tmp*2))%2);
-                                                                                       tilec->data[x + i + (y + j) * (tilec->x1 - tilec->x0) + (z + k) * (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] = ((tmp<0)?-tmp2:tmp2);
-                                                                               }
-                                                                       }
-                                                               }
-                                                       }
-                                               }
-                                       } /* cblkno */
-                               } /* precno */
-                       } /* bandno */
-               } /* resno */
-       } /* compno */
+void t1_decode_cblks(opj_t1_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp)
+{
+    int compno, resno, bandno, precno, cblkno;
+
+    for (compno = 0; compno < tile->numcomps; compno++) {
+        opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+
+        for (resno = 0; resno < tilec->numresolution[0]; resno++) {
+            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+
+            for (bandno = 0; bandno < res->numbands; bandno++) {
+                opj_tcd_band_t *band = &res->bands[bandno];
+
+                for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2];
+                        precno++) {
+                    opj_tcd_precinct_t *prc = &band->precincts[precno];
+
+                    for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
+                            cblkno++) {
+                        int x, y, k, i, j, z, orient;
+                        opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
+
+                        orient = band->bandno;  /* FIXME */
+                        if (orient == 2) {
+                            orient = 1;
+                        } else if (orient == 1) {
+                            orient = 2;
+                        }
+
+                        t1_decode_cblk(t1, cblk, orient, tcp->tccps[compno].roishift,
+                                       tcp->tccps[compno].cblksty);
+
+                        if (band->bandno == 0) {
+                            x = cblk->x0 - band->x0;
+                            y = cblk->y0 - band->y0;
+                            z = cblk->z0 - band->z0;
+                        } else if (band->bandno == 1) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
+                            y = cblk->y0 - band->y0;
+                            z = cblk->z0 - band->z0;
+                        } else if (band->bandno == 2) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = cblk->x0 - band->x0;
+                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
+                            z = cblk->z0 - band->z0;
+                        } else if (band->bandno == 3) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
+                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
+                            z = cblk->z0 - band->z0;
+                        } else if (band->bandno == 4) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = cblk->x0 - band->x0;
+                            y = cblk->y0 - band->y0;
+                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
+                        } else if (band->bandno == 5) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
+                            y = cblk->y0 - band->y0;
+                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
+                        } else if (band->bandno == 6) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = cblk->x0 - band->x0;
+                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
+                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
+                        } else if (band->bandno == 7) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
+                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
+                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
+                        }
+
+                        if (tcp->tccps[compno].roishift) {
+                            int thresh, val, mag;
+                            thresh = 1 << tcp->tccps[compno].roishift;
+                            for (k = 0; k < cblk->z1 - cblk->z0; k++) {
+                                for (j = 0; j < cblk->y1 - cblk->y0; j++) {
+                                    for (i = 0; i < cblk->x1 - cblk->x0; i++) {
+                                        val = t1->data[k][j][i];
+                                        mag = int_abs(val);
+                                        if (mag >= thresh) {
+                                            mag >>= tcp->tccps[compno].roishift;
+                                            t1->data[k][j][i] = val < 0 ? -mag : mag;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+
+                        if (tcp->tccps[compno].reversible == 1) {
+                            for (k = 0; k < cblk->z1 - cblk->z0; k++) {
+                                for (j = 0; j < cblk->y1 - cblk->y0; j++) {
+                                    for (i = 0; i < cblk->x1 - cblk->x0; i++) {
+                                        int tmp = t1->data[k][j][i];
+                                        tilec->data[x + i + (y + j) * (tilec->x1 - tilec->x0) + (z + k) *
+                                                      (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] = tmp / 2;
+                                    }
+                                }
+                            }
+                        } else {        /* if (tcp->tccps[compno].reversible == 0) */
+                            for (k = 0; k < cblk->z1 - cblk->z0; k++) {
+                                for (j = 0; j < cblk->y1 - cblk->y0; j++) {
+                                    for (i = 0; i < cblk->x1 - cblk->x0; i++) {
+                                        double tmp = (double)(t1->data[k][j][i] * band->stepsize * 4096.0);
+                                        if (t1->data[k][j][i] >> 1 == 0) {
+                                            tilec->data[x + i + (y + j) * (tilec->x1 - tilec->x0) + (z + k) *
+                                                          (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] = 0;
+                                        } else {
+                                            int tmp2 = ((int)(floor(fabs(tmp)))) + ((int) floor(fabs(tmp * 2)) % 2);
+                                            tilec->data[x + i + (y + j) * (tilec->x1 - tilec->x0) + (z + k) *
+                                                          (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] = ((tmp < 0) ? -tmp2 : tmp2);
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    } /* cblkno */
+                } /* precno */
+            } /* bandno */
+        } /* resno */
+    } /* compno */
 }
 
 
 /** mod fixed_quality */
-double t1_getwmsedec(int nmsedec, int compno, int level[3], int orient, int bpno, double stepsize, int numcomps, int dwtid[3]) {
-       double w1, w2, wmsedec;
-       
-       if (dwtid[0] == 1 || dwtid[1] == 1 || dwtid[2] == 1) {
-               w1 = (numcomps > 1) ? mct_getnorm_real(compno) : 1;
-       } else {                        
-               w1 = (numcomps > 1) ? mct_getnorm(compno) : 1;
-       }
-       w2 = dwt_getnorm(orient, level, dwtid);
-
-       /*fprintf(stdout,"nmsedec %d level %d %d %d orient %d bpno %d stepsize %f \n",nmsedec ,level[0],level[1],level[2],orient,bpno,stepsize);*/
-       wmsedec = w1 * w2 * stepsize * (1 << bpno);
-       wmsedec *= wmsedec * nmsedec / 8192.0;
-       
-       return wmsedec;
+double t1_getwmsedec(int nmsedec, int compno, int level[3], int orient,
+                     int bpno, double stepsize, int numcomps, int dwtid[3])
+{
+    double w1, w2, wmsedec;
+
+    if (dwtid[0] == 1 || dwtid[1] == 1 || dwtid[2] == 1) {
+        w1 = (numcomps > 1) ? mct_getnorm_real(compno) : 1;
+    } else {
+        w1 = (numcomps > 1) ? mct_getnorm(compno) : 1;
+    }
+    w2 = dwt_getnorm(orient, level, dwtid);
+
+    /*fprintf(stdout,"nmsedec %d level %d %d %d orient %d bpno %d stepsize %f \n",nmsedec ,level[0],level[1],level[2],orient,bpno,stepsize);*/
+    wmsedec = w1 * w2 * stepsize * (1 << bpno);
+    wmsedec *= wmsedec * nmsedec / 8192.0;
+
+    return wmsedec;
 }
 /** mod fixed_quality */
index 63332d21766ac52170eb8f65dbb8f3d7dff17817..91759e7ac93342d5b1ae2cd786d077cefae4911f 100644 (file)
@@ -42,51 +42,63 @@ static void t1_3d_updateflags(unsigned int *fp, int s);
 /**
 Encode significant pass
 */
-static void t1_3d_enc_sigpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr, int *dp, int orient, int bpno, int one, int *nmsedec, char type, int vsc);
+static void t1_3d_enc_sigpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr,
+                                   int *dp, int orient, int bpno, int one, int *nmsedec, char type, int vsc);
 /**
 Decode significant pass
 */
-static void t1_3d_dec_sigpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr, int *dp, int orient, int oneplushalf, char type, int vsc);
+static void t1_3d_dec_sigpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr,
+                                   int *dp, int orient, int oneplushalf, char type, int vsc);
 /**
 Encode significant pass
 */
-static void t1_3d_enc_sigpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno, int orient, int *nmsedec, char type, int cblksty);
+static void t1_3d_enc_sigpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno,
+                              int orient, int *nmsedec, char type, int cblksty);
 /**
 Decode significant pass
 */
-static void t1_3d_dec_sigpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno, int orient, char type, int cblksty);
+static void t1_3d_dec_sigpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno,
+                              int orient, char type, int cblksty);
 /**
 Encode refinement pass
 */
-static void t1_3d_enc_refpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr, int *dp, int bpno, int one, int *nmsedec, char type, int vsc);
+static void t1_3d_enc_refpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr,
+                                   int *dp, int bpno, int one, int *nmsedec, char type, int vsc);
 /**
 Decode refinement pass
 */
-static void t1_3d_dec_refpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr, int *dp, int poshalf, int neghalf, char type, int vsc);
+static void t1_3d_dec_refpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr,
+                                   int *dp, int poshalf, int neghalf, char type, int vsc);
 /**
 Encode refinement pass
 */
-static void t1_3d_enc_refpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno, int *nmsedec, char type, int cblksty);
+static void t1_3d_enc_refpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno,
+                              int *nmsedec, char type, int cblksty);
 /**
 Decode refinement pass
 */
-static void t1_3d_dec_refpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno, char type, int cblksty);
+static void t1_3d_dec_refpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno,
+                              char type, int cblksty);
 /**
 Encode clean-up pass
 */
-static void t1_3d_enc_clnpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr, int *dp, int orient, int bpno, int one, int *nmsedec, int partial, int vsc);
+static void t1_3d_enc_clnpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr,
+                                   int *dp, int orient, int bpno, int one, int *nmsedec, int partial, int vsc);
 /**
 Decode clean-up pass
 */
-static void t1_3d_dec_clnpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr, int *dp, int orient, int oneplushalf, int partial, int vsc);
+static void t1_3d_dec_clnpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr,
+                                   int *dp, int orient, int oneplushalf, int partial, int vsc);
 /**
 Encode clean-up pass
 */
-static void t1_3d_enc_clnpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno, int orient, int *nmsedec, int cblksty);
+static void t1_3d_enc_clnpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno,
+                              int orient, int *nmsedec, int cblksty);
 /**
 Decode clean-up pass
 */
-static void t1_3d_dec_clnpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno, int orient, int cblksty);
+static void t1_3d_dec_clnpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno,
+                              int orient, int cblksty);
 /**
 Encode 1 code-block
 @param t1 T1 handle
@@ -100,7 +112,9 @@ Encode 1 code-block
 @param numcomps
 @param tile
 */
-static void t1_3d_encode_cblk(opj_t1_3d_t *t1, opj_tcd_cblk_t * cblk, int orient, int compno,  int level[3], int dwtid[3], double stepsize, int cblksty, int numcomps, opj_tcd_tile_t * tile);
+static void t1_3d_encode_cblk(opj_t1_3d_t *t1, opj_tcd_cblk_t * cblk,
+                              int orient, int compno,  int level[3], int dwtid[3], double stepsize,
+                              int cblksty, int numcomps, opj_tcd_tile_t * tile);
 /**
 Decode 1 code-block
 @param t1 T1 handle
@@ -109,7 +123,8 @@ Decode 1 code-block
 @param roishift Region of interest shifting value
 @param cblksty Code-block style
 */
-static void t1_3d_decode_cblk(opj_t1_3d_t *t1, opj_tcd_cblk_t * cblk, int orient, int roishift, int cblksty);
+static void t1_3d_decode_cblk(opj_t1_3d_t *t1, opj_tcd_cblk_t * cblk,
+                              int orient, int roishift, int cblksty);
 static int t1_3d_init_ctxno_zc(unsigned int f, int orient);
 static int t1_3d_init_ctxno_sc(unsigned int f);
 static int t1_3d_init_ctxno_mag(unsigned int f, int f2);
@@ -126,1105 +141,1226 @@ static void t1_3d_init_luts(opj_t1_3d_t *t1);
 
 /* ----------------------------------------------------------------------- */
 
-static int t1_3d_getctxno_zc(unsigned int f, int orient) {
-       return t1_3d_init_ctxno_zc((f & T1_3D_SIG_OTH), orient);
+static int t1_3d_getctxno_zc(unsigned int f, int orient)
+{
+    return t1_3d_init_ctxno_zc((f & T1_3D_SIG_OTH), orient);
 }
 
-static int t1_3d_getctxno_sc(unsigned int f) {
-       return t1_3d_init_ctxno_sc((f & T1_3D_SIG_PRIM) | ((f >> 16) & T1_3D_SGN));
-       /*return t1->lut_ctxno_sc[((f & T1_3D_SIG_PRIM) | ((f >> 16) & T1_3D_SGN)) >> 4];*/
+static int t1_3d_getctxno_sc(unsigned int f)
+{
+    return t1_3d_init_ctxno_sc((f & T1_3D_SIG_PRIM) | ((f >> 16) & T1_3D_SGN));
+    /*return t1->lut_ctxno_sc[((f & T1_3D_SIG_PRIM) | ((f >> 16) & T1_3D_SGN)) >> 4];*/
 }
 
-static int t1_3d_getctxno_mag(unsigned int f, int fsvr) {
-       return t1_3d_init_ctxno_mag((f & T1_3D_SIG_OTH), fsvr);
+static int t1_3d_getctxno_mag(unsigned int f, int fsvr)
+{
+    return t1_3d_init_ctxno_mag((f & T1_3D_SIG_OTH), fsvr);
 }
 
-static int t1_3d_getspb(unsigned int f) {
-       return t1_3d_init_spb((f & T1_3D_SIG_PRIM) | ((f >> 16) & T1_3D_SGN));
-       /*return t1->lut_spb[((f & T1_3D_SIG_PRIM) | ((f >> 16) & T1_3D_SGN)) >> 4];*/
+static int t1_3d_getspb(unsigned int f)
+{
+    return t1_3d_init_spb((f & T1_3D_SIG_PRIM) | ((f >> 16) & T1_3D_SGN));
+    /*return t1->lut_spb[((f & T1_3D_SIG_PRIM) | ((f >> 16) & T1_3D_SGN)) >> 4];*/
 }
 
-static int t1_3d_getnmsedec_sig(opj_t1_3d_t *t1, int x, int bitpos) {
-       if (bitpos > T1_NMSEDEC_FRACBITS) {
-               return t1->lut_nmsedec_sig[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((1 << T1_NMSEDEC_BITS) - 1)];
-       }
-       
-       return t1->lut_nmsedec_sig0[x & ((1 << T1_NMSEDEC_BITS) - 1)];
+static int t1_3d_getnmsedec_sig(opj_t1_3d_t *t1, int x, int bitpos)
+{
+    if (bitpos > T1_NMSEDEC_FRACBITS) {
+        return t1->lut_nmsedec_sig[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((
+                                                                             1 << T1_NMSEDEC_BITS) - 1)];
+    }
+
+    return t1->lut_nmsedec_sig0[x & ((1 << T1_NMSEDEC_BITS) - 1)];
 }
 
-static int t1_3d_getnmsedec_ref(opj_t1_3d_t *t1, int x, int bitpos) {
-       if (bitpos > T1_NMSEDEC_FRACBITS) {
-               return t1->lut_nmsedec_ref[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((1 << T1_NMSEDEC_BITS) - 1)];
-       }
+static int t1_3d_getnmsedec_ref(opj_t1_3d_t *t1, int x, int bitpos)
+{
+    if (bitpos > T1_NMSEDEC_FRACBITS) {
+        return t1->lut_nmsedec_ref[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((
+                                                                             1 << T1_NMSEDEC_BITS) - 1)];
+    }
 
     return t1->lut_nmsedec_ref0[x & ((1 << T1_NMSEDEC_BITS) - 1)];
 }
 
-static void t1_3d_updateflags(unsigned int *fp, int s) {
-       unsigned int *np = fp - (T1_MAXCBLKW + 2);
-       unsigned int *sp = fp + (T1_MAXCBLKW + 2);
-
-       unsigned int *bwp = fp + ((T1_MAXCBLKW + 2)*(T1_MAXCBLKH +2));
-       unsigned int *bnp = bwp - (T1_MAXCBLKW + 2);
-       unsigned int *bsp = bwp + (T1_MAXCBLKW + 2);
-       
-       unsigned int *fwp = fp - ((T1_MAXCBLKW + 2)*(T1_MAXCBLKH +2));
-       unsigned int *fnp = fwp - (T1_MAXCBLKW + 2);
-       unsigned int *fsp = fwp + (T1_MAXCBLKW + 2);
-
-       np[-1] |= T1_3D_SIG_SE;
-       np[1] |= T1_3D_SIG_SW;
-       sp[-1] |= T1_3D_SIG_NE;
-       sp[1] |= T1_3D_SIG_NW;
-       *np |= T1_3D_SIG_S;
-       *sp |= T1_3D_SIG_N;
-       fp[-1] |= T1_3D_SIG_E;
-       fp[1] |= T1_3D_SIG_W;
-
-       *fwp |= T1_3D_SIG_FC;
-       *bwp |= T1_3D_SIG_BC;
-
-       fnp[-1] |= T1_3D_SIG_FSE;
-       fnp[1] |= T1_3D_SIG_FSW;
-       fsp[-1] |= T1_3D_SIG_FNE;
-       fsp[1] |= T1_3D_SIG_FNW;
-       *fnp |= T1_3D_SIG_FS;
-       *fsp |= T1_3D_SIG_FN;
-       fwp[-1] |= T1_3D_SIG_FE;
-       fwp[1] |= T1_3D_SIG_FW;
-
-       bnp[-1] |= T1_3D_SIG_BSE;
-       bnp[1] |= T1_3D_SIG_BSW;
-       bsp[-1] |= T1_3D_SIG_BNE;
-       bsp[1] |= T1_3D_SIG_BNW;
-       *bnp |= T1_3D_SIG_BS;
-       *bsp |= T1_3D_SIG_BN;
-       bwp[-1] |= T1_3D_SIG_BE;
-       bwp[1] |= T1_3D_SIG_BW;
-
-       if (s) {
-               *np |= (T1_3D_SGN_S << 16);
-               *sp |= (T1_3D_SGN_N << 16);
-               fp[-1] |= (T1_3D_SGN_E << 16);
-               fp[1] |= (T1_3D_SGN_W << 16);
-               *fwp |= (T1_3D_SGN_F << 16);
-               *bwp |= (T1_3D_SGN_B << 16);
-       }
+static void t1_3d_updateflags(unsigned int *fp, int s)
+{
+    unsigned int *np = fp - (T1_MAXCBLKW + 2);
+    unsigned int *sp = fp + (T1_MAXCBLKW + 2);
+
+    unsigned int *bwp = fp + ((T1_MAXCBLKW + 2) * (T1_MAXCBLKH + 2));
+    unsigned int *bnp = bwp - (T1_MAXCBLKW + 2);
+    unsigned int *bsp = bwp + (T1_MAXCBLKW + 2);
+
+    unsigned int *fwp = fp - ((T1_MAXCBLKW + 2) * (T1_MAXCBLKH + 2));
+    unsigned int *fnp = fwp - (T1_MAXCBLKW + 2);
+    unsigned int *fsp = fwp + (T1_MAXCBLKW + 2);
+
+    np[-1] |= T1_3D_SIG_SE;
+    np[1] |= T1_3D_SIG_SW;
+    sp[-1] |= T1_3D_SIG_NE;
+    sp[1] |= T1_3D_SIG_NW;
+    *np |= T1_3D_SIG_S;
+    *sp |= T1_3D_SIG_N;
+    fp[-1] |= T1_3D_SIG_E;
+    fp[1] |= T1_3D_SIG_W;
+
+    *fwp |= T1_3D_SIG_FC;
+    *bwp |= T1_3D_SIG_BC;
+
+    fnp[-1] |= T1_3D_SIG_FSE;
+    fnp[1] |= T1_3D_SIG_FSW;
+    fsp[-1] |= T1_3D_SIG_FNE;
+    fsp[1] |= T1_3D_SIG_FNW;
+    *fnp |= T1_3D_SIG_FS;
+    *fsp |= T1_3D_SIG_FN;
+    fwp[-1] |= T1_3D_SIG_FE;
+    fwp[1] |= T1_3D_SIG_FW;
+
+    bnp[-1] |= T1_3D_SIG_BSE;
+    bnp[1] |= T1_3D_SIG_BSW;
+    bsp[-1] |= T1_3D_SIG_BNE;
+    bsp[1] |= T1_3D_SIG_BNW;
+    *bnp |= T1_3D_SIG_BS;
+    *bsp |= T1_3D_SIG_BN;
+    bwp[-1] |= T1_3D_SIG_BE;
+    bwp[1] |= T1_3D_SIG_BW;
+
+    if (s) {
+        *np |= (T1_3D_SGN_S << 16);
+        *sp |= (T1_3D_SGN_N << 16);
+        fp[-1] |= (T1_3D_SGN_E << 16);
+        fp[1] |= (T1_3D_SGN_W << 16);
+        *fwp |= (T1_3D_SGN_F << 16);
+        *bwp |= (T1_3D_SGN_B << 16);
+    }
 }
 
-static void t1_3d_enc_sigpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr, int *dp, int orient, int bpno, int one, int *nmsedec, char type, int vsc) {
-       int v, flagsvr;
-       unsigned int flag;
-
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       flag = vsc ? ((*fp) & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW | (T1_3D_SGN_S << 16)))) : (*fp);
-       flagsvr = (*fsvr);
-       if ((flag & T1_3D_SIG_OTH) && !(flagsvr & (T1_3D_SIG | T1_3D_VISIT))) {
-               v = int_abs(*dp) & one ? 1 : 0;
-               if (type == T1_TYPE_RAW) {      /* BYPASS/LAZY MODE */
-                       mqc_setcurctx(mqc, t1_3d_getctxno_zc(flag, orient));    /* ESSAI */
-                       mqc_bypass_enc(mqc, v);
-               } else {
-                       mqc_setcurctx(mqc, t1_3d_getctxno_zc(flag, orient));
-                       mqc_encode(mqc, v);
-               }
-               if (v) {
-                       v = *dp < 0 ? 1 : 0;
-                       *nmsedec +=     t1_3d_getnmsedec_sig(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS);
-                       if (type == T1_TYPE_RAW) {      /* BYPASS/LAZY MODE */
-                               mqc_setcurctx(mqc, t1_3d_getctxno_sc(flag));    /* ESSAI */
-                               mqc_bypass_enc(mqc, v);
-                       } else {
-                               mqc_setcurctx(mqc, t1_3d_getctxno_sc(flag));
-                               mqc_encode(mqc, v ^ t1_3d_getspb(flag));
-                       }
-                       t1_3d_updateflags(fp, v);
-                       *fsvr |= T1_3D_SIG;
-               }
-               *fsvr |= T1_3D_VISIT;
-       }
+static void t1_3d_enc_sigpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr,
+                                   int *dp, int orient, int bpno, int one, int *nmsedec, char type, int vsc)
+{
+    int v, flagsvr;
+    unsigned int flag;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = vsc ? ((*fp) & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW |
+                             (T1_3D_SGN_S << 16)))) : (*fp);
+    flagsvr = (*fsvr);
+    if ((flag & T1_3D_SIG_OTH) && !(flagsvr & (T1_3D_SIG | T1_3D_VISIT))) {
+        v = int_abs(*dp) & one ? 1 : 0;
+        if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
+            mqc_setcurctx(mqc, t1_3d_getctxno_zc(flag, orient));    /* ESSAI */
+            mqc_bypass_enc(mqc, v);
+        } else {
+            mqc_setcurctx(mqc, t1_3d_getctxno_zc(flag, orient));
+            mqc_encode(mqc, v);
+        }
+        if (v) {
+            v = *dp < 0 ? 1 : 0;
+            *nmsedec += t1_3d_getnmsedec_sig(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS);
+            if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
+                mqc_setcurctx(mqc, t1_3d_getctxno_sc(flag));    /* ESSAI */
+                mqc_bypass_enc(mqc, v);
+            } else {
+                mqc_setcurctx(mqc, t1_3d_getctxno_sc(flag));
+                mqc_encode(mqc, v ^ t1_3d_getspb(flag));
+            }
+            t1_3d_updateflags(fp, v);
+            *fsvr |= T1_3D_SIG;
+        }
+        *fsvr |= T1_3D_VISIT;
+    }
 }
 
-static void t1_3d_dec_sigpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr, int *dp, int orient, int oneplushalf, char type, int vsc) {
-       int v, flagsvr;
-       unsigned int flag;
-       
-       opj_raw_t *raw = t1->raw;       /* RAW component */
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       flag = vsc ? ((*fp) & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW | (T1_3D_SGN_S << 16)))) : (*fp);
-       flagsvr = (*fsvr);
-       if ((flag & T1_3D_SIG_OTH) && !(flagsvr & (T1_3D_SIG | T1_3D_VISIT))) {
-               if (type == T1_TYPE_RAW) {
-                       if (raw_decode(raw)) {
-                               v = raw_decode(raw);    /* ESSAI */
-                               *dp = v ? -oneplushalf : oneplushalf;
-                               t1_3d_updateflags(fp, v);
-                               *fsvr |= T1_3D_SIG;
-                       }
-               } else {
-                       mqc_setcurctx(mqc, t1_3d_getctxno_zc(flag, orient));
-                       if (mqc_decode(mqc)) {
-                               mqc_setcurctx(mqc, t1_3d_getctxno_sc(flag));
-                               v = mqc_decode(mqc) ^ t1_3d_getspb(flag);
-                               *dp = v ? -oneplushalf : oneplushalf;
-                               t1_3d_updateflags(fp, v);
-                               *fsvr |= T1_3D_SIG;
-                       }
-               }
-               *fsvr |= T1_3D_VISIT;
-       }
-}                              /* VSC and  BYPASS by Antonin */
-
-static void t1_3d_enc_sigpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno, int orient, int *nmsedec, char type, int cblksty) {
-       int i, j, k, m, one, vsc;
-       *nmsedec = 0;
-       one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
-       for (m = 0; m < l; m++) {
-               for (k = 0; k < h; k += 4) {
-                       for (i = 0; i < w; i++) {
-                               for (j = k; j < k + 4 && j < h; j++) {
-                                       vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
-                                       t1_3d_enc_sigpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->flagSVR[1 + m][1 + j][1 + i], &t1->data[m][j][i], orient, bpno, one, nmsedec, type, vsc);
-                               }
-                       }
-               }
-       }
+static void t1_3d_dec_sigpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr,
+                                   int *dp, int orient, int oneplushalf, char type, int vsc)
+{
+    int v, flagsvr;
+    unsigned int flag;
+
+    opj_raw_t *raw = t1->raw;   /* RAW component */
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = vsc ? ((*fp) & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW |
+                             (T1_3D_SGN_S << 16)))) : (*fp);
+    flagsvr = (*fsvr);
+    if ((flag & T1_3D_SIG_OTH) && !(flagsvr & (T1_3D_SIG | T1_3D_VISIT))) {
+        if (type == T1_TYPE_RAW) {
+            if (raw_decode(raw)) {
+                v = raw_decode(raw);    /* ESSAI */
+                *dp = v ? -oneplushalf : oneplushalf;
+                t1_3d_updateflags(fp, v);
+                *fsvr |= T1_3D_SIG;
+            }
+        } else {
+            mqc_setcurctx(mqc, t1_3d_getctxno_zc(flag, orient));
+            if (mqc_decode(mqc)) {
+                mqc_setcurctx(mqc, t1_3d_getctxno_sc(flag));
+                v = mqc_decode(mqc) ^ t1_3d_getspb(flag);
+                *dp = v ? -oneplushalf : oneplushalf;
+                t1_3d_updateflags(fp, v);
+                *fsvr |= T1_3D_SIG;
+            }
+        }
+        *fsvr |= T1_3D_VISIT;
+    }
+}               /* VSC and  BYPASS by Antonin */
+
+static void t1_3d_enc_sigpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno,
+                              int orient, int *nmsedec, char type, int cblksty)
+{
+    int i, j, k, m, one, vsc;
+    *nmsedec = 0;
+    one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
+    for (m = 0; m < l; m++) {
+        for (k = 0; k < h; k += 4) {
+            for (i = 0; i < w; i++) {
+                for (j = k; j < k + 4 && j < h; j++) {
+                    vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
+                    t1_3d_enc_sigpass_step(t1, &t1->flags[1 + m][1 + j][1 + i],
+                                           &t1->flagSVR[1 + m][1 + j][1 + i], &t1->data[m][j][i], orient, bpno, one,
+                                           nmsedec, type, vsc);
+                }
+            }
+        }
+    }
 }
 
-static void t1_3d_dec_sigpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno, int orient, char type, int cblksty) {
-       int i, j, k, m, one, half, oneplushalf, vsc;
-       one = 1 << bpno;
-       half = one >> 1;
-       oneplushalf = one | half;
-       for (m = 0; m < l; m++) {
-               for (k = 0; k < h; k += 4) {
-                       for (i = 0; i < w; i++) {
-                               for (j = k; j < k + 4 && j < h; j++) {
-                                       vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
-                                       t1_3d_dec_sigpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->flagSVR[1 + m][1 + j][1 + i], &t1->data[m][j][i], orient, oneplushalf, type, vsc);
-                               }
-                       }
-               }
-       }
-}                              /* VSC and  BYPASS by Antonin */
-
-static void t1_3d_enc_refpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr, int *dp, int bpno, int one, int *nmsedec, char type, int vsc) {
-       int v, flagsvr;
-       unsigned int flag;
-
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       flag = vsc ? ((*fp) & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW | (T1_3D_SGN_S << 16)))) : (*fp);
-       flagsvr = (*fsvr);
-       if ((flagsvr & (T1_3D_SIG | T1_3D_VISIT)) == T1_3D_SIG) {
-               *nmsedec += t1_3d_getnmsedec_ref(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS);
-               v = int_abs(*dp) & one ? 1 : 0;
-               if (type == T1_TYPE_RAW) {      /* BYPASS/LAZY MODE */
-                       mqc_setcurctx(mqc, t1_3d_getctxno_mag(flag, flagsvr));  /* ESSAI */
-                       mqc_bypass_enc(mqc, v);
-               } else {
-                       mqc_setcurctx(mqc, t1_3d_getctxno_mag(flag, flagsvr));
-                       mqc_encode(mqc, v);
-               }
-               *fsvr |= T1_3D_REFINE;
-       }
+static void t1_3d_dec_sigpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno,
+                              int orient, char type, int cblksty)
+{
+    int i, j, k, m, one, half, oneplushalf, vsc;
+    one = 1 << bpno;
+    half = one >> 1;
+    oneplushalf = one | half;
+    for (m = 0; m < l; m++) {
+        for (k = 0; k < h; k += 4) {
+            for (i = 0; i < w; i++) {
+                for (j = k; j < k + 4 && j < h; j++) {
+                    vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
+                    t1_3d_dec_sigpass_step(t1, &t1->flags[1 + m][1 + j][1 + i],
+                                           &t1->flagSVR[1 + m][1 + j][1 + i], &t1->data[m][j][i], orient, oneplushalf,
+                                           type, vsc);
+                }
+            }
+        }
+    }
+}               /* VSC and  BYPASS by Antonin */
+
+static void t1_3d_enc_refpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr,
+                                   int *dp, int bpno, int one, int *nmsedec, char type, int vsc)
+{
+    int v, flagsvr;
+    unsigned int flag;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = vsc ? ((*fp) & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW |
+                             (T1_3D_SGN_S << 16)))) : (*fp);
+    flagsvr = (*fsvr);
+    if ((flagsvr & (T1_3D_SIG | T1_3D_VISIT)) == T1_3D_SIG) {
+        *nmsedec += t1_3d_getnmsedec_ref(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS);
+        v = int_abs(*dp) & one ? 1 : 0;
+        if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
+            mqc_setcurctx(mqc, t1_3d_getctxno_mag(flag, flagsvr));  /* ESSAI */
+            mqc_bypass_enc(mqc, v);
+        } else {
+            mqc_setcurctx(mqc, t1_3d_getctxno_mag(flag, flagsvr));
+            mqc_encode(mqc, v);
+        }
+        *fsvr |= T1_3D_REFINE;
+    }
 }
 
-static void t1_3d_dec_refpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr, int *dp, int poshalf, int neghalf, char type, int vsc) {
-       int v, t, flagsvr;
-       unsigned int flag;
-
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       opj_raw_t *raw = t1->raw;       /* RAW component */
-       
-       flag = vsc ? ((*fp) & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW | (T1_3D_SGN_S << 16)))) : (*fp);
-       flagsvr = (*fsvr);
-       if ((flagsvr & (T1_3D_SIG | T1_3D_VISIT)) == T1_3D_SIG) {
-               if (type == T1_TYPE_RAW) {
-                       mqc_setcurctx(mqc, t1_3d_getctxno_mag(flag, flagsvr));  /* ESSAI */
-                       v = raw_decode(raw);
-               } else {
-                       mqc_setcurctx(mqc, t1_3d_getctxno_mag(flag, flagsvr));
-                       v = mqc_decode(mqc);
-               }
-               t = v ? poshalf : neghalf;
-               *dp += *dp < 0 ? -t : t;
-               *fsvr |= T1_3D_REFINE;
-       }
-}                              /* VSC and  BYPASS by Antonin  */
-
-static void t1_3d_enc_refpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno, int *nmsedec, char type, int cblksty) {
-       int i, j, k, m, one, vsc;
-       *nmsedec = 0;
-       one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
-       for (m = 0; m < l; m++){
-               for (k = 0; k < h; k += 4) {
-                       for (i = 0; i < w; i++) {
-                               for (j = k; j < k + 4 && j < h; j++) {
-                                       vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
-                                       t1_3d_enc_refpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->flagSVR[1 + m][1 + j][1 + i], &t1->data[m][j][i], bpno, one, nmsedec, type, vsc);
-                               }
-                       }
-               }
-       }       
+static void t1_3d_dec_refpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr,
+                                   int *dp, int poshalf, int neghalf, char type, int vsc)
+{
+    int v, t, flagsvr;
+    unsigned int flag;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+    opj_raw_t *raw = t1->raw;   /* RAW component */
+
+    flag = vsc ? ((*fp) & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW |
+                             (T1_3D_SGN_S << 16)))) : (*fp);
+    flagsvr = (*fsvr);
+    if ((flagsvr & (T1_3D_SIG | T1_3D_VISIT)) == T1_3D_SIG) {
+        if (type == T1_TYPE_RAW) {
+            mqc_setcurctx(mqc, t1_3d_getctxno_mag(flag, flagsvr));  /* ESSAI */
+            v = raw_decode(raw);
+        } else {
+            mqc_setcurctx(mqc, t1_3d_getctxno_mag(flag, flagsvr));
+            v = mqc_decode(mqc);
+        }
+        t = v ? poshalf : neghalf;
+        *dp += *dp < 0 ? -t : t;
+        *fsvr |= T1_3D_REFINE;
+    }
+}               /* VSC and  BYPASS by Antonin  */
+
+static void t1_3d_enc_refpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno,
+                              int *nmsedec, char type, int cblksty)
+{
+    int i, j, k, m, one, vsc;
+    *nmsedec = 0;
+    one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
+    for (m = 0; m < l; m++) {
+        for (k = 0; k < h; k += 4) {
+            for (i = 0; i < w; i++) {
+                for (j = k; j < k + 4 && j < h; j++) {
+                    vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
+                    t1_3d_enc_refpass_step(t1, &t1->flags[1 + m][1 + j][1 + i],
+                                           &t1->flagSVR[1 + m][1 + j][1 + i], &t1->data[m][j][i], bpno, one, nmsedec, type,
+                                           vsc);
+                }
+            }
+        }
+    }
 }
 
-static void t1_3d_dec_refpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno, char type, int cblksty) {
-       int i, j, k, m, one, poshalf, neghalf;
-       int vsc;
-       one = 1 << bpno;
-       poshalf = one >> 1;
-       neghalf = bpno > 0 ? -poshalf : -1;
-       for (m = 0; m < l; m++) {
-               for (k = 0; k < h; k += 4) {
-                       for (i = 0; i < w; i++) {
-                               for (j = k; j < k + 4 && j < h; j++) {
-                                       vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
-                                       t1_3d_dec_refpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->flagSVR[1 + m][1 + j][1 + i], &t1->data[m][j][i], poshalf, neghalf, type, vsc);
-                               }
-                       }
-               }
-       }
-}                              /* VSC and  BYPASS by Antonin */
-
-static void t1_3d_enc_clnpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr, int *dp, int orient, int bpno, int one, int *nmsedec, int partial, int vsc) {
-       int v, flagsvr;
-       unsigned int flag;
-
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       flag = vsc ? ((*fp) & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW | (T1_3D_SGN_S << 16)))) : (*fp);
-       flagsvr = (*fsvr);
-       if (partial) {
-               goto LABEL_PARTIAL;
-       }
-       if (!(*fsvr & (T1_3D_SIG | T1_3D_VISIT))) {
-               mqc_setcurctx(mqc, t1_3d_getctxno_zc(flag, orient));
-               v = int_abs(*dp) & one ? 1 : 0;
-               mqc_encode(mqc, v);
-               if (v) {
+static void t1_3d_dec_refpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno,
+                              char type, int cblksty)
+{
+    int i, j, k, m, one, poshalf, neghalf;
+    int vsc;
+    one = 1 << bpno;
+    poshalf = one >> 1;
+    neghalf = bpno > 0 ? -poshalf : -1;
+    for (m = 0; m < l; m++) {
+        for (k = 0; k < h; k += 4) {
+            for (i = 0; i < w; i++) {
+                for (j = k; j < k + 4 && j < h; j++) {
+                    vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
+                    t1_3d_dec_refpass_step(t1, &t1->flags[1 + m][1 + j][1 + i],
+                                           &t1->flagSVR[1 + m][1 + j][1 + i], &t1->data[m][j][i], poshalf, neghalf, type,
+                                           vsc);
+                }
+            }
+        }
+    }
+}               /* VSC and  BYPASS by Antonin */
+
+static void t1_3d_enc_clnpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr,
+                                   int *dp, int orient, int bpno, int one, int *nmsedec, int partial, int vsc)
+{
+    int v, flagsvr;
+    unsigned int flag;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = vsc ? ((*fp) & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW |
+                             (T1_3D_SGN_S << 16)))) : (*fp);
+    flagsvr = (*fsvr);
+    if (partial) {
+        goto LABEL_PARTIAL;
+    }
+    if (!(*fsvr & (T1_3D_SIG | T1_3D_VISIT))) {
+        mqc_setcurctx(mqc, t1_3d_getctxno_zc(flag, orient));
+        v = int_abs(*dp) & one ? 1 : 0;
+        mqc_encode(mqc, v);
+        if (v) {
 LABEL_PARTIAL:
-                       *nmsedec += t1_3d_getnmsedec_sig(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS);
-                       mqc_setcurctx(mqc, t1_3d_getctxno_sc(flag));
-                       v = *dp < 0 ? 1 : 0;
-                       mqc_encode(mqc, v ^ t1_3d_getspb(flag));
-                       t1_3d_updateflags(fp, v);
-                       *fsvr |= T1_3D_SIG;
-               }
-       }
-       *fsvr &= ~T1_3D_VISIT;
+            *nmsedec += t1_3d_getnmsedec_sig(t1, int_abs(*dp), bpno + T1_NMSEDEC_FRACBITS);
+            mqc_setcurctx(mqc, t1_3d_getctxno_sc(flag));
+            v = *dp < 0 ? 1 : 0;
+            mqc_encode(mqc, v ^ t1_3d_getspb(flag));
+            t1_3d_updateflags(fp, v);
+            *fsvr |= T1_3D_SIG;
+        }
+    }
+    *fsvr &= ~T1_3D_VISIT;
 }
 
-static void t1_3d_dec_clnpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr, int *dp, int orient, int oneplushalf, int partial, int vsc) {
-       int v, flagsvr;
-       unsigned int flag;
-
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       flag = vsc ? ((*fp) & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW | (T1_3D_SGN_S << 16)))) : (*fp);
-       flagsvr = (*fsvr);
-       if (partial) {
-               goto LABEL_PARTIAL;
-       }
-       if (!(flagsvr & (T1_3D_SIG | T1_3D_VISIT))) {
-               mqc_setcurctx(mqc, t1_3d_getctxno_zc(flag, orient));
-               if (mqc_decode(mqc)) {
+static void t1_3d_dec_clnpass_step(opj_t1_3d_t *t1, unsigned int *fp, int *fsvr,
+                                   int *dp, int orient, int oneplushalf, int partial, int vsc)
+{
+    int v, flagsvr;
+    unsigned int flag;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = vsc ? ((*fp) & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW |
+                             (T1_3D_SGN_S << 16)))) : (*fp);
+    flagsvr = (*fsvr);
+    if (partial) {
+        goto LABEL_PARTIAL;
+    }
+    if (!(flagsvr & (T1_3D_SIG | T1_3D_VISIT))) {
+        mqc_setcurctx(mqc, t1_3d_getctxno_zc(flag, orient));
+        if (mqc_decode(mqc)) {
 LABEL_PARTIAL:
-                       mqc_setcurctx(mqc, t1_3d_getctxno_sc(flag));
-                       v = mqc_decode(mqc) ^ t1_3d_getspb(flag);
-                       *dp = v ? -oneplushalf : oneplushalf;
-                       t1_3d_updateflags(fp, v);
-                       *fsvr |= T1_3D_SIG;
-               }
-       }
-       *fsvr &= ~T1_3D_VISIT;
-}                              /* VSC and  BYPASS by Antonin */
-
-static void t1_3d_enc_clnpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno, int orient, int *nmsedec, int cblksty) {
-       int i, j, k, m, one, agg, runlen, vsc;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       *nmsedec = 0;
-       one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
-       for (m = 0; m < l; m++) {
-               for (k = 0; k < h; k += 4) {
-                       for (i = 0; i < w; i++) {
-                               if (k + 3 < h) {
-                                       if (cblksty & J3D_CCP_CBLKSTY_VSC) {
-                                               agg = !( ((t1->flagSVR[1 + m][1 + k][1 + i] | (T1_3D_SIG | T1_3D_VISIT)) & (t1->flags[1 + m][1 + k][1 + i] & T1_3D_SIG_OTH))
-                                                       ||   ((t1->flagSVR[1 + m][1 + k + 1][1 + i] | (T1_3D_SIG | T1_3D_VISIT)) & (t1->flags[1 + m][1 + k + 1][1 + i] & T1_3D_SIG_OTH))
-                                                       ||   ((t1->flagSVR[1 + m][1 + k + 2][1 + i] | (T1_3D_SIG | T1_3D_VISIT)) & (t1->flags[1 + m][1 + k + 2][1 + i] & T1_3D_SIG_OTH))
-                                                       ||   ((t1->flagSVR[1 + m][1 + k + 3][1 + i] | (T1_3D_SIG | T1_3D_VISIT)) & ((t1->flags[1 + m][1 + k + 3][1 + i] & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW | (T1_3D_SGN_S << 16)))) & (T1_3D_SIG_OTH)))
-                                                       );
-                                       } else {
-                                               agg = !(
-                                                       ((t1->flagSVR[1 + m][1 + k][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | (t1->flags[1 + m][1 + k][1 + i] & T1_3D_SIG_OTH))
-                                                       || ((t1->flagSVR[1 + m][1 + k + 1][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | (t1->flags[1 + m][1 + k + 1][1 + i] & T1_3D_SIG_OTH))
-                                                       || ((t1->flagSVR[1 + m][1 + k + 2][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | (t1->flags[1 + m][1 + k + 2][1 + i] & T1_3D_SIG_OTH))
-                                                       || ((t1->flagSVR[1 + m][1 + k + 3][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | (t1->flags[1 + m][1 + k + 3][1 + i] & T1_3D_SIG_OTH))
-                                                       );
-                                       }
-                               } else {
-                                       agg = 0;
-                               }
-                               if (agg) {
-                                       for (runlen = 0; runlen < 4; runlen++) {
-                                               if (int_abs(t1->data[m][k + runlen][i]) & one)
-                                                       break;
-                                       }
-                                       mqc_setcurctx(mqc, T1_CTXNO_AGG);
-                                       mqc_encode(mqc, runlen != 4);
-                                       if (runlen == 4) {
-                                               continue;
-                                       }
-                                       mqc_setcurctx(mqc, T1_CTXNO_UNI);
-                                       mqc_encode(mqc, runlen >> 1);
-                                       mqc_encode(mqc, runlen & 1);
-                               } else {
-                                       runlen = 0;
-                               }
-                               for (j = k + runlen; j < k + 4 && j < h; j++) {
-                                       vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
-                                       t1_3d_enc_clnpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->flagSVR[1 + m][1 + j][1 + i], &t1->data[m][j][i], orient, bpno, one, nmsedec, agg && (j == k + runlen), vsc);
-                               }
-                       }
-               }
-       }
+            mqc_setcurctx(mqc, t1_3d_getctxno_sc(flag));
+            v = mqc_decode(mqc) ^ t1_3d_getspb(flag);
+            *dp = v ? -oneplushalf : oneplushalf;
+            t1_3d_updateflags(fp, v);
+            *fsvr |= T1_3D_SIG;
+        }
+    }
+    *fsvr &= ~T1_3D_VISIT;
+}               /* VSC and  BYPASS by Antonin */
+
+static void t1_3d_enc_clnpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno,
+                              int orient, int *nmsedec, int cblksty)
+{
+    int i, j, k, m, one, agg, runlen, vsc;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    *nmsedec = 0;
+    one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
+    for (m = 0; m < l; m++) {
+        for (k = 0; k < h; k += 4) {
+            for (i = 0; i < w; i++) {
+                if (k + 3 < h) {
+                    if (cblksty & J3D_CCP_CBLKSTY_VSC) {
+                        agg = !(((t1->flagSVR[1 + m][1 + k][1 + i] | (T1_3D_SIG | T1_3D_VISIT)) &
+                                 (t1->flags[1 + m][1 + k][1 + i] & T1_3D_SIG_OTH))
+                                || ((t1->flagSVR[1 + m][1 + k + 1][1 + i] | (T1_3D_SIG | T1_3D_VISIT)) &
+                                    (t1->flags[1 + m][1 + k + 1][1 + i] & T1_3D_SIG_OTH))
+                                || ((t1->flagSVR[1 + m][1 + k + 2][1 + i] | (T1_3D_SIG | T1_3D_VISIT)) &
+                                    (t1->flags[1 + m][1 + k + 2][1 + i] & T1_3D_SIG_OTH))
+                                || ((t1->flagSVR[1 + m][1 + k + 3][1 + i] | (T1_3D_SIG | T1_3D_VISIT)) & ((
+                                            t1->flags[1 + m][1 + k + 3][1 + i] & (~(T1_3D_SIG_S | T1_3D_SIG_SE |
+                                                    T1_3D_SIG_SW | (T1_3D_SGN_S << 16)))) & (T1_3D_SIG_OTH)))
+                               );
+                    } else {
+                        agg = !(
+                                  ((t1->flagSVR[1 + m][1 + k][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) |
+                                   (t1->flags[1 + m][1 + k][1 + i] & T1_3D_SIG_OTH))
+                                  || ((t1->flagSVR[1 + m][1 + k + 1][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) |
+                                      (t1->flags[1 + m][1 + k + 1][1 + i] & T1_3D_SIG_OTH))
+                                  || ((t1->flagSVR[1 + m][1 + k + 2][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) |
+                                      (t1->flags[1 + m][1 + k + 2][1 + i] & T1_3D_SIG_OTH))
+                                  || ((t1->flagSVR[1 + m][1 + k + 3][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) |
+                                      (t1->flags[1 + m][1 + k + 3][1 + i] & T1_3D_SIG_OTH))
+                              );
+                    }
+                } else {
+                    agg = 0;
+                }
+                if (agg) {
+                    for (runlen = 0; runlen < 4; runlen++) {
+                        if (int_abs(t1->data[m][k + runlen][i]) & one) {
+                            break;
+                        }
+                    }
+                    mqc_setcurctx(mqc, T1_CTXNO_AGG);
+                    mqc_encode(mqc, runlen != 4);
+                    if (runlen == 4) {
+                        continue;
+                    }
+                    mqc_setcurctx(mqc, T1_CTXNO_UNI);
+                    mqc_encode(mqc, runlen >> 1);
+                    mqc_encode(mqc, runlen & 1);
+                } else {
+                    runlen = 0;
+                }
+                for (j = k + runlen; j < k + 4 && j < h; j++) {
+                    vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
+                    t1_3d_enc_clnpass_step(t1, &t1->flags[1 + m][1 + j][1 + i],
+                                           &t1->flagSVR[1 + m][1 + j][1 + i], &t1->data[m][j][i], orient, bpno, one,
+                                           nmsedec, agg && (j == k + runlen), vsc);
+                }
+            }
+        }
+    }
 }
 
-static void t1_3d_dec_clnpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno, int orient, int cblksty) {
-       int i, j, k, m, one, half, oneplushalf, agg, runlen, vsc;
-       int segsym = cblksty & J3D_CCP_CBLKSTY_SEGSYM;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       one = 1 << bpno;
-       half = one >> 1;
-       oneplushalf = one | half;
-       for (m = 0; m < l; m++) {
-               for (k = 0; k < h; k += 4) {
-                       for (i = 0; i < w; i++) {
-                               if (k + 3 < h) {
-                                       if (cblksty & J3D_CCP_CBLKSTY_VSC) {
-                                               agg = !(
-                                                       ((t1->flagSVR[1 + m][1 + k][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | (t1->flags[1 + m][1 + k][1 + i] & T1_3D_SIG_OTH))
-                                                       || ((t1->flagSVR[1 + m][1 + k + 1][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | (t1->flags[1 + m][1 + k + 1][1 + i] & T1_3D_SIG_OTH))
-                                                       || ((t1->flagSVR[1 + m][1 + k + 2][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | (t1->flags[1 + m][1 + k + 2][1 + i] & T1_3D_SIG_OTH))
-                                                       || ((t1->flagSVR[1 + m][1 + k + 3][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | ((t1->flags[1 + m][1 + k + 3][1 + i] & (~(T1_3D_SIG_S | T1_3D_SIG_SE | T1_3D_SIG_SW | (T1_3D_SGN_S << 16)))) & (T1_3D_SIG_OTH)))
-                                                       );
-                                       } else {
-                                               agg = !(
-                                                       ((t1->flagSVR[1 + m][1 + k][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | (t1->flags[1 + m][1 + k][1 + i] & T1_3D_SIG_OTH))
-                                                       || ((t1->flagSVR[1 + m][1 + k + 1][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | (t1->flags[1 + m][1 + k + 1][1 + i] & T1_3D_SIG_OTH))
-                                                       || ((t1->flagSVR[1 + m][1 + k + 2][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | (t1->flags[1 + m][1 + k + 2][1 + i] & T1_3D_SIG_OTH))
-                                                       || ((t1->flagSVR[1 + m][1 + k + 3][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | (t1->flags[1 + m][1 + k + 3][1 + i] & T1_3D_SIG_OTH))
-                                                       );
-                                       }
-                               } else {
-                                       agg = 0;
-                               }
-                               if (agg) {
-                                       mqc_setcurctx(mqc, T1_CTXNO_AGG);
-                                       if (!mqc_decode(mqc)) {
-                                               continue;
-                                       }
-                                       mqc_setcurctx(mqc, T1_CTXNO_UNI);
-                                       runlen = mqc_decode(mqc);
-                                       runlen = (runlen << 1) | mqc_decode(mqc);
-                               } else {
-                                       runlen = 0;
-                               }
-                               for (j = k + runlen; j < k + 4 && j < h; j++) {
-                                       vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
-                                       t1_3d_dec_clnpass_step(t1, &t1->flags[1 + m][1 + j][1 + i], &t1->flagSVR[1 + m][1 + j][1 + i], &t1->data[m][j][i], orient, oneplushalf, agg && (j == k + runlen), vsc);
-                               }
-                       }
-               }
-       }
-       if (segsym) {
-               int v = 0;
-               mqc_setcurctx(mqc, T1_CTXNO_UNI);
-               v = mqc_decode(mqc);
-               v = (v << 1) | mqc_decode(mqc);
-               v = (v << 1) | mqc_decode(mqc);
-               v = (v << 1) | mqc_decode(mqc);
-               /*
-               if (v!=0xa) {
-                       opj_event_msg(t1->cinfo, EVT_WARNING, "Bad segmentation symbol %x\n", v);
-               } 
-               */
-       }
-}                              /* VSC and  BYPASS by Antonin */
-
-
-static void t1_3d_encode_cblk(opj_t1_3d_t *t1, opj_tcd_cblk_t * cblk, int orient, int compno, int level[3], int dwtid[3], double stepsize, int cblksty, int numcomps, opj_tcd_tile_t * tile) {
-       int i, j, k;
-       int w, h, l;
-       int passno;
-       int bpno, passtype;
-       int max;
-       int nmsedec = 0;
-       double cumwmsedec = 0;
-       char type = T1_TYPE_MQ;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       w = cblk->x1 - cblk->x0;
-       h = cblk->y1 - cblk->y0;
-       l = cblk->z1 - cblk->z0;
-
-       max = 0;
-       for (k = 0; k < l; k++) {
-               for (j = 0; j < h; j++) {
-                       for (i = 0; i < w; i++) {
-                               max = int_max(max, int_abs(t1->data[k][j][i]));
-                       }
-               }
-       }
-       for (k = 0; k <= l; k++) {
-               for (j = 0; j <= h; j++) {
-                       for (i = 0; i <= w; i++) {
-                               t1->flags[k][j][i] = 0;
-                               t1->flagSVR[k][j][i] = 0;
-                       }
-               }
-       }
-       
-       cblk->numbps = max ? (int_floorlog2(max) + 1) - T1_NMSEDEC_FRACBITS : 0;
-       
-       bpno = cblk->numbps - 1;
-       passtype = 2;
-       
-       mqc_reset_enc(mqc);
-       mqc_init_enc(mqc, cblk->data);
-       
-       for (passno = 0; bpno >= 0; passno++) {
-               opj_tcd_pass_t *pass = &cblk->passes[passno];
-               int correction = 3;
-               double tmpwmsedec;
-               type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) && (cblksty & J3D_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
-               
-               switch (passtype) {
-                       case 0:
-                               t1_3d_enc_sigpass(t1, w, h, l, bpno, orient, &nmsedec, type, cblksty);
-                               break;
-                       case 1:
-                               t1_3d_enc_refpass(t1, w, h, l, bpno, &nmsedec, type, cblksty);
-                               break;
-                       case 2:
-                               t1_3d_enc_clnpass(t1, w, h, l, bpno, orient, &nmsedec, cblksty);
-                               /* code switch SEGMARK (i.e. SEGSYM) */
-                               if (cblksty & J3D_CCP_CBLKSTY_SEGSYM)
-                                       mqc_segmark_enc(mqc);
-                               break;
-               }
-               
-               /* fixed_quality */
-               tmpwmsedec = t1_getwmsedec(nmsedec, compno, level, orient, bpno, stepsize, numcomps, dwtid);
-               cumwmsedec += tmpwmsedec;
-               tile->distotile += tmpwmsedec;
-               
-               /* Code switch "RESTART" (i.e. TERMALL) */
-               if ((cblksty & J3D_CCP_CBLKSTY_TERMALL) && !((passtype == 2) && (bpno - 1 < 0))) {
-                       if (type == T1_TYPE_RAW) {
-                               mqc_flush(mqc);
-                               correction = 1;
-                               /* correction = mqc_bypass_flush_enc(); */
-                       } else {                        /* correction = mqc_restart_enc(); */
-                               mqc_flush(mqc);
-                               correction = 1;
-                       }
-                       pass->term = 1;
-               } else {
-                       if (((bpno < (cblk->numbps - 4) && (passtype > 0)) 
-                               || ((bpno == (cblk->numbps - 4)) && (passtype == 2))) && (cblksty & J3D_CCP_CBLKSTY_LAZY)) {
-                               if (type == T1_TYPE_RAW) {
-                                       mqc_flush(mqc);
-                                       correction = 1;
-                               } else {        
-                                       mqc_flush(mqc);
-                                       correction = 1;
-                               }
-                               pass->term = 1;
-                       } else {
-                               pass->term = 0;
-                       }
-               }
-               
-               if (++passtype == 3) {
-                       passtype = 0;
-                       bpno--;
-               }
-               
-               if (pass->term && bpno > 0) {
-                       type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) && (cblksty & J3D_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
-                       if (type == T1_TYPE_RAW)
-                               mqc_bypass_init_enc(mqc);
-                       else
-                               mqc_restart_init_enc(mqc);
-               }
-               
-               pass->distortiondec = cumwmsedec;
-               pass->rate = mqc_numbytes(mqc) + correction;    /* FIXME */
-               pass->len = pass->rate - (passno == 0 ? 0 : cblk->passes[passno - 1].rate);
-
-               /* Code-switch "RESET" */
-               if (cblksty & J3D_CCP_CBLKSTY_RESET)
-                       mqc_reset_enc(mqc);
-       }
-       
-       /* Code switch "ERTERM" (i.e. PTERM) */
-       if (cblksty & J3D_CCP_CBLKSTY_PTERM)
-               mqc_erterm_enc(mqc);
-       else /* Default coding */ if (!(cblksty & J3D_CCP_CBLKSTY_LAZY))
-               mqc_flush(mqc);
-       
-       cblk->totalpasses = passno;
+static void t1_3d_dec_clnpass(opj_t1_3d_t *t1, int w, int h, int l, int bpno,
+                              int orient, int cblksty)
+{
+    int i, j, k, m, one, half, oneplushalf, agg, runlen, vsc;
+    int segsym = cblksty & J3D_CCP_CBLKSTY_SEGSYM;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    one = 1 << bpno;
+    half = one >> 1;
+    oneplushalf = one | half;
+    for (m = 0; m < l; m++) {
+        for (k = 0; k < h; k += 4) {
+            for (i = 0; i < w; i++) {
+                if (k + 3 < h) {
+                    if (cblksty & J3D_CCP_CBLKSTY_VSC) {
+                        agg = !(
+                                  ((t1->flagSVR[1 + m][1 + k][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) |
+                                   (t1->flags[1 + m][1 + k][1 + i] & T1_3D_SIG_OTH))
+                                  || ((t1->flagSVR[1 + m][1 + k + 1][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) |
+                                      (t1->flags[1 + m][1 + k + 1][1 + i] & T1_3D_SIG_OTH))
+                                  || ((t1->flagSVR[1 + m][1 + k + 2][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) |
+                                      (t1->flags[1 + m][1 + k + 2][1 + i] & T1_3D_SIG_OTH))
+                                  || ((t1->flagSVR[1 + m][1 + k + 3][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) | ((
+                                              t1->flags[1 + m][1 + k + 3][1 + i] & (~(T1_3D_SIG_S | T1_3D_SIG_SE |
+                                                      T1_3D_SIG_SW | (T1_3D_SGN_S << 16)))) & (T1_3D_SIG_OTH)))
+                              );
+                    } else {
+                        agg = !(
+                                  ((t1->flagSVR[1 + m][1 + k][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) |
+                                   (t1->flags[1 + m][1 + k][1 + i] & T1_3D_SIG_OTH))
+                                  || ((t1->flagSVR[1 + m][1 + k + 1][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) |
+                                      (t1->flags[1 + m][1 + k + 1][1 + i] & T1_3D_SIG_OTH))
+                                  || ((t1->flagSVR[1 + m][1 + k + 2][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) |
+                                      (t1->flags[1 + m][1 + k + 2][1 + i] & T1_3D_SIG_OTH))
+                                  || ((t1->flagSVR[1 + m][1 + k + 3][1 + i] & (T1_3D_SIG | T1_3D_VISIT)) |
+                                      (t1->flags[1 + m][1 + k + 3][1 + i] & T1_3D_SIG_OTH))
+                              );
+                    }
+                } else {
+                    agg = 0;
+                }
+                if (agg) {
+                    mqc_setcurctx(mqc, T1_CTXNO_AGG);
+                    if (!mqc_decode(mqc)) {
+                        continue;
+                    }
+                    mqc_setcurctx(mqc, T1_CTXNO_UNI);
+                    runlen = mqc_decode(mqc);
+                    runlen = (runlen << 1) | mqc_decode(mqc);
+                } else {
+                    runlen = 0;
+                }
+                for (j = k + runlen; j < k + 4 && j < h; j++) {
+                    vsc = ((cblksty & J3D_CCP_CBLKSTY_VSC) && (j == k + 3 || j == h - 1)) ? 1 : 0;
+                    t1_3d_dec_clnpass_step(t1, &t1->flags[1 + m][1 + j][1 + i],
+                                           &t1->flagSVR[1 + m][1 + j][1 + i], &t1->data[m][j][i], orient, oneplushalf,
+                                           agg && (j == k + runlen), vsc);
+                }
+            }
+        }
+    }
+    if (segsym) {
+        int v = 0;
+        mqc_setcurctx(mqc, T1_CTXNO_UNI);
+        v = mqc_decode(mqc);
+        v = (v << 1) | mqc_decode(mqc);
+        v = (v << 1) | mqc_decode(mqc);
+        v = (v << 1) | mqc_decode(mqc);
+        /*
+        if (v!=0xa) {
+            opj_event_msg(t1->cinfo, EVT_WARNING, "Bad segmentation symbol %x\n", v);
+        }
+        */
+    }
+}               /* VSC and  BYPASS by Antonin */
+
+
+static void t1_3d_encode_cblk(opj_t1_3d_t *t1, opj_tcd_cblk_t * cblk,
+                              int orient, int compno, int level[3], int dwtid[3], double stepsize,
+                              int cblksty, int numcomps, opj_tcd_tile_t * tile)
+{
+    int i, j, k;
+    int w, h, l;
+    int passno;
+    int bpno, passtype;
+    int max;
+    int nmsedec = 0;
+    double cumwmsedec = 0;
+    char type = T1_TYPE_MQ;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    w = cblk->x1 - cblk->x0;
+    h = cblk->y1 - cblk->y0;
+    l = cblk->z1 - cblk->z0;
+
+    max = 0;
+    for (k = 0; k < l; k++) {
+        for (j = 0; j < h; j++) {
+            for (i = 0; i < w; i++) {
+                max = int_max(max, int_abs(t1->data[k][j][i]));
+            }
+        }
+    }
+    for (k = 0; k <= l; k++) {
+        for (j = 0; j <= h; j++) {
+            for (i = 0; i <= w; i++) {
+                t1->flags[k][j][i] = 0;
+                t1->flagSVR[k][j][i] = 0;
+            }
+        }
+    }
+
+    cblk->numbps = max ? (int_floorlog2(max) + 1) - T1_NMSEDEC_FRACBITS : 0;
+
+    bpno = cblk->numbps - 1;
+    passtype = 2;
+
+    mqc_reset_enc(mqc);
+    mqc_init_enc(mqc, cblk->data);
+
+    for (passno = 0; bpno >= 0; passno++) {
+        opj_tcd_pass_t *pass = &cblk->passes[passno];
+        int correction = 3;
+        double tmpwmsedec;
+        type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) &&
+                (cblksty & J3D_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
+
+        switch (passtype) {
+        case 0:
+            t1_3d_enc_sigpass(t1, w, h, l, bpno, orient, &nmsedec, type, cblksty);
+            break;
+        case 1:
+            t1_3d_enc_refpass(t1, w, h, l, bpno, &nmsedec, type, cblksty);
+            break;
+        case 2:
+            t1_3d_enc_clnpass(t1, w, h, l, bpno, orient, &nmsedec, cblksty);
+            /* code switch SEGMARK (i.e. SEGSYM) */
+            if (cblksty & J3D_CCP_CBLKSTY_SEGSYM) {
+                mqc_segmark_enc(mqc);
+            }
+            break;
+        }
+
+        /* fixed_quality */
+        tmpwmsedec = t1_getwmsedec(nmsedec, compno, level, orient, bpno, stepsize,
+                                   numcomps, dwtid);
+        cumwmsedec += tmpwmsedec;
+        tile->distotile += tmpwmsedec;
+
+        /* Code switch "RESTART" (i.e. TERMALL) */
+        if ((cblksty & J3D_CCP_CBLKSTY_TERMALL) && !((passtype == 2) &&
+                (bpno - 1 < 0))) {
+            if (type == T1_TYPE_RAW) {
+                mqc_flush(mqc);
+                correction = 1;
+                /* correction = mqc_bypass_flush_enc(); */
+            } else {            /* correction = mqc_restart_enc(); */
+                mqc_flush(mqc);
+                correction = 1;
+            }
+            pass->term = 1;
+        } else {
+            if (((bpno < (cblk->numbps - 4) && (passtype > 0))
+                    || ((bpno == (cblk->numbps - 4)) && (passtype == 2))) &&
+                    (cblksty & J3D_CCP_CBLKSTY_LAZY)) {
+                if (type == T1_TYPE_RAW) {
+                    mqc_flush(mqc);
+                    correction = 1;
+                } else {
+                    mqc_flush(mqc);
+                    correction = 1;
+                }
+                pass->term = 1;
+            } else {
+                pass->term = 0;
+            }
+        }
+
+        if (++passtype == 3) {
+            passtype = 0;
+            bpno--;
+        }
+
+        if (pass->term && bpno > 0) {
+            type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) &&
+                    (cblksty & J3D_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
+            if (type == T1_TYPE_RAW) {
+                mqc_bypass_init_enc(mqc);
+            } else {
+                mqc_restart_init_enc(mqc);
+            }
+        }
+
+        pass->distortiondec = cumwmsedec;
+        pass->rate = mqc_numbytes(mqc) + correction;    /* FIXME */
+        pass->len = pass->rate - (passno == 0 ? 0 : cblk->passes[passno - 1].rate);
+
+        /* Code-switch "RESET" */
+        if (cblksty & J3D_CCP_CBLKSTY_RESET) {
+            mqc_reset_enc(mqc);
+        }
+    }
+
+    /* Code switch "ERTERM" (i.e. PTERM) */
+    if (cblksty & J3D_CCP_CBLKSTY_PTERM) {
+        mqc_erterm_enc(mqc);
+    } else /* Default coding */ if (!(cblksty & J3D_CCP_CBLKSTY_LAZY)) {
+        mqc_flush(mqc);
+    }
+
+    cblk->totalpasses = passno;
 }
 
-static void t1_3d_decode_cblk(opj_t1_3d_t *t1, opj_tcd_cblk_t * cblk, int orient, int roishift, int cblksty) {
-       int i, j, k;
-       int w, h, l;
-       int bpno, passtype;
-       int segno, passno;
-       char type = T1_TYPE_MQ; /* BYPASS mode */
-       opj_raw_t *raw = t1->raw;       /* RAW component */
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       w = cblk->x1 - cblk->x0;
-       h = cblk->y1 - cblk->y0;
-       l = cblk->z1 - cblk->z0;
+static void t1_3d_decode_cblk(opj_t1_3d_t *t1, opj_tcd_cblk_t * cblk,
+                              int orient, int roishift, int cblksty)
+{
+    int i, j, k;
+    int w, h, l;
+    int bpno, passtype;
+    int segno, passno;
+    char type = T1_TYPE_MQ; /* BYPASS mode */
+    opj_raw_t *raw = t1->raw;   /* RAW component */
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    w = cblk->x1 - cblk->x0;
+    h = cblk->y1 - cblk->y0;
+    l = cblk->z1 - cblk->z0;
 
     for (k = 0; k < l; k++) {
-               for (j = 0; j < h; j++) {
-                       for (i = 0; i < w; i++) {
-                               t1->data[k][j][i] = 0;
-                       }
-               }
-       }
-       
-       for (k = 0; k <= l; k++) {
-               for (j = 0; j <= h; j++) {
-                       for (i = 0; i <= w; i++) {
-                               t1->flags[k][j][i] = 0;
-                               t1->flagSVR[k][j][i] = 0;
-                       }
-               }
-       }
-
-       
-       bpno = roishift + cblk->numbps - 1;
-       passtype = 2;
-       
-       mqc_reset_enc(mqc);
-       
-       for (segno = 0; segno < cblk->numsegs; segno++) {
-               opj_tcd_seg_t *seg = &cblk->segs[segno];
-               
-               /* BYPASS mode */
-               type = ((bpno <= (cblk->numbps - 1) - 4) && (passtype < 2) && (cblksty & J3D_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
-               if (type == T1_TYPE_RAW) {
-                       raw_init_dec(raw, seg->data, seg->len);
-               } else {
-                       mqc_init_dec(mqc, seg->data, seg->len);
-               }
-               
-               for (passno = 0; passno < seg->numpasses; passno++) {
-                       switch (passtype) {
-                               case 0:
-                                       t1_3d_dec_sigpass(t1, w, h, l, bpno+1, orient, type, cblksty);
-                                       break;
-                               case 1:
-                                       t1_3d_dec_refpass(t1, w, h, l, bpno+1, type, cblksty);
-                                       break;
-                               case 2:
-                                       t1_3d_dec_clnpass(t1, w, h, l, bpno+1, orient, cblksty);
-                                       break;
-                       }
-                       
-                       if ((cblksty & J3D_CCP_CBLKSTY_RESET) && type == T1_TYPE_MQ) {
-                               mqc_reset_enc(mqc);
-                       }
-                       if (++passtype == 3) {
-                               passtype = 0;
-                               bpno--;
-                       }
-
-               }
-       }
+        for (j = 0; j < h; j++) {
+            for (i = 0; i < w; i++) {
+                t1->data[k][j][i] = 0;
+            }
+        }
+    }
+
+    for (k = 0; k <= l; k++) {
+        for (j = 0; j <= h; j++) {
+            for (i = 0; i <= w; i++) {
+                t1->flags[k][j][i] = 0;
+                t1->flagSVR[k][j][i] = 0;
+            }
+        }
+    }
+
+
+    bpno = roishift + cblk->numbps - 1;
+    passtype = 2;
+
+    mqc_reset_enc(mqc);
+
+    for (segno = 0; segno < cblk->numsegs; segno++) {
+        opj_tcd_seg_t *seg = &cblk->segs[segno];
+
+        /* BYPASS mode */
+        type = ((bpno <= (cblk->numbps - 1) - 4) && (passtype < 2) &&
+                (cblksty & J3D_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
+        if (type == T1_TYPE_RAW) {
+            raw_init_dec(raw, seg->data, seg->len);
+        } else {
+            mqc_init_dec(mqc, seg->data, seg->len);
+        }
+
+        for (passno = 0; passno < seg->numpasses; passno++) {
+            switch (passtype) {
+            case 0:
+                t1_3d_dec_sigpass(t1, w, h, l, bpno + 1, orient, type, cblksty);
+                break;
+            case 1:
+                t1_3d_dec_refpass(t1, w, h, l, bpno + 1, type, cblksty);
+                break;
+            case 2:
+                t1_3d_dec_clnpass(t1, w, h, l, bpno + 1, orient, cblksty);
+                break;
+            }
+
+            if ((cblksty & J3D_CCP_CBLKSTY_RESET) && type == T1_TYPE_MQ) {
+                mqc_reset_enc(mqc);
+            }
+            if (++passtype == 3) {
+                passtype = 0;
+                bpno--;
+            }
+
+        }
+    }
 }
 
-static int t1_3d_init_ctxno_zc(unsigned int f, int orient) {
-       unsigned int h, v, c;
-       unsigned int d2xy, d2xz, d2yz, d3;
-       int n;
-       unsigned int hvc, hc, d2, d2xy2yz, d2xy2xz;
-       n = 0;
-       h = ((f & T1_3D_SIG_W) != 0) + ((f & T1_3D_SIG_E) != 0);
-       v = ((f & T1_3D_SIG_N) != 0) + ((f & T1_3D_SIG_S) != 0);
-       c = ((f & T1_3D_SIG_FC) != 0) + ((f & T1_3D_SIG_BC) != 0);
-       d2xy = ((f & T1_3D_SIG_NW) != 0) + ((f & T1_3D_SIG_NE) != 0) + ((f & T1_3D_SIG_SE) != 0) + ((f & T1_3D_SIG_SW) != 0);
-       d2xz = ((f & T1_3D_SIG_FW) != 0) + ((f & T1_3D_SIG_BW) != 0) + ((f & T1_3D_SIG_FE) != 0) + ((f & T1_3D_SIG_BE) != 0);
-       d2yz = ((f & T1_3D_SIG_FN) != 0) + ((f & T1_3D_SIG_FS) != 0) + ((f & T1_3D_SIG_BN) != 0) + ((f & T1_3D_SIG_BS) != 0);
-    d3 = ((f & T1_3D_SIG_FNW) != 0) + ((f & T1_3D_SIG_FNE) != 0) + ((f & T1_3D_SIG_FSE) != 0) + ((f & T1_3D_SIG_FSW) != 0) 
-               + ((f & T1_3D_SIG_BNW) != 0) + ((f & T1_3D_SIG_BNE) != 0) + ((f & T1_3D_SIG_BSE) != 0) + ((f & T1_3D_SIG_BSW) != 0);
-       
-       switch (orient) {
-               case 0: /*LLL*/
-               case 7: /*HHH*/
-                       hvc = h + v + c;
-                       d2 = d2xy + d2xz + d2yz;
-                       if (!hvc) {
-                               if (!d2) {
+static int t1_3d_init_ctxno_zc(unsigned int f, int orient)
+{
+    unsigned int h, v, c;
+    unsigned int d2xy, d2xz, d2yz, d3;
+    int n;
+    unsigned int hvc, hc, d2, d2xy2yz, d2xy2xz;
+    n = 0;
+    h = ((f & T1_3D_SIG_W) != 0) + ((f & T1_3D_SIG_E) != 0);
+    v = ((f & T1_3D_SIG_N) != 0) + ((f & T1_3D_SIG_S) != 0);
+    c = ((f & T1_3D_SIG_FC) != 0) + ((f & T1_3D_SIG_BC) != 0);
+    d2xy = ((f & T1_3D_SIG_NW) != 0) + ((f & T1_3D_SIG_NE) != 0) + ((
+                f & T1_3D_SIG_SE) != 0) + ((f & T1_3D_SIG_SW) != 0);
+    d2xz = ((f & T1_3D_SIG_FW) != 0) + ((f & T1_3D_SIG_BW) != 0) + ((
+                f & T1_3D_SIG_FE) != 0) + ((f & T1_3D_SIG_BE) != 0);
+    d2yz = ((f & T1_3D_SIG_FN) != 0) + ((f & T1_3D_SIG_FS) != 0) + ((
+                f & T1_3D_SIG_BN) != 0) + ((f & T1_3D_SIG_BS) != 0);
+    d3 = ((f & T1_3D_SIG_FNW) != 0) + ((f & T1_3D_SIG_FNE) != 0) + ((
+                f & T1_3D_SIG_FSE) != 0) + ((f & T1_3D_SIG_FSW) != 0)
+         + ((f & T1_3D_SIG_BNW) != 0) + ((f & T1_3D_SIG_BNE) != 0) + ((
+                     f & T1_3D_SIG_BSE) != 0) + ((f & T1_3D_SIG_BSW) != 0);
+
+    switch (orient) {
+    case 0: /*LLL*/
+    case 7: /*HHH*/
+        hvc = h + v + c;
+        d2 = d2xy + d2xz + d2yz;
+        if (!hvc) {
+            if (!d2) {
+                n = (!d3) ? 0 : 1;
+            } else if (d2 == 1) {
+                n = (!d3) ? 2 : 3;
+            } else {
+                n = (!d3) ? 4 : 5;
+            }
+        } else if (hvc == 1) {
+            if (!d2) {
+                n = (!d3) ? 6 : 7;
+            } else if (d2 == 1) {
+                n = (!d3) ? 8 : 9;
+            } else {
+                n = 10;
+            }
+        } else if (hvc == 2) {
+            if (!d2) {
+                n = (!d3) ? 11 : 12;
+            } else {
+                n = 13;
+            }
+        } else if (hvc == 3) {
+            n = 14;
+        } else {
+            n = 15;
+        }
+        break;
+    /*LHL, HLL, LLH*/
+    case 1:
+    case 2:
+    case 4:
+        hc = h + c;
+        d2xy2yz = d2xy + d2yz;
+        if (!hc) {
+            if (!v) {
+                if (!d2xy) {
+                    n = (!d2xy2yz) ? ((!d3) ? 0 : 1) : ((!d3) ? 2 : 3);
+                } else if (d2xy == 1) {
+                    n = (!d2xy2yz) ? ((!d3) ? 4 : 5) : 6;
+                } else { /*>=2*/
+                    n = 7;
+                }
+            } else {
+                n = (v == 1) ? 8 : 9; /* =1 or =2*/
+            }
+        } else if (hc == 1) {
+            n = (!v) ? ((!d2xy) ? ((!d2xy2yz) ? ((!d3) ? 10 : 11) : (12)) : (13)) : (14);
+        } else { /*if (hc >= 2)*/
+            n = 15;
+        }
+        break;
+    /*HLH, HHL, LHH*/
+    case 3:
+    case 5:
+    case 6:
+        hc = h + c;
+        d2xy2xz = d2xy + d2xz;
+        if (!v) {
+            if (!d2xz) {
+                if (!hc && !d2xy2xz) {
                     n = (!d3) ? 0 : 1;
-                               } else if (d2 == 1) {
-                                       n = (!d3) ? 2 : 3;
-                               } else {
-                                       n = (!d3) ? 4 : 5;
-                               }
-                       } else if (hvc == 1) {
-                               if (!d2) {
-                    n = (!d3) ? 6 : 7;
-                               } else if (d2 == 1) {
-                                       n = (!d3) ? 8 : 9;
-                               } else {
-                                       n = 10;
-                               }
-                       } else if (hvc == 2) {
-                               if (!d2) {
-                    n = (!d3) ? 11 : 12;
-                               } else {
-                                       n = 13;
-                               }
-                       } else if (hvc == 3) {
-                               n = 14;
-                       } else {
-                               n = 15;
-                       }
-                       break;
-               /*LHL, HLL, LLH*/
-               case 1:
-               case 2:
-               case 4:
-                       hc = h + c;
-                       d2xy2yz = d2xy + d2yz;
-            if (!hc) {
-                               if (!v) {
-                                       if (!d2xy) {
-                                               n = (!d2xy2yz) ? ((!d3) ? 0 : 1) : ((!d3) ? 2 : 3);     
-                                       } else if (d2xy == 1) {
-                                               n = (!d2xy2yz) ? ((!d3) ? 4 : 5) : 6;   
-                                       } else { /*>=2*/
-                        n = 7;
-                                       }
-                               } else {
-                                       n = (v == 1) ? 8 : 9; /* =1 or =2*/
-                               } 
-                       } else if (hc == 1) {
-                               n = (!v) ? ( (!d2xy) ? ( (!d2xy2yz) ? ( (!d3) ? 10 : 11) : (12) ) : (13) ) : (14);
-                       } else { /*if (hc >= 2)*/
-                               n = 15;
-                       }
-                       break;
-               /*HLH, HHL, LHH*/
-               case 3:
-               case 5:
-               case 6:
-                       hc = h + c;
-                       d2xy2xz = d2xy + d2xz;
-                       if (!v) {
-                               if (!d2xz) {
-                                       if (!hc && !d2xy2xz) {
-                                               n = (!d3) ? 0 : 1;
-                                       } else if (hc == 1) {
-                                               n = (!d2xy2xz) ?  2 : 3;
-                                       } else { /*if >= 2*/
-                                               n = 4;
-                                       }
-                               } else if ( d2xz>=1 && !hc ) {
-                                       n = 5;
-                               } else if ( hc>=1 ) {
-                                       n = (d2xz==1) ? 6 : 7;
-                               } 
-                       } else if (v == 1) {
-                               if (!d2xz) {
-                                       n = (!hc) ? 8 : 9;
-                               } else if (d2xz == 1) {
-                                       n = (!hc) ? 10 : 11;
-                               } else if (d2xz == 2) {
-                                       n = (!hc) ? 12 : 13;
-                               } else { /* if (d2xz >= 3) {*/
-                                       n = 14;
-                               }
-                       } else if (v == 2) {
-                               n = 15;
-                       } 
-                       break;
-       }
-       
-       return (T1_3D_CTXNO_ZC + n);
+                } else if (hc == 1) {
+                    n = (!d2xy2xz) ?  2 : 3;
+                } else { /*if >= 2*/
+                    n = 4;
+                }
+            } else if (d2xz >= 1 && !hc) {
+                n = 5;
+            } else if (hc >= 1) {
+                n = (d2xz == 1) ? 6 : 7;
+            }
+        } else if (v == 1) {
+            if (!d2xz) {
+                n = (!hc) ? 8 : 9;
+            } else if (d2xz == 1) {
+                n = (!hc) ? 10 : 11;
+            } else if (d2xz == 2) {
+                n = (!hc) ? 12 : 13;
+            } else { /* if (d2xz >= 3) {*/
+                n = 14;
+            }
+        } else if (v == 2) {
+            n = 15;
+        }
+        break;
+    }
+
+    return (T1_3D_CTXNO_ZC + n);
 }
 
-static int t1_3d_init_ctxno_sc(unsigned int f) {
-       int hc, vc, cc;
-       int n = 0;
-
-       hc = int_min( ( (f & (T1_3D_SIG_E | T1_3D_SGN_E)) == T1_3D_SIG_E ) 
-                                       + ( (f & (T1_3D_SIG_W | T1_3D_SGN_W)) == T1_3D_SIG_W ) , 1) 
-               - int_min( ( (f & (T1_3D_SIG_E | T1_3D_SGN_E)) == (T1_3D_SIG_E | T1_3D_SGN_E) ) 
-                                       + ( (f & (T1_3D_SIG_W | T1_3D_SGN_W) ) == (T1_3D_SIG_W | T1_3D_SGN_W)), 1);
-       
-       vc = int_min(((f & (T1_3D_SIG_N | T1_3D_SGN_N)) == T1_3D_SIG_N) 
-                                       + ((f & (T1_3D_SIG_S | T1_3D_SGN_S)) == T1_3D_SIG_S), 1) 
-               - int_min(((f & (T1_3D_SIG_N | T1_3D_SGN_N)) == (T1_3D_SIG_N | T1_3D_SGN_N)) 
-                                       + ((f & (T1_3D_SIG_S | T1_3D_SGN_S)) == (T1_3D_SIG_S | T1_3D_SGN_S)), 1);
-       
-       cc = int_min(((f & (T1_3D_SIG_FC | T1_3D_SGN_F)) == T1_3D_SIG_FC) 
-                                       + ((f & (T1_3D_SIG_BC | T1_3D_SGN_B)) == T1_3D_SIG_BC), 1) 
-               - int_min(((f & (T1_3D_SIG_FC | T1_3D_SGN_F)) == (T1_3D_SIG_FC | T1_3D_SGN_F)) 
-                                       + ((f & (T1_3D_SIG_BC | T1_3D_SGN_B)) == (T1_3D_SIG_BC | T1_3D_SGN_B)), 1);
-       if (hc < 0) {
-               hc = -hc;
-               vc = -vc;
-               cc = -cc;
-       }
-
-       if (!hc) {
-               if (!vc) 
-                       n = (!cc) ? 0 : 1;
-               else if (vc == -1)
-                       n = (!cc) ? 1 : ( (cc>0) ? 2 : 4);
-               else if (vc == 1)
-                       n = (!cc) ? 1 : ( (cc<0) ? 2 : 4);
-       } else if (hc == 1) {
-               if (!vc)
-                       n = (!cc) ? 1 : ( (cc<0) ? 2 : 4);
-               else if (vc == 1)
-                       n = (!cc) ? 4 : ( (cc>0) ? 5 : 3);
-               else if (vc == -1)
-                       n = (!cc) ? 2 : 3;
-       } else if (hc == -1) {
-               if (!vc)
-                       n = (!cc) ? 1 : ( (cc>0) ? 2 : 4);
-               else if (vc == 1)
-                       n = (!cc) ? 2 : 3;
-               else if (vc == -1)
-                       n = (!cc) ? 4 : ( (cc<0) ? 5 : 3);
-       }
-       
-       return (T1_3D_CTXNO_SC + n);
+static int t1_3d_init_ctxno_sc(unsigned int f)
+{
+    int hc, vc, cc;
+    int n = 0;
+
+    hc = int_min(((f & (T1_3D_SIG_E | T1_3D_SGN_E)) == T1_3D_SIG_E)
+                 + ((f & (T1_3D_SIG_W | T1_3D_SGN_W)) == T1_3D_SIG_W), 1)
+         - int_min(((f & (T1_3D_SIG_E | T1_3D_SGN_E)) == (T1_3D_SIG_E | T1_3D_SGN_E))
+                   + ((f & (T1_3D_SIG_W | T1_3D_SGN_W)) == (T1_3D_SIG_W | T1_3D_SGN_W)), 1);
+
+    vc = int_min(((f & (T1_3D_SIG_N | T1_3D_SGN_N)) == T1_3D_SIG_N)
+                 + ((f & (T1_3D_SIG_S | T1_3D_SGN_S)) == T1_3D_SIG_S), 1)
+         - int_min(((f & (T1_3D_SIG_N | T1_3D_SGN_N)) == (T1_3D_SIG_N | T1_3D_SGN_N))
+                   + ((f & (T1_3D_SIG_S | T1_3D_SGN_S)) == (T1_3D_SIG_S | T1_3D_SGN_S)), 1);
+
+    cc = int_min(((f & (T1_3D_SIG_FC | T1_3D_SGN_F)) == T1_3D_SIG_FC)
+                 + ((f & (T1_3D_SIG_BC | T1_3D_SGN_B)) == T1_3D_SIG_BC), 1)
+         - int_min(((f & (T1_3D_SIG_FC | T1_3D_SGN_F)) == (T1_3D_SIG_FC | T1_3D_SGN_F))
+                   + ((f & (T1_3D_SIG_BC | T1_3D_SGN_B)) == (T1_3D_SIG_BC | T1_3D_SGN_B)), 1);
+    if (hc < 0) {
+        hc = -hc;
+        vc = -vc;
+        cc = -cc;
+    }
+
+    if (!hc) {
+        if (!vc) {
+            n = (!cc) ? 0 : 1;
+        } else if (vc == -1) {
+            n = (!cc) ? 1 : ((cc > 0) ? 2 : 4);
+        } else if (vc == 1) {
+            n = (!cc) ? 1 : ((cc < 0) ? 2 : 4);
+        }
+    } else if (hc == 1) {
+        if (!vc) {
+            n = (!cc) ? 1 : ((cc < 0) ? 2 : 4);
+        } else if (vc == 1) {
+            n = (!cc) ? 4 : ((cc > 0) ? 5 : 3);
+        } else if (vc == -1) {
+            n = (!cc) ? 2 : 3;
+        }
+    } else if (hc == -1) {
+        if (!vc) {
+            n = (!cc) ? 1 : ((cc > 0) ? 2 : 4);
+        } else if (vc == 1) {
+            n = (!cc) ? 2 : 3;
+        } else if (vc == -1) {
+            n = (!cc) ? 4 : ((cc < 0) ? 5 : 3);
+        }
+    }
+
+    return (T1_3D_CTXNO_SC + n);
 }
 
-static int t1_3d_init_ctxno_mag(unsigned int f, int f2) {
-       int n;
-       if (!(f2 & T1_3D_REFINE))       /*First refinement for this coefficient (no previous refinement)*/
-               n = (f & (T1_3D_SIG_PRIM)) ? 1 : 0;
-       else
-               n = 2;
-       
-       return (T1_3D_CTXNO_MAG + n);
+static int t1_3d_init_ctxno_mag(unsigned int f, int f2)
+{
+    int n;
+    if (!(f2 &
+            T1_3D_REFINE)) { /*First refinement for this coefficient (no previous refinement)*/
+        n = (f & (T1_3D_SIG_PRIM)) ? 1 : 0;
+    } else {
+        n = 2;
+    }
+
+    return (T1_3D_CTXNO_MAG + n);
 }
 
-static int t1_3d_init_spb(unsigned int f) {
-       int hc, vc, cc;
-       int n = 0;
-       
-       hc = int_min( ( (f & (T1_3D_SIG_E | T1_3D_SGN_E)) == T1_3D_SIG_E ) 
-                                       + ( (f & (T1_3D_SIG_W | T1_3D_SGN_W)) == T1_3D_SIG_W ) , 1) 
-               - int_min( ( (f & (T1_3D_SIG_E | T1_3D_SGN_E)) == (T1_3D_SIG_E | T1_3D_SGN_E) ) 
-                                       + ( (f & (T1_3D_SIG_W | T1_3D_SGN_W) ) == (T1_3D_SIG_W | T1_3D_SGN_W)), 1);
-       
-       vc = int_min(((f & (T1_3D_SIG_N | T1_3D_SGN_N)) == T1_3D_SIG_N) 
-                                       + ((f & (T1_3D_SIG_S | T1_3D_SGN_S)) == T1_3D_SIG_S), 1) 
-               - int_min(((f & (T1_3D_SIG_N | T1_3D_SGN_N)) == (T1_3D_SIG_N | T1_3D_SGN_N)) 
-                                       + ((f & (T1_3D_SIG_S | T1_3D_SGN_S)) == (T1_3D_SIG_S | T1_3D_SGN_S)), 1);
-       
-       cc = int_min(((f & (T1_3D_SIG_FC | T1_3D_SGN_F)) == T1_3D_SIG_FC) 
-                                       + ((f & (T1_3D_SIG_BC | T1_3D_SGN_B)) == T1_3D_SIG_BC), 1) 
-               - int_min(((f & (T1_3D_SIG_FC | T1_3D_SGN_F)) == (T1_3D_SIG_FC | T1_3D_SGN_F)) 
-                                       + ((f & (T1_3D_SIG_BC | T1_3D_SGN_B)) == (T1_3D_SIG_BC | T1_3D_SGN_B)), 1);
-       
-       n = ((hc + vc + cc) < 0); 
-       
-       return n;
+static int t1_3d_init_spb(unsigned int f)
+{
+    int hc, vc, cc;
+    int n = 0;
+
+    hc = int_min(((f & (T1_3D_SIG_E | T1_3D_SGN_E)) == T1_3D_SIG_E)
+                 + ((f & (T1_3D_SIG_W | T1_3D_SGN_W)) == T1_3D_SIG_W), 1)
+         - int_min(((f & (T1_3D_SIG_E | T1_3D_SGN_E)) == (T1_3D_SIG_E | T1_3D_SGN_E))
+                   + ((f & (T1_3D_SIG_W | T1_3D_SGN_W)) == (T1_3D_SIG_W | T1_3D_SGN_W)), 1);
+
+    vc = int_min(((f & (T1_3D_SIG_N | T1_3D_SGN_N)) == T1_3D_SIG_N)
+                 + ((f & (T1_3D_SIG_S | T1_3D_SGN_S)) == T1_3D_SIG_S), 1)
+         - int_min(((f & (T1_3D_SIG_N | T1_3D_SGN_N)) == (T1_3D_SIG_N | T1_3D_SGN_N))
+                   + ((f & (T1_3D_SIG_S | T1_3D_SGN_S)) == (T1_3D_SIG_S | T1_3D_SGN_S)), 1);
+
+    cc = int_min(((f & (T1_3D_SIG_FC | T1_3D_SGN_F)) == T1_3D_SIG_FC)
+                 + ((f & (T1_3D_SIG_BC | T1_3D_SGN_B)) == T1_3D_SIG_BC), 1)
+         - int_min(((f & (T1_3D_SIG_FC | T1_3D_SGN_F)) == (T1_3D_SIG_FC | T1_3D_SGN_F))
+                   + ((f & (T1_3D_SIG_BC | T1_3D_SGN_B)) == (T1_3D_SIG_BC | T1_3D_SGN_B)), 1);
+
+    n = ((hc + vc + cc) < 0);
+
+    return n;
 }
 
-static void t1_3d_init_luts(opj_t1_3d_t *t1) {
-       int i;
-       double u, v, t;
-       /*for (j = 0; j < 4; j++) {
-               for (i = 0; i < 256; ++i) {
-                       t1->lut_ctxno_zc[(j << 8) | i] = t1_3d_init_ctxno_zc(i, j);
-               }
-       }
-       for (i = 0; i < 4096; i++) {
-               t1->lut_ctxno_sc[i] = t1_3d_init_ctxno_sc(i << 4);
-       }
-       for (j = 0; j < 2; j++) {
-               for (i = 0; i < 2048; ++i) {
-                       t1->lut_ctxno_mag[(j << 11) + i] = t1_3d_init_ctxno_mag((j ? T1_3D_REFINE : 0) | i);
-               }
-       }
-       for (i = 0; i < 4096; ++i) {
-               t1->lut_spb[i] = t1_3d_init_spb(i << 4);
-       }*/
-       /* FIXME FIXME FIXME */
-       for (i = 0; i < (1 << T1_NMSEDEC_BITS); i++) {
-               t = i / pow(2, T1_NMSEDEC_FRACBITS);
-               u = t;
-               v = t - 1.5;
-               t1->lut_nmsedec_sig[i] = 
-                       int_max(0, 
-                       (int) (floor((u * u - v * v) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0));
-               t1->lut_nmsedec_sig0[i] =
-                       int_max(0,
-                       (int) (floor((u * u) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0));
-               u = t - 1.0;
-               if (i & (1 << (T1_NMSEDEC_BITS - 1))) {
-                       v = t - 1.5;
-               } else {
-                       v = t - 0.5;
-               }
-               t1->lut_nmsedec_ref[i] =
-                       int_max(0,
-                       (int) (floor((u * u - v * v) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0));
-               t1->lut_nmsedec_ref0[i] =
-                       int_max(0,
-                       (int) (floor((u * u) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2, T1_NMSEDEC_FRACBITS) * 8192.0));
-       }
+static void t1_3d_init_luts(opj_t1_3d_t *t1)
+{
+    int i;
+    double u, v, t;
+    /*for (j = 0; j < 4; j++) {
+        for (i = 0; i < 256; ++i) {
+            t1->lut_ctxno_zc[(j << 8) | i] = t1_3d_init_ctxno_zc(i, j);
+        }
+    }
+    for (i = 0; i < 4096; i++) {
+        t1->lut_ctxno_sc[i] = t1_3d_init_ctxno_sc(i << 4);
+    }
+    for (j = 0; j < 2; j++) {
+        for (i = 0; i < 2048; ++i) {
+            t1->lut_ctxno_mag[(j << 11) + i] = t1_3d_init_ctxno_mag((j ? T1_3D_REFINE : 0) | i);
+        }
+    }
+    for (i = 0; i < 4096; ++i) {
+        t1->lut_spb[i] = t1_3d_init_spb(i << 4);
+    }*/
+    /* FIXME FIXME FIXME */
+    for (i = 0; i < (1 << T1_NMSEDEC_BITS); i++) {
+        t = i / pow(2, T1_NMSEDEC_FRACBITS);
+        u = t;
+        v = t - 1.5;
+        t1->lut_nmsedec_sig[i] =
+            int_max(0,
+                    (int)(floor((u * u - v * v) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2,
+                            T1_NMSEDEC_FRACBITS) * 8192.0));
+        t1->lut_nmsedec_sig0[i] =
+            int_max(0,
+                    (int)(floor((u * u) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2,
+                            T1_NMSEDEC_FRACBITS) * 8192.0));
+        u = t - 1.0;
+        if (i & (1 << (T1_NMSEDEC_BITS - 1))) {
+            v = t - 1.5;
+        } else {
+            v = t - 0.5;
+        }
+        t1->lut_nmsedec_ref[i] =
+            int_max(0,
+                    (int)(floor((u * u - v * v) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2,
+                            T1_NMSEDEC_FRACBITS) * 8192.0));
+        t1->lut_nmsedec_ref0[i] =
+            int_max(0,
+                    (int)(floor((u * u) * pow(2, T1_NMSEDEC_FRACBITS) + 0.5) / pow(2,
+                            T1_NMSEDEC_FRACBITS) * 8192.0));
+    }
 }
 
 /* ----------------------------------------------------------------------- */
 
-opj_t1_3d_t* t1_3d_create(opj_common_ptr cinfo) {
-       opj_t1_3d_t *t1 = (opj_t1_3d_t*)opj_malloc(sizeof(opj_t1_3d_t));
-       if(t1) {
-               t1->cinfo = cinfo;
-               /* create MQC and RAW handles */
-               t1->mqc = mqc_create();
-               t1->raw = raw_create();
-               /* initialize the look-up tables of the Tier-1 coder/decoder */
-               t1_3d_init_luts(t1);
-       }
-       return t1;
+opj_t1_3d_t* t1_3d_create(opj_common_ptr cinfo)
+{
+    opj_t1_3d_t *t1 = (opj_t1_3d_t*)opj_malloc(sizeof(opj_t1_3d_t));
+    if (t1) {
+        t1->cinfo = cinfo;
+        /* create MQC and RAW handles */
+        t1->mqc = mqc_create();
+        t1->raw = raw_create();
+        /* initialize the look-up tables of the Tier-1 coder/decoder */
+        t1_3d_init_luts(t1);
+    }
+    return t1;
 }
 
-void t1_3d_destroy(opj_t1_3d_t *t1) {
-       if(t1) {
-               /* destroy MQC and RAW handles */
-               mqc_destroy(t1->mqc);
-               raw_destroy(t1->raw);
-               opj_free(t1);
-       }
+void t1_3d_destroy(opj_t1_3d_t *t1)
+{
+    if (t1) {
+        /* destroy MQC and RAW handles */
+        mqc_destroy(t1->mqc);
+        raw_destroy(t1->raw);
+        opj_free(t1);
+    }
 }
 
-void t1_3d_encode_cblks(opj_t1_3d_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp) {
-       int compno, resno, bandno, precno, cblkno;
-       int x, y, z, i, j, k, orient;
-       int level[3];
-       tile->distotile = 0;            /* fixed_quality */
-
-       for (compno = 0; compno < tile->numcomps; compno++) {
-               opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-
-               for (resno = 0; resno < tilec->numresolution[0]; resno++) {
-                       opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-
-                       for (bandno = 0; bandno < res->numbands; bandno++) {
-                               opj_tcd_band_t *band = &res->bands[bandno];
-
-                               for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2]; precno++) {
-                                       opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-                                       for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) {
-                                               opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-
-                                               if (band->bandno == 0) {
-                                                       x = cblk->x0 - band->x0;
-                                                       y = cblk->y0 - band->y0;
-                                                       z = cblk->z0 - band->z0;
-                                               } else if (band->bandno == 1) {
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                                                       y = cblk->y0 - band->y0;
-                                                       z = cblk->z0 - band->z0;
-                                               } else if (band->bandno == 2) {
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = cblk->x0 - band->x0;
-                                                       y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                                                       z = cblk->z0 - band->z0;
-                                               } else if (band->bandno == 3) {         
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                                                       y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                                                       z = cblk->z0 - band->z0;
-                                               } else if (band->bandno == 4) {
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = cblk->x0 - band->x0;
-                                                       y = cblk->y0 - band->y0;
-                                                       z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                                               } else if (band->bandno == 5) {
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                                                       y = cblk->y0 - band->y0;
-                                                       z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                                               } else if (band->bandno == 6) {
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = cblk->x0 - band->x0;
-                                                       y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                                                       z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                                               } else if (band->bandno == 7) {         
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                                                       y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                                                       z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                                               }
-
-                                               if (tcp->tccps[compno].reversible == 1) {
-                                                       for (k = 0; k < cblk->z1 - cblk->z0; k++) {
-                                                               for (j = 0; j < cblk->y1 - cblk->y0; j++) {
+void t1_3d_encode_cblks(opj_t1_3d_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp)
+{
+    int compno, resno, bandno, precno, cblkno;
+    int x, y, z, i, j, k, orient;
+    int level[3];
+    tile->distotile = 0;        /* fixed_quality */
+
+    for (compno = 0; compno < tile->numcomps; compno++) {
+        opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+
+        for (resno = 0; resno < tilec->numresolution[0]; resno++) {
+            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+
+            for (bandno = 0; bandno < res->numbands; bandno++) {
+                opj_tcd_band_t *band = &res->bands[bandno];
+
+                for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2];
+                        precno++) {
+                    opj_tcd_precinct_t *prc = &band->precincts[precno];
+
+                    for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
+                            cblkno++) {
+                        opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
+
+                        if (band->bandno == 0) {
+                            x = cblk->x0 - band->x0;
+                            y = cblk->y0 - band->y0;
+                            z = cblk->z0 - band->z0;
+                        } else if (band->bandno == 1) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
+                            y = cblk->y0 - band->y0;
+                            z = cblk->z0 - band->z0;
+                        } else if (band->bandno == 2) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = cblk->x0 - band->x0;
+                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
+                            z = cblk->z0 - band->z0;
+                        } else if (band->bandno == 3) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
+                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
+                            z = cblk->z0 - band->z0;
+                        } else if (band->bandno == 4) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = cblk->x0 - band->x0;
+                            y = cblk->y0 - band->y0;
+                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
+                        } else if (band->bandno == 5) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
+                            y = cblk->y0 - band->y0;
+                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
+                        } else if (band->bandno == 6) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = cblk->x0 - band->x0;
+                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
+                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
+                        } else if (band->bandno == 7) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
+                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
+                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
+                        }
+
+                        if (tcp->tccps[compno].reversible == 1) {
+                            for (k = 0; k < cblk->z1 - cblk->z0; k++) {
+                                for (j = 0; j < cblk->y1 - cblk->y0; j++) {
                                     for (i = 0; i < cblk->x1 - cblk->x0; i++) {
-                                        t1->data[k][j][i] = 
-                                                                               tilec->data[(x + i) + (y + j) * (tilec->x1 - tilec->x0) + (z + k) * (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] << T1_NMSEDEC_FRACBITS;
-                                                                       }
-                                                               }
-                                                       }
-                                               } else if (tcp->tccps[compno].reversible == 0) {
-                                                       for (k = 0; k < cblk->z1 - cblk->z0; k++) {
-                                                               for (j = 0; j < cblk->y1 - cblk->y0; j++) {
+                                        t1->data[k][j][i] =
+                                            tilec->data[(x + i) + (y + j) * (tilec->x1 - tilec->x0) + (z + k) *
+                                                                (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] << T1_NMSEDEC_FRACBITS;
+                                    }
+                                }
+                            }
+                        } else if (tcp->tccps[compno].reversible == 0) {
+                            for (k = 0; k < cblk->z1 - cblk->z0; k++) {
+                                for (j = 0; j < cblk->y1 - cblk->y0; j++) {
                                     for (i = 0; i < cblk->x1 - cblk->x0; i++) {
                                         t1->data[k][j][i] = fix_mul(
-                                                                               tilec->data[(x + i) + (y + j) * (tilec->x1 - tilec->x0) + (z + k) * (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)],
-                                                                               8192 * 8192 / ((int) floor(band->stepsize * 8192))) >> (13 - T1_NMSEDEC_FRACBITS);
-                                                                       }
-                                                               }
-                                                       }
-                                               }
-                                               orient = band->bandno;  /* FIXME */
-                                               for (i = 0; i < 3; i++) 
-                                                       level[i] = tilec->numresolution[i] - 1 - resno;
-
-                                               t1_3d_encode_cblk(t1, cblk, orient, compno, level, tcp->tccps[compno].dwtid, band->stepsize, tcp->tccps[compno].cblksty, tile->numcomps, tile);
-                                                       
-                                       } /* cblkno */
-                               } /* precno */
-                       } /* bandno */
-               } /* resno  */
-       } /* compno  */
+                                                                tilec->data[(x + i) + (y + j) * (tilec->x1 - tilec->x0) + (z + k) *
+                                                                                    (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)],
+                                                                8192 * 8192 / ((int) floor(band->stepsize * 8192))) >> (13 -
+                                                                        T1_NMSEDEC_FRACBITS);
+                                    }
+                                }
+                            }
+                        }
+                        orient = band->bandno;  /* FIXME */
+                        for (i = 0; i < 3; i++) {
+                            level[i] = tilec->numresolution[i] - 1 - resno;
+                        }
+
+                        t1_3d_encode_cblk(t1, cblk, orient, compno, level, tcp->tccps[compno].dwtid,
+                                          band->stepsize, tcp->tccps[compno].cblksty, tile->numcomps, tile);
+
+                    } /* cblkno */
+                } /* precno */
+            } /* bandno */
+        } /* resno  */
+    } /* compno  */
 }
 
-void t1_3d_decode_cblks(opj_t1_3d_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp) {
-       int compno, resno, bandno, precno, cblkno;
-       
-       for (compno = 0; compno < tile->numcomps; compno++) {
-               opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-
-               for (resno = 0; resno < tilec->numresolution[0]; resno++) {
-                       opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-
-                       for (bandno = 0; bandno < res->numbands; bandno++) {
-                               opj_tcd_band_t *band = &res->bands[bandno];
-
-                               for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2]; precno++) {
-                                       opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-                                       for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) {
-                                               int x, y, z, i, j, k, orient;
-                                               opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-
-                                               orient = band->bandno;  /* FIXME */
-
-                                               /*fprintf(stdout,"[INFO] t1_3d_decode_cblk(t1, cblk, orient(%d), tcp->tccps[compno].roishift (%d), tcp->tccps[compno].cblksty (%d));\n",orient,tcp->tccps[compno].roishift, tcp->tccps[compno].cblksty);*/
-                                               t1_3d_decode_cblk(t1, cblk, orient, tcp->tccps[compno].roishift, tcp->tccps[compno].cblksty);
-
-                                               if (band->bandno == 0) {
-                                                       x = cblk->x0 - band->x0;
-                                                       y = cblk->y0 - band->y0;
-                                                       z = cblk->z0 - band->z0;
-                                               } else if (band->bandno == 1) {
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                                                       y = cblk->y0 - band->y0;
-                                                       z = cblk->z0 - band->z0;
-                                               } else if (band->bandno == 2) {
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = cblk->x0 - band->x0;
-                                                       y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                                                       z = cblk->z0 - band->z0;
-                                               } else if (band->bandno == 3) {         
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                                                       y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                                                       z = cblk->z0 - band->z0;
-                                               } else if (band->bandno == 4) {
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = cblk->x0 - band->x0;
-                                                       y = cblk->y0 - band->y0;
-                                                       z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                                               } else if (band->bandno == 5) {
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                                                       y = cblk->y0 - band->y0;
-                                                       z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                                               } else if (band->bandno == 6) {
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = cblk->x0 - band->x0;
-                                                       y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                                                       z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                                               } else if (band->bandno == 7) {         
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
-                                                       y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
-                                                       z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
-                                               }
-                                       
-                                               if (tcp->tccps[compno].roishift) {
-                                                       int thresh, val, mag;
-                                                       thresh = 1 << tcp->tccps[compno].roishift;
-                                                       for (k = 0; k < cblk->z1 - cblk->z0; k++) {
-                                                               for (j = 0; j < cblk->y1 - cblk->y0; j++) {
-                                                                       for (i = 0; i < cblk->x1 - cblk->x0; i++) {
-                                                                               val = t1->data[k][j][i];
-                                                                               mag = int_abs(val);
-                                                                               if (mag >= thresh) {
-                                                                                       mag >>= tcp->tccps[compno].roishift;
-                                                                                       t1->data[k][j][i] = val < 0 ? -mag : mag;
-                                                                               }
-                                                                       }
-                                                               }
-                                                       }
-                                               }
-                                               
-                                               if (tcp->tccps[compno].reversible == 1) {
-                                                       for (k = 0; k < cblk->z1 - cblk->z0; k++) {
-                                                               for (j = 0; j < cblk->y1 - cblk->y0; j++) {
-                                                                       for (i = 0; i < cblk->x1 - cblk->x0; i++) {
-                                                                               int tmp = t1->data[k][j][i];
-                                                                               tilec->data[x + i + (y + j) * (tilec->x1 - tilec->x0) + (z + k) * (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] = tmp/2;
-                                                                       }
-                                                               }
-                                                       }
-                                               } else {                /* if (tcp->tccps[compno].reversible == 0) */
-                                                       for (k = 0; k < cblk->z1 - cblk->z0; k++) {
-                                                               for (j = 0; j < cblk->y1 - cblk->y0; j++) {
-                                                                       for (i = 0; i < cblk->x1 - cblk->x0; i++) {
-                                                                               double tmp = (double)(t1->data[k][j][i] * band->stepsize * 4096.0);
-                                                                               if (t1->data[k][j][i] >> 1 == 0) {
-                                                                                       tilec->data[x + i + (y + j) * (tilec->x1 - tilec->x0) + (z + k) * (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] = 0;
-                                                                               } else {
-                                                                                       int tmp2 = ((int) (floor(fabs(tmp)))) + ((int) floor(fabs(tmp*2))%2);
-                                                                                       tilec->data[x + i + (y + j) * (tilec->x1 - tilec->x0) + (z + k) * (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] = ((tmp<0)?-tmp2:tmp2);
-                                                                               }
-                                                                       }
-                                                               }
-                                                       }
-                                               }
-                                       } /* cblkno */
-                               } /* precno */
-                       } /* bandno */
-               } /* resno */
-       } /* compno */
+void t1_3d_decode_cblks(opj_t1_3d_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp)
+{
+    int compno, resno, bandno, precno, cblkno;
+
+    for (compno = 0; compno < tile->numcomps; compno++) {
+        opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+
+        for (resno = 0; resno < tilec->numresolution[0]; resno++) {
+            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+
+            for (bandno = 0; bandno < res->numbands; bandno++) {
+                opj_tcd_band_t *band = &res->bands[bandno];
+
+                for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2];
+                        precno++) {
+                    opj_tcd_precinct_t *prc = &band->precincts[precno];
+
+                    for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
+                            cblkno++) {
+                        int x, y, z, i, j, k, orient;
+                        opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
+
+                        orient = band->bandno;  /* FIXME */
+
+                        /*fprintf(stdout,"[INFO] t1_3d_decode_cblk(t1, cblk, orient(%d), tcp->tccps[compno].roishift (%d), tcp->tccps[compno].cblksty (%d));\n",orient,tcp->tccps[compno].roishift, tcp->tccps[compno].cblksty);*/
+                        t1_3d_decode_cblk(t1, cblk, orient, tcp->tccps[compno].roishift,
+                                          tcp->tccps[compno].cblksty);
+
+                        if (band->bandno == 0) {
+                            x = cblk->x0 - band->x0;
+                            y = cblk->y0 - band->y0;
+                            z = cblk->z0 - band->z0;
+                        } else if (band->bandno == 1) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
+                            y = cblk->y0 - band->y0;
+                            z = cblk->z0 - band->z0;
+                        } else if (band->bandno == 2) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = cblk->x0 - band->x0;
+                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
+                            z = cblk->z0 - band->z0;
+                        } else if (band->bandno == 3) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
+                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
+                            z = cblk->z0 - band->z0;
+                        } else if (band->bandno == 4) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = cblk->x0 - band->x0;
+                            y = cblk->y0 - band->y0;
+                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
+                        } else if (band->bandno == 5) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
+                            y = cblk->y0 - band->y0;
+                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
+                        } else if (band->bandno == 6) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = cblk->x0 - band->x0;
+                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
+                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
+                        } else if (band->bandno == 7) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x = pres->x1 - pres->x0 + cblk->x0 - band->x0;
+                            y = pres->y1 - pres->y0 + cblk->y0 - band->y0;
+                            z = pres->z1 - pres->z0 + cblk->z0 - band->z0;
+                        }
+
+                        if (tcp->tccps[compno].roishift) {
+                            int thresh, val, mag;
+                            thresh = 1 << tcp->tccps[compno].roishift;
+                            for (k = 0; k < cblk->z1 - cblk->z0; k++) {
+                                for (j = 0; j < cblk->y1 - cblk->y0; j++) {
+                                    for (i = 0; i < cblk->x1 - cblk->x0; i++) {
+                                        val = t1->data[k][j][i];
+                                        mag = int_abs(val);
+                                        if (mag >= thresh) {
+                                            mag >>= tcp->tccps[compno].roishift;
+                                            t1->data[k][j][i] = val < 0 ? -mag : mag;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+
+                        if (tcp->tccps[compno].reversible == 1) {
+                            for (k = 0; k < cblk->z1 - cblk->z0; k++) {
+                                for (j = 0; j < cblk->y1 - cblk->y0; j++) {
+                                    for (i = 0; i < cblk->x1 - cblk->x0; i++) {
+                                        int tmp = t1->data[k][j][i];
+                                        tilec->data[x + i + (y + j) * (tilec->x1 - tilec->x0) + (z + k) *
+                                                      (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] = tmp / 2;
+                                    }
+                                }
+                            }
+                        } else {        /* if (tcp->tccps[compno].reversible == 0) */
+                            for (k = 0; k < cblk->z1 - cblk->z0; k++) {
+                                for (j = 0; j < cblk->y1 - cblk->y0; j++) {
+                                    for (i = 0; i < cblk->x1 - cblk->x0; i++) {
+                                        double tmp = (double)(t1->data[k][j][i] * band->stepsize * 4096.0);
+                                        if (t1->data[k][j][i] >> 1 == 0) {
+                                            tilec->data[x + i + (y + j) * (tilec->x1 - tilec->x0) + (z + k) *
+                                                          (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] = 0;
+                                        } else {
+                                            int tmp2 = ((int)(floor(fabs(tmp)))) + ((int) floor(fabs(tmp * 2)) % 2);
+                                            tilec->data[x + i + (y + j) * (tilec->x1 - tilec->x0) + (z + k) *
+                                                          (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0)] = ((tmp < 0) ? -tmp2 : tmp2);
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    } /* cblkno */
+                } /* precno */
+            } /* bandno */
+        } /* resno */
+    } /* compno */
 }
index 0830c29271d83ac552944b9a059eff53328456ed..a31bf83fd3e7bfc5cb3117a6ceabcebcbe8ab845 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -62,7 +62,9 @@ Encode a packet of a tile to a destination buffer
 @param cp Coding parameters
 @return Number of bytes encoded from the packet
 */
-static int t2_encode_packet(opj_tcd_tile_t *tile, opj_tcp_t *tcp, opj_pi_iterator_t *pi, unsigned char *dest, int len, opj_volume_info_t *volume_info, int tileno, opj_cp_t *cp);
+static int t2_encode_packet(opj_tcd_tile_t *tile, opj_tcp_t *tcp,
+                            opj_pi_iterator_t *pi, unsigned char *dest, int len,
+                            opj_volume_info_t *volume_info, int tileno, opj_cp_t *cp);
 /**
 Initialize the segment decoder
 @param seg Segment instance
@@ -80,7 +82,8 @@ Decode a packet of a tile from a source buffer
 @param pi Packet identity
 @return Number of bytes decoded from the packet
 */
-int t2_decode_packet(opj_t2_t* t2, unsigned char *src, int len, opj_tcd_tile_t *tile, opj_tcp_t *tcp, opj_pi_iterator_t *pi);
+int t2_decode_packet(opj_t2_t* t2, unsigned char *src, int len,
+                     opj_tcd_tile_t *tile, opj_tcp_t *tcp, opj_pi_iterator_t *pi);
 
 /*@}*/
 
@@ -89,593 +92,639 @@ int t2_decode_packet(opj_t2_t* t2, unsigned char *src, int len, opj_tcd_tile_t *
 /* ----------------------------------------------------------------------- */
 
 /* #define RESTART 0x04 */
-static void t2_putcommacode(opj_bio_t *bio, int n) {
-       while (--n >= 0) {
-               bio_write(bio, 1, 1);
-       }
-       bio_write(bio, 0, 1);
+static void t2_putcommacode(opj_bio_t *bio, int n)
+{
+    while (--n >= 0) {
+        bio_write(bio, 1, 1);
+    }
+    bio_write(bio, 0, 1);
 }
 
-static int t2_getcommacode(opj_bio_t *bio) {
-       int n;
-       for (n = 0; bio_read(bio, 1); n++) {
-               ;
-       }
-       return n;
+static int t2_getcommacode(opj_bio_t *bio)
+{
+    int n;
+    for (n = 0; bio_read(bio, 1); n++) {
+        ;
+    }
+    return n;
 }
 
-static void t2_putnumpasses(opj_bio_t *bio, int n) {
-       if (n == 1) {
-               bio_write(bio, 0, 1);
-       } else if (n == 2) {
-               bio_write(bio, 2, 2);
-       } else if (n <= 5) {
-               bio_write(bio, 0xc | (n - 3), 4);
-       } else if (n <= 36) {
-               bio_write(bio, 0x1e0 | (n - 6), 9);
-       } else if (n <= 164) {
-               bio_write(bio, 0xff80 | (n - 37), 16);
-       }
+static void t2_putnumpasses(opj_bio_t *bio, int n)
+{
+    if (n == 1) {
+        bio_write(bio, 0, 1);
+    } else if (n == 2) {
+        bio_write(bio, 2, 2);
+    } else if (n <= 5) {
+        bio_write(bio, 0xc | (n - 3), 4);
+    } else if (n <= 36) {
+        bio_write(bio, 0x1e0 | (n - 6), 9);
+    } else if (n <= 164) {
+        bio_write(bio, 0xff80 | (n - 37), 16);
+    }
 }
 
-static int t2_getnumpasses(opj_bio_t *bio) {
-       int n;
-       if (!bio_read(bio, 1))
-               return 1;
-       if (!bio_read(bio, 1))
-               return 2;
-       if ((n = bio_read(bio, 2)) != 3)
-               return (3 + n);
-       if ((n = bio_read(bio, 5)) != 31)
-               return (6 + n);
-       return (37 + bio_read(bio, 7));
+static int t2_getnumpasses(opj_bio_t *bio)
+{
+    int n;
+    if (!bio_read(bio, 1)) {
+        return 1;
+    }
+    if (!bio_read(bio, 1)) {
+        return 2;
+    }
+    if ((n = bio_read(bio, 2)) != 3) {
+        return (3 + n);
+    }
+    if ((n = bio_read(bio, 5)) != 31) {
+        return (6 + n);
+    }
+    return (37 + bio_read(bio, 7));
 }
 
-static int t2_encode_packet(opj_tcd_tile_t * tile, opj_tcp_t * tcp, opj_pi_iterator_t *pi, unsigned char *dest, int len, opj_volume_info_t * volume_info, int tileno, opj_cp_t *cp) {
-       int bandno, cblkno;
-       unsigned char *sop = 0, *eph = 0;
-       unsigned char *c = dest;
-
-       int compno = pi->compno;        /* component value */
-       int resno  = pi->resno;         /* resolution level value */
-       int precno = pi->precno;        /* precinct value */
-       int layno  = pi->layno;         /* quality layer value */
-
-       opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-       opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-       
-       opj_bio_t *bio = NULL;  /* BIO component */
-
-       /* <SOP 0xff91> */
-       if ((tcp->csty & J3D_CP_CSTY_SOP)) {
-               sop = (unsigned char *) opj_malloc(6 * sizeof(unsigned char));
-               sop[0] = 255;
-               sop[1] = 145;
-               sop[2] = 0;
-               sop[3] = 4;
-               sop[4] = (volume_info) ? (volume_info->num % 65536) / 256 : (0 % 65536) / 256 ;
-               sop[5] = (volume_info) ? (volume_info->num % 65536) % 256 : (0 % 65536) % 256 ;
-               memcpy(c, sop, 6);
-               opj_free(sop);
-               c += 6;
-       } 
-       /* </SOP> */
-       
-       if (!layno) {
-               for (bandno = 0; bandno < res->numbands; bandno++) {
-                       opj_tcd_band_t *band = &res->bands[bandno];
-                       opj_tcd_precinct_t *prc = &band->precincts[precno];
-                       tgt_reset(prc->incltree);
-                       tgt_reset(prc->imsbtree);
-                       for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) {
-                               opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-                               cblk->numpasses = 0;
+static int t2_encode_packet(opj_tcd_tile_t * tile, opj_tcp_t * tcp,
+                            opj_pi_iterator_t *pi, unsigned char *dest, int len,
+                            opj_volume_info_t * volume_info, int tileno, opj_cp_t *cp)
+{
+    int bandno, cblkno;
+    unsigned char *sop = 0, *eph = 0;
+    unsigned char *c = dest;
+
+    int compno = pi->compno;    /* component value */
+    int resno  = pi->resno;     /* resolution level value */
+    int precno = pi->precno;    /* precinct value */
+    int layno  = pi->layno;     /* quality layer value */
+
+    opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+    opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+
+    opj_bio_t *bio = NULL;  /* BIO component */
+
+    /* <SOP 0xff91> */
+    if ((tcp->csty & J3D_CP_CSTY_SOP)) {
+        sop = (unsigned char *) opj_malloc(6 * sizeof(unsigned char));
+        sop[0] = 255;
+        sop[1] = 145;
+        sop[2] = 0;
+        sop[3] = 4;
+        sop[4] = (volume_info) ? (volume_info->num % 65536) / 256 : (0 % 65536) / 256 ;
+        sop[5] = (volume_info) ? (volume_info->num % 65536) % 256 : (0 % 65536) % 256 ;
+        memcpy(c, sop, 6);
+        opj_free(sop);
+        c += 6;
+    }
+    /* </SOP> */
+
+    if (!layno) {
+        for (bandno = 0; bandno < res->numbands; bandno++) {
+            opj_tcd_band_t *band = &res->bands[bandno];
+            opj_tcd_precinct_t *prc = &band->precincts[precno];
+            tgt_reset(prc->incltree);
+            tgt_reset(prc->imsbtree);
+            for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
+                    cblkno++) {
+                opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
+                cblk->numpasses = 0;
                 tgt_setvalue(prc->imsbtree, cblkno, band->numbps - cblk->numbps);
-                       }
-               }
-       }
-               
-       bio = bio_create();
-       bio_init_enc(bio, c, len);
-       bio_write(bio, 1, 1);           /* Empty header bit */
-       
-       /* Writing Packet header */
-       for (bandno = 0; bandno < res->numbands; bandno++) {
-               opj_tcd_band_t *band = &res->bands[bandno];
-               opj_tcd_precinct_t *prc = &band->precincts[precno];
-               for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) {
-                       opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-                       opj_tcd_layer_t *layer = &cblk->layers[layno];
-                       if (!cblk->numpasses && layer->numpasses) {
+            }
+        }
+    }
+
+    bio = bio_create();
+    bio_init_enc(bio, c, len);
+    bio_write(bio, 1, 1);       /* Empty header bit */
+
+    /* Writing Packet header */
+    for (bandno = 0; bandno < res->numbands; bandno++) {
+        opj_tcd_band_t *band = &res->bands[bandno];
+        opj_tcd_precinct_t *prc = &band->precincts[precno];
+        for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
+                cblkno++) {
+            opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
+            opj_tcd_layer_t *layer = &cblk->layers[layno];
+            if (!cblk->numpasses && layer->numpasses) {
                 tgt_setvalue(prc->incltree, cblkno, layno);
-                       }
-               }
-
-               for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) {
-                       opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-                       opj_tcd_layer_t *layer = &cblk->layers[layno];
-                       int increment = 0;
-                       int nump = 0;
-                       int len = 0, passno;
-                       /* cblk inclusion bits */
-                       if (!cblk->numpasses) {
-                               tgt_encode(bio, prc->incltree, cblkno, layno + 1);
-                       } else {
-                               bio_write(bio, layer->numpasses != 0, 1);
-                       }
-                       /* if cblk not included, go to the next cblk  */
-                       if (!layer->numpasses) {
-                               continue;
-                       }
-                       /* if first instance of cblk --> zero bit-planes information */
-                       if (!cblk->numpasses) {
-                               cblk->numlenbits = 3;
-                               tgt_encode(bio, prc->imsbtree, cblkno, 999);
-                       }
-                       /* number of coding passes included */
-                       t2_putnumpasses(bio, layer->numpasses);
-                       
-                       /* computation of the increase of the length indicator and insertion in the header     */
-                       for (passno = cblk->numpasses; passno < cblk->numpasses + layer->numpasses; passno++) {
-                               opj_tcd_pass_t *pass = &cblk->passes[passno];
-                               nump++;
-                               len += pass->len;
-                               if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) {
-                                       increment = int_max(increment, int_floorlog2(len) + 1 - (cblk->numlenbits + int_floorlog2(nump)));
-                                       len = 0;
-                                       nump = 0;
-                               }
-                       }
-                       t2_putcommacode(bio, increment);
-
-                       /* computation of the new Length indicator */
-                       cblk->numlenbits += increment;
-
-                       /* insertion of the codeword segment length */
-                       for (passno = cblk->numpasses; passno < cblk->numpasses + layer->numpasses; passno++) {
-                               opj_tcd_pass_t *pass = &cblk->passes[passno];
-                               nump++;
-                               len += pass->len;
-                               if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) {
-                                       bio_write(bio, len, cblk->numlenbits + int_floorlog2(nump));
-                                       len = 0;
-                                       nump = 0;
-                               }
-                       }
-
-               }
-       }
-       
-       
-       if (bio_flush(bio)) {
-               return -999;            /* modified to eliminate longjmp !! */
-       }
-       
-       c += bio_numbytes(bio);
-
-       bio_destroy(bio);
-       
-       /* <EPH 0xff92> */
-       if (tcp->csty & J3D_CP_CSTY_EPH) {
-               eph = (unsigned char *) opj_malloc(2 * sizeof(unsigned char));
-               eph[0] = 255;
-               eph[1] = 146;
-               memcpy(c, eph, 2);
-               opj_free(eph);
-               c += 2;
-       }
-       /* </EPH> */
-       
-       /* Writing the packet body */
-       
-       for (bandno = 0; bandno < res->numbands; bandno++) {
-               opj_tcd_band_t *band = &res->bands[bandno];
-               opj_tcd_precinct_t *prc = &band->precincts[precno];
-               for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) {
-                       opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-                       opj_tcd_layer_t *layer = &cblk->layers[layno];
-                       if (!layer->numpasses) {
-                               continue;
-                       }
-                       if (c + layer->len > dest + len) {
-                               return -999;
-                       }
-                       
-                       memcpy(c, layer->data, layer->len);
-                       cblk->numpasses += layer->numpasses;
-                       c += layer->len;
-                       /* ADD for index Cfr. Marcela --> delta disto by packet */
-                       if(volume_info && volume_info->index_write && volume_info->index_on) {
-                               opj_tile_info_t *info_TL = &volume_info->tile[tileno];
-                               opj_packet_info_t *info_PK = &info_TL->packet[volume_info->num];
-                               info_PK->disto += layer->disto;
-                               if (volume_info->D_max < info_PK->disto) {
-                                       volume_info->D_max = info_PK->disto;
-                               }
-                       }
-                       /* </ADD> */
-               }
-       }
-       
-       return (c - dest);
+            }
+        }
+
+        for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
+                cblkno++) {
+            opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
+            opj_tcd_layer_t *layer = &cblk->layers[layno];
+            int increment = 0;
+            int nump = 0;
+            int len = 0, passno;
+            /* cblk inclusion bits */
+            if (!cblk->numpasses) {
+                tgt_encode(bio, prc->incltree, cblkno, layno + 1);
+            } else {
+                bio_write(bio, layer->numpasses != 0, 1);
+            }
+            /* if cblk not included, go to the next cblk  */
+            if (!layer->numpasses) {
+                continue;
+            }
+            /* if first instance of cblk --> zero bit-planes information */
+            if (!cblk->numpasses) {
+                cblk->numlenbits = 3;
+                tgt_encode(bio, prc->imsbtree, cblkno, 999);
+            }
+            /* number of coding passes included */
+            t2_putnumpasses(bio, layer->numpasses);
+
+            /* computation of the increase of the length indicator and insertion in the header     */
+            for (passno = cblk->numpasses; passno < cblk->numpasses + layer->numpasses;
+                    passno++) {
+                opj_tcd_pass_t *pass = &cblk->passes[passno];
+                nump++;
+                len += pass->len;
+                if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) {
+                    increment = int_max(increment,
+                                        int_floorlog2(len) + 1 - (cblk->numlenbits + int_floorlog2(nump)));
+                    len = 0;
+                    nump = 0;
+                }
+            }
+            t2_putcommacode(bio, increment);
+
+            /* computation of the new Length indicator */
+            cblk->numlenbits += increment;
+
+            /* insertion of the codeword segment length */
+            for (passno = cblk->numpasses; passno < cblk->numpasses + layer->numpasses;
+                    passno++) {
+                opj_tcd_pass_t *pass = &cblk->passes[passno];
+                nump++;
+                len += pass->len;
+                if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) {
+                    bio_write(bio, len, cblk->numlenbits + int_floorlog2(nump));
+                    len = 0;
+                    nump = 0;
+                }
+            }
+
+        }
+    }
+
+
+    if (bio_flush(bio)) {
+        return -999;        /* modified to eliminate longjmp !! */
+    }
+
+    c += bio_numbytes(bio);
+
+    bio_destroy(bio);
+
+    /* <EPH 0xff92> */
+    if (tcp->csty & J3D_CP_CSTY_EPH) {
+        eph = (unsigned char *) opj_malloc(2 * sizeof(unsigned char));
+        eph[0] = 255;
+        eph[1] = 146;
+        memcpy(c, eph, 2);
+        opj_free(eph);
+        c += 2;
+    }
+    /* </EPH> */
+
+    /* Writing the packet body */
+
+    for (bandno = 0; bandno < res->numbands; bandno++) {
+        opj_tcd_band_t *band = &res->bands[bandno];
+        opj_tcd_precinct_t *prc = &band->precincts[precno];
+        for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
+                cblkno++) {
+            opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
+            opj_tcd_layer_t *layer = &cblk->layers[layno];
+            if (!layer->numpasses) {
+                continue;
+            }
+            if (c + layer->len > dest + len) {
+                return -999;
+            }
+
+            memcpy(c, layer->data, layer->len);
+            cblk->numpasses += layer->numpasses;
+            c += layer->len;
+            /* ADD for index Cfr. Marcela --> delta disto by packet */
+            if (volume_info && volume_info->index_write && volume_info->index_on) {
+                opj_tile_info_t *info_TL = &volume_info->tile[tileno];
+                opj_packet_info_t *info_PK = &info_TL->packet[volume_info->num];
+                info_PK->disto += layer->disto;
+                if (volume_info->D_max < info_PK->disto) {
+                    volume_info->D_max = info_PK->disto;
+                }
+            }
+            /* </ADD> */
+        }
+    }
+
+    return (c - dest);
 }
 
-static void t2_init_seg(opj_tcd_seg_t * seg, int cblksty, int first) {
-       seg->numpasses = 0;
-       seg->len = 0;
-       if (cblksty & J3D_CCP_CBLKSTY_TERMALL) {
-               seg->maxpasses = 1;
-       }
-       else if (cblksty & J3D_CCP_CBLKSTY_LAZY) {
-               if (first) {
-                       seg->maxpasses = 10;
-               } else {
-                       seg->maxpasses = (((seg - 1)->maxpasses == 1) || ((seg - 1)->maxpasses == 10)) ? 2 : 1;
-               }
-       } else {
-               seg->maxpasses = 109;
-       }
+static void t2_init_seg(opj_tcd_seg_t * seg, int cblksty, int first)
+{
+    seg->numpasses = 0;
+    seg->len = 0;
+    if (cblksty & J3D_CCP_CBLKSTY_TERMALL) {
+        seg->maxpasses = 1;
+    } else if (cblksty & J3D_CCP_CBLKSTY_LAZY) {
+        if (first) {
+            seg->maxpasses = 10;
+        } else {
+            seg->maxpasses = (((seg - 1)->maxpasses == 1) ||
+                              ((seg - 1)->maxpasses == 10)) ? 2 : 1;
+        }
+    } else {
+        seg->maxpasses = 109;
+    }
 }
 
-int t2_decode_packet(opj_t2_t* t2, unsigned char *src, int len, opj_tcd_tile_t *tile, opj_tcp_t *tcp, opj_pi_iterator_t *pi) {
-       int bandno, cblkno;
-       unsigned char *c = src;
-
-       opj_cp_t *cp = t2->cp;
-
-       int compno = pi->compno;        /* component value */
-       int resno  = pi->resno;         /* resolution level value */
-       int precno = pi->precno;        /* precinct value */
-       int layno  = pi->layno;         /* quality layer value */
-
-       opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-       opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-       
-       unsigned char *hd = NULL;
-       int present;
-       
-       opj_bio_t *bio = NULL;  /* BIO component */
-       
-       if (layno == 0) {
-               for (bandno = 0; bandno < res->numbands; bandno++) {
-                       opj_tcd_band_t *band = &res->bands[bandno];
-                       opj_tcd_precinct_t *prc = &band->precincts[precno];
-                       
-                       if ((band->x1-band->x0 == 0)||(band->y1-band->y0 == 0)||(band->z1-band->z0 == 0)) continue;
-
-                       tgt_reset(prc->incltree);
-                       tgt_reset(prc->imsbtree);
-                       for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) {
-                               opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-                               cblk->numsegs = 0;
-                       }
-               }
-       }
-       
-       /* SOP markers */
-       
-       if (tcp->csty & J3D_CP_CSTY_SOP) {
-               if ((*c) != 0xff || (*(c + 1) != 0x91)) {
-                       opj_event_msg(t2->cinfo, EVT_WARNING, "Expected SOP marker\n");
-               } else {
-                       c += 6;
-               }
-               
-               /** TODO : check the Nsop value */
-       }
-       
-       /* 
-       When the marker PPT/PPM is used the packet header are store in PPT/PPM marker
-       This part deal with this caracteristic
-       step 1: Read packet header in the saved structure
-       step 2: Return to codestream for decoding 
-       */
-
-       bio = bio_create();
-       
-       if (cp->ppm == 1) {             /* PPM */
-               hd = cp->ppm_data;
-               bio_init_dec(bio, hd, cp->ppm_len);
-       } else if (tcp->ppt == 1) {     /* PPT */
-               hd = tcp->ppt_data;
-               bio_init_dec(bio, hd, tcp->ppt_len);
-       } else {                        /* Normal Case */
-               hd = c;
-               bio_init_dec(bio, hd, src+len-hd);
-       }
-       
-       present = bio_read(bio, 1);
-       
-       if (!present) {
-               bio_inalign(bio);
-               hd += bio_numbytes(bio);
-               bio_destroy(bio);
-               
-               /* EPH markers */
-               
-               if (tcp->csty & J3D_CP_CSTY_EPH) {
-                       if ((*hd) != 0xff || (*(hd + 1) != 0x92)) {
-                               printf("Error : expected EPH marker\n");
-                       } else {
-                               hd += 2;
-                       }
-               }
-               
-               if (cp->ppm == 1) {             /* PPM case */
-                       cp->ppm_len += cp->ppm_data-hd;
-                       cp->ppm_data = hd;
-                       return (c - src);
-               }
-               if (tcp->ppt == 1) {    /* PPT case */
-                       tcp->ppt_len+=tcp->ppt_data-hd;
-                       tcp->ppt_data = hd;
-                       return (c - src);
-               }
-               
-               return (hd - src);
-       }
-       
-       for (bandno = 0; bandno < res->numbands; bandno++) {
-               opj_tcd_band_t *band = &res->bands[bandno];
-               opj_tcd_precinct_t *prc = &band->precincts[precno];
-               
-               if ((band->x1-band->x0 == 0)||(band->y1-band->y0 == 0)||(band->z1-band->z0 == 0)) continue;
-               
-               for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) {
-                       int included, increment, n;
-                       opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-                       opj_tcd_seg_t *seg = NULL;
-                       /* if cblk not yet included before --> inclusion tagtree */
-                       if (!cblk->numsegs) {
+int t2_decode_packet(opj_t2_t* t2, unsigned char *src, int len,
+                     opj_tcd_tile_t *tile, opj_tcp_t *tcp, opj_pi_iterator_t *pi)
+{
+    int bandno, cblkno;
+    unsigned char *c = src;
+
+    opj_cp_t *cp = t2->cp;
+
+    int compno = pi->compno;    /* component value */
+    int resno  = pi->resno;     /* resolution level value */
+    int precno = pi->precno;    /* precinct value */
+    int layno  = pi->layno;     /* quality layer value */
+
+    opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+    opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+
+    unsigned char *hd = NULL;
+    int present;
+
+    opj_bio_t *bio = NULL;  /* BIO component */
+
+    if (layno == 0) {
+        for (bandno = 0; bandno < res->numbands; bandno++) {
+            opj_tcd_band_t *band = &res->bands[bandno];
+            opj_tcd_precinct_t *prc = &band->precincts[precno];
+
+            if ((band->x1 - band->x0 == 0) || (band->y1 - band->y0 == 0) ||
+                    (band->z1 - band->z0 == 0)) {
+                continue;
+            }
+
+            tgt_reset(prc->incltree);
+            tgt_reset(prc->imsbtree);
+            for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
+                    cblkno++) {
+                opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
+                cblk->numsegs = 0;
+            }
+        }
+    }
+
+    /* SOP markers */
+
+    if (tcp->csty & J3D_CP_CSTY_SOP) {
+        if ((*c) != 0xff || (*(c + 1) != 0x91)) {
+            opj_event_msg(t2->cinfo, EVT_WARNING, "Expected SOP marker\n");
+        } else {
+            c += 6;
+        }
+
+        /** TODO : check the Nsop value */
+    }
+
+    /*
+    When the marker PPT/PPM is used the packet header are store in PPT/PPM marker
+    This part deal with this caracteristic
+    step 1: Read packet header in the saved structure
+    step 2: Return to codestream for decoding
+    */
+
+    bio = bio_create();
+
+    if (cp->ppm == 1) {     /* PPM */
+        hd = cp->ppm_data;
+        bio_init_dec(bio, hd, cp->ppm_len);
+    } else if (tcp->ppt == 1) { /* PPT */
+        hd = tcp->ppt_data;
+        bio_init_dec(bio, hd, tcp->ppt_len);
+    } else {            /* Normal Case */
+        hd = c;
+        bio_init_dec(bio, hd, src + len - hd);
+    }
+
+    present = bio_read(bio, 1);
+
+    if (!present) {
+        bio_inalign(bio);
+        hd += bio_numbytes(bio);
+        bio_destroy(bio);
+
+        /* EPH markers */
+
+        if (tcp->csty & J3D_CP_CSTY_EPH) {
+            if ((*hd) != 0xff || (*(hd + 1) != 0x92)) {
+                printf("Error : expected EPH marker\n");
+            } else {
+                hd += 2;
+            }
+        }
+
+        if (cp->ppm == 1) {     /* PPM case */
+            cp->ppm_len += cp->ppm_data - hd;
+            cp->ppm_data = hd;
+            return (c - src);
+        }
+        if (tcp->ppt == 1) {    /* PPT case */
+            tcp->ppt_len += tcp->ppt_data - hd;
+            tcp->ppt_data = hd;
+            return (c - src);
+        }
+
+        return (hd - src);
+    }
+
+    for (bandno = 0; bandno < res->numbands; bandno++) {
+        opj_tcd_band_t *band = &res->bands[bandno];
+        opj_tcd_precinct_t *prc = &band->precincts[precno];
+
+        if ((band->x1 - band->x0 == 0) || (band->y1 - band->y0 == 0) ||
+                (band->z1 - band->z0 == 0)) {
+            continue;
+        }
+
+        for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
+                cblkno++) {
+            int included, increment, n;
+            opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
+            opj_tcd_seg_t *seg = NULL;
+            /* if cblk not yet included before --> inclusion tagtree */
+            if (!cblk->numsegs) {
                 included = tgt_decode(bio, prc->incltree, cblkno, layno + 1);
-                               /* else one bit */
-                       } else {
-                               included = bio_read(bio, 1);
-                       }
-                       /* if cblk not included */
-                       if (!included) {
-                               cblk->numnewpasses = 0;
-                               continue;
-                       }
-                       /* if cblk not yet included --> zero-bitplane tagtree */
-                       if (!cblk->numsegs) {
-                               int i, numimsbs;
-                               for (i = 0; !tgt_decode(bio, prc->imsbtree, cblkno, i); i++);
-                               numimsbs = i - 1;
-                               cblk->numbps = band->numbps - numimsbs;
-                               cblk->numlenbits = 3;
-                       }
-                       /* number of coding passes */
-                       cblk->numnewpasses = t2_getnumpasses(bio);
-                       increment = t2_getcommacode(bio);
-                       /* length indicator increment */
-                       cblk->numlenbits += increment;
-                       if (!cblk->numsegs) {
-                               seg = &cblk->segs[0];
-                               t2_init_seg(seg, tcp->tccps[compno].cblksty, 1);
-                       } else {
-                               seg = &cblk->segs[cblk->numsegs - 1];
-                               if (seg->numpasses == seg->maxpasses) {
-                                       t2_init_seg(++seg, tcp->tccps[compno].cblksty, 0);
-                               }
-                       }
-                       n = cblk->numnewpasses;
-                       
-                       do {
-                               seg->numnewpasses = int_min(seg->maxpasses - seg->numpasses, n);
-                               seg->newlen = bio_read(bio, cblk->numlenbits + int_floorlog2(seg->numnewpasses));
-                               n -= seg->numnewpasses;
-                               if (n > 0) {
-                                       t2_init_seg(++seg, tcp->tccps[compno].cblksty, 0);
-                               }
-                       } while (n > 0);
-               }
-       }
-       
-       if (bio_inalign(bio)) {
-               bio_destroy(bio);
-               return -999;
-       }
-       
-       hd += bio_numbytes(bio);
-       bio_destroy(bio);
-       
-       /* EPH markers */
-       if (tcp->csty & J3D_CP_CSTY_EPH) {
-               if ((*hd) != 0xff || (*(hd + 1) != 0x92)) {
-                       opj_event_msg(t2->cinfo, EVT_ERROR, "Expected EPH marker\n");
-                       return -999;
-               } else {
-                       hd += 2;
-               }
-       }
-       
-       if (cp->ppm==1) {
-               cp->ppm_len+=cp->ppm_data-hd;
-               cp->ppm_data = hd;
-       } else if (tcp->ppt == 1) {
-               tcp->ppt_len+=tcp->ppt_data-hd;
-               tcp->ppt_data = hd;
-       } else {
-               c=hd;
-       }
-       
-       for (bandno = 0; bandno < res->numbands; bandno++) {
-               opj_tcd_band_t *band = &res->bands[bandno];
-               opj_tcd_precinct_t *prc = &band->precincts[precno];
-               
-               if ((band->x1-band->x0 == 0)||(band->y1-band->y0 == 0)||(band->z1-band->z0 == 0)) continue;             
-
-               for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) {
-                       opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-                       opj_tcd_seg_t *seg = NULL;
-                       if (!cblk->numnewpasses)
-                               continue;
-                       if (!cblk->numsegs) {
-                               seg = &cblk->segs[0];
-                               cblk->numsegs++;
-                               cblk->len = 0;
-                       } else {
-                               seg = &cblk->segs[cblk->numsegs - 1];
-                               if (seg->numpasses == seg->maxpasses) {
-                                       seg++;
-                                       cblk->numsegs++;
-                               }
-                       }
-                       
-                       do {
-                               if (c + seg->newlen > src + len) {
-                                       return -999;
-                               }
-                               
-                               memcpy(cblk->data + cblk->len, c, seg->newlen);
-                               if (seg->numpasses == 0) {
-                                       seg->data = cblk->data + cblk->len;
-                               }
-                               c += seg->newlen;
-                               cblk->len += seg->newlen;
-                               seg->len += seg->newlen;
-                               seg->numpasses += seg->numnewpasses;
-                               cblk->numnewpasses -= seg->numnewpasses;
-                               if (cblk->numnewpasses > 0) {
-                                       seg++;
-                                       cblk->numsegs++;
-                               }
-                       } while (cblk->numnewpasses > 0);
-               }
-       }
-       
-       return (c - src);
+                /* else one bit */
+            } else {
+                included = bio_read(bio, 1);
+            }
+            /* if cblk not included */
+            if (!included) {
+                cblk->numnewpasses = 0;
+                continue;
+            }
+            /* if cblk not yet included --> zero-bitplane tagtree */
+            if (!cblk->numsegs) {
+                int i, numimsbs;
+                for (i = 0; !tgt_decode(bio, prc->imsbtree, cblkno, i); i++);
+                numimsbs = i - 1;
+                cblk->numbps = band->numbps - numimsbs;
+                cblk->numlenbits = 3;
+            }
+            /* number of coding passes */
+            cblk->numnewpasses = t2_getnumpasses(bio);
+            increment = t2_getcommacode(bio);
+            /* length indicator increment */
+            cblk->numlenbits += increment;
+            if (!cblk->numsegs) {
+                seg = &cblk->segs[0];
+                t2_init_seg(seg, tcp->tccps[compno].cblksty, 1);
+            } else {
+                seg = &cblk->segs[cblk->numsegs - 1];
+                if (seg->numpasses == seg->maxpasses) {
+                    t2_init_seg(++seg, tcp->tccps[compno].cblksty, 0);
+                }
+            }
+            n = cblk->numnewpasses;
+
+            do {
+                seg->numnewpasses = int_min(seg->maxpasses - seg->numpasses, n);
+                seg->newlen = bio_read(bio,
+                                       cblk->numlenbits + int_floorlog2(seg->numnewpasses));
+                n -= seg->numnewpasses;
+                if (n > 0) {
+                    t2_init_seg(++seg, tcp->tccps[compno].cblksty, 0);
+                }
+            } while (n > 0);
+        }
+    }
+
+    if (bio_inalign(bio)) {
+        bio_destroy(bio);
+        return -999;
+    }
+
+    hd += bio_numbytes(bio);
+    bio_destroy(bio);
+
+    /* EPH markers */
+    if (tcp->csty & J3D_CP_CSTY_EPH) {
+        if ((*hd) != 0xff || (*(hd + 1) != 0x92)) {
+            opj_event_msg(t2->cinfo, EVT_ERROR, "Expected EPH marker\n");
+            return -999;
+        } else {
+            hd += 2;
+        }
+    }
+
+    if (cp->ppm == 1) {
+        cp->ppm_len += cp->ppm_data - hd;
+        cp->ppm_data = hd;
+    } else if (tcp->ppt == 1) {
+        tcp->ppt_len += tcp->ppt_data - hd;
+        tcp->ppt_data = hd;
+    } else {
+        c = hd;
+    }
+
+    for (bandno = 0; bandno < res->numbands; bandno++) {
+        opj_tcd_band_t *band = &res->bands[bandno];
+        opj_tcd_precinct_t *prc = &band->precincts[precno];
+
+        if ((band->x1 - band->x0 == 0) || (band->y1 - band->y0 == 0) ||
+                (band->z1 - band->z0 == 0)) {
+            continue;
+        }
+
+        for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
+                cblkno++) {
+            opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
+            opj_tcd_seg_t *seg = NULL;
+            if (!cblk->numnewpasses) {
+                continue;
+            }
+            if (!cblk->numsegs) {
+                seg = &cblk->segs[0];
+                cblk->numsegs++;
+                cblk->len = 0;
+            } else {
+                seg = &cblk->segs[cblk->numsegs - 1];
+                if (seg->numpasses == seg->maxpasses) {
+                    seg++;
+                    cblk->numsegs++;
+                }
+            }
+
+            do {
+                if (c + seg->newlen > src + len) {
+                    return -999;
+                }
+
+                memcpy(cblk->data + cblk->len, c, seg->newlen);
+                if (seg->numpasses == 0) {
+                    seg->data = cblk->data + cblk->len;
+                }
+                c += seg->newlen;
+                cblk->len += seg->newlen;
+                seg->len += seg->newlen;
+                seg->numpasses += seg->numnewpasses;
+                cblk->numnewpasses -= seg->numnewpasses;
+                if (cblk->numnewpasses > 0) {
+                    seg++;
+                    cblk->numsegs++;
+                }
+            } while (cblk->numnewpasses > 0);
+        }
+    }
+
+    return (c - src);
 }
 
 /* ----------------------------------------------------------------------- */
 
-int t2_encode_packets(opj_t2_t* t2, int tileno, opj_tcd_tile_t *tile, int maxlayers, unsigned char *dest, int len, opj_volume_info_t *volume_info) {
-       unsigned char *c = dest;
-       int e = 0;
-       opj_pi_iterator_t *pi = NULL;
-       int pino;
-
-       opj_volume_t *volume = t2->volume;
-       opj_cp_t *cp = t2->cp;
-       
-       /* create a packet iterator */
-       pi = pi_create(volume, cp, tileno);
-       if(!pi) {
-               fprintf(stdout,"[ERROR] Failed to create a pi structure\n");
-               return -999;
-       }
-       
-       if(volume_info) {
-               volume_info->num = 0;
-       }
-       
-       for (pino = 0; pino <= cp->tcps[tileno].numpocs; pino++) {
-               while (pi_next(&pi[pino])) {
-                       if (pi[pino].layno < maxlayers) {
-                               e = t2_encode_packet(tile, &cp->tcps[tileno], &pi[pino], c, dest + len - c, volume_info, tileno, cp);
-                               /*opj_event_msg(t2->cinfo, EVT_INFO, "  t2_encode_packet: %d bytes coded\n",e);*/
-                               if (e == -999) {
-                                       break;
-                               } else {
-                                       c += e;
-                               }
-                               
-                               /* INDEX >> */
-                               if(volume_info && volume_info->index_on) {
-                                       if(volume_info->index_write) {
-                                               opj_tile_info_t *info_TL = &volume_info->tile[tileno];
-                                               opj_packet_info_t *info_PK = &info_TL->packet[volume_info->num];
-                                               if (!volume_info->num) {
-                                                       info_PK->start_pos = info_TL->end_header + 1;
-                                               } else {
-                                                       info_PK->start_pos = info_TL->packet[volume_info->num - 1].end_pos + 1;
-                                               }
-                                               info_PK->end_pos = info_PK->start_pos + e - 1;
-                                       }
-
-                                       volume_info->num++;
-                               }
-                               /* << INDEX */
-                       }
-               }
-       }
-
-       /* don't forget to release pi */
-       pi_destroy(pi, cp, tileno);
-       
-       if (e == -999) {
-               return e;
-       }
+int t2_encode_packets(opj_t2_t* t2, int tileno, opj_tcd_tile_t *tile,
+                      int maxlayers, unsigned char *dest, int len, opj_volume_info_t *volume_info)
+{
+    unsigned char *c = dest;
+    int e = 0;
+    opj_pi_iterator_t *pi = NULL;
+    int pino;
+
+    opj_volume_t *volume = t2->volume;
+    opj_cp_t *cp = t2->cp;
+
+    /* create a packet iterator */
+    pi = pi_create(volume, cp, tileno);
+    if (!pi) {
+        fprintf(stdout, "[ERROR] Failed to create a pi structure\n");
+        return -999;
+    }
+
+    if (volume_info) {
+        volume_info->num = 0;
+    }
+
+    for (pino = 0; pino <= cp->tcps[tileno].numpocs; pino++) {
+        while (pi_next(&pi[pino])) {
+            if (pi[pino].layno < maxlayers) {
+                e = t2_encode_packet(tile, &cp->tcps[tileno], &pi[pino], c, dest + len - c,
+                                     volume_info, tileno, cp);
+                /*opj_event_msg(t2->cinfo, EVT_INFO, "  t2_encode_packet: %d bytes coded\n",e);*/
+                if (e == -999) {
+                    break;
+                } else {
+                    c += e;
+                }
+
+                /* INDEX >> */
+                if (volume_info && volume_info->index_on) {
+                    if (volume_info->index_write) {
+                        opj_tile_info_t *info_TL = &volume_info->tile[tileno];
+                        opj_packet_info_t *info_PK = &info_TL->packet[volume_info->num];
+                        if (!volume_info->num) {
+                            info_PK->start_pos = info_TL->end_header + 1;
+                        } else {
+                            info_PK->start_pos = info_TL->packet[volume_info->num - 1].end_pos + 1;
+                        }
+                        info_PK->end_pos = info_PK->start_pos + e - 1;
+                    }
+
+                    volume_info->num++;
+                }
+                /* << INDEX */
+            }
+        }
+    }
+
+    /* don't forget to release pi */
+    pi_destroy(pi, cp, tileno);
+
+    if (e == -999) {
+        return e;
+    }
 
     return (c - dest);
 }
 
-int t2_decode_packets(opj_t2_t *t2, unsigned char *src, int len, int tileno, opj_tcd_tile_t *tile) {
-       unsigned char *c = src;
-       opj_pi_iterator_t *pi;
-       int pino, e = 0;
-       int n = 0,i;
-
-       opj_volume_t *volume = t2->volume;
-       opj_cp_t *cp = t2->cp;
-       
-       /* create a packet iterator */
-       pi = pi_create(volume, cp, tileno);
-       if(!pi) {
-               /* TODO: throw an error */
-               return -999;
-       }
-       
-       for (pino = 0; pino <= cp->tcps[tileno].numpocs; pino++) {
-               while (pi_next(&pi[pino])) {
-                       if ((cp->layer==0) || (cp->layer>=((pi[pino].layno)+1))) {
-                               e = t2_decode_packet(t2, c, src + len - c, tile, &cp->tcps[tileno], &pi[pino]);
-                       } else {
-                               e = 0;
-                       }
-                       
-                       /* progression in resolution */
-                       for (i = 0; i < 3; i++){
-                volume->comps[pi[pino].compno].resno_decoded[i] = (e > 0) ? int_max(pi[pino].resno, volume->comps[pi[pino].compno].resno_decoded[i]) : volume->comps[pi[pino].compno].resno_decoded[i];
-                       }
-                       n++;
-                       
-                       if (e == -999) {                /* ADD */
-                               break;
-                       } else {
-                               opj_event_msg(t2->cinfo, EVT_INFO, "  t2_decode_packet: %d bytes decoded\n",e);
-                               c += e;
-                       }
-               }
-       }
-
-       /* don't forget to release pi */
-       pi_destroy(pi, cp, tileno);
-       
-       if (e == -999) {
-               return e;
-       }
-       
+int t2_decode_packets(opj_t2_t *t2, unsigned char *src, int len, int tileno,
+                      opj_tcd_tile_t *tile)
+{
+    unsigned char *c = src;
+    opj_pi_iterator_t *pi;
+    int pino, e = 0;
+    int n = 0, i;
+
+    opj_volume_t *volume = t2->volume;
+    opj_cp_t *cp = t2->cp;
+
+    /* create a packet iterator */
+    pi = pi_create(volume, cp, tileno);
+    if (!pi) {
+        /* TODO: throw an error */
+        return -999;
+    }
+
+    for (pino = 0; pino <= cp->tcps[tileno].numpocs; pino++) {
+        while (pi_next(&pi[pino])) {
+            if ((cp->layer == 0) || (cp->layer >= ((pi[pino].layno) + 1))) {
+                e = t2_decode_packet(t2, c, src + len - c, tile, &cp->tcps[tileno], &pi[pino]);
+            } else {
+                e = 0;
+            }
+
+            /* progression in resolution */
+            for (i = 0; i < 3; i++) {
+                volume->comps[pi[pino].compno].resno_decoded[i] = (e > 0) ? int_max(
+                            pi[pino].resno, volume->comps[pi[pino].compno].resno_decoded[i]) :
+                        volume->comps[pi[pino].compno].resno_decoded[i];
+            }
+            n++;
+
+            if (e == -999) {        /* ADD */
+                break;
+            } else {
+                opj_event_msg(t2->cinfo, EVT_INFO, "  t2_decode_packet: %d bytes decoded\n", e);
+                c += e;
+            }
+        }
+    }
+
+    /* don't forget to release pi */
+    pi_destroy(pi, cp, tileno);
+
+    if (e == -999) {
+        return e;
+    }
+
     return (c - src);
 }
 
 /* ----------------------------------------------------------------------- */
 
-opj_t2_t* t2_create(opj_common_ptr cinfo, opj_volume_t *volume, opj_cp_t *cp) {
-       /* create the tcd structure */
-       opj_t2_t *t2 = (opj_t2_t*)opj_malloc(sizeof(opj_t2_t));
-       if(!t2) return NULL;
-       t2->cinfo = cinfo;
-       t2->volume = volume;
-       t2->cp = cp;
-
-       return t2;
+opj_t2_t* t2_create(opj_common_ptr cinfo, opj_volume_t *volume, opj_cp_t *cp)
+{
+    /* create the tcd structure */
+    opj_t2_t *t2 = (opj_t2_t*)opj_malloc(sizeof(opj_t2_t));
+    if (!t2) {
+        return NULL;
+    }
+    t2->cinfo = cinfo;
+    t2->volume = volume;
+    t2->cp = cp;
+
+    return t2;
 }
 
-void t2_destroy(opj_t2_t *t2) {
-       if(t2) {
-               opj_free(t2);
-       }
+void t2_destroy(opj_t2_t *t2)
+{
+    if (t2) {
+        opj_free(t2);
+    }
 }
 
index ee0b2d16b4b4ca2b3de2544a8cf00f8d5352cf4b..013a9f1ac59d29ce1848ea3b1f30518e0b67b6a3 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
 
 #include "opj_includes.h"
 
-void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_volume_t * vol) {
-       int tileno, compno, resno, bandno, precno, cblkno;
-
-       fprintf(fd, "volume {\n");
-       fprintf(fd, "  tw=%d, th=%d, tl=%d, x0=%d x1=%d y0=%d y1=%d z0=%d z1=%d\n", 
-               vol->tw, vol->th, vol->tl, tcd->volume->x0, tcd->volume->x1, tcd->volume->y0, tcd->volume->y1, tcd->volume->z0, tcd->volume->z1);
-
-       for (tileno = 0; tileno < vol->th * vol->tw * vol->tl; tileno++) {
-               opj_tcd_tile_t *tile = &tcd->tcd_volume->tiles[tileno];
-               fprintf(fd, "  tile {\n");
-               fprintf(fd, "    x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d, numcomps=%d\n",
-                       tile->x0, tile->y0, tile->z0, tile->x1, tile->y1, tile->z1, tile->numcomps);
-               for (compno = 0; compno < tile->numcomps; compno++) {
-                       opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-                       fprintf(fd, "    tilecomp %d {\n",compno);
-                       fprintf(fd,     "     x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d, numresx=%d, numresy=%d, numresz=%d\n",
-                               tilec->x0, tilec->y0, tilec->z0, tilec->x1, tilec->y1, tilec->z1, tilec->numresolution[0], tilec->numresolution[1], tilec->numresolution[2]);
-                       for (resno = 0; resno < tilec->numresolution[0]; resno++) {
-                               opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-                               fprintf(fd, "     res %d{\n",resno);
-                               fprintf(fd,"      x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d, pw=%d, ph=%d, pl=%d, numbands=%d\n",
-                                       res->x0, res->y0, res->z0, res->x1, res->y1, res->z1, res->prctno[0], res->prctno[1], res->prctno[2], res->numbands);
-                               for (bandno = 0; bandno < res->numbands; bandno++) {
-                                       opj_tcd_band_t *band = &res->bands[bandno];
-                                       fprintf(fd, "       band %d{\n", bandno);
-                                       fprintf(fd,     "                x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d, stepsize=%f, numbps=%d\n",
-                                               band->x0, band->y0, band->z0, band->x1, band->y1, band->z1, band->stepsize, band->numbps);
-                                       for (precno = 0; precno < (res->prctno[0] * res->prctno[1] * res->prctno[2]); precno++) {
-                                               opj_tcd_precinct_t *prec = &band->precincts[precno];
-                                               fprintf(fd, "             prec %d{\n",precno);
-                                               fprintf(fd,     "                  x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d, cw=%d, ch=%d, cl=%d,\n",
-                                                       prec->x0, prec->y0, prec->z0, prec->x1, prec->y1, prec->z1, prec->cblkno[0], prec->cblkno[1], prec->cblkno[2]);
-                                               for (cblkno = 0; cblkno < (prec->cblkno[0] * prec->cblkno[1] * prec->cblkno[2]); cblkno++) {
-                                                       opj_tcd_cblk_t *cblk = &prec->cblks[cblkno];
-                                                       fprintf(fd, "               cblk %d{\n",cblkno);
-                                                       fprintf(fd,     "                    x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d\n", cblk->x0, cblk->y0, cblk->z0, cblk->x1, cblk->y1, cblk->z1);
-                                                       fprintf(fd, "            }\n");
-                                               }
-                                               fprintf(fd, "          }\n");
-                                       }
-                                       fprintf(fd, "        }\n");
-                               }
-                               fprintf(fd, "      }\n");
-                       }
-                       fprintf(fd, "    }\n");
-               }
-               fprintf(fd, "  }\n");
-       }
-       fprintf(fd, "}\n");
+void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_volume_t * vol)
+{
+    int tileno, compno, resno, bandno, precno, cblkno;
+
+    fprintf(fd, "volume {\n");
+    fprintf(fd, "  tw=%d, th=%d, tl=%d, x0=%d x1=%d y0=%d y1=%d z0=%d z1=%d\n",
+            vol->tw, vol->th, vol->tl, tcd->volume->x0, tcd->volume->x1, tcd->volume->y0,
+            tcd->volume->y1, tcd->volume->z0, tcd->volume->z1);
+
+    for (tileno = 0; tileno < vol->th * vol->tw * vol->tl; tileno++) {
+        opj_tcd_tile_t *tile = &tcd->tcd_volume->tiles[tileno];
+        fprintf(fd, "  tile {\n");
+        fprintf(fd, "    x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d, numcomps=%d\n",
+                tile->x0, tile->y0, tile->z0, tile->x1, tile->y1, tile->z1, tile->numcomps);
+        for (compno = 0; compno < tile->numcomps; compno++) {
+            opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+            fprintf(fd, "    tilecomp %d {\n", compno);
+            fprintf(fd,
+                    "     x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d, numresx=%d, numresy=%d, numresz=%d\n",
+                    tilec->x0, tilec->y0, tilec->z0, tilec->x1, tilec->y1, tilec->z1,
+                    tilec->numresolution[0], tilec->numresolution[1], tilec->numresolution[2]);
+            for (resno = 0; resno < tilec->numresolution[0]; resno++) {
+                opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+                fprintf(fd, "     res %d{\n", resno);
+                fprintf(fd,
+                        "      x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d, pw=%d, ph=%d, pl=%d, numbands=%d\n",
+                        res->x0, res->y0, res->z0, res->x1, res->y1, res->z1, res->prctno[0],
+                        res->prctno[1], res->prctno[2], res->numbands);
+                for (bandno = 0; bandno < res->numbands; bandno++) {
+                    opj_tcd_band_t *band = &res->bands[bandno];
+                    fprintf(fd, "       band %d{\n", bandno);
+                    fprintf(fd,
+                            "           x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d, stepsize=%f, numbps=%d\n",
+                            band->x0, band->y0, band->z0, band->x1, band->y1, band->z1, band->stepsize,
+                            band->numbps);
+                    for (precno = 0; precno < (res->prctno[0] * res->prctno[1] * res->prctno[2]);
+                            precno++) {
+                        opj_tcd_precinct_t *prec = &band->precincts[precno];
+                        fprintf(fd, "            prec %d{\n", precno);
+                        fprintf(fd,
+                                "                 x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d, cw=%d, ch=%d, cl=%d,\n",
+                                prec->x0, prec->y0, prec->z0, prec->x1, prec->y1, prec->z1, prec->cblkno[0],
+                                prec->cblkno[1], prec->cblkno[2]);
+                        for (cblkno = 0; cblkno < (prec->cblkno[0] * prec->cblkno[1] * prec->cblkno[2]);
+                                cblkno++) {
+                            opj_tcd_cblk_t *cblk = &prec->cblks[cblkno];
+                            fprintf(fd, "                  cblk %d{\n", cblkno);
+                            fprintf(fd, "                   x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d\n", cblk->x0,
+                                    cblk->y0, cblk->z0, cblk->x1, cblk->y1, cblk->z1);
+                            fprintf(fd, "            }\n");
+                        }
+                        fprintf(fd, "          }\n");
+                    }
+                    fprintf(fd, "        }\n");
+                }
+                fprintf(fd, "      }\n");
+            }
+            fprintf(fd, "    }\n");
+        }
+        fprintf(fd, "  }\n");
+    }
+    fprintf(fd, "}\n");
 }
 
-static void tilec_dump(FILE *fd, opj_tcd_tilecomp_t *tilec) {
-
-       int i=0,k;
-       int datalen;
-       int *a;
-
-       fprintf(fd, "    tilecomp{\n");
-       fprintf(fd,     "     x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d, numresx=%d, numresy=%d, numresz=%d\n",
-               tilec->x0, tilec->y0, tilec->z0, tilec->x1, tilec->y1, tilec->z1, tilec->numresolution[0], tilec->numresolution[1], tilec->numresolution[2]);
-       fprintf(fd, "     data {\n");
-       datalen = (tilec->z1 - tilec->z0) * (tilec->y1 - tilec->y0) * (tilec->x1 - tilec->x0);
-       a = tilec->data;
-       for (k = 0; k < datalen; k++) {
-               if (!(k % tilec->x1)){
-                       fprintf(fd, "\n");
-               }
-               if (!(k % (tilec->y1 * tilec->x1))){
-                       fprintf(fd, "Slice %d\n",i++);
-               }
-               fprintf(fd," %d",a[k]);
-               
-               
-       }                       
-       fprintf(fd, "     }\n");
-       /*i=0;
-       fprintf(fd, "Slice %d\n");
-       if (tilec->prediction->prederr) {
-               fprintf(fd, "     prederror {\n");
-               a = tilec->prediction->prederr;
-               for (k = 0; k < datalen; k++) {
-                       fprintf(fd," %d",*(a++));
-                       if (!(k % (tilec->y1 - tilec->y0) * (tilec->x1 - tilec->x0))){
-                               fprintf(fd, "\n");fprintf(fd, "Slice %d\n",i++);
-                       }
-                       if (!(k % (tilec->x1 - tilec->x0))){
-                               fprintf(fd, "\n");
-                       }
-               }
-       }
-       fprintf(fd, "     }\n");*/
-       fprintf(fd, "}\n");
+static void tilec_dump(FILE *fd, opj_tcd_tilecomp_t *tilec)
+{
+
+    int i = 0, k;
+    int datalen;
+    int *a;
+
+    fprintf(fd, "    tilecomp{\n");
+    fprintf(fd,
+            "     x0=%d, y0=%d, z0=%d, x1=%d, y1=%d, z1=%d, numresx=%d, numresy=%d, numresz=%d\n",
+            tilec->x0, tilec->y0, tilec->z0, tilec->x1, tilec->y1, tilec->z1,
+            tilec->numresolution[0], tilec->numresolution[1], tilec->numresolution[2]);
+    fprintf(fd, "     data {\n");
+    datalen = (tilec->z1 - tilec->z0) * (tilec->y1 - tilec->y0) *
+              (tilec->x1 - tilec->x0);
+    a = tilec->data;
+    for (k = 0; k < datalen; k++) {
+        if (!(k % tilec->x1)) {
+            fprintf(fd, "\n");
+        }
+        if (!(k % (tilec->y1 * tilec->x1))) {
+            fprintf(fd, "Slice %d\n", i++);
+        }
+        fprintf(fd, " %d", a[k]);
+
+
+    }
+    fprintf(fd, "     }\n");
+    /*i=0;
+    fprintf(fd, "Slice %d\n");
+    if (tilec->prediction->prederr) {
+        fprintf(fd, "     prederror {\n");
+        a = tilec->prediction->prederr;
+        for (k = 0; k < datalen; k++) {
+            fprintf(fd," %d",*(a++));
+            if (!(k % (tilec->y1 - tilec->y0) * (tilec->x1 - tilec->x0))){
+                fprintf(fd, "\n");fprintf(fd, "Slice %d\n",i++);
+            }
+            if (!(k % (tilec->x1 - tilec->x0))){
+                fprintf(fd, "\n");
+            }
+        }
+    }
+    fprintf(fd, "     }\n");*/
+    fprintf(fd, "}\n");
 }
 
 /* ----------------------------------------------------------------------- */
@@ -135,1610 +152,1797 @@ static void tilec_dump(FILE *fd, opj_tcd_tilecomp_t *tilec) {
 /**
 Create a new TCD handle
 */
-opj_tcd_t* tcd_create(opj_common_ptr cinfo) {
-       /* create the tcd structure */
-       opj_tcd_t *tcd = (opj_tcd_t*)opj_malloc(sizeof(opj_tcd_t));
-       if(!tcd) return NULL;
-       tcd->cinfo = cinfo;
-       tcd->tcd_volume = (opj_tcd_volume_t*)opj_malloc(sizeof(opj_tcd_volume_t));
-       if(!tcd->tcd_volume) {
-               opj_free(tcd);
-               return NULL;
-       }
-
-       return tcd;
+opj_tcd_t* tcd_create(opj_common_ptr cinfo)
+{
+    /* create the tcd structure */
+    opj_tcd_t *tcd = (opj_tcd_t*)opj_malloc(sizeof(opj_tcd_t));
+    if (!tcd) {
+        return NULL;
+    }
+    tcd->cinfo = cinfo;
+    tcd->tcd_volume = (opj_tcd_volume_t*)opj_malloc(sizeof(opj_tcd_volume_t));
+    if (!tcd->tcd_volume) {
+        opj_free(tcd);
+        return NULL;
+    }
+
+    return tcd;
 }
 
 /**
 Destroy a previously created TCD handle
 */
-void tcd_destroy(opj_tcd_t *tcd) {
-       if(tcd) {
-               opj_free(tcd->tcd_volume);
-               opj_free(tcd);
-       }
+void tcd_destroy(opj_tcd_t *tcd)
+{
+    if (tcd) {
+        opj_free(tcd->tcd_volume);
+        opj_free(tcd);
+    }
 }
 
 /* ----------------------------------------------------------------------- */
-void tcd_malloc_encode(opj_tcd_t *tcd, opj_volume_t * volume, opj_cp_t * cp, int curtileno) {
-       int compno, resno, bandno, precno, cblkno, i, j;/*, k;*/
-
-       opj_tcd_tile_t          *tile = NULL;           /* pointer to tcd->tile */
-       opj_tcd_tilecomp_t      *tilec = NULL;          /* pointer to tcd->tilec */
-       opj_tcd_resolution_t    *res = NULL;            /* pointer to tcd->res */
-       opj_tcd_band_t          *band = NULL;           /* pointer to tcd->band */
-       opj_tcd_precinct_t      *prc = NULL;            /* pointer to tcd->prc */
-       opj_tcd_cblk_t          *cblk = NULL;           /* pointer to tcd->cblk */
-       opj_tcp_t               *tcp = &cp->tcps[curtileno];
-       int p,q,r;
-
-       tcd->volume = volume;
-       tcd->cp = cp;
-       tcd->tcd_volume->tw = cp->tw;
-       tcd->tcd_volume->th = cp->th;
-       tcd->tcd_volume->tl = cp->tl;
-       tcd->tcd_volume->tiles = (opj_tcd_tile_t *) opj_malloc(sizeof(opj_tcd_tile_t));
-       tcd->tile = tcd->tcd_volume->tiles;
-       tile = tcd->tile;
-       
-
-       /* p61 ISO/IEC IS15444-1 : 2002 */
-       /* curtileno --> raster scanned index of tiles */
-       /* p,q,r --> matricial index of tiles */
-       p = curtileno % cp->tw; 
-       q = curtileno / cp->tw; 
-       r = curtileno / (cp->tw * cp->th); /* extension to 3-D */
-
-       /* 4 borders of the tile rescale on the volume if necessary (B.3)*/
-       tile->x0 = int_max(cp->tx0 + p * cp->tdx, volume->x0);
-       tile->y0 = int_max(cp->ty0 + q * cp->tdy, volume->y0);
-       tile->z0 = int_max(cp->tz0 + r * cp->tdz, volume->z0);
-       tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, volume->x1);
-       tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, volume->y1);
-       tile->z1 = int_min(cp->tz0 + (r + 1) * cp->tdz, volume->z1);
-       tile->numcomps = volume->numcomps;
-
-       /* Modification of the RATE >> */
-       for (j = 0; j < tcp->numlayers; j++) {
-               if (tcp->rates[j] <= 1) {
-                       tcp->rates[j] = 0;
-               } else {
-                       float num = (float) (tile->numcomps * (tile->x1 - tile->x0) * (tile->y1 - tile->y0) * (tile->z1 - tile->z0) * volume->comps[0].prec);
-                       float den = (float) (8 * volume->comps[0].dx * volume->comps[0].dy * volume->comps[0].dz);
-                       den = tcp->rates[j] * den;
-                       tcp->rates[j] = (num + den - 1) / den;
-               }
-               /*tcp->rates[j] = tcp->rates[j] ? int_ceildiv(
-                       tile->numcomps * (tile->x1 - tile->x0) * (tile->y1 - tile->y0) * (tile->z1 - tile->z0) * volume->comps[0].prec,
+void tcd_malloc_encode(opj_tcd_t *tcd, opj_volume_t * volume, opj_cp_t * cp,
+                       int curtileno)
+{
+    int compno, resno, bandno, precno, cblkno, i, j;/*, k;*/
+
+    opj_tcd_tile_t      *tile = NULL;       /* pointer to tcd->tile */
+    opj_tcd_tilecomp_t  *tilec = NULL;      /* pointer to tcd->tilec */
+    opj_tcd_resolution_t    *res = NULL;        /* pointer to tcd->res */
+    opj_tcd_band_t      *band = NULL;       /* pointer to tcd->band */
+    opj_tcd_precinct_t  *prc = NULL;        /* pointer to tcd->prc */
+    opj_tcd_cblk_t      *cblk = NULL;       /* pointer to tcd->cblk */
+    opj_tcp_t       *tcp = &cp->tcps[curtileno];
+    int p, q, r;
+
+    tcd->volume = volume;
+    tcd->cp = cp;
+    tcd->tcd_volume->tw = cp->tw;
+    tcd->tcd_volume->th = cp->th;
+    tcd->tcd_volume->tl = cp->tl;
+    tcd->tcd_volume->tiles = (opj_tcd_tile_t *) opj_malloc(sizeof(opj_tcd_tile_t));
+    tcd->tile = tcd->tcd_volume->tiles;
+    tile = tcd->tile;
+
+
+    /* p61 ISO/IEC IS15444-1 : 2002 */
+    /* curtileno --> raster scanned index of tiles */
+    /* p,q,r --> matricial index of tiles */
+    p = curtileno % cp->tw;
+    q = curtileno / cp->tw;
+    r = curtileno / (cp->tw * cp->th); /* extension to 3-D */
+
+    /* 4 borders of the tile rescale on the volume if necessary (B.3)*/
+    tile->x0 = int_max(cp->tx0 + p * cp->tdx, volume->x0);
+    tile->y0 = int_max(cp->ty0 + q * cp->tdy, volume->y0);
+    tile->z0 = int_max(cp->tz0 + r * cp->tdz, volume->z0);
+    tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, volume->x1);
+    tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, volume->y1);
+    tile->z1 = int_min(cp->tz0 + (r + 1) * cp->tdz, volume->z1);
+    tile->numcomps = volume->numcomps;
+
+    /* Modification of the RATE >> */
+    for (j = 0; j < tcp->numlayers; j++) {
+        if (tcp->rates[j] <= 1) {
+            tcp->rates[j] = 0;
+        } else {
+            float num = (float)(tile->numcomps * (tile->x1 - tile->x0) *
+                                (tile->y1 - tile->y0) * (tile->z1 - tile->z0) * volume->comps[0].prec);
+            float den = (float)(8 * volume->comps[0].dx * volume->comps[0].dy *
+                                volume->comps[0].dz);
+            den = tcp->rates[j] * den;
+            tcp->rates[j] = (num + den - 1) / den;
+        }
+        /*tcp->rates[j] = tcp->rates[j] ? int_ceildiv(
+            tile->numcomps * (tile->x1 - tile->x0) * (tile->y1 - tile->y0) * (tile->z1 - tile->z0) * volume->comps[0].prec,
             (tcp->rates[j] * 8 * volume->comps[0].dx * volume->comps[0].dy * volume->comps[0].dz)) : 0;*/
-               if (tcp->rates[j]) {
-                       if (j && tcp->rates[j] < tcp->rates[j - 1] + 10) {
-                               tcp->rates[j] = tcp->rates[j - 1] + 20;
-                       } else if (!j && tcp->rates[j] < 30){
-                               tcp->rates[j] = 30;
-                       }
-               }
-       }
-       /* << Modification of the RATE */
-
-       tile->comps = (opj_tcd_tilecomp_t *) opj_malloc(volume->numcomps * sizeof(opj_tcd_tilecomp_t));
-       for (compno = 0; compno < tile->numcomps; compno++) {
-               opj_tccp_t *tccp = &tcp->tccps[compno];
-               int res_max;
-               int prevnumbands = 0;
-
-               /* opj_tcd_tilecomp_t *tilec=&tile->comps[compno]; */
-               tcd->tilec = &tile->comps[compno];
-               tilec = tcd->tilec;
-
-               /* border of each tile component (global) (B.3) */
-               tilec->x0 = int_ceildiv(tile->x0, volume->comps[compno].dx);
-               tilec->y0 = int_ceildiv(tile->y0, volume->comps[compno].dy);
-               tilec->z0 = int_ceildiv(tile->z0, volume->comps[compno].dz);
-               tilec->x1 = int_ceildiv(tile->x1, volume->comps[compno].dx);
-               tilec->y1 = int_ceildiv(tile->y1, volume->comps[compno].dy);
-               tilec->z1 = int_ceildiv(tile->z1, volume->comps[compno].dz);
-
-               tilec->data = (int *) opj_malloc((tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0) * (tilec->z1 - tilec->z0) * sizeof(int));
-               
-               res_max = 0;
-               for (i = 0;i < 3; i++){
-                       tilec->numresolution[i] = tccp->numresolution[i];
-                       /*Greater of 3 resolutions contains all information*/
-                       res_max = (tilec->numresolution[i] > res_max) ? tilec->numresolution[i] : res_max;
-               }
-               
-
-               tilec->resolutions = (opj_tcd_resolution_t *) opj_malloc(res_max * sizeof(opj_tcd_resolution_t));
-               for (resno = 0; resno < res_max; resno++) {
-                       
-                       int pdx, pdy, pdz;
-                       int tlprcxstart, tlprcystart, tlprczstart;
-                       int brprcxend, brprcyend, brprczend;
-                       int tlcbgxstart, tlcbgystart, tlcbgzstart;
-                       int brcbgxend, brcbgyend, brcbgzend;
-                       int cbgwidthexpn, cbgheightexpn, cbglengthexpn;
-                       int cblkwidthexpn, cblkheightexpn, cblklengthexpn;
-
-                       int diff = tccp->numresolution[0] - tccp->numresolution[2]; 
-                       int levelnox = tilec->numresolution[0] - 1 - resno; 
-                       int levelnoy = tilec->numresolution[1] - 1 - resno;
-                       int levelnoz = tilec->numresolution[2] - 1 - ((resno <= diff) ? 0 : (resno - diff));
-                               if (levelnoz < 0) levelnoz = 0;
-
-                       /* opj_tcd_resolution_t *res=&tilec->resolutions[resno]; */
-                       tcd->res = &tilec->resolutions[resno];
-                       res = tcd->res;
-                       
-                       /* border for each resolution level (global) (B.14)*/
-                       res->x0 = int_ceildivpow2(tilec->x0, levelnox);
-                       res->y0 = int_ceildivpow2(tilec->y0, levelnoy);
-                       res->z0 = int_ceildivpow2(tilec->z0, levelnoz);
-                       res->x1 = int_ceildivpow2(tilec->x1, levelnox);
-                       res->y1 = int_ceildivpow2(tilec->y1, levelnoy);
-                       res->z1 = int_ceildivpow2(tilec->z1, levelnoz);
-                       /*if (res->z1 < 0)fprintf(stdout,"Res: %d       %d/%d --> %d\n",resno,tilec->z1, levelnoz, int_ceildivpow2(tilec->z1, levelnoz));*/
-
-                       res->numbands = (resno == 0) ? 1 : (resno <= diff) ? 3 : 7; /* --> 3D */
-
-                       /* p. 30, table A-13, ISO/IEC IS154444-1 : 2002 */
-                       if (tccp->csty & J3D_CCP_CSTY_PRT) {
-                               pdx = tccp->prctsiz[0][resno];
-                               pdy = tccp->prctsiz[1][resno];
-                               pdz = tccp->prctsiz[2][resno];
-                       } else {
-                               pdx = 15;
-                               pdy = 15;
-                               pdz = 15;
-                       }
-                       
-                       /* p. 66, B.16, ISO/IEC IS15444-1 : 2002  */
-                       tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx;
-                       tlprcystart = int_floordivpow2(res->y0, pdy) << pdy;
-                       tlprczstart = int_floordivpow2(res->z0, pdz) << pdz;
-                       brprcxend = int_ceildivpow2(res->x1, pdx) << pdx;
-                       brprcyend = int_ceildivpow2(res->y1, pdy) << pdy;
-                       brprczend = int_ceildivpow2(res->z1, pdz) << pdz;
-                       
-                       res->prctno[0] = (brprcxend - tlprcxstart) >> pdx;
-                       res->prctno[1] = (brprcyend - tlprcystart) >> pdy;
-                       res->prctno[2] = (brprczend - tlprczstart) >> pdz;
-                               if (res->prctno[2] == 0) res->prctno[2] = 1;
-                               
-                       /* p. 67, B.17 & B.18, ISO/IEC IS15444-1 : 2002  */
-                       if (resno == 0) {
-                               tlcbgxstart = tlprcxstart;
-                               tlcbgystart = tlprcystart;
-                               tlcbgzstart = tlprczstart;
-                               brcbgxend = brprcxend;
-                               brcbgyend = brprcyend;
-                               brcbgzend = brprczend;
-                               cbgwidthexpn = pdx;
-                               cbgheightexpn = pdy;
-                               cbglengthexpn = pdz;
-                       } else {
-                               tlcbgxstart = int_ceildivpow2(tlprcxstart, 1);
-                               tlcbgystart = int_ceildivpow2(tlprcystart, 1);
-                               tlcbgzstart = int_ceildivpow2(tlprczstart, 1);
-                               brcbgxend = int_ceildivpow2(brprcxend, 1);
-                               brcbgyend = int_ceildivpow2(brprcyend, 1);
-                               brcbgzend = int_ceildivpow2(brprczend, 1);
-                               cbgwidthexpn = pdx - 1;
-                               cbgheightexpn = pdy - 1;
-                               cbglengthexpn = pdz - 1;
-                       }
-                       
-                       cblkwidthexpn = int_min(tccp->cblk[0], cbgwidthexpn); /*6*/
-                       cblkheightexpn = int_min(tccp->cblk[1], cbgheightexpn); /*6*/
-                       cblklengthexpn = int_min(tccp->cblk[2], cbglengthexpn); /*6*/
-                       
-                       res->bands = (opj_tcd_band_t *) opj_malloc(res->numbands * sizeof(opj_tcd_band_t));
-                       for (bandno = 0; bandno < res->numbands; bandno++) {
-                               int x0b, y0b, z0b, i;
-                               int gain, numbps;
-                               opj_stepsize_t *ss = NULL;
-
-                               tcd->band = &res->bands[bandno];
-                               band = tcd->band;
-
-                               band->bandno = (resno == 0) ? 0 : bandno + 1;
-                               /* Bandno:      0 - LLL         2 - LHL 
-                                                       1 - HLL         3 - HHL
-                                                       4 - LLH         6 - LHH
-                                                       5 - HLH         7 - HHH         */
-                               x0b = (band->bandno == 1) || (band->bandno == 3) || (band->bandno == 5 ) || (band->bandno == 7 ) ? 1 : 0; 
-                               y0b = (band->bandno == 2) || (band->bandno == 3) || (band->bandno == 6 ) || (band->bandno == 7 ) ? 1 : 0;
-                               z0b = (band->bandno == 4) || (band->bandno == 5) || (band->bandno == 6 ) || (band->bandno == 7 ) ? 1 : 0; 
-                               
-                               /* p. 65, B.15, ISO/IEC IS15444-1 : 2002  */
-                               if (band->bandno == 0) {
-                                       /* band border (global) */
-                                       band->x0 = int_ceildivpow2(tilec->x0, levelnox);
-                                       band->y0 = int_ceildivpow2(tilec->y0, levelnoy);
-                                       band->z0 = int_ceildivpow2(tilec->z0, levelnoz);
-                                       band->x1 = int_ceildivpow2(tilec->x1, levelnox);
-                                       band->y1 = int_ceildivpow2(tilec->y1, levelnoy);
-                                       band->z1 = int_ceildivpow2(tilec->z1, levelnoz);
-                               } else {
-                                       band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelnox) * x0b, levelnox + 1);
-                                       band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelnoy) * y0b, levelnoy + 1);
-                                       band->z0 = int_ceildivpow2(tilec->z0 - (1 << levelnoz) * z0b, (resno <= diff) ? levelnoz : levelnoz + 1);
-                                       band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelnox) * x0b, levelnox + 1);
-                                       band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelnoy) * y0b, levelnoy + 1);
-                                       band->z1 = int_ceildivpow2(tilec->z1 - (1 << levelnoz) * z0b, (resno <= diff) ? levelnoz : levelnoz + 1);
-                               }
-                               
-                               ss = &tccp->stepsizes[(resno == 0) ? 0 : (prevnumbands + bandno + 1)];
-                               if (bandno == (res->numbands - 1)) 
-                                       prevnumbands += (resno == 0) ? 0 : res->numbands;
-                               gain = dwt_getgain(band->bandno,tccp->reversible);                                      
-                               numbps = volume->comps[compno].prec + gain;
-                               band->stepsize = (float)((1.0 + ss->mant / 2048.0) * pow(2.0, numbps - ss->expn));
-                               band->numbps = ss->expn + tccp->numgbits - 1;   /* WHY -1 ? */
-                               
-                               band->precincts = (opj_tcd_precinct_t *) opj_malloc((res->prctno[0] * res->prctno[1] * res->prctno[2]) * sizeof(opj_tcd_precinct_t));
-                               
-                               for (i = 0; i < (res->prctno[0] * res->prctno[1] * res->prctno[2]); i++) {
-                                       band->precincts[i].imsbtree = NULL;
-                                       band->precincts[i].incltree = NULL;
-                               }
-
-                               for (precno = 0; precno < (res->prctno[0] * res->prctno[1] * res->prctno[2]); precno++) {
-                                       int tlcblkxstart, tlcblkystart, tlcblkzstart, brcblkxend, brcblkyend, brcblkzend;
-                                       int cbgxstart, cbgystart, cbgzstart, cbgxend, cbgyend, cbgzend;
-
-                                       cbgxstart = tlcbgxstart + (precno % res->prctno[0]) * (1 << cbgwidthexpn);
-                                       cbgystart = tlcbgystart + ((precno % (res->prctno[0] * res->prctno[1])) / res->prctno[0]) * (1 << cbgheightexpn);
-                                       cbgzstart = tlcbgzstart + (precno / (res->prctno[0] * res->prctno[1])) * (1 << cbglengthexpn);
-                                       cbgxend = cbgxstart + (1 << cbgwidthexpn);
-                                       cbgyend = cbgystart + (1 << cbgheightexpn);
-                                       cbgzend = cbgzstart + (1 << cbglengthexpn);
-                                       
-                                       tcd->prc = &band->precincts[precno];
-                                       prc = tcd->prc;
-
-                                       /* precinct size (global) */
-                                       prc->x0 = int_max(cbgxstart, band->x0);
-                                       prc->y0 = int_max(cbgystart, band->y0);
-                                       prc->z0 = int_max(cbgzstart, band->z0);
-                                       prc->x1 = int_min(cbgxend, band->x1);
-                                       prc->y1 = int_min(cbgyend, band->y1);
-                                       prc->z1 = int_min(cbgzend, band->z1);
-                                       
-                                       tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn;
-                                       tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn;
-                                       tlcblkzstart = int_floordivpow2(prc->z0, cblklengthexpn) << cblklengthexpn;
-                                       brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn;
-                                       brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn;
-                                       brcblkzend = int_ceildivpow2(prc->z1, cblklengthexpn) << cblklengthexpn;
-                                       prc->cblkno[0] = (brcblkxend - tlcblkxstart) >> cblkwidthexpn;
-                                       prc->cblkno[1] = (brcblkyend - tlcblkystart) >> cblkheightexpn;
-                                       prc->cblkno[2] = (brcblkzend - tlcblkzstart) >> cblklengthexpn;
-                                       prc->cblkno[2] = (prc->cblkno[2] == 0) ? 1 : prc->cblkno[2];
-
-                                       prc->cblks = (opj_tcd_cblk_t *) opj_malloc((prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]) * sizeof(opj_tcd_cblk_t));
-                                       prc->incltree = tgt_create(prc->cblkno[0], prc->cblkno[1], prc->cblkno[2]);
-                                       prc->imsbtree = tgt_create(prc->cblkno[0], prc->cblkno[1], prc->cblkno[2]);
-                                       /*tgt_tree_dump(stdout,prc->incltree);*/
-                                       for (cblkno = 0; cblkno < (prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]); cblkno++) {
-                                               int cblkxstart = tlcblkxstart + (cblkno % prc->cblkno[0]) * (1 << cblkwidthexpn);
-                                               int cblkystart = tlcblkystart + ((cblkno % (prc->cblkno[0] * prc->cblkno[1])) / prc->cblkno[0]) * (1 << cblkheightexpn);
-                                               int cblkzstart = tlcblkzstart + (cblkno / (prc->cblkno[0] * prc->cblkno[1])) * (1 << cblklengthexpn);
-                                               int cblkxend = cblkxstart + (1 << cblkwidthexpn);
-                                               int cblkyend = cblkystart + (1 << cblkheightexpn);
-                                               int cblkzend = cblkzstart + (1 << cblklengthexpn);
-                                               int prec = ((tilec->bpp > 16) ? 3 : ((tilec->bpp > 8) ? 2 : 1));
-                                               
-                                               tcd->cblk = &prc->cblks[cblkno];
-                                               cblk = tcd->cblk;
-
-                                               /* code-block size (global) */
-                                               cblk->x0 = int_max(cblkxstart, prc->x0);
-                                               cblk->y0 = int_max(cblkystart, prc->y0);
-                                               cblk->z0 = int_max(cblkzstart, prc->z0);
-                                               cblk->x1 = int_min(cblkxend, prc->x1);
-                                               cblk->y1 = int_min(cblkyend, prc->y1);
-                                               cblk->z1 = int_min(cblkzend, prc->z1);
-                                       }                                       
-                               }
-                       }
-               }
-       }
-       /*tcd_dump(stdout, tcd, tcd->tcd_volume);*/
+        if (tcp->rates[j]) {
+            if (j && tcp->rates[j] < tcp->rates[j - 1] + 10) {
+                tcp->rates[j] = tcp->rates[j - 1] + 20;
+            } else if (!j && tcp->rates[j] < 30) {
+                tcp->rates[j] = 30;
+            }
+        }
+    }
+    /* << Modification of the RATE */
+
+    tile->comps = (opj_tcd_tilecomp_t *) opj_malloc(volume->numcomps * sizeof(
+                      opj_tcd_tilecomp_t));
+    for (compno = 0; compno < tile->numcomps; compno++) {
+        opj_tccp_t *tccp = &tcp->tccps[compno];
+        int res_max;
+        int prevnumbands = 0;
+
+        /* opj_tcd_tilecomp_t *tilec=&tile->comps[compno]; */
+        tcd->tilec = &tile->comps[compno];
+        tilec = tcd->tilec;
+
+        /* border of each tile component (global) (B.3) */
+        tilec->x0 = int_ceildiv(tile->x0, volume->comps[compno].dx);
+        tilec->y0 = int_ceildiv(tile->y0, volume->comps[compno].dy);
+        tilec->z0 = int_ceildiv(tile->z0, volume->comps[compno].dz);
+        tilec->x1 = int_ceildiv(tile->x1, volume->comps[compno].dx);
+        tilec->y1 = int_ceildiv(tile->y1, volume->comps[compno].dy);
+        tilec->z1 = int_ceildiv(tile->z1, volume->comps[compno].dz);
+
+        tilec->data = (int *) opj_malloc((tilec->x1 - tilec->x0) *
+                                         (tilec->y1 - tilec->y0) * (tilec->z1 - tilec->z0) * sizeof(int));
+
+        res_max = 0;
+        for (i = 0; i < 3; i++) {
+            tilec->numresolution[i] = tccp->numresolution[i];
+            /*Greater of 3 resolutions contains all information*/
+            res_max = (tilec->numresolution[i] > res_max) ? tilec->numresolution[i] :
+                      res_max;
+        }
+
+
+        tilec->resolutions = (opj_tcd_resolution_t *) opj_malloc(res_max * sizeof(
+                                 opj_tcd_resolution_t));
+        for (resno = 0; resno < res_max; resno++) {
+
+            int pdx, pdy, pdz;
+            int tlprcxstart, tlprcystart, tlprczstart;
+            int brprcxend, brprcyend, brprczend;
+            int tlcbgxstart, tlcbgystart, tlcbgzstart;
+            int brcbgxend, brcbgyend, brcbgzend;
+            int cbgwidthexpn, cbgheightexpn, cbglengthexpn;
+            int cblkwidthexpn, cblkheightexpn, cblklengthexpn;
+
+            int diff = tccp->numresolution[0] - tccp->numresolution[2];
+            int levelnox = tilec->numresolution[0] - 1 - resno;
+            int levelnoy = tilec->numresolution[1] - 1 - resno;
+            int levelnoz = tilec->numresolution[2] - 1 - ((resno <= diff) ? 0 :
+                           (resno - diff));
+            if (levelnoz < 0) {
+                levelnoz = 0;
+            }
+
+            /* opj_tcd_resolution_t *res=&tilec->resolutions[resno]; */
+            tcd->res = &tilec->resolutions[resno];
+            res = tcd->res;
+
+            /* border for each resolution level (global) (B.14)*/
+            res->x0 = int_ceildivpow2(tilec->x0, levelnox);
+            res->y0 = int_ceildivpow2(tilec->y0, levelnoy);
+            res->z0 = int_ceildivpow2(tilec->z0, levelnoz);
+            res->x1 = int_ceildivpow2(tilec->x1, levelnox);
+            res->y1 = int_ceildivpow2(tilec->y1, levelnoy);
+            res->z1 = int_ceildivpow2(tilec->z1, levelnoz);
+            /*if (res->z1 < 0)fprintf(stdout,"Res: %d       %d/%d --> %d\n",resno,tilec->z1, levelnoz, int_ceildivpow2(tilec->z1, levelnoz));*/
+
+            res->numbands = (resno == 0) ? 1 : (resno <= diff) ? 3 : 7; /* --> 3D */
+
+            /* p. 30, table A-13, ISO/IEC IS154444-1 : 2002 */
+            if (tccp->csty & J3D_CCP_CSTY_PRT) {
+                pdx = tccp->prctsiz[0][resno];
+                pdy = tccp->prctsiz[1][resno];
+                pdz = tccp->prctsiz[2][resno];
+            } else {
+                pdx = 15;
+                pdy = 15;
+                pdz = 15;
+            }
+
+            /* p. 66, B.16, ISO/IEC IS15444-1 : 2002  */
+            tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx;
+            tlprcystart = int_floordivpow2(res->y0, pdy) << pdy;
+            tlprczstart = int_floordivpow2(res->z0, pdz) << pdz;
+            brprcxend = int_ceildivpow2(res->x1, pdx) << pdx;
+            brprcyend = int_ceildivpow2(res->y1, pdy) << pdy;
+            brprczend = int_ceildivpow2(res->z1, pdz) << pdz;
+
+            res->prctno[0] = (brprcxend - tlprcxstart) >> pdx;
+            res->prctno[1] = (brprcyend - tlprcystart) >> pdy;
+            res->prctno[2] = (brprczend - tlprczstart) >> pdz;
+            if (res->prctno[2] == 0) {
+                res->prctno[2] = 1;
+            }
+
+            /* p. 67, B.17 & B.18, ISO/IEC IS15444-1 : 2002  */
+            if (resno == 0) {
+                tlcbgxstart = tlprcxstart;
+                tlcbgystart = tlprcystart;
+                tlcbgzstart = tlprczstart;
+                brcbgxend = brprcxend;
+                brcbgyend = brprcyend;
+                brcbgzend = brprczend;
+                cbgwidthexpn = pdx;
+                cbgheightexpn = pdy;
+                cbglengthexpn = pdz;
+            } else {
+                tlcbgxstart = int_ceildivpow2(tlprcxstart, 1);
+                tlcbgystart = int_ceildivpow2(tlprcystart, 1);
+                tlcbgzstart = int_ceildivpow2(tlprczstart, 1);
+                brcbgxend = int_ceildivpow2(brprcxend, 1);
+                brcbgyend = int_ceildivpow2(brprcyend, 1);
+                brcbgzend = int_ceildivpow2(brprczend, 1);
+                cbgwidthexpn = pdx - 1;
+                cbgheightexpn = pdy - 1;
+                cbglengthexpn = pdz - 1;
+            }
+
+            cblkwidthexpn = int_min(tccp->cblk[0], cbgwidthexpn); /*6*/
+            cblkheightexpn = int_min(tccp->cblk[1], cbgheightexpn); /*6*/
+            cblklengthexpn = int_min(tccp->cblk[2], cbglengthexpn); /*6*/
+
+            res->bands = (opj_tcd_band_t *) opj_malloc(res->numbands * sizeof(
+                             opj_tcd_band_t));
+            for (bandno = 0; bandno < res->numbands; bandno++) {
+                int x0b, y0b, z0b, i;
+                int gain, numbps;
+                opj_stepsize_t *ss = NULL;
+
+                tcd->band = &res->bands[bandno];
+                band = tcd->band;
+
+                band->bandno = (resno == 0) ? 0 : bandno + 1;
+                /* Bandno:  0 - LLL     2 - LHL
+                            1 - HLL     3 - HHL
+                            4 - LLH     6 - LHH
+                            5 - HLH     7 - HHH     */
+                x0b = (band->bandno == 1) || (band->bandno == 3) || (band->bandno == 5) ||
+                      (band->bandno == 7) ? 1 : 0;
+                y0b = (band->bandno == 2) || (band->bandno == 3) || (band->bandno == 6) ||
+                      (band->bandno == 7) ? 1 : 0;
+                z0b = (band->bandno == 4) || (band->bandno == 5) || (band->bandno == 6) ||
+                      (band->bandno == 7) ? 1 : 0;
+
+                /* p. 65, B.15, ISO/IEC IS15444-1 : 2002  */
+                if (band->bandno == 0) {
+                    /* band border (global) */
+                    band->x0 = int_ceildivpow2(tilec->x0, levelnox);
+                    band->y0 = int_ceildivpow2(tilec->y0, levelnoy);
+                    band->z0 = int_ceildivpow2(tilec->z0, levelnoz);
+                    band->x1 = int_ceildivpow2(tilec->x1, levelnox);
+                    band->y1 = int_ceildivpow2(tilec->y1, levelnoy);
+                    band->z1 = int_ceildivpow2(tilec->z1, levelnoz);
+                } else {
+                    band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelnox) * x0b, levelnox + 1);
+                    band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelnoy) * y0b, levelnoy + 1);
+                    band->z0 = int_ceildivpow2(tilec->z0 - (1 << levelnoz) * z0b,
+                                               (resno <= diff) ? levelnoz : levelnoz + 1);
+                    band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelnox) * x0b, levelnox + 1);
+                    band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelnoy) * y0b, levelnoy + 1);
+                    band->z1 = int_ceildivpow2(tilec->z1 - (1 << levelnoz) * z0b,
+                                               (resno <= diff) ? levelnoz : levelnoz + 1);
+                }
+
+                ss = &tccp->stepsizes[(resno == 0) ? 0 : (prevnumbands + bandno + 1)];
+                if (bandno == (res->numbands - 1)) {
+                    prevnumbands += (resno == 0) ? 0 : res->numbands;
+                }
+                gain = dwt_getgain(band->bandno, tccp->reversible);
+                numbps = volume->comps[compno].prec + gain;
+                band->stepsize = (float)((1.0 + ss->mant / 2048.0) * pow(2.0,
+                                         numbps - ss->expn));
+                band->numbps = ss->expn + tccp->numgbits - 1;   /* WHY -1 ? */
+
+                band->precincts = (opj_tcd_precinct_t *) opj_malloc((res->prctno[0] *
+                                  res->prctno[1] * res->prctno[2]) * sizeof(opj_tcd_precinct_t));
+
+                for (i = 0; i < (res->prctno[0] * res->prctno[1] * res->prctno[2]); i++) {
+                    band->precincts[i].imsbtree = NULL;
+                    band->precincts[i].incltree = NULL;
+                }
+
+                for (precno = 0; precno < (res->prctno[0] * res->prctno[1] * res->prctno[2]);
+                        precno++) {
+                    int tlcblkxstart, tlcblkystart, tlcblkzstart, brcblkxend, brcblkyend,
+                        brcblkzend;
+                    int cbgxstart, cbgystart, cbgzstart, cbgxend, cbgyend, cbgzend;
+
+                    cbgxstart = tlcbgxstart + (precno % res->prctno[0]) * (1 << cbgwidthexpn);
+                    cbgystart = tlcbgystart + ((precno % (res->prctno[0] * res->prctno[1])) /
+                                               res->prctno[0]) * (1 << cbgheightexpn);
+                    cbgzstart = tlcbgzstart + (precno / (res->prctno[0] * res->prctno[1])) *
+                                (1 << cbglengthexpn);
+                    cbgxend = cbgxstart + (1 << cbgwidthexpn);
+                    cbgyend = cbgystart + (1 << cbgheightexpn);
+                    cbgzend = cbgzstart + (1 << cbglengthexpn);
+
+                    tcd->prc = &band->precincts[precno];
+                    prc = tcd->prc;
+
+                    /* precinct size (global) */
+                    prc->x0 = int_max(cbgxstart, band->x0);
+                    prc->y0 = int_max(cbgystart, band->y0);
+                    prc->z0 = int_max(cbgzstart, band->z0);
+                    prc->x1 = int_min(cbgxend, band->x1);
+                    prc->y1 = int_min(cbgyend, band->y1);
+                    prc->z1 = int_min(cbgzend, band->z1);
+
+                    tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn;
+                    tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn;
+                    tlcblkzstart = int_floordivpow2(prc->z0, cblklengthexpn) << cblklengthexpn;
+                    brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn;
+                    brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn;
+                    brcblkzend = int_ceildivpow2(prc->z1, cblklengthexpn) << cblklengthexpn;
+                    prc->cblkno[0] = (brcblkxend - tlcblkxstart) >> cblkwidthexpn;
+                    prc->cblkno[1] = (brcblkyend - tlcblkystart) >> cblkheightexpn;
+                    prc->cblkno[2] = (brcblkzend - tlcblkzstart) >> cblklengthexpn;
+                    prc->cblkno[2] = (prc->cblkno[2] == 0) ? 1 : prc->cblkno[2];
+
+                    prc->cblks = (opj_tcd_cblk_t *) opj_malloc((prc->cblkno[0] * prc->cblkno[1] *
+                                 prc->cblkno[2]) * sizeof(opj_tcd_cblk_t));
+                    prc->incltree = tgt_create(prc->cblkno[0], prc->cblkno[1], prc->cblkno[2]);
+                    prc->imsbtree = tgt_create(prc->cblkno[0], prc->cblkno[1], prc->cblkno[2]);
+                    /*tgt_tree_dump(stdout,prc->incltree);*/
+                    for (cblkno = 0; cblkno < (prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]);
+                            cblkno++) {
+                        int cblkxstart = tlcblkxstart + (cblkno % prc->cblkno[0]) *
+                                         (1 << cblkwidthexpn);
+                        int cblkystart = tlcblkystart + ((cblkno % (prc->cblkno[0] * prc->cblkno[1])) /
+                                                         prc->cblkno[0]) * (1 << cblkheightexpn);
+                        int cblkzstart = tlcblkzstart + (cblkno / (prc->cblkno[0] * prc->cblkno[1])) *
+                                         (1 << cblklengthexpn);
+                        int cblkxend = cblkxstart + (1 << cblkwidthexpn);
+                        int cblkyend = cblkystart + (1 << cblkheightexpn);
+                        int cblkzend = cblkzstart + (1 << cblklengthexpn);
+                        int prec = ((tilec->bpp > 16) ? 3 : ((tilec->bpp > 8) ? 2 : 1));
+
+                        tcd->cblk = &prc->cblks[cblkno];
+                        cblk = tcd->cblk;
+
+                        /* code-block size (global) */
+                        cblk->x0 = int_max(cblkxstart, prc->x0);
+                        cblk->y0 = int_max(cblkystart, prc->y0);
+                        cblk->z0 = int_max(cblkzstart, prc->z0);
+                        cblk->x1 = int_min(cblkxend, prc->x1);
+                        cblk->y1 = int_min(cblkyend, prc->y1);
+                        cblk->z1 = int_min(cblkzend, prc->z1);
+                    }
+                }
+            }
+        }
+    }
+    /*tcd_dump(stdout, tcd, tcd->tcd_volume);*/
 
 }
-void tcd_init_encode(opj_tcd_t *tcd, opj_volume_t * volume, opj_cp_t * cp, int curtileno) {
-       int compno, resno, bandno, precno, cblkno;
-       int j, p, q, r;
-
-       opj_tcd_tile_t          *tile = NULL;           /* pointer to tcd->tile */
-       opj_tcd_tilecomp_t      *tilec = NULL;          /* pointer to tcd->tilec */
-       opj_tcd_resolution_t    *res = NULL;    /* pointer to tcd->res */
-       opj_tcd_band_t          *band = NULL;           /* pointer to tcd->band */
-       opj_tcd_precinct_t      *prc = NULL;            /* pointer to tcd->prc */
-       opj_tcd_cblk_t          *cblk = NULL;           /* pointer to tcd->cblk */
-       opj_tcp_t *tcp = &cp->tcps[curtileno];
-
-       tcd->tile = tcd->tcd_volume->tiles;
-       tile = tcd->tile;
-
-       /* p61 ISO/IEC IS15444-1 : 2002 */
-       /* curtileno --> raster scanned index of tiles */
-       /* p,q,r --> matricial index of tiles */
-       p = curtileno % cp->tw; 
-       q = curtileno / cp->tw; 
-       r = curtileno / (cp->tw * cp->th); /* extension to 3-D */
-       
-       /* 4 borders of the tile rescale on the volume if necessary (B.3)*/
-       tile->x0 = int_max(cp->tx0 + p * cp->tdx, volume->x0);
-       tile->y0 = int_max(cp->ty0 + q * cp->tdy, volume->y0);
-       tile->z0 = int_max(cp->tz0 + r * cp->tdz, volume->z0);
-       tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, volume->x1);
-       tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, volume->y1);
-       tile->z1 = int_min(cp->tz0 + (r + 1) * cp->tdz, volume->z1);
-       tile->numcomps = volume->numcomps;
-
-       /* Modification of the RATE >> */
-       for (j = 0; j < tcp->numlayers; j++) {
-               if (tcp->rates[j] <= 1) {
-                       tcp->rates[j] = 0;
-               } else {
-                       float num = (float) (tile->numcomps * (tile->x1 - tile->x0) * (tile->y1 - tile->y0) * (tile->z1 - tile->z0) * volume->comps[0].prec);
-                       float den = (float) (8 * volume->comps[0].dx * volume->comps[0].dy * volume->comps[0].dz);
-                       den = tcp->rates[j] * den;
-                       tcp->rates[j] = (num + den - 1) / den;
-               }
-               /*tcp->rates[j] = tcp->rates[j] ? int_ceildiv(
-                       tile->numcomps * (tile->x1 - tile->x0) * (tile->y1 - tile->y0) * (tile->z1 - tile->z0) * volume->comps[0].prec,
+void tcd_init_encode(opj_tcd_t *tcd, opj_volume_t * volume, opj_cp_t * cp,
+                     int curtileno)
+{
+    int compno, resno, bandno, precno, cblkno;
+    int j, p, q, r;
+
+    opj_tcd_tile_t      *tile = NULL;       /* pointer to tcd->tile */
+    opj_tcd_tilecomp_t  *tilec = NULL;      /* pointer to tcd->tilec */
+    opj_tcd_resolution_t    *res = NULL;    /* pointer to tcd->res */
+    opj_tcd_band_t      *band = NULL;       /* pointer to tcd->band */
+    opj_tcd_precinct_t  *prc = NULL;        /* pointer to tcd->prc */
+    opj_tcd_cblk_t      *cblk = NULL;       /* pointer to tcd->cblk */
+    opj_tcp_t *tcp = &cp->tcps[curtileno];
+
+    tcd->tile = tcd->tcd_volume->tiles;
+    tile = tcd->tile;
+
+    /* p61 ISO/IEC IS15444-1 : 2002 */
+    /* curtileno --> raster scanned index of tiles */
+    /* p,q,r --> matricial index of tiles */
+    p = curtileno % cp->tw;
+    q = curtileno / cp->tw;
+    r = curtileno / (cp->tw * cp->th); /* extension to 3-D */
+
+    /* 4 borders of the tile rescale on the volume if necessary (B.3)*/
+    tile->x0 = int_max(cp->tx0 + p * cp->tdx, volume->x0);
+    tile->y0 = int_max(cp->ty0 + q * cp->tdy, volume->y0);
+    tile->z0 = int_max(cp->tz0 + r * cp->tdz, volume->z0);
+    tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, volume->x1);
+    tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, volume->y1);
+    tile->z1 = int_min(cp->tz0 + (r + 1) * cp->tdz, volume->z1);
+    tile->numcomps = volume->numcomps;
+
+    /* Modification of the RATE >> */
+    for (j = 0; j < tcp->numlayers; j++) {
+        if (tcp->rates[j] <= 1) {
+            tcp->rates[j] = 0;
+        } else {
+            float num = (float)(tile->numcomps * (tile->x1 - tile->x0) *
+                                (tile->y1 - tile->y0) * (tile->z1 - tile->z0) * volume->comps[0].prec);
+            float den = (float)(8 * volume->comps[0].dx * volume->comps[0].dy *
+                                volume->comps[0].dz);
+            den = tcp->rates[j] * den;
+            tcp->rates[j] = (num + den - 1) / den;
+        }
+        /*tcp->rates[j] = tcp->rates[j] ? int_ceildiv(
+            tile->numcomps * (tile->x1 - tile->x0) * (tile->y1 - tile->y0) * (tile->z1 - tile->z0) * volume->comps[0].prec,
             (tcp->rates[j] * 8 * volume->comps[0].dx * volume->comps[0].dy * volume->comps[0].dz)) : 0;*/
-               if (tcp->rates[j]) {
-                       if (j && tcp->rates[j] < tcp->rates[j - 1] + 10) {
-                               tcp->rates[j] = tcp->rates[j - 1] + 20;
-                       } else if (!j && tcp->rates[j] < 30){
-                               tcp->rates[j] = 30;
-                       }
-               }
-       }
-       /* << Modification of the RATE */
-
-       for (compno = 0; compno < tile->numcomps; compno++) {
-               opj_tccp_t *tccp = &tcp->tccps[compno];
-               int res_max, i;
-               int prevnumbands = 0;
-
-               /* opj_tcd_tilecomp_t *tilec=&tile->comps[compno]; */
-               tcd->tilec = &tile->comps[compno];
-               tilec = tcd->tilec;
-
-               /* border of each tile component (global) (B.3) */
-               tilec->x0 = int_ceildiv(tile->x0, volume->comps[compno].dx);
-               tilec->y0 = int_ceildiv(tile->y0, volume->comps[compno].dy);
-               tilec->z0 = int_ceildiv(tile->z0, volume->comps[compno].dz);
-               tilec->x1 = int_ceildiv(tile->x1, volume->comps[compno].dx);
-               tilec->y1 = int_ceildiv(tile->y1, volume->comps[compno].dy);
-               tilec->z1 = int_ceildiv(tile->z1, volume->comps[compno].dz);
-
-               tilec->data = (int *) opj_malloc((tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0) * (tilec->z1 - tilec->z0) * sizeof(int));
-               
-               res_max = 0;
-               for (i = 0;i < 3; i++){
-                       tilec->numresolution[i] = tccp->numresolution[i];
-                       /*Greater of 3 resolutions contains all information*/
-                       res_max = (tilec->numresolution[i] > res_max) ? tilec->numresolution[i] : res_max;
-               }
-
-               tilec->resolutions = (opj_tcd_resolution_t *) opj_malloc(res_max * sizeof(opj_tcd_resolution_t));
-               for (resno = 0; resno < res_max; resno++) {
-                       int pdx, pdy, pdz;
-                       int tlprcxstart, tlprcystart, tlprczstart, brprcxend, brprcyend, brprczend;
-                       int tlcbgxstart, tlcbgystart, tlcbgzstart, brcbgxend, brcbgyend, brcbgzend;
-                       int cbgwidthexpn, cbgheightexpn, cbglengthexpn;
-                       int cblkwidthexpn, cblkheightexpn, cblklengthexpn;
-                       
-                       int levelnox = tilec->numresolution[0] - 1 - resno; 
-                       int levelnoy = tilec->numresolution[1] - 1 - resno;
-                       int diff = tccp->numresolution[0] - tccp->numresolution[2]; 
-                       int levelnoz = tilec->numresolution[2] - 1 - ((resno <= diff) ? 0 : (resno - diff));
-                               if (levelnoz < 0) levelnoz = 0;
-
-                       tcd->res = &tilec->resolutions[resno];
-                       res = tcd->res;
-                       
-                       /* border for each resolution level (global) (B.14)*/
-                       res->x0 = int_ceildivpow2(tilec->x0, levelnox);
-                       res->y0 = int_ceildivpow2(tilec->y0, levelnoy);
-                       res->z0 = int_ceildivpow2(tilec->z0, levelnoz);
-                       res->x1 = int_ceildivpow2(tilec->x1, levelnox);
-                       res->y1 = int_ceildivpow2(tilec->y1, levelnoy);
-                       res->z1 = int_ceildivpow2(tilec->z1, levelnoz);
-
-                       /* res->numbands = resno == 0 ? 1 : 3; *//* --> 2D */
-
-                       res->numbands = (resno == 0) ? 1 : (resno <= diff) ? 3 : 7; /* --> 3D */
-
-                       /* p. 30, table A-13, ISO/IEC IS154444-1 : 2002 */                      
-                       if (tccp->csty & J3D_CCP_CSTY_PRT) {
-                               pdx = tccp->prctsiz[0][resno];
-                               pdy = tccp->prctsiz[1][resno];
-                               pdz = tccp->prctsiz[2][resno];
-                       } else {
-                               pdx = 15;
-                               pdy = 15;
-                               pdz = 15;
-                       }
-                       /* p. 66, B.16, ISO/IEC IS15444-1 : 2002  */
-                       tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx;
-                       tlprcystart = int_floordivpow2(res->y0, pdy) << pdy;
-                       tlprczstart = int_floordivpow2(res->z0, pdz) << pdz;
-                       brprcxend = int_ceildivpow2(res->x1, pdx) << pdx;
-                       brprcyend = int_ceildivpow2(res->y1, pdy) << pdy;
-                       brprczend = int_ceildivpow2(res->z1, pdz) << pdz;
-                       
-                       res->prctno[0] = (brprcxend - tlprcxstart) >> pdx;
-                       res->prctno[1] = (brprcyend - tlprcystart) >> pdy;
-                       res->prctno[2] = (brprczend - tlprczstart) >> pdz;
-                       if (res->prctno[2] == 0) res->prctno[2] = 1;
-
-                       /* p. 67, B.17 & B.18, ISO/IEC IS15444-1 : 2002  */
-                       if (resno == 0) {
-                               tlcbgxstart = tlprcxstart;
-                               tlcbgystart = tlprcystart;
-                               tlcbgzstart = tlprczstart;
-                               brcbgxend = brprcxend;
-                               brcbgyend = brprcyend;
-                               brcbgzend = brprczend;
-                               cbgwidthexpn = pdx;
-                               cbgheightexpn = pdy;
-                               cbglengthexpn = pdz;
-                       } else {
-                               tlcbgxstart = int_ceildivpow2(tlprcxstart, 1);
-                               tlcbgystart = int_ceildivpow2(tlprcystart, 1);
-                               tlcbgzstart = int_ceildivpow2(tlprczstart, 1);
-                               brcbgxend = int_ceildivpow2(brprcxend, 1);
-                               brcbgyend = int_ceildivpow2(brprcyend, 1);
-                               brcbgzend = int_ceildivpow2(brprczend, 1);
-                               cbgwidthexpn = pdx - 1;
-                               cbgheightexpn = pdy - 1;
-                               cbglengthexpn = pdz - 1;
-                       }
-                       
-                       cblkwidthexpn = int_min(tccp->cblk[0], cbgwidthexpn);
-                       cblkheightexpn = int_min(tccp->cblk[1], cbgheightexpn);
-                       cblklengthexpn = int_min(tccp->cblk[2], cbglengthexpn);
-                       
-                       res->bands = (opj_tcd_band_t *) opj_malloc(res->numbands * sizeof(opj_tcd_band_t));
-                       for (bandno = 0; bandno < res->numbands; bandno++) {
-                               int x0b, y0b, z0b;
-                               int gain, numbps;
-                               opj_stepsize_t *ss = NULL;
-
-                               tcd->band = &res->bands[bandno];
-                               band = tcd->band;
-
-                               band->bandno = resno == 0 ? 0 : bandno + 1;
-                               /* Bandno:      0 - LLL         2 - LHL 
-                                                       1 - HLL         3 - HHL
-                                                       4 - LLH         6 - LHH
-                                                       5 - HLH         7 - HHH         */
-                               x0b = (band->bandno == 1) || (band->bandno == 3) || (band->bandno == 5 ) || (band->bandno == 7 ) ? 1 : 0; 
-                               y0b = (band->bandno == 2) || (band->bandno == 3) || (band->bandno == 6 ) || (band->bandno == 7 ) ? 1 : 0;
-                               z0b = (band->bandno == 4) || (band->bandno == 5) || (band->bandno == 6 ) || (band->bandno == 7 ) ? 1 : 0; 
-                               
-                               /* p. 65, B.15, ISO/IEC IS15444-1 : 2002  */
-                               if (band->bandno == 0) {
-                                       /* band border (global) */
-                                       band->x0 = int_ceildivpow2(tilec->x0, levelnox);
-                                       band->y0 = int_ceildivpow2(tilec->y0, levelnoy);
-                                       band->z0 = int_ceildivpow2(tilec->z0, levelnoz);
-                                       band->x1 = int_ceildivpow2(tilec->x1, levelnox);
-                                       band->y1 = int_ceildivpow2(tilec->y1, levelnoy);
-                                       band->z1 = int_ceildivpow2(tilec->z1, levelnoz);
-                               } else {
-                                       band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelnox) * x0b, levelnox + 1);
-                                       band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelnoy) * y0b, levelnoy + 1);
-                                       band->z0 = int_ceildivpow2(tilec->z0 - (1 << levelnoz) * z0b, (resno <= diff) ? levelnoz : levelnoz + 1);
-                                       band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelnox) * x0b, levelnox + 1);
-                                       band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelnoy) * y0b, levelnoy + 1);
-                                       band->z1 = int_ceildivpow2(tilec->z1 - (1 << levelnoz) * z0b, (resno <= diff) ? levelnoz : levelnoz + 1);
-                               }
-                                                               
-                               ss = &tccp->stepsizes[(resno == 0) ? 0 : (prevnumbands + bandno + 1)];
-                               if (bandno == (res->numbands - 1)) 
-                                       prevnumbands += (resno == 0) ? 0 : res->numbands;
-                               gain = dwt_getgain(band->bandno,tccp->reversible);                                      
-                               numbps = volume->comps[compno].prec + gain;
-                               
-                               band->stepsize = (float)((1.0 + ss->mant / 2048.0) * pow(2.0, numbps - ss->expn));
-                               band->numbps = ss->expn + tccp->numgbits - 1;   /* WHY -1 ? */
-                               
-                               for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2]; precno++) {
-                                       int tlcblkxstart, tlcblkystart, tlcblkzstart, brcblkxend, brcblkyend, brcblkzend;
-
-                                       int cbgxstart = tlcbgxstart + (precno % res->prctno[0]) * (1 << cbgwidthexpn);
-                                       int cbgystart = tlcbgystart + ((precno / (res->prctno[0] * res->prctno[1])) / res->prctno[0]) * (1 << cbgheightexpn);
-                                       int cbgzstart = tlcbgzstart + (precno / (res->prctno[0] * res->prctno[1])) * (1 << cbglengthexpn);
-                                       int cbgxend = cbgxstart + (1 << cbgwidthexpn);
-                                       int cbgyend = cbgystart + (1 << cbgheightexpn);
-                                       int cbgzend = cbgzstart + (1 << cbglengthexpn);
-
-                                       /* opj_tcd_precinct_t *prc=&band->precincts[precno]; */
-                                       tcd->prc = &band->precincts[precno];
-                                       prc = tcd->prc;
-
-                                       /* precinct size (global) */
-                                       prc->x0 = int_max(cbgxstart, band->x0);
-                                       prc->y0 = int_max(cbgystart, band->y0);
-                                       prc->z0 = int_max(cbgzstart, band->z0);
-                                       prc->x1 = int_min(cbgxend, band->x1);
-                                       prc->y1 = int_min(cbgyend, band->y1);
-                                       prc->z1 = int_min(cbgzend, band->z1);
-
-                                       tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn;
-                                       tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn;
-                                       tlcblkzstart = int_floordivpow2(prc->z0, cblklengthexpn) << cblklengthexpn;
-                                       brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn;
-                                       brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn;
-                                       brcblkzend = int_ceildivpow2(prc->z1, cblklengthexpn) << cblklengthexpn;
-                                       prc->cblkno[0] = (brcblkxend - tlcblkxstart) >> cblkwidthexpn;
-                                       prc->cblkno[1] = (brcblkyend - tlcblkystart) >> cblkheightexpn;
-                                       prc->cblkno[2] = (brcblkzend - tlcblkzstart) >> cblklengthexpn;
-                                       prc->cblkno[2] = (prc->cblkno[2] == 0) ? 1 : prc->cblkno[2];
-
-                                       opj_free(prc->cblks);
-                                       prc->cblks = (opj_tcd_cblk_t *) opj_malloc((prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]) * sizeof(opj_tcd_cblk_t));
-                                       prc->incltree = tgt_create(prc->cblkno[0], prc->cblkno[1], prc->cblkno[2]);
-                                       prc->imsbtree = tgt_create(prc->cblkno[0], prc->cblkno[1], prc->cblkno[2]);
-
-                                       for (cblkno = 0; cblkno < (prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]); cblkno++) {
-                                                       int cblkxstart = tlcblkxstart + (cblkno % prc->cblkno[0]) * (1 << cblkwidthexpn);
-                                                       int cblkystart = tlcblkystart + ((cblkno % (prc->cblkno[0] * prc->cblkno[1])) / prc->cblkno[0]) * (1 << cblkheightexpn);
-                                                       int cblkzstart = tlcblkzstart + (cblkno / (prc->cblkno[0] * prc->cblkno[1])) * (1 << cblklengthexpn);
-                                                       int cblkxend = cblkxstart + (1 << cblkwidthexpn);
-                                                       int cblkyend = cblkystart + (1 << cblkheightexpn);
-                                                       int cblkzend = cblkzstart + (1 << cblklengthexpn);
-                                                       int prec = ((tilec->bpp > 16) ? 3 : ((tilec->bpp > 8) ? 2 : 1));
-
-                                                       tcd->cblk = &prc->cblks[cblkno];
-                                                       cblk = tcd->cblk;
-
-                                                       /* code-block size (global) */
-                                                       cblk->x0 = int_max(cblkxstart, prc->x0);
-                                                       cblk->y0 = int_max(cblkystart, prc->y0);
-                                                       cblk->z0 = int_max(cblkzstart, prc->z0);
-                                                       cblk->x1 = int_min(cblkxend, prc->x1);
-                                                       cblk->y1 = int_min(cblkyend, prc->y1);
-                                                       cblk->z1 = int_min(cblkzend, prc->z1);
-                                       }
-                               } /* precno */
-                       } /* bandno */
-               } /* resno */
-       } /* compno */
-       /*tcd_dump(stdout, tcd, tcd->tcd_volume);*/
+        if (tcp->rates[j]) {
+            if (j && tcp->rates[j] < tcp->rates[j - 1] + 10) {
+                tcp->rates[j] = tcp->rates[j - 1] + 20;
+            } else if (!j && tcp->rates[j] < 30) {
+                tcp->rates[j] = 30;
+            }
+        }
+    }
+    /* << Modification of the RATE */
+
+    for (compno = 0; compno < tile->numcomps; compno++) {
+        opj_tccp_t *tccp = &tcp->tccps[compno];
+        int res_max, i;
+        int prevnumbands = 0;
+
+        /* opj_tcd_tilecomp_t *tilec=&tile->comps[compno]; */
+        tcd->tilec = &tile->comps[compno];
+        tilec = tcd->tilec;
+
+        /* border of each tile component (global) (B.3) */
+        tilec->x0 = int_ceildiv(tile->x0, volume->comps[compno].dx);
+        tilec->y0 = int_ceildiv(tile->y0, volume->comps[compno].dy);
+        tilec->z0 = int_ceildiv(tile->z0, volume->comps[compno].dz);
+        tilec->x1 = int_ceildiv(tile->x1, volume->comps[compno].dx);
+        tilec->y1 = int_ceildiv(tile->y1, volume->comps[compno].dy);
+        tilec->z1 = int_ceildiv(tile->z1, volume->comps[compno].dz);
+
+        tilec->data = (int *) opj_malloc((tilec->x1 - tilec->x0) *
+                                         (tilec->y1 - tilec->y0) * (tilec->z1 - tilec->z0) * sizeof(int));
+
+        res_max = 0;
+        for (i = 0; i < 3; i++) {
+            tilec->numresolution[i] = tccp->numresolution[i];
+            /*Greater of 3 resolutions contains all information*/
+            res_max = (tilec->numresolution[i] > res_max) ? tilec->numresolution[i] :
+                      res_max;
+        }
+
+        tilec->resolutions = (opj_tcd_resolution_t *) opj_malloc(res_max * sizeof(
+                                 opj_tcd_resolution_t));
+        for (resno = 0; resno < res_max; resno++) {
+            int pdx, pdy, pdz;
+            int tlprcxstart, tlprcystart, tlprczstart, brprcxend, brprcyend, brprczend;
+            int tlcbgxstart, tlcbgystart, tlcbgzstart, brcbgxend, brcbgyend, brcbgzend;
+            int cbgwidthexpn, cbgheightexpn, cbglengthexpn;
+            int cblkwidthexpn, cblkheightexpn, cblklengthexpn;
+
+            int levelnox = tilec->numresolution[0] - 1 - resno;
+            int levelnoy = tilec->numresolution[1] - 1 - resno;
+            int diff = tccp->numresolution[0] - tccp->numresolution[2];
+            int levelnoz = tilec->numresolution[2] - 1 - ((resno <= diff) ? 0 :
+                           (resno - diff));
+            if (levelnoz < 0) {
+                levelnoz = 0;
+            }
+
+            tcd->res = &tilec->resolutions[resno];
+            res = tcd->res;
+
+            /* border for each resolution level (global) (B.14)*/
+            res->x0 = int_ceildivpow2(tilec->x0, levelnox);
+            res->y0 = int_ceildivpow2(tilec->y0, levelnoy);
+            res->z0 = int_ceildivpow2(tilec->z0, levelnoz);
+            res->x1 = int_ceildivpow2(tilec->x1, levelnox);
+            res->y1 = int_ceildivpow2(tilec->y1, levelnoy);
+            res->z1 = int_ceildivpow2(tilec->z1, levelnoz);
+
+            /* res->numbands = resno == 0 ? 1 : 3; *//* --> 2D */
+
+            res->numbands = (resno == 0) ? 1 : (resno <= diff) ? 3 : 7; /* --> 3D */
+
+            /* p. 30, table A-13, ISO/IEC IS154444-1 : 2002 */
+            if (tccp->csty & J3D_CCP_CSTY_PRT) {
+                pdx = tccp->prctsiz[0][resno];
+                pdy = tccp->prctsiz[1][resno];
+                pdz = tccp->prctsiz[2][resno];
+            } else {
+                pdx = 15;
+                pdy = 15;
+                pdz = 15;
+            }
+            /* p. 66, B.16, ISO/IEC IS15444-1 : 2002  */
+            tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx;
+            tlprcystart = int_floordivpow2(res->y0, pdy) << pdy;
+            tlprczstart = int_floordivpow2(res->z0, pdz) << pdz;
+            brprcxend = int_ceildivpow2(res->x1, pdx) << pdx;
+            brprcyend = int_ceildivpow2(res->y1, pdy) << pdy;
+            brprczend = int_ceildivpow2(res->z1, pdz) << pdz;
+
+            res->prctno[0] = (brprcxend - tlprcxstart) >> pdx;
+            res->prctno[1] = (brprcyend - tlprcystart) >> pdy;
+            res->prctno[2] = (brprczend - tlprczstart) >> pdz;
+            if (res->prctno[2] == 0) {
+                res->prctno[2] = 1;
+            }
+
+            /* p. 67, B.17 & B.18, ISO/IEC IS15444-1 : 2002  */
+            if (resno == 0) {
+                tlcbgxstart = tlprcxstart;
+                tlcbgystart = tlprcystart;
+                tlcbgzstart = tlprczstart;
+                brcbgxend = brprcxend;
+                brcbgyend = brprcyend;
+                brcbgzend = brprczend;
+                cbgwidthexpn = pdx;
+                cbgheightexpn = pdy;
+                cbglengthexpn = pdz;
+            } else {
+                tlcbgxstart = int_ceildivpow2(tlprcxstart, 1);
+                tlcbgystart = int_ceildivpow2(tlprcystart, 1);
+                tlcbgzstart = int_ceildivpow2(tlprczstart, 1);
+                brcbgxend = int_ceildivpow2(brprcxend, 1);
+                brcbgyend = int_ceildivpow2(brprcyend, 1);
+                brcbgzend = int_ceildivpow2(brprczend, 1);
+                cbgwidthexpn = pdx - 1;
+                cbgheightexpn = pdy - 1;
+                cbglengthexpn = pdz - 1;
+            }
+
+            cblkwidthexpn = int_min(tccp->cblk[0], cbgwidthexpn);
+            cblkheightexpn = int_min(tccp->cblk[1], cbgheightexpn);
+            cblklengthexpn = int_min(tccp->cblk[2], cbglengthexpn);
+
+            res->bands = (opj_tcd_band_t *) opj_malloc(res->numbands * sizeof(
+                             opj_tcd_band_t));
+            for (bandno = 0; bandno < res->numbands; bandno++) {
+                int x0b, y0b, z0b;
+                int gain, numbps;
+                opj_stepsize_t *ss = NULL;
+
+                tcd->band = &res->bands[bandno];
+                band = tcd->band;
+
+                band->bandno = resno == 0 ? 0 : bandno + 1;
+                /* Bandno:  0 - LLL     2 - LHL
+                            1 - HLL     3 - HHL
+                            4 - LLH     6 - LHH
+                            5 - HLH     7 - HHH     */
+                x0b = (band->bandno == 1) || (band->bandno == 3) || (band->bandno == 5) ||
+                      (band->bandno == 7) ? 1 : 0;
+                y0b = (band->bandno == 2) || (band->bandno == 3) || (band->bandno == 6) ||
+                      (band->bandno == 7) ? 1 : 0;
+                z0b = (band->bandno == 4) || (band->bandno == 5) || (band->bandno == 6) ||
+                      (band->bandno == 7) ? 1 : 0;
+
+                /* p. 65, B.15, ISO/IEC IS15444-1 : 2002  */
+                if (band->bandno == 0) {
+                    /* band border (global) */
+                    band->x0 = int_ceildivpow2(tilec->x0, levelnox);
+                    band->y0 = int_ceildivpow2(tilec->y0, levelnoy);
+                    band->z0 = int_ceildivpow2(tilec->z0, levelnoz);
+                    band->x1 = int_ceildivpow2(tilec->x1, levelnox);
+                    band->y1 = int_ceildivpow2(tilec->y1, levelnoy);
+                    band->z1 = int_ceildivpow2(tilec->z1, levelnoz);
+                } else {
+                    band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelnox) * x0b, levelnox + 1);
+                    band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelnoy) * y0b, levelnoy + 1);
+                    band->z0 = int_ceildivpow2(tilec->z0 - (1 << levelnoz) * z0b,
+                                               (resno <= diff) ? levelnoz : levelnoz + 1);
+                    band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelnox) * x0b, levelnox + 1);
+                    band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelnoy) * y0b, levelnoy + 1);
+                    band->z1 = int_ceildivpow2(tilec->z1 - (1 << levelnoz) * z0b,
+                                               (resno <= diff) ? levelnoz : levelnoz + 1);
+                }
+
+                ss = &tccp->stepsizes[(resno == 0) ? 0 : (prevnumbands + bandno + 1)];
+                if (bandno == (res->numbands - 1)) {
+                    prevnumbands += (resno == 0) ? 0 : res->numbands;
+                }
+                gain = dwt_getgain(band->bandno, tccp->reversible);
+                numbps = volume->comps[compno].prec + gain;
+
+                band->stepsize = (float)((1.0 + ss->mant / 2048.0) * pow(2.0,
+                                         numbps - ss->expn));
+                band->numbps = ss->expn + tccp->numgbits - 1;   /* WHY -1 ? */
+
+                for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2];
+                        precno++) {
+                    int tlcblkxstart, tlcblkystart, tlcblkzstart, brcblkxend, brcblkyend,
+                        brcblkzend;
+
+                    int cbgxstart = tlcbgxstart + (precno % res->prctno[0]) * (1 << cbgwidthexpn);
+                    int cbgystart = tlcbgystart + ((precno / (res->prctno[0] * res->prctno[1])) /
+                                                   res->prctno[0]) * (1 << cbgheightexpn);
+                    int cbgzstart = tlcbgzstart + (precno / (res->prctno[0] * res->prctno[1])) *
+                                    (1 << cbglengthexpn);
+                    int cbgxend = cbgxstart + (1 << cbgwidthexpn);
+                    int cbgyend = cbgystart + (1 << cbgheightexpn);
+                    int cbgzend = cbgzstart + (1 << cbglengthexpn);
+
+                    /* opj_tcd_precinct_t *prc=&band->precincts[precno]; */
+                    tcd->prc = &band->precincts[precno];
+                    prc = tcd->prc;
+
+                    /* precinct size (global) */
+                    prc->x0 = int_max(cbgxstart, band->x0);
+                    prc->y0 = int_max(cbgystart, band->y0);
+                    prc->z0 = int_max(cbgzstart, band->z0);
+                    prc->x1 = int_min(cbgxend, band->x1);
+                    prc->y1 = int_min(cbgyend, band->y1);
+                    prc->z1 = int_min(cbgzend, band->z1);
+
+                    tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn;
+                    tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn;
+                    tlcblkzstart = int_floordivpow2(prc->z0, cblklengthexpn) << cblklengthexpn;
+                    brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn;
+                    brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn;
+                    brcblkzend = int_ceildivpow2(prc->z1, cblklengthexpn) << cblklengthexpn;
+                    prc->cblkno[0] = (brcblkxend - tlcblkxstart) >> cblkwidthexpn;
+                    prc->cblkno[1] = (brcblkyend - tlcblkystart) >> cblkheightexpn;
+                    prc->cblkno[2] = (brcblkzend - tlcblkzstart) >> cblklengthexpn;
+                    prc->cblkno[2] = (prc->cblkno[2] == 0) ? 1 : prc->cblkno[2];
+
+                    opj_free(prc->cblks);
+                    prc->cblks = (opj_tcd_cblk_t *) opj_malloc((prc->cblkno[0] * prc->cblkno[1] *
+                                 prc->cblkno[2]) * sizeof(opj_tcd_cblk_t));
+                    prc->incltree = tgt_create(prc->cblkno[0], prc->cblkno[1], prc->cblkno[2]);
+                    prc->imsbtree = tgt_create(prc->cblkno[0], prc->cblkno[1], prc->cblkno[2]);
+
+                    for (cblkno = 0; cblkno < (prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]);
+                            cblkno++) {
+                        int cblkxstart = tlcblkxstart + (cblkno % prc->cblkno[0]) *
+                                         (1 << cblkwidthexpn);
+                        int cblkystart = tlcblkystart + ((cblkno % (prc->cblkno[0] * prc->cblkno[1])) /
+                                                         prc->cblkno[0]) * (1 << cblkheightexpn);
+                        int cblkzstart = tlcblkzstart + (cblkno / (prc->cblkno[0] * prc->cblkno[1])) *
+                                         (1 << cblklengthexpn);
+                        int cblkxend = cblkxstart + (1 << cblkwidthexpn);
+                        int cblkyend = cblkystart + (1 << cblkheightexpn);
+                        int cblkzend = cblkzstart + (1 << cblklengthexpn);
+                        int prec = ((tilec->bpp > 16) ? 3 : ((tilec->bpp > 8) ? 2 : 1));
+
+                        tcd->cblk = &prc->cblks[cblkno];
+                        cblk = tcd->cblk;
+
+                        /* code-block size (global) */
+                        cblk->x0 = int_max(cblkxstart, prc->x0);
+                        cblk->y0 = int_max(cblkystart, prc->y0);
+                        cblk->z0 = int_max(cblkzstart, prc->z0);
+                        cblk->x1 = int_min(cblkxend, prc->x1);
+                        cblk->y1 = int_min(cblkyend, prc->y1);
+                        cblk->z1 = int_min(cblkzend, prc->z1);
+                    }
+                } /* precno */
+            } /* bandno */
+        } /* resno */
+    } /* compno */
+    /*tcd_dump(stdout, tcd, tcd->tcd_volume);*/
 }
 
 
-void tcd_free_encode(opj_tcd_t *tcd) {
-       int tileno, compno, resno, bandno, precno;
+void tcd_free_encode(opj_tcd_t *tcd)
+{
+    int tileno, compno, resno, bandno, precno;
 
-       opj_tcd_tile_t *tile = NULL;            /* pointer to tcd->tile         */
-/*     opj_tcd_slice_t *slice = NULL; */               /* pointer to tcd->slice */
-       opj_tcd_tilecomp_t *tilec = NULL;       /* pointer to tcd->tilec        */
-       opj_tcd_resolution_t *res = NULL;       /* pointer to tcd->res          */
-       opj_tcd_band_t *band = NULL;            /* pointer to tcd->band         */
-       opj_tcd_precinct_t *prc = NULL;         /* pointer to tcd->prc          */
+    opj_tcd_tile_t *tile = NULL;        /* pointer to tcd->tile     */
+    /*  opj_tcd_slice_t *slice = NULL; */       /* pointer to tcd->slice */
+    opj_tcd_tilecomp_t *tilec = NULL;   /* pointer to tcd->tilec    */
+    opj_tcd_resolution_t *res = NULL;   /* pointer to tcd->res      */
+    opj_tcd_band_t *band = NULL;        /* pointer to tcd->band     */
+    opj_tcd_precinct_t *prc = NULL;     /* pointer to tcd->prc      */
 
-       for (tileno = 0; tileno < 1; tileno++) {
-               tcd->tile = tcd->tcd_volume->tiles;
-               tile = tcd->tile;
+    for (tileno = 0; tileno < 1; tileno++) {
+        tcd->tile = tcd->tcd_volume->tiles;
+        tile = tcd->tile;
 
-               for (compno = 0; compno < tile->numcomps; compno++) {
-                       tcd->tilec = &tile->comps[compno];
-                       tilec = tcd->tilec;
+        for (compno = 0; compno < tile->numcomps; compno++) {
+            tcd->tilec = &tile->comps[compno];
+            tilec = tcd->tilec;
 
-                       for (resno = 0; resno < tilec->numresolution[0]; resno++) {
-                               tcd->res = &tilec->resolutions[resno];
-                               res = tcd->res;
+            for (resno = 0; resno < tilec->numresolution[0]; resno++) {
+                tcd->res = &tilec->resolutions[resno];
+                res = tcd->res;
 
-                               for (bandno = 0; bandno < res->numbands; bandno++) {
-                                       tcd->band = &res->bands[bandno];
-                                       band = tcd->band;
+                for (bandno = 0; bandno < res->numbands; bandno++) {
+                    tcd->band = &res->bands[bandno];
+                    band = tcd->band;
 
-                                       for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2]; precno++) {
-                                               tcd->prc = &band->precincts[precno];
-                                               prc = tcd->prc;
+                    for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2];
+                            precno++) {
+                        tcd->prc = &band->precincts[precno];
+                        prc = tcd->prc;
 
-                                               if (prc->incltree != NULL) {
+                        if (prc->incltree != NULL) {
                             tgt_destroy(prc->incltree);
                             prc->incltree = NULL;
-                                               }
-                                               if (prc->imsbtree != NULL) {
+                        }
+                        if (prc->imsbtree != NULL) {
                             tgt_destroy(prc->imsbtree);
                             prc->imsbtree = NULL;
-                                               }
-                                               opj_free(prc->cblks);
-                                               prc->cblks = NULL;
-                                       } /* for (precno */
-                                       opj_free(band->precincts);
-                                       band->precincts = NULL;
-                               } /* for (bandno */
-                       } /* for (resno */
-                       opj_free(tilec->resolutions);
-                       tilec->resolutions = NULL;
-               } /* for (compno */
-               opj_free(tile->comps);
-               tile->comps = NULL;
-       } /* for (tileno */
-       opj_free(tcd->tcd_volume->tiles);
-       tcd->tcd_volume->tiles = NULL;
+                        }
+                        opj_free(prc->cblks);
+                        prc->cblks = NULL;
+                    } /* for (precno */
+                    opj_free(band->precincts);
+                    band->precincts = NULL;
+                } /* for (bandno */
+            } /* for (resno */
+            opj_free(tilec->resolutions);
+            tilec->resolutions = NULL;
+        } /* for (compno */
+        opj_free(tile->comps);
+        tile->comps = NULL;
+    } /* for (tileno */
+    opj_free(tcd->tcd_volume->tiles);
+    tcd->tcd_volume->tiles = NULL;
 }
 
 /* ----------------------------------------------------------------------- */
-void tcd_malloc_decode(opj_tcd_t *tcd, opj_volume_t * volume, opj_cp_t * cp) {
-       int tileno, compno, resno, bandno, precno, cblkno, res_max,
-               i, j, p, q, r;
-       unsigned int x0 = 0, y0 = 0, z0 = 0, 
-               x1 = 0, y1 = 0, z1 = 0, 
-               w, h, l;
-
-       tcd->volume = volume;
-       tcd->cp = cp;
-       tcd->tcd_volume->tw = cp->tw;
-       tcd->tcd_volume->th = cp->th;
-       tcd->tcd_volume->tl = cp->tl;
-       tcd->tcd_volume->tiles = (opj_tcd_tile_t *) opj_malloc(cp->tw * cp->th * cp->tl * sizeof(opj_tcd_tile_t));
-       
-       for (i = 0; i < cp->tileno_size; i++) {
-               opj_tcp_t *tcp = &(cp->tcps[cp->tileno[i]]);
-               opj_tcd_tile_t *tile = &(tcd->tcd_volume->tiles[cp->tileno[i]]);
-       
-               /* p61 ISO/IEC IS15444-1 : 2002 */
-               /* curtileno --> raster scanned index of tiles */
-               /* p,q,r --> matricial index of tiles */
-               tileno = cp->tileno[i];
-               p = tileno % cp->tw;    
-               q = tileno / cp->tw;    
-               r = tileno / (cp->tw * cp->th); /* extension to 3-D */
-
-               /* 4 borders of the tile rescale on the volume if necessary (B.3)*/
-               tile->x0 = int_max(cp->tx0 + p * cp->tdx, volume->x0);
-               tile->y0 = int_max(cp->ty0 + q * cp->tdy, volume->y0);
-               tile->z0 = int_max(cp->tz0 + r * cp->tdz, volume->z0);
-               tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, volume->x1);
-               tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, volume->y1);
-               tile->z1 = int_min(cp->tz0 + (r + 1) * cp->tdz, volume->z1);
-               tile->numcomps = volume->numcomps;              
-               
-               tile->comps = (opj_tcd_tilecomp_t *) opj_malloc(volume->numcomps * sizeof(opj_tcd_tilecomp_t));
-               for (compno = 0; compno < tile->numcomps; compno++) {
-                       opj_tccp_t *tccp = &tcp->tccps[compno];
-                       opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-                       int prevnumbands = 0;
-
-                       /* border of each tile component (global) */
-                       tilec->x0 = int_ceildiv(tile->x0, volume->comps[compno].dx);
-                       tilec->y0 = int_ceildiv(tile->y0, volume->comps[compno].dy);
-                       tilec->z0 = int_ceildiv(tile->z0, volume->comps[compno].dz);
-                       tilec->x1 = int_ceildiv(tile->x1, volume->comps[compno].dx);
-                       tilec->y1 = int_ceildiv(tile->y1, volume->comps[compno].dy);
-                       tilec->z1 = int_ceildiv(tile->z1, volume->comps[compno].dz);
-                       
-                       tilec->data = (int *) opj_malloc((tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0) * (tilec->z1 - tilec->z0) * sizeof(int));
-
-                       res_max = 0;
-                       for (i = 0;i < 3; i++){
-                               tilec->numresolution[i] = tccp->numresolution[i];
-                               /*Greater of 3 resolutions contains all information*/
-                               res_max = (tilec->numresolution[i] > res_max) ? tilec->numresolution[i] : res_max;
-                       }
-
-                       tilec->resolutions = (opj_tcd_resolution_t *) opj_malloc(res_max * sizeof(opj_tcd_resolution_t));
-
-                       for (resno = 0; resno < res_max; resno++) {
-                               opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-                               int pdx, pdy, pdz;
-                               int tlprcxstart, tlprcystart, tlprczstart, brprcxend, brprcyend, brprczend;
-                               int tlcbgxstart, tlcbgystart, tlcbgzstart, brcbgxend, brcbgyend, brcbgzend;
-                               int cbgwidthexpn, cbgheightexpn, cbglengthexpn;
-                               int cblkwidthexpn, cblkheightexpn, cblklengthexpn;
-                               int levelnox = tilec->numresolution[0] - 1 - resno; 
-                               int levelnoy = tilec->numresolution[1] - 1 - resno;
-                               int diff = tccp->numresolution[0] - tccp->numresolution[2]; 
-                               int levelnoz = tilec->numresolution[2] - 1 - ((resno <= diff) ? 0 : (resno - diff));
-                                       if (levelnoz < 0) levelnoz = 0;
-
-                               /* border for each resolution level (global) */
-                               res->x0 = int_ceildivpow2(tilec->x0, levelnox);
-                               res->y0 = int_ceildivpow2(tilec->y0, levelnoy);
-                               res->z0 = int_ceildivpow2(tilec->z0, levelnoz);
-                               res->x1 = int_ceildivpow2(tilec->x1, levelnox);
-                               res->y1 = int_ceildivpow2(tilec->y1, levelnoy);
-                               res->z1 = int_ceildivpow2(tilec->z1, levelnoz);
-                               res->numbands = (resno == 0) ? 1 : (resno <= diff) ? 3 : 7; /* --> 3D */
-                               
-                               /* p. 30, table A-13, ISO/IEC IS154444-1 : 2002 */
-                               if (tccp->csty & J3D_CCP_CSTY_PRT) {
-                                       pdx = tccp->prctsiz[0][resno];
-                                       pdy = tccp->prctsiz[1][resno];
-                                       pdz = tccp->prctsiz[2][resno];
-                               } else {
-                                       pdx = 15;
-                                       pdy = 15;
-                                       pdz = 15;
-                               }
-                               
-                               /* p. 66, B.16, ISO/IEC IS15444-1 : 2002  */
-                               tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx;
-                               tlprcystart = int_floordivpow2(res->y0, pdy) << pdy;
-                               tlprczstart = int_floordivpow2(res->z0, pdz) << pdz;
-                               brprcxend = int_ceildivpow2(res->x1, pdx) << pdx;
-                               brprcyend = int_ceildivpow2(res->y1, pdy) << pdy;
-                               brprczend = int_ceildivpow2(res->z1, pdz) << pdz;
-                               
-                               res->prctno[0] = (brprcxend - tlprcxstart) >> pdx;
-                               res->prctno[1] = (brprcyend - tlprcystart) >> pdy;
-                               res->prctno[2] = (brprczend - tlprczstart) >> pdz;
-                               
-                               /* p. 67, B.17 & B.18, ISO/IEC IS15444-1 : 2002  */
-                               if (resno == 0) {
-                                       tlcbgxstart = tlprcxstart;/*0*/
-                                       tlcbgystart = tlprcystart;
-                                       tlcbgzstart = tlprczstart;
-                                       brcbgxend = brprcxend;/*1*/
-                                       brcbgyend = brprcyend;
-                                       brcbgzend = brprczend;
-                                       cbgwidthexpn = pdx; /*15*/
-                                       cbgheightexpn = pdy;
-                                       cbglengthexpn = pdz;
-                               } else {
-                                       tlcbgxstart = int_ceildivpow2(tlprcxstart, 1);
-                                       tlcbgystart = int_ceildivpow2(tlprcystart, 1);
-                                       tlcbgzstart = int_ceildivpow2(tlprczstart, 1);
-                                       brcbgxend = int_ceildivpow2(brprcxend, 1);
-                                       brcbgyend = int_ceildivpow2(brprcyend, 1);
-                                       brcbgzend = int_ceildivpow2(brprczend, 1);
-                                       cbgwidthexpn = pdx - 1;
-                                       cbgheightexpn = pdy - 1;
-                                       cbglengthexpn = pdz - 1;
-                               }
-                               
-                               cblkwidthexpn = int_min(tccp->cblk[0], cbgwidthexpn); /*6*/
-                               cblkheightexpn = int_min(tccp->cblk[1], cbgheightexpn); /*6*/
-                               cblklengthexpn = int_min(tccp->cblk[2], cbglengthexpn); /*6*/
-
-                               res->bands = (opj_tcd_band_t *) opj_malloc(res->numbands * sizeof(opj_tcd_band_t));
-                               for (bandno = 0; bandno < res->numbands; bandno++) {
-                                       int x0b, y0b, z0b;
-                                       int gain, numbps;
-                                       opj_stepsize_t *ss = NULL;
-
-                                       opj_tcd_band_t *band = &res->bands[bandno];
-                                       band->bandno = resno == 0 ? 0 : bandno + 1;
-                                       /* Bandno:      0 - LLL         2 - LHL 
-                                                               1 - HLL         3 - HHL
-                                                               4 - LLH         6 - LHH
-                                                               5 - HLH         7 - HHH         */
-                                       x0b = (band->bandno == 1) || (band->bandno == 3) || (band->bandno == 5 ) || (band->bandno == 7 ) ? 1 : 0; 
-                                       y0b = (band->bandno == 2) || (band->bandno == 3) || (band->bandno == 6 ) || (band->bandno == 7 ) ? 1 : 0;
-                                       z0b = (band->bandno == 4) || (band->bandno == 5) || (band->bandno == 6 ) || (band->bandno == 7 ) ? 1 : 0; 
-                                       
-                                       /* p. 65, B.15, ISO/IEC IS15444-1 : 2002  */
-                                       if (band->bandno == 0) {
-                                               /* band border (global) */
-                                               band->x0 = int_ceildivpow2(tilec->x0, levelnox);
-                                               band->y0 = int_ceildivpow2(tilec->y0, levelnoy);
-                                               band->z0 = int_ceildivpow2(tilec->z0, levelnoz);
-                                               band->x1 = int_ceildivpow2(tilec->x1, levelnox);
-                                               band->y1 = int_ceildivpow2(tilec->y1, levelnoy);
-                                               band->z1 = int_ceildivpow2(tilec->z1, levelnoz);
-                                       } else {
-                                               band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelnox) * x0b, levelnox + 1);
-                                               band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelnoy) * y0b, levelnoy + 1);
-                                               band->z0 = int_ceildivpow2(tilec->z0 - (1 << levelnoz) * z0b, (resno <= diff) ? levelnoz : levelnoz + 1);
-                                               band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelnox) * x0b, levelnox + 1);
-                                               band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelnoy) * y0b, levelnoy + 1);
-                                               band->z1 = int_ceildivpow2(tilec->z1 - (1 << levelnoz) * z0b, (resno <= diff) ? levelnoz : levelnoz + 1);
-                                       }       
-
-                                       ss = &tccp->stepsizes[(resno == 0) ? 0 : (prevnumbands + bandno + 1)];
-                                       if (bandno == (res->numbands - 1)) 
-                                               prevnumbands += (resno == 0) ? 0 : res->numbands;
-                                       gain = dwt_getgain(band->bandno,tccp->reversible);                                      
-                                       numbps = volume->comps[compno].prec + gain;
-
-                                       band->stepsize = (float)((1.0 + ss->mant / 2048.0) * pow(2.0, numbps - ss->expn));
-                                       band->numbps = ss->expn + tccp->numgbits - 1;   /* WHY -1 ? */
-                                       
-                                       band->precincts = (opj_tcd_precinct_t *) opj_malloc(res->prctno[0] * res->prctno[1] * res->prctno[2] * sizeof(opj_tcd_precinct_t));
-                                       
-                                       for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2]; precno++) {
-                                               int tlcblkxstart, tlcblkystart, tlcblkzstart, brcblkxend, brcblkyend, brcblkzend;
-
-                                               int cbgxstart = tlcbgxstart + (precno % res->prctno[0]) * (1 << cbgwidthexpn);
-                                               int cbgystart = tlcbgystart + (precno / res->prctno[0]) * (1 << cbgheightexpn);
-                                               int cbgzstart = tlcbgzstart + (precno / (res->prctno[0] * res->prctno[1])) * (1 << cbglengthexpn);
-                                               int cbgxend = cbgxstart + (1 << cbgwidthexpn);
-                                               int cbgyend = cbgystart + (1 << cbgheightexpn);
-                                               int cbgzend = cbgzstart + (1 << cbglengthexpn);
-
-                                               opj_tcd_precinct_t *prc = &band->precincts[precno];
-                                               /* precinct size (global) */
-                                               prc->x0 = int_max(cbgxstart, band->x0);
-                                               prc->y0 = int_max(cbgystart, band->y0);
-                                               prc->z0 = int_max(cbgzstart, band->z0);
-                                               prc->x1 = int_min(cbgxend, band->x1);
-                                               prc->y1 = int_min(cbgyend, band->y1);
-                                               prc->z1 = int_min(cbgzend, band->z1);
-
-                                               tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn;
-                                               tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn;
-                                               tlcblkzstart = int_floordivpow2(prc->z0, cblklengthexpn) << cblklengthexpn;
-                                               brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn;
-                                               brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn;
-                                               brcblkzend = int_ceildivpow2(prc->z1, cblklengthexpn) << cblklengthexpn;
-                                               prc->cblkno[0] = (brcblkxend - tlcblkxstart) >> cblkwidthexpn;
-                                               prc->cblkno[1] = (brcblkyend - tlcblkystart) >> cblkheightexpn;
-                                               prc->cblkno[2] = (brcblkzend - tlcblkzstart) >> cblklengthexpn;
-                                               prc->cblkno[2] = (prc->cblkno[2] == 0) ? 1 : prc->cblkno[2];
-
-                                               prc->cblks = (opj_tcd_cblk_t *) opj_malloc((prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]) * sizeof(opj_tcd_cblk_t));
-                                               prc->incltree = tgt_create(prc->cblkno[0], prc->cblkno[1], prc->cblkno[2]);
-                                               prc->imsbtree = tgt_create(prc->cblkno[0], prc->cblkno[1], prc->cblkno[2]);
-                                               
-                                               for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) {
-                                                       int cblkxstart = tlcblkxstart + (cblkno % prc->cblkno[0]) * (1 << cblkwidthexpn);
-                                                       int cblkystart = tlcblkystart + ((cblkno % (prc->cblkno[0] * prc->cblkno[1])) / prc->cblkno[0]) * (1 << cblkheightexpn);
-                                                       int cblkzstart = tlcblkzstart + (cblkno / (prc->cblkno[0] * prc->cblkno[1])) * (1 << cblklengthexpn);
-                                                       int cblkxend = cblkxstart + (1 << cblkwidthexpn);
-                                                       int cblkyend = cblkystart + (1 << cblkheightexpn);
-                                                       int cblkzend = cblkzstart + (1 << cblklengthexpn);
-                                                       int prec = ((tilec->bpp > 16) ? 3 : ((tilec->bpp > 8) ? 2 : 1));
-                                                       /* code-block size (global) */
-                                                       opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-                                                       
-                                                       /* code-block size (global) */
-                                                       cblk->x0 = int_max(cblkxstart, prc->x0);
-                                                       cblk->y0 = int_max(cblkystart, prc->y0);
-                                                       cblk->z0 = int_max(cblkzstart, prc->z0);
-                                                       cblk->x1 = int_min(cblkxend, prc->x1);
-                                                       cblk->y1 = int_min(cblkyend, prc->y1);
-                                                       cblk->z1 = int_min(cblkzend, prc->z1);
-                                               }
-                                       } /* precno */
-                               } /* bandno */
-                       } /* resno */
-               } /* compno */
-       } /* i = 0..cp->tileno_size */
-
-       /*tcd_dump(stdout, tcd, tcd->tcd_volume);*/
-
-       /* 
-       Allocate place to store the decoded data = final volume
-       Place limited by the tile really present in the codestream 
-       */
-       
-       for (i = 0; i < volume->numcomps; i++) {
-               for (j = 0; j < cp->tileno_size; j++) {
-                       tileno = cp->tileno[j];
-                       x0 = (j == 0) ? tcd->tcd_volume->tiles[tileno].comps[i].x0 : int_min(x0,(unsigned int) tcd->tcd_volume->tiles[tileno].comps[i].x0);
-                       y0 = (j == 0) ? tcd->tcd_volume->tiles[tileno].comps[i].y0 : int_min(y0,(unsigned int) tcd->tcd_volume->tiles[tileno].comps[i].y0);
-                       z0 = (j == 0) ? tcd->tcd_volume->tiles[tileno].comps[i].z0 : int_min(z0,(unsigned int) tcd->tcd_volume->tiles[tileno].comps[i].z0);
-                       x1 = (j == 0) ? tcd->tcd_volume->tiles[tileno].comps[i].x1 : int_max(x1,(unsigned int) tcd->tcd_volume->tiles[tileno].comps[i].x1);
-                       y1 = (j == 0) ? tcd->tcd_volume->tiles[tileno].comps[i].y1 : int_max(y1,(unsigned int) tcd->tcd_volume->tiles[tileno].comps[i].y1);
-                       z1 = (j == 0) ? tcd->tcd_volume->tiles[tileno].comps[i].z1 : int_max(z1,(unsigned int) tcd->tcd_volume->tiles[tileno].comps[i].z1);
-               }
-               
-               w = x1 - x0;
-               h = y1 - y0;
-               l = z1 - z0;
-               
-               volume->comps[i].data = (int *) opj_malloc(w * h * l * sizeof(int));
-               volume->comps[i].w = w;
-               volume->comps[i].h = h;
-               volume->comps[i].l = l;
-               volume->comps[i].x0 = x0;
-               volume->comps[i].y0 = y0;
-               volume->comps[i].z0 = z0;
-               volume->comps[i].bigendian = cp->bigendian;
-       }
+void tcd_malloc_decode(opj_tcd_t *tcd, opj_volume_t * volume, opj_cp_t * cp)
+{
+    int tileno, compno, resno, bandno, precno, cblkno, res_max,
+        i, j, p, q, r;
+    unsigned int x0 = 0, y0 = 0, z0 = 0,
+                 x1 = 0, y1 = 0, z1 = 0,
+                 w, h, l;
+
+    tcd->volume = volume;
+    tcd->cp = cp;
+    tcd->tcd_volume->tw = cp->tw;
+    tcd->tcd_volume->th = cp->th;
+    tcd->tcd_volume->tl = cp->tl;
+    tcd->tcd_volume->tiles = (opj_tcd_tile_t *) opj_malloc(cp->tw * cp->th * cp->tl
+                             * sizeof(opj_tcd_tile_t));
+
+    for (i = 0; i < cp->tileno_size; i++) {
+        opj_tcp_t *tcp = &(cp->tcps[cp->tileno[i]]);
+        opj_tcd_tile_t *tile = &(tcd->tcd_volume->tiles[cp->tileno[i]]);
+
+        /* p61 ISO/IEC IS15444-1 : 2002 */
+        /* curtileno --> raster scanned index of tiles */
+        /* p,q,r --> matricial index of tiles */
+        tileno = cp->tileno[i];
+        p = tileno % cp->tw;
+        q = tileno / cp->tw;
+        r = tileno / (cp->tw * cp->th); /* extension to 3-D */
+
+        /* 4 borders of the tile rescale on the volume if necessary (B.3)*/
+        tile->x0 = int_max(cp->tx0 + p * cp->tdx, volume->x0);
+        tile->y0 = int_max(cp->ty0 + q * cp->tdy, volume->y0);
+        tile->z0 = int_max(cp->tz0 + r * cp->tdz, volume->z0);
+        tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, volume->x1);
+        tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, volume->y1);
+        tile->z1 = int_min(cp->tz0 + (r + 1) * cp->tdz, volume->z1);
+        tile->numcomps = volume->numcomps;
+
+        tile->comps = (opj_tcd_tilecomp_t *) opj_malloc(volume->numcomps * sizeof(
+                          opj_tcd_tilecomp_t));
+        for (compno = 0; compno < tile->numcomps; compno++) {
+            opj_tccp_t *tccp = &tcp->tccps[compno];
+            opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+            int prevnumbands = 0;
+
+            /* border of each tile component (global) */
+            tilec->x0 = int_ceildiv(tile->x0, volume->comps[compno].dx);
+            tilec->y0 = int_ceildiv(tile->y0, volume->comps[compno].dy);
+            tilec->z0 = int_ceildiv(tile->z0, volume->comps[compno].dz);
+            tilec->x1 = int_ceildiv(tile->x1, volume->comps[compno].dx);
+            tilec->y1 = int_ceildiv(tile->y1, volume->comps[compno].dy);
+            tilec->z1 = int_ceildiv(tile->z1, volume->comps[compno].dz);
+
+            tilec->data = (int *) opj_malloc((tilec->x1 - tilec->x0) *
+                                             (tilec->y1 - tilec->y0) * (tilec->z1 - tilec->z0) * sizeof(int));
+
+            res_max = 0;
+            for (i = 0; i < 3; i++) {
+                tilec->numresolution[i] = tccp->numresolution[i];
+                /*Greater of 3 resolutions contains all information*/
+                res_max = (tilec->numresolution[i] > res_max) ? tilec->numresolution[i] :
+                          res_max;
+            }
+
+            tilec->resolutions = (opj_tcd_resolution_t *) opj_malloc(res_max * sizeof(
+                                     opj_tcd_resolution_t));
+
+            for (resno = 0; resno < res_max; resno++) {
+                opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+                int pdx, pdy, pdz;
+                int tlprcxstart, tlprcystart, tlprczstart, brprcxend, brprcyend, brprczend;
+                int tlcbgxstart, tlcbgystart, tlcbgzstart, brcbgxend, brcbgyend, brcbgzend;
+                int cbgwidthexpn, cbgheightexpn, cbglengthexpn;
+                int cblkwidthexpn, cblkheightexpn, cblklengthexpn;
+                int levelnox = tilec->numresolution[0] - 1 - resno;
+                int levelnoy = tilec->numresolution[1] - 1 - resno;
+                int diff = tccp->numresolution[0] - tccp->numresolution[2];
+                int levelnoz = tilec->numresolution[2] - 1 - ((resno <= diff) ? 0 :
+                               (resno - diff));
+                if (levelnoz < 0) {
+                    levelnoz = 0;
+                }
+
+                /* border for each resolution level (global) */
+                res->x0 = int_ceildivpow2(tilec->x0, levelnox);
+                res->y0 = int_ceildivpow2(tilec->y0, levelnoy);
+                res->z0 = int_ceildivpow2(tilec->z0, levelnoz);
+                res->x1 = int_ceildivpow2(tilec->x1, levelnox);
+                res->y1 = int_ceildivpow2(tilec->y1, levelnoy);
+                res->z1 = int_ceildivpow2(tilec->z1, levelnoz);
+                res->numbands = (resno == 0) ? 1 : (resno <= diff) ? 3 : 7; /* --> 3D */
+
+                /* p. 30, table A-13, ISO/IEC IS154444-1 : 2002 */
+                if (tccp->csty & J3D_CCP_CSTY_PRT) {
+                    pdx = tccp->prctsiz[0][resno];
+                    pdy = tccp->prctsiz[1][resno];
+                    pdz = tccp->prctsiz[2][resno];
+                } else {
+                    pdx = 15;
+                    pdy = 15;
+                    pdz = 15;
+                }
+
+                /* p. 66, B.16, ISO/IEC IS15444-1 : 2002  */
+                tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx;
+                tlprcystart = int_floordivpow2(res->y0, pdy) << pdy;
+                tlprczstart = int_floordivpow2(res->z0, pdz) << pdz;
+                brprcxend = int_ceildivpow2(res->x1, pdx) << pdx;
+                brprcyend = int_ceildivpow2(res->y1, pdy) << pdy;
+                brprczend = int_ceildivpow2(res->z1, pdz) << pdz;
+
+                res->prctno[0] = (brprcxend - tlprcxstart) >> pdx;
+                res->prctno[1] = (brprcyend - tlprcystart) >> pdy;
+                res->prctno[2] = (brprczend - tlprczstart) >> pdz;
+
+                /* p. 67, B.17 & B.18, ISO/IEC IS15444-1 : 2002  */
+                if (resno == 0) {
+                    tlcbgxstart = tlprcxstart;/*0*/
+                    tlcbgystart = tlprcystart;
+                    tlcbgzstart = tlprczstart;
+                    brcbgxend = brprcxend;/*1*/
+                    brcbgyend = brprcyend;
+                    brcbgzend = brprczend;
+                    cbgwidthexpn = pdx; /*15*/
+                    cbgheightexpn = pdy;
+                    cbglengthexpn = pdz;
+                } else {
+                    tlcbgxstart = int_ceildivpow2(tlprcxstart, 1);
+                    tlcbgystart = int_ceildivpow2(tlprcystart, 1);
+                    tlcbgzstart = int_ceildivpow2(tlprczstart, 1);
+                    brcbgxend = int_ceildivpow2(brprcxend, 1);
+                    brcbgyend = int_ceildivpow2(brprcyend, 1);
+                    brcbgzend = int_ceildivpow2(brprczend, 1);
+                    cbgwidthexpn = pdx - 1;
+                    cbgheightexpn = pdy - 1;
+                    cbglengthexpn = pdz - 1;
+                }
+
+                cblkwidthexpn = int_min(tccp->cblk[0], cbgwidthexpn); /*6*/
+                cblkheightexpn = int_min(tccp->cblk[1], cbgheightexpn); /*6*/
+                cblklengthexpn = int_min(tccp->cblk[2], cbglengthexpn); /*6*/
+
+                res->bands = (opj_tcd_band_t *) opj_malloc(res->numbands * sizeof(
+                                 opj_tcd_band_t));
+                for (bandno = 0; bandno < res->numbands; bandno++) {
+                    int x0b, y0b, z0b;
+                    int gain, numbps;
+                    opj_stepsize_t *ss = NULL;
+
+                    opj_tcd_band_t *band = &res->bands[bandno];
+                    band->bandno = resno == 0 ? 0 : bandno + 1;
+                    /* Bandno:  0 - LLL     2 - LHL
+                                1 - HLL     3 - HHL
+                                4 - LLH     6 - LHH
+                                5 - HLH     7 - HHH     */
+                    x0b = (band->bandno == 1) || (band->bandno == 3) || (band->bandno == 5) ||
+                          (band->bandno == 7) ? 1 : 0;
+                    y0b = (band->bandno == 2) || (band->bandno == 3) || (band->bandno == 6) ||
+                          (band->bandno == 7) ? 1 : 0;
+                    z0b = (band->bandno == 4) || (band->bandno == 5) || (band->bandno == 6) ||
+                          (band->bandno == 7) ? 1 : 0;
+
+                    /* p. 65, B.15, ISO/IEC IS15444-1 : 2002  */
+                    if (band->bandno == 0) {
+                        /* band border (global) */
+                        band->x0 = int_ceildivpow2(tilec->x0, levelnox);
+                        band->y0 = int_ceildivpow2(tilec->y0, levelnoy);
+                        band->z0 = int_ceildivpow2(tilec->z0, levelnoz);
+                        band->x1 = int_ceildivpow2(tilec->x1, levelnox);
+                        band->y1 = int_ceildivpow2(tilec->y1, levelnoy);
+                        band->z1 = int_ceildivpow2(tilec->z1, levelnoz);
+                    } else {
+                        band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelnox) * x0b, levelnox + 1);
+                        band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelnoy) * y0b, levelnoy + 1);
+                        band->z0 = int_ceildivpow2(tilec->z0 - (1 << levelnoz) * z0b,
+                                                   (resno <= diff) ? levelnoz : levelnoz + 1);
+                        band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelnox) * x0b, levelnox + 1);
+                        band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelnoy) * y0b, levelnoy + 1);
+                        band->z1 = int_ceildivpow2(tilec->z1 - (1 << levelnoz) * z0b,
+                                                   (resno <= diff) ? levelnoz : levelnoz + 1);
+                    }
+
+                    ss = &tccp->stepsizes[(resno == 0) ? 0 : (prevnumbands + bandno + 1)];
+                    if (bandno == (res->numbands - 1)) {
+                        prevnumbands += (resno == 0) ? 0 : res->numbands;
+                    }
+                    gain = dwt_getgain(band->bandno, tccp->reversible);
+                    numbps = volume->comps[compno].prec + gain;
+
+                    band->stepsize = (float)((1.0 + ss->mant / 2048.0) * pow(2.0,
+                                             numbps - ss->expn));
+                    band->numbps = ss->expn + tccp->numgbits - 1;   /* WHY -1 ? */
+
+                    band->precincts = (opj_tcd_precinct_t *) opj_malloc(res->prctno[0] *
+                                      res->prctno[1] * res->prctno[2] * sizeof(opj_tcd_precinct_t));
+
+                    for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2];
+                            precno++) {
+                        int tlcblkxstart, tlcblkystart, tlcblkzstart, brcblkxend, brcblkyend,
+                            brcblkzend;
+
+                        int cbgxstart = tlcbgxstart + (precno % res->prctno[0]) * (1 << cbgwidthexpn);
+                        int cbgystart = tlcbgystart + (precno / res->prctno[0]) * (1 << cbgheightexpn);
+                        int cbgzstart = tlcbgzstart + (precno / (res->prctno[0] * res->prctno[1])) *
+                                        (1 << cbglengthexpn);
+                        int cbgxend = cbgxstart + (1 << cbgwidthexpn);
+                        int cbgyend = cbgystart + (1 << cbgheightexpn);
+                        int cbgzend = cbgzstart + (1 << cbglengthexpn);
+
+                        opj_tcd_precinct_t *prc = &band->precincts[precno];
+                        /* precinct size (global) */
+                        prc->x0 = int_max(cbgxstart, band->x0);
+                        prc->y0 = int_max(cbgystart, band->y0);
+                        prc->z0 = int_max(cbgzstart, band->z0);
+                        prc->x1 = int_min(cbgxend, band->x1);
+                        prc->y1 = int_min(cbgyend, band->y1);
+                        prc->z1 = int_min(cbgzend, band->z1);
+
+                        tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn;
+                        tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn;
+                        tlcblkzstart = int_floordivpow2(prc->z0, cblklengthexpn) << cblklengthexpn;
+                        brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn;
+                        brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn;
+                        brcblkzend = int_ceildivpow2(prc->z1, cblklengthexpn) << cblklengthexpn;
+                        prc->cblkno[0] = (brcblkxend - tlcblkxstart) >> cblkwidthexpn;
+                        prc->cblkno[1] = (brcblkyend - tlcblkystart) >> cblkheightexpn;
+                        prc->cblkno[2] = (brcblkzend - tlcblkzstart) >> cblklengthexpn;
+                        prc->cblkno[2] = (prc->cblkno[2] == 0) ? 1 : prc->cblkno[2];
+
+                        prc->cblks = (opj_tcd_cblk_t *) opj_malloc((prc->cblkno[0] * prc->cblkno[1] *
+                                     prc->cblkno[2]) * sizeof(opj_tcd_cblk_t));
+                        prc->incltree = tgt_create(prc->cblkno[0], prc->cblkno[1], prc->cblkno[2]);
+                        prc->imsbtree = tgt_create(prc->cblkno[0], prc->cblkno[1], prc->cblkno[2]);
+
+                        for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
+                                cblkno++) {
+                            int cblkxstart = tlcblkxstart + (cblkno % prc->cblkno[0]) *
+                                             (1 << cblkwidthexpn);
+                            int cblkystart = tlcblkystart + ((cblkno % (prc->cblkno[0] * prc->cblkno[1])) /
+                                                             prc->cblkno[0]) * (1 << cblkheightexpn);
+                            int cblkzstart = tlcblkzstart + (cblkno / (prc->cblkno[0] * prc->cblkno[1])) *
+                                             (1 << cblklengthexpn);
+                            int cblkxend = cblkxstart + (1 << cblkwidthexpn);
+                            int cblkyend = cblkystart + (1 << cblkheightexpn);
+                            int cblkzend = cblkzstart + (1 << cblklengthexpn);
+                            int prec = ((tilec->bpp > 16) ? 3 : ((tilec->bpp > 8) ? 2 : 1));
+                            /* code-block size (global) */
+                            opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
+
+                            /* code-block size (global) */
+                            cblk->x0 = int_max(cblkxstart, prc->x0);
+                            cblk->y0 = int_max(cblkystart, prc->y0);
+                            cblk->z0 = int_max(cblkzstart, prc->z0);
+                            cblk->x1 = int_min(cblkxend, prc->x1);
+                            cblk->y1 = int_min(cblkyend, prc->y1);
+                            cblk->z1 = int_min(cblkzend, prc->z1);
+                        }
+                    } /* precno */
+                } /* bandno */
+            } /* resno */
+        } /* compno */
+    } /* i = 0..cp->tileno_size */
+
+    /*tcd_dump(stdout, tcd, tcd->tcd_volume);*/
+
+    /*
+    Allocate place to store the decoded data = final volume
+    Place limited by the tile really present in the codestream
+    */
+
+    for (i = 0; i < volume->numcomps; i++) {
+        for (j = 0; j < cp->tileno_size; j++) {
+            tileno = cp->tileno[j];
+            x0 = (j == 0) ? tcd->tcd_volume->tiles[tileno].comps[i].x0 : int_min(x0,
+                    (unsigned int) tcd->tcd_volume->tiles[tileno].comps[i].x0);
+            y0 = (j == 0) ? tcd->tcd_volume->tiles[tileno].comps[i].y0 : int_min(y0,
+                    (unsigned int) tcd->tcd_volume->tiles[tileno].comps[i].y0);
+            z0 = (j == 0) ? tcd->tcd_volume->tiles[tileno].comps[i].z0 : int_min(z0,
+                    (unsigned int) tcd->tcd_volume->tiles[tileno].comps[i].z0);
+            x1 = (j == 0) ? tcd->tcd_volume->tiles[tileno].comps[i].x1 : int_max(x1,
+                    (unsigned int) tcd->tcd_volume->tiles[tileno].comps[i].x1);
+            y1 = (j == 0) ? tcd->tcd_volume->tiles[tileno].comps[i].y1 : int_max(y1,
+                    (unsigned int) tcd->tcd_volume->tiles[tileno].comps[i].y1);
+            z1 = (j == 0) ? tcd->tcd_volume->tiles[tileno].comps[i].z1 : int_max(z1,
+                    (unsigned int) tcd->tcd_volume->tiles[tileno].comps[i].z1);
+        }
+
+        w = x1 - x0;
+        h = y1 - y0;
+        l = z1 - z0;
+
+        volume->comps[i].data = (int *) opj_malloc(w * h * l * sizeof(int));
+        volume->comps[i].w = w;
+        volume->comps[i].h = h;
+        volume->comps[i].l = l;
+        volume->comps[i].x0 = x0;
+        volume->comps[i].y0 = y0;
+        volume->comps[i].z0 = z0;
+        volume->comps[i].bigendian = cp->bigendian;
+    }
 }
 
-void tcd_free_decode(opj_tcd_t *tcd) {
-       int tileno,compno,resno,bandno,precno;
-
-       opj_tcd_volume_t *tcd_volume = tcd->tcd_volume;
-       
-       for (tileno = 0; tileno < tcd_volume->tw * tcd_volume->th * tcd_volume->tl; tileno++) {
-               opj_tcd_tile_t *tile = &tcd_volume->tiles[tileno];
-               for (compno = 0; compno < tile->numcomps; compno++) {
-                       opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-                       for (resno = 0; resno < tilec->numresolution[0]; resno++) {
-                               opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-                               for (bandno = 0; bandno < res->numbands; bandno++) {
-                                       opj_tcd_band_t *band = &res->bands[bandno];
-                                       for (precno = 0; precno < res->prctno[1] * res->prctno[0] * res->prctno[2]; precno++) {
-                                               opj_tcd_precinct_t *prec = &band->precincts[precno];
-                                               if (prec->cblks != NULL) opj_free(prec->cblks);
-                                               if (prec->imsbtree != NULL) tgt_destroy(prec->imsbtree);
-                        if (prec->incltree != NULL) tgt_destroy(prec->incltree);
-                                               /*for (treeno = 0; treeno < prec->numtrees; treeno++){
+void tcd_free_decode(opj_tcd_t *tcd)
+{
+    int tileno, compno, resno, bandno, precno;
+
+    opj_tcd_volume_t *tcd_volume = tcd->tcd_volume;
+
+    for (tileno = 0; tileno < tcd_volume->tw * tcd_volume->th * tcd_volume->tl;
+            tileno++) {
+        opj_tcd_tile_t *tile = &tcd_volume->tiles[tileno];
+        for (compno = 0; compno < tile->numcomps; compno++) {
+            opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+            for (resno = 0; resno < tilec->numresolution[0]; resno++) {
+                opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+                for (bandno = 0; bandno < res->numbands; bandno++) {
+                    opj_tcd_band_t *band = &res->bands[bandno];
+                    for (precno = 0; precno < res->prctno[1] * res->prctno[0] * res->prctno[2];
+                            precno++) {
+                        opj_tcd_precinct_t *prec = &band->precincts[precno];
+                        if (prec->cblks != NULL) {
+                            opj_free(prec->cblks);
+                        }
+                        if (prec->imsbtree != NULL) {
+                            tgt_destroy(prec->imsbtree);
+                        }
+                        if (prec->incltree != NULL) {
+                            tgt_destroy(prec->incltree);
+                        }
+                        /*for (treeno = 0; treeno < prec->numtrees; treeno++){
                             if (prec->imsbtree[treeno] != NULL) tgt_destroy(prec->imsbtree[treeno]);
                             if (prec->incltree[treeno] != NULL) tgt_destroy(prec->incltree[treeno]);
-                                               }*/
-                                       }
-                                       if (band->precincts != NULL) opj_free(band->precincts);
-                               }
-                       }
-                       if (tilec->resolutions != NULL) opj_free(tilec->resolutions);
-               }
-               if (tile->comps != NULL) opj_free(tile->comps);
-       }
-
-       if (tcd_volume->tiles != NULL) opj_free(tcd_volume->tiles);
+                        }*/
+                    }
+                    if (band->precincts != NULL) {
+                        opj_free(band->precincts);
+                    }
+                }
+            }
+            if (tilec->resolutions != NULL) {
+                opj_free(tilec->resolutions);
+            }
+        }
+        if (tile->comps != NULL) {
+            opj_free(tile->comps);
+        }
+    }
+
+    if (tcd_volume->tiles != NULL) {
+        opj_free(tcd_volume->tiles);
+    }
 }
 
 
 
 /* ----------------------------------------------------------------------- */
-void tcd_makelayer_fixed(opj_tcd_t *tcd, int layno, int final) {
-       int compno, resno, bandno, precno, cblkno;
-       int value;                      /*, matrice[tcd_tcp->numlayers][tcd_tile->comps[0].numresolution[0]][3]; */
-       int matrice[10][10][3];
-       int i, j, k;
-
-       opj_cp_t *cp = tcd->cp;
-       opj_tcd_tile_t *tcd_tile = tcd->tcd_tile;
-       opj_tcp_t *tcd_tcp = tcd->tcp;
-
-       /*matrice=(int*)opj_malloc(tcd_tcp->numlayers*tcd_tile->comps[0].numresolution[0]*3*sizeof(int)); */
-       
-       for (compno = 0; compno < tcd_tile->numcomps; compno++) {
-               opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
-               for (i = 0; i < tcd_tcp->numlayers; i++) {
-                       for (j = 0; j < tilec->numresolution[0]; j++) {
-                               for (k = 0; k < 3; k++) {
-                                       matrice[i][j][k] =
-                                               (int) (cp->matrice[i * tilec->numresolution[0] * 3 + j * 3 + k] 
-                                               * (float) (tcd->volume->comps[compno].prec / 16.0));
-                               }
-                       }
-               }
-        
-               for (resno = 0; resno < tilec->numresolution[0]; resno++) {
-                       opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-                       for (bandno = 0; bandno < res->numbands; bandno++) {
-                               opj_tcd_band_t *band = &res->bands[bandno];
-                               for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2]; precno++) {
-                                       opj_tcd_precinct_t *prc = &band->precincts[precno];
-                                       for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) {
-                                               opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-                                               opj_tcd_layer_t *layer = &cblk->layers[layno];
-                                               int n;
-                                               int imsb = tcd->volume->comps[compno].prec - cblk->numbps;      /* number of bit-plan equal to zero */
-                                               /* Correction of the matrix of coefficient to include the IMSB information */
-                                               if (layno == 0) {
-                                                       value = matrice[layno][resno][bandno];
-                                                       if (imsb >= value) {
-                                                               value = 0;
-                                                       } else {
-                                                               value -= imsb;
-                                                       }
-                                               } else {
-                                                       value = matrice[layno][resno][bandno] - matrice[layno - 1][resno][bandno];
-                                                       if (imsb >= matrice[layno - 1][resno][bandno]) {
-                                                               value -= (imsb - matrice[layno - 1][resno][bandno]);
-                                                               if (value < 0) {
-                                                                       value = 0;
-                                                               }
-                                                       }
-                                               }
-                                               
-                                               if (layno == 0) {
-                                                       cblk->numpassesinlayers = 0;
-                                               }
-                                               
-                                               n = cblk->numpassesinlayers;
-                                               if (cblk->numpassesinlayers == 0) {
-                                                       if (value != 0) {
-                                                               n = 3 * value - 2 + cblk->numpassesinlayers;
-                                                       } else {
-                                                               n = cblk->numpassesinlayers;
-                                                       }
-                                               } else {
-                                                       n = 3 * value + cblk->numpassesinlayers;
-                                               }
-                                               
-                                               layer->numpasses = n - cblk->numpassesinlayers;
-                                               
-                                               if (!layer->numpasses)
-                                                       continue;
-                                               
-                                               if (cblk->numpassesinlayers == 0) {
-                                                       layer->len = cblk->passes[n - 1].rate;
-                                                       layer->data = cblk->data;
-                                               } else {
-                                                       layer->len = cblk->passes[n - 1].rate - cblk->passes[cblk->numpassesinlayers - 1].rate;
-                                                       layer->data = cblk->data + cblk->passes[cblk->numpassesinlayers - 1].rate;
-                                               }
-                                               if (final)
-                                                       cblk->numpassesinlayers = n;
-                                       }
-                               }
-                       }
-               }
-       }
+void tcd_makelayer_fixed(opj_tcd_t *tcd, int layno, int final)
+{
+    int compno, resno, bandno, precno, cblkno;
+    int value;          /*, matrice[tcd_tcp->numlayers][tcd_tile->comps[0].numresolution[0]][3]; */
+    int matrice[10][10][3];
+    int i, j, k;
+
+    opj_cp_t *cp = tcd->cp;
+    opj_tcd_tile_t *tcd_tile = tcd->tcd_tile;
+    opj_tcp_t *tcd_tcp = tcd->tcp;
+
+    /*matrice=(int*)opj_malloc(tcd_tcp->numlayers*tcd_tile->comps[0].numresolution[0]*3*sizeof(int)); */
+
+    for (compno = 0; compno < tcd_tile->numcomps; compno++) {
+        opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
+        for (i = 0; i < tcd_tcp->numlayers; i++) {
+            for (j = 0; j < tilec->numresolution[0]; j++) {
+                for (k = 0; k < 3; k++) {
+                    matrice[i][j][k] =
+                        (int)(cp->matrice[i * tilec->numresolution[0] * 3 + j * 3 + k]
+                              * (float)(tcd->volume->comps[compno].prec / 16.0));
+                }
+            }
+        }
+
+        for (resno = 0; resno < tilec->numresolution[0]; resno++) {
+            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+            for (bandno = 0; bandno < res->numbands; bandno++) {
+                opj_tcd_band_t *band = &res->bands[bandno];
+                for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2];
+                        precno++) {
+                    opj_tcd_precinct_t *prc = &band->precincts[precno];
+                    for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
+                            cblkno++) {
+                        opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
+                        opj_tcd_layer_t *layer = &cblk->layers[layno];
+                        int n;
+                        int imsb = tcd->volume->comps[compno].prec -
+                                   cblk->numbps;  /* number of bit-plan equal to zero */
+                        /* Correction of the matrix of coefficient to include the IMSB information */
+                        if (layno == 0) {
+                            value = matrice[layno][resno][bandno];
+                            if (imsb >= value) {
+                                value = 0;
+                            } else {
+                                value -= imsb;
+                            }
+                        } else {
+                            value = matrice[layno][resno][bandno] - matrice[layno - 1][resno][bandno];
+                            if (imsb >= matrice[layno - 1][resno][bandno]) {
+                                value -= (imsb - matrice[layno - 1][resno][bandno]);
+                                if (value < 0) {
+                                    value = 0;
+                                }
+                            }
+                        }
+
+                        if (layno == 0) {
+                            cblk->numpassesinlayers = 0;
+                        }
+
+                        n = cblk->numpassesinlayers;
+                        if (cblk->numpassesinlayers == 0) {
+                            if (value != 0) {
+                                n = 3 * value - 2 + cblk->numpassesinlayers;
+                            } else {
+                                n = cblk->numpassesinlayers;
+                            }
+                        } else {
+                            n = 3 * value + cblk->numpassesinlayers;
+                        }
+
+                        layer->numpasses = n - cblk->numpassesinlayers;
+
+                        if (!layer->numpasses) {
+                            continue;
+                        }
+
+                        if (cblk->numpassesinlayers == 0) {
+                            layer->len = cblk->passes[n - 1].rate;
+                            layer->data = cblk->data;
+                        } else {
+                            layer->len = cblk->passes[n - 1].rate - cblk->passes[cblk->numpassesinlayers -
+                                         1].rate;
+                            layer->data = cblk->data + cblk->passes[cblk->numpassesinlayers - 1].rate;
+                        }
+                        if (final) {
+                            cblk->numpassesinlayers = n;
+                        }
+                    }
+                }
+            }
+        }
+    }
 }
 
-void tcd_rateallocate_fixed(opj_tcd_t *tcd) {
-       int layno;
-       for (layno = 0; layno < tcd->tcp->numlayers; layno++) {
-               tcd_makelayer_fixed(tcd, layno, 1);
-       }
+void tcd_rateallocate_fixed(opj_tcd_t *tcd)
+{
+    int layno;
+    for (layno = 0; layno < tcd->tcp->numlayers; layno++) {
+        tcd_makelayer_fixed(tcd, layno, 1);
+    }
 }
 
-void tcd_makelayer(opj_tcd_t *tcd, int layno, double thresh, int final) {
-       int compno, resno, bandno, precno, cblkno, passno;
-       
-       opj_tcd_tile_t *tcd_tile = tcd->tcd_tile;
-
-       tcd_tile->distolayer[layno] = 0;        /* fixed_quality */
-       
-       for (compno = 0; compno < tcd_tile->numcomps; compno++) {
-               opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
-               for (resno = 0; resno < tilec->numresolution[0]; resno++) {
-                       opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-                       for (bandno = 0; bandno < res->numbands; bandno++) {
-                               opj_tcd_band_t *band = &res->bands[bandno];
-                               for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2]; precno++) {
-                                       opj_tcd_precinct_t *prc = &band->precincts[precno];
-                                       for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) {
-                                               opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-                                               opj_tcd_layer_t *layer = &cblk->layers[layno];
-                                               
-                                               int n;
-                                               if (layno == 0) {
-                                                       cblk->numpassesinlayers = 0;
-                                               }
-                                               n = cblk->numpassesinlayers;
-                                               for (passno = cblk->numpassesinlayers; passno < cblk->totalpasses; passno++) {
-                                                       int dr;
-                                                       double dd;
-                                                       opj_tcd_pass_t *pass = &cblk->passes[passno];
-                                                       if (n == 0) {
-                                                               dr = pass->rate;
-                                                               dd = pass->distortiondec;
-                                                       } else {
-                                                               dr = pass->rate - cblk->passes[n - 1].rate;
-                                                               dd = pass->distortiondec - cblk->passes[n - 1].distortiondec;
-                                                       }
-                                                       if (!dr) {
-                                                               if (dd)
-                                                                       n = passno + 1;
-                                                               continue;
-                                                       }
-                                                       if (dd / dr >= thresh){
-                                                               n = passno + 1;
-                                                       }
-                                               }
-                                               layer->numpasses = n - cblk->numpassesinlayers;
-                                               
-                                               if (!layer->numpasses) {
-                                                       layer->disto = 0;
-                                                       continue;
-                                               }
-                                               if (cblk->numpassesinlayers == 0) {
-                                                       layer->len = cblk->passes[n - 1].rate;
-                                                       layer->data = cblk->data;
-                                                       layer->disto = cblk->passes[n - 1].distortiondec;
-                                               } else {
-                                                       layer->len = cblk->passes[n - 1].rate - cblk->passes[cblk->numpassesinlayers - 1].rate;
-                                                       layer->data = cblk->data + cblk->passes[cblk->numpassesinlayers - 1].rate;
-                                                       layer->disto = cblk->passes[n - 1].distortiondec - cblk->passes[cblk->numpassesinlayers - 1].distortiondec;
-                                               }
-                                               
-                                               tcd_tile->distolayer[layno] += layer->disto;    /* fixed_quality */
-                                               
-                                               if (final)
-                                                       cblk->numpassesinlayers = n;
-
-                                       /*      fprintf(stdout,"MakeLayer : %d %f %d %d \n",layer->len, layer->disto, layer->numpasses, n);*/
-                                       }
-                               }
-                       }
-               }
-       }
+void tcd_makelayer(opj_tcd_t *tcd, int layno, double thresh, int final)
+{
+    int compno, resno, bandno, precno, cblkno, passno;
+
+    opj_tcd_tile_t *tcd_tile = tcd->tcd_tile;
+
+    tcd_tile->distolayer[layno] = 0;    /* fixed_quality */
+
+    for (compno = 0; compno < tcd_tile->numcomps; compno++) {
+        opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
+        for (resno = 0; resno < tilec->numresolution[0]; resno++) {
+            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+            for (bandno = 0; bandno < res->numbands; bandno++) {
+                opj_tcd_band_t *band = &res->bands[bandno];
+                for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2];
+                        precno++) {
+                    opj_tcd_precinct_t *prc = &band->precincts[precno];
+                    for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
+                            cblkno++) {
+                        opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
+                        opj_tcd_layer_t *layer = &cblk->layers[layno];
+
+                        int n;
+                        if (layno == 0) {
+                            cblk->numpassesinlayers = 0;
+                        }
+                        n = cblk->numpassesinlayers;
+                        for (passno = cblk->numpassesinlayers; passno < cblk->totalpasses; passno++) {
+                            int dr;
+                            double dd;
+                            opj_tcd_pass_t *pass = &cblk->passes[passno];
+                            if (n == 0) {
+                                dr = pass->rate;
+                                dd = pass->distortiondec;
+                            } else {
+                                dr = pass->rate - cblk->passes[n - 1].rate;
+                                dd = pass->distortiondec - cblk->passes[n - 1].distortiondec;
+                            }
+                            if (!dr) {
+                                if (dd) {
+                                    n = passno + 1;
+                                }
+                                continue;
+                            }
+                            if (dd / dr >= thresh) {
+                                n = passno + 1;
+                            }
+                        }
+                        layer->numpasses = n - cblk->numpassesinlayers;
+
+                        if (!layer->numpasses) {
+                            layer->disto = 0;
+                            continue;
+                        }
+                        if (cblk->numpassesinlayers == 0) {
+                            layer->len = cblk->passes[n - 1].rate;
+                            layer->data = cblk->data;
+                            layer->disto = cblk->passes[n - 1].distortiondec;
+                        } else {
+                            layer->len = cblk->passes[n - 1].rate - cblk->passes[cblk->numpassesinlayers -
+                                         1].rate;
+                            layer->data = cblk->data + cblk->passes[cblk->numpassesinlayers - 1].rate;
+                            layer->disto = cblk->passes[n - 1].distortiondec -
+                                           cblk->passes[cblk->numpassesinlayers - 1].distortiondec;
+                        }
+
+                        tcd_tile->distolayer[layno] += layer->disto;    /* fixed_quality */
+
+                        if (final) {
+                            cblk->numpassesinlayers = n;
+                        }
+
+                        /*  fprintf(stdout,"MakeLayer : %d %f %d %d \n",layer->len, layer->disto, layer->numpasses, n);*/
+                    }
+                }
+            }
+        }
+    }
 }
 
-bool tcd_rateallocate(opj_tcd_t *tcd, unsigned char *dest, int len, opj_volume_info_t * volume_info) {
-       int compno, resno, bandno, precno, cblkno, passno, layno;
-       double min, max;
-       double cumdisto[100];   /* fixed_quality */
-       const double K = 1;             /* 1.1; // fixed_quality */
-       double maxSE = 0;
-
-       opj_cp_t *cp = tcd->cp;
-       opj_tcd_tile_t *tcd_tile = tcd->tcd_tile;
-       opj_tcp_t *tcd_tcp = tcd->tcp;
-
-       min = DBL_MAX;
-       max = 0;
-       
-       tcd_tile->nbpix = 0;            /* fixed_quality */
-       
-       for (compno = 0; compno < tcd_tile->numcomps; compno++) {
-               opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
-               tilec->nbpix = 0;
-               for (resno = 0; resno < tilec->numresolution[0]; resno++) {
-                       opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-                       for (bandno = 0; bandno < res->numbands; bandno++) {
-                               opj_tcd_band_t *band = &res->bands[bandno];
-                               for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2]; precno++) {
-                                       opj_tcd_precinct_t *prc = &band->precincts[precno];
-                                       for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2]; cblkno++) {
-                                               opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
-                                               for (passno = 0; passno < cblk->totalpasses; passno++) {
-                                                       opj_tcd_pass_t *pass = &cblk->passes[passno];
-                                                       int dr;
-                                                       double dd, rdslope;
-                                                       if (passno == 0) {
-                                                               dr = pass->rate;
-                                                               dd = pass->distortiondec;
-                                                       } else {
-                                                               dr = pass->rate - cblk->passes[passno - 1].rate;
-                                                               dd = pass->distortiondec - cblk->passes[passno - 1].distortiondec;
-                                                       }
-                                                       if (dr == 0) {
-                                                               continue;
-                                                       }
-                                                       rdslope = dd / dr;
-                                                       if (rdslope < min) {
-                                                               min = rdslope;
-                                                       }
-                                                       if (rdslope > max) {
-                                                               max = rdslope;
-                                                       }
-
-                                               } /* passno */
-                                               
-                                               /* fixed_quality */
-                                               tcd_tile->nbpix += ((cblk->x1 - cblk->x0) * (cblk->y1 - cblk->y0) * (cblk->z1 - cblk->z0));
-                        tilec->nbpix += ((cblk->x1 - cblk->x0) * (cblk->y1 - cblk->y0) * (cblk->z1 - cblk->z0));
-                                       } /* cbklno */ 
-                               } /* precno */
-                       } /* bandno */
-               } /* resno */
-               
-               maxSE += (((double)(1 << tcd->volume->comps[compno].prec) - 1.0) 
-                       * ((double)(1 << tcd->volume->comps[compno].prec) -1.0)) 
-                       * ((double)(tilec->nbpix));
-       } /* compno */
-       
-       /* add antonin index */
-       if(volume_info && volume_info->index_on) {
-               opj_tile_info_t *info_TL = &volume_info->tile[tcd->tcd_tileno];
-               info_TL->nbpix = tcd_tile->nbpix;
-               info_TL->distotile = tcd_tile->distotile;
-               info_TL->thresh = (double *) opj_malloc(tcd_tcp->numlayers * sizeof(double));
-       }
-       /* dda */
-       
-       for (layno = 0; layno < tcd_tcp->numlayers; layno++) {
-               double lo = min;
-               double hi = max;
-               int success = 0;
-               int maxlen = tcd_tcp->rates[layno] ? int_min(((int) tcd_tcp->rates[layno]), len) : len;
-               double goodthresh;
-               double distotarget;             /* fixed_quality */
-               int i = 0;
-               
+bool tcd_rateallocate(opj_tcd_t *tcd, unsigned char *dest, int len,
+                      opj_volume_info_t * volume_info)
+{
+    int compno, resno, bandno, precno, cblkno, passno, layno;
+    double min, max;
+    double cumdisto[100];   /* fixed_quality */
+    const double K = 1;     /* 1.1; // fixed_quality */
+    double maxSE = 0;
+
+    opj_cp_t *cp = tcd->cp;
+    opj_tcd_tile_t *tcd_tile = tcd->tcd_tile;
+    opj_tcp_t *tcd_tcp = tcd->tcp;
+
+    min = DBL_MAX;
+    max = 0;
+
+    tcd_tile->nbpix = 0;        /* fixed_quality */
+
+    for (compno = 0; compno < tcd_tile->numcomps; compno++) {
+        opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
+        tilec->nbpix = 0;
+        for (resno = 0; resno < tilec->numresolution[0]; resno++) {
+            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+            for (bandno = 0; bandno < res->numbands; bandno++) {
+                opj_tcd_band_t *band = &res->bands[bandno];
+                for (precno = 0; precno < res->prctno[0] * res->prctno[1] * res->prctno[2];
+                        precno++) {
+                    opj_tcd_precinct_t *prc = &band->precincts[precno];
+                    for (cblkno = 0; cblkno < prc->cblkno[0] * prc->cblkno[1] * prc->cblkno[2];
+                            cblkno++) {
+                        opj_tcd_cblk_t *cblk = &prc->cblks[cblkno];
+                        for (passno = 0; passno < cblk->totalpasses; passno++) {
+                            opj_tcd_pass_t *pass = &cblk->passes[passno];
+                            int dr;
+                            double dd, rdslope;
+                            if (passno == 0) {
+                                dr = pass->rate;
+                                dd = pass->distortiondec;
+                            } else {
+                                dr = pass->rate - cblk->passes[passno - 1].rate;
+                                dd = pass->distortiondec - cblk->passes[passno - 1].distortiondec;
+                            }
+                            if (dr == 0) {
+                                continue;
+                            }
+                            rdslope = dd / dr;
+                            if (rdslope < min) {
+                                min = rdslope;
+                            }
+                            if (rdslope > max) {
+                                max = rdslope;
+                            }
+
+                        } /* passno */
+
+                        /* fixed_quality */
+                        tcd_tile->nbpix += ((cblk->x1 - cblk->x0) * (cblk->y1 - cblk->y0) *
+                                            (cblk->z1 - cblk->z0));
+                        tilec->nbpix += ((cblk->x1 - cblk->x0) * (cblk->y1 - cblk->y0) *
+                                         (cblk->z1 - cblk->z0));
+                    } /* cbklno */
+                } /* precno */
+            } /* bandno */
+        } /* resno */
+
+        maxSE += (((double)(1 << tcd->volume->comps[compno].prec) - 1.0)
+                  * ((double)(1 << tcd->volume->comps[compno].prec) - 1.0))
+                 * ((double)(tilec->nbpix));
+    } /* compno */
+
+    /* add antonin index */
+    if (volume_info && volume_info->index_on) {
+        opj_tile_info_t *info_TL = &volume_info->tile[tcd->tcd_tileno];
+        info_TL->nbpix = tcd_tile->nbpix;
+        info_TL->distotile = tcd_tile->distotile;
+        info_TL->thresh = (double *) opj_malloc(tcd_tcp->numlayers * sizeof(double));
+    }
+    /* dda */
+
+    for (layno = 0; layno < tcd_tcp->numlayers; layno++) {
+        double lo = min;
+        double hi = max;
+        int success = 0;
+        int maxlen = tcd_tcp->rates[layno] ? int_min(((int) tcd_tcp->rates[layno]),
+                     len) : len;
+        double goodthresh;
+        double distotarget;     /* fixed_quality */
+        int i = 0;
+
+        /* fixed_quality */
+        distotarget = tcd_tile->distotile - ((K * maxSE) / pow((float)10,
+                                             tcd_tcp->distoratio[layno] / 10));
+
+        if ((tcd_tcp->rates[layno]) || (cp->disto_alloc == 0)) {
+            opj_t2_t *t2 = t2_create(tcd->cinfo, tcd->volume, cp);
+            int oldl = 0, oldoldl = 0;
+            for (i = 0; i < 128; i++) {
+                double thresh = (lo + hi) / 2;
+                int l = 0;
+                double distoachieved = 0;   /* fixed_quality -q */
+
+                tcd_makelayer(tcd, layno, thresh, 0);
+
+                if (cp->fixed_quality) {    /* fixed_quality -q */
+                    distoachieved = (layno == 0) ? tcd_tile->distolayer[0] : cumdisto[layno - 1] +
+                                    tcd_tile->distolayer[layno];
+                    if (distoachieved < distotarget) {
+                        hi = thresh;
+                        continue;
+                    }
+                    lo = thresh;
+                } else {        /* disto_alloc -r, fixed_alloc -f */
+                    l = t2_encode_packets(t2, tcd->tcd_tileno, tcd_tile, layno + 1, dest, maxlen,
+                                          volume_info);
+                    /*fprintf(stdout, "layno %d i %d len=%d max=%d \n",layno,i,l,maxlen);*/
+                    if (l == -999) {
+                        lo = thresh;
+                        continue;
+                    } else if (l == oldl && oldl == oldoldl && tcd_tile->distolayer[layno] > 0.0 &&
+                               i > 32) {
+                        break;
+                    }
+                    hi = thresh;
+                    oldoldl = oldl;
+                    oldl = l;
+                }
+                success = 1;
+                goodthresh = thresh;
+            }
+            t2_destroy(t2);
+        } else {
+            success = 1;
+            goodthresh = min;
+        }
+        if (!success) {
+            return false;
+        }
+
+        if (volume_info && volume_info->index_on) { /* Threshold for Marcela Index */
+            volume_info->tile[tcd->tcd_tileno].thresh[layno] = goodthresh;
+        }
+        tcd_makelayer(tcd, layno, goodthresh, 1);
+
         /* fixed_quality */
-               distotarget = tcd_tile->distotile - ((K * maxSE) / pow((float)10, tcd_tcp->distoratio[layno] / 10));
-        
-               if ((tcd_tcp->rates[layno]) || (cp->disto_alloc==0)) {
-                       opj_t2_t *t2 = t2_create(tcd->cinfo, tcd->volume, cp);
-                       int oldl = 0, oldoldl = 0;
-                       for (i = 0; i < 128; i++) {
-                               double thresh = (lo + hi) / 2;
-                               int l = 0;
-                               double distoachieved = 0;       /* fixed_quality -q */
-                       
-                               tcd_makelayer(tcd, layno, thresh, 0);
-               
-                               if (cp->fixed_quality) {        /* fixed_quality -q */
-                                       distoachieved = (layno == 0) ? tcd_tile->distolayer[0] : cumdisto[layno - 1] + tcd_tile->distolayer[layno];
-                                       if (distoachieved < distotarget) {
-                                               hi = thresh; 
-                                               continue;
-                                       }
-                                       lo = thresh;
-                               } else {                /* disto_alloc -r, fixed_alloc -f */
-                                       l = t2_encode_packets(t2, tcd->tcd_tileno, tcd_tile, layno + 1, dest, maxlen, volume_info);
-                                       /*fprintf(stdout, "layno %d i %d len=%d max=%d \n",layno,i,l,maxlen);*/
-                                       if (l == -999) {
-                                               lo = thresh; 
-                                               continue;
-                                       } else if (l == oldl && oldl == oldoldl && tcd_tile->distolayer[layno] > 0.0 && i>32)
-                                               break;
-                                       hi = thresh;
-                                       oldoldl = oldl;
-                                       oldl = l;
-                               }
-                               success = 1;
-                               goodthresh = thresh;
-                       } 
-                       t2_destroy(t2);
-               } else {
-                       success = 1;
-                       goodthresh = min;
-               }
-               if (!success) {
-                       return false;
-               }
-               
-               if(volume_info && volume_info->index_on) {      /* Threshold for Marcela Index */
-                       volume_info->tile[tcd->tcd_tileno].thresh[layno] = goodthresh;
-               }
-               tcd_makelayer(tcd, layno, goodthresh, 1);
-               
-               /* fixed_quality */
-               cumdisto[layno] = (layno == 0) ? tcd_tile->distolayer[0] : cumdisto[layno - 1] + tcd_tile->distolayer[layno];   
-       }
-
-       return true;
+        cumdisto[layno] = (layno == 0) ? tcd_tile->distolayer[0] : cumdisto[layno - 1] +
+                          tcd_tile->distolayer[layno];
+    }
+
+    return true;
 }
 
 /* ----------------------------------------------------------------------- */
-int tcd_encode_tile(opj_tcd_t *tcd, int tileno, unsigned char *dest, int len, opj_volume_info_t * volume_info) {
-       int compno;
-       int l = 0, i, npck = 0;
-       double encoding_time;
-       
-       opj_tcd_tile_t  *tile = NULL;
-       opj_tcp_t               *tcd_tcp = NULL;
-       opj_cp_t                *cp = NULL;
-
-       opj_tcp_t               *tcp = &tcd->cp->tcps[0];
-       opj_tccp_t              *tccp = &tcp->tccps[0];
-       opj_volume_t    *volume = tcd->volume;
-       opj_t2_t                *t2 = NULL;             /* T2 component */
-
-       tcd->tcd_tileno = tileno;                       /* current encoded/decoded tile */
-       
-       tcd->tcd_tile = tcd->tcd_volume->tiles; /* tile information */
-       tile = tcd->tcd_tile;
-       
-       tcd->tcp = &tcd->cp->tcps[tileno];      /* coding/decoding params of tileno */  
-       tcd_tcp = tcd->tcp;
-       
-       cp = tcd->cp;           /* coding parameters */
-
-       /* INDEX >> */
-       if(volume_info && volume_info->index_on) {
-               opj_tcd_tilecomp_t *tilec_idx = &tile->comps[0];        /* based on component 0 */
-               for (i = 0; i < tilec_idx->numresolution[0]; i++) {
-                       opj_tcd_resolution_t *res_idx = &tilec_idx->resolutions[i];
-
-                       volume_info->tile[tileno].prctno[0][i] = res_idx->prctno[0];
-                       volume_info->tile[tileno].prctno[1][i] = res_idx->prctno[1];
-                       volume_info->tile[tileno].prctno[2][i] = res_idx->prctno[2];
-
-                       npck += res_idx->prctno[0] * res_idx->prctno[1] * res_idx->prctno[2];
-
-                       volume_info->tile[tileno].prctsiz[0][i] = tccp->prctsiz[0][i];
-                       volume_info->tile[tileno].prctsiz[1][i] = tccp->prctsiz[1][i];
-                       volume_info->tile[tileno].prctsiz[2][i] = tccp->prctsiz[2][i];
-               }
-               volume_info->tile[tileno].packet = (opj_packet_info_t *) opj_malloc(volume_info->comp * volume_info->layer * npck * sizeof(opj_packet_info_t));
-       }
-       /* << INDEX */
-       
-       /*---------------TILE-------------------*/
-       encoding_time = opj_clock();    /* time needed to encode a tile */
-       
-       for (compno = 0; compno < tile->numcomps; compno++) {
-               int x, y, z;
-               opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-               
-               int adjust;
-               int offset_x = int_ceildiv(volume->x0, volume->comps[compno].dx); /*ceil(x0 / subsampling_dx)*/
-               int offset_y = int_ceildiv(volume->y0, volume->comps[compno].dy);
-               int offset_z = int_ceildiv(volume->z0, volume->comps[compno].dz);
-               
-               int tw = tilec->x1 - tilec->x0;
-               int w = int_ceildiv(volume->x1 - volume->x0, volume->comps[compno].dx);
-               int th = tilec->y1 - tilec->y0;
-               int h = int_ceildiv(volume->y1 - volume->y0, volume->comps[compno].dy);
-               int tl = tilec->z1 - tilec->z0;
-               int l = int_ceildiv(volume->z1 - volume->z0, volume->comps[compno].dz);
-
-               
-               
-               /* extract tile data from volume.comps[0].data to tile.comps[0].data */
-               /*fprintf(stdout,"[INFO] Extract tile data\n");*/
-               if (tcd->cp->transform_format == TRF_3D_RLS || tcd->cp->transform_format == TRF_3D_LSE) {
-                       adjust = 0;
-               } else {
-            adjust = volume->comps[compno].sgnd ? 0 : 1 << (volume->comps[compno].prec - 1); /*sign=='+' --> 2^(prec-1)*/
-                       if (volume->comps[compno].dcoffset != 0){
-                               adjust += volume->comps[compno].dcoffset;
-                               fprintf(stdout,"[INFO] DC Offset applied: DCO = %d -> adjust = %d\n",volume->comps[compno].dcoffset,adjust);
-                       }
-               }               
-
-               if (tcd_tcp->tccps[compno].reversible == 1) { /*IF perfect reconstruction (DWT.5-3)*/
-                       for (z = tilec->z0; z < tilec->z1; z++) {
-                               for (y = tilec->y0; y < tilec->y1; y++) {
-                                       /* start of the src tile scanline */
-                                       int *data = &volume->comps[compno].data[(tilec->x0 - offset_x) + (y - offset_y) * w + (z - offset_z) * w * h];
-                                       /* start of the dst tile scanline */
-                                       int *tile_data = &tilec->data[(y - tilec->y0) * tw + (z - tilec->z0) * tw * th];
-                                       for (x = tilec->x0; x < tilec->x1; x++) {
-                                               *tile_data++ = *data++ - adjust;
-                                       }
-                               }
-                       }
-               } else if (tcd_tcp->tccps[compno].reversible == 0) { /*IF not (DWT.9-7)*/
-                       for (z = tilec->z0; z < tilec->z1; z++) {
-                               for (y = tilec->y0; y < tilec->y1; y++) {
-                                       /* start of the src tile scanline */
-                                       int *data = &volume->comps[compno].data[(tilec->x0 - offset_x) + (y - offset_y) * w + (z - offset_z) * w * h];
-                                       /* start of the dst tile scanline */
-                                       int *tile_data = &tilec->data[(y - tilec->y0) * tw + (z - tilec->z0) * tw * th];
-                                       for (x = tilec->x0; x < tilec->x1; x++) {
-                                               *tile_data++ = (*data++ - adjust) << 13;
-                                       }
-                               }
-                       }
-               }
-       
-       }
-
-       /*----------------MCT-------------------*/
-       if (tcd_tcp->mct) {
-               int samples = (tile->comps[0].x1 - tile->comps[0].x0) * (tile->comps[0].y1 - tile->comps[0].y0) * (tile->comps[0].z1 - tile->comps[0].z0);
-               fprintf(stdout,"[INFO] Tcd_encode_tile: mct\n");
-               if (tcd_tcp->tccps[0].reversible == 0) {
-                       mct_encode_real(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data, samples);
-               } else {
-                       mct_encode(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data, samples);
-               }
-       }
-       /*----------------TRANSFORM---------------------------------*/
-       fprintf(stdout,"[INFO] Tcd_encode_tile: Transform\n");
-       for (compno = 0; compno < tile->numcomps; compno++) {
-               opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-               dwt_encode(tilec, tcd_tcp->tccps[compno].dwtid);
-       } 
-
-       /*-------------------ENTROPY CODING-----------------------------*/
-       fprintf(stdout,"[INFO] Tcd_encode_tile: Entropy coding\n");
-       if ((cp->encoding_format == ENCOD_2EB)||(cp->encoding_format == ENCOD_3EB))
-       {
-               if (cp->encoding_format == ENCOD_2EB) {
-                       opj_t1_t *t1 = NULL;
-                       t1 = t1_create(tcd->cinfo);
-                       t1_encode_cblks(t1, tile, tcd_tcp);
-                       t1_destroy(t1); 
-               } else if (cp->encoding_format == ENCOD_3EB) {
-                       opj_t1_3d_t *t1 = NULL;         
-                       t1 = t1_3d_create(tcd->cinfo);
-                       t1_3d_encode_cblks(t1, tile, tcd_tcp);
-                       t1_3d_destroy(t1);      
-               }
-               /*-----------RATE-ALLOCATE------------------*/
-               /* INDEX */
-               if(volume_info) {
-                       volume_info->index_write = 0;
-               }
-               if (cp->disto_alloc || cp->fixed_quality) {     
-                       fprintf(stdout,"[INFO] Tcd_encode_tile: Rate-allocate\n");
-                       tcd_rateallocate(tcd, dest, len, volume_info);                  /* Normal Rate/distortion allocation */
-               } else {/* fixed_alloc */
-           fprintf(stdout,"[INFO] Tcd_encode_tile: Rate-allocate fixed\n");
-            tcd_rateallocate_fixed(tcd);                                                       /* Fixed layer allocation */
-               }
-
-               /*--------------TIER2------------------*/
-               /* INDEX */
-               if(volume_info) {
-                       volume_info->index_write = 1;
-               }
-               fprintf(stdout,"[INFO] Tcd_encode_tile: Tier - 2\n");
+int tcd_encode_tile(opj_tcd_t *tcd, int tileno, unsigned char *dest, int len,
+                    opj_volume_info_t * volume_info)
+{
+    int compno;
+    int l = 0, i, npck = 0;
+    double encoding_time;
+
+    opj_tcd_tile_t  *tile = NULL;
+    opj_tcp_t       *tcd_tcp = NULL;
+    opj_cp_t        *cp = NULL;
+
+    opj_tcp_t       *tcp = &tcd->cp->tcps[0];
+    opj_tccp_t      *tccp = &tcp->tccps[0];
+    opj_volume_t    *volume = tcd->volume;
+    opj_t2_t        *t2 = NULL;     /* T2 component */
+
+    tcd->tcd_tileno = tileno;           /* current encoded/decoded tile */
+
+    tcd->tcd_tile = tcd->tcd_volume->tiles; /* tile information */
+    tile = tcd->tcd_tile;
+
+    tcd->tcp = &tcd->cp->tcps[tileno];  /* coding/decoding params of tileno */
+    tcd_tcp = tcd->tcp;
+
+    cp = tcd->cp;       /* coding parameters */
+
+    /* INDEX >> */
+    if (volume_info && volume_info->index_on) {
+        opj_tcd_tilecomp_t *tilec_idx = &tile->comps[0];    /* based on component 0 */
+        for (i = 0; i < tilec_idx->numresolution[0]; i++) {
+            opj_tcd_resolution_t *res_idx = &tilec_idx->resolutions[i];
+
+            volume_info->tile[tileno].prctno[0][i] = res_idx->prctno[0];
+            volume_info->tile[tileno].prctno[1][i] = res_idx->prctno[1];
+            volume_info->tile[tileno].prctno[2][i] = res_idx->prctno[2];
+
+            npck += res_idx->prctno[0] * res_idx->prctno[1] * res_idx->prctno[2];
+
+            volume_info->tile[tileno].prctsiz[0][i] = tccp->prctsiz[0][i];
+            volume_info->tile[tileno].prctsiz[1][i] = tccp->prctsiz[1][i];
+            volume_info->tile[tileno].prctsiz[2][i] = tccp->prctsiz[2][i];
+        }
+        volume_info->tile[tileno].packet = (opj_packet_info_t *) opj_malloc(
+                                               volume_info->comp * volume_info->layer * npck * sizeof(opj_packet_info_t));
+    }
+    /* << INDEX */
+
+    /*---------------TILE-------------------*/
+    encoding_time = opj_clock();    /* time needed to encode a tile */
+
+    for (compno = 0; compno < tile->numcomps; compno++) {
+        int x, y, z;
+        opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+
+        int adjust;
+        int offset_x = int_ceildiv(volume->x0,
+                                   volume->comps[compno].dx); /*ceil(x0 / subsampling_dx)*/
+        int offset_y = int_ceildiv(volume->y0, volume->comps[compno].dy);
+        int offset_z = int_ceildiv(volume->z0, volume->comps[compno].dz);
+
+        int tw = tilec->x1 - tilec->x0;
+        int w = int_ceildiv(volume->x1 - volume->x0, volume->comps[compno].dx);
+        int th = tilec->y1 - tilec->y0;
+        int h = int_ceildiv(volume->y1 - volume->y0, volume->comps[compno].dy);
+        int tl = tilec->z1 - tilec->z0;
+        int l = int_ceildiv(volume->z1 - volume->z0, volume->comps[compno].dz);
+
+
+
+        /* extract tile data from volume.comps[0].data to tile.comps[0].data */
+        /*fprintf(stdout,"[INFO] Extract tile data\n");*/
+        if (tcd->cp->transform_format == TRF_3D_RLS ||
+                tcd->cp->transform_format == TRF_3D_LSE) {
+            adjust = 0;
+        } else {
+            adjust = volume->comps[compno].sgnd ? 0 : 1 << (volume->comps[compno].prec -
+                     1); /*sign=='+' --> 2^(prec-1)*/
+            if (volume->comps[compno].dcoffset != 0) {
+                adjust += volume->comps[compno].dcoffset;
+                fprintf(stdout, "[INFO] DC Offset applied: DCO = %d -> adjust = %d\n",
+                        volume->comps[compno].dcoffset, adjust);
+            }
+        }
+
+        if (tcd_tcp->tccps[compno].reversible ==
+                1) { /*IF perfect reconstruction (DWT.5-3)*/
+            for (z = tilec->z0; z < tilec->z1; z++) {
+                for (y = tilec->y0; y < tilec->y1; y++) {
+                    /* start of the src tile scanline */
+                    int *data = &volume->comps[compno].data[(tilec->x0 - offset_x) +
+                                                            (y - offset_y) * w + (z - offset_z) * w * h];
+                    /* start of the dst tile scanline */
+                    int *tile_data = &tilec->data[(y - tilec->y0) * tw + (z - tilec->z0) * tw * th];
+                    for (x = tilec->x0; x < tilec->x1; x++) {
+                        *tile_data++ = *data++ - adjust;
+                    }
+                }
+            }
+        } else if (tcd_tcp->tccps[compno].reversible == 0) { /*IF not (DWT.9-7)*/
+            for (z = tilec->z0; z < tilec->z1; z++) {
+                for (y = tilec->y0; y < tilec->y1; y++) {
+                    /* start of the src tile scanline */
+                    int *data = &volume->comps[compno].data[(tilec->x0 - offset_x) +
+                                                            (y - offset_y) * w + (z - offset_z) * w * h];
+                    /* start of the dst tile scanline */
+                    int *tile_data = &tilec->data[(y - tilec->y0) * tw + (z - tilec->z0) * tw * th];
+                    for (x = tilec->x0; x < tilec->x1; x++) {
+                        *tile_data++ = (*data++ - adjust) << 13;
+                    }
+                }
+            }
+        }
+
+    }
+
+    /*----------------MCT-------------------*/
+    if (tcd_tcp->mct) {
+        int samples = (tile->comps[0].x1 - tile->comps[0].x0) *
+                      (tile->comps[0].y1 - tile->comps[0].y0) * (tile->comps[0].z1 -
+                              tile->comps[0].z0);
+        fprintf(stdout, "[INFO] Tcd_encode_tile: mct\n");
+        if (tcd_tcp->tccps[0].reversible == 0) {
+            mct_encode_real(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data,
+                            samples);
+        } else {
+            mct_encode(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data,
+                       samples);
+        }
+    }
+    /*----------------TRANSFORM---------------------------------*/
+    fprintf(stdout, "[INFO] Tcd_encode_tile: Transform\n");
+    for (compno = 0; compno < tile->numcomps; compno++) {
+        opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+        dwt_encode(tilec, tcd_tcp->tccps[compno].dwtid);
+    }
+
+    /*-------------------ENTROPY CODING-----------------------------*/
+    fprintf(stdout, "[INFO] Tcd_encode_tile: Entropy coding\n");
+    if ((cp->encoding_format == ENCOD_2EB) || (cp->encoding_format == ENCOD_3EB)) {
+        if (cp->encoding_format == ENCOD_2EB) {
+            opj_t1_t *t1 = NULL;
+            t1 = t1_create(tcd->cinfo);
+            t1_encode_cblks(t1, tile, tcd_tcp);
+            t1_destroy(t1);
+        } else if (cp->encoding_format == ENCOD_3EB) {
+            opj_t1_3d_t *t1 = NULL;
+            t1 = t1_3d_create(tcd->cinfo);
+            t1_3d_encode_cblks(t1, tile, tcd_tcp);
+            t1_3d_destroy(t1);
+        }
+        /*-----------RATE-ALLOCATE------------------*/
+        /* INDEX */
+        if (volume_info) {
+            volume_info->index_write = 0;
+        }
+        if (cp->disto_alloc || cp->fixed_quality) {
+            fprintf(stdout, "[INFO] Tcd_encode_tile: Rate-allocate\n");
+            tcd_rateallocate(tcd, dest, len,
+                             volume_info);          /* Normal Rate/distortion allocation */
+        } else {/* fixed_alloc */
+            fprintf(stdout, "[INFO] Tcd_encode_tile: Rate-allocate fixed\n");
+            tcd_rateallocate_fixed(
+                tcd);                            /* Fixed layer allocation */
+        }
+
+        /*--------------TIER2------------------*/
+        /* INDEX */
+        if (volume_info) {
+            volume_info->index_write = 1;
+        }
+        fprintf(stdout, "[INFO] Tcd_encode_tile: Tier - 2\n");
         t2 = t2_create(tcd->cinfo, volume, cp);
-               l = t2_encode_packets(t2, tileno, tile, tcd_tcp->numlayers, dest, len, volume_info);
+        l = t2_encode_packets(t2, tileno, tile, tcd_tcp->numlayers, dest, len,
+                              volume_info);
         t2_destroy(t2);
-       } else if ((cp->encoding_format == ENCOD_2GR)||(cp->encoding_format == ENCOD_3GR)) {
-               /*if(volume_info) {
-                       volume_info->index_write = 1;
-               }
-               gr = golomb_create(tcd->cinfo, volume, cp);
-               l = golomb_encode(gr, tileno, tile, dest, len, volume_info);
-               golomb_destroy(gr);*/
-       }
-
-       
-       /*---------------CLEAN-------------------*/
-       fprintf(stdout,"[INFO] Tcd_encode_tile: %d bytes coded\n",l);
-       encoding_time = opj_clock() - encoding_time;
-       opj_event_msg(tcd->cinfo, EVT_INFO, "- tile encoded in %f s\n", encoding_time);
-       
-       /* cleaning memory */
-       for (compno = 0; compno < tile->numcomps; compno++) {
-               tcd->tilec = &tile->comps[compno];
-               opj_free(tcd->tilec->data);
-       }
-       
-       if (l == -999){
-               fprintf(stdout,"[ERROR] Unable to perform T2 tier. Return -999.\n");
-               return 0;
-       }
-
-       return l;
+    } else if ((cp->encoding_format == ENCOD_2GR) ||
+               (cp->encoding_format == ENCOD_3GR)) {
+        /*if(volume_info) {
+            volume_info->index_write = 1;
+        }
+        gr = golomb_create(tcd->cinfo, volume, cp);
+        l = golomb_encode(gr, tileno, tile, dest, len, volume_info);
+        golomb_destroy(gr);*/
+    }
+
+
+    /*---------------CLEAN-------------------*/
+    fprintf(stdout, "[INFO] Tcd_encode_tile: %d bytes coded\n", l);
+    encoding_time = opj_clock() - encoding_time;
+    opj_event_msg(tcd->cinfo, EVT_INFO, "- tile encoded in %f s\n", encoding_time);
+
+    /* cleaning memory */
+    for (compno = 0; compno < tile->numcomps; compno++) {
+        tcd->tilec = &tile->comps[compno];
+        opj_free(tcd->tilec->data);
+    }
+
+    if (l == -999) {
+        fprintf(stdout, "[ERROR] Unable to perform T2 tier. Return -999.\n");
+        return 0;
+    }
+
+    return l;
 }
 
 
-bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len, int tileno) {
-       int l, i;
-       int compno, eof = 0;
-       double tile_time, t1_time, dwt_time;
-
-       opj_tcd_tile_t *tile = NULL;
-       opj_t2_t *t2 = NULL;            /* T2 component */
-       
-       tcd->tcd_tileno = tileno;
-       tcd->tcd_tile = &(tcd->tcd_volume->tiles[tileno]);
-       tcd->tcp = &(tcd->cp->tcps[tileno]);
-       tile = tcd->tcd_tile;
-       
-       tile_time = opj_clock();        /* time needed to decode a tile */
-       opj_event_msg(tcd->cinfo, EVT_INFO, "tile %d / %d\n", tileno + 1, tcd->cp->tw * tcd->cp->th * tcd->cp->tl);
-
-       if ((tcd->cp->encoding_format == ENCOD_2EB) || (tcd->cp->encoding_format == ENCOD_3EB)) {
-               /*--------------TIER2------------------*/
-               t2 = t2_create(tcd->cinfo, tcd->volume, tcd->cp);
-               l = t2_decode_packets(t2, src, len, tileno, tile);
-               t2_destroy(t2);
-               opj_event_msg(tcd->cinfo, EVT_INFO, "Tcd_decode_tile: %d bytes decoded\n",l);
-               
-               if (l == -999) {
-                       eof = 1;
-                       opj_event_msg(tcd->cinfo, EVT_ERROR, "Tcd_decode_tile: incomplete bitstream\n");
-               }
-       
-               /*------------------TIER1-----------------*/
-               opj_event_msg(tcd->cinfo, EVT_INFO, "Tcd_decode_tile: Entropy decoding %d \n",tcd->cp->encoding_format);
-               t1_time = opj_clock();  /* time needed to decode a tile */
-               if (tcd->cp->encoding_format == ENCOD_2EB) {
-                       opj_t1_t *t1 = NULL;            /* T1 component */
-                       t1 = t1_create(tcd->cinfo);
-                       t1_decode_cblks(t1, tile, tcd->tcp);
-                       t1_destroy(t1);
-               }else if (tcd->cp->encoding_format == ENCOD_3EB) {
-                       opj_t1_3d_t *t1 = NULL;         /* T1 component */
-                       t1 = t1_3d_create(tcd->cinfo);
-                       t1_3d_decode_cblks(t1, tile, tcd->tcp);
-                       t1_3d_destroy(t1);
-               }
-
-               t1_time = opj_clock() - t1_time;
-               #ifdef VERBOSE
-                               opj_event_msg(tcd->cinfo, EVT_INFO, "- tier-1 took %f s\n", t1_time);
-               #endif
-       } else if ((tcd->cp->encoding_format == ENCOD_2GR)||(tcd->cp->encoding_format == ENCOD_3GR)) {
-               opj_event_msg(tcd->cinfo, EVT_INFO, "Tcd_decode_tile: Entropy decoding -- Does nothing :-D\n");
-               /*
-               gr = golomb_create(tcd->cinfo, tcd->volume, tcd->cp);
-               l = golomb_decode(gr, tileno, tile, src, len);
-               golomb_destroy(gr);
-               if (l == -999) {
-                       eof = 1;
-                       opj_event_msg(tcd->cinfo, EVT_ERROR, "Tcd_decode_tile: incomplete bitstream\n");
-               }
-               */
-       } 
-
-       /*----------------DWT---------------------*/
-       fprintf(stdout,"[INFO] Tcd_decode_tile: Inverse DWT\n");
-       dwt_time = opj_clock(); /* time needed to decode a tile */
-       for (compno = 0; compno < tile->numcomps; compno++) {
-               opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-               int stops[3], dwtid[3];
-       
-               for (i = 0; i < 3; i++) {
-                       if (tcd->cp->reduce[i] != 0) 
-                               tcd->volume->comps[compno].resno_decoded[i] = tile->comps[compno].numresolution[i] - tcd->cp->reduce[i] - 1;
-                       stops[i] = tilec->numresolution[i] - 1 - tcd->volume->comps[compno].resno_decoded[i];
-                       if (stops[i] < 0) stops[i]=0;
-                       dwtid[i] = tcd->cp->tcps->tccps[compno].dwtid[i];
-               }
-               
-               dwt_decode(tilec, stops, dwtid);
-
-               for (i = 0; i < 3; i++) {
-                       if (tile->comps[compno].numresolution[i] > 0) {
-                               tcd->volume->comps[compno].factor[i] = tile->comps[compno].numresolution[i] - (tcd->volume->comps[compno].resno_decoded[i] + 1);
-                               if ( (tcd->volume->comps[compno].factor[i]) < 0 )
-                                       tcd->volume->comps[compno].factor[i] = 0;
-                       }
-               }
-       }
-       dwt_time = opj_clock() - dwt_time;
-       #ifdef VERBOSE
-                       opj_event_msg(tcd->cinfo, EVT_INFO, "- dwt took %f s\n", dwt_time);
-       #endif
-
-       /*----------------MCT-------------------*/
-       
-       if (tcd->tcp->mct) {
-               if (tcd->tcp->tccps[0].reversible == 1) {
-                       mct_decode(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data, 
-                               (tile->comps[0].x1 - tile->comps[0].x0) * (tile->comps[0].y1 - tile->comps[0].y0) * (tile->comps[0].z1 - tile->comps[0].z0));
-               } else {
-                       mct_decode_real(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data, 
-                               (tile->comps[0].x1 - tile->comps[0].x0) * (tile->comps[0].y1 - tile->comps[0].y0)* (tile->comps[0].z1 - tile->comps[0].z0));
-               }
-       }
-       
-       /*---------------TILE-------------------*/
-       
-       for (compno = 0; compno < tile->numcomps; compno++) {
-               opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-               opj_tcd_resolution_t *res =     &tilec->resolutions[tcd->volume->comps[compno].resno_decoded[0]];
-               int adjust;
-               int minval = tcd->volume->comps[compno].sgnd ? -(1 << (tcd->volume->comps[compno].prec - 1)) : 0;
-               int maxval = tcd->volume->comps[compno].sgnd ? (1 << (tcd->volume->comps[compno].prec - 1)) - 1 : (1 << tcd->volume->comps[compno].prec) - 1;
-               
-               int tw = tilec->x1 - tilec->x0;
-               int w = tcd->volume->comps[compno].w;
-               int th = tilec->y1 - tilec->y0;
-               int h = tcd->volume->comps[compno].h;
-
-               int i, j, k;
-               int offset_x = int_ceildivpow2(tcd->volume->comps[compno].x0, tcd->volume->comps[compno].factor[0]);
-               int offset_y = int_ceildivpow2(tcd->volume->comps[compno].y0, tcd->volume->comps[compno].factor[1]);
-               int offset_z = int_ceildivpow2(tcd->volume->comps[compno].z0, tcd->volume->comps[compno].factor[2]);
-               
-               if (tcd->cp->transform_format == TRF_3D_RLS || tcd->cp->transform_format == TRF_3D_LSE) {
-                       adjust = 0;
-               } else {
-            adjust = tcd->volume->comps[compno].sgnd ? 0 : 1 << (tcd->volume->comps[compno].prec - 1); /*sign=='+' --> 2^(prec-1)*/
-                       if (tcd->volume->comps[compno].dcoffset != 0){
-                               adjust += tcd->volume->comps[compno].dcoffset;
-                               fprintf(stdout,"[INFO] DC Offset applied: DCO = %d -> adjust = %d\n",tcd->volume->comps[compno].dcoffset,adjust);
-                       }
-               }
-
-               for (k = res->z0; k < res->z1; k++) {
-                       for (j = res->y0; j < res->y1; j++) {
-                               for (i = res->x0; i < res->x1; i++) {
-                                       int v;
-                                       float tmp = (float)((tilec->data[i - res->x0 + (j - res->y0) * tw + (k - res->z0) * tw * th]) / 8192.0);
-
-                                       if (tcd->tcp->tccps[compno].reversible == 1) {
-                                               v = tilec->data[i - res->x0 + (j - res->y0) * tw + (k - res->z0) * tw * th];
-                                       } else {
-                                               int tmp2 = ((int) (floor(fabs(tmp)))) + ((int) floor(fabs(tmp*2))%2);
-                                               v = ((tmp < 0) ? -tmp2:tmp2);
-                                       }
-                                       v += adjust;
-                                       
-                                       tcd->volume->comps[compno].data[(i - offset_x) + (j - offset_y) * w + (k - offset_z) * w * h] = int_clamp(v, minval, maxval);
-                               }
-                       }
-               }
-       }
-       
-       tile_time = opj_clock() - tile_time;    /* time needed to decode a tile */
-       opj_event_msg(tcd->cinfo, EVT_INFO, "- tile decoded in %f s\n", tile_time);
-               
-       for (compno = 0; compno < tile->numcomps; compno++) {
-               opj_free(tcd->tcd_volume->tiles[tileno].comps[compno].data);
-               tcd->tcd_volume->tiles[tileno].comps[compno].data = NULL;
-       }
-       
-       if (eof) {
-               return false;
-       }
-       
-       return true;
+bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len, int tileno)
+{
+    int l, i;
+    int compno, eof = 0;
+    double tile_time, t1_time, dwt_time;
+
+    opj_tcd_tile_t *tile = NULL;
+    opj_t2_t *t2 = NULL;        /* T2 component */
+
+    tcd->tcd_tileno = tileno;
+    tcd->tcd_tile = &(tcd->tcd_volume->tiles[tileno]);
+    tcd->tcp = &(tcd->cp->tcps[tileno]);
+    tile = tcd->tcd_tile;
+
+    tile_time = opj_clock();    /* time needed to decode a tile */
+    opj_event_msg(tcd->cinfo, EVT_INFO, "tile %d / %d\n", tileno + 1,
+                  tcd->cp->tw * tcd->cp->th * tcd->cp->tl);
+
+    if ((tcd->cp->encoding_format == ENCOD_2EB) ||
+            (tcd->cp->encoding_format == ENCOD_3EB)) {
+        /*--------------TIER2------------------*/
+        t2 = t2_create(tcd->cinfo, tcd->volume, tcd->cp);
+        l = t2_decode_packets(t2, src, len, tileno, tile);
+        t2_destroy(t2);
+        opj_event_msg(tcd->cinfo, EVT_INFO, "Tcd_decode_tile: %d bytes decoded\n", l);
+
+        if (l == -999) {
+            eof = 1;
+            opj_event_msg(tcd->cinfo, EVT_ERROR, "Tcd_decode_tile: incomplete bitstream\n");
+        }
+
+        /*------------------TIER1-----------------*/
+        opj_event_msg(tcd->cinfo, EVT_INFO, "Tcd_decode_tile: Entropy decoding %d \n",
+                      tcd->cp->encoding_format);
+        t1_time = opj_clock();  /* time needed to decode a tile */
+        if (tcd->cp->encoding_format == ENCOD_2EB) {
+            opj_t1_t *t1 = NULL;        /* T1 component */
+            t1 = t1_create(tcd->cinfo);
+            t1_decode_cblks(t1, tile, tcd->tcp);
+            t1_destroy(t1);
+        } else if (tcd->cp->encoding_format == ENCOD_3EB) {
+            opj_t1_3d_t *t1 = NULL;     /* T1 component */
+            t1 = t1_3d_create(tcd->cinfo);
+            t1_3d_decode_cblks(t1, tile, tcd->tcp);
+            t1_3d_destroy(t1);
+        }
+
+        t1_time = opj_clock() - t1_time;
+#ifdef VERBOSE
+        opj_event_msg(tcd->cinfo, EVT_INFO, "- tier-1 took %f s\n", t1_time);
+#endif
+    } else if ((tcd->cp->encoding_format == ENCOD_2GR) ||
+               (tcd->cp->encoding_format == ENCOD_3GR)) {
+        opj_event_msg(tcd->cinfo, EVT_INFO,
+                      "Tcd_decode_tile: Entropy decoding -- Does nothing :-D\n");
+        /*
+        gr = golomb_create(tcd->cinfo, tcd->volume, tcd->cp);
+        l = golomb_decode(gr, tileno, tile, src, len);
+        golomb_destroy(gr);
+        if (l == -999) {
+            eof = 1;
+            opj_event_msg(tcd->cinfo, EVT_ERROR, "Tcd_decode_tile: incomplete bitstream\n");
+        }
+        */
+    }
+
+    /*----------------DWT---------------------*/
+    fprintf(stdout, "[INFO] Tcd_decode_tile: Inverse DWT\n");
+    dwt_time = opj_clock(); /* time needed to decode a tile */
+    for (compno = 0; compno < tile->numcomps; compno++) {
+        opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+        int stops[3], dwtid[3];
+
+        for (i = 0; i < 3; i++) {
+            if (tcd->cp->reduce[i] != 0) {
+                tcd->volume->comps[compno].resno_decoded[i] =
+                    tile->comps[compno].numresolution[i] - tcd->cp->reduce[i] - 1;
+            }
+            stops[i] = tilec->numresolution[i] - 1 -
+                       tcd->volume->comps[compno].resno_decoded[i];
+            if (stops[i] < 0) {
+                stops[i] = 0;
+            }
+            dwtid[i] = tcd->cp->tcps->tccps[compno].dwtid[i];
+        }
+
+        dwt_decode(tilec, stops, dwtid);
+
+        for (i = 0; i < 3; i++) {
+            if (tile->comps[compno].numresolution[i] > 0) {
+                tcd->volume->comps[compno].factor[i] = tile->comps[compno].numresolution[i] -
+                                                       (tcd->volume->comps[compno].resno_decoded[i] + 1);
+                if ((tcd->volume->comps[compno].factor[i]) < 0) {
+                    tcd->volume->comps[compno].factor[i] = 0;
+                }
+            }
+        }
+    }
+    dwt_time = opj_clock() - dwt_time;
+#ifdef VERBOSE
+    opj_event_msg(tcd->cinfo, EVT_INFO, "- dwt took %f s\n", dwt_time);
+#endif
+
+    /*----------------MCT-------------------*/
+
+    if (tcd->tcp->mct) {
+        if (tcd->tcp->tccps[0].reversible == 1) {
+            mct_decode(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data,
+                       (tile->comps[0].x1 - tile->comps[0].x0) * (tile->comps[0].y1 -
+                               tile->comps[0].y0) * (tile->comps[0].z1 - tile->comps[0].z0));
+        } else {
+            mct_decode_real(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data,
+                            (tile->comps[0].x1 - tile->comps[0].x0) * (tile->comps[0].y1 -
+                                    tile->comps[0].y0) * (tile->comps[0].z1 - tile->comps[0].z0));
+        }
+    }
+
+    /*---------------TILE-------------------*/
+
+    for (compno = 0; compno < tile->numcomps; compno++) {
+        opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+        opj_tcd_resolution_t *res =
+            &tilec->resolutions[tcd->volume->comps[compno].resno_decoded[0]];
+        int adjust;
+        int minval = tcd->volume->comps[compno].sgnd ? -(1 <<
+                     (tcd->volume->comps[compno].prec - 1)) : 0;
+        int maxval = tcd->volume->comps[compno].sgnd ? (1 <<
+                     (tcd->volume->comps[compno].prec - 1)) - 1 : (1 <<
+                             tcd->volume->comps[compno].prec) - 1;
+
+        int tw = tilec->x1 - tilec->x0;
+        int w = tcd->volume->comps[compno].w;
+        int th = tilec->y1 - tilec->y0;
+        int h = tcd->volume->comps[compno].h;
+
+        int i, j, k;
+        int offset_x = int_ceildivpow2(tcd->volume->comps[compno].x0,
+                                       tcd->volume->comps[compno].factor[0]);
+        int offset_y = int_ceildivpow2(tcd->volume->comps[compno].y0,
+                                       tcd->volume->comps[compno].factor[1]);
+        int offset_z = int_ceildivpow2(tcd->volume->comps[compno].z0,
+                                       tcd->volume->comps[compno].factor[2]);
+
+        if (tcd->cp->transform_format == TRF_3D_RLS ||
+                tcd->cp->transform_format == TRF_3D_LSE) {
+            adjust = 0;
+        } else {
+            adjust = tcd->volume->comps[compno].sgnd ? 0 : 1 <<
+                     (tcd->volume->comps[compno].prec - 1); /*sign=='+' --> 2^(prec-1)*/
+            if (tcd->volume->comps[compno].dcoffset != 0) {
+                adjust += tcd->volume->comps[compno].dcoffset;
+                fprintf(stdout, "[INFO] DC Offset applied: DCO = %d -> adjust = %d\n",
+                        tcd->volume->comps[compno].dcoffset, adjust);
+            }
+        }
+
+        for (k = res->z0; k < res->z1; k++) {
+            for (j = res->y0; j < res->y1; j++) {
+                for (i = res->x0; i < res->x1; i++) {
+                    int v;
+                    float tmp = (float)((tilec->data[i - res->x0 + (j - res->y0) * tw +
+                                                       (k - res->z0) * tw * th]) / 8192.0);
+
+                    if (tcd->tcp->tccps[compno].reversible == 1) {
+                        v = tilec->data[i - res->x0 + (j - res->y0) * tw + (k - res->z0) * tw * th];
+                    } else {
+                        int tmp2 = ((int)(floor(fabs(tmp)))) + ((int) floor(fabs(tmp * 2)) % 2);
+                        v = ((tmp < 0) ? -tmp2 : tmp2);
+                    }
+                    v += adjust;
+
+                    tcd->volume->comps[compno].data[(i - offset_x) + (j - offset_y) * w +
+                                                    (k - offset_z) * w * h] = int_clamp(v, minval, maxval);
+                }
+            }
+        }
+    }
+
+    tile_time = opj_clock() - tile_time;    /* time needed to decode a tile */
+    opj_event_msg(tcd->cinfo, EVT_INFO, "- tile decoded in %f s\n", tile_time);
+
+    for (compno = 0; compno < tile->numcomps; compno++) {
+        opj_free(tcd->tcd_volume->tiles[tileno].comps[compno].data);
+        tcd->tcd_volume->tiles[tileno].comps[compno].data = NULL;
+    }
+
+    if (eof) {
+        return false;
+    }
+
+    return true;
 }
 
index 5993cbd53a7cd3e6d19b9019884414f2b6658e01..fc1222d8ec1613509755a8064a76ec19b50220b8 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
 
 #include "opj_includes.h"
 
-/* 
+/*
 ==========================================================
    Tag-tree coder interface
 ==========================================================
 */
-void tgt_tree_dump (FILE *fd, opj_tgt_tree_t * tree){
-       int nodesno;
+void tgt_tree_dump(FILE *fd, opj_tgt_tree_t * tree)
+{
+    int nodesno;
 
-       fprintf(fd, "TGT_TREE {\n");
-       fprintf(fd, "  numnodes: %d \n", tree->numnodes);       
-       fprintf(fd, "  numleafsh: %d, numleafsv: %d, numleafsz: %d,\n", tree->numleafsh, tree->numleafsv, tree->numleafsz);
+    fprintf(fd, "TGT_TREE {\n");
+    fprintf(fd, "  numnodes: %d \n", tree->numnodes);
+    fprintf(fd, "  numleafsh: %d, numleafsv: %d, numleafsz: %d,\n", tree->numleafsh,
+            tree->numleafsv, tree->numleafsz);
 
-       for (nodesno = 0; nodesno < tree->numnodes; nodesno++) {
-               fprintf(fd, "tgt_node %d {\n", nodesno);
-               fprintf(fd, "  value: %d \n", tree->nodes[nodesno].value);
-               fprintf(fd, "  low: %d \n", tree->nodes[nodesno].low);
-               fprintf(fd, "  known: %d \n", tree->nodes[nodesno].known);
-               if (tree->nodes[nodesno].parent) {
-                       fprintf(fd, "  parent.value: %d \n", tree->nodes[nodesno].parent->value);
-                       fprintf(fd, "  parent.low: %d \n", tree->nodes[nodesno].parent->low);
-                       fprintf(fd, "  parent.known: %d \n", tree->nodes[nodesno].parent->known);
-               }
-               fprintf(fd, "}\n");
+    for (nodesno = 0; nodesno < tree->numnodes; nodesno++) {
+        fprintf(fd, "tgt_node %d {\n", nodesno);
+        fprintf(fd, "  value: %d \n", tree->nodes[nodesno].value);
+        fprintf(fd, "  low: %d \n", tree->nodes[nodesno].low);
+        fprintf(fd, "  known: %d \n", tree->nodes[nodesno].known);
+        if (tree->nodes[nodesno].parent) {
+            fprintf(fd, "  parent.value: %d \n", tree->nodes[nodesno].parent->value);
+            fprintf(fd, "  parent.low: %d \n", tree->nodes[nodesno].parent->low);
+            fprintf(fd, "  parent.known: %d \n", tree->nodes[nodesno].parent->known);
+        }
+        fprintf(fd, "}\n");
 
-       }
-       fprintf(fd, "}\n");
+    }
+    fprintf(fd, "}\n");
 
 }
 
 
-opj_tgt_tree_t *tgt_create(int numleafsh, int numleafsv, int numleafsz) {
-       
-       int nplh[32];
-       int nplv[32];
-       int nplz[32];
-       opj_tgt_node_t *node = NULL;
-       opj_tgt_node_t *parentnode = NULL;
-       opj_tgt_node_t *parentnode0 = NULL;
-       opj_tgt_node_t *parentnode1 = NULL;
-       opj_tgt_tree_t *tree = NULL;
-       int i, j, k, p, p0;
-       int numlvls;
-       int n, z = 0;
+opj_tgt_tree_t *tgt_create(int numleafsh, int numleafsv, int numleafsz)
+{
+
+    int nplh[32];
+    int nplv[32];
+    int nplz[32];
+    opj_tgt_node_t *node = NULL;
+    opj_tgt_node_t *parentnode = NULL;
+    opj_tgt_node_t *parentnode0 = NULL;
+    opj_tgt_node_t *parentnode1 = NULL;
+    opj_tgt_tree_t *tree = NULL;
+    int i, j, k, p, p0;
+    int numlvls;
+    int n, z = 0;
+
+    tree = (opj_tgt_tree_t *) opj_malloc(sizeof(opj_tgt_tree_t));
+    if (!tree) {
+        return NULL;
+    }
+    tree->numleafsh = numleafsh;
+    tree->numleafsv = numleafsv;
+    tree->numleafsz = numleafsz;
 
-       tree = (opj_tgt_tree_t *) opj_malloc(sizeof(opj_tgt_tree_t));
-       if(!tree) 
-               return NULL;
-       tree->numleafsh = numleafsh;
-       tree->numleafsv = numleafsv;
-       tree->numleafsz = numleafsz;
+    numlvls = 0;
+    nplh[0] = numleafsh;
+    nplv[0] = numleafsv;
+    nplz[0] = numleafsz;
+    tree->numnodes = 0;
+    do {
+        n = nplh[numlvls] * nplv[numlvls] * nplz[numlvls];
+        nplh[numlvls + 1] = (nplh[numlvls] + 1) / 2;
+        nplv[numlvls + 1] = (nplv[numlvls] + 1) / 2;
+        nplz[numlvls + 1] = (nplz[numlvls] + 1) / 2;
+        tree->numnodes += n;
+        ++numlvls;
+    } while (n > 1);
 
-       numlvls = 0;
-       nplh[0] = numleafsh;
-       nplv[0] = numleafsv;
-       nplz[0] = numleafsz;
-       tree->numnodes = 0;
-       do {
-               n = nplh[numlvls] * nplv[numlvls] * nplz[numlvls]; 
-               nplh[numlvls + 1] = (nplh[numlvls] + 1) / 2;
-               nplv[numlvls + 1] = (nplv[numlvls] + 1) / 2;
-               nplz[numlvls + 1] = (nplz[numlvls] + 1) / 2;
-               tree->numnodes += n;
-               ++numlvls;
-       } while (n > 1);
+    if (tree->numnodes == 0) {
+        opj_free(tree);
+        return NULL;
+    }
 
-       if (tree->numnodes == 0) {
-               opj_free(tree);
-               return NULL;
-       }
+    tree->nodes = (opj_tgt_node_t *) opj_malloc(tree->numnodes * sizeof(
+                      opj_tgt_node_t));
+    if (!tree->nodes) {
+        opj_free(tree);
+        return NULL;
+    }
 
-       tree->nodes = (opj_tgt_node_t *) opj_malloc(tree->numnodes * sizeof(opj_tgt_node_t));
-       if(!tree->nodes) {
-               opj_free(tree);
-               return NULL;
-       }
+    node = tree->nodes;
+    parentnode = &tree->nodes[tree->numleafsh * tree->numleafsv * tree->numleafsz];
+    parentnode0 = parentnode;
+    parentnode1 = parentnode;
+    /*fprintf(stdout,"\nH %d V %d Z %d numlvls %d nodes %d\n",tree->numleafsh,tree->numleafsv,tree->numleafsz,numlvls,tree->numnodes);*/
+    for (i = 0; i < numlvls - 1; ++i) {
+        for (z = 0; z < nplz[i]; ++z) {
+            for (j = 0; j < nplv[i]; ++j) {
+                k = nplh[i];
+                while (--k >= 0) {
+                    node->parent =
+                        parentnode;      /*fprintf(stdout,"node[%d].parent = node[%d]\n",n,p);*/
+                    ++node;
+                    if (--k >= 0) {
+                        node->parent =
+                            parentnode;  /*fprintf(stdout,"node[%d].parent = node[%d]\n",n,p);*/
+                        ++node;
+                    }
+                    ++parentnode;
+                }
+                if ((j & 1) || j == nplv[i] - 1) {
+                    parentnode0 = parentnode;
+                } else {
+                    parentnode = parentnode0;
+                }
+            }
+            if ((z & 1) || z == nplz[i] - 1) {
+                parentnode1 = parentnode;
+            } else {
+                parentnode0 = parentnode1;
+                parentnode = parentnode1;
+            }
+        }
+    }
+    node->parent = 0;
 
-       node = tree->nodes;
-       parentnode = &tree->nodes[tree->numleafsh * tree->numleafsv * tree->numleafsz];
-       parentnode0 = parentnode;
-       parentnode1 = parentnode;
-       /*fprintf(stdout,"\nH %d V %d Z %d numlvls %d nodes %d\n",tree->numleafsh,tree->numleafsv,tree->numleafsz,numlvls,tree->numnodes);*/
-       for (i = 0; i < numlvls - 1; ++i) {
-               for (z = 0; z < nplz[i]; ++z) {
-                       for (j = 0; j < nplv[i]; ++j) {
-                               k = nplh[i];
-                               while(--k >= 0) {
-                                       node->parent = parentnode;              /*fprintf(stdout,"node[%d].parent = node[%d]\n",n,p);*/
-                                       ++node;
-                                       if(--k >= 0) {
-                                               node->parent = parentnode;      /*fprintf(stdout,"node[%d].parent = node[%d]\n",n,p);*/
-                                               ++node;
-                                       }
-                                       ++parentnode;
-                               }
-                               if((j & 1) || j == nplv[i] - 1) {
-                                       parentnode0 = parentnode;
-                               } else {
-                                       parentnode = parentnode0;
-                               }
-                       }
-                       if ((z & 1) || z == nplz[i] - 1) {
-                               parentnode1 = parentnode;
-                       } else {
-                               parentnode0 = parentnode1;
-                               parentnode = parentnode1;
-                       }
-               }
-       }
-       node->parent = 0;
 
-       
-       tgt_reset(tree);
+    tgt_reset(tree);
 
-       return tree;
+    return tree;
 }
 
-void tgt_destroy(opj_tgt_tree_t *tree) {
-       opj_free(tree->nodes);
-       opj_free(tree);
+void tgt_destroy(opj_tgt_tree_t *tree)
+{
+    opj_free(tree->nodes);
+    opj_free(tree);
 }
 
-void tgt_reset(opj_tgt_tree_t *tree) {
-       int i;
+void tgt_reset(opj_tgt_tree_t *tree)
+{
+    int i;
 
-       if (NULL == tree)
-               return;
-       
-       for (i = 0; i < tree->numnodes; i++) {
-               tree->nodes[i].value = 999;
-               tree->nodes[i].low = 0;
-               tree->nodes[i].known = 0;
-       }
+    if (NULL == tree) {
+        return;
+    }
+
+    for (i = 0; i < tree->numnodes; i++) {
+        tree->nodes[i].value = 999;
+        tree->nodes[i].low = 0;
+        tree->nodes[i].known = 0;
+    }
 }
 
-void tgt_setvalue(opj_tgt_tree_t *tree, int leafno, int value) {
-       opj_tgt_node_t *node;
-       node = &tree->nodes[leafno];
-       while (node && node->value > value) {
-               node->value = value;
-               node = node->parent;
-       }
+void tgt_setvalue(opj_tgt_tree_t *tree, int leafno, int value)
+{
+    opj_tgt_node_t *node;
+    node = &tree->nodes[leafno];
+    while (node && node->value > value) {
+        node->value = value;
+        node = node->parent;
+    }
 }
 
-void tgt_encode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold) {
-       opj_tgt_node_t *stk[31];
-       opj_tgt_node_t **stkptr;
-       opj_tgt_node_t *node;
-       int low;
+void tgt_encode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno,
+                int threshold)
+{
+    opj_tgt_node_t *stk[31];
+    opj_tgt_node_t **stkptr;
+    opj_tgt_node_t *node;
+    int low;
+
+    stkptr = stk;
+    node = &tree->nodes[leafno];
+    while (node->parent) {
+        *stkptr++ = node;
+        node = node->parent;
+    }
 
-       stkptr = stk;
-       node = &tree->nodes[leafno];
-       while (node->parent) {
-               *stkptr++ = node;
-               node = node->parent;
-       }
-       
-       low = 0;
-       for (;;) {
-               if (low > node->low) {
-                       node->low = low;
-               } else {
-                       low = node->low;
-               }
-               
-               while (low < threshold) {
-                       if (low >= node->value) {
-                               if (!node->known) {
-                                       bio_write(bio, 1, 1);
-                                       node->known = 1;
-                               }
-                               break;
-                       }
-                       bio_write(bio, 0, 1);
-                       ++low;
-               }
-               
-               node->low = low;
-               if (stkptr == stk)
-                       break;
-               node = *--stkptr;
-       }
+    low = 0;
+    for (;;) {
+        if (low > node->low) {
+            node->low = low;
+        } else {
+            low = node->low;
+        }
+
+        while (low < threshold) {
+            if (low >= node->value) {
+                if (!node->known) {
+                    bio_write(bio, 1, 1);
+                    node->known = 1;
+                }
+                break;
+            }
+            bio_write(bio, 0, 1);
+            ++low;
+        }
+
+        node->low = low;
+        if (stkptr == stk) {
+            break;
+        }
+        node = *--stkptr;
+    }
 }
 
-int tgt_decode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold) {
-       opj_tgt_node_t *stk[31];
-       opj_tgt_node_t **stkptr;
-       opj_tgt_node_t *node;
-       int low;
+int tgt_decode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold)
+{
+    opj_tgt_node_t *stk[31];
+    opj_tgt_node_t **stkptr;
+    opj_tgt_node_t *node;
+    int low;
+
+    stkptr = stk;
+    node = &tree->nodes[leafno];
+    while (node->parent) {
+        *stkptr++ = node;
+        node = node->parent;
+    }
+
+    low = 0;
+    for (;;) {
+        if (low > node->low) {
+            node->low = low;
+        } else {
+            low = node->low;
+        }
+        while (low < threshold && low < node->value) {
+            if (bio_read(bio, 1)) {
+                node->value = low;
+            } else {
+                ++low;
+            }
+        }
+        node->low = low;
+        if (stkptr == stk) {
+            break;
+        }
+        node = *--stkptr;
+    }
 
-       stkptr = stk;
-       node = &tree->nodes[leafno];
-       while (node->parent) {
-               *stkptr++ = node;
-               node = node->parent;
-       }
-       
-       low = 0;
-       for (;;) {
-               if (low > node->low) {
-                       node->low = low;
-               } else {
-                       low = node->low;
-               }
-               while (low < threshold && low < node->value) {
-                       if (bio_read(bio, 1)) {
-                               node->value = low;
-                       } else {
-                               ++low;
-                       }
-               }
-               node->low = low;
-               if (stkptr == stk) {
-                       break;
-               }
-               node = *--stkptr;
-       }
-       
-       return (node->value < threshold) ? 1 : 0;
+    return (node->value < threshold) ? 1 : 0;
 }
index cc93c5602b2df03fe576ed6e084eb27435391136..7cd327ec10534b5d5ab52315551ee21628ecb887 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
 #include "volume.h"
 #include "openjp3d.h"
 
-opj_volume_t* OPJ_CALLCONV opj_volume_create(int numcmpts, opj_volume_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc) {
-       int compno;
-       opj_volume_t *volume = NULL;
+opj_volume_t* OPJ_CALLCONV opj_volume_create(int numcmpts,
+        opj_volume_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc)
+{
+    int compno;
+    opj_volume_t *volume = NULL;
 
-       volume = (opj_volume_t*)opj_malloc(sizeof(opj_volume_t));
-       if(volume) {
-               volume->color_space = clrspc;
-               volume->numcomps = numcmpts;
-               /* allocate memory for the per-component information */
-               volume->comps = (opj_volume_comp_t*)opj_malloc(volume->numcomps * sizeof(opj_volume_comp_t));
-               if(!volume->comps) {
-                       opj_volume_destroy(volume);
-                       return NULL;
-               }
-               /* create the individual volume components */
-               for(compno = 0; compno < numcmpts; compno++) {
-                       opj_volume_comp_t *comp = &volume->comps[compno];
-                       comp->dx = cmptparms[compno].dx;
-                       comp->dy = cmptparms[compno].dy;
-                       comp->dz = cmptparms[compno].dz;
-                       comp->w = cmptparms[compno].w;
-                       comp->h = cmptparms[compno].h;
-                       comp->l = cmptparms[compno].l;
-                       comp->x0 = cmptparms[compno].x0;
-                       comp->y0 = cmptparms[compno].y0;
-                       comp->z0 = cmptparms[compno].z0;
-                       comp->prec = cmptparms[compno].prec;
-                       comp->bpp = cmptparms[compno].bpp;
-                       comp->sgnd = cmptparms[compno].sgnd;
-                       comp->bigendian = cmptparms[compno].bigendian;
-                       comp->dcoffset = cmptparms[compno].dcoffset;
-                       comp->data = (int*)opj_malloc(comp->w * comp->h * comp->l * sizeof(int));
-                       if(!comp->data) {
-                               fprintf(stdout,"Unable to malloc comp->data (%d x %d x %d x bytes)",comp->w,comp->h,comp->l);
-                               opj_volume_destroy(volume);
-                               return NULL;
-                       }
-                       /*fprintf(stdout,"%d %d %d %d %d %d %d %d %d", comp->w,comp->h, comp->l, comp->dx, comp->dy, comp->dz, comp->prec, comp->bpp, comp->sgnd);*/
-               }
-       }
+    volume = (opj_volume_t*)opj_malloc(sizeof(opj_volume_t));
+    if (volume) {
+        volume->color_space = clrspc;
+        volume->numcomps = numcmpts;
+        /* allocate memory for the per-component information */
+        volume->comps = (opj_volume_comp_t*)opj_malloc(volume->numcomps * sizeof(
+                            opj_volume_comp_t));
+        if (!volume->comps) {
+            opj_volume_destroy(volume);
+            return NULL;
+        }
+        /* create the individual volume components */
+        for (compno = 0; compno < numcmpts; compno++) {
+            opj_volume_comp_t *comp = &volume->comps[compno];
+            comp->dx = cmptparms[compno].dx;
+            comp->dy = cmptparms[compno].dy;
+            comp->dz = cmptparms[compno].dz;
+            comp->w = cmptparms[compno].w;
+            comp->h = cmptparms[compno].h;
+            comp->l = cmptparms[compno].l;
+            comp->x0 = cmptparms[compno].x0;
+            comp->y0 = cmptparms[compno].y0;
+            comp->z0 = cmptparms[compno].z0;
+            comp->prec = cmptparms[compno].prec;
+            comp->bpp = cmptparms[compno].bpp;
+            comp->sgnd = cmptparms[compno].sgnd;
+            comp->bigendian = cmptparms[compno].bigendian;
+            comp->dcoffset = cmptparms[compno].dcoffset;
+            comp->data = (int*)opj_malloc(comp->w * comp->h * comp->l * sizeof(int));
+            if (!comp->data) {
+                fprintf(stdout, "Unable to malloc comp->data (%d x %d x %d x bytes)", comp->w,
+                        comp->h, comp->l);
+                opj_volume_destroy(volume);
+                return NULL;
+            }
+            /*fprintf(stdout,"%d %d %d %d %d %d %d %d %d", comp->w,comp->h, comp->l, comp->dx, comp->dy, comp->dz, comp->prec, comp->bpp, comp->sgnd);*/
+        }
+    }
 
-       return volume;
+    return volume;
 }
 
-void OPJ_CALLCONV opj_volume_destroy(opj_volume_t *volume) {
-       int i;
-       if(volume) {
-               if(volume->comps) {
-                       /* volume components */
-                       for(i = 0; i < volume->numcomps; i++) {
-                               opj_volume_comp_t *volume_comp = &volume->comps[i];
-                               if(volume_comp->data) {
-                                       opj_free(volume_comp->data);
-                               }
-                       }
-                       opj_free(volume->comps);
-               }
-               opj_free(volume);
-       }
+void OPJ_CALLCONV opj_volume_destroy(opj_volume_t *volume)
+{
+    int i;
+    if (volume) {
+        if (volume->comps) {
+            /* volume components */
+            for (i = 0; i < volume->numcomps; i++) {
+                opj_volume_comp_t *volume_comp = &volume->comps[i];
+                if (volume_comp->data) {
+                    opj_free(volume_comp->data);
+                }
+            }
+            opj_free(volume->comps);
+        }
+        opj_free(volume);
+    }
 }
 
index 636e55fd814fc1fb20bf0e47a0a819332eb17db5..eba9870f54a9b574be65dfe63bdf2d160a2308cc 100644 (file)
 #define logstream stderr
 #endif /*SERVER */
 
-auxtrans_param_t init_aux_transport( int tcp_auxport, int udp_auxport)
+auxtrans_param_t init_aux_transport(int tcp_auxport, int udp_auxport)
 {
-  auxtrans_param_t auxtrans;
+    auxtrans_param_t auxtrans;
 
-  auxtrans.tcpauxport = tcp_auxport;
-  auxtrans.udpauxport = udp_auxport;
+    auxtrans.tcpauxport = tcp_auxport;
+    auxtrans.udpauxport = udp_auxport;
 
-  if( 49152 <= tcp_auxport && tcp_auxport <= 65535)
-    auxtrans.tcplistensock = open_listeningsocket( (uint16_t)tcp_auxport);
-  else
-    auxtrans.tcplistensock = -1;
+    if (49152 <= tcp_auxport && tcp_auxport <= 65535) {
+        auxtrans.tcplistensock = open_listeningsocket((uint16_t)tcp_auxport);
+    } else {
+        auxtrans.tcplistensock = -1;
+    }
 
-  auxtrans.udplistensock = -1;
-  /* open listening socket for udp later */
+    auxtrans.udplistensock = -1;
+    /* open listening socket for udp later */
 
-  return auxtrans;
+    return auxtrans;
 }
 
-void close_aux_transport( auxtrans_param_t auxtrans)
+void close_aux_transport(auxtrans_param_t auxtrans)
 {
-  if( auxtrans.tcplistensock != -1)
-    if( close_socket( auxtrans.tcplistensock) != 0)
-      perror("close");
-
-  if( auxtrans.udplistensock != -1)
-    if( close_socket( auxtrans.udplistensock) != 0)
-      perror("close");
+    if (auxtrans.tcplistensock != -1)
+        if (close_socket(auxtrans.tcplistensock) != 0) {
+            perror("close");
+        }
+
+    if (auxtrans.udplistensock != -1)
+        if (close_socket(auxtrans.udplistensock) != 0) {
+            perror("close");
+        }
 }
 
 
 /*!< auxiliary response parameters */
-typedef struct aux_response_param{
-  char *cid;            /*!< channel ID */
-  unsigned char *data;  /*!< sending data */
-  OPJ_SIZE_T datalen;          /*!< length of data */
-  OPJ_SIZE_T maxlenPerFrame;   /*!< maximum data length to send per frame */
-  SOCKET listensock;    /*!< listeing socket */
+typedef struct aux_response_param {
+    char *cid;            /*!< channel ID */
+    unsigned char *data;  /*!< sending data */
+    OPJ_SIZE_T datalen;          /*!< length of data */
+    OPJ_SIZE_T maxlenPerFrame;   /*!< maximum data length to send per frame */
+    SOCKET listensock;    /*!< listeing socket */
 #ifdef _WIN32
-  HANDLE hTh;           /*!< thread handle */
+    HANDLE hTh;           /*!< thread handle */
 #endif
 } aux_response_param_t;
 
-aux_response_param_t * gene_auxresponse( OPJ_BOOL istcp, auxtrans_param_t auxtrans, const char cid[], void *data, OPJ_SIZE_T datalen, OPJ_SIZE_T maxlenPerFrame);
+aux_response_param_t * gene_auxresponse(OPJ_BOOL istcp,
+                                        auxtrans_param_t auxtrans, const char cid[], void *data, OPJ_SIZE_T datalen,
+                                        OPJ_SIZE_T maxlenPerFrame);
 
-void delete_auxresponse( aux_response_param_t **auxresponse);
+void delete_auxresponse(aux_response_param_t **auxresponse);
 
 
 #ifdef _WIN32
-unsigned __stdcall aux_streaming( void *arg);
+unsigned __stdcall aux_streaming(void *arg);
 #else
-void * aux_streaming( void *arg);
+void * aux_streaming(void *arg);
 #endif
 
-void send_responsedata_on_aux( OPJ_BOOL istcp, auxtrans_param_t auxtrans, const char cid[], void *data, OPJ_SIZE_T datalen, OPJ_SIZE_T maxlenPerFrame)
+void send_responsedata_on_aux(OPJ_BOOL istcp, auxtrans_param_t auxtrans,
+                              const char cid[], void *data, OPJ_SIZE_T datalen, OPJ_SIZE_T maxlenPerFrame)
 {
-  aux_response_param_t *auxresponse;
+    aux_response_param_t *auxresponse;
 #ifdef _WIN32
-  unsigned int threadId;
+    unsigned int threadId;
 #else
-  pthread_t thread;
-  int status;
+    pthread_t thread;
+    int status;
 #endif
-  
-  if( istcp){
-    if( auxtrans.tcplistensock == -1){
-      fprintf( FCGI_stderr, "Error: error in send_responsedata_on_aux(), tcp listening socket no open\n");
-      return;
-    }
 
-    auxresponse = gene_auxresponse( istcp, auxtrans, cid, data, datalen, maxlenPerFrame);
+    if (istcp) {
+        if (auxtrans.tcplistensock == -1) {
+            fprintf(FCGI_stderr,
+                    "Error: error in send_responsedata_on_aux(), tcp listening socket no open\n");
+            return;
+        }
+
+        auxresponse = gene_auxresponse(istcp, auxtrans, cid, data, datalen,
+                                       maxlenPerFrame);
 
 #ifdef _WIN32
-    auxresponse->hTh = (HANDLE)_beginthreadex( NULL, 0, &aux_streaming, auxresponse, 0, &threadId);
-    if( auxresponse->hTh == 0)
-      fprintf( FCGI_stderr,"ERRO: pthread_create() %s", strerror( (int)auxresponse->hTh));
+        auxresponse->hTh = (HANDLE)_beginthreadex(NULL, 0, &aux_streaming, auxresponse,
+                           0, &threadId);
+        if (auxresponse->hTh == 0) {
+            fprintf(FCGI_stderr, "ERRO: pthread_create() %s",
+                    strerror((int)auxresponse->hTh));
+        }
 #else
-    status = pthread_create( &thread, NULL, &aux_streaming, auxresponse);
-    if( status != 0)
-      fprintf( FCGI_stderr,"ERROR: pthread_create() %s",strerror(status));
-#endif   
-  }
-  else
-    fprintf( FCGI_stderr, "Error: error in send_responsedata_on_aux(), udp not implemented\n");
+        status = pthread_create(&thread, NULL, &aux_streaming, auxresponse);
+        if (status != 0) {
+            fprintf(FCGI_stderr, "ERROR: pthread_create() %s", strerror(status));
+        }
+#endif
+    } else {
+        fprintf(FCGI_stderr,
+                "Error: error in send_responsedata_on_aux(), udp not implemented\n");
+    }
 }
 
-aux_response_param_t * gene_auxresponse( OPJ_BOOL istcp, auxtrans_param_t auxtrans, const char cid[], void *data, OPJ_SIZE_T datalen, OPJ_SIZE_T maxlenPerFrame)
+aux_response_param_t * gene_auxresponse(OPJ_BOOL istcp,
+                                        auxtrans_param_t auxtrans, const char cid[], void *data, OPJ_SIZE_T datalen,
+                                        OPJ_SIZE_T maxlenPerFrame)
 {
-  aux_response_param_t *auxresponse;
+    aux_response_param_t *auxresponse;
 
-  auxresponse = (aux_response_param_t *)opj_malloc( sizeof(aux_response_param_t));
+    auxresponse = (aux_response_param_t *)opj_malloc(sizeof(aux_response_param_t));
 
-  auxresponse->cid = strdup( cid);
-  auxresponse->data = data;
-  auxresponse->datalen = datalen;
-  auxresponse->maxlenPerFrame = maxlenPerFrame;
-  auxresponse->listensock = istcp ? auxtrans.tcplistensock : auxtrans.udplistensock;
+    auxresponse->cid = strdup(cid);
+    auxresponse->data = data;
+    auxresponse->datalen = datalen;
+    auxresponse->maxlenPerFrame = maxlenPerFrame;
+    auxresponse->listensock = istcp ? auxtrans.tcplistensock :
+                              auxtrans.udplistensock;
 
-  return auxresponse;
+    return auxresponse;
 }
 
-void delete_auxresponse( aux_response_param_t **auxresponse)
+void delete_auxresponse(aux_response_param_t **auxresponse)
 {
-  opj_free( (*auxresponse)->cid);
-  opj_free( (*auxresponse)->data);
-  opj_free( *auxresponse);
+    opj_free((*auxresponse)->cid);
+    opj_free((*auxresponse)->data);
+    opj_free(*auxresponse);
 }
 
 /**
@@ -163,105 +179,109 @@ void delete_auxresponse( aux_response_param_t **auxresponse)
  * @param [in] fp               file pointer for log of aux stream
  * @return                      true if identified, false otherwise
  */
-OPJ_BOOL identify_cid( SOCKET connected_socket, char refcid[], FILE *fp);
+OPJ_BOOL identify_cid(SOCKET connected_socket, char refcid[], FILE *fp);
 
-OPJ_BOOL recv_ack( SOCKET connected_socket, void *data);
+OPJ_BOOL recv_ack(SOCKET connected_socket, void *data);
 
 #ifdef _WIN32
-unsigned __stdcall aux_streaming( void *arg)
+unsigned __stdcall aux_streaming(void *arg)
 #else
-void * aux_streaming( void *arg)
+void * aux_streaming(void *arg)
 #endif
 {
-  SOCKET connected_socket;
-  unsigned char *chunk, *ptr;
-  OPJ_SIZE_T maxLenOfBody, remlen, chunklen;
-  const OPJ_SIZE_T headlen = 8;
-  
-  aux_response_param_t *auxresponse = (aux_response_param_t *)arg;
+    SOCKET connected_socket;
+    unsigned char *chunk, *ptr;
+    OPJ_SIZE_T maxLenOfBody, remlen, chunklen;
+    const OPJ_SIZE_T headlen = 8;
+
+    aux_response_param_t *auxresponse = (aux_response_param_t *)arg;
 
 #ifdef _WIN32
-  CloseHandle( auxresponse->hTh);
+    CloseHandle(auxresponse->hTh);
 #else
-  pthread_detach( pthread_self());
+    pthread_detach(pthread_self());
 #endif
 
-  chunk = (unsigned char *)opj_malloc( auxresponse->maxlenPerFrame);
-  maxLenOfBody = auxresponse->maxlenPerFrame - headlen;
-  remlen = auxresponse->datalen;
+    chunk = (unsigned char *)opj_malloc(auxresponse->maxlenPerFrame);
+    maxLenOfBody = auxresponse->maxlenPerFrame - headlen;
+    remlen = auxresponse->datalen;
 
-  while((connected_socket = accept_socket( auxresponse->listensock)) != -1){
-    if( identify_cid( connected_socket, auxresponse->cid, FCGI_stderr)){
-      ptr = auxresponse->data;
-      while( 0 < remlen){
-        memset( chunk, 0, auxresponse->maxlenPerFrame);
+    while ((connected_socket = accept_socket(auxresponse->listensock)) != -1) {
+        if (identify_cid(connected_socket, auxresponse->cid, FCGI_stderr)) {
+            ptr = auxresponse->data;
+            while (0 < remlen) {
+                memset(chunk, 0, auxresponse->maxlenPerFrame);
 
-        chunklen = remlen<maxLenOfBody?remlen:maxLenOfBody;
-        chunklen += headlen;
+                chunklen = remlen < maxLenOfBody ? remlen : maxLenOfBody;
+                chunklen += headlen;
 
-        chunk[0] = (chunklen >> 8) & 0xff;
-        chunk[1] = chunklen & 0xff;
+                chunk[0] = (chunklen >> 8) & 0xff;
+                chunk[1] = chunklen & 0xff;
 
-        memcpy( chunk+headlen, ptr, chunklen-headlen);
+                memcpy(chunk + headlen, ptr, chunklen - headlen);
 
-        do{
-          send_stream( connected_socket, chunk, chunklen);
-        }while( !recv_ack( connected_socket, chunk));
+                do {
+                    send_stream(connected_socket, chunk, chunklen);
+                } while (!recv_ack(connected_socket, chunk));
 
-        remlen -= maxLenOfBody;
-        ptr += maxLenOfBody;
-      }
-      if( close_socket( connected_socket) != 0)
-        perror("close");
-      break;
+                remlen -= maxLenOfBody;
+                ptr += maxLenOfBody;
+            }
+            if (close_socket(connected_socket) != 0) {
+                perror("close");
+            }
+            break;
+        }
     }
-  }
-  opj_free( chunk);
+    opj_free(chunk);
+
+    delete_auxresponse(&auxresponse);
 
-  delete_auxresponse( &auxresponse);
-  
 #ifdef _WIN32
-  _endthreadex(0);
+    _endthreadex(0);
 #else
-  pthread_exit(0);
+    pthread_exit(0);
 #endif
 
-  return 0;
+    return 0;
 }
 
 
-OPJ_BOOL identify_cid( SOCKET connected_socket, char refcid[], FILE *fp)
+OPJ_BOOL identify_cid(SOCKET connected_socket, char refcid[], FILE *fp)
 {
-  char *cid;
-  OPJ_BOOL succeed;
-
-  if(!(cid = receive_string( connected_socket))){
-    fprintf( fp, "Error: error in identify_cid(), while receiving cid from client\n");
-    return OPJ_FALSE;
-  }
-  
-  succeed = OPJ_FALSE;
-  if( strncmp( refcid, cid, strlen( refcid)) == 0)
-    succeed = OPJ_TRUE;
-  
-  opj_free( cid);
-
-  return succeed;
+    char *cid;
+    OPJ_BOOL succeed;
+
+    if (!(cid = receive_string(connected_socket))) {
+        fprintf(fp,
+                "Error: error in identify_cid(), while receiving cid from client\n");
+        return OPJ_FALSE;
+    }
+
+    succeed = OPJ_FALSE;
+    if (strncmp(refcid, cid, strlen(refcid)) == 0) {
+        succeed = OPJ_TRUE;
+    }
+
+    opj_free(cid);
+
+    return succeed;
 }
 
-OPJ_BOOL recv_ack( SOCKET connected_socket, void *data)
+OPJ_BOOL recv_ack(SOCKET connected_socket, void *data)
 {
-  char *header;
-  OPJ_BOOL succeed;
-  
-  header = receive_stream( connected_socket, 8);
-  
-  if( memcmp( header, data, 8) != 0)
-    succeed = OPJ_FALSE;
-  else
-    succeed = OPJ_TRUE;
-  
-  opj_free( header);
+    char *header;
+    OPJ_BOOL succeed;
+
+    header = receive_stream(connected_socket, 8);
+
+    if (memcmp(header, data, 8) != 0) {
+        succeed = OPJ_FALSE;
+    } else {
+        succeed = OPJ_TRUE;
+    }
+
+    opj_free(header);
 
-  return succeed;
+    return succeed;
 }
index 85b3a948290d0d2dd3c9c59215842ae2bf3ccd15..ce520640fe69b1aef1b9d309e48d3097b2f5807e 100644 (file)
 
 boxlist_param_t * gene_boxlist(void)
 {
-  boxlist_param_t *boxlist;
+    boxlist_param_t *boxlist;
 
-  boxlist = (boxlist_param_t *)malloc( sizeof(boxlist_param_t));
-  
-  boxlist->first = NULL;
-  boxlist->last  = NULL;
+    boxlist = (boxlist_param_t *)malloc(sizeof(boxlist_param_t));
 
-  return boxlist;
+    boxlist->first = NULL;
+    boxlist->last  = NULL;
+
+    return boxlist;
 }
 
-boxlist_param_t * get_boxstructure( int fd, OPJ_OFF_T offset, OPJ_SIZE_T length)
+boxlist_param_t * get_boxstructure(int fd, OPJ_OFF_T offset, OPJ_SIZE_T length)
 {
-  boxlist_param_t *boxlist;
-  box_param_t *box;
-  OPJ_OFF_T pos;
-  
-  boxlist = NULL;
-  pos = offset;
-  assert( (OPJ_OFF_T)length>=0);
-  do{
-    if(!(box = gene_boxbyOffset( fd, pos)))
-      break;
-    
-    assert( (OPJ_OFF_T)box->length >= 0);
-    pos += (OPJ_OFF_T)box->length;
-    
-    if( !boxlist)
-      boxlist = gene_boxlist();
-    insert_box_into_list( box, boxlist);
-  }while( pos < offset+(OPJ_OFF_T)length);
-
-  return boxlist;
+    boxlist_param_t *boxlist;
+    box_param_t *box;
+    OPJ_OFF_T pos;
+
+    boxlist = NULL;
+    pos = offset;
+    assert((OPJ_OFF_T)length >= 0);
+    do {
+        if (!(box = gene_boxbyOffset(fd, pos))) {
+            break;
+        }
+
+        assert((OPJ_OFF_T)box->length >= 0);
+        pos += (OPJ_OFF_T)box->length;
+
+        if (!boxlist) {
+            boxlist = gene_boxlist();
+        }
+        insert_box_into_list(box, boxlist);
+    } while (pos < offset + (OPJ_OFF_T)length);
+
+    return boxlist;
 }
 
-box_param_t * gene_boxbyOffset( int fd, OPJ_OFF_T offset)
+box_param_t * gene_boxbyOffset(int fd, OPJ_OFF_T offset)
 {
-  Byte_t *data;
-  Byte8_t boxlen;
-  Byte_t headlen;
-  char *boxtype;
-  box_param_t *box;
-
-  /* read LBox and TBox*/
-  if(!(data = fetch_bytes( fd, offset, 8))){
-    fprintf( FCGI_stderr, "Error: error in gene_boxbyOffset( %d, %" PRId64 ")\n", fd, offset);
-    return NULL;
-  }
-  
-  headlen = 8;
-  boxlen = (Byte8_t)big4(data);
-  boxtype = (char *)(data+4);  
-
-  /* box type constraint*/
-  if( !isalpha(boxtype[0]) || !isalpha(boxtype[1]) ||
-      (!isalnum(boxtype[2])&&!isspace(boxtype[2])) ||
-      (!isalpha(boxtype[3])&&!isspace(boxtype[3]))){
-    free( data);
-    return NULL;
-  }
-  
-  if( boxlen == 1){
-    Byte_t *data2;
-    headlen = 16;
-    /* read XLBox*/
-    if((data2 = fetch_bytes( fd, offset+8, 8))){
-      boxlen = big8(data2);
-      free(data2);
+    Byte_t *data;
+    Byte8_t boxlen;
+    Byte_t headlen;
+    char *boxtype;
+    box_param_t *box;
+
+    /* read LBox and TBox*/
+    if (!(data = fetch_bytes(fd, offset, 8))) {
+        fprintf(FCGI_stderr, "Error: error in gene_boxbyOffset( %d, %" PRId64 ")\n", fd,
+                offset);
+        return NULL;
     }
-    else{
-      fprintf( FCGI_stderr, "Error: error in gene_boxbyOffset( %d, %" PRId64 ")\n", fd, offset);
-      free( data);
-      return NULL;
+
+    headlen = 8;
+    boxlen = (Byte8_t)big4(data);
+    boxtype = (char *)(data + 4);
+
+    /* box type constraint*/
+    if (!isalpha(boxtype[0]) || !isalpha(boxtype[1]) ||
+            (!isalnum(boxtype[2]) && !isspace(boxtype[2])) ||
+            (!isalpha(boxtype[3]) && !isspace(boxtype[3]))) {
+        free(data);
+        return NULL;
     }
-  }
-  box = (box_param_t *)malloc( sizeof( box_param_t));
-  box->fd = fd;
-  box->offset = offset;
-  box->headlen = headlen;
-  box->length = boxlen;
-  strncpy( box->type, boxtype, 4);
-  box->next = NULL;
-  free( data);
-  return box;
+
+    if (boxlen == 1) {
+        Byte_t *data2;
+        headlen = 16;
+        /* read XLBox*/
+        if ((data2 = fetch_bytes(fd, offset + 8, 8))) {
+            boxlen = big8(data2);
+            free(data2);
+        } else {
+            fprintf(FCGI_stderr, "Error: error in gene_boxbyOffset( %d, %" PRId64 ")\n", fd,
+                    offset);
+            free(data);
+            return NULL;
+        }
+    }
+    box = (box_param_t *)malloc(sizeof(box_param_t));
+    box->fd = fd;
+    box->offset = offset;
+    box->headlen = headlen;
+    box->length = boxlen;
+    strncpy(box->type, boxtype, 4);
+    box->next = NULL;
+    free(data);
+    return box;
 }
 
-box_param_t * gene_boxbyOffinStream( Byte_t *stream, OPJ_OFF_T offset)
+box_param_t * gene_boxbyOffinStream(Byte_t *stream, OPJ_OFF_T offset)
 {
-  Byte8_t boxlen;
-  Byte_t headlen;
-  char *boxtype;
-  box_param_t *box;
-
-  /* read LBox and TBox*/
-  headlen = 8;
-  boxlen = (Byte8_t)big4( stream);
-  boxtype = (char *)( stream+4);  
-
-  /* box type constraint*/
-  if( !isalpha(boxtype[0]) || !isalpha(boxtype[1]) ||
-      (!isalnum(boxtype[2])&&!isspace(boxtype[2])) ||
-      (!isalpha(boxtype[3])&&!isspace(boxtype[3]))){
-    return NULL;
-  }
-  
-  if( boxlen == 1){
-    headlen = 16;
-    boxlen = big8( stream+8); /* read XLBox*/
-  }
-  box = (box_param_t *)malloc( sizeof( box_param_t));
-  box->fd = -1;
-  box->offset = offset;
-  box->headlen = headlen;
-  box->length = boxlen;
-  strncpy( box->type, boxtype, 4);
-  box->next = NULL;
-
-  return box;
+    Byte8_t boxlen;
+    Byte_t headlen;
+    char *boxtype;
+    box_param_t *box;
+
+    /* read LBox and TBox*/
+    headlen = 8;
+    boxlen = (Byte8_t)big4(stream);
+    boxtype = (char *)(stream + 4);
+
+    /* box type constraint*/
+    if (!isalpha(boxtype[0]) || !isalpha(boxtype[1]) ||
+            (!isalnum(boxtype[2]) && !isspace(boxtype[2])) ||
+            (!isalpha(boxtype[3]) && !isspace(boxtype[3]))) {
+        return NULL;
+    }
+
+    if (boxlen == 1) {
+        headlen = 16;
+        boxlen = big8(stream + 8); /* read XLBox*/
+    }
+    box = (box_param_t *)malloc(sizeof(box_param_t));
+    box->fd = -1;
+    box->offset = offset;
+    box->headlen = headlen;
+    box->length = boxlen;
+    strncpy(box->type, boxtype, 4);
+    box->next = NULL;
+
+    return box;
 }
 
 
-box_param_t * gene_boxbyType( int fd, OPJ_OFF_T offset, OPJ_SIZE_T length, const char TBox[])
+box_param_t * gene_boxbyType(int fd, OPJ_OFF_T offset, OPJ_SIZE_T length,
+                             const char TBox[])
 {
-  OPJ_OFF_T pos;
-  Byte_t *data;
-  Byte8_t boxlen;
-  Byte_t headlen;
-  char *boxtype;
-  box_param_t *foundbox;
-
-  
-  if( length==0){ /* set the max length*/
-    if( get_filesize( fd) <= offset )
-      return NULL;
-    assert( get_filesize( fd) > offset );
-    assert( offset >= 0 );
-    length = (OPJ_SIZE_T)(get_filesize( fd) - offset);
-  }
-
-  pos = offset;
-  assert( pos >= 0 );
-  assert( (OPJ_OFF_T)length >= 0 );
-  while( pos < offset+(OPJ_OFF_T)length-7){ /* LBox+TBox-1=7*/
-    
-    /* read LBox and TBox*/
-    if((data = fetch_bytes( fd, pos, 8))){
-      headlen = 8;
-      boxlen = (Byte8_t)big4(data);
-      boxtype = (char *)(data+4);
-
-      if( boxlen == 1){
-       Byte_t *data2;
-       headlen = 16;
-       /* read XLBox*/
-       if((data2 = fetch_bytes( fd, pos+8, 8))){
-         boxlen = big8(data2);
-         free(data2);
-       }
-       else{
-         fprintf( FCGI_stderr, "Error: error in gene_boxbyType( %d, %" PRId64 ", %" PRId64 ", %s)\n", fd, offset, length, TBox);
-         return NULL;
-       }
-      }
-      if( strncmp ( boxtype, TBox, 4) == 0){
-       foundbox = (box_param_t *)malloc( sizeof( box_param_t));
-       foundbox->fd = fd;
-       foundbox->offset = pos;
-       foundbox->headlen = headlen;
-       foundbox->length = boxlen;
-       strncpy( foundbox->type, TBox, 4);
-       foundbox->next = NULL;
-       free( data);
-       return foundbox;
-      }
-      free( data);
+    OPJ_OFF_T pos;
+    Byte_t *data;
+    Byte8_t boxlen;
+    Byte_t headlen;
+    char *boxtype;
+    box_param_t *foundbox;
+
+
+    if (length == 0) { /* set the max length*/
+        if (get_filesize(fd) <= offset) {
+            return NULL;
+        }
+        assert(get_filesize(fd) > offset);
+        assert(offset >= 0);
+        length = (OPJ_SIZE_T)(get_filesize(fd) - offset);
     }
-    else{
-      fprintf( FCGI_stderr, "Error: error in gene_boxbyType( %d, %" PRId64 ", %" PRId64 ", %s)\n", fd, offset, length, TBox);
-      return NULL;
+
+    pos = offset;
+    assert(pos >= 0);
+    assert((OPJ_OFF_T)length >= 0);
+    while (pos < offset + (OPJ_OFF_T)length - 7) { /* LBox+TBox-1=7*/
+
+        /* read LBox and TBox*/
+        if ((data = fetch_bytes(fd, pos, 8))) {
+            headlen = 8;
+            boxlen = (Byte8_t)big4(data);
+            boxtype = (char *)(data + 4);
+
+            if (boxlen == 1) {
+                Byte_t *data2;
+                headlen = 16;
+                /* read XLBox*/
+                if ((data2 = fetch_bytes(fd, pos + 8, 8))) {
+                    boxlen = big8(data2);
+                    free(data2);
+                } else {
+                    fprintf(FCGI_stderr, "Error: error in gene_boxbyType( %d, %" PRId64 ", %" PRId64
+                            ", %s)\n", fd, offset, length, TBox);
+                    return NULL;
+                }
+            }
+            if (strncmp(boxtype, TBox, 4) == 0) {
+                foundbox = (box_param_t *)malloc(sizeof(box_param_t));
+                foundbox->fd = fd;
+                foundbox->offset = pos;
+                foundbox->headlen = headlen;
+                foundbox->length = boxlen;
+                strncpy(foundbox->type, TBox, 4);
+                foundbox->next = NULL;
+                free(data);
+                return foundbox;
+            }
+            free(data);
+        } else {
+            fprintf(FCGI_stderr, "Error: error in gene_boxbyType( %d, %" PRId64 ", %" PRId64
+                    ", %s)\n", fd, offset, length, TBox);
+            return NULL;
+        }
+        assert(((Byte8_t)pos + boxlen) >= (Byte8_t)pos);
+        pos += (OPJ_OFF_T)boxlen;
     }
-    assert( ((Byte8_t)pos+boxlen)>=(Byte8_t)pos);
-    pos+= (OPJ_OFF_T)boxlen;
-  }
-  fprintf( FCGI_stderr, "Error: Box %s not found\n", TBox);
+    fprintf(FCGI_stderr, "Error: Box %s not found\n", TBox);
 
-  return NULL;
+    return NULL;
 }
 
-box_param_t * gene_boxbyTypeinStream( Byte_t *stream, OPJ_OFF_T offset, OPJ_SIZE_T length, const char TBox[])
+box_param_t * gene_boxbyTypeinStream(Byte_t *stream, OPJ_OFF_T offset,
+                                     OPJ_SIZE_T length, const char TBox[])
 {
-  OPJ_OFF_T pos;
-  Byte_t *data;
-  Byte8_t boxlen;
-  Byte_t headlen;
-  char *boxtype;
-  box_param_t *foundbox;
-
-  pos = offset;
-  assert( pos >= 0 );
-  assert( (OPJ_OFF_T)length >= 0 );
-  while( pos < offset+(OPJ_OFF_T)(length)-7){ /* LBox+TBox-1=7*/
-    
-    /* read LBox and TBox*/
-    data = stream + pos;
-    headlen = 8;
-    boxlen = (Byte8_t)big4(data);
-    boxtype = (char *)(data+4);
-   
-    if( boxlen == 1){
-      /* read XLBox*/
-      headlen = 16;
-      boxlen = big8( data+8);
+    OPJ_OFF_T pos;
+    Byte_t *data;
+    Byte8_t boxlen;
+    Byte_t headlen;
+    char *boxtype;
+    box_param_t *foundbox;
+
+    pos = offset;
+    assert(pos >= 0);
+    assert((OPJ_OFF_T)length >= 0);
+    while (pos < offset + (OPJ_OFF_T)(length) - 7) { /* LBox+TBox-1=7*/
+
+        /* read LBox and TBox*/
+        data = stream + pos;
+        headlen = 8;
+        boxlen = (Byte8_t)big4(data);
+        boxtype = (char *)(data + 4);
+
+        if (boxlen == 1) {
+            /* read XLBox*/
+            headlen = 16;
+            boxlen = big8(data + 8);
+        }
+
+        if (strncmp(boxtype, TBox, 4) == 0) {
+            foundbox = (box_param_t *)malloc(sizeof(box_param_t));
+            foundbox->fd = -1;
+            foundbox->offset = pos;
+            foundbox->headlen = headlen;
+            foundbox->length = boxlen;
+            strncpy(foundbox->type, TBox, 4);
+            foundbox->next = NULL;
+            return foundbox;
+        }
+        assert(((Byte8_t)pos + boxlen) >= (Byte8_t)pos);
+        pos += (OPJ_OFF_T)boxlen;
     }
+    fprintf(FCGI_stderr, "Error: Box %s not found\n", TBox);
 
-    if( strncmp ( boxtype, TBox, 4) == 0){
-      foundbox = (box_param_t *)malloc( sizeof( box_param_t));
-      foundbox->fd = -1;
-      foundbox->offset = pos;
-      foundbox->headlen = headlen;
-      foundbox->length = boxlen;
-      strncpy( foundbox->type, TBox, 4);
-      foundbox->next = NULL;
-      return foundbox;
-    }
-    assert( ((Byte8_t)pos+boxlen)>=(Byte8_t)pos);
-    pos+= (OPJ_OFF_T)boxlen;
-  }
-  fprintf( FCGI_stderr, "Error: Box %s not found\n", TBox);
-  
-  return NULL;
+    return NULL;
 }
 
-box_param_t * gene_childboxbyOffset( box_param_t *superbox, OPJ_OFF_T offset)
+box_param_t * gene_childboxbyOffset(box_param_t *superbox, OPJ_OFF_T offset)
 {
-  return gene_boxbyOffset( superbox->fd, get_DBoxoff( superbox)+offset);
+    return gene_boxbyOffset(superbox->fd, get_DBoxoff(superbox) + offset);
 }
 
-box_param_t * gene_childboxbyType( box_param_t *superbox, OPJ_OFF_T offset, const char TBox[])
+box_param_t * gene_childboxbyType(box_param_t *superbox, OPJ_OFF_T offset,
+                                  const char TBox[])
 {
-  OPJ_SIZE_T DBOXlen = get_DBoxlen(superbox);
-  assert( offset >= 0 );
-  if( DBOXlen < (OPJ_SIZE_T)offset )
-    {
-    fprintf( FCGI_stderr, "Error: Impossible happen %lu < %ld\n", DBOXlen, offset);
-    return NULL;
+    OPJ_SIZE_T DBOXlen = get_DBoxlen(superbox);
+    assert(offset >= 0);
+    if (DBOXlen < (OPJ_SIZE_T)offset) {
+        fprintf(FCGI_stderr, "Error: Impossible happen %lu < %ld\n", DBOXlen, offset);
+        return NULL;
     }
-  return gene_boxbyType( superbox->fd, get_DBoxoff( superbox)+offset, DBOXlen-(OPJ_SIZE_T)offset, TBox);
+    return gene_boxbyType(superbox->fd, get_DBoxoff(superbox) + offset,
+                          DBOXlen - (OPJ_SIZE_T)offset, TBox);
 }
 
-OPJ_OFF_T get_DBoxoff( box_param_t *box)
+OPJ_OFF_T get_DBoxoff(box_param_t *box)
 {
-  return box->offset+box->headlen;
+    return box->offset + box->headlen;
 }
 
-OPJ_SIZE_T get_DBoxlen( box_param_t *box)
+OPJ_SIZE_T get_DBoxlen(box_param_t *box)
 {
-  return box->length - box->headlen;
+    return box->length - box->headlen;
 }
 
-Byte_t * fetch_headbytes( box_param_t *box)
+Byte_t * fetch_headbytes(box_param_t *box)
 {
-  return fetch_bytes( box->fd, box->offset, box->headlen);
+    return fetch_bytes(box->fd, box->offset, box->headlen);
 }
 
-Byte_t * fetch_DBoxbytes( box_param_t *box, OPJ_OFF_T offset, OPJ_SIZE_T size)
+Byte_t * fetch_DBoxbytes(box_param_t *box, OPJ_OFF_T offset, OPJ_SIZE_T size)
 {
-  return fetch_bytes( box->fd, get_DBoxoff( box)+offset, size);
+    return fetch_bytes(box->fd, get_DBoxoff(box) + offset, size);
 }
 
-Byte_t fetch_DBox1byte( box_param_t *box, OPJ_OFF_T offset)
+Byte_t fetch_DBox1byte(box_param_t *box, OPJ_OFF_T offset)
 {
-  return fetch_1byte( box->fd, get_DBoxoff( box)+offset);
+    return fetch_1byte(box->fd, get_DBoxoff(box) + offset);
 }
 
-Byte2_t fetch_DBox2bytebigendian( box_param_t *box, OPJ_OFF_T offset)
+Byte2_t fetch_DBox2bytebigendian(box_param_t *box, OPJ_OFF_T offset)
 {
-  return fetch_2bytebigendian( box->fd, get_DBoxoff( box)+offset);
+    return fetch_2bytebigendian(box->fd, get_DBoxoff(box) + offset);
 }
 
-Byte4_t fetch_DBox4bytebigendian( box_param_t *box, OPJ_OFF_T offset)
+Byte4_t fetch_DBox4bytebigendian(box_param_t *box, OPJ_OFF_T offset)
 {
-  return fetch_4bytebigendian( box->fd, get_DBoxoff( box)+offset);
+    return fetch_4bytebigendian(box->fd, get_DBoxoff(box) + offset);
 }
 
-Byte8_t fetch_DBox8bytebigendian( box_param_t *box, OPJ_OFF_T offset)
+Byte8_t fetch_DBox8bytebigendian(box_param_t *box, OPJ_OFF_T offset)
 {
-  return fetch_8bytebigendian( box->fd, get_DBoxoff( box)+offset);
+    return fetch_8bytebigendian(box->fd, get_DBoxoff(box) + offset);
 }
 
-box_param_t * search_box( const char type[], boxlist_param_t *boxlist)
+box_param_t * search_box(const char type[], boxlist_param_t *boxlist)
 {
-  box_param_t *foundbox;
-
-  foundbox = boxlist->first;
-  
-  while( foundbox != NULL){
-    
-    if( strncmp( type, foundbox->type, 4) == 0)
-      return foundbox;
-      
-    foundbox = foundbox->next;
-  }
-  fprintf( FCGI_stderr, "Error: Box %s not found\n", type);
-
-  return NULL;
+    box_param_t *foundbox;
+
+    foundbox = boxlist->first;
+
+    while (foundbox != NULL) {
+
+        if (strncmp(type, foundbox->type, 4) == 0) {
+            return foundbox;
+        }
+
+        foundbox = foundbox->next;
+    }
+    fprintf(FCGI_stderr, "Error: Box %s not found\n", type);
+
+    return NULL;
 }
 
-void print_box( box_param_t *box)
+void print_box(box_param_t *box)
 {
-  fprintf( logstream, "box info:\n"
-          "\t type: %.4s\n"
-          "\t offset: %" PRId64 " %#" PRIx64 "\n" 
-          "\t header length: %d\n"
-     "\t length: %" PRId64 " %#" PRIx64 "\n", box->type, box->offset, 
-     box->offset, box->headlen, box->length, box->length);
+    fprintf(logstream, "box info:\n"
+            "\t type: %.4s\n"
+            "\t offset: %" PRId64 " %#" PRIx64 "\n"
+            "\t header length: %d\n"
+            "\t length: %" PRId64 " %#" PRIx64 "\n", box->type, box->offset,
+            box->offset, box->headlen, box->length, box->length);
 }
 
-void print_allbox( boxlist_param_t *boxlist)
+void print_allbox(boxlist_param_t *boxlist)
 {
-  box_param_t *ptr;
+    box_param_t *ptr;
 
-  if( !boxlist)
-    return;
+    if (!boxlist) {
+        return;
+    }
 
-  ptr = boxlist->first;
-  if( !ptr)
-    fprintf( logstream, "no box\n");
+    ptr = boxlist->first;
+    if (!ptr) {
+        fprintf(logstream, "no box\n");
+    }
 
-  fprintf( logstream, "all box info: \n");
-  while( ptr != NULL){
-    print_box( ptr);
-    ptr=ptr->next;
-  }
+    fprintf(logstream, "all box info: \n");
+    while (ptr != NULL) {
+        print_box(ptr);
+        ptr = ptr->next;
+    }
 }
 
-void delete_box_in_list( box_param_t **box, boxlist_param_t *boxlist)
+void delete_box_in_list(box_param_t **box, boxlist_param_t *boxlist)
 {
-  box_param_t *ptr;
-
-  if( *box == boxlist->first)
-    boxlist->first = (*box)->next;
-  else{
-    ptr = boxlist->first;
-    while( ptr->next != *box){
-      ptr=ptr->next;
+    box_param_t *ptr;
+
+    if (*box == boxlist->first) {
+        boxlist->first = (*box)->next;
+    } else {
+        ptr = boxlist->first;
+        while (ptr->next != *box) {
+            ptr = ptr->next;
+        }
+        ptr->next = (*box)->next;
+
+        if (*box == boxlist->last) {
+            boxlist->last = ptr;
+        }
     }
-    ptr->next = (*box)->next;
-    
-    if( *box == boxlist->last)
-      boxlist->last = ptr;
-  }
-  free( *box);
+    free(*box);
 }
 
-void delete_box_in_list_by_type( const char type[], boxlist_param_t *boxlist)
+void delete_box_in_list_by_type(const char type[], boxlist_param_t *boxlist)
 {
-  box_param_t *box;
+    box_param_t *box;
 
-  box = search_box( type, boxlist);
-  delete_box_in_list( &box, boxlist);
+    box = search_box(type, boxlist);
+    delete_box_in_list(&box, boxlist);
 }
 
-void delete_boxlist( boxlist_param_t **boxlist)
+void delete_boxlist(boxlist_param_t **boxlist)
 {
-  box_param_t *boxPtr, *boxNext;
-
-  if(!(*boxlist))
-    return;
-  
-  boxPtr = (*boxlist)->first;
-  while( boxPtr != NULL){
-    boxNext=boxPtr->next;
-    free( boxPtr);
-    boxPtr=boxNext;
-  }
-  free( *boxlist);
+    box_param_t *boxPtr, *boxNext;
+
+    if (!(*boxlist)) {
+        return;
+    }
+
+    boxPtr = (*boxlist)->first;
+    while (boxPtr != NULL) {
+        boxNext = boxPtr->next;
+        free(boxPtr);
+        boxPtr = boxNext;
+    }
+    free(*boxlist);
 }
 
-void insert_box_into_list( box_param_t *box, boxlist_param_t *boxlist)
+void insert_box_into_list(box_param_t *box, boxlist_param_t *boxlist)
 {
-  if( boxlist->first)
-    boxlist->last->next = box;
-  else
-    boxlist->first = box;
-  boxlist->last = box;
+    if (boxlist->first) {
+        boxlist->last->next = box;
+    } else {
+        boxlist->first = box;
+    }
+    boxlist->last = box;
 }
index 3b97c6df299b85a5768735b9f8f5eb9571105dd4..f5958f64f52f7a94d83d744aac2c3ade2e2e139a 100644 (file)
 #endif /*SERVER*/
 
 
-boxheader_param_t * gene_boxheader( int fd, OPJ_OFF_T offset)
+boxheader_param_t * gene_boxheader(int fd, OPJ_OFF_T offset)
 {
-  Byte8_t boxlen;
-  Byte_t headlen;
-  char *boxtype;
-  boxheader_param_t *boxheader;
+    Byte8_t boxlen;
+    Byte_t headlen;
+    char *boxtype;
+    boxheader_param_t *boxheader;
 
-  boxlen = fetch_4bytebigendian( fd, offset);
-  boxtype = (char *)fetch_bytes( fd, offset+4, 4);
-  headlen = 8;
-    
-  if( boxlen == 1){ /* read XLBox */
-    boxlen = fetch_8bytebigendian( fd, offset+8);
-    headlen = 16;
-  }
+    boxlen = fetch_4bytebigendian(fd, offset);
+    boxtype = (char *)fetch_bytes(fd, offset + 4, 4);
+    headlen = 8;
 
-  boxheader = (boxheader_param_t *)malloc( sizeof( boxheader_param_t));
-  boxheader->headlen = headlen;
-  boxheader->length = boxlen;
-  strncpy( boxheader->type, boxtype, 4);
-  boxheader->next = NULL;
-  
-  free( boxtype);
-  return boxheader;
+    if (boxlen == 1) { /* read XLBox */
+        boxlen = fetch_8bytebigendian(fd, offset + 8);
+        headlen = 16;
+    }
+
+    boxheader = (boxheader_param_t *)malloc(sizeof(boxheader_param_t));
+    boxheader->headlen = headlen;
+    boxheader->length = boxlen;
+    strncpy(boxheader->type, boxtype, 4);
+    boxheader->next = NULL;
+
+    free(boxtype);
+    return boxheader;
 }
 
-boxheader_param_t * gene_childboxheader( box_param_t *superbox, OPJ_OFF_T offset)
+boxheader_param_t * gene_childboxheader(box_param_t *superbox, OPJ_OFF_T offset)
 {
-  return gene_boxheader( superbox->fd, get_DBoxoff(superbox)+offset);
+    return gene_boxheader(superbox->fd, get_DBoxoff(superbox) + offset);
 }
 
-void print_boxheader( boxheader_param_t *boxheader)
+void print_boxheader(boxheader_param_t *boxheader)
 {
-  fprintf( logstream, "boxheader info:\n"
-          "\t type: %.4s\n"
-          "\t length:%" PRId64 " %#" PRIx64 "\n", boxheader->type, boxheader->length, boxheader->length);
+    fprintf(logstream, "boxheader info:\n"
+            "\t type: %.4s\n"
+            "\t length:%" PRId64 " %#" PRIx64 "\n", boxheader->type, boxheader->length,
+            boxheader->length);
 }
index 755374240d20bbe1d7c2fc51d15dd2d5b78ff781..359db4d98797a0480263b64824f51e04f4c4dcda 100644 (file)
 #endif /*SERVER*/
 
 
-Byte_t * fetch_bytes( int fd, OPJ_OFF_T offset, OPJ_SIZE_T size)
+Byte_t * fetch_bytes(int fd, OPJ_OFF_T offset, OPJ_SIZE_T size)
 {
-  Byte_t *data;
-
-  if( lseek( fd, offset, SEEK_SET)==-1){
-    fprintf( FCGI_stdout, "Reason: Target broken (fseek error)\r\n");
-    fprintf( FCGI_stderr, "Error: error in fetch_bytes( %d, %ld, %lu)\n", fd, offset, size);
-    return NULL;
-  }
-  
-  data = (Byte_t *)malloc( size);
-
-  if( (OPJ_SIZE_T)read( fd, data, size) != size){
-    free( data);
-    fprintf( FCGI_stdout, "Reason: Target broken (read error)\r\n");
-    fprintf( FCGI_stderr, "Error: error in fetch_bytes( %d, %ld, %lu)\n", fd, offset, size);
-    return NULL;
-  }
-  return data;
+    Byte_t *data;
+
+    if (lseek(fd, offset, SEEK_SET) == -1) {
+        fprintf(FCGI_stdout, "Reason: Target broken (fseek error)\r\n");
+        fprintf(FCGI_stderr, "Error: error in fetch_bytes( %d, %ld, %lu)\n", fd, offset,
+                size);
+        return NULL;
+    }
+
+    data = (Byte_t *)malloc(size);
+
+    if ((OPJ_SIZE_T)read(fd, data, size) != size) {
+        free(data);
+        fprintf(FCGI_stdout, "Reason: Target broken (read error)\r\n");
+        fprintf(FCGI_stderr, "Error: error in fetch_bytes( %d, %ld, %lu)\n", fd, offset,
+                size);
+        return NULL;
+    }
+    return data;
 }
 
-Byte_t fetch_1byte( int fd, OPJ_OFF_T offset)
+Byte_t fetch_1byte(int fd, OPJ_OFF_T offset)
 {
-  Byte_t code;
-
-  if( lseek( fd, offset, SEEK_SET)==-1){
-    fprintf( FCGI_stdout, "Reason: Target broken (seek error)\r\n");
-    fprintf( FCGI_stderr, "Error: error in fetch_1byte( %d, %ld)\n", fd, offset);
-    return 0;
-  }
-   
-  if( read( fd, &code, 1) != 1){
-    fprintf( FCGI_stdout, "Reason: Target broken (read error)\r\n");
-    fprintf( FCGI_stderr, "Error: error in fetch_bytes( %d, %ld)\n", fd, offset);
-    return 0;
-  }
-  return code;
+    Byte_t code;
+
+    if (lseek(fd, offset, SEEK_SET) == -1) {
+        fprintf(FCGI_stdout, "Reason: Target broken (seek error)\r\n");
+        fprintf(FCGI_stderr, "Error: error in fetch_1byte( %d, %ld)\n", fd, offset);
+        return 0;
+    }
+
+    if (read(fd, &code, 1) != 1) {
+        fprintf(FCGI_stdout, "Reason: Target broken (read error)\r\n");
+        fprintf(FCGI_stderr, "Error: error in fetch_bytes( %d, %ld)\n", fd, offset);
+        return 0;
+    }
+    return code;
 }
 
-Byte2_t fetch_2bytebigendian( int fd, OPJ_OFF_T offset)
+Byte2_t fetch_2bytebigendian(int fd, OPJ_OFF_T offset)
 {
-  Byte_t *data;
-  Byte2_t code;
-
-  if(!(data = fetch_bytes( fd, offset, 2))){
-    fprintf( FCGI_stderr, "Error: error in fetch_2bytebigendian( %d, %ld)\n", fd, offset);
-    return 0;
-  }
-  code = big2(data);
-  free( data);
-
-  return code;
+    Byte_t *data;
+    Byte2_t code;
+
+    if (!(data = fetch_bytes(fd, offset, 2))) {
+        fprintf(FCGI_stderr, "Error: error in fetch_2bytebigendian( %d, %ld)\n", fd,
+                offset);
+        return 0;
+    }
+    code = big2(data);
+    free(data);
+
+    return code;
 }
 
-Byte4_t fetch_4bytebigendian( int fd, OPJ_OFF_T offset)
+Byte4_t fetch_4bytebigendian(int fd, OPJ_OFF_T offset)
 {
-  Byte_t *data;
-  Byte4_t code;
-
-  if(!(data = fetch_bytes( fd, offset, 4))){
-    fprintf( FCGI_stderr, "Error: error in fetch_4bytebigendian( %d, %ld)\n", fd, offset);
-    return 0;
-  }
-  code = big4(data);
-  free( data);
-
-  return code;
+    Byte_t *data;
+    Byte4_t code;
+
+    if (!(data = fetch_bytes(fd, offset, 4))) {
+        fprintf(FCGI_stderr, "Error: error in fetch_4bytebigendian( %d, %ld)\n", fd,
+                offset);
+        return 0;
+    }
+    code = big4(data);
+    free(data);
+
+    return code;
 }
 
-Byte8_t fetch_8bytebigendian( int fd, OPJ_OFF_T offset)
+Byte8_t fetch_8bytebigendian(int fd, OPJ_OFF_T offset)
 {
-  Byte_t *data;
-  Byte8_t code;
-
-  if(!(data = fetch_bytes( fd, offset, 8))){
-    fprintf( FCGI_stderr, "Error: error in fetch_8bytebigendian( %d, %ld)\n", fd, offset);
-    return 0;
-  }
-  code = big8(data);
-  free( data);
-
-  return code;
+    Byte_t *data;
+    Byte8_t code;
+
+    if (!(data = fetch_bytes(fd, offset, 8))) {
+        fprintf(FCGI_stderr, "Error: error in fetch_8bytebigendian( %d, %ld)\n", fd,
+                offset);
+        return 0;
+    }
+    code = big8(data);
+    free(data);
+
+    return code;
 }
 
 
-Byte2_t big2( Byte_t *buf)
+Byte2_t big2(Byte_t *buf)
 {
-  return (Byte2_t)((((Byte2_t) buf[0]) << 8) + ((Byte2_t) buf[1]));
+    return (Byte2_t)((((Byte2_t) buf[0]) << 8) + ((Byte2_t) buf[1]));
 }
 
-Byte4_t big4( Byte_t *buf)
+Byte4_t big4(Byte_t *buf)
 {
-  return (((((((Byte4_t) buf[0]) << 8) + ((Byte4_t) buf[1])) << 8)
-           + ((Byte4_t) buf[2])) << 8) + ((Byte4_t) buf[3]);
+    return (((((((Byte4_t) buf[0]) << 8) + ((Byte4_t) buf[1])) << 8)
+             + ((Byte4_t) buf[2])) << 8) + ((Byte4_t) buf[3]);
 }
 
-Byte8_t big8( Byte_t *buf)
+Byte8_t big8(Byte_t *buf)
 {
-  return (((Byte8_t) big4 (buf)) << 32)
-        + ((Byte8_t) big4 (buf + 4));
+    return (((Byte8_t) big4(buf)) << 32)
+           + ((Byte8_t) big4(buf + 4));
 }
 
-void modify_4Bytecode( Byte4_t code, Byte_t *stream)
+void modify_4Bytecode(Byte4_t code, Byte_t *stream)
 {
-  *stream     = (Byte_t) ((Byte4_t)(code & 0xff000000) >> 24);
-  *(stream+1) = (Byte_t) ((Byte4_t)(code & 0x00ff0000) >> 16);
-  *(stream+2) = (Byte_t) ((Byte4_t)(code & 0x0000ff00) >> 8);
-  *(stream+3) = (Byte_t) (code & 0x000000ff);
+    *stream     = (Byte_t)((Byte4_t)(code & 0xff000000) >> 24);
+    *(stream + 1) = (Byte_t)((Byte4_t)(code & 0x00ff0000) >> 16);
+    *(stream + 2) = (Byte_t)((Byte4_t)(code & 0x0000ff00) >> 8);
+    *(stream + 3) = (Byte_t)(code & 0x000000ff);
 }
 
-OPJ_OFF_T get_filesize( int fd)
+OPJ_OFF_T get_filesize(int fd)
 {
-  struct stat sb;
-    
-  if( fstat( fd, &sb) == -1){
-    fprintf( FCGI_stdout, "Reason: Target broken (fstat error)\r\n");
-    fprintf( FCGI_stderr, "Error: error in get_filesize( %d)\n", fd);
-    return 0;
-  }
-  return sb.st_size;
+    struct stat sb;
+
+    if (fstat(fd, &sb) == -1) {
+        fprintf(FCGI_stdout, "Reason: Target broken (fstat error)\r\n");
+        fprintf(FCGI_stderr, "Error: error in get_filesize( %d)\n", fd);
+        return 0;
+    }
+    return sb.st_size;
 }
index 56b10465fb5782a60552382da55075ca117848f4..db3a8b533ccc5e3ac2d2b1cd6c1b5a5b69bdf14a 100644 (file)
 
 cachelist_param_t * gene_cachelist(void)
 {
-  cachelist_param_t *cachelist;
-  
-  cachelist = (cachelist_param_t *)malloc( sizeof(cachelist_param_t));
-  
-  cachelist->first = NULL;
-  cachelist->last  = NULL;
-
-  return cachelist;
+    cachelist_param_t *cachelist;
+
+    cachelist = (cachelist_param_t *)malloc(sizeof(cachelist_param_t));
+
+    cachelist->first = NULL;
+    cachelist->last  = NULL;
+
+    return cachelist;
 }
 
 void delete_cachelist(cachelist_param_t **cachelist)
 {
-  cache_param_t *cachePtr, *cacheNext;
-  
-  cachePtr = (*cachelist)->first;
-  while( cachePtr != NULL){
-    cacheNext=cachePtr->next;
-    delete_cache( &cachePtr);
-    cachePtr=cacheNext;
-  }
-  free( *cachelist);
+    cache_param_t *cachePtr, *cacheNext;
+
+    cachePtr = (*cachelist)->first;
+    while (cachePtr != NULL) {
+        cacheNext = cachePtr->next;
+        delete_cache(&cachePtr);
+        cachePtr = cacheNext;
+    }
+    free(*cachelist);
 }
 
-cache_param_t * gene_cache( const char *targetname, int csn, char *tid, char *cid)
+cache_param_t * gene_cache(const char *targetname, int csn, char *tid,
+                           char *cid)
 {
-  cache_param_t *cache;
-  
-  cache = (cache_param_t *)malloc( sizeof(cache_param_t));
-  cache->filename = strdup( targetname);
-  cache->tid = strdup( tid);
-  cache->csn = csn;
-  cache->cid = (char **)malloc( sizeof(char *));
-  *cache->cid = strdup( cid);
-  cache->numOfcid = 1;
+    cache_param_t *cache;
+
+    cache = (cache_param_t *)malloc(sizeof(cache_param_t));
+    cache->filename = strdup(targetname);
+    cache->tid = strdup(tid);
+    cache->csn = csn;
+    cache->cid = (char **)malloc(sizeof(char *));
+    *cache->cid = strdup(cid);
+    cache->numOfcid = 1;
 #if 1
-  cache->metadatalist = NULL;
+    cache->metadatalist = NULL;
 #else
-  cache->metadatalist = gene_metadatalist();
+    cache->metadatalist = gene_metadatalist();
 #endif
-  cache->ihdrbox = NULL;
-  cache->next = NULL;
+    cache->ihdrbox = NULL;
+    cache->next = NULL;
 
-  return cache;
+    return cache;
 }
 
-void delete_cache( cache_param_t **cache)
+void delete_cache(cache_param_t **cache)
 {
-  int i;
-  
-  free( (*cache)->filename);
-  free( (*cache)->tid);
-
-  delete_metadatalist( &(*cache)->metadatalist);
-
-  if((*cache)->ihdrbox)
-    free((*cache)->ihdrbox);
-  for( i=0; i<(*cache)->numOfcid; i++)
-    free( (*cache)->cid[i]);
-  free( (*cache)->cid);
-  free( *cache);
+    int i;
+
+    free((*cache)->filename);
+    free((*cache)->tid);
+
+    delete_metadatalist(&(*cache)->metadatalist);
+
+    if ((*cache)->ihdrbox) {
+        free((*cache)->ihdrbox);
+    }
+    for (i = 0; i < (*cache)->numOfcid; i++) {
+        free((*cache)->cid[i]);
+    }
+    free((*cache)->cid);
+    free(*cache);
 }
 
-void insert_cache_into_list( cache_param_t *cache, cachelist_param_t *cachelist)
+void insert_cache_into_list(cache_param_t *cache, cachelist_param_t *cachelist)
 {
-  if( cachelist->first)
-    cachelist->last->next = cache;
-  else
-    cachelist->first = cache;
-  cachelist->last = cache;
+    if (cachelist->first) {
+        cachelist->last->next = cache;
+    } else {
+        cachelist->first = cache;
+    }
+    cachelist->last = cache;
 }
 
-cache_param_t * search_cache( const char targetname[], cachelist_param_t *cachelist)
+cache_param_t * search_cache(const char targetname[],
+                             cachelist_param_t *cachelist)
 {
-  cache_param_t *foundcache;
+    cache_param_t *foundcache;
 
-  if( !targetname)
-    return NULL;
+    if (!targetname) {
+        return NULL;
+    }
 
-  foundcache = cachelist->first;
-  
-  while( foundcache != NULL){
-    
-    if( strcmp( targetname, foundcache->filename) == 0)
-      return foundcache;
-      
-    foundcache = foundcache->next;
-  }
-  return NULL;
+    foundcache = cachelist->first;
+
+    while (foundcache != NULL) {
+
+        if (strcmp(targetname, foundcache->filename) == 0) {
+            return foundcache;
+        }
+
+        foundcache = foundcache->next;
+    }
+    return NULL;
 }
 
-cache_param_t * search_cacheBycsn( int csn, cachelist_param_t *cachelist)
+cache_param_t * search_cacheBycsn(int csn, cachelist_param_t *cachelist)
 {
-  cache_param_t *foundcache;
-
-  foundcache = cachelist->first;
-  
-  while( foundcache != NULL){
-    
-    if(  csn == foundcache->csn)
-      return foundcache;
-    foundcache = foundcache->next;
-  }
-  return NULL;
+    cache_param_t *foundcache;
+
+    foundcache = cachelist->first;
+
+    while (foundcache != NULL) {
+
+        if (csn == foundcache->csn) {
+            return foundcache;
+        }
+        foundcache = foundcache->next;
+    }
+    return NULL;
 }
 
-cache_param_t * search_cacheBycid( const char cid[], cachelist_param_t *cachelist)
+cache_param_t * search_cacheBycid(const char cid[],
+                                  cachelist_param_t *cachelist)
 {
-  cache_param_t *foundcache;
-  int i;
+    cache_param_t *foundcache;
+    int i;
 
-  if( !cid)
-    return NULL;
+    if (!cid) {
+        return NULL;
+    }
 
-  foundcache = cachelist->first;
-  
-  while( foundcache != NULL){
-    for( i=0; i<foundcache->numOfcid; i++)
-      if( strcmp( cid, foundcache->cid[i]) == 0)
-       return foundcache;
-    foundcache = foundcache->next;
-  }
-  return NULL;
+    foundcache = cachelist->first;
+
+    while (foundcache != NULL) {
+        for (i = 0; i < foundcache->numOfcid; i++)
+            if (strcmp(cid, foundcache->cid[i]) == 0) {
+                return foundcache;
+            }
+        foundcache = foundcache->next;
+    }
+    return NULL;
 }
 
-cache_param_t * search_cacheBytid( const char tid[], cachelist_param_t *cachelist)
+cache_param_t * search_cacheBytid(const char tid[],
+                                  cachelist_param_t *cachelist)
 {
-  cache_param_t *foundcache;
+    cache_param_t *foundcache;
 
-  if( !tid)
-    return NULL;
+    if (!tid) {
+        return NULL;
+    }
+
+    foundcache = cachelist->first;
 
-  foundcache = cachelist->first;
-  
-  while( foundcache != NULL){
-    if( strcmp( tid, foundcache->tid) == 0)
-      return foundcache;
-    foundcache = foundcache->next;
-  }
-  return NULL;
+    while (foundcache != NULL) {
+        if (strcmp(tid, foundcache->tid) == 0) {
+            return foundcache;
+        }
+        foundcache = foundcache->next;
+    }
+    return NULL;
 }
 
-void add_cachecid( const char *cid, cache_param_t *cache)
+void add_cachecid(const char *cid, cache_param_t *cache)
 {
-  if( !cid)
-    return;
-  
-  if( (cache->cid = realloc( cache->cid, (OPJ_SIZE_T)(cache->numOfcid+1)*sizeof(char *))) == NULL){
-    fprintf( stderr, "failed to add new cid to cache table in add_cachecid()\n");
-    return;
-  }
-  
-  cache->cid[ cache->numOfcid] = strdup( cid);
-
-  cache->numOfcid ++;
+    if (!cid) {
+        return;
+    }
+
+    if ((cache->cid = realloc(cache->cid,
+                              (OPJ_SIZE_T)(cache->numOfcid + 1) * sizeof(char *))) == NULL) {
+        fprintf(stderr, "failed to add new cid to cache table in add_cachecid()\n");
+        return;
+    }
+
+    cache->cid[ cache->numOfcid] = strdup(cid);
+
+    cache->numOfcid ++;
 }
 
-void update_cachetid( const char *tid, cache_param_t *cache)
+void update_cachetid(const char *tid, cache_param_t *cache)
 {
-  if( !tid)
-    return;
-
-  if( tid[0] != '0' && strcmp( tid, cache->tid) !=0){
-    fprintf( stderr, "tid is updated to %s for %s\n", tid, cache->filename);
-    free( cache->tid);
-    cache->tid = strdup( tid);
-  }
+    if (!tid) {
+        return;
+    }
+
+    if (tid[0] != '0' && strcmp(tid, cache->tid) != 0) {
+        fprintf(stderr, "tid is updated to %s for %s\n", tid, cache->filename);
+        free(cache->tid);
+        cache->tid = strdup(tid);
+    }
 }
 
-void remove_cidInCache( const char *cid, cache_param_t *cache);
+void remove_cidInCache(const char *cid, cache_param_t *cache);
 
-void remove_cachecid( const char *cid, cachelist_param_t *cachelist)
+void remove_cachecid(const char *cid, cachelist_param_t *cachelist)
 {
-  cache_param_t *cache;
+    cache_param_t *cache;
 
-  cache = search_cacheBycid( cid, cachelist);
-  remove_cidInCache( cid, cache);
+    cache = search_cacheBycid(cid, cachelist);
+    remove_cidInCache(cid, cache);
 }
 
-void remove_cidInCache( const char *cid, cache_param_t *cache)
+void remove_cidInCache(const char *cid, cache_param_t *cache)
 {
-  int idx = -1;
-  char **tmp;
-  int i, j;
-
-  for( i=0; i<cache->numOfcid; i++)
-    if( strcmp( cid, cache->cid[i]) == 0){
-      idx = i;
-      break;
+    int idx = -1;
+    char **tmp;
+    int i, j;
+
+    for (i = 0; i < cache->numOfcid; i++)
+        if (strcmp(cid, cache->cid[i]) == 0) {
+            idx = i;
+            break;
+        }
+
+    if (idx == -1) {
+        fprintf(stderr, "cid: %s not found\n", cid);
+        return;
     }
 
-  if( idx == -1){
-    fprintf( stderr, "cid: %s not found\n", cid);
-    return;   
-  }
-  
-  tmp = cache->cid;
-
-  cache->cid = (char **)malloc( (OPJ_SIZE_T)(cache->numOfcid-1)*sizeof(char *));
-  
-  for( i=0, j=0; i<cache->numOfcid; i++){
-    if( i != idx){
-      cache->cid[j] = strdup( tmp[i]);
-      j++;
+    tmp = cache->cid;
+
+    cache->cid = (char **)malloc((OPJ_SIZE_T)(cache->numOfcid - 1) * sizeof(
+                                     char *));
+
+    for (i = 0, j = 0; i < cache->numOfcid; i++) {
+        if (i != idx) {
+            cache->cid[j] = strdup(tmp[i]);
+            j++;
+        }
+        free(tmp[i]);
     }
-    free( tmp[i]);
-  }
-  free( tmp);
+    free(tmp);
 
-  cache->numOfcid --;
+    cache->numOfcid --;
 }
 
-void print_cache( cache_param_t *cache)
+void print_cache(cache_param_t *cache)
 {
-  int i;
-  
-  fprintf( stdout,"cache\n");
-  fprintf( stdout,"\t filename: %s\n", cache->filename);
-  fprintf( stdout,"\t tid: %s\n", cache->tid);
-  fprintf( stdout,"\t csn: %d\n", cache->csn);
-  fprintf( stdout,"\t cid:");
-
-  for( i=0; i<cache->numOfcid; i++)
-    fprintf( stdout," %s", cache->cid[i]);
-  fprintf( stdout,"\n");
+    int i;
+
+    fprintf(stdout, "cache\n");
+    fprintf(stdout, "\t filename: %s\n", cache->filename);
+    fprintf(stdout, "\t tid: %s\n", cache->tid);
+    fprintf(stdout, "\t csn: %d\n", cache->csn);
+    fprintf(stdout, "\t cid:");
+
+    for (i = 0; i < cache->numOfcid; i++) {
+        fprintf(stdout, " %s", cache->cid[i]);
+    }
+    fprintf(stdout, "\n");
 }
 
-void print_allcache( cachelist_param_t *cachelist)
+void print_allcache(cachelist_param_t *cachelist)
 {
-  cache_param_t *ptr;
-
-  fprintf( stdout,"cache list\n");
-  
-  ptr = cachelist->first;
-  while( ptr != NULL){
-    print_cache( ptr);
-    ptr=ptr->next;
-  }
+    cache_param_t *ptr;
+
+    fprintf(stdout, "cache list\n");
+
+    ptr = cachelist->first;
+    while (ptr != NULL) {
+        print_cache(ptr);
+        ptr = ptr->next;
+    }
 }
index da30d94057499dc13bf1e76242c9ea8f509916de..0888fc9c2f4c422d36969682adf666fcf44a80b0 100644 (file)
 
 cachemodellist_param_t * gene_cachemodellist(void)
 {
-  cachemodellist_param_t *cachemodellist;
+    cachemodellist_param_t *cachemodellist;
 
-  cachemodellist = (cachemodellist_param_t *)opj_malloc( sizeof(cachemodellist_param_t));
-  
-  cachemodellist->first = NULL;
-  cachemodellist->last  = NULL;
+    cachemodellist = (cachemodellist_param_t *)opj_malloc(sizeof(
+                         cachemodellist_param_t));
 
-  return cachemodellist;
+    cachemodellist->first = NULL;
+    cachemodellist->last  = NULL;
+
+    return cachemodellist;
 }
 
-cachemodel_param_t * gene_cachemodel( cachemodellist_param_t *cachemodellist, target_param_t *target, OPJ_BOOL reqJPP)
+cachemodel_param_t * gene_cachemodel(cachemodellist_param_t *cachemodellist,
+                                     target_param_t *target, OPJ_BOOL reqJPP)
 {
-  cachemodel_param_t *cachemodel;
-  faixbox_param_t *tilepart;
-  faixbox_param_t *precpacket;
-  size_t numOfelem;
-  Byte8_t numOftiles;
-  int i;
-
-  cachemodel = (cachemodel_param_t *)opj_malloc( sizeof(cachemodel_param_t));
-
-  refer_target( target, &cachemodel->target);
-  
-  if( reqJPP){
-    if( target->jppstream)
-      cachemodel->jppstream = OPJ_TRUE;
-    else
-      cachemodel->jppstream = OPJ_FALSE;
-  } else{ /* reqJPT */
-    if( target->jptstream)
-      cachemodel->jppstream = OPJ_FALSE;
-    else
-      cachemodel->jppstream = OPJ_TRUE;
-  }
-
-  cachemodel->mhead_model = OPJ_FALSE;
-  
-  tilepart = target->codeidx->tilepart;
-  numOftiles = get_m( tilepart);
-  numOfelem = get_nmax( tilepart)*numOftiles;
-  cachemodel->tp_model = (OPJ_BOOL *)opj_calloc( 1, numOfelem*sizeof(OPJ_BOOL));
-  cachemodel->th_model = (OPJ_BOOL *)opj_calloc( 1, numOftiles*sizeof(OPJ_BOOL));
-  cachemodel->pp_model = (OPJ_BOOL **)opj_malloc( target->codeidx->SIZ.Csiz*sizeof(OPJ_BOOL *));
-  for( i=0; i<target->codeidx->SIZ.Csiz; i++){
-    precpacket = target->codeidx->precpacket[i];
-    cachemodel->pp_model[i] = (OPJ_BOOL *)opj_calloc( 1, get_nmax(precpacket)*get_m(precpacket)*sizeof(OPJ_BOOL));
-  }
-  cachemodel->next = NULL;
-  
-  if( cachemodellist){
-    if( cachemodellist->first) /* there are one or more entries */
-      cachemodellist->last->next = cachemodel;
-    else                   /* first entry */
-      cachemodellist->first = cachemodel;
-    cachemodellist->last = cachemodel;
-  }
+    cachemodel_param_t *cachemodel;
+    faixbox_param_t *tilepart;
+    faixbox_param_t *precpacket;
+    size_t numOfelem;
+    Byte8_t numOftiles;
+    int i;
+
+    cachemodel = (cachemodel_param_t *)opj_malloc(sizeof(cachemodel_param_t));
+
+    refer_target(target, &cachemodel->target);
+
+    if (reqJPP) {
+        if (target->jppstream) {
+            cachemodel->jppstream = OPJ_TRUE;
+        } else {
+            cachemodel->jppstream = OPJ_FALSE;
+        }
+    } else { /* reqJPT */
+        if (target->jptstream) {
+            cachemodel->jppstream = OPJ_FALSE;
+        } else {
+            cachemodel->jppstream = OPJ_TRUE;
+        }
+    }
+
+    cachemodel->mhead_model = OPJ_FALSE;
+
+    tilepart = target->codeidx->tilepart;
+    numOftiles = get_m(tilepart);
+    numOfelem = get_nmax(tilepart) * numOftiles;
+    cachemodel->tp_model = (OPJ_BOOL *)opj_calloc(1, numOfelem * sizeof(OPJ_BOOL));
+    cachemodel->th_model = (OPJ_BOOL *)opj_calloc(1, numOftiles * sizeof(OPJ_BOOL));
+    cachemodel->pp_model = (OPJ_BOOL **)opj_malloc(target->codeidx->SIZ.Csiz *
+                           sizeof(OPJ_BOOL *));
+    for (i = 0; i < target->codeidx->SIZ.Csiz; i++) {
+        precpacket = target->codeidx->precpacket[i];
+        cachemodel->pp_model[i] = (OPJ_BOOL *)opj_calloc(1,
+                                  get_nmax(precpacket) * get_m(precpacket) * sizeof(OPJ_BOOL));
+    }
+    cachemodel->next = NULL;
+
+    if (cachemodellist) {
+        if (cachemodellist->first) { /* there are one or more entries */
+            cachemodellist->last->next = cachemodel;
+        } else {               /* first entry */
+            cachemodellist->first = cachemodel;
+        }
+        cachemodellist->last = cachemodel;
+    }
 
 #ifndef SERVER
-  fprintf( logstream, "local log: cachemodel generated\n");
+    fprintf(logstream, "local log: cachemodel generated\n");
 #endif
 
-  return cachemodel; 
+    return cachemodel;
 }
 
-void print_cachemodel( cachemodel_param_t cachemodel)
+void print_cachemodel(cachemodel_param_t cachemodel)
 {
-  target_param_t *target;
-  Byte8_t TPnum; /* num of tile parts in each tile */
-  Byte8_t Pmax; /* max num of packets per tile */
-  Byte8_t i, j, k;
-  int n; /* FIXME: Is this large enough ? */
-
-  target = cachemodel.target;
-  
-  fprintf( logstream, "target: %s\n", target->targetname);
-  fprintf( logstream, "\t main header model: %d\n", cachemodel.mhead_model);
-
-  fprintf( logstream, "\t tile part model:\n");
-  TPnum = get_nmax( target->codeidx->tilepart);
-
-  for( i=0, n=0; i<target->codeidx->SIZ.YTnum; i++){
-    for( j=0; j<target->codeidx->SIZ.XTnum; j++){
-      for( k=0; k<TPnum; k++)
-       fprintf( logstream, "%d", cachemodel.tp_model[n++]);
-      fprintf( logstream, " ");
+    target_param_t *target;
+    Byte8_t TPnum; /* num of tile parts in each tile */
+    Byte8_t Pmax; /* max num of packets per tile */
+    Byte8_t i, j, k;
+    int n; /* FIXME: Is this large enough ? */
+
+    target = cachemodel.target;
+
+    fprintf(logstream, "target: %s\n", target->targetname);
+    fprintf(logstream, "\t main header model: %d\n", cachemodel.mhead_model);
+
+    fprintf(logstream, "\t tile part model:\n");
+    TPnum = get_nmax(target->codeidx->tilepart);
+
+    for (i = 0, n = 0; i < target->codeidx->SIZ.YTnum; i++) {
+        for (j = 0; j < target->codeidx->SIZ.XTnum; j++) {
+            for (k = 0; k < TPnum; k++) {
+                fprintf(logstream, "%d", cachemodel.tp_model[n++]);
+            }
+            fprintf(logstream, " ");
+        }
+        fprintf(logstream, "\n");
     }
-    fprintf( logstream, "\n");
-  }
-
-  fprintf( logstream, "\t tile header and precinct packet model:\n");
-  for( i=0; i<target->codeidx->SIZ.XTnum*target->codeidx->SIZ.YTnum; i++){
-    fprintf( logstream, "\t  tile.%" PRIu64 "  %d\n", i, cachemodel.th_model[i]);
-    for( j=0; j<target->codeidx->SIZ.Csiz; j++){
-      fprintf( logstream, "\t   compo.%" PRIu64 ": ", j);
-      Pmax = get_nmax( target->codeidx->precpacket[j]);
-      for( k=0; k<Pmax; k++)
-       fprintf( logstream, "%d", cachemodel.pp_model[j][i*Pmax+k]);
-      fprintf( logstream, "\n");
+
+    fprintf(logstream, "\t tile header and precinct packet model:\n");
+    for (i = 0; i < target->codeidx->SIZ.XTnum * target->codeidx->SIZ.YTnum; i++) {
+        fprintf(logstream, "\t  tile.%" PRIu64 "  %d\n", i, cachemodel.th_model[i]);
+        for (j = 0; j < target->codeidx->SIZ.Csiz; j++) {
+            fprintf(logstream, "\t   compo.%" PRIu64 ": ", j);
+            Pmax = get_nmax(target->codeidx->precpacket[j]);
+            for (k = 0; k < Pmax; k++) {
+                fprintf(logstream, "%d", cachemodel.pp_model[j][i * Pmax + k]);
+            }
+            fprintf(logstream, "\n");
+        }
     }
-  }
 }
 
-cachemodel_param_t * search_cachemodel( target_param_t *target, cachemodellist_param_t *cachemodellist)
+cachemodel_param_t * search_cachemodel(target_param_t *target,
+                                       cachemodellist_param_t *cachemodellist)
 {
-  cachemodel_param_t *foundcachemodel;
-
-  foundcachemodel = cachemodellist->first;
-  
-  while( foundcachemodel != NULL){
-    
-    if( foundcachemodel->target == target)
-      return foundcachemodel;
-      
-    foundcachemodel = foundcachemodel->next;
-  }
-  return NULL;
+    cachemodel_param_t *foundcachemodel;
+
+    foundcachemodel = cachemodellist->first;
+
+    while (foundcachemodel != NULL) {
+
+        if (foundcachemodel->target == target) {
+            return foundcachemodel;
+        }
+
+        foundcachemodel = foundcachemodel->next;
+    }
+    return NULL;
 }
 
-void delete_cachemodellist( cachemodellist_param_t **cachemodellist)
-{  
-  cachemodel_param_t *cachemodelPtr, *cachemodelNext;
-
-  cachemodelPtr = (*cachemodellist)->first;
-  while( cachemodelPtr != NULL){
-    cachemodelNext=cachemodelPtr->next;
-    delete_cachemodel( &cachemodelPtr);
-    cachemodelPtr=cachemodelNext;
-  }
-  opj_free(*cachemodellist);
+void delete_cachemodellist(cachemodellist_param_t **cachemodellist)
+{
+    cachemodel_param_t *cachemodelPtr, *cachemodelNext;
+
+    cachemodelPtr = (*cachemodellist)->first;
+    while (cachemodelPtr != NULL) {
+        cachemodelNext = cachemodelPtr->next;
+        delete_cachemodel(&cachemodelPtr);
+        cachemodelPtr = cachemodelNext;
+    }
+    opj_free(*cachemodellist);
 }
 
-void delete_cachemodel( cachemodel_param_t **cachemodel)
+void delete_cachemodel(cachemodel_param_t **cachemodel)
 {
-  int i;
+    int i;
+
+    unrefer_target((*cachemodel)->target);
+
+    opj_free((*cachemodel)->tp_model);
+    opj_free((*cachemodel)->th_model);
 
-  unrefer_target( (*cachemodel)->target);
-  
-  opj_free( (*cachemodel)->tp_model);
-  opj_free( (*cachemodel)->th_model);
-  
-  for( i=0; i<(*cachemodel)->target->codeidx->SIZ.Csiz; i++)
-    opj_free( (*cachemodel)->pp_model[i]);
-  opj_free( (*cachemodel)->pp_model);
+    for (i = 0; i < (*cachemodel)->target->codeidx->SIZ.Csiz; i++) {
+        opj_free((*cachemodel)->pp_model[i]);
+    }
+    opj_free((*cachemodel)->pp_model);
 
 #ifndef SERVER
-  fprintf( logstream, "local log: cachemodel deleted\n");
+    fprintf(logstream, "local log: cachemodel deleted\n");
 #endif
-  opj_free( *cachemodel);
+    opj_free(*cachemodel);
 }
 
-OPJ_BOOL is_allsent( cachemodel_param_t cachemodel)
+OPJ_BOOL is_allsent(cachemodel_param_t cachemodel)
 {
-  target_param_t *target;
-  Byte8_t TPnum; /* num of tile parts in each tile */
-  Byte8_t Pmax; /* max num of packets per tile */
-  Byte8_t i, j, k;
-  int n; /* FIXME: is this large enough ? */
-
-  target = cachemodel.target;
-  
-  if( !cachemodel.mhead_model)
-    return OPJ_FALSE;
-
-  TPnum = get_nmax( target->codeidx->tilepart);
-
-  if( cachemodel.jppstream){
-    for( i=0; i<target->codeidx->SIZ.XTnum*target->codeidx->SIZ.YTnum; i++){
-      if( !cachemodel.th_model[i])
-       return OPJ_FALSE;
-      
-      for( j=0; j<target->codeidx->SIZ.Csiz; j++){
-       Pmax = get_nmax( target->codeidx->precpacket[j]);
-       for( k=0; k<Pmax; k++)
-         if( !cachemodel.pp_model[j][i*Pmax+k])
-           return OPJ_FALSE;
-      }
+    target_param_t *target;
+    Byte8_t TPnum; /* num of tile parts in each tile */
+    Byte8_t Pmax; /* max num of packets per tile */
+    Byte8_t i, j, k;
+    int n; /* FIXME: is this large enough ? */
+
+    target = cachemodel.target;
+
+    if (!cachemodel.mhead_model) {
+        return OPJ_FALSE;
+    }
+
+    TPnum = get_nmax(target->codeidx->tilepart);
+
+    if (cachemodel.jppstream) {
+        for (i = 0; i < target->codeidx->SIZ.XTnum * target->codeidx->SIZ.YTnum; i++) {
+            if (!cachemodel.th_model[i]) {
+                return OPJ_FALSE;
+            }
+
+            for (j = 0; j < target->codeidx->SIZ.Csiz; j++) {
+                Pmax = get_nmax(target->codeidx->precpacket[j]);
+                for (k = 0; k < Pmax; k++)
+                    if (!cachemodel.pp_model[j][i * Pmax + k]) {
+                        return OPJ_FALSE;
+                    }
+            }
+        }
+        return OPJ_TRUE;
+    } else {
+        for (i = 0, n = 0; i < target->codeidx->SIZ.YTnum; i++)
+            for (j = 0; j < target->codeidx->SIZ.XTnum; j++)
+                for (k = 0; k < TPnum; k++)
+                    if (!cachemodel.tp_model[n++]) {
+                        return OPJ_FALSE;
+                    }
+        return OPJ_TRUE;
     }
-    return OPJ_TRUE;
-  }
-  else{
-    for( i=0, n=0; i<target->codeidx->SIZ.YTnum; i++)
-      for( j=0; j<target->codeidx->SIZ.XTnum; j++)
-       for( k=0; k<TPnum; k++)
-         if( !cachemodel.tp_model[n++])
-           return OPJ_FALSE;
-    return OPJ_TRUE;
-  }
 }
index b4344b928131a1b1e3fc46beec783352b5a6ab6a..69a56f23dbf290aa95e4b9b86c08d15e73649c0f 100644 (file)
 
 channellist_param_t * gene_channellist(void)
 {
-  channellist_param_t *channellist;
+    channellist_param_t *channellist;
 
-  channellist = (channellist_param_t *)opj_malloc( sizeof(channellist_param_t));
-  
-  channellist->first = NULL;
-  channellist->last  = NULL;
+    channellist = (channellist_param_t *)opj_malloc(sizeof(channellist_param_t));
 
-  return channellist;
+    channellist->first = NULL;
+    channellist->last  = NULL;
+
+    return channellist;
 }
 
-channel_param_t * gene_channel( query_param_t query_param, auxtrans_param_t auxtrans, cachemodel_param_t *cachemodel, channellist_param_t *channellist)
+channel_param_t * gene_channel(query_param_t query_param,
+                               auxtrans_param_t auxtrans, cachemodel_param_t *cachemodel,
+                               channellist_param_t *channellist)
 {
-  channel_param_t *channel;
-  const char transport[4][10] = { "non", "http", "http-tcp", "http-udp"};
-  
-  if( !cachemodel){
-    fprintf( FCGI_stdout, "Status: 404\r\n"); 
-    fprintf( FCGI_stdout, "Reason: cnew cancelled\r\n"); 
-    return NULL;
-  }
-
-  channel = (channel_param_t *)opj_malloc( sizeof(channel_param_t));
-  channel->cachemodel = cachemodel;
-
-  /* set channel ID and get present time */
-  snprintf( channel->cid, MAX_LENOFCID, "%x%x", (unsigned int)time( &channel->start_tm), (unsigned int)rand());
-  
-  channel->aux = query_param.cnew;
-  
-  /* only tcp implemented for now */
-  if( channel->aux == udp)
-    channel->aux = tcp;
-  
-  channel->next=NULL;
-
-  set_channel_variable_param( query_param, channel);
-
-  if( channellist->first != NULL)
-    channellist->last->next = channel;
-  else
-    channellist->first = channel;
-  channellist->last = channel;
-  
-  fprintf( FCGI_stdout, "JPIP-cnew: cid=%s", channel->cid);
-  fprintf( FCGI_stdout, ",transport=%s", transport[channel->aux]);
-  
-  if( channel->aux == tcp || channel->aux == udp)
-    fprintf( FCGI_stdout, ",auxport=%d", channel->aux==tcp ? auxtrans.tcpauxport : auxtrans.udpauxport);
-
-  fprintf( FCGI_stdout, "\r\n");
-
-  return channel;
+    channel_param_t *channel;
+    const char transport[4][10] = { "non", "http", "http-tcp", "http-udp"};
+
+    if (!cachemodel) {
+        fprintf(FCGI_stdout, "Status: 404\r\n");
+        fprintf(FCGI_stdout, "Reason: cnew cancelled\r\n");
+        return NULL;
+    }
+
+    channel = (channel_param_t *)opj_malloc(sizeof(channel_param_t));
+    channel->cachemodel = cachemodel;
+
+    /* set channel ID and get present time */
+    snprintf(channel->cid, MAX_LENOFCID, "%x%x",
+             (unsigned int)time(&channel->start_tm), (unsigned int)rand());
+
+    channel->aux = query_param.cnew;
+
+    /* only tcp implemented for now */
+    if (channel->aux == udp) {
+        channel->aux = tcp;
+    }
+
+    channel->next = NULL;
+
+    set_channel_variable_param(query_param, channel);
+
+    if (channellist->first != NULL) {
+        channellist->last->next = channel;
+    } else {
+        channellist->first = channel;
+    }
+    channellist->last = channel;
+
+    fprintf(FCGI_stdout, "JPIP-cnew: cid=%s", channel->cid);
+    fprintf(FCGI_stdout, ",transport=%s", transport[channel->aux]);
+
+    if (channel->aux == tcp || channel->aux == udp) {
+        fprintf(FCGI_stdout, ",auxport=%d",
+                channel->aux == tcp ? auxtrans.tcpauxport : auxtrans.udpauxport);
+    }
+
+    fprintf(FCGI_stdout, "\r\n");
+
+    return channel;
 }
 
 
-void set_channel_variable_param( query_param_t query_param, channel_param_t *channel)
+void set_channel_variable_param(query_param_t query_param,
+                                channel_param_t *channel)
 {
-  /* set roi information */
-  (void)query_param;
-  (void)channel;
+    /* set roi information */
+    (void)query_param;
+    (void)channel;
 }
 
 
-void delete_channel( channel_param_t **channel, channellist_param_t *channellist)
+void delete_channel(channel_param_t **channel, channellist_param_t *channellist)
 {
-  channel_param_t *ptr;
+    channel_param_t *ptr;
 
-  if( *channel == channellist->first)
-    channellist->first = (*channel)->next;
-  else{
-    ptr = channellist->first;
-    while( ptr->next != *channel){
-      ptr=ptr->next;
+    if (*channel == channellist->first) {
+        channellist->first = (*channel)->next;
+    } else {
+        ptr = channellist->first;
+        while (ptr->next != *channel) {
+            ptr = ptr->next;
+        }
+
+        ptr->next = (*channel)->next;
+
+        if (*channel == channellist->last) {
+            channellist->last = ptr;
+        }
     }
-    
-    ptr->next = (*channel)->next;
-    
-    if( *channel == channellist->last)
-      channellist->last = ptr;
-  }
 #ifndef SERVER
-  fprintf( logstream, "local log: channel: %s deleted\n", (*channel)->cid);
+    fprintf(logstream, "local log: channel: %s deleted\n", (*channel)->cid);
 #endif
-  opj_free(*channel);
+    opj_free(*channel);
 }
 
-void delete_channellist( channellist_param_t **channellist)
+void delete_channellist(channellist_param_t **channellist)
 {
-  channel_param_t *channelPtr, *channelNext;
-    
-  channelPtr = (*channellist)->first;
-  while( channelPtr != NULL){
-    channelNext=channelPtr->next;
+    channel_param_t *channelPtr, *channelNext;
+
+    channelPtr = (*channellist)->first;
+    while (channelPtr != NULL) {
+        channelNext = channelPtr->next;
 #ifndef SERVER
-      fprintf( logstream, "local log: channel %s deleted!\n", channelPtr->cid);
+        fprintf(logstream, "local log: channel %s deleted!\n", channelPtr->cid);
 #endif
-      opj_free(channelPtr);
-      channelPtr=channelNext;
-  }
-  opj_free( *channellist);
+        opj_free(channelPtr);
+        channelPtr = channelNext;
+    }
+    opj_free(*channellist);
 }
 
-void print_allchannel( channellist_param_t *channellist)
+void print_allchannel(channellist_param_t *channellist)
 {
-  channel_param_t *ptr;
+    channel_param_t *ptr;
 
-  ptr = channellist->first;
-  while( ptr != NULL){
-    fprintf( logstream,"channel-ID=%s \t target=%s\n", ptr->cid, ptr->cachemodel->target->targetname);
-    ptr=ptr->next;
-  }
+    ptr = channellist->first;
+    while (ptr != NULL) {
+        fprintf(logstream, "channel-ID=%s \t target=%s\n", ptr->cid,
+                ptr->cachemodel->target->targetname);
+        ptr = ptr->next;
+    }
 }
 
-channel_param_t * search_channel( const char cid[], channellist_param_t *channellist)
+channel_param_t * search_channel(const char cid[],
+                                 channellist_param_t *channellist)
 {
-  channel_param_t *foundchannel;
-
-  foundchannel = channellist->first;
-  
-  while( foundchannel != NULL){
-    
-    if( strcmp( cid, foundchannel->cid) == 0)
-      return foundchannel;
-      
-    foundchannel = foundchannel->next;
-  }
-  fprintf( FCGI_stdout, "Status: 503\r\n");
-  fprintf( FCGI_stdout, "Reason: Channel %s not found in this session\r\n", cid); 
-
-  return NULL;
+    channel_param_t *foundchannel;
+
+    foundchannel = channellist->first;
+
+    while (foundchannel != NULL) {
+
+        if (strcmp(cid, foundchannel->cid) == 0) {
+            return foundchannel;
+        }
+
+        foundchannel = foundchannel->next;
+    }
+    fprintf(FCGI_stdout, "Status: 503\r\n");
+    fprintf(FCGI_stdout, "Reason: Channel %s not found in this session\r\n", cid);
+
+    return NULL;
 }
index 47440a4f53929d74a49f3d573cb1cf24fb1e3b91..76a1a34ff9638c1dab718c4943c6068832d41f45 100644 (file)
 #define logstream stderr
 #endif /*SERVER */
 
-codestream_param_t set_codestream( int fd, OPJ_OFF_T offset, OPJ_SIZE_T length)
+codestream_param_t set_codestream(int fd, OPJ_OFF_T offset, OPJ_SIZE_T length)
 {
-  codestream_param_t cs;
+    codestream_param_t cs;
 
-  cs.fd = fd;
-  cs.offset = offset;
-  cs.length = length;
+    cs.fd = fd;
+    cs.offset = offset;
+    cs.length = length;
 
-  return cs;
+    return cs;
 }
 
-Byte_t * fetch_codestreambytes( codestream_param_t *cs, OPJ_OFF_T offset, OPJ_SIZE_T size)
+Byte_t * fetch_codestreambytes(codestream_param_t *cs, OPJ_OFF_T offset,
+                               OPJ_SIZE_T size)
 {
-  return fetch_bytes( cs->fd, cs->offset+offset, size);
+    return fetch_bytes(cs->fd, cs->offset + offset, size);
 }
 
-Byte_t fetch_codestream1byte( codestream_param_t *cs, OPJ_OFF_T offset)
+Byte_t fetch_codestream1byte(codestream_param_t *cs, OPJ_OFF_T offset)
 {
-  return fetch_1byte( cs->fd, cs->offset+offset);
+    return fetch_1byte(cs->fd, cs->offset + offset);
 }
 
-Byte2_t fetch_codestream2bytebigendian( codestream_param_t *cs, OPJ_OFF_T offset)
+Byte2_t fetch_codestream2bytebigendian(codestream_param_t *cs, OPJ_OFF_T offset)
 {
-  return fetch_2bytebigendian( cs->fd, cs->offset+offset);
+    return fetch_2bytebigendian(cs->fd, cs->offset + offset);
 }
 
-Byte4_t fetch_codestream4bytebigendian( codestream_param_t *cs, OPJ_OFF_T offset)
+Byte4_t fetch_codestream4bytebigendian(codestream_param_t *cs, OPJ_OFF_T offset)
 {
-  return fetch_4bytebigendian( cs->fd, cs->offset+offset);
+    return fetch_4bytebigendian(cs->fd, cs->offset + offset);
 }
 
-void print_codestream( codestream_param_t cs)
+void print_codestream(codestream_param_t cs)
 {
-  fprintf( logstream, "codestream info:\n"
-          "\t fd: %d\n"
-          "\t offset: %#" PRIx64 "\n"
-          "\t length: %#" PRIx64 "\n", cs.fd, cs.offset, cs.length);
+    fprintf(logstream, "codestream info:\n"
+            "\t fd: %d\n"
+            "\t offset: %#" PRIx64 "\n"
+            "\t length: %#" PRIx64 "\n", cs.fd, cs.offset, cs.length);
 }
index 693651e3763afc12b4a0b1a78676ce08b3263c63..c257255a9c1bbb9d138358a51d6487919c092ba6 100644 (file)
 #include "jp2k_encoder.h"
 #include "opj_inttypes.h"
 
-void handle_JPIPstreamMSG( SOCKET connected_socket, cachelist_param_t *cachelist,
-                          Byte_t **jpipstream, OPJ_SIZE_T *streamlen, msgqueue_param_t *msgqueue)
+void handle_JPIPstreamMSG(SOCKET connected_socket, cachelist_param_t *cachelist,
+                          Byte_t **jpipstream, OPJ_SIZE_T *streamlen, msgqueue_param_t *msgqueue)
 {
-  Byte_t *newjpipstream;
-  OPJ_SIZE_T newstreamlen = 0;
-  cache_param_t *cache;
-  char *target, *tid, *cid;
-  metadatalist_param_t *metadatalist;
-  
-  newjpipstream = receive_JPIPstream( connected_socket, &target, &tid, &cid, &newstreamlen);
-
-  fprintf( stderr, "newjpipstream length: %" PRIu64 "\n", newstreamlen);
-  
-  parse_JPIPstream( newjpipstream, newstreamlen, (OPJ_OFF_T)*streamlen, msgqueue);
-
-  *jpipstream = update_JPIPstream( newjpipstream, newstreamlen, *jpipstream, streamlen);
-  opj_free( newjpipstream);
-
-  metadatalist = gene_metadatalist();
-  parse_metamsg( msgqueue, *jpipstream, *streamlen, metadatalist);
-
-  assert( msgqueue->last );
-  assert( msgqueue->last->csn < INT_MAX );
-  /* cid registration*/
-  if( target != NULL){
-    if((cache = search_cache( target, cachelist))){
-      if( tid != NULL)
-       update_cachetid( tid, cache);
-      if( cid != NULL)
-       add_cachecid( cid, cache);
+    Byte_t *newjpipstream;
+    OPJ_SIZE_T newstreamlen = 0;
+    cache_param_t *cache;
+    char *target, *tid, *cid;
+    metadatalist_param_t *metadatalist;
+
+    newjpipstream = receive_JPIPstream(connected_socket, &target, &tid, &cid,
+                                       &newstreamlen);
+
+    fprintf(stderr, "newjpipstream length: %" PRIu64 "\n", newstreamlen);
+
+    parse_JPIPstream(newjpipstream, newstreamlen, (OPJ_OFF_T)*streamlen, msgqueue);
+
+    *jpipstream = update_JPIPstream(newjpipstream, newstreamlen, *jpipstream,
+                                    streamlen);
+    opj_free(newjpipstream);
+
+    metadatalist = gene_metadatalist();
+    parse_metamsg(msgqueue, *jpipstream, *streamlen, metadatalist);
+
+    assert(msgqueue->last);
+    assert(msgqueue->last->csn < INT_MAX);
+    /* cid registration*/
+    if (target != NULL) {
+        if ((cache = search_cache(target, cachelist))) {
+            if (tid != NULL) {
+                update_cachetid(tid, cache);
+            }
+            if (cid != NULL) {
+                add_cachecid(cid, cache);
+            }
+        } else {
+            cache = gene_cache(target, (int)msgqueue->last->csn, tid, cid);
+            insert_cache_into_list(cache, cachelist);
+        }
+    } else {
+        cache = search_cacheBycsn((int)msgqueue->last->csn, cachelist);
     }
-    else{
-      cache = gene_cache( target, (int)msgqueue->last->csn, tid, cid);
-      insert_cache_into_list( cache, cachelist);
-    }
-  }
-  else
-    cache = search_cacheBycsn( (int)msgqueue->last->csn, cachelist);
 
-  if( cache->metadatalist)
-    delete_metadatalist( &cache->metadatalist);
-  cache->metadatalist = metadatalist;
+    if (cache->metadatalist) {
+        delete_metadatalist(&cache->metadatalist);
+    }
+    cache->metadatalist = metadatalist;
 
-  if( target)    opj_free( target);
-  if( tid)    opj_free( tid);
-  if( cid)    opj_free( cid);
+    if (target) {
+        opj_free(target);
+    }
+    if (tid) {
+        opj_free(tid);
+    }
+    if (cid) {
+        opj_free(cid);
+    }
 
-  response_signal( connected_socket, OPJ_TRUE);
+    response_signal(connected_socket, OPJ_TRUE);
 }
 
-void handle_PNMreqMSG( SOCKET connected_socket, Byte_t *jpipstream, msgqueue_param_t *msgqueue, cachelist_param_t *cachelist)
+void handle_PNMreqMSG(SOCKET connected_socket, Byte_t *jpipstream,
+                      msgqueue_param_t *msgqueue, cachelist_param_t *cachelist)
 {
-  Byte_t *pnmstream;
-  ihdrbox_param_t *ihdrbox;
-  char *CIDorTID, tmp[10];
-  cache_param_t *cache;
-  int fw, fh;
-  int maxval;
-  
-  CIDorTID = receive_string( connected_socket);
-  
-  if(!(cache = search_cacheBycid( CIDorTID, cachelist)))
-    if(!(cache = search_cacheBytid( CIDorTID, cachelist))){
-      opj_free( CIDorTID);
-      return;
-    }
-  
-  opj_free( CIDorTID);
+    Byte_t *pnmstream;
+    ihdrbox_param_t *ihdrbox;
+    char *CIDorTID, tmp[10];
+    cache_param_t *cache;
+    int fw, fh;
+    int maxval;
+
+    CIDorTID = receive_string(connected_socket);
+
+    if (!(cache = search_cacheBycid(CIDorTID, cachelist)))
+        if (!(cache = search_cacheBytid(CIDorTID, cachelist))) {
+            opj_free(CIDorTID);
+            return;
+        }
+
+    opj_free(CIDorTID);
 
-  receive_line( connected_socket, tmp);
-  fw = atoi( tmp);
+    receive_line(connected_socket, tmp);
+    fw = atoi(tmp);
 
-  receive_line( connected_socket, tmp);
-  fh = atoi( tmp);
+    receive_line(connected_socket, tmp);
+    fh = atoi(tmp);
 
-  ihdrbox = NULL;
-  assert( cache->csn >= 0 );
-  pnmstream = jpipstream_to_pnm( jpipstream, msgqueue, (Byte8_t)cache->csn, fw, fh, &ihdrbox);
+    ihdrbox = NULL;
+    assert(cache->csn >= 0);
+    pnmstream = jpipstream_to_pnm(jpipstream, msgqueue, (Byte8_t)cache->csn, fw, fh,
+                                  &ihdrbox);
 
-  maxval = ihdrbox->bpc > 8 ? 255 : (1 << ihdrbox->bpc) - 1;
-  send_PNMstream( connected_socket, pnmstream, ihdrbox->width, ihdrbox->height, ihdrbox->nc, (Byte_t)maxval );
+    maxval = ihdrbox->bpc > 8 ? 255 : (1 << ihdrbox->bpc) - 1;
+    send_PNMstream(connected_socket, pnmstream, ihdrbox->width, ihdrbox->height,
+                   ihdrbox->nc, (Byte_t)maxval);
 
-  opj_free( ihdrbox);
-  opj_free( pnmstream);
+    opj_free(ihdrbox);
+    opj_free(pnmstream);
 }
 
-void handle_XMLreqMSG( SOCKET connected_socket, Byte_t *jpipstream, cachelist_param_t *cachelist)
+void handle_XMLreqMSG(SOCKET connected_socket, Byte_t *jpipstream,
+                      cachelist_param_t *cachelist)
 {
-  char *cid;
-  cache_param_t *cache;
-  boxcontents_param_t *boxcontents;
-  Byte_t *xmlstream;
-
-  cid = receive_string( connected_socket);
-
-  if(!(cache = search_cacheBycid( cid, cachelist))){
-    opj_free( cid);
-    return;
-  }
-
-  opj_free( cid);
-  
-  boxcontents = cache->metadatalist->last->boxcontents;
-  xmlstream = (Byte_t *)opj_malloc( boxcontents->length);
-  memcpy( xmlstream, jpipstream+boxcontents->offset, boxcontents->length);
-  send_XMLstream( connected_socket, xmlstream, boxcontents->length);
-  opj_free( xmlstream);
+    char *cid;
+    cache_param_t *cache;
+    boxcontents_param_t *boxcontents;
+    Byte_t *xmlstream;
+
+    cid = receive_string(connected_socket);
+
+    if (!(cache = search_cacheBycid(cid, cachelist))) {
+        opj_free(cid);
+        return;
+    }
+
+    opj_free(cid);
+
+    boxcontents = cache->metadatalist->last->boxcontents;
+    xmlstream = (Byte_t *)opj_malloc(boxcontents->length);
+    memcpy(xmlstream, jpipstream + boxcontents->offset, boxcontents->length);
+    send_XMLstream(connected_socket, xmlstream, boxcontents->length);
+    opj_free(xmlstream);
 }
 
-void handle_TIDreqMSG( SOCKET connected_socket, cachelist_param_t *cachelist)
+void handle_TIDreqMSG(SOCKET connected_socket, cachelist_param_t *cachelist)
 {
-  char *target, *tid = NULL;
-  cache_param_t *cache;
-  OPJ_SIZE_T tidlen = 0;
-
-  target = receive_string( connected_socket);
-  cache = search_cache( target, cachelist);
-
-  opj_free( target);
-  
-  if( cache){
-    tid = cache->tid;
-    tidlen = strlen(tid);
-  }
-  send_TIDstream( connected_socket, tid, tidlen);
+    char *target, *tid = NULL;
+    cache_param_t *cache;
+    OPJ_SIZE_T tidlen = 0;
+
+    target = receive_string(connected_socket);
+    cache = search_cache(target, cachelist);
+
+    opj_free(target);
+
+    if (cache) {
+        tid = cache->tid;
+        tidlen = strlen(tid);
+    }
+    send_TIDstream(connected_socket, tid, tidlen);
 }
 
-void handle_CIDreqMSG( SOCKET connected_socket, cachelist_param_t *cachelist)
+void handle_CIDreqMSG(SOCKET connected_socket, cachelist_param_t *cachelist)
 {
-  char *target, *cid = NULL;
-  cache_param_t *cache;
-  OPJ_SIZE_T cidlen = 0;
-
-  target = receive_string( connected_socket);
-  cache = search_cache( target, cachelist);
-  
-  opj_free( target);
-
-  if( cache){
-    if( cache->numOfcid > 0){
-      cid = cache->cid[ cache->numOfcid-1];
-      cidlen = strlen(cid);
+    char *target, *cid = NULL;
+    cache_param_t *cache;
+    OPJ_SIZE_T cidlen = 0;
+
+    target = receive_string(connected_socket);
+    cache = search_cache(target, cachelist);
+
+    opj_free(target);
+
+    if (cache) {
+        if (cache->numOfcid > 0) {
+            cid = cache->cid[ cache->numOfcid - 1];
+            cidlen = strlen(cid);
+        }
     }
-  }
-  send_CIDstream( connected_socket, cid, cidlen);
+    send_CIDstream(connected_socket, cid, cidlen);
 }
 
-void handle_dstCIDreqMSG( SOCKET connected_socket, cachelist_param_t *cachelist)
+void handle_dstCIDreqMSG(SOCKET connected_socket, cachelist_param_t *cachelist)
 {
-  char *cid;
+    char *cid;
 
-  cid = receive_string( connected_socket);
-  remove_cachecid( cid, cachelist);
-  response_signal( connected_socket, OPJ_TRUE);
-  
-  opj_free( cid);
+    cid = receive_string(connected_socket);
+    remove_cachecid(cid, cachelist);
+    response_signal(connected_socket, OPJ_TRUE);
+
+    opj_free(cid);
 }
 
-void handle_SIZreqMSG( SOCKET connected_socket, Byte_t *jpipstream, msgqueue_param_t *msgqueue, cachelist_param_t *cachelist)
+void handle_SIZreqMSG(SOCKET connected_socket, Byte_t *jpipstream,
+                      msgqueue_param_t *msgqueue, cachelist_param_t *cachelist)
 {
-  char *tid, *cid;
-  cache_param_t *cache;
-  Byte4_t width, height;
-  
-  tid = receive_string( connected_socket);
-  cid = receive_string( connected_socket);
-  
-  cache = NULL;
-
-  if( tid[0] != '0')
-    cache = search_cacheBytid( tid, cachelist);
-  
-  if( !cache && cid[0] != '0')
-    cache = search_cacheBycid( cid, cachelist);
-
-  opj_free( tid);
-  opj_free( cid);
-  
-  width = height = 0;
-  if( cache){
-    assert( cache->csn >= 0);
-    if( !cache->ihdrbox)
-      cache->ihdrbox = get_SIZ_from_jpipstream( jpipstream, msgqueue, (Byte8_t)cache->csn);
-    width  = cache->ihdrbox->width;
-    height = cache->ihdrbox->height;
-  }
-  send_SIZstream( connected_socket, width, height);
+    char *tid, *cid;
+    cache_param_t *cache;
+    Byte4_t width, height;
+
+    tid = receive_string(connected_socket);
+    cid = receive_string(connected_socket);
+
+    cache = NULL;
+
+    if (tid[0] != '0') {
+        cache = search_cacheBytid(tid, cachelist);
+    }
+
+    if (!cache && cid[0] != '0') {
+        cache = search_cacheBycid(cid, cachelist);
+    }
+
+    opj_free(tid);
+    opj_free(cid);
+
+    width = height = 0;
+    if (cache) {
+        assert(cache->csn >= 0);
+        if (!cache->ihdrbox) {
+            cache->ihdrbox = get_SIZ_from_jpipstream(jpipstream, msgqueue,
+                             (Byte8_t)cache->csn);
+        }
+        width  = cache->ihdrbox->width;
+        height = cache->ihdrbox->height;
+    }
+    send_SIZstream(connected_socket, width, height);
 }
 
-void handle_JP2saveMSG( SOCKET connected_socket, cachelist_param_t *cachelist, msgqueue_param_t *msgqueue, Byte_t *jpipstream)
+void handle_JP2saveMSG(SOCKET connected_socket, cachelist_param_t *cachelist,
+                       msgqueue_param_t *msgqueue, Byte_t *jpipstream)
 {
-  char *cid;
-  cache_param_t *cache;
-  Byte_t *jp2stream;
-  Byte8_t jp2len;
-
-  cid = receive_string( connected_socket);
-  if(!(cache = search_cacheBycid( cid, cachelist))){
-    opj_free( cid);
-    return;
-  }
-  
-  opj_free( cid);
-  
-  assert( cache->csn >= 0);
-  jp2stream = recons_jp2( msgqueue, jpipstream, (Byte8_t)cache->csn, &jp2len);
-
-  if( jp2stream){
-    save_codestream( jp2stream, jp2len, "jp2");
-    opj_free( jp2stream);
-  }
+    char *cid;
+    cache_param_t *cache;
+    Byte_t *jp2stream;
+    Byte8_t jp2len;
+
+    cid = receive_string(connected_socket);
+    if (!(cache = search_cacheBycid(cid, cachelist))) {
+        opj_free(cid);
+        return;
+    }
+
+    opj_free(cid);
+
+    assert(cache->csn >= 0);
+    jp2stream = recons_jp2(msgqueue, jpipstream, (Byte8_t)cache->csn, &jp2len);
+
+    if (jp2stream) {
+        save_codestream(jp2stream, jp2len, "jp2");
+        opj_free(jp2stream);
+    }
 }
index 714773c2f4d5ac08acdfd1264c808dc3200267ed..d0b410a25c0687d0cce6493b4b4ad07cdd27e4fc 100644 (file)
 #define logstream stderr
 #endif /*SERVER*/
 
-faixbox_param_t * gene_faixbox( box_param_t *box)
+faixbox_param_t * gene_faixbox(box_param_t *box)
 {
-  faixbox_param_t *faix;
-  size_t numOfelem;
-  long pos = 0;
-
-  faix = ( faixbox_param_t *)malloc( sizeof(faixbox_param_t));
-  
-  faix->version = fetch_DBox1byte( box, (pos+=1)-1);
-  
-  if( 3< faix->version){
-    fprintf( FCGI_stderr, "Error: version %d in faix box is reserved for ISO use.\n", faix->version);
-    free(faix);
-    return NULL;
-  }
-
-  if( faix->version%2){
-    subfaixbox8_param_t *subfaixbox;
-    size_t i;
-    
-    faix->subfaixbox.byte8_params = (subfaixbox8_param_t *)malloc( sizeof(subfaixbox8_param_t));
-    
-    subfaixbox = faix->subfaixbox.byte8_params;
-    subfaixbox->nmax = fetch_DBox8bytebigendian( box, (pos+=8)-8);
-    subfaixbox->m    = fetch_DBox8bytebigendian( box, (pos+=8)-8);
-    
-    numOfelem = subfaixbox->nmax*subfaixbox->m;
-    
-    subfaixbox->elem = ( faixelem8_param_t *)malloc( numOfelem*sizeof(faixelem8_param_t));
-    
-    if( faix->version == 3)
-      subfaixbox->aux = ( Byte4_t *)malloc( numOfelem*sizeof(Byte4_t));
-    
-    for( i=0; i<numOfelem; i++){
-      subfaixbox->elem[i].off = fetch_DBox8bytebigendian( box, (pos+=8)-8);
-      subfaixbox->elem[i].len = fetch_DBox8bytebigendian( box, (pos+=8)-8);
-      if( faix->version == 3)
-       subfaixbox->aux[i] = fetch_DBox4bytebigendian( box, (pos+=4)-4);
+    faixbox_param_t *faix;
+    size_t numOfelem;
+    long pos = 0;
+
+    faix = (faixbox_param_t *)malloc(sizeof(faixbox_param_t));
+
+    faix->version = fetch_DBox1byte(box, (pos += 1) - 1);
+
+    if (3 < faix->version) {
+        fprintf(FCGI_stderr, "Error: version %d in faix box is reserved for ISO use.\n",
+                faix->version);
+        free(faix);
+        return NULL;
     }
-  }
-  else{
-    subfaixbox4_param_t *subfaixbox;
-    size_t i;
-
-    faix->subfaixbox.byte4_params = (subfaixbox4_param_t *)malloc( sizeof(subfaixbox4_param_t));
-    
-    subfaixbox = faix->subfaixbox.byte4_params;
-    subfaixbox->nmax = fetch_DBox4bytebigendian( box, (pos+=4)-4);
-    subfaixbox->m    = fetch_DBox4bytebigendian( box, (pos+=4)-4);
-    
-    numOfelem = subfaixbox->nmax*subfaixbox->m;
-    
-    subfaixbox->elem = ( faixelem4_param_t *)malloc( numOfelem*sizeof(faixelem4_param_t));
-    
-    if( faix->version == 2)
-      subfaixbox->aux = ( Byte4_t *)malloc( numOfelem*sizeof(Byte4_t));
-    
-    for( i=0; i<numOfelem; i++){
-      subfaixbox->elem[i].off = fetch_DBox4bytebigendian( box, (pos+=4)-4);
-      subfaixbox->elem[i].len = fetch_DBox4bytebigendian( box, (pos+=4)-4);
-      if( faix->version == 2)
-       subfaixbox->aux[i] = fetch_DBox4bytebigendian( box, (pos+=4)-4);
+
+    if (faix->version % 2) {
+        subfaixbox8_param_t *subfaixbox;
+        size_t i;
+
+        faix->subfaixbox.byte8_params = (subfaixbox8_param_t *)malloc(sizeof(
+                                            subfaixbox8_param_t));
+
+        subfaixbox = faix->subfaixbox.byte8_params;
+        subfaixbox->nmax = fetch_DBox8bytebigendian(box, (pos += 8) - 8);
+        subfaixbox->m    = fetch_DBox8bytebigendian(box, (pos += 8) - 8);
+
+        numOfelem = subfaixbox->nmax * subfaixbox->m;
+
+        subfaixbox->elem = (faixelem8_param_t *)malloc(numOfelem * sizeof(
+                               faixelem8_param_t));
+
+        if (faix->version == 3) {
+            subfaixbox->aux = (Byte4_t *)malloc(numOfelem * sizeof(Byte4_t));
+        }
+
+        for (i = 0; i < numOfelem; i++) {
+            subfaixbox->elem[i].off = fetch_DBox8bytebigendian(box, (pos += 8) - 8);
+            subfaixbox->elem[i].len = fetch_DBox8bytebigendian(box, (pos += 8) - 8);
+            if (faix->version == 3) {
+                subfaixbox->aux[i] = fetch_DBox4bytebigendian(box, (pos += 4) - 4);
+            }
+        }
+    } else {
+        subfaixbox4_param_t *subfaixbox;
+        size_t i;
+
+        faix->subfaixbox.byte4_params = (subfaixbox4_param_t *)malloc(sizeof(
+                                            subfaixbox4_param_t));
+
+        subfaixbox = faix->subfaixbox.byte4_params;
+        subfaixbox->nmax = fetch_DBox4bytebigendian(box, (pos += 4) - 4);
+        subfaixbox->m    = fetch_DBox4bytebigendian(box, (pos += 4) - 4);
+
+        numOfelem = subfaixbox->nmax * subfaixbox->m;
+
+        subfaixbox->elem = (faixelem4_param_t *)malloc(numOfelem * sizeof(
+                               faixelem4_param_t));
+
+        if (faix->version == 2) {
+            subfaixbox->aux = (Byte4_t *)malloc(numOfelem * sizeof(Byte4_t));
+        }
+
+        for (i = 0; i < numOfelem; i++) {
+            subfaixbox->elem[i].off = fetch_DBox4bytebigendian(box, (pos += 4) - 4);
+            subfaixbox->elem[i].len = fetch_DBox4bytebigendian(box, (pos += 4) - 4);
+            if (faix->version == 2) {
+                subfaixbox->aux[i] = fetch_DBox4bytebigendian(box, (pos += 4) - 4);
+            }
+        }
     }
-  }
-  return faix;
+    return faix;
 }
 
-void print_faixbox( faixbox_param_t *faix)
+void print_faixbox(faixbox_param_t *faix)
 {
-  Byte8_t i, j;
-
-  fprintf( logstream, "faix box info\n");
-  fprintf( logstream, "\tversion: %d\n", faix->version);
-  
-  fprintf( logstream, "\t nmax: %#" PRIx64 " = %" PRId64 "\n", get_nmax( faix), get_nmax( faix));
-  fprintf( logstream, "\t m: %#" PRIx64 " = %" PRId64 "\n", get_m( faix), get_m( faix));
-
-  for( i=0; i<get_m( faix); i++){
-    for( j=0; j<get_nmax( faix); j++){
-      fprintf( logstream, "\t off = %#" PRIx64 ", len = %#" PRIx64 "", get_elemOff( faix, j, i), get_elemLen( faix, j, i));
-      if( 2 <= faix->version)
-       fprintf( logstream, ", aux = %#x", get_elemAux( faix, j, i));
-      fprintf( logstream, "\n");
+    Byte8_t i, j;
+
+    fprintf(logstream, "faix box info\n");
+    fprintf(logstream, "\tversion: %d\n", faix->version);
+
+    fprintf(logstream, "\t nmax: %#" PRIx64 " = %" PRId64 "\n", get_nmax(faix),
+            get_nmax(faix));
+    fprintf(logstream, "\t m: %#" PRIx64 " = %" PRId64 "\n", get_m(faix),
+            get_m(faix));
+
+    for (i = 0; i < get_m(faix); i++) {
+        for (j = 0; j < get_nmax(faix); j++) {
+            fprintf(logstream, "\t off = %#" PRIx64 ", len = %#" PRIx64 "",
+                    get_elemOff(faix, j, i), get_elemLen(faix, j, i));
+            if (2 <= faix->version) {
+                fprintf(logstream, ", aux = %#x", get_elemAux(faix, j, i));
+            }
+            fprintf(logstream, "\n");
+        }
+        fprintf(logstream, "\n");
     }
-    fprintf( logstream, "\n");
-  }
 }
 
-void delete_faixbox( faixbox_param_t **faix)
+void delete_faixbox(faixbox_param_t **faix)
 {
-  if((*faix)->version%2){
-    free((*faix)->subfaixbox.byte8_params->elem);
-    if( (*faix)->version == 3)
-      free((*faix)->subfaixbox.byte8_params->aux);
-    free((*faix)->subfaixbox.byte8_params);
-  }
-  else{
-    free((*faix)->subfaixbox.byte4_params->elem);
-    if( (*faix)->version == 2)
-      free((*faix)->subfaixbox.byte4_params->aux);
-    free((*faix)->subfaixbox.byte4_params);
-  }
-  free( *faix);
+    if ((*faix)->version % 2) {
+        free((*faix)->subfaixbox.byte8_params->elem);
+        if ((*faix)->version == 3) {
+            free((*faix)->subfaixbox.byte8_params->aux);
+        }
+        free((*faix)->subfaixbox.byte8_params);
+    } else {
+        free((*faix)->subfaixbox.byte4_params->elem);
+        if ((*faix)->version == 2) {
+            free((*faix)->subfaixbox.byte4_params->aux);
+        }
+        free((*faix)->subfaixbox.byte4_params);
+    }
+    free(*faix);
 }
 
-Byte8_t get_nmax( faixbox_param_t *faix)
+Byte8_t get_nmax(faixbox_param_t *faix)
 {
-  if( faix->version%2)
-    return faix->subfaixbox.byte8_params->nmax;
-  else
-    return (Byte8_t)faix->subfaixbox.byte4_params->nmax;
+    if (faix->version % 2) {
+        return faix->subfaixbox.byte8_params->nmax;
+    } else {
+        return (Byte8_t)faix->subfaixbox.byte4_params->nmax;
+    }
 }
 
-Byte8_t get_m( faixbox_param_t *faix)
+Byte8_t get_m(faixbox_param_t *faix)
 {
-  if( faix->version%2)
-    return faix->subfaixbox.byte8_params->m;
-  else
-    return (Byte8_t)faix->subfaixbox.byte4_params->m;
+    if (faix->version % 2) {
+        return faix->subfaixbox.byte8_params->m;
+    } else {
+        return (Byte8_t)faix->subfaixbox.byte4_params->m;
+    }
 }
 
-Byte8_t get_elemOff( faixbox_param_t *faix, Byte8_t elem_id, Byte8_t row_id)
+Byte8_t get_elemOff(faixbox_param_t *faix, Byte8_t elem_id, Byte8_t row_id)
 {
-  Byte8_t nmax = get_nmax( faix);
-  if( faix->version%2)
-    return faix->subfaixbox.byte8_params->elem[ row_id*nmax+elem_id].off;
-  else
-    return (Byte8_t)faix->subfaixbox.byte4_params->elem[ row_id*nmax+elem_id].off;
+    Byte8_t nmax = get_nmax(faix);
+    if (faix->version % 2) {
+        return faix->subfaixbox.byte8_params->elem[ row_id * nmax + elem_id].off;
+    } else {
+        return (Byte8_t)faix->subfaixbox.byte4_params->elem[ row_id * nmax +
+                       elem_id].off;
+    }
 }
 
-Byte8_t get_elemLen( faixbox_param_t *faix, Byte8_t elem_id, Byte8_t row_id)
+Byte8_t get_elemLen(faixbox_param_t *faix, Byte8_t elem_id, Byte8_t row_id)
 {
-  Byte8_t nmax = get_nmax( faix);
-  if( faix->version%2)
-    return faix->subfaixbox.byte8_params->elem[ row_id*nmax+elem_id].len;
-  else
-    return (Byte8_t)faix->subfaixbox.byte4_params->elem[ row_id*nmax+elem_id].len;
+    Byte8_t nmax = get_nmax(faix);
+    if (faix->version % 2) {
+        return faix->subfaixbox.byte8_params->elem[ row_id * nmax + elem_id].len;
+    } else {
+        return (Byte8_t)faix->subfaixbox.byte4_params->elem[ row_id * nmax +
+                       elem_id].len;
+    }
 }
 
-Byte4_t get_elemAux( faixbox_param_t *faix, Byte8_t elem_id, Byte8_t row_id)
+Byte4_t get_elemAux(faixbox_param_t *faix, Byte8_t elem_id, Byte8_t row_id)
 {
-  Byte8_t nmax;
-  if( faix->version <2)
-    return (Byte4_t)-1;
-
-  nmax = get_nmax( faix);
-  if( faix->version%2)
-    return faix->subfaixbox.byte8_params->aux[ row_id*nmax+elem_id];
-  else
-    return faix->subfaixbox.byte4_params->aux[ row_id*nmax+elem_id];
+    Byte8_t nmax;
+    if (faix->version < 2) {
+        return (Byte4_t) - 1;
+    }
+
+    nmax = get_nmax(faix);
+    if (faix->version % 2) {
+        return faix->subfaixbox.byte8_params->aux[ row_id * nmax + elem_id];
+    } else {
+        return faix->subfaixbox.byte4_params->aux[ row_id * nmax + elem_id];
+    }
 }
index 686e0ece5011b524858684117a9138f1c676a38c..efb4d0924579192debf0f27595caefb9f86eccf6 100644 (file)
 #include <assert.h>
 #include "ihdrbox_manager.h"
 
-ihdrbox_param_t * gene_ihdrbox( metadatalist_param_t *metadatalist, Byte_t *jpipstream)
+ihdrbox_param_t * gene_ihdrbox(metadatalist_param_t *metadatalist,
+                               Byte_t *jpipstream)
 {
-  ihdrbox_param_t *ihdrbox;
-  metadata_param_t *meta;
-  box_param_t *jp2h, *ihdr;
-  int bpc_val;
-  
-  jp2h = NULL;
-  meta = metadatalist->first;
-  while( meta){
-    if( meta->boxlist){
-      jp2h = search_box( "jp2h", meta->boxlist);
-      if( jp2h)
-       break;
+    ihdrbox_param_t *ihdrbox;
+    metadata_param_t *meta;
+    box_param_t *jp2h, *ihdr;
+    int bpc_val;
+
+    jp2h = NULL;
+    meta = metadatalist->first;
+    while (meta) {
+        if (meta->boxlist) {
+            jp2h = search_box("jp2h", meta->boxlist);
+            if (jp2h) {
+                break;
+            }
+        }
+        meta = meta->next;
+    }
+    if (!jp2h) {
+        fprintf(stderr, "jp2h box not found\n");
+        return NULL;
+    }
+
+    ihdr = gene_boxbyTypeinStream(jpipstream, get_DBoxoff(jp2h), get_DBoxlen(jp2h),
+                                  "ihdr");
+
+    if (!ihdr) {
+        fprintf(stderr, "ihdr box not found\n");
+        return NULL;
     }
-    meta = meta->next;
-  }
-  if( !jp2h){
-    fprintf( stderr, "jp2h box not found\n");
-    return NULL;
-  }
-  
-  ihdr = gene_boxbyTypeinStream( jpipstream, get_DBoxoff( jp2h), get_DBoxlen( jp2h), "ihdr");
 
-  if( !ihdr){
-    fprintf( stderr, "ihdr box not found\n");
-    return NULL;
-  }
-  
-  ihdrbox = (ihdrbox_param_t *)malloc( sizeof(ihdrbox_param_t));
-  
-  ihdrbox->height = big4( jpipstream+get_DBoxoff(ihdr));
-  ihdrbox->width  = big4( jpipstream+get_DBoxoff(ihdr)+4);
-  ihdrbox->nc     = big2( jpipstream+get_DBoxoff(ihdr)+8);
-  bpc_val = *(jpipstream+get_DBoxoff(ihdr)+10)+1;
-  assert( bpc_val >= 0 && bpc_val <= 255 );
-  ihdrbox->bpc    = (Byte_t)bpc_val;
+    ihdrbox = (ihdrbox_param_t *)malloc(sizeof(ihdrbox_param_t));
+
+    ihdrbox->height = big4(jpipstream + get_DBoxoff(ihdr));
+    ihdrbox->width  = big4(jpipstream + get_DBoxoff(ihdr) + 4);
+    ihdrbox->nc     = big2(jpipstream + get_DBoxoff(ihdr) + 8);
+    bpc_val = *(jpipstream + get_DBoxoff(ihdr) + 10) + 1;
+    assert(bpc_val >= 0 && bpc_val <= 255);
+    ihdrbox->bpc    = (Byte_t)bpc_val;
 
-  free( ihdr);
+    free(ihdr);
 
-  return ihdrbox;
+    return ihdrbox;
 }
 
index 1951e52f62b896e88b3a63ba20aabb49d6117fac..c006035dc6b181d5750617f03b1d5185c9712a4f 100644 (file)
 #define logstream stderr
 #endif /*SERVER*/
 
-imgreg_param_t map_viewin2imgreg( const int fx,    const int fy, 
-                                 const int rx,    const int ry,
-                                 const int rw,    const int rh,
-                                 const int XOsiz, const int YOsiz,
-                                 const int Xsiz,  const int Ysiz,
-                                 const int numOfreslev)
+imgreg_param_t map_viewin2imgreg(const int fx,    const int fy,
+                                 const int rx,    const int ry,
+                                 const int rw,    const int rh,
+                                 const int XOsiz, const int YOsiz,
+                                 const int Xsiz,  const int Ysiz,
+                                 const int numOfreslev)
 {
-  imgreg_param_t imgreg;
-  int px,py;
-  int xmax, ymax;
-
-  imgreg.xosiz = XOsiz;
-  imgreg.yosiz = YOsiz;
-  imgreg.fx = fx;
-  imgreg.fy = fy;
-  imgreg.level = 0;
-  xmax = Xsiz;
-  ymax = Ysiz;
-  
-  find_level( numOfreslev, &imgreg.level, &imgreg.fx, &imgreg.fy, &imgreg.xosiz, &imgreg.yosiz, &xmax, &ymax);
-
-  if( rx == -1 ||  ry == -1){
-    imgreg.ox = 0;
-    imgreg.oy = 0;
-  }
-  else{
-    imgreg.ox = rx*imgreg.fx/fx;
-    imgreg.oy = ry*imgreg.fy/fy;
-  }
-
-  if( rw == -1 || rh == -1){
-    imgreg.sx = imgreg.fx;
-    imgreg.sy = imgreg.fy;
-  }
-  else{
-    px = (int)ceil((double)((rx+rw)*imgreg.fx)/(double)fx);
-    py = (int)ceil((double)((ry+rh)*imgreg.fy)/(double)fy);
-    
-    if( imgreg.fx < px)
-      px = imgreg.fx;
-    if( imgreg.fy < py)
-      py = imgreg.fy;
-    
-    imgreg.sx = px - imgreg.ox;
-    imgreg.sy = py - imgreg.oy;
-  }
-
-  if( fx != imgreg.fx || fy != imgreg.fy)
-    fprintf( FCGI_stdout, "JPIP-fsiz: %d,%d\r\n", imgreg.fx, imgreg.fy);
-  
-  if( rw != imgreg.sx || rh != imgreg.sy)
-    fprintf( FCGI_stdout, "JPIP-rsiz: %d,%d\r\n", imgreg.sx, imgreg.sy);
-  
-  if( rx != imgreg.ox || ry != imgreg.oy)
-    fprintf( FCGI_stdout, "JPIP-roff: %d,%d\r\n", imgreg.ox, imgreg.oy);
-  return imgreg;
+    imgreg_param_t imgreg;
+    int px, py;
+    int xmax, ymax;
+
+    imgreg.xosiz = XOsiz;
+    imgreg.yosiz = YOsiz;
+    imgreg.fx = fx;
+    imgreg.fy = fy;
+    imgreg.level = 0;
+    xmax = Xsiz;
+    ymax = Ysiz;
+
+    find_level(numOfreslev, &imgreg.level, &imgreg.fx, &imgreg.fy, &imgreg.xosiz,
+               &imgreg.yosiz, &xmax, &ymax);
+
+    if (rx == -1 ||  ry == -1) {
+        imgreg.ox = 0;
+        imgreg.oy = 0;
+    } else {
+        imgreg.ox = rx * imgreg.fx / fx;
+        imgreg.oy = ry * imgreg.fy / fy;
+    }
+
+    if (rw == -1 || rh == -1) {
+        imgreg.sx = imgreg.fx;
+        imgreg.sy = imgreg.fy;
+    } else {
+        px = (int)ceil((double)((rx + rw) * imgreg.fx) / (double)fx);
+        py = (int)ceil((double)((ry + rh) * imgreg.fy) / (double)fy);
+
+        if (imgreg.fx < px) {
+            px = imgreg.fx;
+        }
+        if (imgreg.fy < py) {
+            py = imgreg.fy;
+        }
+
+        imgreg.sx = px - imgreg.ox;
+        imgreg.sy = py - imgreg.oy;
+    }
+
+    if (fx != imgreg.fx || fy != imgreg.fy) {
+        fprintf(FCGI_stdout, "JPIP-fsiz: %d,%d\r\n", imgreg.fx, imgreg.fy);
+    }
+
+    if (rw != imgreg.sx || rh != imgreg.sy) {
+        fprintf(FCGI_stdout, "JPIP-rsiz: %d,%d\r\n", imgreg.sx, imgreg.sy);
+    }
+
+    if (rx != imgreg.ox || ry != imgreg.oy) {
+        fprintf(FCGI_stdout, "JPIP-roff: %d,%d\r\n", imgreg.ox, imgreg.oy);
+    }
+
+    return imgreg;
 }
 
-void find_level( int maxlev, int *lev, int *fx, int *fy, int *xmin, int *ymin, int *xmax, int *ymax)
+void find_level(int maxlev, int *lev, int *fx, int *fy, int *xmin, int *ymin,
+                int *xmax, int *ymax)
 {
-  int xwidth = *xmax - *xmin;
-  int ywidth = *ymax - *ymin;
-
-  /* Find smaller frame size for now (i.e. assume "round-down"). */
-  if ((*fx < 1 && xwidth != 0) || (*fy < 1 && ywidth != 0)){
-    fprintf( FCGI_stderr, "Frame size must be strictly positive");
-    exit(-1);
-  }
-  else if( *lev < maxlev-1 && ( *fx < xwidth || *fy < ywidth)) {
-    /* Simulate the ceil function. */
-    *xmin = (int)ceil((double)*xmin/(double)2.0);
-    *ymin = (int)ceil((double)*ymin/(double)2.0);
-    *xmax = (int)ceil((double)*xmax/(double)2.0);
-    *ymax = (int)ceil((double)*ymax/(double)2.0);
-    
-    (*lev) ++;
-    find_level ( maxlev, lev, fx, fy, xmin, ymin, xmax, ymax);
-  } else {
-    *fx = xwidth;
-    *fy = ywidth;
-  }
+    int xwidth = *xmax - *xmin;
+    int ywidth = *ymax - *ymin;
+
+    /* Find smaller frame size for now (i.e. assume "round-down"). */
+    if ((*fx < 1 && xwidth != 0) || (*fy < 1 && ywidth != 0)) {
+        fprintf(FCGI_stderr, "Frame size must be strictly positive");
+        exit(-1);
+    } else if (*lev < maxlev - 1 && (*fx < xwidth || *fy < ywidth)) {
+        /* Simulate the ceil function. */
+        *xmin = (int)ceil((double) * xmin / (double)2.0);
+        *ymin = (int)ceil((double) * ymin / (double)2.0);
+        *xmax = (int)ceil((double) * xmax / (double)2.0);
+        *ymax = (int)ceil((double) * ymax / (double)2.0);
+
+        (*lev) ++;
+        find_level(maxlev, lev, fx, fy, xmin, ymin, xmax, ymax);
+    } else {
+        *fx = xwidth;
+        *fy = ywidth;
+    }
 }
 
-int comp_decomplev( int fw, int fh, int Xsiz, int Ysiz)
+int comp_decomplev(int fw, int fh, int Xsiz, int Ysiz)
 {
-  int level;
-  int xmin, xmax, ymin, ymax;
-
-  level = 0;
-  xmin = ymin = 0;
-  xmax = Xsiz;
-  ymax = Ysiz;
-  
-  find_level( 1000, &level, &fw, &fh, &xmin, &ymin, &xmax, &ymax);
-
-  assert( level >= 0 );
-  return level;
+    int level;
+    int xmin, xmax, ymin, ymax;
+
+    level = 0;
+    xmin = ymin = 0;
+    xmax = Xsiz;
+    ymax = Ysiz;
+
+    find_level(1000, &level, &fw, &fh, &xmin, &ymin, &xmax, &ymax);
+
+    assert(level >= 0);
+    return level;
 }
 
-void print_imgreg( imgreg_param_t imgreg)
+void print_imgreg(imgreg_param_t imgreg)
 {
 #ifndef SERVER
-  fprintf( logstream, "codestream image region:\n");
-  fprintf( logstream, "\t fsiz: %d, %d\n", imgreg.fx, imgreg.fy);
-  fprintf( logstream, "\t roff: %d, %d\n", imgreg.ox, imgreg.oy);
-  fprintf( logstream, "\t rsiz: %d, %d\n", imgreg.sx, imgreg.sy);
-  fprintf( logstream, "\t level: %d\n", imgreg.level);
+    fprintf(logstream, "codestream image region:\n");
+    fprintf(logstream, "\t fsiz: %d, %d\n", imgreg.fx, imgreg.fy);
+    fprintf(logstream, "\t roff: %d, %d\n", imgreg.ox, imgreg.oy);
+    fprintf(logstream, "\t rsiz: %d, %d\n", imgreg.sx, imgreg.sy);
+    fprintf(logstream, "\t level: %d\n", imgreg.level);
 #else
-  (void)imgreg;
+    (void)imgreg;
 #endif
 }
index 4337e608f94d73ad77ce2bae6593f2160664affb..35eb5489f8b7ddcbbb032f50b7c74cabcbf12241 100644 (file)
 #define strncasecmp _strnicmp
 #endif
 
-msgtype_t identify_clientmsg( SOCKET connected_socket)
+msgtype_t identify_clientmsg(SOCKET connected_socket)
 {
-  OPJ_SIZE_T receive_size;
-  char buf[BUF_LEN];
-  static const char *magicid[] = { "JPIP-stream", "PNM request", "XML request",
-    "TID request", "CID request", "CID destroy", "SIZ request", "JP2 save",
-    "QUIT"};
-  int i;
-  
-  receive_size = receive_line( connected_socket, buf);
-
-  if( receive_size == 0){ 
-    fprintf( stderr, "Error to receive the header of client message\n");
-    return MSGERROR;
-  }
+    OPJ_SIZE_T receive_size;
+    char buf[BUF_LEN];
+    static const char *magicid[] = { "JPIP-stream", "PNM request", "XML request",
+                                     "TID request", "CID request", "CID destroy", "SIZ request", "JP2 save",
+                                     "QUIT"
+                                   };
+    int i;
+
+    receive_size = receive_line(connected_socket, buf);
+
+    if (receive_size == 0) {
+        fprintf(stderr, "Error to receive the header of client message\n");
+        return MSGERROR;
+    }
 
-  for( i=0; i<NUM_OF_MSGTYPES; i++){
-    if( strncasecmp( magicid[i], buf, strlen(magicid[i])) == 0){
-      fprintf( stderr, "%s\n", magicid[i]);
-      return i;
+    for (i = 0; i < NUM_OF_MSGTYPES; i++) {
+        if (strncasecmp(magicid[i], buf, strlen(magicid[i])) == 0) {
+            fprintf(stderr, "%s\n", magicid[i]);
+            return i;
+        }
     }
-  }
-  
-  fprintf( stderr, "Cannot identify client message type %s\n", buf);
-  return MSGERROR;
+
+    fprintf(stderr, "Cannot identify client message type %s\n", buf);
+    return MSGERROR;
 }
 
-Byte_t * receive_JPIPstream( SOCKET connected_socket, char **target, char **tid, char **cid, OPJ_SIZE_T *streamlen)
+Byte_t * receive_JPIPstream(SOCKET connected_socket, char **target, char **tid,
+                            char **cid, OPJ_SIZE_T *streamlen)
 {
-  char buf[BUF_LEN];
-  const char versionstring[] = "version 1.2";
-  int idatalen;
-  OPJ_SIZE_T linelen, datalen;
-  Byte_t *jpipstream;
-  
-  *target = *cid = *tid = NULL;
-  
-  if((linelen = receive_line( connected_socket, buf)) == 0)
-    return NULL;
-  if( strncmp( versionstring, buf, strlen(versionstring))!=0){
-    fprintf( stderr, "Wrong format\n");
-    return NULL;
-  }
-  
-  if((linelen = receive_line( connected_socket, buf)) == 0)
-    return NULL;
-
-  if( strstr( buf, "jp2")){ 
-    /* register cid option*/
-    *target = strdup( buf);
-    
-    if((linelen = receive_line( connected_socket, buf)) == 0)
-      return NULL;
-    if( strcmp( buf, "0") != 0)
-      *tid = strdup( buf);
-
-    if((linelen = receive_line( connected_socket, buf)) == 0)
-      return NULL;
-    if( strcmp( buf, "0") != 0)
-      *cid = strdup( buf);
-    
-    if((linelen = receive_line( connected_socket, buf)) == 0)
-      return NULL;
-  }
-
-  idatalen = atoi( buf);
-  if( idatalen < 0 )
-    {
-    fprintf( stderr, "Receive Data: %d Bytes\n", idatalen);
-    return NULL;
+    char buf[BUF_LEN];
+    const char versionstring[] = "version 1.2";
+    int idatalen;
+    OPJ_SIZE_T linelen, datalen;
+    Byte_t *jpipstream;
+
+    *target = *cid = *tid = NULL;
+
+    if ((linelen = receive_line(connected_socket, buf)) == 0) {
+        return NULL;
+    }
+    if (strncmp(versionstring, buf, strlen(versionstring)) != 0) {
+        fprintf(stderr, "Wrong format\n");
+        return NULL;
+    }
+
+    if ((linelen = receive_line(connected_socket, buf)) == 0) {
+        return NULL;
+    }
+
+    if (strstr(buf, "jp2")) {
+        /* register cid option*/
+        *target = strdup(buf);
+
+        if ((linelen = receive_line(connected_socket, buf)) == 0) {
+            return NULL;
+        }
+        if (strcmp(buf, "0") != 0) {
+            *tid = strdup(buf);
+        }
+
+        if ((linelen = receive_line(connected_socket, buf)) == 0) {
+            return NULL;
+        }
+        if (strcmp(buf, "0") != 0) {
+            *cid = strdup(buf);
+        }
+
+        if ((linelen = receive_line(connected_socket, buf)) == 0) {
+            return NULL;
+        }
+    }
+
+    idatalen = atoi(buf);
+    if (idatalen < 0) {
+        fprintf(stderr, "Receive Data: %d Bytes\n", idatalen);
+        return NULL;
+    }
+    datalen = (OPJ_SIZE_T)idatalen;
+    fprintf(stdout, "Receive Data: %lu Bytes\n", datalen);
+
+    jpipstream = receive_stream(connected_socket, datalen);
+
+    /* check EOR*/
+    if (jpipstream[datalen - 3] == 0x00 && (jpipstream[datalen - 2] == 0x01 ||
+                                            jpipstream[datalen - 2] == 0x02)) {
+        *streamlen = datalen - 3;
+    } else {
+        *streamlen = datalen;
     }
-  datalen = (OPJ_SIZE_T)idatalen;
-  fprintf( stdout, "Receive Data: %lu Bytes\n", datalen);
-
-  jpipstream = receive_stream( connected_socket, datalen);
-
-  /* check EOR*/
-  if( jpipstream[datalen-3] == 0x00 && ( jpipstream[datalen-2] == 0x01 || jpipstream[datalen-2] == 0x02))
-    *streamlen = datalen -3;
-  else
-    *streamlen = datalen;
-  
-  return jpipstream;
+
+    return jpipstream;
 }
 
-void send_XMLstream( SOCKET connected_socket, Byte_t *xmlstream, OPJ_SIZE_T length)
+void send_XMLstream(SOCKET connected_socket, Byte_t *xmlstream,
+                    OPJ_SIZE_T length)
 {
-  Byte_t header[5];
-  
-  header[0] = 'X';
-  header[1] = 'M';
-  header[2] = 'L';
-  header[3] = (Byte_t)((length >> 8) & 0xff);
-  header[4] = (Byte_t)(length & 0xff);
-
-  send_stream( connected_socket, header, 5);
-  send_stream( connected_socket, xmlstream, length);
+    Byte_t header[5];
+
+    header[0] = 'X';
+    header[1] = 'M';
+    header[2] = 'L';
+    header[3] = (Byte_t)((length >> 8) & 0xff);
+    header[4] = (Byte_t)(length & 0xff);
+
+    send_stream(connected_socket, header, 5);
+    send_stream(connected_socket, xmlstream, length);
 }
 
-void send_IDstream(  SOCKET connected_socket, const char *id, OPJ_SIZE_T idlen, const char *label);
+void send_IDstream(SOCKET connected_socket, const char *id, OPJ_SIZE_T idlen,
+                   const char *label);
 
-void send_CIDstream( SOCKET connected_socket, const char *cid, OPJ_SIZE_T cidlen)
+void send_CIDstream(SOCKET connected_socket, const char *cid, OPJ_SIZE_T cidlen)
 {
-  send_IDstream( connected_socket, cid, cidlen, "CID");
+    send_IDstream(connected_socket, cid, cidlen, "CID");
 }
 
-void send_TIDstream( SOCKET connected_socket, const char *tid, OPJ_SIZE_T tidlen)
+void send_TIDstream(SOCKET connected_socket, const char *tid, OPJ_SIZE_T tidlen)
 {
-  send_IDstream( connected_socket, tid, tidlen, "TID");
+    send_IDstream(connected_socket, tid, tidlen, "TID");
 }
 
-void send_IDstream(  SOCKET connected_socket, const char *id, OPJ_SIZE_T idlen, const char *label)
+void send_IDstream(SOCKET connected_socket, const char *id, OPJ_SIZE_T idlen,
+                   const char *label)
 {
-  char header[4];
+    char header[4];
 
-  header[0] = label[0];
-  header[1] = label[1];
-  header[2] = label[2];
-  header[3] = (char)(idlen & 0xff);
+    header[0] = label[0];
+    header[1] = label[1];
+    header[2] = label[2];
+    header[3] = (char)(idlen & 0xff);
 
-  send_stream( connected_socket, header, 4);
-  send_stream( connected_socket, id, idlen);
+    send_stream(connected_socket, header, 4);
+    send_stream(connected_socket, id, idlen);
 }
 
-void send_PNMstream( SOCKET connected_socket, Byte_t *pnmstream, unsigned int width, unsigned int height, unsigned int numofcomp, Byte_t maxval)
-{ 
-  OPJ_SIZE_T pnmlen = 0;
-  Byte_t header[7];
-
-  pnmlen = width*height*numofcomp;
-  
-  header[0] = 'P';
-  header[1] = numofcomp==3 ? 6:5;
-  header[2] = (width >> 8) & 0xff;
-  header[3] = width & 0xff;
-  header[4] = (height >> 8) & 0xff;
-  header[5] = height & 0xff;
-  header[6] = maxval;
-
-  send_stream( connected_socket, header, 7);
-  send_stream( connected_socket, pnmstream, pnmlen);
+void send_PNMstream(SOCKET connected_socket, Byte_t *pnmstream,
+                    unsigned int width, unsigned int height, unsigned int numofcomp, Byte_t maxval)
+{
+    OPJ_SIZE_T pnmlen = 0;
+    Byte_t header[7];
+
+    pnmlen = width * height * numofcomp;
+
+    header[0] = 'P';
+    header[1] = numofcomp == 3 ? 6 : 5;
+    header[2] = (width >> 8) & 0xff;
+    header[3] = width & 0xff;
+    header[4] = (height >> 8) & 0xff;
+    header[5] = height & 0xff;
+    header[6] = maxval;
+
+    send_stream(connected_socket, header, 7);
+    send_stream(connected_socket, pnmstream, pnmlen);
 }
 
-void send_SIZstream( SOCKET connected_socket, unsigned int width, unsigned int height)
+void send_SIZstream(SOCKET connected_socket, unsigned int width,
+                    unsigned int height)
 {
-  Byte_t response[9];
-  
-  response[0] = 'S';
-  response[1] = 'I';
-  response[2] = 'Z';
-  response[3] = (width >> 16) & 0xff;
-  response[4] = (width >> 8) & 0xff;
-  response[5] = width & 0xff;
-  response[6] = (height >> 16) & 0xff;
-  response[7] = (height >> 8) & 0xff;
-  response[8] = height & 0xff;
-
-  send_stream( connected_socket, response, 9);
+    Byte_t response[9];
+
+    response[0] = 'S';
+    response[1] = 'I';
+    response[2] = 'Z';
+    response[3] = (width >> 16) & 0xff;
+    response[4] = (width >> 8) & 0xff;
+    response[5] = width & 0xff;
+    response[6] = (height >> 16) & 0xff;
+    response[7] = (height >> 8) & 0xff;
+    response[8] = height & 0xff;
+
+    send_stream(connected_socket, response, 9);
 }
 
-void response_signal( SOCKET connected_socket, OPJ_BOOL succeed)
+void response_signal(SOCKET connected_socket, OPJ_BOOL succeed)
 {
-  Byte_t code;
+    Byte_t code;
 
-  if( succeed)
-    code = 1;
-  else
-    code = 0;
+    if (succeed) {
+        code = 1;
+    } else {
+        code = 0;
+    }
 
-  send_stream( connected_socket, &code, 1);
+    send_stream(connected_socket, &code, 1);
 }
index b26d6d2a8c1785a857fc2320e52d966d56a855bb..2d7d683b5cc1bc435b85f60f843e4fce86324199 100644 (file)
@@ -58,7 +58,7 @@
  * @param[in] toplev_boxlist top level box list
  * @return                   if correct (true) or wrong (false)
  */
-OPJ_BOOL check_JP2boxidx( boxlist_param_t *toplev_boxlist);
+OPJ_BOOL check_JP2boxidx(boxlist_param_t *toplev_boxlist);
 
 /**
  * set code index parameters (parse cidx box)
@@ -68,202 +68,228 @@ OPJ_BOOL check_JP2boxidx( boxlist_param_t *toplev_boxlist);
  * @param[out] codeidx  pointer to index parameters
  * @return              if succeeded (true) or failed (false)
  */
-OPJ_BOOL set_cidxdata( box_param_t *cidx_box, index_param_t *codeidx);
+OPJ_BOOL set_cidxdata(box_param_t *cidx_box, index_param_t *codeidx);
 
-index_param_t * parse_jp2file( int fd)
+index_param_t * parse_jp2file(int fd)
 {
-  index_param_t *jp2idx;
-  box_param_t *cidx;
-  metadatalist_param_t *metadatalist;
-  boxlist_param_t *toplev_boxlist;
-  Byte8_t filesize;
-
-  if( !(filesize = (Byte8_t)get_filesize( fd)))
-    return NULL;
-  
-  if( !(toplev_boxlist = get_boxstructure( fd, 0, filesize))){
-    fprintf( FCGI_stderr, "Error: Not correctl JP2 format\n");
-    return NULL;
-  }
-  
-  if( !check_JP2boxidx( toplev_boxlist)){
-    fprintf( FCGI_stderr, "Index format not supported\n");
-    delete_boxlist( &toplev_boxlist);
-    return NULL;
-  }
-
-  if( !(cidx = search_box( "cidx", toplev_boxlist))){
-    fprintf( FCGI_stderr, "Box cidx not found\n");
-    delete_boxlist( &toplev_boxlist);
-    return NULL;
-  }
-
-  jp2idx = (index_param_t *)opj_malloc( sizeof(index_param_t));
-  
-  if( !set_cidxdata( cidx, jp2idx)){
-    fprintf( FCGI_stderr, "Error: Not correctl format in cidx box\n");
-    opj_free(jp2idx);
-    delete_boxlist( &toplev_boxlist);
-    return NULL;
-  }
-  delete_boxlist( &toplev_boxlist);
-  
-  metadatalist = const_metadatalist( fd);
-  jp2idx->metadatalist = metadatalist;
+    index_param_t *jp2idx;
+    box_param_t *cidx;
+    metadatalist_param_t *metadatalist;
+    boxlist_param_t *toplev_boxlist;
+    Byte8_t filesize;
+
+    if (!(filesize = (Byte8_t)get_filesize(fd))) {
+        return NULL;
+    }
+
+    if (!(toplev_boxlist = get_boxstructure(fd, 0, filesize))) {
+        fprintf(FCGI_stderr, "Error: Not correctl JP2 format\n");
+        return NULL;
+    }
+
+    if (!check_JP2boxidx(toplev_boxlist)) {
+        fprintf(FCGI_stderr, "Index format not supported\n");
+        delete_boxlist(&toplev_boxlist);
+        return NULL;
+    }
+
+    if (!(cidx = search_box("cidx", toplev_boxlist))) {
+        fprintf(FCGI_stderr, "Box cidx not found\n");
+        delete_boxlist(&toplev_boxlist);
+        return NULL;
+    }
+
+    jp2idx = (index_param_t *)opj_malloc(sizeof(index_param_t));
+
+    if (!set_cidxdata(cidx, jp2idx)) {
+        fprintf(FCGI_stderr, "Error: Not correctl format in cidx box\n");
+        opj_free(jp2idx);
+        delete_boxlist(&toplev_boxlist);
+        return NULL;
+    }
+    delete_boxlist(&toplev_boxlist);
+
+    metadatalist = const_metadatalist(fd);
+    jp2idx->metadatalist = metadatalist;
 
 #ifndef SERVER
-    fprintf( logstream, "local log: code index created\n");
+    fprintf(logstream, "local log: code index created\n");
 #endif
-  
-  return jp2idx;
+
+    return jp2idx;
 }
 
-void print_index( index_param_t index)
+void print_index(index_param_t index)
 {
-  int i;
-
-  fprintf( logstream, "index info:\n");
-  fprintf( logstream, "\tCodestream  Offset: %#" PRIx64 "\n", index.offset);
-  fprintf( logstream, "\t            Length: %#" PRIx64 "\n", index.length);
-  fprintf( logstream, "\tMain header Length: %#" PRIx64 "\n", index.mhead_length);
-  
-  print_SIZ( index.SIZ);
-  print_COD( index.COD);
-  
-  fprintf( logstream, "Tile part information: \n");
-  print_faixbox( index.tilepart);
-
-  fprintf( logstream, "Tile header information: \n");
-  for( i=0; i<(int)(index.SIZ.XTnum*index.SIZ.YTnum);i++)
-    print_mhixbox( index.tileheader[i]);
-
-  fprintf( logstream, "Precinct packet information: \n");
-  for( i=0; i<index.SIZ.Csiz; i++){
-    fprintf( logstream, "Component %d\n", i);
-    print_faixbox( index.precpacket[i]);
-  }
-
-  print_allmetadata( index.metadatalist);
+    int i;
+
+    fprintf(logstream, "index info:\n");
+    fprintf(logstream, "\tCodestream  Offset: %#" PRIx64 "\n", index.offset);
+    fprintf(logstream, "\t            Length: %#" PRIx64 "\n", index.length);
+    fprintf(logstream, "\tMain header Length: %#" PRIx64 "\n", index.mhead_length);
+
+    print_SIZ(index.SIZ);
+    print_COD(index.COD);
+
+    fprintf(logstream, "Tile part information: \n");
+    print_faixbox(index.tilepart);
+
+    fprintf(logstream, "Tile header information: \n");
+    for (i = 0; i < (int)(index.SIZ.XTnum * index.SIZ.YTnum); i++) {
+        print_mhixbox(index.tileheader[i]);
+    }
+
+    fprintf(logstream, "Precinct packet information: \n");
+    for (i = 0; i < index.SIZ.Csiz; i++) {
+        fprintf(logstream, "Component %d\n", i);
+        print_faixbox(index.precpacket[i]);
+    }
+
+    print_allmetadata(index.metadatalist);
 }
 
-void print_SIZ( SIZmarker_param_t SIZ)
+void print_SIZ(SIZmarker_param_t SIZ)
 {
-  int i;
-
-  fprintf( logstream, "\tImage and Tile SIZ parameters\n");
-  fprintf( logstream, "\t              Rsiz: %#x\n", SIZ.Rsiz);
-  fprintf( logstream, "\t        Xsiz, Ysiz: (%d,%d) = (%#x, %#x)\n", SIZ.Xsiz, SIZ.Ysiz, SIZ.Xsiz, SIZ.Ysiz);
-  fprintf( logstream, "\t      XOsiz, YOsiz: (%d,%d) = (%#x, %#x)\n", SIZ.XOsiz, SIZ.YOsiz, SIZ.XOsiz, SIZ.YOsiz);
-  fprintf( logstream, "\t      XTsiz, YTsiz: (%d,%d) = (%#x, %#x)\n", SIZ.XTsiz, SIZ.YTsiz, SIZ.XTsiz, SIZ.YTsiz);
-  fprintf( logstream, "\t    XTOsiz, YTOsiz: (%d,%d) = (%#x, %#x)\n", SIZ.XTOsiz, SIZ.YTOsiz, SIZ.XTOsiz, SIZ.YTOsiz);
-  fprintf( logstream, "\t    XTnum, YTnum: (%d,%d)\n", SIZ.XTnum, SIZ.YTnum);
-  fprintf( logstream, "\t Num of Components: %d\n", SIZ.Csiz);
-  
-  for( i=0; i<SIZ.Csiz; i++)
-    fprintf( logstream, "\t[%d] (Ssiz, XRsiz, YRsiz): (%d, %d, %d) = (%#x, %#x, %#x)\n", i, SIZ.Ssiz[i], SIZ.XRsiz[i], SIZ.YRsiz[i], SIZ.Ssiz[i], SIZ.XRsiz[i], SIZ.YRsiz[i]);
+    int i;
+
+    fprintf(logstream, "\tImage and Tile SIZ parameters\n");
+    fprintf(logstream, "\t              Rsiz: %#x\n", SIZ.Rsiz);
+    fprintf(logstream, "\t        Xsiz, Ysiz: (%d,%d) = (%#x, %#x)\n", SIZ.Xsiz,
+            SIZ.Ysiz, SIZ.Xsiz, SIZ.Ysiz);
+    fprintf(logstream, "\t      XOsiz, YOsiz: (%d,%d) = (%#x, %#x)\n", SIZ.XOsiz,
+            SIZ.YOsiz, SIZ.XOsiz, SIZ.YOsiz);
+    fprintf(logstream, "\t      XTsiz, YTsiz: (%d,%d) = (%#x, %#x)\n", SIZ.XTsiz,
+            SIZ.YTsiz, SIZ.XTsiz, SIZ.YTsiz);
+    fprintf(logstream, "\t    XTOsiz, YTOsiz: (%d,%d) = (%#x, %#x)\n", SIZ.XTOsiz,
+            SIZ.YTOsiz, SIZ.XTOsiz, SIZ.YTOsiz);
+    fprintf(logstream, "\t    XTnum, YTnum: (%d,%d)\n", SIZ.XTnum, SIZ.YTnum);
+    fprintf(logstream, "\t Num of Components: %d\n", SIZ.Csiz);
+
+    for (i = 0; i < SIZ.Csiz; i++) {
+        fprintf(logstream,
+                "\t[%d] (Ssiz, XRsiz, YRsiz): (%d, %d, %d) = (%#x, %#x, %#x)\n", i, SIZ.Ssiz[i],
+                SIZ.XRsiz[i], SIZ.YRsiz[i], SIZ.Ssiz[i], SIZ.XRsiz[i], SIZ.YRsiz[i]);
+    }
 }
 
-void print_COD( CODmarker_param_t COD)
+void print_COD(CODmarker_param_t COD)
 {
-  int i;
-
-  fprintf( logstream, "\tCoding style default COD parameters\n");
-  fprintf( logstream, "\t Progression order: %d [ LRCP=0, RLCP=1, RPCL=2, PCRL=3, CPRL=4]\n", COD.prog_order);
-  fprintf( logstream, "\t     Num of layers: %d\n", COD.numOflayers);
-  fprintf( logstream, "\t Decomposition lvl: %d\n", COD.numOfdecomp);
-  
-  for( i=0; i<=((COD.Scod & 0x01) ? COD.numOfdecomp:0); i++){
-    fprintf( logstream, "\t  [%d] XPsiz, YPsiz: (%d,%d) = (%#x, %#x)\n",i, COD.XPsiz[i], COD.YPsiz[i], COD.XPsiz[i], COD.YPsiz[i]);
-  }
+    int i;
+
+    fprintf(logstream, "\tCoding style default COD parameters\n");
+    fprintf(logstream,
+            "\t Progression order: %d [ LRCP=0, RLCP=1, RPCL=2, PCRL=3, CPRL=4]\n",
+            COD.prog_order);
+    fprintf(logstream, "\t     Num of layers: %d\n", COD.numOflayers);
+    fprintf(logstream, "\t Decomposition lvl: %d\n", COD.numOfdecomp);
+
+    for (i = 0; i <= ((COD.Scod & 0x01) ? COD.numOfdecomp : 0); i++) {
+        fprintf(logstream, "\t  [%d] XPsiz, YPsiz: (%d,%d) = (%#x, %#x)\n", i,
+                COD.XPsiz[i], COD.YPsiz[i], COD.XPsiz[i], COD.YPsiz[i]);
+    }
 }
 
-void delete_index( index_param_t **index)
+void delete_index(index_param_t **index)
 {
-  int i;
-
-  delete_metadatalist( &((*index)->metadatalist));
-
-  delete_COD( (*index)->COD);
-  
-  delete_faixbox( &((*index)->tilepart));
-
-  for( i=0; i< (int)((*index)->SIZ.XTnum*(*index)->SIZ.YTnum);i++)
-    delete_mhixbox( &((*index)->tileheader[i]));
-  opj_free( (*index)->tileheader);
-  
-  for( i=0; i<(*index)->SIZ.Csiz; i++)
-    delete_faixbox( &((*index)->precpacket[i]));
-  opj_free( (*index)->precpacket);
-  
-  opj_free(*index);
+    int i;
+
+    delete_metadatalist(&((*index)->metadatalist));
+
+    delete_COD((*index)->COD);
+
+    delete_faixbox(&((*index)->tilepart));
+
+    for (i = 0; i < (int)((*index)->SIZ.XTnum * (*index)->SIZ.YTnum); i++) {
+        delete_mhixbox(&((*index)->tileheader[i]));
+    }
+    opj_free((*index)->tileheader);
+
+    for (i = 0; i < (*index)->SIZ.Csiz; i++) {
+        delete_faixbox(&((*index)->precpacket[i]));
+    }
+    opj_free((*index)->precpacket);
+
+    opj_free(*index);
 }
 
-void delete_COD( CODmarker_param_t COD)
+void delete_COD(CODmarker_param_t COD)
 {
-  if( COD.XPsiz)    opj_free( COD.XPsiz);
-  if( COD.YPsiz)    opj_free( COD.YPsiz);
+    if (COD.XPsiz) {
+        opj_free(COD.XPsiz);
+    }
+    if (COD.YPsiz) {
+        opj_free(COD.YPsiz);
+    }
 }
 
-OPJ_BOOL check_JP2boxidx( boxlist_param_t *toplev_boxlist)
+OPJ_BOOL check_JP2boxidx(boxlist_param_t *toplev_boxlist)
 {
-  box_param_t *iptr, *fidx, *prxy;
-  box_param_t *cidx, *jp2c;
-  Byte8_t off;
-  Byte8_t len;
-  int pos;
-  Byte8_t ooff;
-  boxheader_param_t *obh;
-  Byte_t ni;
-  Byte8_t ioff;
-  boxheader_param_t *ibh;
-
-  iptr = search_box( "iptr", toplev_boxlist);
-  fidx = search_box( "fidx", toplev_boxlist);
-  cidx = search_box( "cidx", toplev_boxlist);
-  jp2c = search_box( "jp2c", toplev_boxlist);
-  prxy = gene_childboxbyType( fidx, 0, "prxy");
-
-  off = fetch_DBox8bytebigendian( iptr, 0);
-  if( off != (Byte8_t)fidx->offset)
-    fprintf( FCGI_stderr, "Reference File Index box offset in Index Finder box not correct\n");
-
-  len = fetch_DBox8bytebigendian( iptr, 8);
-  if( len != fidx->length)
-    fprintf( FCGI_stderr, "Reference File Index box length in Index Finder box not correct\n");
-
-  pos = 0;
-  ooff = fetch_DBox8bytebigendian( prxy, pos);
-  if( ooff != (Byte8_t)jp2c->offset)
-    fprintf( FCGI_stderr, "Reference jp2c offset in prxy box not correct\n");
-  pos += 8;
-
-  obh = gene_childboxheader( prxy, pos);
-  if( obh->length != jp2c->length || strncmp( obh->type, "jp2c",4)!=0)
-    fprintf( FCGI_stderr, "Reference jp2c header in prxy box not correct\n");
-  pos += obh->headlen;
-  opj_free(obh);
-  
-  ni = fetch_DBox1byte( prxy, pos);
-  if( ni != 1){
-    fprintf( FCGI_stderr, "Multiple indexes not supported\n");
-    return OPJ_FALSE;
-  }  
-  pos += 1;
-  
-  ioff = fetch_DBox8bytebigendian( prxy, pos);
-  if( ioff != (Byte8_t)cidx->offset)
-    fprintf( FCGI_stderr, "Reference cidx offset in prxy box not correct\n");
-  pos += 8;
-
-  ibh = gene_childboxheader( prxy, pos);
-  if( ibh->length != cidx->length || strncmp( ibh->type, "cidx",4)!=0)
-    fprintf( FCGI_stderr, "Reference cidx header in prxy box not correct\n");
-  pos += ibh->headlen;
-  opj_free(ibh);
-  
-  opj_free(prxy);
-
-  return OPJ_TRUE;
+    box_param_t *iptr, *fidx, *prxy;
+    box_param_t *cidx, *jp2c;
+    Byte8_t off;
+    Byte8_t len;
+    int pos;
+    Byte8_t ooff;
+    boxheader_param_t *obh;
+    Byte_t ni;
+    Byte8_t ioff;
+    boxheader_param_t *ibh;
+
+    iptr = search_box("iptr", toplev_boxlist);
+    fidx = search_box("fidx", toplev_boxlist);
+    cidx = search_box("cidx", toplev_boxlist);
+    jp2c = search_box("jp2c", toplev_boxlist);
+    prxy = gene_childboxbyType(fidx, 0, "prxy");
+
+    off = fetch_DBox8bytebigendian(iptr, 0);
+    if (off != (Byte8_t)fidx->offset) {
+        fprintf(FCGI_stderr,
+                "Reference File Index box offset in Index Finder box not correct\n");
+    }
+
+    len = fetch_DBox8bytebigendian(iptr, 8);
+    if (len != fidx->length) {
+        fprintf(FCGI_stderr,
+                "Reference File Index box length in Index Finder box not correct\n");
+    }
+
+    pos = 0;
+    ooff = fetch_DBox8bytebigendian(prxy, pos);
+    if (ooff != (Byte8_t)jp2c->offset) {
+        fprintf(FCGI_stderr, "Reference jp2c offset in prxy box not correct\n");
+    }
+    pos += 8;
+
+    obh = gene_childboxheader(prxy, pos);
+    if (obh->length != jp2c->length || strncmp(obh->type, "jp2c", 4) != 0) {
+        fprintf(FCGI_stderr, "Reference jp2c header in prxy box not correct\n");
+    }
+    pos += obh->headlen;
+    opj_free(obh);
+
+    ni = fetch_DBox1byte(prxy, pos);
+    if (ni != 1) {
+        fprintf(FCGI_stderr, "Multiple indexes not supported\n");
+        return OPJ_FALSE;
+    }
+    pos += 1;
+
+    ioff = fetch_DBox8bytebigendian(prxy, pos);
+    if (ioff != (Byte8_t)cidx->offset) {
+        fprintf(FCGI_stderr, "Reference cidx offset in prxy box not correct\n");
+    }
+    pos += 8;
+
+    ibh = gene_childboxheader(prxy, pos);
+    if (ibh->length != cidx->length || strncmp(ibh->type, "cidx", 4) != 0) {
+        fprintf(FCGI_stderr, "Reference cidx header in prxy box not correct\n");
+    }
+    pos += ibh->headlen;
+    opj_free(ibh);
+
+    opj_free(prxy);
+
+    return OPJ_TRUE;
 }
 
 /**
@@ -274,7 +300,7 @@ OPJ_BOOL check_JP2boxidx( boxlist_param_t *toplev_boxlist)
  * @param[out] jp2idx   pointer to index parameters
  * @return              if succeeded (true) or failed (false)
  */
-OPJ_BOOL set_cptrdata( box_param_t *cidx_box, index_param_t *jp2idx);
+OPJ_BOOL set_cptrdata(box_param_t *cidx_box, index_param_t *jp2idx);
 
 /**
  * set code index parameters from mhix box for main header
@@ -285,7 +311,8 @@ OPJ_BOOL set_cptrdata( box_param_t *cidx_box, index_param_t *jp2idx);
  * @param[out] jp2idx     pointer to index parameters
  * @return                if succeeded (true) or failed (false)
  */
-OPJ_BOOL set_mainmhixdata( box_param_t *cidx_box, codestream_param_t codestream, index_param_t *jp2idx);
+OPJ_BOOL set_mainmhixdata(box_param_t *cidx_box, codestream_param_t codestream,
+                          index_param_t *jp2idx);
 
 /**
  * set code index parameters from tpix box
@@ -295,7 +322,7 @@ OPJ_BOOL set_mainmhixdata( box_param_t *cidx_box, codestream_param_t codestream,
  * @param[out] jp2idx     pointer to index parameters
  * @return                if succeeded (true) or failed (false)
  */
-OPJ_BOOL set_tpixdata( box_param_t *cidx_box, index_param_t *jp2idx);
+OPJ_BOOL set_tpixdata(box_param_t *cidx_box, index_param_t *jp2idx);
 
 /**
  * set code index parameters from thix box
@@ -305,7 +332,7 @@ OPJ_BOOL set_tpixdata( box_param_t *cidx_box, index_param_t *jp2idx);
  * @param[out] jp2idx     pointer to index parameters
  * @return                if succeeded (true) or failed (false)
  */
-OPJ_BOOL set_thixdata( box_param_t *cidx_box, index_param_t *jp2idx);
+OPJ_BOOL set_thixdata(box_param_t *cidx_box, index_param_t *jp2idx);
 
 /**
  * set code index parameters from ppix box
@@ -315,86 +342,89 @@ OPJ_BOOL set_thixdata( box_param_t *cidx_box, index_param_t *jp2idx);
  * @param[out] jp2idx     pointer to index parameters
  * @return                if succeeded (true) or failed (false)
  */
-OPJ_BOOL set_ppixdata( box_param_t *cidx_box, index_param_t *jp2idx);
+OPJ_BOOL set_ppixdata(box_param_t *cidx_box, index_param_t *jp2idx);
 
-OPJ_BOOL set_cidxdata( box_param_t *cidx_box, index_param_t *jp2idx)
+OPJ_BOOL set_cidxdata(box_param_t *cidx_box, index_param_t *jp2idx)
 {
-  box_param_t *manf_box;
-  manfbox_param_t *manf;
-  codestream_param_t codestream;
-
-  set_cptrdata( cidx_box, jp2idx);
-
-  codestream = set_codestream( cidx_box->fd, jp2idx->offset, jp2idx->length);
-
-  manf_box = gene_boxbyType( cidx_box->fd, get_DBoxoff( cidx_box), get_DBoxlen( cidx_box), "manf");
-  manf = gene_manfbox( manf_box);
-
-  if( !search_boxheader( "mhix", manf)){
-    fprintf( FCGI_stderr, "Error: mhix box not present in manfbox\n");
-    opj_free(jp2idx);
-    return OPJ_FALSE;
-  }
-  set_mainmhixdata( cidx_box, codestream, jp2idx);
-
-  if( !search_boxheader( "tpix", manf)){
-    fprintf( FCGI_stderr, "Error: tpix box not present in manfbox\n");
-    opj_free(jp2idx);
-    return OPJ_FALSE;
-  }
-  set_tpixdata( cidx_box, jp2idx);
-
-  if( !search_boxheader( "thix", manf)){
-    fprintf( FCGI_stderr, "Error: thix box not present in manfbox\n");
-    opj_free(jp2idx);
-    return OPJ_FALSE;
-  }
-  set_thixdata( cidx_box, jp2idx);
-
-  if( !search_boxheader( "ppix", manf)){
-    fprintf( FCGI_stderr, "Error: ppix box not present in manfbox\n");
-    opj_free(jp2idx);
-    return OPJ_FALSE;
-  }
-  set_ppixdata( cidx_box, jp2idx);
-
-  delete_manfbox( &manf);
-  opj_free( manf_box);
-
-  return OPJ_TRUE;
+    box_param_t *manf_box;
+    manfbox_param_t *manf;
+    codestream_param_t codestream;
+
+    set_cptrdata(cidx_box, jp2idx);
+
+    codestream = set_codestream(cidx_box->fd, jp2idx->offset, jp2idx->length);
+
+    manf_box = gene_boxbyType(cidx_box->fd, get_DBoxoff(cidx_box),
+                              get_DBoxlen(cidx_box), "manf");
+    manf = gene_manfbox(manf_box);
+
+    if (!search_boxheader("mhix", manf)) {
+        fprintf(FCGI_stderr, "Error: mhix box not present in manfbox\n");
+        opj_free(jp2idx);
+        return OPJ_FALSE;
+    }
+    set_mainmhixdata(cidx_box, codestream, jp2idx);
+
+    if (!search_boxheader("tpix", manf)) {
+        fprintf(FCGI_stderr, "Error: tpix box not present in manfbox\n");
+        opj_free(jp2idx);
+        return OPJ_FALSE;
+    }
+    set_tpixdata(cidx_box, jp2idx);
+
+    if (!search_boxheader("thix", manf)) {
+        fprintf(FCGI_stderr, "Error: thix box not present in manfbox\n");
+        opj_free(jp2idx);
+        return OPJ_FALSE;
+    }
+    set_thixdata(cidx_box, jp2idx);
+
+    if (!search_boxheader("ppix", manf)) {
+        fprintf(FCGI_stderr, "Error: ppix box not present in manfbox\n");
+        opj_free(jp2idx);
+        return OPJ_FALSE;
+    }
+    set_ppixdata(cidx_box, jp2idx);
+
+    delete_manfbox(&manf);
+    opj_free(manf_box);
+
+    return OPJ_TRUE;
 }
 
-OPJ_BOOL set_cptrdata( box_param_t *cidx_box, index_param_t *jp2idx)
+OPJ_BOOL set_cptrdata(box_param_t *cidx_box, index_param_t *jp2idx)
 {
-  box_param_t *box;   /**< cptr box*/
-  Byte2_t dr, cont;
-
-  if( !(box = gene_boxbyType( cidx_box->fd, get_DBoxoff( cidx_box), get_DBoxlen( cidx_box), "cptr")))
-    return OPJ_FALSE;
-  
-  /* DR: Data Reference. */
-  /* If 0, the codestream or its Fragment Table box exists in the current file*/
-  if(( dr = fetch_DBox2bytebigendian( box, 0))){
-    fprintf( FCGI_stderr, "Error: Codestream not present in current file\n");
-    opj_free( box);
-    return OPJ_FALSE;  
-  }
-  
-  /* CONT: Container Type*/
-  /* If 0, the entire codestream appears as a contiguous range of*/
-  /* bytes within its file or resource.*/
-  if(( cont = fetch_DBox2bytebigendian( box, 2))){
-    fprintf( FCGI_stderr, "Error: Can't cope with fragmented codestreams yet\n");
-    opj_free( box);
-    return OPJ_FALSE;  
-  }
-    
-  jp2idx->offset = (OPJ_OFF_T)fetch_DBox8bytebigendian( box, 4);
-  jp2idx->length = fetch_DBox8bytebigendian( box, 12);
-
-  opj_free( box);
-
-  return OPJ_TRUE;
+    box_param_t *box;   /**< cptr box*/
+    Byte2_t dr, cont;
+
+    if (!(box = gene_boxbyType(cidx_box->fd, get_DBoxoff(cidx_box),
+                               get_DBoxlen(cidx_box), "cptr"))) {
+        return OPJ_FALSE;
+    }
+
+    /* DR: Data Reference. */
+    /* If 0, the codestream or its Fragment Table box exists in the current file*/
+    if ((dr = fetch_DBox2bytebigendian(box, 0))) {
+        fprintf(FCGI_stderr, "Error: Codestream not present in current file\n");
+        opj_free(box);
+        return OPJ_FALSE;
+    }
+
+    /* CONT: Container Type*/
+    /* If 0, the entire codestream appears as a contiguous range of*/
+    /* bytes within its file or resource.*/
+    if ((cont = fetch_DBox2bytebigendian(box, 2))) {
+        fprintf(FCGI_stderr, "Error: Can't cope with fragmented codestreams yet\n");
+        opj_free(box);
+        return OPJ_FALSE;
+    }
+
+    jp2idx->offset = (OPJ_OFF_T)fetch_DBox8bytebigendian(box, 4);
+    jp2idx->length = fetch_DBox8bytebigendian(box, 12);
+
+    opj_free(box);
+
+    return OPJ_TRUE;
 }
 
 
@@ -408,7 +438,8 @@ OPJ_BOOL set_cptrdata( box_param_t *cidx_box, index_param_t *jp2idx)
  * @param[out] SIZ        SIZ marker parameters pointer
  * @return                if succeeded (true) or failed (false)
  */
-OPJ_BOOL set_SIZmkrdata( markeridx_param_t *sizmkidx, codestream_param_t codestream, SIZmarker_param_t *SIZ);
+OPJ_BOOL set_SIZmkrdata(markeridx_param_t *sizmkidx,
+                        codestream_param_t codestream, SIZmarker_param_t *SIZ);
 
 /**
  * set code index parameters from COD marker in codestream
@@ -420,235 +451,257 @@ OPJ_BOOL set_SIZmkrdata( markeridx_param_t *sizmkidx, codestream_param_t codestr
  * @param[out] COD        COD marker parameters pointer
  * @return                if succeeded (true) or failed (false)
  */
-OPJ_BOOL set_CODmkrdata( markeridx_param_t *codmkidx, codestream_param_t codestream, CODmarker_param_t *COD);
+OPJ_BOOL set_CODmkrdata(markeridx_param_t *codmkidx,
+                        codestream_param_t codestream, CODmarker_param_t *COD);
 
-OPJ_BOOL set_mainmhixdata( box_param_t *cidx_box, codestream_param_t codestream, index_param_t *jp2idx)
+OPJ_BOOL set_mainmhixdata(box_param_t *cidx_box, codestream_param_t codestream,
+                          index_param_t *jp2idx)
 {
-  box_param_t *mhix_box;
-  mhixbox_param_t *mhix;
-  markeridx_param_t *sizmkidx;
-  markeridx_param_t *codmkidx;
-
-  if( !(mhix_box = gene_boxbyType( cidx_box->fd, get_DBoxoff( cidx_box), get_DBoxlen( cidx_box), "mhix")))
-    return OPJ_FALSE;
+    box_param_t *mhix_box;
+    mhixbox_param_t *mhix;
+    markeridx_param_t *sizmkidx;
+    markeridx_param_t *codmkidx;
+
+    if (!(mhix_box = gene_boxbyType(cidx_box->fd, get_DBoxoff(cidx_box),
+                                    get_DBoxlen(cidx_box), "mhix"))) {
+        return OPJ_FALSE;
+    }
 
-  jp2idx->mhead_length = fetch_DBox8bytebigendian( mhix_box, 0);
+    jp2idx->mhead_length = fetch_DBox8bytebigendian(mhix_box, 0);
 
-  mhix = gene_mhixbox( mhix_box);
-  opj_free( mhix_box);
+    mhix = gene_mhixbox(mhix_box);
+    opj_free(mhix_box);
 
-  sizmkidx = search_markeridx( 0xff51, mhix);
-  set_SIZmkrdata( sizmkidx, codestream, &(jp2idx->SIZ));
+    sizmkidx = search_markeridx(0xff51, mhix);
+    set_SIZmkrdata(sizmkidx, codestream, &(jp2idx->SIZ));
 
-  codmkidx = search_markeridx( 0xff52, mhix);
-  set_CODmkrdata( codmkidx, codestream, &(jp2idx->COD));
+    codmkidx = search_markeridx(0xff52, mhix);
+    set_CODmkrdata(codmkidx, codestream, &(jp2idx->COD));
 
-  delete_mhixbox( &mhix);
+    delete_mhixbox(&mhix);
 
-  return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-OPJ_BOOL set_tpixdata( box_param_t *cidx_box, index_param_t *jp2idx)
+OPJ_BOOL set_tpixdata(box_param_t *cidx_box, index_param_t *jp2idx)
 {
-  box_param_t *tpix_box;   /**< tpix box*/
-  box_param_t *faix_box;   /**< faix box*/
-  
-  if( !(tpix_box = gene_boxbyType( cidx_box->fd, get_DBoxoff( cidx_box), get_DBoxlen( cidx_box), "tpix"))){
-    fprintf( FCGI_stderr, "Error: tpix box not present in cidx box\n");
-    return OPJ_FALSE;
-  }
-
-  if( !(faix_box = gene_boxbyType( tpix_box->fd, get_DBoxoff( tpix_box), get_DBoxlen( tpix_box), "faix"))){
-    fprintf( FCGI_stderr, "Error: faix box not present in tpix box\n");
-    return OPJ_FALSE;
-  }
-
-  jp2idx->tilepart = gene_faixbox( faix_box);
-  
-  opj_free( tpix_box);
-  opj_free( faix_box);
-
-  return OPJ_TRUE;
+    box_param_t *tpix_box;   /**< tpix box*/
+    box_param_t *faix_box;   /**< faix box*/
+
+    if (!(tpix_box = gene_boxbyType(cidx_box->fd, get_DBoxoff(cidx_box),
+                                    get_DBoxlen(cidx_box), "tpix"))) {
+        fprintf(FCGI_stderr, "Error: tpix box not present in cidx box\n");
+        return OPJ_FALSE;
+    }
+
+    if (!(faix_box = gene_boxbyType(tpix_box->fd, get_DBoxoff(tpix_box),
+                                    get_DBoxlen(tpix_box), "faix"))) {
+        fprintf(FCGI_stderr, "Error: faix box not present in tpix box\n");
+        return OPJ_FALSE;
+    }
+
+    jp2idx->tilepart = gene_faixbox(faix_box);
+
+    opj_free(tpix_box);
+    opj_free(faix_box);
+
+    return OPJ_TRUE;
 }
 
-OPJ_BOOL set_thixdata( box_param_t *cidx_box, index_param_t *jp2idx)
+OPJ_BOOL set_thixdata(box_param_t *cidx_box, index_param_t *jp2idx)
 {
-  box_param_t *thix_box, *manf_box, *mhix_box;
-  manfbox_param_t *manf;
-  boxheader_param_t *ptr;
-  mhixbox_param_t *mhix;
-  Byte8_t pos;
-  OPJ_OFF_T mhixseqoff;
-  Byte2_t tile_no;
-  
-  if( !(thix_box = gene_boxbyType( cidx_box->fd, get_DBoxoff( cidx_box), get_DBoxlen( cidx_box), "thix"))){
-    fprintf( FCGI_stderr, "Error: thix box not present in cidx box\n");
-    return OPJ_FALSE;
-  }
-  
-  if( !(manf_box = gene_boxbyType( thix_box->fd, get_DBoxoff( thix_box), get_DBoxlen( thix_box), "manf"))){
-    fprintf( FCGI_stderr, "Error: manf box not present in thix box\n");
-    opj_free( thix_box);
-    return OPJ_FALSE;
-  }
-  
-  manf = gene_manfbox( manf_box);
-  ptr = manf->first;
-  mhixseqoff = manf_box->offset+(OPJ_OFF_T)manf_box->length;
-  pos = 0;
-  tile_no = 0;
-  jp2idx->tileheader = (mhixbox_param_t **)opj_malloc( jp2idx->SIZ.XTnum*jp2idx->SIZ.YTnum*sizeof(mhixbox_param_t *));
-    
-  while( ptr){
-    if( !(mhix_box = gene_boxbyType( thix_box->fd, mhixseqoff+(OPJ_OFF_T)pos, get_DBoxlen( thix_box)-manf_box->length-pos, "mhix"))){
-      fprintf( FCGI_stderr, "Error: mhix box not present in thix box\n");
-      delete_manfbox( &manf);
-      opj_free( manf_box);
-      opj_free( thix_box);
-      return OPJ_FALSE;
-    }
-    mhix = gene_mhixbox( mhix_box);
-
-    pos += mhix_box->length;
-    ptr = ptr->next;
-
-    opj_free( mhix_box);
-    jp2idx->tileheader[tile_no++] = mhix;
-  }
-
-  delete_manfbox( &manf);
-  opj_free( manf_box);
-  opj_free( thix_box);
-
-  return OPJ_TRUE;
+    box_param_t *thix_box, *manf_box, *mhix_box;
+    manfbox_param_t *manf;
+    boxheader_param_t *ptr;
+    mhixbox_param_t *mhix;
+    Byte8_t pos;
+    OPJ_OFF_T mhixseqoff;
+    Byte2_t tile_no;
+
+    if (!(thix_box = gene_boxbyType(cidx_box->fd, get_DBoxoff(cidx_box),
+                                    get_DBoxlen(cidx_box), "thix"))) {
+        fprintf(FCGI_stderr, "Error: thix box not present in cidx box\n");
+        return OPJ_FALSE;
+    }
+
+    if (!(manf_box = gene_boxbyType(thix_box->fd, get_DBoxoff(thix_box),
+                                    get_DBoxlen(thix_box), "manf"))) {
+        fprintf(FCGI_stderr, "Error: manf box not present in thix box\n");
+        opj_free(thix_box);
+        return OPJ_FALSE;
+    }
+
+    manf = gene_manfbox(manf_box);
+    ptr = manf->first;
+    mhixseqoff = manf_box->offset + (OPJ_OFF_T)manf_box->length;
+    pos = 0;
+    tile_no = 0;
+    jp2idx->tileheader = (mhixbox_param_t **)opj_malloc(jp2idx->SIZ.XTnum *
+                         jp2idx->SIZ.YTnum * sizeof(mhixbox_param_t *));
+
+    while (ptr) {
+        if (!(mhix_box = gene_boxbyType(thix_box->fd, mhixseqoff + (OPJ_OFF_T)pos,
+                                        get_DBoxlen(thix_box) - manf_box->length - pos, "mhix"))) {
+            fprintf(FCGI_stderr, "Error: mhix box not present in thix box\n");
+            delete_manfbox(&manf);
+            opj_free(manf_box);
+            opj_free(thix_box);
+            return OPJ_FALSE;
+        }
+        mhix = gene_mhixbox(mhix_box);
+
+        pos += mhix_box->length;
+        ptr = ptr->next;
+
+        opj_free(mhix_box);
+        jp2idx->tileheader[tile_no++] = mhix;
+    }
+
+    delete_manfbox(&manf);
+    opj_free(manf_box);
+    opj_free(thix_box);
+
+    return OPJ_TRUE;
 }
 
-OPJ_BOOL set_ppixdata( box_param_t *cidx_box, index_param_t *jp2idx)
+OPJ_BOOL set_ppixdata(box_param_t *cidx_box, index_param_t *jp2idx)
 {
-  box_param_t *ppix_box, *faix_box, *manf_box;
-  manfbox_param_t *manf;     /**< manf*/
-  boxheader_param_t *bh;     /**< box headers*/
-  faixbox_param_t *faix;     /**< faix*/
-  OPJ_OFF_T inbox_offset;
-  int comp_idx;
-
-  if( !(ppix_box = gene_boxbyType( cidx_box->fd, get_DBoxoff( cidx_box), get_DBoxlen( cidx_box), "ppix"))){
-    fprintf( FCGI_stderr, "Error: ppix box not present in cidx box\n");
-    return OPJ_FALSE;
-  }
-
-  inbox_offset = get_DBoxoff( ppix_box);
-  if( !(manf_box = gene_boxbyType( ppix_box->fd, inbox_offset, get_DBoxlen( ppix_box), "manf"))){
-    fprintf( FCGI_stderr, "Error: manf box not present in ppix box\n");
-    opj_free( ppix_box);
-    return OPJ_FALSE;
-  }
-
-  opj_free( ppix_box);
-
-  manf = gene_manfbox( manf_box);
-  bh = search_boxheader( "faix", manf);
-  inbox_offset = manf_box->offset + (OPJ_OFF_T)manf_box->length;
-  
-  opj_free( manf_box);
-
-  jp2idx->precpacket = (faixbox_param_t **)opj_malloc( jp2idx->SIZ.Csiz*sizeof(faixbox_param_t *));
-
-  for( comp_idx=0; bh!=NULL; bh=bh->next, comp_idx++){
-    if( jp2idx->SIZ.Csiz <= comp_idx ){
-      fprintf( FCGI_stderr, "Error: num of faix boxes is not identical to num of components in ppix box\n");
-      return OPJ_FALSE;
-    }
-
-    if( !(faix_box = gene_boxbyOffset( cidx_box->fd, inbox_offset))){
-      fprintf( FCGI_stderr, "Error: faix box not present in ppix box\n");
-      return OPJ_FALSE;
-    }
-  
-    faix = gene_faixbox( faix_box);
-    jp2idx->precpacket[comp_idx] = faix;
-
-    inbox_offset = faix_box->offset + (OPJ_OFF_T)faix_box->length;
-    opj_free( faix_box);   
-  }
-  
-  delete_manfbox( &manf);
-
-  return OPJ_TRUE;
+    box_param_t *ppix_box, *faix_box, *manf_box;
+    manfbox_param_t *manf;     /**< manf*/
+    boxheader_param_t *bh;     /**< box headers*/
+    faixbox_param_t *faix;     /**< faix*/
+    OPJ_OFF_T inbox_offset;
+    int comp_idx;
+
+    if (!(ppix_box = gene_boxbyType(cidx_box->fd, get_DBoxoff(cidx_box),
+                                    get_DBoxlen(cidx_box), "ppix"))) {
+        fprintf(FCGI_stderr, "Error: ppix box not present in cidx box\n");
+        return OPJ_FALSE;
+    }
+
+    inbox_offset = get_DBoxoff(ppix_box);
+    if (!(manf_box = gene_boxbyType(ppix_box->fd, inbox_offset,
+                                    get_DBoxlen(ppix_box), "manf"))) {
+        fprintf(FCGI_stderr, "Error: manf box not present in ppix box\n");
+        opj_free(ppix_box);
+        return OPJ_FALSE;
+    }
+
+    opj_free(ppix_box);
+
+    manf = gene_manfbox(manf_box);
+    bh = search_boxheader("faix", manf);
+    inbox_offset = manf_box->offset + (OPJ_OFF_T)manf_box->length;
+
+    opj_free(manf_box);
+
+    jp2idx->precpacket = (faixbox_param_t **)opj_malloc(jp2idx->SIZ.Csiz * sizeof(
+                             faixbox_param_t *));
+
+    for (comp_idx = 0; bh != NULL; bh = bh->next, comp_idx++) {
+        if (jp2idx->SIZ.Csiz <= comp_idx) {
+            fprintf(FCGI_stderr,
+                    "Error: num of faix boxes is not identical to num of components in ppix box\n");
+            return OPJ_FALSE;
+        }
+
+        if (!(faix_box = gene_boxbyOffset(cidx_box->fd, inbox_offset))) {
+            fprintf(FCGI_stderr, "Error: faix box not present in ppix box\n");
+            return OPJ_FALSE;
+        }
+
+        faix = gene_faixbox(faix_box);
+        jp2idx->precpacket[comp_idx] = faix;
+
+        inbox_offset = faix_box->offset + (OPJ_OFF_T)faix_box->length;
+        opj_free(faix_box);
+    }
+
+    delete_manfbox(&manf);
+
+    return OPJ_TRUE;
 }
 
-OPJ_BOOL set_SIZmkrdata( markeridx_param_t *sizmkidx, codestream_param_t codestream, SIZmarker_param_t *SIZ)
+OPJ_BOOL set_SIZmkrdata(markeridx_param_t *sizmkidx,
+                        codestream_param_t codestream, SIZmarker_param_t *SIZ)
 {
-  marker_param_t sizmkr;
-  int i;
-
-  sizmkr = set_marker( codestream, sizmkidx->code, sizmkidx->offset, sizmkidx->length);
-
-  SIZ->Lsiz = fetch_marker2bytebigendian( sizmkr, 0);
-
-  if( sizmkidx->length != SIZ->Lsiz){
-    fprintf( FCGI_stderr, "Error: marker %#x index is not correct\n", sizmkidx->code);
-    return OPJ_FALSE;
-  }
-  
-  SIZ->Rsiz   = fetch_marker2bytebigendian( sizmkr, 2);
-  SIZ->Xsiz   = fetch_marker4bytebigendian( sizmkr, 4);
-  SIZ->Ysiz   = fetch_marker4bytebigendian( sizmkr, 8);
-  SIZ->XOsiz  = fetch_marker4bytebigendian( sizmkr, 12);
-  SIZ->YOsiz  = fetch_marker4bytebigendian( sizmkr, 16);
-  SIZ->XTsiz  = fetch_marker4bytebigendian( sizmkr, 20);
-  SIZ->YTsiz  = fetch_marker4bytebigendian( sizmkr, 24);
-  SIZ->XTOsiz = fetch_marker4bytebigendian( sizmkr, 28);
-  SIZ->YTOsiz = fetch_marker4bytebigendian( sizmkr, 32);
-  SIZ->Csiz   = fetch_marker2bytebigendian( sizmkr, 36);
-
-  SIZ->XTnum  = ( SIZ->Xsiz-SIZ->XTOsiz+SIZ->XTsiz-1)/SIZ->XTsiz;
-  SIZ->YTnum  = ( SIZ->Ysiz-SIZ->YTOsiz+SIZ->YTsiz-1)/SIZ->YTsiz;
-  
-  for( i=0; i<(int)SIZ->Csiz; i++){
-    SIZ->Ssiz[i]  = fetch_marker1byte( sizmkr, 38+i*3);
-    SIZ->XRsiz[i] = fetch_marker1byte( sizmkr, 39+i*3);
-    SIZ->YRsiz[i] = fetch_marker1byte( sizmkr, 40+i*3);
-  }
-  return OPJ_TRUE;
+    marker_param_t sizmkr;
+    int i;
+
+    sizmkr = set_marker(codestream, sizmkidx->code, sizmkidx->offset,
+                        sizmkidx->length);
+
+    SIZ->Lsiz = fetch_marker2bytebigendian(sizmkr, 0);
+
+    if (sizmkidx->length != SIZ->Lsiz) {
+        fprintf(FCGI_stderr, "Error: marker %#x index is not correct\n",
+                sizmkidx->code);
+        return OPJ_FALSE;
+    }
+
+    SIZ->Rsiz   = fetch_marker2bytebigendian(sizmkr, 2);
+    SIZ->Xsiz   = fetch_marker4bytebigendian(sizmkr, 4);
+    SIZ->Ysiz   = fetch_marker4bytebigendian(sizmkr, 8);
+    SIZ->XOsiz  = fetch_marker4bytebigendian(sizmkr, 12);
+    SIZ->YOsiz  = fetch_marker4bytebigendian(sizmkr, 16);
+    SIZ->XTsiz  = fetch_marker4bytebigendian(sizmkr, 20);
+    SIZ->YTsiz  = fetch_marker4bytebigendian(sizmkr, 24);
+    SIZ->XTOsiz = fetch_marker4bytebigendian(sizmkr, 28);
+    SIZ->YTOsiz = fetch_marker4bytebigendian(sizmkr, 32);
+    SIZ->Csiz   = fetch_marker2bytebigendian(sizmkr, 36);
+
+    SIZ->XTnum  = (SIZ->Xsiz - SIZ->XTOsiz + SIZ->XTsiz - 1) / SIZ->XTsiz;
+    SIZ->YTnum  = (SIZ->Ysiz - SIZ->YTOsiz + SIZ->YTsiz - 1) / SIZ->YTsiz;
+
+    for (i = 0; i < (int)SIZ->Csiz; i++) {
+        SIZ->Ssiz[i]  = fetch_marker1byte(sizmkr, 38 + i * 3);
+        SIZ->XRsiz[i] = fetch_marker1byte(sizmkr, 39 + i * 3);
+        SIZ->YRsiz[i] = fetch_marker1byte(sizmkr, 40 + i * 3);
+    }
+    return OPJ_TRUE;
 }
 
-OPJ_BOOL set_CODmkrdata( markeridx_param_t *codmkidx, codestream_param_t codestream, CODmarker_param_t *COD)
+OPJ_BOOL set_CODmkrdata(markeridx_param_t *codmkidx,
+                        codestream_param_t codestream, CODmarker_param_t *COD)
 {
-  marker_param_t codmkr;
-  int i;
-
-  codmkr = set_marker( codestream, codmkidx->code, codmkidx->offset, codmkidx->length);
-
-  COD->Lcod = fetch_marker2bytebigendian( codmkr, 0);
-
-  if( codmkidx->length != COD->Lcod){
-    fprintf( FCGI_stderr, "Error: marker %#x index is not correct\n", codmkidx->code);
-    return OPJ_FALSE;
-  }
-
-  COD->Scod   = fetch_marker1byte( codmkr, 2);
-  COD->prog_order  = fetch_marker1byte( codmkr, 3);
-  COD->numOflayers = fetch_marker2bytebigendian( codmkr, 4);
-  COD->numOfdecomp = fetch_marker1byte( codmkr, 7);
-  
-  if(COD->Scod & 0x01){
-    COD->XPsiz = (Byte4_t *)opj_malloc( (OPJ_SIZE_T)(COD->numOfdecomp+1)*sizeof(Byte4_t));
-    COD->YPsiz = (Byte4_t *)opj_malloc( (OPJ_SIZE_T)(COD->numOfdecomp+1)*sizeof(Byte4_t));
-
-    for( i=0; i<=COD->numOfdecomp; i++){
-      /*precinct size*/
-      COD->XPsiz[i] = (Byte2_t)pow( 2, fetch_marker1byte( codmkr, 12+i) & 0x0F);
-      COD->YPsiz[i] = (Byte2_t)pow( 2,(fetch_marker1byte( codmkr, 12+i) & 0xF0) >> 4);
-    }
-  }
-  else{
-    COD->XPsiz = (Byte4_t *)opj_malloc( sizeof(Byte4_t));
-    COD->YPsiz = (Byte4_t *)opj_malloc( sizeof(Byte4_t));
-
-    COD->XPsiz[0] = COD->YPsiz[0] = 1 << 15; /* pow(2,15); */
-  }
-  return OPJ_TRUE;
+    marker_param_t codmkr;
+    int i;
+
+    codmkr = set_marker(codestream, codmkidx->code, codmkidx->offset,
+                        codmkidx->length);
+
+    COD->Lcod = fetch_marker2bytebigendian(codmkr, 0);
+
+    if (codmkidx->length != COD->Lcod) {
+        fprintf(FCGI_stderr, "Error: marker %#x index is not correct\n",
+                codmkidx->code);
+        return OPJ_FALSE;
+    }
+
+    COD->Scod   = fetch_marker1byte(codmkr, 2);
+    COD->prog_order  = fetch_marker1byte(codmkr, 3);
+    COD->numOflayers = fetch_marker2bytebigendian(codmkr, 4);
+    COD->numOfdecomp = fetch_marker1byte(codmkr, 7);
+
+    if (COD->Scod & 0x01) {
+        COD->XPsiz = (Byte4_t *)opj_malloc((OPJ_SIZE_T)(COD->numOfdecomp + 1) * sizeof(
+                                               Byte4_t));
+        COD->YPsiz = (Byte4_t *)opj_malloc((OPJ_SIZE_T)(COD->numOfdecomp + 1) * sizeof(
+                                               Byte4_t));
+
+        for (i = 0; i <= COD->numOfdecomp; i++) {
+            /*precinct size*/
+            COD->XPsiz[i] = (Byte2_t)pow(2, fetch_marker1byte(codmkr, 12 + i) & 0x0F);
+            COD->YPsiz[i] = (Byte2_t)pow(2, (fetch_marker1byte(codmkr,
+                                             12 + i) & 0xF0) >> 4);
+        }
+    } else {
+        COD->XPsiz = (Byte4_t *)opj_malloc(sizeof(Byte4_t));
+        COD->YPsiz = (Byte4_t *)opj_malloc(sizeof(Byte4_t));
+
+        COD->XPsiz[0] = COD->YPsiz[0] = 1 << 15; /* pow(2,15); */
+    }
+    return OPJ_TRUE;
 }
 
 
@@ -659,73 +712,80 @@ OPJ_BOOL set_CODmkrdata( markeridx_param_t *codmkidx, codestream_param_t codestr
 #ifdef max
 #undef max
 #endif
-Byte4_t max( Byte4_t n1, Byte4_t n2);
-Byte4_t min( Byte4_t n1, Byte4_t n2);
+Byte4_t max(Byte4_t n1, Byte4_t n2);
+Byte4_t min(Byte4_t n1, Byte4_t n2);
 
-range_param_t get_tile_range( Byte4_t Osiz, Byte4_t siz, Byte4_t TOsiz, Byte4_t Tsiz, Byte4_t tile_XYid, int level);
+range_param_t get_tile_range(Byte4_t Osiz, Byte4_t siz, Byte4_t TOsiz,
+                             Byte4_t Tsiz, Byte4_t tile_XYid, int level);
 
-range_param_t get_tile_Xrange( SIZmarker_param_t SIZ, Byte4_t tile_id, int level)
+range_param_t get_tile_Xrange(SIZmarker_param_t SIZ, Byte4_t tile_id, int level)
 {
-  return get_tile_range( SIZ.XOsiz, SIZ.Xsiz, SIZ.XTOsiz, SIZ.XTsiz, tile_id%SIZ.XTnum, level);
+    return get_tile_range(SIZ.XOsiz, SIZ.Xsiz, SIZ.XTOsiz, SIZ.XTsiz,
+                          tile_id % SIZ.XTnum, level);
 }
 
-range_param_t get_tile_Yrange( SIZmarker_param_t SIZ, Byte4_t tile_id, int level)
+range_param_t get_tile_Yrange(SIZmarker_param_t SIZ, Byte4_t tile_id, int level)
 {
-  return get_tile_range( SIZ.YOsiz, SIZ.Ysiz, SIZ.YTOsiz, SIZ.YTsiz, tile_id/SIZ.XTnum, level);
+    return get_tile_range(SIZ.YOsiz, SIZ.Ysiz, SIZ.YTOsiz, SIZ.YTsiz,
+                          tile_id / SIZ.XTnum, level);
 }
 
-range_param_t get_tile_range( Byte4_t Osiz, Byte4_t siz, Byte4_t TOsiz, Byte4_t Tsiz, Byte4_t tile_XYid, int level)
+range_param_t get_tile_range(Byte4_t Osiz, Byte4_t siz, Byte4_t TOsiz,
+                             Byte4_t Tsiz, Byte4_t tile_XYid, int level)
 {
-  range_param_t range;
-  int n;
+    range_param_t range;
+    int n;
 
-  range.minvalue = max( Osiz, TOsiz+tile_XYid*Tsiz);
-  range.maxvalue = min( siz,  TOsiz+(tile_XYid+1)*Tsiz);
+    range.minvalue = max(Osiz, TOsiz + tile_XYid * Tsiz);
+    range.maxvalue = min(siz,  TOsiz + (tile_XYid + 1) * Tsiz);
 
-  for( n=0; n<level; n++){
-    range.minvalue = (Byte4_t)ceil(range.minvalue/2.0);
-    range.maxvalue = (Byte4_t)ceil(range.maxvalue/2.0);
-  }
-  return range;
+    for (n = 0; n < level; n++) {
+        range.minvalue = (Byte4_t)ceil(range.minvalue / 2.0);
+        range.maxvalue = (Byte4_t)ceil(range.maxvalue / 2.0);
+    }
+    return range;
 }
 
-Byte4_t get_tile_XSiz( SIZmarker_param_t SIZ, Byte4_t tile_id, int level)
+Byte4_t get_tile_XSiz(SIZmarker_param_t SIZ, Byte4_t tile_id, int level)
 {
-  range_param_t tile_Xrange;
+    range_param_t tile_Xrange;
 
-  tile_Xrange = get_tile_Xrange( SIZ, tile_id, level);
-  return tile_Xrange.maxvalue - tile_Xrange.minvalue;
+    tile_Xrange = get_tile_Xrange(SIZ, tile_id, level);
+    return tile_Xrange.maxvalue - tile_Xrange.minvalue;
 }
 
-Byte4_t get_tile_YSiz( SIZmarker_param_t SIZ, Byte4_t tile_id, int level)
+Byte4_t get_tile_YSiz(SIZmarker_param_t SIZ, Byte4_t tile_id, int level)
 {
-  range_param_t tile_Yrange;
+    range_param_t tile_Yrange;
 
-  tile_Yrange = get_tile_Yrange( SIZ, tile_id, level);
-  return tile_Yrange.maxvalue - tile_Yrange.minvalue;
+    tile_Yrange = get_tile_Yrange(SIZ, tile_id, level);
+    return tile_Yrange.maxvalue - tile_Yrange.minvalue;
 }
 
 /* TODO: what is this code doing ? will all compiler be able to optimize the following ? */
-Byte4_t max( Byte4_t n1, Byte4_t n2)
+Byte4_t max(Byte4_t n1, Byte4_t n2)
 {
-  if( n1 < n2)
-    return n2;
-  else
-    return n1;
+    if (n1 < n2) {
+        return n2;
+    } else {
+        return n1;
+    }
 }
 
-Byte4_t min( Byte4_t n1, Byte4_t n2)
+Byte4_t min(Byte4_t n1, Byte4_t n2)
 {
-  if( n1 < n2)
-    return n1;
-  else
-    return n2;
+    if (n1 < n2) {
+        return n1;
+    } else {
+        return n2;
+    }
 }
 
-OPJ_BOOL isJPTfeasible( index_param_t index)
+OPJ_BOOL isJPTfeasible(index_param_t index)
 {
-  if( 1 < get_nmax( index.tilepart))
-    return OPJ_TRUE;
-  else
-    return OPJ_FALSE;
+    if (1 < get_nmax(index.tilepart)) {
+        return OPJ_TRUE;
+    } else {
+        return OPJ_FALSE;
+    }
 }
index 519a47b55888cbb81495243b43e1ef983136dc81..e16415ffbf72373f0bccb85a9f671639f6467b3d 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
  * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara 
+ * Copyright (c) 2010-2011, Kaori Hagihara
  * Copyright (c) 2011,      Lucian Corlaciu, GSoC
  * All rights reserved.
  *
 #endif /*SERVER */
 
 
-SIZmarker_param_t get_SIZmkrdata_from_j2kstream( Byte_t *SIZstream);
-CODmarker_param_t get_CODmkrdata_from_j2kstream( Byte_t *CODstream);
+SIZmarker_param_t get_SIZmkrdata_from_j2kstream(Byte_t *SIZstream);
+CODmarker_param_t get_CODmkrdata_from_j2kstream(Byte_t *CODstream);
 
-OPJ_BOOL get_mainheader_from_j2kstream( Byte_t *j2kstream, SIZmarker_param_t *SIZ, CODmarker_param_t *COD)
+OPJ_BOOL get_mainheader_from_j2kstream(Byte_t *j2kstream,
+                                       SIZmarker_param_t *SIZ, CODmarker_param_t *COD)
 {
-  if( *j2kstream++ != 0xff || *j2kstream++ != 0x4f){
-    fprintf( FCGI_stderr, "Error, j2kstream is not starting with SOC marker\n");
-    return OPJ_FALSE;
-  }
-  
-  if( SIZ){
-    *SIZ = get_SIZmkrdata_from_j2kstream( j2kstream);
-    if( SIZ->Lsiz == 0)
-      return OPJ_FALSE;
-
-    j2kstream += (SIZ->Lsiz+2);
-  }
-
-  if( COD){
-    if( !SIZ)
-      j2kstream += (big2( j2kstream+2) + 2);
-    
-    *COD = get_CODmkrdata_from_j2kstream( j2kstream);
-    if( COD->Lcod == 0)
-      return OPJ_FALSE;
-  }
-  return OPJ_TRUE;
+    if (*j2kstream++ != 0xff || *j2kstream++ != 0x4f) {
+        fprintf(FCGI_stderr, "Error, j2kstream is not starting with SOC marker\n");
+        return OPJ_FALSE;
+    }
+
+    if (SIZ) {
+        *SIZ = get_SIZmkrdata_from_j2kstream(j2kstream);
+        if (SIZ->Lsiz == 0) {
+            return OPJ_FALSE;
+        }
+
+        j2kstream += (SIZ->Lsiz + 2);
+    }
+
+    if (COD) {
+        if (!SIZ) {
+            j2kstream += (big2(j2kstream + 2) + 2);
+        }
+
+        *COD = get_CODmkrdata_from_j2kstream(j2kstream);
+        if (COD->Lcod == 0) {
+            return OPJ_FALSE;
+        }
+    }
+    return OPJ_TRUE;
 }
 
-SIZmarker_param_t get_SIZmkrdata_from_j2kstream( Byte_t *SIZstream)
+SIZmarker_param_t get_SIZmkrdata_from_j2kstream(Byte_t *SIZstream)
 {
-  SIZmarker_param_t SIZ;
-  int i;
+    SIZmarker_param_t SIZ;
+    int i;
+
+    if (*SIZstream++ != 0xff || *SIZstream++ != 0x51) {
+        fprintf(FCGI_stderr,
+                "Error, SIZ marker not found in the reconstructed j2kstream\n");
+        memset(&SIZ, 0, sizeof(SIZ));
+        return SIZ;
+    }
+
+    SIZ.Lsiz   = big2(SIZstream);
+    SIZ.Rsiz   = big2(SIZstream + 2);
+    SIZ.Xsiz   = big4(SIZstream + 4);
+    SIZ.Ysiz   = big4(SIZstream + 8);
+    SIZ.XOsiz  = big4(SIZstream + 12);
+    SIZ.YOsiz  = big4(SIZstream + 16);
+    SIZ.XTsiz  = big4(SIZstream + 20);
+    SIZ.YTsiz  = big4(SIZstream + 24);
+    SIZ.XTOsiz = big4(SIZstream + 28);
+    SIZ.YTOsiz = big4(SIZstream + 32);
+    SIZ.Csiz   = big2(SIZstream + 36);
+
+    SIZ.XTnum  = (SIZ.Xsiz - SIZ.XTOsiz + SIZ.XTsiz - 1) / SIZ.XTsiz;
+    SIZ.YTnum  = (SIZ.Ysiz - SIZ.YTOsiz + SIZ.YTsiz - 1) / SIZ.YTsiz;
+
+    for (i = 0; i < (int)SIZ.Csiz; i++) {
+        SIZ.Ssiz[i]  = *(SIZstream + (38 + i * 3));
+        SIZ.XRsiz[i] = *(SIZstream + (39 + i * 3));
+        SIZ.YRsiz[i] = *(SIZstream + (40 + i * 3));
+    }
 
-  if( *SIZstream++ != 0xff || *SIZstream++ != 0x51){
-    fprintf( FCGI_stderr, "Error, SIZ marker not found in the reconstructed j2kstream\n");
-    memset( &SIZ, 0, sizeof( SIZ ) );
     return SIZ;
-  }
-
-  SIZ.Lsiz   = big2( SIZstream);
-  SIZ.Rsiz   = big2( SIZstream+2);
-  SIZ.Xsiz   = big4( SIZstream+4);
-  SIZ.Ysiz   = big4( SIZstream+8);
-  SIZ.XOsiz  = big4( SIZstream+12);
-  SIZ.YOsiz  = big4( SIZstream+16);
-  SIZ.XTsiz  = big4( SIZstream+20);
-  SIZ.YTsiz  = big4( SIZstream+24);
-  SIZ.XTOsiz = big4( SIZstream+28);
-  SIZ.YTOsiz = big4( SIZstream+32);
-  SIZ.Csiz   = big2( SIZstream+36);
-
-  SIZ.XTnum  = ( SIZ.Xsiz-SIZ.XTOsiz+SIZ.XTsiz-1)/SIZ.XTsiz;
-  SIZ.YTnum  = ( SIZ.Ysiz-SIZ.YTOsiz+SIZ.YTsiz-1)/SIZ.YTsiz;
-
-  for( i=0; i<(int)SIZ.Csiz; i++){
-    SIZ.Ssiz[i]  = *(SIZstream+(38+i*3));
-    SIZ.XRsiz[i] = *(SIZstream+(39+i*3));
-    SIZ.YRsiz[i] = *(SIZstream+(40+i*3));
-  }
-
-  return SIZ;
 }
 
-CODmarker_param_t get_CODmkrdata_from_j2kstream( Byte_t *CODstream)
+CODmarker_param_t get_CODmkrdata_from_j2kstream(Byte_t *CODstream)
 {
-  CODmarker_param_t COD;
-  int i;
+    CODmarker_param_t COD;
+    int i;
+
+    if (*CODstream++ != 0xff || *CODstream++ != 0x52) {
+        fprintf(FCGI_stderr,
+                "Error, COD marker not found in the reconstructed j2kstream\n");
+        memset(&COD, 0, sizeof(COD));
+        return COD;
+    }
 
-  if( *CODstream++ != 0xff || *CODstream++ != 0x52){
-    fprintf( FCGI_stderr, "Error, COD marker not found in the reconstructed j2kstream\n");
-    memset(&COD, 0, sizeof(COD));
-    return COD;
-  }
-  
-  COD.Lcod = big2( CODstream);
-  COD.Scod = *( CODstream+2);
-  COD.prog_order = *( CODstream+3);
-  COD.numOflayers = big2( CODstream+4);
-  COD.numOfdecomp = *( CODstream+7);
-
-  if(COD.Scod & 0x01){
-    COD.XPsiz = (Byte4_t *)opj_malloc( (OPJ_SIZE_T)(COD.numOfdecomp+1)*sizeof(Byte4_t));
-    COD.YPsiz = (Byte4_t *)opj_malloc( (OPJ_SIZE_T)(COD.numOfdecomp+1)*sizeof(Byte4_t));
-    
-    for( i=0; i<=COD.numOfdecomp; i++){
-      /*precinct size */
-      COD.XPsiz[i] = (Byte4_t)pow( 2, *( CODstream+12+i) & 0x0F);
-      COD.YPsiz[i] = (Byte4_t)pow( 2, (*( CODstream+12+i) & 0xF0) >> 4);
+    COD.Lcod = big2(CODstream);
+    COD.Scod = *(CODstream + 2);
+    COD.prog_order = *(CODstream + 3);
+    COD.numOflayers = big2(CODstream + 4);
+    COD.numOfdecomp = *(CODstream + 7);
+
+    if (COD.Scod & 0x01) {
+        COD.XPsiz = (Byte4_t *)opj_malloc((OPJ_SIZE_T)(COD.numOfdecomp + 1) * sizeof(
+                                              Byte4_t));
+        COD.YPsiz = (Byte4_t *)opj_malloc((OPJ_SIZE_T)(COD.numOfdecomp + 1) * sizeof(
+                                              Byte4_t));
+
+        for (i = 0; i <= COD.numOfdecomp; i++) {
+            /*precinct size */
+            COD.XPsiz[i] = (Byte4_t)pow(2, *(CODstream + 12 + i) & 0x0F);
+            COD.YPsiz[i] = (Byte4_t)pow(2, (*(CODstream + 12 + i) & 0xF0) >> 4);
+        }
+    } else {
+        COD.XPsiz = (Byte4_t *)opj_malloc(sizeof(Byte4_t));
+        COD.YPsiz = (Byte4_t *)opj_malloc(sizeof(Byte4_t));
+        COD.XPsiz[0] = COD.YPsiz[0] = 1 << 15; /*pow(2,15)*/
     }
-  }
-  else{
-    COD.XPsiz = (Byte4_t *)opj_malloc( sizeof(Byte4_t));
-    COD.YPsiz = (Byte4_t *)opj_malloc( sizeof(Byte4_t));
-    COD.XPsiz[0] = COD.YPsiz[0] = 1<<15; /*pow(2,15)*/
-  }
-  return COD;
+    return COD;
 }
 
 
-OPJ_BOOL modify_SIZmkrstream( SIZmarker_param_t SIZ, int difOfdecomplev, Byte_t *SIZstream);
-Byte2_t modify_CODmkrstream( CODmarker_param_t COD, int numOfdecomp, Byte_t *CODstream);
+OPJ_BOOL modify_SIZmkrstream(SIZmarker_param_t SIZ, int difOfdecomplev,
+                             Byte_t *SIZstream);
+Byte2_t modify_CODmkrstream(CODmarker_param_t COD, int numOfdecomp,
+                            Byte_t *CODstream);
 
-OPJ_BOOL modify_mainheader( Byte_t *j2kstream, int numOfdecomp, SIZmarker_param_t SIZ, CODmarker_param_t COD, Byte8_t *j2klen)
+OPJ_BOOL modify_mainheader(Byte_t *j2kstream, int numOfdecomp,
+                           SIZmarker_param_t SIZ, CODmarker_param_t COD, Byte8_t *j2klen)
 {
-  Byte2_t newLcod;
-
-  if( *j2kstream++ != 0xff || *j2kstream++ != 0x4f){
-    fprintf( FCGI_stderr, "Error, j2kstream is not starting with SOC marker\n");
-    return OPJ_FALSE;
-  }
-
-  if(!modify_SIZmkrstream( SIZ, COD.numOfdecomp-numOfdecomp, j2kstream))
-    return OPJ_FALSE;
-  
-  j2kstream += SIZ.Lsiz+2;
-  if( !(newLcod = modify_CODmkrstream( COD, numOfdecomp, j2kstream)))
-    return OPJ_FALSE;
-
-  memmove( j2kstream+2+newLcod, j2kstream+2+COD.Lcod, *j2klen - (Byte8_t)(SIZ.Lsiz+COD.Lcod+6));
-  *j2klen -= (Byte8_t)( COD.Lcod - newLcod);
-  
-  return OPJ_TRUE;
+    Byte2_t newLcod;
+
+    if (*j2kstream++ != 0xff || *j2kstream++ != 0x4f) {
+        fprintf(FCGI_stderr, "Error, j2kstream is not starting with SOC marker\n");
+        return OPJ_FALSE;
+    }
+
+    if (!modify_SIZmkrstream(SIZ, COD.numOfdecomp - numOfdecomp, j2kstream)) {
+        return OPJ_FALSE;
+    }
+
+    j2kstream += SIZ.Lsiz + 2;
+    if (!(newLcod = modify_CODmkrstream(COD, numOfdecomp, j2kstream))) {
+        return OPJ_FALSE;
+    }
+
+    memmove(j2kstream + 2 + newLcod, j2kstream + 2 + COD.Lcod,
+            *j2klen - (Byte8_t)(SIZ.Lsiz + COD.Lcod + 6));
+    *j2klen -= (Byte8_t)(COD.Lcod - newLcod);
+
+    return OPJ_TRUE;
 }
 
-OPJ_BOOL modify_SIZmkrstream( SIZmarker_param_t SIZ, int difOfdecomplev, Byte_t *SIZstream)
+OPJ_BOOL modify_SIZmkrstream(SIZmarker_param_t SIZ, int difOfdecomplev,
+                             Byte_t *SIZstream)
 {
-  int i;
-  
-  if( *SIZstream++ != 0xff || *SIZstream++ != 0x51){
-    fprintf( FCGI_stderr, "Error, SIZ marker not found in the reconstructed j2kstream\n");
-    return OPJ_FALSE;
-  }
-    
-  for( i=0; i<difOfdecomplev; i++){
-    SIZ.Xsiz   = (Byte4_t)ceil( (double)SIZ.Xsiz/2.0);
-    SIZ.Ysiz   = (Byte4_t)ceil( (double)SIZ.Ysiz/2.0);
-    SIZ.XOsiz  = (Byte4_t)ceil( (double)SIZ.XOsiz/2.0);
-    SIZ.YOsiz  = (Byte4_t)ceil( (double)SIZ.YOsiz/2.0);
-    SIZ.XTsiz  = (Byte4_t)ceil( (double)SIZ.XTsiz/2.0);
-    SIZ.YTsiz  = (Byte4_t)ceil( (double)SIZ.YTsiz/2.0);
-    SIZ.XTOsiz = (Byte4_t)ceil( (double)SIZ.XTOsiz/2.0);
-    SIZ.YTOsiz = (Byte4_t)ceil( (double)SIZ.YTOsiz/2.0);
-  }
-
-  SIZstream += 4; /* skip Lsiz + Rsiz */
-
-  modify_4Bytecode( SIZ.Xsiz,   SIZstream);
-  modify_4Bytecode( SIZ.Ysiz,   SIZstream+4);
-  modify_4Bytecode( SIZ.XOsiz,  SIZstream+8);
-  modify_4Bytecode( SIZ.YOsiz,  SIZstream+12);
-  modify_4Bytecode( SIZ.XTsiz,  SIZstream+16);
-  modify_4Bytecode( SIZ.YTsiz,  SIZstream+20);
-  modify_4Bytecode( SIZ.XTOsiz, SIZstream+24);
-  modify_4Bytecode( SIZ.YTOsiz, SIZstream+28);
-
-  return OPJ_TRUE;
+    int i;
+
+    if (*SIZstream++ != 0xff || *SIZstream++ != 0x51) {
+        fprintf(FCGI_stderr,
+                "Error, SIZ marker not found in the reconstructed j2kstream\n");
+        return OPJ_FALSE;
+    }
+
+    for (i = 0; i < difOfdecomplev; i++) {
+        SIZ.Xsiz   = (Byte4_t)ceil((double)SIZ.Xsiz / 2.0);
+        SIZ.Ysiz   = (Byte4_t)ceil((double)SIZ.Ysiz / 2.0);
+        SIZ.XOsiz  = (Byte4_t)ceil((double)SIZ.XOsiz / 2.0);
+        SIZ.YOsiz  = (Byte4_t)ceil((double)SIZ.YOsiz / 2.0);
+        SIZ.XTsiz  = (Byte4_t)ceil((double)SIZ.XTsiz / 2.0);
+        SIZ.YTsiz  = (Byte4_t)ceil((double)SIZ.YTsiz / 2.0);
+        SIZ.XTOsiz = (Byte4_t)ceil((double)SIZ.XTOsiz / 2.0);
+        SIZ.YTOsiz = (Byte4_t)ceil((double)SIZ.YTOsiz / 2.0);
+    }
+
+    SIZstream += 4; /* skip Lsiz + Rsiz */
+
+    modify_4Bytecode(SIZ.Xsiz,   SIZstream);
+    modify_4Bytecode(SIZ.Ysiz,   SIZstream + 4);
+    modify_4Bytecode(SIZ.XOsiz,  SIZstream + 8);
+    modify_4Bytecode(SIZ.YOsiz,  SIZstream + 12);
+    modify_4Bytecode(SIZ.XTsiz,  SIZstream + 16);
+    modify_4Bytecode(SIZ.YTsiz,  SIZstream + 20);
+    modify_4Bytecode(SIZ.XTOsiz, SIZstream + 24);
+    modify_4Bytecode(SIZ.YTOsiz, SIZstream + 28);
+
+    return OPJ_TRUE;
 }
 
-Byte2_t modify_CODmkrstream( CODmarker_param_t COD, int numOfdecomp, Byte_t *CODstream)
+Byte2_t modify_CODmkrstream(CODmarker_param_t COD, int numOfdecomp,
+                            Byte_t *CODstream)
 {
-  Byte2_t newLcod;
-
-  assert( numOfdecomp >= 0 || numOfdecomp <= 255 );
-  if( *CODstream++ != 0xff || *CODstream++ != 0x52){
-    fprintf( FCGI_stderr, "Error, COD marker not found in the reconstructed j2kstream\n");
-    return 0;
-  }
-  
-  if( COD.Scod & 0x01){
-    newLcod  = (Byte2_t)(13+numOfdecomp);
-
-    *CODstream++ = (Byte_t)((Byte2_t)(newLcod & 0xff00) >> 8);
-    *CODstream++ = (Byte_t)(newLcod & 0x00ff);
-  }
-  else{
-    newLcod = COD.Lcod;
-    CODstream += 2;
-  }
-  
-  CODstream += 5; /* skip Scod & SGcod */
-  
-  /* SPcod */
-  *CODstream++ = (Byte_t) numOfdecomp;
-  
-  return newLcod;
+    Byte2_t newLcod;
+
+    assert(numOfdecomp >= 0 || numOfdecomp <= 255);
+    if (*CODstream++ != 0xff || *CODstream++ != 0x52) {
+        fprintf(FCGI_stderr,
+                "Error, COD marker not found in the reconstructed j2kstream\n");
+        return 0;
+    }
+
+    if (COD.Scod & 0x01) {
+        newLcod  = (Byte2_t)(13 + numOfdecomp);
+
+        *CODstream++ = (Byte_t)((Byte2_t)(newLcod & 0xff00) >> 8);
+        *CODstream++ = (Byte_t)(newLcod & 0x00ff);
+    } else {
+        newLcod = COD.Lcod;
+        CODstream += 2;
+    }
+
+    CODstream += 5; /* skip Scod & SGcod */
+
+    /* SPcod */
+    *CODstream++ = (Byte_t) numOfdecomp;
+
+    return newLcod;
 }
 
-OPJ_BOOL modify_COCmkrstream( int numOfdecomp, Byte_t *COCstream, Byte2_t Csiz, Byte2_t *oldLcoc, Byte2_t *newLcoc);
+OPJ_BOOL modify_COCmkrstream(int numOfdecomp, Byte_t *COCstream, Byte2_t Csiz,
+                             Byte2_t *oldLcoc, Byte2_t *newLcoc);
 
-OPJ_BOOL modify_tileheader( Byte_t *j2kstream, Byte8_t SOToffset, int numOfdecomp, Byte2_t Csiz, Byte8_t *j2klen)
+OPJ_BOOL modify_tileheader(Byte_t *j2kstream, Byte8_t SOToffset,
+                           int numOfdecomp, Byte2_t Csiz, Byte8_t *j2klen)
 {
-  Byte4_t Psot; /* tile part length ref A.4.2 Start of tile-part SOT */
-  Byte_t *thstream, *SOTstream, *Psot_stream;
-  Byte2_t oldLcoc, newLcoc;
-  
-  SOTstream = thstream = j2kstream+SOToffset;
-  
-  if( *SOTstream++ != 0xff || *SOTstream++ != 0x90){
-    fprintf( FCGI_stderr, "Error, thstream is not starting with SOT marker\n");
-    return OPJ_FALSE;
-  }
-
-  SOTstream += 4; /* skip Lsot & Isot */
-  Psot = (Byte4_t)((SOTstream[0]<<24)+(SOTstream[1]<<16)+(SOTstream[2]<<8)+(SOTstream[3]));
-  Psot_stream = SOTstream;
-  
-  thstream += 12; /* move to next marker (SOT always 12bytes) */
-  
-  while( !( *thstream == 0xff && *(thstream+1) == 0x93)){ /* search SOD */
-    if( numOfdecomp != -1 && *thstream == 0xff && *(thstream+1) == 0x53){ /* COC */
-      if( !modify_COCmkrstream( numOfdecomp, thstream, Csiz, &oldLcoc, &newLcoc))
-       return OPJ_FALSE;
-      
-      memmove( thstream+newLcoc+2, thstream+oldLcoc+2, *j2klen - (Byte8_t)(thstream-j2kstream+oldLcoc+2));
-      *j2klen -= (Byte8_t)( oldLcoc - newLcoc);
+    Byte4_t Psot; /* tile part length ref A.4.2 Start of tile-part SOT */
+    Byte_t *thstream, *SOTstream, *Psot_stream;
+    Byte2_t oldLcoc, newLcoc;
+
+    SOTstream = thstream = j2kstream + SOToffset;
+
+    if (*SOTstream++ != 0xff || *SOTstream++ != 0x90) {
+        fprintf(FCGI_stderr, "Error, thstream is not starting with SOT marker\n");
+        return OPJ_FALSE;
+    }
+
+    SOTstream += 4; /* skip Lsot & Isot */
+    Psot = (Byte4_t)((SOTstream[0] << 24) + (SOTstream[1] << 16) +
+                     (SOTstream[2] << 8) + (SOTstream[3]));
+    Psot_stream = SOTstream;
+
+    thstream += 12; /* move to next marker (SOT always 12bytes) */
+
+    while (!(*thstream == 0xff && *(thstream + 1) == 0x93)) { /* search SOD */
+        if (numOfdecomp != -1 && *thstream == 0xff &&
+                *(thstream + 1) == 0x53) { /* COC */
+            if (!modify_COCmkrstream(numOfdecomp, thstream, Csiz, &oldLcoc, &newLcoc)) {
+                return OPJ_FALSE;
+            }
+
+            memmove(thstream + newLcoc + 2, thstream + oldLcoc + 2,
+                    *j2klen - (Byte8_t)(thstream - j2kstream + oldLcoc + 2));
+            *j2klen -= (Byte8_t)(oldLcoc - newLcoc);
+        }
+        thstream += 2;
+        thstream += ((thstream[0] << 8) + (thstream[1])); /* marker length */
     }
-    thstream += 2;
-    thstream += ((thstream[0]<<8)+(thstream[1])); /* marker length */
-  }
-
-  if( (*j2klen)-SOToffset != Psot){
-    Psot = (Byte4_t)((*j2klen)-SOToffset);
-    modify_4Bytecode( Psot, Psot_stream);
-  }
-  return OPJ_TRUE;
+
+    if ((*j2klen) - SOToffset != Psot) {
+        Psot = (Byte4_t)((*j2klen) - SOToffset);
+        modify_4Bytecode(Psot, Psot_stream);
+    }
+    return OPJ_TRUE;
 }
 
-OPJ_BOOL modify_COCmkrstream( int numOfdecomp, Byte_t *COCstream, Byte2_t Csiz, Byte2_t *oldLcoc, Byte2_t *newLcoc)
+OPJ_BOOL modify_COCmkrstream(int numOfdecomp, Byte_t *COCstream, Byte2_t Csiz,
+                             Byte2_t *oldLcoc, Byte2_t *newLcoc)
 {
-  if( numOfdecomp < 0 || numOfdecomp > 255 ) return OPJ_FALSE;
-  if( *COCstream++ != 0xff || *COCstream++ != 0x53){
-    fprintf( FCGI_stderr, "Error, COC marker not found in the reconstructed j2kstream\n");
-    return OPJ_FALSE;
-  }
-  
-  *oldLcoc = big2( COCstream);
-  *newLcoc = (Byte2_t)((Csiz < 257 ? 10 : 11) + numOfdecomp);
-  *COCstream++ = (Byte_t)((Byte2_t)((*newLcoc) & 0xff00) >> 8);
-  *COCstream++ = (Byte_t)((*newLcoc) & 0x00ff);
-      
-  if( Csiz < 257) COCstream +=2; /* skip Ccoc & Scoc */
-  else COCstream += 3;
-      
-  *COCstream = (Byte_t)numOfdecomp;
-  
-  return OPJ_TRUE;
+    if (numOfdecomp < 0 || numOfdecomp > 255) {
+        return OPJ_FALSE;
+    }
+    if (*COCstream++ != 0xff || *COCstream++ != 0x53) {
+        fprintf(FCGI_stderr,
+                "Error, COC marker not found in the reconstructed j2kstream\n");
+        return OPJ_FALSE;
+    }
+
+    *oldLcoc = big2(COCstream);
+    *newLcoc = (Byte2_t)((Csiz < 257 ? 10 : 11) + numOfdecomp);
+    *COCstream++ = (Byte_t)((Byte2_t)((*newLcoc) & 0xff00) >> 8);
+    *COCstream++ = (Byte_t)((*newLcoc) & 0x00ff);
+
+    if (Csiz < 257) {
+        COCstream += 2;    /* skip Ccoc & Scoc */
+    } else {
+        COCstream += 3;
+    }
+
+    *COCstream = (Byte_t)numOfdecomp;
+
+    return OPJ_TRUE;
 }
index 14e5970d2ba98a8c503f267d2be151c4bcebf479..e6d1973b4ffdb3a1677ff42f8eb4fad0807f91cf 100644 (file)
@@ -43,192 +43,208 @@ static void info_callback(const char *msg, void *client_data);
 
 static Byte_t * imagetopnm(opj_image_t *image, ihdrbox_param_t **ihdrbox);
 
-Byte_t * j2k_to_pnm( const char *fn, ihdrbox_param_t **ihdrbox)
+Byte_t * j2k_to_pnm(const char *fn, ihdrbox_param_t **ihdrbox)
 {
-  Byte_t *pnmstream = NULL;
-  opj_dparameters_t parameters;        /* decompression parameters */
-  opj_image_t *image = NULL;
-  opj_codec_t *l_codec = NULL; /* handle to a decompressor */
-  opj_stream_t *l_stream = NULL;
-
-  /* set decoding parameters to default values */
-  opj_set_default_decoder_parameters(&parameters);
-
-  /* set a byte stream */
-  l_stream = opj_stream_create_default_file_stream( fn, OPJ_TRUE);
-  if (!l_stream){
-    fprintf(stderr, "ERROR -> failed to create the stream from the file\n");
-    return NULL;
-  }
-
-  /* decode the code-stream */
-  /* ---------------------- */
-
-  /* JPEG-2000 codestream */
-  /* get a decoder handle */
-  l_codec = opj_create_decompress(OPJ_CODEC_J2K);
-
-  /* catch events using our callbacks and give a local context */
-  opj_set_info_handler(l_codec, info_callback,00);
-  opj_set_warning_handler(l_codec, warning_callback,00);
-  opj_set_error_handler(l_codec, error_callback,00);
-
-  /* setup the decoder decoding parameters using user parameters */
-  if ( !opj_setup_decoder(l_codec, &parameters) ){
-    fprintf(stderr, "ERROR -> j2k_dump: failed to setup the decoder\n");
-    return NULL;
-  }
-
-  /* Read the main header of the codestream and if necessary the JP2 boxes*/
-  if(! opj_read_header( l_stream, l_codec, &image)){
-    fprintf(stderr, "ERROR -> j2k_to_image: failed to read the header\n");
-    opj_stream_destroy(l_stream);
-    opj_destroy_codec(l_codec);
-    opj_image_destroy(image);
-    return NULL;
-  }
+    Byte_t *pnmstream = NULL;
+    opj_dparameters_t parameters; /* decompression parameters */
+    opj_image_t *image = NULL;
+    opj_codec_t *l_codec = NULL;  /* handle to a decompressor */
+    opj_stream_t *l_stream = NULL;
+
+    /* set decoding parameters to default values */
+    opj_set_default_decoder_parameters(&parameters);
+
+    /* set a byte stream */
+    l_stream = opj_stream_create_default_file_stream(fn, OPJ_TRUE);
+    if (!l_stream) {
+        fprintf(stderr, "ERROR -> failed to create the stream from the file\n");
+        return NULL;
+    }
+
+    /* decode the code-stream */
+    /* ---------------------- */
+
+    /* JPEG-2000 codestream */
+    /* get a decoder handle */
+    l_codec = opj_create_decompress(OPJ_CODEC_J2K);
+
+    /* catch events using our callbacks and give a local context */
+    opj_set_info_handler(l_codec, info_callback, 00);
+    opj_set_warning_handler(l_codec, warning_callback, 00);
+    opj_set_error_handler(l_codec, error_callback, 00);
+
+    /* setup the decoder decoding parameters using user parameters */
+    if (!opj_setup_decoder(l_codec, &parameters)) {
+        fprintf(stderr, "ERROR -> j2k_dump: failed to setup the decoder\n");
+        return NULL;
+    }
+
+    /* Read the main header of the codestream and if necessary the JP2 boxes*/
+    if (! opj_read_header(l_stream, l_codec, &image)) {
+        fprintf(stderr, "ERROR -> j2k_to_image: failed to read the header\n");
+        opj_stream_destroy(l_stream);
+        opj_destroy_codec(l_codec);
+        opj_image_destroy(image);
+        return NULL;
+    }
 
 #ifdef TODO /*decode area could be set from j2k_to_pnm call, modify the protocol between JPIP viewer and opj_dec_server*/
-  if (! opj_set_decode_area( l_codec, image, parameters.DA_x0, parameters.DA_y0, parameters.DA_x1, parameters.DA_y1)){
-    fprintf(stderr, "ERROR -> j2k_to_image: failed to set the decoded area\n");
-    opj_stream_destroy(l_stream);
-    opj_destroy_codec(l_codec);
-    opj_image_destroy(image);
-    return NULL;
-  }
+    if (! opj_set_decode_area(l_codec, image, parameters.DA_x0, parameters.DA_y0,
+                              parameters.DA_x1, parameters.DA_y1)) {
+        fprintf(stderr, "ERROR -> j2k_to_image: failed to set the decoded area\n");
+        opj_stream_destroy(l_stream);
+        opj_destroy_codec(l_codec);
+        opj_image_destroy(image);
+        return NULL;
+    }
 #endif /*TODO*/
 
-  /* Get the decoded image */
-  if ( !( opj_decode(l_codec, l_stream, image) && opj_end_decompress(l_codec,l_stream) ) ) {
-    fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
+    /* Get the decoded image */
+    if (!(opj_decode(l_codec, l_stream, image) &&
+            opj_end_decompress(l_codec, l_stream))) {
+        fprintf(stderr, "ERROR -> j2k_to_image: failed to decode image!\n");
+        opj_stream_destroy(l_stream);
+        opj_destroy_codec(l_codec);
+        opj_image_destroy(image);
+        return NULL;
+    }
+
+    fprintf(stderr, "image is decoded!\n");
+
+    /* close the byte stream */
     opj_stream_destroy(l_stream);
-    opj_destroy_codec(l_codec);
+
+    /* create output image */
+    /* ------------------- */
+    if ((pnmstream = imagetopnm(image, ihdrbox)) == NULL) {
+        fprintf(stderr, "PNM image not generated\n");
+    }
+
+    /* free remaining structures */
+    if (l_codec) {
+        opj_destroy_codec(l_codec);
+    }
+
+    /* free image data structure */
     opj_image_destroy(image);
-    return NULL;
-  }
-
-  fprintf(stderr, "image is decoded!\n");
-
-  /* close the byte stream */
-  opj_stream_destroy(l_stream);
-  
-  /* create output image */
-  /* ------------------- */
-  if( (pnmstream = imagetopnm( image, ihdrbox))==NULL)
-    fprintf( stderr, "PNM image not generated\n");
-
-  /* free remaining structures */
-  if(l_codec) {
-    opj_destroy_codec(l_codec);
-  }
-
-  /* free image data structure */
-  opj_image_destroy(image);
-  
-  return pnmstream;
+
+    return pnmstream;
 }
 
 
 /**
    sample error callback expecting a FILE* client object
 */
-static void error_callback(const char *msg, void *client_data) {
-  FILE *stream = (FILE*)client_data;
-  fprintf(stream, "[ERROR] %s", msg);
+static void error_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[ERROR] %s", msg);
 }
 /**
    sample warning callback expecting a FILE* client object
 */
-static void warning_callback(const char *msg, void *client_data) {
-  FILE *stream = (FILE*)client_data;
-  fprintf(stream, "[WARNING] %s", msg);
+static void warning_callback(const char *msg, void *client_data)
+{
+    FILE *stream = (FILE*)client_data;
+    fprintf(stream, "[WARNING] %s", msg);
 }
 /**
    sample debug callback expecting no client object
 */
-static void info_callback(const char *msg, void *client_data) {
-  (void)client_data;
-  (void)msg;
-  /*  fprintf(stdout, "[INFO] %s", msg); */
+static void info_callback(const char *msg, void *client_data)
+{
+    (void)client_data;
+    (void)msg;
+    /*  fprintf(stdout, "[INFO] %s", msg); */
 }
 
 
 static Byte_t * imagetopnm(opj_image_t *image, ihdrbox_param_t **ihdrbox)
 {
-  OPJ_UINT32 adjustR, adjustG=0, adjustB=0;
-  OPJ_SIZE_T datasize;
-  Byte_t *pix=NULL, *ptr=NULL;
-  OPJ_UINT32 i;
-  
-  if(*ihdrbox){
-    if( (*ihdrbox)->nc != image->numcomps)
-      fprintf( stderr, "Exception: num of components not identical, codestream: %d, ihdrbox: %d\n", image->numcomps, (*ihdrbox)->nc);
-
-    if( (*ihdrbox)->width != image->comps[0].w)
-      (*ihdrbox)->width = image->comps[0].w;
-    
-    if( (*ihdrbox)->height != image->comps[0].h)
-      (*ihdrbox)->height = image->comps[0].h;
-
-    if( (*ihdrbox)->bpc != image->comps[0].prec)
-      fprintf( stderr, "Exception: bits per component not identical, codestream: %d, ihdrbox: %d\n", image->comps[0].prec, (*ihdrbox)->bpc);
-  }
-  else{
-    *ihdrbox = (ihdrbox_param_t *)malloc( sizeof(ihdrbox_param_t));
-    (*ihdrbox)->width  = image->comps[0].w;
-    (*ihdrbox)->height = image->comps[0].h;
-    assert( image->comps[0].prec < 256 );
-    (*ihdrbox)->bpc    = (Byte_t)image->comps[0].prec;
-    assert( image->numcomps < USHRT_MAX );
-    (*ihdrbox)->nc     = (Byte2_t)image->numcomps;
-  }
-  
-  datasize = (image->numcomps)*(image->comps[0].w)*(image->comps[0].h);
-  
-  if (image->comps[0].prec > 8) {
-    adjustR = image->comps[0].prec - 8;
-    printf("PNM CONVERSION: Truncating component 0 from %d bits to 8 bits\n", image->comps[0].prec);
-  }
-  else
-    adjustR = 0;
-  
-  if( image->numcomps == 3){
-    if (image->comps[1].prec > 8) {
-      adjustG = image->comps[1].prec - 8;
-      printf("PNM CONVERSION: Truncating component 1 from %d bits to 8 bits\n", image->comps[1].prec);
+    OPJ_UINT32 adjustR, adjustG = 0, adjustB = 0;
+    OPJ_SIZE_T datasize;
+    Byte_t *pix = NULL, *ptr = NULL;
+    OPJ_UINT32 i;
+
+    if (*ihdrbox) {
+        if ((*ihdrbox)->nc != image->numcomps) {
+            fprintf(stderr,
+                    "Exception: num of components not identical, codestream: %d, ihdrbox: %d\n",
+                    image->numcomps, (*ihdrbox)->nc);
+        }
+
+        if ((*ihdrbox)->width != image->comps[0].w) {
+            (*ihdrbox)->width = image->comps[0].w;
+        }
+
+        if ((*ihdrbox)->height != image->comps[0].h) {
+            (*ihdrbox)->height = image->comps[0].h;
+        }
+
+        if ((*ihdrbox)->bpc != image->comps[0].prec) {
+            fprintf(stderr,
+                    "Exception: bits per component not identical, codestream: %d, ihdrbox: %d\n",
+                    image->comps[0].prec, (*ihdrbox)->bpc);
+        }
+    } else {
+        *ihdrbox = (ihdrbox_param_t *)malloc(sizeof(ihdrbox_param_t));
+        (*ihdrbox)->width  = image->comps[0].w;
+        (*ihdrbox)->height = image->comps[0].h;
+        assert(image->comps[0].prec < 256);
+        (*ihdrbox)->bpc    = (Byte_t)image->comps[0].prec;
+        assert(image->numcomps < USHRT_MAX);
+        (*ihdrbox)->nc     = (Byte2_t)image->numcomps;
     }
-    else 
-      adjustG = 0;
-    
-    if (image->comps[2].prec > 8) {
-      adjustB = image->comps[2].prec - 8;
-      printf("PNM CONVERSION: Truncating component 2 from %d bits to 8 bits\n", image->comps[2].prec);
+
+    datasize = (image->numcomps) * (image->comps[0].w) * (image->comps[0].h);
+
+    if (image->comps[0].prec > 8) {
+        adjustR = image->comps[0].prec - 8;
+        printf("PNM CONVERSION: Truncating component 0 from %d bits to 8 bits\n",
+               image->comps[0].prec);
+    } else {
+        adjustR = 0;
+    }
+
+    if (image->numcomps == 3) {
+        if (image->comps[1].prec > 8) {
+            adjustG = image->comps[1].prec - 8;
+            printf("PNM CONVERSION: Truncating component 1 from %d bits to 8 bits\n",
+                   image->comps[1].prec);
+        } else {
+            adjustG = 0;
+        }
+
+        if (image->comps[2].prec > 8) {
+            adjustB = image->comps[2].prec - 8;
+            printf("PNM CONVERSION: Truncating component 2 from %d bits to 8 bits\n",
+                   image->comps[2].prec);
+        } else {
+            adjustB = 0;
+        }
     }
-    else 
-      adjustB = 0;
-  }
-
-  pix = (Byte_t *)malloc( datasize);
-  ptr = pix;
-
-  for( i = 0; i < image->comps[0].w * image->comps[0].h; i++){
-    int r, g, b;
-    r = image->comps[0].data[i];
-    r += (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
-    
-    /*    if( adjustR > 0) */
-    *(ptr++) = (Byte_t) ((r >> adjustR)+((r >> (adjustR-1))%2));
-
-    if( image->numcomps == 3){
-      g = image->comps[1].data[i];
-      g += (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
-      *(ptr++) = (Byte_t) ((g >> adjustG)+((g >> (adjustG-1))%2));
-      
-      b = image->comps[2].data[i];
-      b += (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
-      *(ptr++) = (Byte_t) ((b >> adjustB)+((b >> (adjustB-1))%2));
+
+    pix = (Byte_t *)malloc(datasize);
+    ptr = pix;
+
+    for (i = 0; i < image->comps[0].w * image->comps[0].h; i++) {
+        int r, g, b;
+        r = image->comps[0].data[i];
+        r += (image->comps[0].sgnd ? 1 << (image->comps[0].prec - 1) : 0);
+
+        /*    if( adjustR > 0) */
+        *(ptr++) = (Byte_t)((r >> adjustR) + ((r >> (adjustR - 1)) % 2));
+
+        if (image->numcomps == 3) {
+            g = image->comps[1].data[i];
+            g += (image->comps[1].sgnd ? 1 << (image->comps[1].prec - 1) : 0);
+            *(ptr++) = (Byte_t)((g >> adjustG) + ((g >> (adjustG - 1)) % 2));
+
+            b = image->comps[2].data[i];
+            b += (image->comps[2].sgnd ? 1 << (image->comps[2].prec - 1) : 0);
+            *(ptr++) = (Byte_t)((b >> adjustB) + ((b >> (adjustB - 1)) % 2));
+        }
     }
-  }
 
-  return pix;
+    return pix;
 }
index 60eb1d1610f844f096eb60978e0790cb948333d4..80b98c7ec97c5dbf7369719ee4de614880e189c3 100644 (file)
 /**
  * search a message by class_id
  *
- * @param[in] class_id    class identifiers 
+ * @param[in] class_id    class identifiers
  * @param[in] in_class_id in-class identifiers, -1 means any
  * @param[in] csn         codestream number
  * @param[in] msg         first message pointer of the searching list
  * @return                found message pointer
  */
-message_param_t * search_message( Byte8_t class_id, Byte8_t in_class_id, Byte8_t csn, message_param_t *msg);
+message_param_t * search_message(Byte8_t class_id, Byte8_t in_class_id,
+                                 Byte8_t csn, message_param_t *msg);
 
 /**
  * reconstruct j2k codestream from JPT- (in future, JPP-) stream
  *
  * @param[in]  msgqueue   message queue pointer
- * @param[in]  jpipstream original JPT- JPP- stream 
+ * @param[in]  jpipstream original JPT- JPP- stream
  * @param[in]  csn        codestream number
  * @param[in]  fw         reconstructing image frame width
  * @param[in]  fh         reconstructing image frame height
  * @param[out] codelen   codestream length
  * @return               generated reconstructed j2k codestream
  */
-Byte_t * recons_codestream( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte8_t csn, int fw, int fh, Byte8_t *codelen);
+Byte_t * recons_codestream(msgqueue_param_t *msgqueue, Byte_t *jpipstream,
+                           Byte8_t csn, int fw, int fh, Byte8_t *codelen);
 
-Byte_t * recons_j2k( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte8_t csn, int fw, int fh, Byte8_t *j2klen)
+Byte_t * recons_j2k(msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte8_t csn,
+                    int fw, int fh, Byte8_t *j2klen)
 {
-  Byte_t *j2kstream = NULL;
-  
-  if( !msgqueue)
-    return NULL;
-  
-  j2kstream = recons_codestream( msgqueue, jpipstream, csn, fw, fh, j2klen);
+    Byte_t *j2kstream = NULL;
+
+    if (!msgqueue) {
+        return NULL;
+    }
+
+    j2kstream = recons_codestream(msgqueue, jpipstream, csn, fw, fh, j2klen);
 
-  return j2kstream;
+    return j2kstream;
 }
 
-Byte_t * add_emptyboxstream( placeholder_param_t *phld, Byte_t *jp2stream, Byte8_t *jp2len);
-Byte_t * add_msgstream( message_param_t *message, Byte_t *origstream, Byte_t *j2kstream, Byte8_t *j2klen);
+Byte_t * add_emptyboxstream(placeholder_param_t *phld, Byte_t *jp2stream,
+                            Byte8_t *jp2len);
+Byte_t * add_msgstream(message_param_t *message, Byte_t *origstream,
+                       Byte_t *j2kstream, Byte8_t *j2klen);
 
-Byte_t * recons_jp2( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte8_t csn, Byte8_t *jp2len)
+Byte_t * recons_jp2(msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte8_t csn,
+                    Byte8_t *jp2len)
 {
-  message_param_t *ptr;
-  Byte_t *jp2stream = NULL;
-  Byte_t *codestream = NULL;
-  Byte8_t codelen;
-  Byte8_t jp2cDBoxOffset = 0, jp2cDBoxlen = 0;
-  
-  *jp2len = 0;
-
-  if( !msgqueue)
-    return NULL;
-    
-  ptr = msgqueue->first;
-  while(( ptr = search_message( METADATA_MSG, (Byte8_t)-1, csn, ptr))!=NULL){
-    if( ptr->phld){
-      if( strncmp( (char *)ptr->phld->OrigBH+4, "jp2c", 4) == 0){
-       jp2cDBoxOffset = *jp2len + ptr->phld->OrigBHlen;
-       jp2stream = add_emptyboxstream( ptr->phld, jp2stream, jp2len); /* header only */
-       jp2cDBoxlen = *jp2len - jp2cDBoxOffset;
-      }
-      else
-       jp2stream = add_emptyboxstream( ptr->phld, jp2stream, jp2len); /* header only */
-    }
-    jp2stream = add_msgstream( ptr, jpipstream, jp2stream, jp2len);
-    ptr = ptr->next;
-  }
-  
-  codestream = recons_codestream( msgqueue, jpipstream, csn, 0, 0, &codelen);
-  
-  if( jp2cDBoxOffset != 0 && codelen <= jp2cDBoxlen)
-    memcpy( jp2stream+jp2cDBoxOffset, codestream, codelen);
-
-  opj_free( codestream);
-  
-  return jp2stream;
+    message_param_t *ptr;
+    Byte_t *jp2stream = NULL;
+    Byte_t *codestream = NULL;
+    Byte8_t codelen;
+    Byte8_t jp2cDBoxOffset = 0, jp2cDBoxlen = 0;
+
+    *jp2len = 0;
+
+    if (!msgqueue) {
+        return NULL;
+    }
+
+    ptr = msgqueue->first;
+    while ((ptr = search_message(METADATA_MSG, (Byte8_t) - 1, csn, ptr)) != NULL) {
+        if (ptr->phld) {
+            if (strncmp((char *)ptr->phld->OrigBH + 4, "jp2c", 4) == 0) {
+                jp2cDBoxOffset = *jp2len + ptr->phld->OrigBHlen;
+                jp2stream = add_emptyboxstream(ptr->phld, jp2stream, jp2len);  /* header only */
+                jp2cDBoxlen = *jp2len - jp2cDBoxOffset;
+            } else {
+                jp2stream = add_emptyboxstream(ptr->phld, jp2stream,
+                                               jp2len);    /* header only */
+            }
+        }
+        jp2stream = add_msgstream(ptr, jpipstream, jp2stream, jp2len);
+        ptr = ptr->next;
+    }
+
+    codestream = recons_codestream(msgqueue, jpipstream, csn, 0, 0, &codelen);
+
+    if (jp2cDBoxOffset != 0 && codelen <= jp2cDBoxlen) {
+        memcpy(jp2stream + jp2cDBoxOffset, codestream, codelen);
+    }
+
+    opj_free(codestream);
+
+    return jp2stream;
 }
 
-OPJ_BOOL isJPPstream( Byte8_t csn, msgqueue_param_t *msgqueue);
+OPJ_BOOL isJPPstream(Byte8_t csn, msgqueue_param_t *msgqueue);
 
-Byte_t * recons_codestream_from_JPTstream( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte8_t csn, int fw, int fh,  Byte8_t *j2klen);
-Byte_t * recons_codestream_from_JPPstream( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte8_t csn, int fw, int fh, Byte8_t *j2klen);
+Byte_t * recons_codestream_from_JPTstream(msgqueue_param_t *msgqueue,
+        Byte_t *jpipstream, Byte8_t csn, int fw, int fh,  Byte8_t *j2klen);
+Byte_t * recons_codestream_from_JPPstream(msgqueue_param_t *msgqueue,
+        Byte_t *jpipstream, Byte8_t csn, int fw, int fh, Byte8_t *j2klen);
 
-Byte_t * add_EOC( Byte_t *j2kstream, Byte8_t *j2klen);
+Byte_t * add_EOC(Byte_t *j2kstream, Byte8_t *j2klen);
 
-Byte_t * recons_codestream( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte8_t csn, int fw, int fh, Byte8_t *codelen)
+Byte_t * recons_codestream(msgqueue_param_t *msgqueue, Byte_t *jpipstream,
+                           Byte8_t csn, int fw, int fh, Byte8_t *codelen)
 {
-  if( isJPPstream( csn, msgqueue))
-    return recons_codestream_from_JPPstream( msgqueue, jpipstream, csn, fw, fh, codelen);
-  else
-    return recons_codestream_from_JPTstream( msgqueue, jpipstream, csn, fw, fh, codelen);   
+    if (isJPPstream(csn, msgqueue)) {
+        return recons_codestream_from_JPPstream(msgqueue, jpipstream, csn, fw, fh,
+                                                codelen);
+    } else {
+        return recons_codestream_from_JPTstream(msgqueue, jpipstream, csn, fw, fh,
+                                                codelen);
+    }
 }
 
-OPJ_BOOL isJPPstream( Byte8_t csn, msgqueue_param_t *msgqueue)
+OPJ_BOOL isJPPstream(Byte8_t csn, msgqueue_param_t *msgqueue)
 {
-  message_param_t *msg;
-  
-  msg = msgqueue->first;
-  while( msg){
-    if( msg->csn == csn){
-      if( msg->class_id <= 2)
-       return OPJ_TRUE;
-      else
-       if( msg->class_id == 4 || msg->class_id == 5)
-         return OPJ_FALSE;
-    }
-    msg = msg->next;
-  }
-  
-  fprintf( FCGI_stderr, "Error, message of csn %" PRId64 " not found\n", csn);
-
-  return OPJ_FALSE;
-}
+    message_param_t *msg;
+
+    msg = msgqueue->first;
+    while (msg) {
+        if (msg->csn == csn) {
+            if (msg->class_id <= 2) {
+                return OPJ_TRUE;
+            } else if (msg->class_id == 4 || msg->class_id == 5) {
+                return OPJ_FALSE;
+            }
+        }
+        msg = msg->next;
+    }
 
-Byte_t * add_mainhead_msgstream( msgqueue_param_t *msgqueue, Byte_t *origstream, Byte_t *j2kstream, Byte8_t csn, Byte8_t *j2klen);
-Byte8_t get_last_tileID( msgqueue_param_t *msgqueue, Byte8_t csn, OPJ_BOOL isJPPstream);
-Byte_t * add_emptytilestream( const Byte8_t tileID, Byte_t *j2kstream, Byte8_t *j2klen);
+    fprintf(FCGI_stderr, "Error, message of csn %" PRId64 " not found\n", csn);
 
-Byte_t * recons_codestream_from_JPTstream( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte8_t csn, int fw, int fh,  Byte8_t *j2klen)
-{ 
-  Byte_t *j2kstream = NULL;
-  Byte8_t last_tileID, tileID;
-  OPJ_BOOL found;
-  Byte8_t binOffset;
-  message_param_t *ptr;
-  SIZmarker_param_t SIZ;
-  OPJ_SIZE_T mindeclev;
+    return OPJ_FALSE;
+}
 
-  *j2klen = 0;
-  j2kstream = add_mainhead_msgstream( msgqueue, jpipstream, j2kstream, csn, j2klen);
+Byte_t * add_mainhead_msgstream(msgqueue_param_t *msgqueue, Byte_t *origstream,
+                                Byte_t *j2kstream, Byte8_t csn, Byte8_t *j2klen);
+Byte8_t get_last_tileID(msgqueue_param_t *msgqueue, Byte8_t csn,
+                        OPJ_BOOL isJPPstream);
+Byte_t * add_emptytilestream(const Byte8_t tileID, Byte_t *j2kstream,
+                             Byte8_t *j2klen);
 
-  if( !get_mainheader_from_j2kstream( j2kstream, &SIZ, NULL))
-    return j2kstream;
+Byte_t * recons_codestream_from_JPTstream(msgqueue_param_t *msgqueue,
+        Byte_t *jpipstream, Byte8_t csn, int fw, int fh,  Byte8_t *j2klen)
+{
+    Byte_t *j2kstream = NULL;
+    Byte8_t last_tileID, tileID;
+    OPJ_BOOL found;
+    Byte8_t binOffset;
+    message_param_t *ptr;
+    SIZmarker_param_t SIZ;
+    OPJ_SIZE_T mindeclev;
+
+    *j2klen = 0;
+    j2kstream = add_mainhead_msgstream(msgqueue, jpipstream, j2kstream, csn,
+                                       j2klen);
+
+    if (!get_mainheader_from_j2kstream(j2kstream, &SIZ, NULL)) {
+        return j2kstream;
+    }
 
-  if( fw <= 0 || fh <= 0)
-    mindeclev = 0;
-  else
-    mindeclev = (OPJ_SIZE_T)comp_decomplev( fw, fh, (int)SIZ.Xsiz, (int)SIZ.Ysiz);
-  last_tileID = get_last_tileID( msgqueue, csn, OPJ_FALSE);
-  
-  for( tileID=0; tileID <= last_tileID; tileID++){
-    found = OPJ_FALSE;
-    binOffset = 0;
+    if (fw <= 0 || fh <= 0) {
+        mindeclev = 0;
+    } else {
+        mindeclev = (OPJ_SIZE_T)comp_decomplev(fw, fh, (int)SIZ.Xsiz, (int)SIZ.Ysiz);
+    }
 
-    ptr = msgqueue->first;
-    while(( ptr = search_message( TILE_MSG, tileID, csn, ptr))!=NULL){
-      if( ptr->bin_offset == binOffset){
-       found = OPJ_TRUE;
-       j2kstream = add_msgstream( ptr, jpipstream, j2kstream, j2klen);
-       binOffset += ptr->length;
-      }
-      ptr = ptr->next;
+    last_tileID = get_last_tileID(msgqueue, csn, OPJ_FALSE);
+
+    for (tileID = 0; tileID <= last_tileID; tileID++) {
+        found = OPJ_FALSE;
+        binOffset = 0;
+
+        ptr = msgqueue->first;
+        while ((ptr = search_message(TILE_MSG, tileID, csn, ptr)) != NULL) {
+            if (ptr->bin_offset == binOffset) {
+                found = OPJ_TRUE;
+                j2kstream = add_msgstream(ptr, jpipstream, j2kstream, j2klen);
+                binOffset += ptr->length;
+            }
+            ptr = ptr->next;
+        }
+        ptr = msgqueue->first;
+        while ((ptr = search_message(EXT_TILE_MSG, tileID, csn, ptr)) != NULL) {
+            if (ptr->aux > mindeclev) { /* FIXME: pointer comparison ? */
+                if (ptr->bin_offset == binOffset) {
+                    found = OPJ_TRUE;
+                    j2kstream = add_msgstream(ptr, jpipstream, j2kstream, j2klen);
+                    binOffset += ptr->length;
+                }
+            }
+            ptr = ptr->next;
+        }
+        if (!found) {
+            j2kstream = add_emptytilestream(tileID, j2kstream, j2klen);
+        }
     }
-    ptr = msgqueue->first;
-    while(( ptr = search_message( EXT_TILE_MSG, tileID, csn, ptr))!=NULL){
-      if( ptr->aux > mindeclev){ /* FIXME: pointer comparison ? */
-       if( ptr->bin_offset == binOffset){
-         found = OPJ_TRUE;
-         j2kstream = add_msgstream( ptr, jpipstream, j2kstream, j2klen);
-         binOffset += ptr->length;
-       }
-      }
-      ptr = ptr->next;
-    }
-    if(!found)
-      j2kstream = add_emptytilestream( tileID, j2kstream, j2klen);
-  }
-  
-  j2kstream = add_EOC( j2kstream, j2klen);
-
-  return j2kstream;
+
+    j2kstream = add_EOC(j2kstream, j2klen);
+
+    return j2kstream;
 }
 
-Byte_t * add_SOTmkr( Byte_t *j2kstream, Byte8_t *j2klen);
+Byte_t * add_SOTmkr(Byte_t *j2kstream, Byte8_t *j2klen);
 
-Byte_t * recons_bitstream( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte_t *j2kstream, Byte8_t csn, 
-                          Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int mindeclev, 
-                          int *max_reslev, Byte8_t *j2klen);
+Byte_t * recons_bitstream(msgqueue_param_t *msgqueue, Byte_t *jpipstream,
+                          Byte_t *j2kstream, Byte8_t csn,
+                          Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int mindeclev,
+                          int *max_reslev, Byte8_t *j2klen);
 
-Byte_t * recons_codestream_from_JPPstream( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte8_t csn, int fw, int fh, Byte8_t *j2klen)
+Byte_t * recons_codestream_from_JPPstream(msgqueue_param_t *msgqueue,
+        Byte_t *jpipstream, Byte8_t csn, int fw, int fh, Byte8_t *j2klen)
 {
-  Byte_t *j2kstream = NULL;
-  Byte8_t tileID, last_tileID;
-  Byte8_t SOToffset;
-  OPJ_BOOL foundTH;
-  Byte8_t binOffset;
-  message_param_t *ptr;
-  SIZmarker_param_t SIZ;
-  CODmarker_param_t COD;
-  int max_reslev, mindeclev;
-  
-  *j2klen = 0;
-  j2kstream = add_mainhead_msgstream( msgqueue, jpipstream, j2kstream, csn, j2klen);
-  
-  if( !get_mainheader_from_j2kstream( j2kstream, &SIZ, &COD))
-    return j2kstream;
-
-  if( fw == 0 || fh == 0)
-    mindeclev = 0;
-  else
-    mindeclev = comp_decomplev( fw, fh, (int)SIZ.Xsiz, (int)SIZ.Ysiz);
-  
-  max_reslev = -1;
-  last_tileID = get_last_tileID( msgqueue, csn, OPJ_TRUE); 
-  
-  for( tileID=0; tileID <= last_tileID; tileID++){
-    
-    ptr = msgqueue->first;
-    binOffset = 0;
-    foundTH = OPJ_FALSE;
-    SOToffset = *j2klen;
-    while(( ptr = search_message( TILE_HEADER_MSG, tileID, csn, ptr))!=NULL){
-      if( ptr->bin_offset == binOffset){
-       j2kstream = add_SOTmkr( j2kstream, j2klen);
-       j2kstream = add_msgstream( ptr, jpipstream, j2kstream, j2klen);
-       foundTH = OPJ_TRUE;
-       binOffset += ptr->length;
-      }
-      ptr = ptr->next;
+    Byte_t *j2kstream = NULL;
+    Byte8_t tileID, last_tileID;
+    Byte8_t SOToffset;
+    OPJ_BOOL foundTH;
+    Byte8_t binOffset;
+    message_param_t *ptr;
+    SIZmarker_param_t SIZ;
+    CODmarker_param_t COD;
+    int max_reslev, mindeclev;
+
+    *j2klen = 0;
+    j2kstream = add_mainhead_msgstream(msgqueue, jpipstream, j2kstream, csn,
+                                       j2klen);
+
+    if (!get_mainheader_from_j2kstream(j2kstream, &SIZ, &COD)) {
+        return j2kstream;
     }
 
-    if( foundTH){
-      j2kstream = recons_bitstream( msgqueue, jpipstream, j2kstream, csn, tileID, SIZ, COD, mindeclev, &max_reslev, j2klen);     
-      modify_tileheader( j2kstream, SOToffset, (max_reslev<COD.numOfdecomp ? max_reslev : -1), SIZ.Csiz, j2klen);
+    if (fw == 0 || fh == 0) {
+        mindeclev = 0;
+    } else {
+        mindeclev = comp_decomplev(fw, fh, (int)SIZ.Xsiz, (int)SIZ.Ysiz);
     }
-    else
-      j2kstream = add_emptytilestream( tileID, j2kstream, j2klen);
-  }
 
-  if( max_reslev < COD.numOfdecomp)
-    if( !modify_mainheader( j2kstream, max_reslev, SIZ, COD, j2klen)){
-      delete_COD( COD);
-      return j2kstream;
+    max_reslev = -1;
+    last_tileID = get_last_tileID(msgqueue, csn, OPJ_TRUE);
+
+    for (tileID = 0; tileID <= last_tileID; tileID++) {
+
+        ptr = msgqueue->first;
+        binOffset = 0;
+        foundTH = OPJ_FALSE;
+        SOToffset = *j2klen;
+        while ((ptr = search_message(TILE_HEADER_MSG, tileID, csn, ptr)) != NULL) {
+            if (ptr->bin_offset == binOffset) {
+                j2kstream = add_SOTmkr(j2kstream, j2klen);
+                j2kstream = add_msgstream(ptr, jpipstream, j2kstream, j2klen);
+                foundTH = OPJ_TRUE;
+                binOffset += ptr->length;
+            }
+            ptr = ptr->next;
+        }
+
+        if (foundTH) {
+            j2kstream = recons_bitstream(msgqueue, jpipstream, j2kstream, csn, tileID, SIZ,
+                                         COD, mindeclev, &max_reslev, j2klen);
+            modify_tileheader(j2kstream, SOToffset,
+                              (max_reslev < COD.numOfdecomp ? max_reslev : -1), SIZ.Csiz, j2klen);
+        } else {
+            j2kstream = add_emptytilestream(tileID, j2kstream, j2klen);
+        }
     }
 
-  j2kstream = add_EOC( j2kstream, j2klen);
-  delete_COD( COD);
+    if (max_reslev < COD.numOfdecomp)
+        if (!modify_mainheader(j2kstream, max_reslev, SIZ, COD, j2klen)) {
+            delete_COD(COD);
+            return j2kstream;
+        }
 
-  return j2kstream;
-}
+    j2kstream = add_EOC(j2kstream, j2klen);
+    delete_COD(COD);
 
-Byte_t * add_mainhead_msgstream( msgqueue_param_t *msgqueue, Byte_t *origstream, Byte_t *j2kstream, Byte8_t csn, Byte8_t *j2klen)
-{
-  message_param_t *ptr;
-  Byte8_t binOffset;
-
-  ptr = msgqueue->first;
-  binOffset = 0;
-  
-  while(( ptr = search_message( MAINHEADER_MSG, (Byte8_t)-1, csn, ptr))!=NULL){
-    if( ptr->bin_offset == binOffset){
-      j2kstream = add_msgstream( ptr, origstream, j2kstream, j2klen);
-      binOffset += ptr->length;
-    }
-    ptr = ptr->next;
-  }
-  return j2kstream;
+    return j2kstream;
 }
 
-Byte_t * add_SOTmkr( Byte_t *j2kstream, Byte8_t *j2klen)
+Byte_t * add_mainhead_msgstream(msgqueue_param_t *msgqueue, Byte_t *origstream,
+                                Byte_t *j2kstream, Byte8_t csn, Byte8_t *j2klen)
 {
-  Byte_t *buf;
-  const Byte2_t SOT = 0x90ff;
-
-  buf = (Byte_t *)opj_malloc(( *j2klen)+2);
-
-  memcpy( buf, j2kstream, *j2klen);
-  memcpy( buf+(*j2klen), &SOT, 2);
-  
-  *j2klen += 2;
+    message_param_t *ptr;
+    Byte8_t binOffset;
 
-  if(j2kstream) opj_free(j2kstream);
+    ptr = msgqueue->first;
+    binOffset = 0;
 
-  return buf;
+    while ((ptr = search_message(MAINHEADER_MSG, (Byte8_t) - 1, csn,
+                                 ptr)) != NULL) {
+        if (ptr->bin_offset == binOffset) {
+            j2kstream = add_msgstream(ptr, origstream, j2kstream, j2klen);
+            binOffset += ptr->length;
+        }
+        ptr = ptr->next;
+    }
+    return j2kstream;
 }
 
-Byte_t * recons_LRCPbitstream( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte_t *j2kstream, Byte8_t csn, 
-                              Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int mindeclev, 
-                              int *max_reslev, Byte8_t *j2klen);
+Byte_t * add_SOTmkr(Byte_t *j2kstream, Byte8_t *j2klen)
+{
+    Byte_t *buf;
+    const Byte2_t SOT = 0x90ff;
 
-Byte_t * recons_RLCPbitstream( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte_t *j2kstream, Byte8_t csn, 
-                              Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int mindeclev, 
-                              int *max_reslev, Byte8_t *j2klen);
+    buf = (Byte_t *)opj_malloc((*j2klen) + 2);
 
-Byte_t * recons_RPCLbitstream( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte_t *j2kstream, Byte8_t csn, 
-                              Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int mindeclev, 
-                              int *max_reslev, Byte8_t *j2klen);
+    memcpy(buf, j2kstream, *j2klen);
+    memcpy(buf + (*j2klen), &SOT, 2);
 
-Byte_t * recons_PCRLbitstream( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte_t *j2kstream, Byte8_t csn, 
-                              Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int mindeclev, 
-                              int *max_reslev, Byte8_t *j2klen);
+    *j2klen += 2;
 
-Byte_t * recons_CPRLbitstream( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte_t *j2kstream, Byte8_t csn, 
-                              Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int mindeclev, 
-                              int *max_reslev, Byte8_t *j2klen);
+    if (j2kstream) {
+        opj_free(j2kstream);
+    }
 
-Byte_t * recons_bitstream( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte_t *j2kstream, Byte8_t csn, 
-                          Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int mindeclev, 
-                          int *max_reslev, Byte8_t *j2klen)
+    return buf;
+}
+
+Byte_t * recons_LRCPbitstream(msgqueue_param_t *msgqueue, Byte_t *jpipstream,
+                              Byte_t *j2kstream, Byte8_t csn,
+                              Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int mindeclev,
+                              int *max_reslev, Byte8_t *j2klen);
+
+Byte_t * recons_RLCPbitstream(msgqueue_param_t *msgqueue, Byte_t *jpipstream,
+                              Byte_t *j2kstream, Byte8_t csn,
+                              Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int mindeclev,
+                              int *max_reslev, Byte8_t *j2klen);
+
+Byte_t * recons_RPCLbitstream(msgqueue_param_t *msgqueue, Byte_t *jpipstream,
+                              Byte_t *j2kstream, Byte8_t csn,
+                              Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int mindeclev,
+                              int *max_reslev, Byte8_t *j2klen);
+
+Byte_t * recons_PCRLbitstream(msgqueue_param_t *msgqueue, Byte_t *jpipstream,
+                              Byte_t *j2kstream, Byte8_t csn,
+                              Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int mindeclev,
+                              int *max_reslev, Byte8_t *j2klen);
+
+Byte_t * recons_CPRLbitstream(msgqueue_param_t *msgqueue, Byte_t *jpipstream,
+                              Byte_t *j2kstream, Byte8_t csn,
+                              Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int mindeclev,
+                              int *max_reslev, Byte8_t *j2klen);
+
+Byte_t * recons_bitstream(msgqueue_param_t *msgqueue, Byte_t *jpipstream,
+                          Byte_t *j2kstream, Byte8_t csn,
+                          Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int mindeclev,
+                          int *max_reslev, Byte8_t *j2klen)
 {
-  switch( COD.prog_order){
-  case OPJ_LRCP:
-    return recons_LRCPbitstream( msgqueue, jpipstream, j2kstream, csn, tileID, SIZ, COD, mindeclev, max_reslev, j2klen);
-  case OPJ_RLCP:
-    return recons_RLCPbitstream( msgqueue, jpipstream, j2kstream, csn, tileID, SIZ, COD, mindeclev, max_reslev, j2klen);
-  case OPJ_RPCL:
-    return recons_RPCLbitstream( msgqueue, jpipstream, j2kstream, csn, tileID, SIZ, COD, mindeclev, max_reslev, j2klen);
-  case OPJ_PCRL:
-    return recons_PCRLbitstream( msgqueue, jpipstream, j2kstream, csn, tileID, SIZ, COD, mindeclev, max_reslev, j2klen);
-  case OPJ_CPRL:
-    return recons_CPRLbitstream( msgqueue, jpipstream, j2kstream, csn, tileID, SIZ, COD, mindeclev, max_reslev, j2klen);
-  default:
-    fprintf( FCGI_stderr, "Error, progression order not supported\n");
-  }
-  return j2kstream;
+    switch (COD.prog_order) {
+    case OPJ_LRCP:
+        return recons_LRCPbitstream(msgqueue, jpipstream, j2kstream, csn, tileID, SIZ,
+                                    COD, mindeclev, max_reslev, j2klen);
+    case OPJ_RLCP:
+        return recons_RLCPbitstream(msgqueue, jpipstream, j2kstream, csn, tileID, SIZ,
+                                    COD, mindeclev, max_reslev, j2klen);
+    case OPJ_RPCL:
+        return recons_RPCLbitstream(msgqueue, jpipstream, j2kstream, csn, tileID, SIZ,
+                                    COD, mindeclev, max_reslev, j2klen);
+    case OPJ_PCRL:
+        return recons_PCRLbitstream(msgqueue, jpipstream, j2kstream, csn, tileID, SIZ,
+                                    COD, mindeclev, max_reslev, j2klen);
+    case OPJ_CPRL:
+        return recons_CPRLbitstream(msgqueue, jpipstream, j2kstream, csn, tileID, SIZ,
+                                    COD, mindeclev, max_reslev, j2klen);
+    default:
+        fprintf(FCGI_stderr, "Error, progression order not supported\n");
+    }
+    return j2kstream;
 }
 
-int comp_numOfprcts( Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int r);
-Byte8_t comp_seqID( Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int r, int p);
+int comp_numOfprcts(Byte8_t tileID, SIZmarker_param_t SIZ,
+                    CODmarker_param_t COD, int r);
+Byte8_t comp_seqID(Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD,
+                   int r, int p);
 
-Byte_t * recons_packet( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte_t *j2kstream, Byte8_t csn, 
-                       Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int *max_reslev, 
-                       int comp_idx, int res_idx, int prct_idx, int lay_idx, Byte8_t *j2klen);
+Byte_t * recons_packet(msgqueue_param_t *msgqueue, Byte_t *jpipstream,
+                       Byte_t *j2kstream, Byte8_t csn,
+                       Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int *max_reslev,
+                       int comp_idx, int res_idx, int prct_idx, int lay_idx, Byte8_t *j2klen);
 
-Byte_t * recons_LRCPbitstream( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte_t *j2kstream, Byte8_t csn, 
-                              Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int mindeclev, 
-                              int *max_reslev, Byte8_t *j2klen)
+Byte_t * recons_LRCPbitstream(msgqueue_param_t *msgqueue, Byte_t *jpipstream,
+                              Byte_t *j2kstream, Byte8_t csn,
+                              Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int mindeclev,
+                              int *max_reslev, Byte8_t *j2klen)
 {
-  int r, p, c, l, numOfprcts;
-
-  for( l=0; l<COD.numOflayers; l++)
-    for( r=0; r<=(COD.numOfdecomp-mindeclev); r++){
-      if( COD.Scod & 0x01)
-       numOfprcts = comp_numOfprcts( tileID, SIZ, COD, r);
-      else
-       numOfprcts = 1;
-      
-      for( c=0; c<SIZ.Csiz; c++)
-       for( p=0; p<numOfprcts; p++)
-         j2kstream = recons_packet( msgqueue, jpipstream, j2kstream, csn, tileID, SIZ, COD, max_reslev, c, r, p, l, j2klen);
-    }
-  
-  return j2kstream;
+    int r, p, c, l, numOfprcts;
+
+    for (l = 0; l < COD.numOflayers; l++)
+        for (r = 0; r <= (COD.numOfdecomp - mindeclev); r++) {
+            if (COD.Scod & 0x01) {
+                numOfprcts = comp_numOfprcts(tileID, SIZ, COD, r);
+            } else {
+                numOfprcts = 1;
+            }
+
+            for (c = 0; c < SIZ.Csiz; c++)
+                for (p = 0; p < numOfprcts; p++) {
+                    j2kstream = recons_packet(msgqueue, jpipstream, j2kstream, csn, tileID, SIZ,
+                                              COD, max_reslev, c, r, p, l, j2klen);
+                }
+        }
+
+    return j2kstream;
 }
 
-Byte_t * recons_RLCPbitstream( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte_t *j2kstream, Byte8_t csn, 
-                              Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int mindeclev, 
-                              int *max_reslev, Byte8_t *j2klen)
+Byte_t * recons_RLCPbitstream(msgqueue_param_t *msgqueue, Byte_t *jpipstream,
+                              Byte_t *j2kstream, Byte8_t csn,
+                              Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int mindeclev,
+                              int *max_reslev, Byte8_t *j2klen)
 {
-  int r, p, c, l, numOfprcts;
-  
-  for( r=0; r<=(COD.numOfdecomp-mindeclev); r++){
-    if( COD.Scod & 0x01)
-      numOfprcts = comp_numOfprcts( tileID, SIZ, COD, r);
-    else
-      numOfprcts = 1;
-
-    for( l=0; l<COD.numOflayers; l++)
-      for( c=0; c<SIZ.Csiz; c++)
-       for( p=0; p<numOfprcts; p++)
-         j2kstream = recons_packet( msgqueue, jpipstream, j2kstream, csn, tileID, SIZ, COD, max_reslev, c, r, p, l, j2klen);
-  }
-      
-  return j2kstream;
+    int r, p, c, l, numOfprcts;
+
+    for (r = 0; r <= (COD.numOfdecomp - mindeclev); r++) {
+        if (COD.Scod & 0x01) {
+            numOfprcts = comp_numOfprcts(tileID, SIZ, COD, r);
+        } else {
+            numOfprcts = 1;
+        }
+
+        for (l = 0; l < COD.numOflayers; l++)
+            for (c = 0; c < SIZ.Csiz; c++)
+                for (p = 0; p < numOfprcts; p++) {
+                    j2kstream = recons_packet(msgqueue, jpipstream, j2kstream, csn, tileID, SIZ,
+                                              COD, max_reslev, c, r, p, l, j2klen);
+                }
+    }
+
+    return j2kstream;
 }
 
-Byte_t * recons_precinct( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte_t *j2kstream, Byte8_t csn, 
-                         Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int *max_reslev, 
-                         int comp_idx, int res_idx, Byte8_t seqID, Byte8_t *j2klen);
+Byte_t * recons_precinct(msgqueue_param_t *msgqueue, Byte_t *jpipstream,
+                         Byte_t *j2kstream, Byte8_t csn,
+                         Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int *max_reslev,
+                         int comp_idx, int res_idx, Byte8_t seqID, Byte8_t *j2klen);
 
-Byte_t * recons_RPCLbitstream( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte_t *j2kstream, Byte8_t csn, 
-                              Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int mindeclev, 
-                              int *max_reslev, Byte8_t *j2klen)
+Byte_t * recons_RPCLbitstream(msgqueue_param_t *msgqueue, Byte_t *jpipstream,
+                              Byte_t *j2kstream, Byte8_t csn,
+                              Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int mindeclev,
+                              int *max_reslev, Byte8_t *j2klen)
 {
-  int r, p, c, numOfprcts;
-  Byte8_t seqID;
-  
-  for( r=0, seqID=0; r<=(COD.numOfdecomp-mindeclev); r++){
-    
-    if( COD.Scod & 0x01)
-      numOfprcts = comp_numOfprcts( tileID, SIZ, COD, r);
-    else
-      numOfprcts = 1;
-    
-    for( p=0; p<numOfprcts; p++, seqID++)
-      for( c=0; c<SIZ.Csiz; c++)
-       j2kstream = recons_precinct( msgqueue, jpipstream, j2kstream, csn, tileID, SIZ, COD, max_reslev, c, r, seqID, j2klen);
-  }
-      
-  return j2kstream;
+    int r, p, c, numOfprcts;
+    Byte8_t seqID;
+
+    for (r = 0, seqID = 0; r <= (COD.numOfdecomp - mindeclev); r++) {
+
+        if (COD.Scod & 0x01) {
+            numOfprcts = comp_numOfprcts(tileID, SIZ, COD, r);
+        } else {
+            numOfprcts = 1;
+        }
+
+        for (p = 0; p < numOfprcts; p++, seqID++)
+            for (c = 0; c < SIZ.Csiz; c++) {
+                j2kstream = recons_precinct(msgqueue, jpipstream, j2kstream, csn, tileID, SIZ,
+                                            COD, max_reslev, c, r, seqID, j2klen);
+            }
+    }
+
+    return j2kstream;
 }
 
-Byte_t * recons_PCRLbitstream( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte_t *j2kstream, Byte8_t csn, 
-                              Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int mindeclev, 
-                              int *max_reslev, Byte8_t *j2klen)
+Byte_t * recons_PCRLbitstream(msgqueue_param_t *msgqueue, Byte_t *jpipstream,
+                              Byte_t *j2kstream, Byte8_t csn,
+                              Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int mindeclev,
+                              int *max_reslev, Byte8_t *j2klen)
 {
-  int r, p, c, min_numOfprcts, numOfprcts, min_numOfres;
-  Byte8_t seqID;
-  
-  min_numOfres = COD.numOfdecomp-mindeclev + 1;
-
-  if( COD.Scod & 0x01){
-    min_numOfprcts = 0;
-    for( r=0; r<min_numOfres; r++){
-      numOfprcts = comp_numOfprcts( tileID, SIZ, COD, r);
-      
-      if( numOfprcts < min_numOfprcts || min_numOfprcts == 0)
-       min_numOfprcts = numOfprcts;
-    }
-  }
-  else
-    min_numOfprcts = 1;
-  
-  for( p=0; p<min_numOfprcts; p++)
-    for( c=0; c<SIZ.Csiz; c++)
-      for( r=0; r<min_numOfres; r++){
-       seqID = comp_seqID( tileID, SIZ, COD, r, p);
-       j2kstream = recons_precinct( msgqueue, jpipstream, j2kstream, csn, tileID, SIZ, COD, max_reslev, c, r, seqID, j2klen);
-      }
-    
-  return j2kstream;
+    int r, p, c, min_numOfprcts, numOfprcts, min_numOfres;
+    Byte8_t seqID;
+
+    min_numOfres = COD.numOfdecomp - mindeclev + 1;
+
+    if (COD.Scod & 0x01) {
+        min_numOfprcts = 0;
+        for (r = 0; r < min_numOfres; r++) {
+            numOfprcts = comp_numOfprcts(tileID, SIZ, COD, r);
+
+            if (numOfprcts < min_numOfprcts || min_numOfprcts == 0) {
+                min_numOfprcts = numOfprcts;
+            }
+        }
+    } else {
+        min_numOfprcts = 1;
+    }
+
+    for (p = 0; p < min_numOfprcts; p++)
+        for (c = 0; c < SIZ.Csiz; c++)
+            for (r = 0; r < min_numOfres; r++) {
+                seqID = comp_seqID(tileID, SIZ, COD, r, p);
+                j2kstream = recons_precinct(msgqueue, jpipstream, j2kstream, csn, tileID, SIZ,
+                                            COD, max_reslev, c, r, seqID, j2klen);
+            }
+
+    return j2kstream;
 }
 
 
-Byte_t * recons_CPRLbitstream( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte_t *j2kstream, Byte8_t csn, 
-                              Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int mindeclev, 
-                              int *max_reslev, Byte8_t *j2klen)
+Byte_t * recons_CPRLbitstream(msgqueue_param_t *msgqueue, Byte_t *jpipstream,
+                              Byte_t *j2kstream, Byte8_t csn,
+                              Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int mindeclev,
+                              int *max_reslev, Byte8_t *j2klen)
 {
-  int r, p, c, min_numOfprcts, numOfprcts, min_numOfres;
-  Byte8_t seqID;
-  
-  min_numOfres = COD.numOfdecomp-mindeclev + 1;
-
-  if( COD.Scod & 0x01){
-    min_numOfprcts = 0;
-    for( r=0; r<min_numOfres; r++){
-      numOfprcts = comp_numOfprcts( tileID, SIZ, COD, r);
-      
-      if( numOfprcts < min_numOfprcts || min_numOfprcts == 0)
-       min_numOfprcts = numOfprcts;
-    }
-  }
-  else
-    min_numOfprcts = 1;
-  
-  for( c=0; c<SIZ.Csiz; c++)
-    for( p=0; p<min_numOfprcts; p++)
-      for( r=0; r<min_numOfres; r++){
-       seqID = comp_seqID( tileID, SIZ, COD, r, p);
-       j2kstream = recons_precinct( msgqueue, jpipstream, j2kstream, csn, tileID, SIZ, COD, max_reslev, c, r, seqID, j2klen);
-      }
-  
-  return j2kstream;
+    int r, p, c, min_numOfprcts, numOfprcts, min_numOfres;
+    Byte8_t seqID;
+
+    min_numOfres = COD.numOfdecomp - mindeclev + 1;
+
+    if (COD.Scod & 0x01) {
+        min_numOfprcts = 0;
+        for (r = 0; r < min_numOfres; r++) {
+            numOfprcts = comp_numOfprcts(tileID, SIZ, COD, r);
+
+            if (numOfprcts < min_numOfprcts || min_numOfprcts == 0) {
+                min_numOfprcts = numOfprcts;
+            }
+        }
+    } else {
+        min_numOfprcts = 1;
+    }
+
+    for (c = 0; c < SIZ.Csiz; c++)
+        for (p = 0; p < min_numOfprcts; p++)
+            for (r = 0; r < min_numOfres; r++) {
+                seqID = comp_seqID(tileID, SIZ, COD, r, p);
+                j2kstream = recons_precinct(msgqueue, jpipstream, j2kstream, csn, tileID, SIZ,
+                                            COD, max_reslev, c, r, seqID, j2klen);
+            }
+
+    return j2kstream;
 }
 
-int comp_numOfprcts( Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int r)
-{  
-  int ret;
-  Byte4_t XTsiz, YTsiz;
-  
-  XTsiz = get_tile_XSiz( SIZ, (Byte4_t)tileID, COD.numOfdecomp-r);
-  YTsiz = get_tile_YSiz( SIZ, (Byte4_t)tileID, COD.numOfdecomp-r);
-  
-  ret = (int)(ceil((double)XTsiz/(double)COD.XPsiz[r])*ceil((double)YTsiz/(double)COD.YPsiz[r]));
-  assert( ret >= 0 );
-  return ret;
+int comp_numOfprcts(Byte8_t tileID, SIZmarker_param_t SIZ,
+                    CODmarker_param_t COD, int r)
+{
+    int ret;
+    Byte4_t XTsiz, YTsiz;
+
+    XTsiz = get_tile_XSiz(SIZ, (Byte4_t)tileID, COD.numOfdecomp - r);
+    YTsiz = get_tile_YSiz(SIZ, (Byte4_t)tileID, COD.numOfdecomp - r);
+
+    ret = (int)(ceil((double)XTsiz / (double)COD.XPsiz[r]) * ceil((double)YTsiz /
+                (double)COD.YPsiz[r]));
+    assert(ret >= 0);
+    return ret;
 }
 
-Byte_t * add_padding( Byte8_t padding, Byte_t *j2kstream, Byte8_t *j2klen);
+Byte_t * add_padding(Byte8_t padding, Byte_t *j2kstream, Byte8_t *j2klen);
 
-Byte_t * recons_packet( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte_t *j2kstream, Byte8_t csn, 
-                       Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int *max_reslev, 
-                       int comp_idx, int res_idx, int prct_idx, int lay_idx, Byte8_t *j2klen)
+Byte_t * recons_packet(msgqueue_param_t *msgqueue, Byte_t *jpipstream,
+                       Byte_t *j2kstream, Byte8_t csn,
+                       Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int *max_reslev,
+                       int comp_idx, int res_idx, int prct_idx, int lay_idx, Byte8_t *j2klen)
 {
-  Byte8_t seqID, precID, binOffset;
-  message_param_t *ptr;
-  OPJ_BOOL foundPrec;
-  int l;
-
-  seqID = comp_seqID( tileID, SIZ, COD, res_idx, prct_idx);
-  precID = comp_precinct_id( (int)tileID, comp_idx, (int)seqID, (int)SIZ.Csiz, (int)SIZ.XTnum*(int)SIZ.YTnum);
-                 
-  ptr = msgqueue->first;
-  binOffset = 0;
-  foundPrec = OPJ_FALSE;
-  l = 0;
-         
-  while(( ptr = search_message( PRECINCT_MSG, precID, csn, ptr))!=NULL){
-    if( ptr->bin_offset == binOffset){
-      if( lay_idx == l){
-       j2kstream = add_msgstream( ptr, jpipstream, j2kstream, j2klen);
-       foundPrec = OPJ_TRUE;
-       if( *max_reslev < res_idx)
-         *max_reslev = res_idx;
-               
-       break;
-      }
-      binOffset += ptr->length;
-      l++;
-    }
-    ptr = ptr->next;
-  }
-  if( !foundPrec && COD.Scod & 0x01)
-    j2kstream = add_padding( 1, j2kstream, j2klen);
-  
-  return j2kstream;
+    Byte8_t seqID, precID, binOffset;
+    message_param_t *ptr;
+    OPJ_BOOL foundPrec;
+    int l;
+
+    seqID = comp_seqID(tileID, SIZ, COD, res_idx, prct_idx);
+    precID = comp_precinct_id((int)tileID, comp_idx, (int)seqID, (int)SIZ.Csiz,
+                              (int)SIZ.XTnum * (int)SIZ.YTnum);
+
+    ptr = msgqueue->first;
+    binOffset = 0;
+    foundPrec = OPJ_FALSE;
+    l = 0;
+
+    while ((ptr = search_message(PRECINCT_MSG, precID, csn, ptr)) != NULL) {
+        if (ptr->bin_offset == binOffset) {
+            if (lay_idx == l) {
+                j2kstream = add_msgstream(ptr, jpipstream, j2kstream, j2klen);
+                foundPrec = OPJ_TRUE;
+                if (*max_reslev < res_idx) {
+                    *max_reslev = res_idx;
+                }
+
+                break;
+            }
+            binOffset += ptr->length;
+            l++;
+        }
+        ptr = ptr->next;
+    }
+    if (!foundPrec && COD.Scod & 0x01) {
+        j2kstream = add_padding(1, j2kstream, j2klen);
+    }
+
+    return j2kstream;
 }
 
 
-Byte_t * recons_precinct( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte_t *j2kstream, Byte8_t csn, 
-                         Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int *max_reslev, 
-                         int comp_idx, int res_idx, Byte8_t seqID, Byte8_t *j2klen)
+Byte_t * recons_precinct(msgqueue_param_t *msgqueue, Byte_t *jpipstream,
+                         Byte_t *j2kstream, Byte8_t csn,
+                         Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int *max_reslev,
+                         int comp_idx, int res_idx, Byte8_t seqID, Byte8_t *j2klen)
 {
-  Byte8_t precID, binOffset;
-  message_param_t *ptr;
-  OPJ_BOOL foundPrec;
-
-  precID = comp_precinct_id( (int)tileID, comp_idx, (int)seqID, (int)SIZ.Csiz, (int)SIZ.XTnum*(int)SIZ.YTnum);
-  
-  ptr = msgqueue->first;
-  binOffset = 0;
-  foundPrec = OPJ_FALSE;
-
-  while(( ptr = search_message( PRECINCT_MSG, precID, csn, ptr))!=NULL){
-    if( ptr->bin_offset == binOffset){
-      j2kstream = add_msgstream( ptr, jpipstream, j2kstream, j2klen);
-      
-      foundPrec = OPJ_TRUE;
-      binOffset += ptr->length;
-      if( *max_reslev < res_idx)
-       *max_reslev = res_idx;
-
-      if( ptr->last_byte)
-       break;
-    }
-    ptr = ptr->next;
-  }
-  if(!foundPrec && COD.Scod & 0x01)
-    j2kstream = add_padding( COD.numOflayers, j2kstream, j2klen);
-
-  return j2kstream;
+    Byte8_t precID, binOffset;
+    message_param_t *ptr;
+    OPJ_BOOL foundPrec;
+
+    precID = comp_precinct_id((int)tileID, comp_idx, (int)seqID, (int)SIZ.Csiz,
+                              (int)SIZ.XTnum * (int)SIZ.YTnum);
+
+    ptr = msgqueue->first;
+    binOffset = 0;
+    foundPrec = OPJ_FALSE;
+
+    while ((ptr = search_message(PRECINCT_MSG, precID, csn, ptr)) != NULL) {
+        if (ptr->bin_offset == binOffset) {
+            j2kstream = add_msgstream(ptr, jpipstream, j2kstream, j2klen);
+
+            foundPrec = OPJ_TRUE;
+            binOffset += ptr->length;
+            if (*max_reslev < res_idx) {
+                *max_reslev = res_idx;
+            }
+
+            if (ptr->last_byte) {
+                break;
+            }
+        }
+        ptr = ptr->next;
+    }
+    if (!foundPrec && COD.Scod & 0x01) {
+        j2kstream = add_padding(COD.numOflayers, j2kstream, j2klen);
+    }
+
+    return j2kstream;
 }
 
-Byte8_t comp_seqID( Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD, int r, int p)
+Byte8_t comp_seqID(Byte8_t tileID, SIZmarker_param_t SIZ, CODmarker_param_t COD,
+                   int r, int p)
 {
-  Byte8_t seqID = 0;
-  int rr;
-  assert( p >= 0);
-  assert( r >= 0);
-  
-  for( rr=0; rr<r; rr++)
-    seqID += (Byte8_t)comp_numOfprcts( tileID, SIZ, COD, rr);
-  
-  seqID += (Byte8_t)p;
-  
-  return seqID;
+    Byte8_t seqID = 0;
+    int rr;
+    assert(p >= 0);
+    assert(r >= 0);
+
+    for (rr = 0; rr < r; rr++) {
+        seqID += (Byte8_t)comp_numOfprcts(tileID, SIZ, COD, rr);
+    }
+
+    seqID += (Byte8_t)p;
+
+    return seqID;
 }
 
-Byte8_t get_last_tileID( msgqueue_param_t *msgqueue, Byte8_t csn, OPJ_BOOL isjppstream)
+Byte8_t get_last_tileID(msgqueue_param_t *msgqueue, Byte8_t csn,
+                        OPJ_BOOL isjppstream)
 {
-  Byte8_t last_tileID = 0;
-  message_param_t *msg;
-  
-  msg = msgqueue->first;
-  while( msg){
-    if( isjppstream){
-      if((msg->class_id == TILE_HEADER_MSG) && msg->csn == csn && last_tileID < msg->in_class_id)
-       last_tileID = msg->in_class_id;
-    }
-    else{
-      if((msg->class_id == TILE_MSG || msg->class_id == EXT_TILE_MSG) && msg->csn == csn && last_tileID < msg->in_class_id)
-       last_tileID = msg->in_class_id;
-    }
-    msg = msg->next;
-  }
-  return last_tileID;
+    Byte8_t last_tileID = 0;
+    message_param_t *msg;
+
+    msg = msgqueue->first;
+    while (msg) {
+        if (isjppstream) {
+            if ((msg->class_id == TILE_HEADER_MSG) && msg->csn == csn &&
+                    last_tileID < msg->in_class_id) {
+                last_tileID = msg->in_class_id;
+            }
+        } else {
+            if ((msg->class_id == TILE_MSG || msg->class_id == EXT_TILE_MSG) &&
+                    msg->csn == csn && last_tileID < msg->in_class_id) {
+                last_tileID = msg->in_class_id;
+            }
+        }
+        msg = msg->next;
+    }
+    return last_tileID;
 }
 
 
-message_param_t * search_message( Byte8_t class_id, Byte8_t in_class_id, Byte8_t csn, message_param_t *msg)
+message_param_t * search_message(Byte8_t class_id, Byte8_t in_class_id,
+                                 Byte8_t csn, message_param_t *msg)
 {
-  while( msg != NULL){
-    if( in_class_id == (Byte8_t)-1){
-      if( msg->class_id == class_id && msg->csn == csn)
-       return msg;
-    }
-    else{
-      if( msg->class_id == class_id && msg->in_class_id == in_class_id && msg->csn == csn)
-       return msg;
-    }
-    msg = msg->next;
-  }
-  return NULL;
+    while (msg != NULL) {
+        if (in_class_id == (Byte8_t) - 1) {
+            if (msg->class_id == class_id && msg->csn == csn) {
+                return msg;
+            }
+        } else {
+            if (msg->class_id == class_id && msg->in_class_id == in_class_id &&
+                    msg->csn == csn) {
+                return msg;
+            }
+        }
+        msg = msg->next;
+    }
+    return NULL;
 }
 
 
-Byte_t * gene_msgstream( message_param_t *message, Byte_t *stream, Byte8_t *length);
-Byte_t * gene_emptytilestream( const Byte8_t tileID, Byte8_t *length);
+Byte_t * gene_msgstream(message_param_t *message, Byte_t *stream,
+                        Byte8_t *length);
+Byte_t * gene_emptytilestream(const Byte8_t tileID, Byte8_t *length);
 
-Byte_t * add_msgstream( message_param_t *message, Byte_t *origstream, Byte_t *j2kstream, Byte8_t *j2klen)
+Byte_t * add_msgstream(message_param_t *message, Byte_t *origstream,
+                       Byte_t *j2kstream, Byte8_t *j2klen)
 {
-  Byte_t *newstream;
-  Byte8_t newlen;
-  Byte_t *buf;
+    Byte_t *newstream;
+    Byte8_t newlen;
+    Byte_t *buf;
 
-  if( !message)
-    return NULL;
+    if (!message) {
+        return NULL;
+    }
 
-  newstream = gene_msgstream( message, origstream, &newlen);
+    newstream = gene_msgstream(message, origstream, &newlen);
 
-  buf = (Byte_t *)opj_malloc(( *j2klen)+newlen);
+    buf = (Byte_t *)opj_malloc((*j2klen) + newlen);
 
-  memcpy( buf, j2kstream, *j2klen);
-  memcpy( buf+(*j2klen), newstream, newlen);
-  
-  *j2klen += newlen;
-  
-  opj_free( newstream);
-  if(j2kstream) opj_free(j2kstream);
+    memcpy(buf, j2kstream, *j2klen);
+    memcpy(buf + (*j2klen), newstream, newlen);
 
-  return buf;
+    *j2klen += newlen;
+
+    opj_free(newstream);
+    if (j2kstream) {
+        opj_free(j2kstream);
+    }
+
+    return buf;
 }
 
-Byte_t * add_emptyboxstream( placeholder_param_t *phld, Byte_t *jp2stream, Byte8_t *jp2len)
+
+Byte_t * add_emptyboxstream(placeholder_param_t *phld, Byte_t *jp2stream,
+                            Byte8_t *jp2len)
 {
-  Byte_t *newstream;
-  Byte8_t newlen;
-  Byte_t *buf;
-  
-  if( phld->OrigBHlen == 8)
-    newlen = big4(phld->OrigBH);
-  else
-    newlen = big8(phld->OrigBH+8);
-
-  newstream = (Byte_t *)opj_malloc( newlen);
-  memset( newstream, 0, newlen);
-  memcpy( newstream, phld->OrigBH, phld->OrigBHlen);
-
-  buf = (Byte_t *)opj_malloc(( *jp2len)+newlen);
-
-  memcpy( buf, jp2stream, *jp2len);
-  memcpy( buf+(*jp2len), newstream, newlen);
-  
-  *jp2len += newlen;
-  
-  opj_free( newstream);
-  if(jp2stream) opj_free(jp2stream);
-
-  return buf;
+    Byte_t *newstream;
+    Byte8_t newlen;
+    Byte_t *buf;
+
+    if (phld->OrigBHlen == 8) {
+        newlen = big4(phld->OrigBH);
+    } else {
+        newlen = big8(phld->OrigBH + 8);
+    }
+
+    newstream = (Byte_t *)opj_malloc(newlen);
+    memset(newstream, 0, newlen);
+    memcpy(newstream, phld->OrigBH, phld->OrigBHlen);
+
+    buf = (Byte_t *)opj_malloc((*jp2len) + newlen);
+
+    memcpy(buf, jp2stream, *jp2len);
+    memcpy(buf + (*jp2len), newstream, newlen);
+
+    *jp2len += newlen;
+
+    opj_free(newstream);
+    if (jp2stream) {
+        opj_free(jp2stream);
+    }
+
+    return buf;
 }
 
-Byte_t * add_emptytilestream( const Byte8_t tileID, Byte_t *j2kstream, Byte8_t *j2klen)
+Byte_t * add_emptytilestream(const Byte8_t tileID, Byte_t *j2kstream,
+                             Byte8_t *j2klen)
 {
-  Byte_t *newstream;
-  Byte8_t newlen;
-  Byte_t *buf;
+    Byte_t *newstream;
+    Byte8_t newlen;
+    Byte_t *buf;
 
-  newstream = gene_emptytilestream( tileID, &newlen);
+    newstream = gene_emptytilestream(tileID, &newlen);
 
-  buf = (Byte_t *)opj_malloc(( *j2klen)+newlen);
+    buf = (Byte_t *)opj_malloc((*j2klen) + newlen);
 
-  memcpy( buf, j2kstream, *j2klen);
-  memcpy( buf+(*j2klen), newstream, newlen);
-  
-  *j2klen += newlen;
+    memcpy(buf, j2kstream, *j2klen);
+    memcpy(buf + (*j2klen), newstream, newlen);
 
-  opj_free( newstream);
-  if(j2kstream) opj_free(j2kstream);
+    *j2klen += newlen;
 
-  return buf;
+    opj_free(newstream);
+    if (j2kstream) {
+        opj_free(j2kstream);
+    }
+
+    return buf;
 }
 
-Byte_t * add_padding( Byte8_t padding, Byte_t *j2kstream, Byte8_t *j2klen)
+Byte_t * add_padding(Byte8_t padding, Byte_t *j2kstream, Byte8_t *j2klen)
 {
-  Byte_t *buf;
+    Byte_t *buf;
 
-  buf = (Byte_t *)opj_malloc(( *j2klen)+padding);
+    buf = (Byte_t *)opj_malloc((*j2klen) + padding);
 
-  memcpy( buf, j2kstream, *j2klen);
-  memset( buf+(*j2klen), 0, padding);
-  
-  *j2klen += padding;
+    memcpy(buf, j2kstream, *j2klen);
+    memset(buf + (*j2klen), 0, padding);
 
-  if(j2kstream) opj_free(j2kstream);
+    *j2klen += padding;
+
+    if (j2kstream) {
+        opj_free(j2kstream);
+    }
 
-  return buf;
+    return buf;
 }
 
-Byte_t * add_EOC( Byte_t *j2kstream, Byte8_t *j2klen)
+Byte_t * add_EOC(Byte_t *j2kstream, Byte8_t *j2klen)
 {
-  Byte2_t EOC = 0xd9ff;
+    Byte2_t EOC = 0xd9ff;
 
-  Byte_t *buf;
+    Byte_t *buf;
 
-  buf = (Byte_t *)opj_malloc(( *j2klen)+2);
+    buf = (Byte_t *)opj_malloc((*j2klen) + 2);
 
-  memcpy( buf, j2kstream, *j2klen);
-  memcpy( buf+(*j2klen), &EOC, 2);
+    memcpy(buf, j2kstream, *j2klen);
+    memcpy(buf + (*j2klen), &EOC, 2);
 
-  *j2klen += 2;
+    *j2klen += 2;
 
-  if(j2kstream) opj_free(j2kstream);
+    if (j2kstream) {
+        opj_free(j2kstream);
+    }
 
-  return buf;
+    return buf;
 }
 
-Byte_t * gene_msgstream( message_param_t *message, Byte_t *stream, Byte8_t *length)
+Byte_t * gene_msgstream(message_param_t *message, Byte_t *stream,
+                        Byte8_t *length)
 {
-  Byte_t *buf;
+    Byte_t *buf;
 
-  if( !message)
-    return NULL;
+    if (!message) {
+        return NULL;
+    }
 
-  *length = message->length;
-  buf = (Byte_t *)opj_malloc( *length);
-  memcpy( buf, stream+message->res_offset,  *length);
+    *length = message->length;
+    buf = (Byte_t *)opj_malloc(*length);
+    memcpy(buf, stream + message->res_offset,  *length);
 
-  return buf;
+    return buf;
 }
 
-Byte_t * gene_emptytilestream( const Byte8_t tileID, Byte8_t *length)
+Byte_t * gene_emptytilestream(const Byte8_t tileID, Byte8_t *length)
 {
-  Byte_t *buf;
-  const Byte2_t SOT = 0x90ff;
-  const Byte2_t Lsot = 0xa << 8;
-  Byte2_t Isot;
-  const Byte4_t Psot = 0xe << 24;
-  const Byte_t TPsot = 0, TNsot = 1;
-  const Byte2_t SOD = 0x93ff;
-
-  *length = 14;
-  buf = (Byte_t *)opj_malloc(*length);
-
-  Isot = (Byte2_t)((((Byte2_t)tileID) << 8) | ((((Byte2_t)tileID) & 0xf0) >> 8));
-  
-  memcpy( buf, &SOT, 2);
-  memcpy( buf+2, &Lsot, 2);
-  memcpy( buf+4, &Isot, 2);
-  memcpy( buf+6, &Psot, 4);
-  memcpy( buf+10, &TPsot, 1);
-  memcpy( buf+11, &TNsot, 1);
-  memcpy( buf+12, &SOD, 2);
-
-  return buf;
+    Byte_t *buf;
+    const Byte2_t SOT = 0x90ff;
+    const Byte2_t Lsot = 0xa << 8;
+    Byte2_t Isot;
+    const Byte4_t Psot = 0xe << 24;
+    const Byte_t TPsot = 0, TNsot = 1;
+    const Byte2_t SOD = 0x93ff;
+
+    *length = 14;
+    buf = (Byte_t *)opj_malloc(*length);
+
+    Isot = (Byte2_t)((((Byte2_t)tileID) << 8) | ((((Byte2_t)tileID) & 0xf0) >> 8));
+
+    memcpy(buf, &SOT, 2);
+    memcpy(buf + 2, &Lsot, 2);
+    memcpy(buf + 4, &Isot, 2);
+    memcpy(buf + 6, &Psot, 4);
+    memcpy(buf + 10, &TPsot, 1);
+    memcpy(buf + 11, &TNsot, 1);
+    memcpy(buf + 12, &SOD, 2);
+
+    return buf;
 }
 
-Byte_t * recons_j2kmainhead( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte8_t csn, Byte8_t *j2klen)
+Byte_t * recons_j2kmainhead(msgqueue_param_t *msgqueue, Byte_t *jpipstream,
+                            Byte8_t csn, Byte8_t *j2klen)
 {
-  *j2klen = 0;
-  return add_mainhead_msgstream( msgqueue, jpipstream, NULL, csn, j2klen);
+    *j2klen = 0;
+    return add_mainhead_msgstream(msgqueue, jpipstream, NULL, csn, j2klen);
 }
index db0408e66c6ab111ef7c963e97f02ad01b5d26ca..e921e92bad8337ce0d934feb6d9faa8ec64347cf 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
  * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara 
+ * Copyright (c) 2010-2011, Kaori Hagihara
  * Copyright (c) 2011,      Lucian Corlaciu, GSoC
  * All rights reserved.
  *
 #endif /*SERVER*/
 
 
-OPJ_BOOL identify_target( query_param_t query_param, targetlist_param_t *targetlist, target_param_t **target)
+OPJ_BOOL identify_target(query_param_t query_param,
+                         targetlist_param_t *targetlist, target_param_t **target)
 {
-  if( query_param.tid){
-    if( strcmp( query_param.tid, "0") != 0 ){
-      if( query_param.cid[0] != '\0'){
-       fprintf( FCGI_stdout, "Reason: Target can not be specified both through tid and cid\r\n");
-       fprintf( FCGI_stdout, "Status: 400\r\n");
-       return OPJ_FALSE;
-      }
-      if( ( *target = search_targetBytid( query_param.tid, targetlist)))
-       return OPJ_TRUE;
+    if (query_param.tid) {
+        if (strcmp(query_param.tid, "0") != 0) {
+            if (query_param.cid[0] != '\0') {
+                fprintf(FCGI_stdout,
+                        "Reason: Target can not be specified both through tid and cid\r\n");
+                fprintf(FCGI_stdout, "Status: 400\r\n");
+                return OPJ_FALSE;
+            }
+            if ((*target = search_targetBytid(query_param.tid, targetlist))) {
+                return OPJ_TRUE;
+            }
+        }
     }
-  }
 
-  if( query_param.target)
-    if( !( *target = search_target( query_param.target, targetlist)))
-      if(!( *target = gene_target( targetlist, query_param.target)))
-       return OPJ_FALSE;
-
-  if( *target){
-    fprintf( FCGI_stdout, "JPIP-tid: %s\r\n", (*target)->tid);
-    return OPJ_TRUE;
-  }
-  else{
-    fprintf( FCGI_stdout, "Reason: target not found\r\n");
-    fprintf( FCGI_stdout, "Status: 400\r\n");
-    return OPJ_FALSE;
-  }
+    if (query_param.target)
+        if (!(*target = search_target(query_param.target, targetlist)))
+            if (!(*target = gene_target(targetlist, query_param.target))) {
+                return OPJ_FALSE;
+            }
+
+    if (*target) {
+        fprintf(FCGI_stdout, "JPIP-tid: %s\r\n", (*target)->tid);
+        return OPJ_TRUE;
+    } else {
+        fprintf(FCGI_stdout, "Reason: target not found\r\n");
+        fprintf(FCGI_stdout, "Status: 400\r\n");
+        return OPJ_FALSE;
+    }
 }
 
-OPJ_BOOL associate_channel( query_param_t    query_param, 
-                       sessionlist_param_t *sessionlist,
-                       session_param_t **cursession, 
-                       channel_param_t **curchannel)
+OPJ_BOOL associate_channel(query_param_t    query_param,
+                           sessionlist_param_t *sessionlist,
+                           session_param_t **cursession,
+                           channel_param_t **curchannel)
 {
-  if( search_session_and_channel( query_param.cid, sessionlist, cursession, curchannel)){
-    
-    if( !query_param.cnew)
-      set_channel_variable_param( query_param, *curchannel);
-  }
-  else{
-    fprintf( FCGI_stderr, "Error: process canceled\n");
-    return OPJ_FALSE;
-  }
-  return OPJ_TRUE;
+    if (search_session_and_channel(query_param.cid, sessionlist, cursession,
+                                   curchannel)) {
+
+        if (!query_param.cnew) {
+            set_channel_variable_param(query_param, *curchannel);
+        }
+    } else {
+        fprintf(FCGI_stderr, "Error: process canceled\n");
+        return OPJ_FALSE;
+    }
+    return OPJ_TRUE;
 }
 
-OPJ_BOOL open_channel( query_param_t query_param, 
-                  sessionlist_param_t *sessionlist,
-                  auxtrans_param_t auxtrans,
-                  target_param_t *target,
-                  session_param_t **cursession, 
-                  channel_param_t **curchannel)
+OPJ_BOOL open_channel(query_param_t query_param,
+                      sessionlist_param_t *sessionlist,
+                      auxtrans_param_t auxtrans,
+                      target_param_t *target,
+                      session_param_t **cursession,
+                      channel_param_t **curchannel)
 {
-  cachemodel_param_t *cachemodel = NULL;
-
-  if( target){
-    if( !(*cursession))
-      *cursession = gene_session( sessionlist);
-    if( !( cachemodel = search_cachemodel( target, (*cursession)->cachemodellist)))
-      if( !(cachemodel = gene_cachemodel( (*cursession)->cachemodellist, target, query_param.return_type==JPPstream)))
-       return OPJ_FALSE;
-  }
-  else
-    if( *curchannel)
-      cachemodel = (*curchannel)->cachemodel;
-
-  *curchannel = gene_channel( query_param, auxtrans, cachemodel, (*cursession)->channellist);
-  if( *curchannel == NULL)
-    return OPJ_FALSE;
-
-  return OPJ_TRUE;
+    cachemodel_param_t *cachemodel = NULL;
+
+    if (target) {
+        if (!(*cursession)) {
+            *cursession = gene_session(sessionlist);
+        }
+        if (!(cachemodel = search_cachemodel(target, (*cursession)->cachemodellist)))
+            if (!(cachemodel = gene_cachemodel((*cursession)->cachemodellist, target,
+                                               query_param.return_type == JPPstream))) {
+                return OPJ_FALSE;
+            }
+    } else if (*curchannel) {
+        cachemodel = (*curchannel)->cachemodel;
+    }
+
+    *curchannel = gene_channel(query_param, auxtrans, cachemodel,
+                               (*cursession)->channellist);
+    if (*curchannel == NULL) {
+        return OPJ_FALSE;
+    }
+
+    return OPJ_TRUE;
 }
 
-OPJ_BOOL close_channel( query_param_t query_param, 
-                   sessionlist_param_t *sessionlist,
-                   session_param_t **cursession, 
-                   channel_param_t **curchannel)
+OPJ_BOOL close_channel(query_param_t query_param,
+                       sessionlist_param_t *sessionlist,
+                       session_param_t **cursession,
+                       channel_param_t **curchannel)
 {
-  char *cclose;
-  int i;
-  
-  if( query_param.cclose[0] =='*'){
+    char *cclose;
+    int i;
+
+    if (query_param.cclose[0] == '*') {
 #ifndef SERVER
-    fprintf( logstream, "local log: close all\n");
+        fprintf(logstream, "local log: close all\n");
 #endif
-    /* all channels associatd with the session will be closed */
-    if( !delete_session( cursession, sessionlist))
-      return OPJ_FALSE;
-  }
-  else{
-    /* check if all entry belonging to the same session */
-    
-    for( i=0, cclose=query_param.cclose; i<query_param.numOfcclose; i++, cclose += (strlen(cclose)+1)){
-      
-      /* In case of the first entry of close cid */
-      if( *cursession == NULL){
-       if( !search_session_and_channel( cclose, sessionlist, cursession, curchannel))
-         return OPJ_FALSE;
-      }
-      else /* second or more entry of close cid */
-       if( !(*curchannel=search_channel( cclose, (*cursession)->channellist))){
-         fprintf( FCGI_stdout, "Reason: Cclose id %s is from another session\r\n", cclose); 
-         return OPJ_FALSE;
-       }
-    }
-
-    /* delete channels */
-    for( i=0, cclose=query_param.cclose; i<query_param.numOfcclose; i++, cclose += (strlen(cclose)+1)){
-      *curchannel = search_channel( cclose, (*cursession)->channellist);
-      delete_channel( curchannel, (*cursession)->channellist);
+        /* all channels associatd with the session will be closed */
+        if (!delete_session(cursession, sessionlist)) {
+            return OPJ_FALSE;
+        }
+    } else {
+        /* check if all entry belonging to the same session */
+
+        for (i = 0, cclose = query_param.cclose; i < query_param.numOfcclose;
+                i++, cclose += (strlen(cclose) + 1)) {
+
+            /* In case of the first entry of close cid */
+            if (*cursession == NULL) {
+                if (!search_session_and_channel(cclose, sessionlist, cursession, curchannel)) {
+                    return OPJ_FALSE;
+                }
+            } else /* second or more entry of close cid */
+                if (!(*curchannel = search_channel(cclose, (*cursession)->channellist))) {
+                    fprintf(FCGI_stdout, "Reason: Cclose id %s is from another session\r\n",
+                            cclose);
+                    return OPJ_FALSE;
+                }
+        }
+
+        /* delete channels */
+        for (i = 0, cclose = query_param.cclose; i < query_param.numOfcclose;
+                i++, cclose += (strlen(cclose) + 1)) {
+            *curchannel = search_channel(cclose, (*cursession)->channellist);
+            delete_channel(curchannel, (*cursession)->channellist);
+        }
+
+        if ((*cursession)->channellist->first == NULL ||
+                (*cursession)->channellist->last == NULL)
+            /* In case of empty session */
+        {
+            delete_session(cursession, sessionlist);
+        }
     }
-    
-    if( (*cursession)->channellist->first == NULL || (*cursession)->channellist->last == NULL)
-      /* In case of empty session */
-      delete_session( cursession, sessionlist);
-  }
-  return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 
@@ -171,74 +185,82 @@ OPJ_BOOL close_channel( query_param_t query_param,
  * enqueue tiles or precincts into the message queue
  *
  * @param[in] query_param structured query
- * @param[in] msgqueue    message queue pointer  
+ * @param[in] msgqueue    message queue pointer
  */
-void enqueue_imagedata( query_param_t query_param, msgqueue_param_t *msgqueue);
+void enqueue_imagedata(query_param_t query_param, msgqueue_param_t *msgqueue);
 
 /**
  * enqueue metadata bins into the message queue
  *
  * @param[in]     query_param  structured query
  * @param[in]     metadatalist pointer to metadata bin list
- * @param[in,out] msgqueue     message queue pointer  
+ * @param[in,out] msgqueue     message queue pointer
  * @return                     if succeeded (true) or failed (false)
  */
-OPJ_BOOL enqueue_metabins( query_param_t query_param, metadatalist_param_t *metadatalist, msgqueue_param_t *msgqueue);
+OPJ_BOOL enqueue_metabins(query_param_t query_param,
+                          metadatalist_param_t *metadatalist, msgqueue_param_t *msgqueue);
 
 
-OPJ_BOOL gene_JPIPstream( query_param_t query_param,
-                     target_param_t *target,
-                     session_param_t *cursession, 
-                     channel_param_t *curchannel,
-                     msgqueue_param_t **msgqueue)
+OPJ_BOOL gene_JPIPstream(query_param_t query_param,
+                         target_param_t *target,
+                         session_param_t *cursession,
+                         channel_param_t *curchannel,
+                         msgqueue_param_t **msgqueue)
 {
-  index_param_t *codeidx;
-  cachemodel_param_t *cachemodel;
-  
-  if( !cursession || !curchannel){ /* stateless */
-    if( !target)
-      return OPJ_FALSE;
-    if( !(cachemodel = gene_cachemodel( NULL, target, query_param.return_type==JPPstream)))
-      return OPJ_FALSE;
-    *msgqueue = gene_msgqueue( OPJ_TRUE, cachemodel);
-  }
-  else{ /* session */
-    cachemodel  = curchannel->cachemodel;
-    target = cachemodel->target;
-    *msgqueue = gene_msgqueue( OPJ_FALSE, cachemodel);
-  }
-  
-  codeidx = target->codeidx;
-
-  if( cachemodel->jppstream)
-    fprintf( FCGI_stdout, "Content-type: image/jpp-stream\r\n");
-  else
-    fprintf( FCGI_stdout, "Content-type: image/jpt-stream\r\n");
-  
-  if( query_param.layers != -1){
-    if( query_param.layers  > codeidx->COD.numOflayers){
-      fprintf( FCGI_stdout, "JPIP-layers: %d\r\n", codeidx->COD.numOflayers);
-      query_param.layers = codeidx->COD.numOflayers;
+    index_param_t *codeidx;
+    cachemodel_param_t *cachemodel;
+
+    if (!cursession || !curchannel) { /* stateless */
+        if (!target) {
+            return OPJ_FALSE;
+        }
+        if (!(cachemodel = gene_cachemodel(NULL, target,
+                                           query_param.return_type == JPPstream))) {
+            return OPJ_FALSE;
+        }
+        *msgqueue = gene_msgqueue(OPJ_TRUE, cachemodel);
+    } else { /* session */
+        cachemodel  = curchannel->cachemodel;
+        target = cachemodel->target;
+        *msgqueue = gene_msgqueue(OPJ_FALSE, cachemodel);
     }
-  }
-
-  /*meta*/
-  if( query_param.box_type[0][0] != 0  && query_param.len != 0)
-    if( !enqueue_metabins( query_param, codeidx->metadatalist, *msgqueue))
-      return OPJ_FALSE;
-  
-  if( query_param.metadata_only)
-    return OPJ_TRUE;
 
-  /* main header */
-  if( !cachemodel->mhead_model && query_param.len != 0)
-      enqueue_mainheader( *msgqueue);
+    codeidx = target->codeidx;
+
+    if (cachemodel->jppstream) {
+        fprintf(FCGI_stdout, "Content-type: image/jpp-stream\r\n");
+    } else {
+        fprintf(FCGI_stdout, "Content-type: image/jpt-stream\r\n");
+    }
+
+    if (query_param.layers != -1) {
+        if (query_param.layers  > codeidx->COD.numOflayers) {
+            fprintf(FCGI_stdout, "JPIP-layers: %d\r\n", codeidx->COD.numOflayers);
+            query_param.layers = codeidx->COD.numOflayers;
+        }
+    }
 
-  /* image codestream */
-  if( (query_param.fx > 0 && query_param.fy > 0))
-    enqueue_imagedata( query_param, *msgqueue);
-  
-  return OPJ_TRUE;
+    /*meta*/
+    if (query_param.box_type[0][0] != 0  && query_param.len != 0)
+        if (!enqueue_metabins(query_param, codeidx->metadatalist, *msgqueue)) {
+            return OPJ_FALSE;
+        }
+
+    if (query_param.metadata_only) {
+        return OPJ_TRUE;
+    }
+
+    /* main header */
+    if (!cachemodel->mhead_model && query_param.len != 0) {
+        enqueue_mainheader(*msgqueue);
+    }
+
+    /* image codestream */
+    if ((query_param.fx > 0 && query_param.fy > 0)) {
+        enqueue_imagedata(query_param, *msgqueue);
+    }
+
+    return OPJ_TRUE;
 }
 
 
@@ -257,7 +279,9 @@ OPJ_BOOL gene_JPIPstream( query_param_t query_param,
  * @param[in] msgqueue  message queue
  * @return
  */
-void enqueue_precincts( int xmin, int xmax, int ymin, int ymax, int tile_id, int level, int lastcomp, OPJ_BOOL *comps, int layers, msgqueue_param_t *msgqueue);
+void enqueue_precincts(int xmin, int xmax, int ymin, int ymax, int tile_id,
+                       int level, int lastcomp, OPJ_BOOL *comps, int layers,
+                       msgqueue_param_t *msgqueue);
 
 /**
  * enqueue all precincts inside a tile into the queue
@@ -270,191 +294,219 @@ void enqueue_precincts( int xmin, int xmax, int ymin, int ymax, int tile_id, int
  * @param[in] msgqueue  message queue
  * @return
  */
-void enqueue_allprecincts( int tile_id, int level, int lastcomp, OPJ_BOOL *comps, int layers, msgqueue_param_t *msgqueue);
+void enqueue_allprecincts(int tile_id, int level, int lastcomp, OPJ_BOOL *comps,
+                          int layers, msgqueue_param_t *msgqueue);
 
-void enqueue_imagedata( query_param_t query_param, msgqueue_param_t *msgqueue)
+void enqueue_imagedata(query_param_t query_param, msgqueue_param_t *msgqueue)
 {
-  index_param_t *codeidx;
-  imgreg_param_t imgreg;
-  range_param_t tile_Xrange, tile_Yrange;
-  Byte4_t u, v, tile_id;
-  int xmin, xmax, ymin, ymax;
-  int numOfreslev;
-
-  codeidx = msgqueue->cachemodel->target->codeidx;
-
-  if( !(msgqueue->cachemodel->jppstream)  &&  get_nmax( codeidx->tilepart) == 1) /* normally not the case */
-    numOfreslev = 1;
-  else
-    numOfreslev = codeidx->COD.numOfdecomp+1;
-
-  imgreg  = map_viewin2imgreg( query_param.fx, query_param.fy, 
-                              query_param.rx, query_param.ry, query_param.rw, query_param.rh,
-                              (int)codeidx->SIZ.XOsiz, (int)codeidx->SIZ.YOsiz, (int)codeidx->SIZ.Xsiz, (int)codeidx->SIZ.Ysiz, 
-                              numOfreslev );
-
-  if( query_param.len == 0)
-    return;
-
-  for( u=0, tile_id=0; u<codeidx->SIZ.YTnum; u++){
-    tile_Yrange = get_tile_Yrange( codeidx->SIZ, tile_id, imgreg.level);
-    
-    for( v=0; v<codeidx->SIZ.XTnum; v++, tile_id++){
-      tile_Xrange = get_tile_Xrange( codeidx->SIZ, tile_id, imgreg.level);
-       
-      if( tile_Xrange.minvalue < tile_Xrange.maxvalue && tile_Yrange.minvalue < tile_Yrange.maxvalue){
-       if( tile_Xrange.maxvalue <= (Byte4_t)(imgreg.xosiz + imgreg.ox) || 
-           tile_Xrange.minvalue >= (Byte4_t)(imgreg.xosiz + imgreg.ox + imgreg.sx) ||
-           tile_Yrange.maxvalue <= (Byte4_t)(imgreg.yosiz + imgreg.oy) || 
-           tile_Yrange.minvalue >= (Byte4_t)(imgreg.yosiz + imgreg.oy + imgreg.sy)) {
-         /*printf("Tile completely excluded from view-window %d\n", tile_id);*/
-         /* Tile completely excluded from view-window */
-       }
-       else if( tile_Xrange.minvalue >= (Byte4_t)(imgreg.xosiz + imgreg.ox) && 
-                      tile_Xrange.maxvalue <= (Byte4_t)(imgreg.xosiz + imgreg.ox + imgreg.sx) && 
-                      tile_Yrange.minvalue >= (Byte4_t)(imgreg.yosiz + imgreg.oy) && 
-                      tile_Yrange.maxvalue <= (Byte4_t)(imgreg.yosiz + imgreg.oy + imgreg.sy)) {
-         /* Tile completely contained within view-window */
-         /* high priority */
-         /*printf("Tile completely contained within view-window %d\n", tile_id);*/
-         if( msgqueue->cachemodel->jppstream){
-           enqueue_tileheader( (int)tile_id, msgqueue);
-           enqueue_allprecincts( (int)tile_id, imgreg.level, query_param.lastcomp, query_param.comps, query_param.layers, msgqueue);
-         }
-         else
-           enqueue_tile( tile_id, imgreg.level, msgqueue);
-       }
-       else{
-         /* Tile partially overlaps view-window */
-         /* low priority */
-         /*printf("Tile partially overlaps view-window %d\n", tile_id);*/
-         if( msgqueue->cachemodel->jppstream){
-           enqueue_tileheader( (int)tile_id, msgqueue);
-
-      /* FIXME: The following code is suspicious it implicitely cast an unsigned int to int, which truncates values */
-           xmin = tile_Xrange.minvalue >= (Byte4_t)(imgreg.xosiz + imgreg.ox) ? 0 : imgreg.xosiz + imgreg.ox - (int)tile_Xrange.minvalue;
-           xmax = tile_Xrange.maxvalue <= (Byte4_t)(imgreg.xosiz + imgreg.ox + imgreg.sx) ? (int)(tile_Xrange.maxvalue - tile_Xrange.minvalue -1) : (int)(imgreg.xosiz + imgreg.ox + imgreg.sx - (int)tile_Xrange.minvalue - 1);
-           ymin = tile_Yrange.minvalue >= (Byte4_t)(imgreg.yosiz + imgreg.oy) ? 0 : imgreg.yosiz + imgreg.oy - (int)tile_Yrange.minvalue;
-           ymax = tile_Yrange.maxvalue <= (Byte4_t)(imgreg.yosiz + imgreg.oy + imgreg.sy) ? (int)(tile_Yrange.maxvalue - tile_Yrange.minvalue - 1) : (int)(imgreg.yosiz + imgreg.oy + imgreg.sy - (int)tile_Yrange.minvalue - 1);
-           enqueue_precincts( xmin, xmax, ymin, ymax, (int)tile_id, imgreg.level, query_param.lastcomp, query_param.comps, query_param.layers, msgqueue);
-         }
-         else
-           enqueue_tile( tile_id, imgreg.level, msgqueue);
-       }
-      }
+    index_param_t *codeidx;
+    imgreg_param_t imgreg;
+    range_param_t tile_Xrange, tile_Yrange;
+    Byte4_t u, v, tile_id;
+    int xmin, xmax, ymin, ymax;
+    int numOfreslev;
+
+    codeidx = msgqueue->cachemodel->target->codeidx;
+
+    if (!(msgqueue->cachemodel->jppstream)  &&
+            get_nmax(codeidx->tilepart) == 1) { /* normally not the case */
+        numOfreslev = 1;
+    } else {
+        numOfreslev = codeidx->COD.numOfdecomp + 1;
+    }
+
+    imgreg  = map_viewin2imgreg(query_param.fx, query_param.fy,
+                                query_param.rx, query_param.ry, query_param.rw, query_param.rh,
+                                (int)codeidx->SIZ.XOsiz, (int)codeidx->SIZ.YOsiz, (int)codeidx->SIZ.Xsiz,
+                                (int)codeidx->SIZ.Ysiz,
+                                numOfreslev);
+
+    if (query_param.len == 0) {
+        return;
+    }
+
+    for (u = 0, tile_id = 0; u < codeidx->SIZ.YTnum; u++) {
+        tile_Yrange = get_tile_Yrange(codeidx->SIZ, tile_id, imgreg.level);
+
+        for (v = 0; v < codeidx->SIZ.XTnum; v++, tile_id++) {
+            tile_Xrange = get_tile_Xrange(codeidx->SIZ, tile_id, imgreg.level);
+
+            if (tile_Xrange.minvalue < tile_Xrange.maxvalue &&
+                    tile_Yrange.minvalue < tile_Yrange.maxvalue) {
+                if (tile_Xrange.maxvalue <= (Byte4_t)(imgreg.xosiz + imgreg.ox) ||
+                        tile_Xrange.minvalue >= (Byte4_t)(imgreg.xosiz + imgreg.ox + imgreg.sx) ||
+                        tile_Yrange.maxvalue <= (Byte4_t)(imgreg.yosiz + imgreg.oy) ||
+                        tile_Yrange.minvalue >= (Byte4_t)(imgreg.yosiz + imgreg.oy + imgreg.sy)) {
+                    /*printf("Tile completely excluded from view-window %d\n", tile_id);*/
+                    /* Tile completely excluded from view-window */
+                } else if (tile_Xrange.minvalue >= (Byte4_t)(imgreg.xosiz + imgreg.ox) &&
+                           tile_Xrange.maxvalue <= (Byte4_t)(imgreg.xosiz + imgreg.ox + imgreg.sx) &&
+                           tile_Yrange.minvalue >= (Byte4_t)(imgreg.yosiz + imgreg.oy) &&
+                           tile_Yrange.maxvalue <= (Byte4_t)(imgreg.yosiz + imgreg.oy + imgreg.sy)) {
+                    /* Tile completely contained within view-window */
+                    /* high priority */
+                    /*printf("Tile completely contained within view-window %d\n", tile_id);*/
+                    if (msgqueue->cachemodel->jppstream) {
+                        enqueue_tileheader((int)tile_id, msgqueue);
+                        enqueue_allprecincts((int)tile_id, imgreg.level, query_param.lastcomp,
+                                             query_param.comps, query_param.layers, msgqueue);
+                    } else {
+                        enqueue_tile(tile_id, imgreg.level, msgqueue);
+                    }
+                } else {
+                    /* Tile partially overlaps view-window */
+                    /* low priority */
+                    /*printf("Tile partially overlaps view-window %d\n", tile_id);*/
+                    if (msgqueue->cachemodel->jppstream) {
+                        enqueue_tileheader((int)tile_id, msgqueue);
+
+                        /* FIXME: The following code is suspicious it implicitely cast an unsigned int to int, which truncates values */
+                        xmin = tile_Xrange.minvalue >= (Byte4_t)(imgreg.xosiz + imgreg.ox) ? 0 :
+                               imgreg.xosiz + imgreg.ox - (int)tile_Xrange.minvalue;
+                        xmax = tile_Xrange.maxvalue <= (Byte4_t)(imgreg.xosiz + imgreg.ox + imgreg.sx)
+                               ? (int)(tile_Xrange.maxvalue - tile_Xrange.minvalue - 1) : (int)(
+                                   imgreg.xosiz + imgreg.ox + imgreg.sx - (int)tile_Xrange.minvalue - 1);
+                        ymin = tile_Yrange.minvalue >= (Byte4_t)(imgreg.yosiz + imgreg.oy) ? 0 :
+                               imgreg.yosiz + imgreg.oy - (int)tile_Yrange.minvalue;
+                        ymax = tile_Yrange.maxvalue <= (Byte4_t)(imgreg.yosiz + imgreg.oy + imgreg.sy)
+                               ? (int)(tile_Yrange.maxvalue - tile_Yrange.minvalue - 1) : (int)(
+                                   imgreg.yosiz + imgreg.oy + imgreg.sy - (int)tile_Yrange.minvalue - 1);
+                        enqueue_precincts(xmin, xmax, ymin, ymax, (int)tile_id, imgreg.level,
+                                          query_param.lastcomp, query_param.comps, query_param.layers, msgqueue);
+                    } else {
+                        enqueue_tile(tile_id, imgreg.level, msgqueue);
+                    }
+                }
+            }
+        }
     }
-  }
 }
 
 
-void enqueue_precincts( int xmin, int xmax, int ymin, int ymax, int tile_id, int level, int lastcomp, OPJ_BOOL *comps, int layers, msgqueue_param_t *msgqueue)
+void enqueue_precincts(int xmin, int xmax, int ymin, int ymax, int tile_id,
+                       int level, int lastcomp, OPJ_BOOL *comps, int layers,
+                       msgqueue_param_t *msgqueue)
 {
-  index_param_t *codeidx;
-  int c, u, v, res_lev, dec_lev;
-  int seq_id;
-  Byte4_t XTsiz, YTsiz;
-  Byte4_t XPsiz, YPsiz;
-  Byte4_t xminP, xmaxP, yminP, ymaxP;
-
-  codeidx  = msgqueue->cachemodel->target->codeidx;
-  /* MM: shouldn't xmin/xmax be Byte4_t instead ? */
-  if( xmin < 0 || xmax < 0 || ymin < 0 || ymax < 0)
-    return;
-  /* MM: I think the API should not really be int should it ? */
-  if( tile_id < 0 )
-    return;
-
-  for( c=0; c<codeidx->SIZ.Csiz; c++)
-    if( lastcomp == -1 /*all*/ || ( c<=lastcomp && comps[c])){
-      seq_id = 0;
-      for( res_lev=0, dec_lev=codeidx->COD.numOfdecomp; dec_lev>=level; res_lev++, dec_lev--){
-       
-       XTsiz = get_tile_XSiz( codeidx->SIZ, (Byte4_t)tile_id, dec_lev);
-       YTsiz = get_tile_YSiz( codeidx->SIZ, (Byte4_t)tile_id, dec_lev);
-       
-       XPsiz = ( codeidx->COD.Scod & 0x01) ? codeidx->COD.XPsiz[ res_lev] : XTsiz;
-       YPsiz = ( codeidx->COD.Scod & 0x01) ? codeidx->COD.YPsiz[ res_lev] : YTsiz;
-         
-       for( u=0; u<ceil((double)YTsiz/(double)YPsiz); u++){
-         yminP = (Byte4_t)u*YPsiz;
-         ymaxP = (Byte4_t)(u+1)*YPsiz-1;
-         if( YTsiz <= ymaxP)
-           ymaxP = YTsiz-1;
-         
-         for( v=0; v<ceil((double)XTsiz/(double)XPsiz); v++, seq_id++){
-           xminP = (Byte4_t)v*XPsiz;
-           xmaxP = (Byte4_t)(v+1)*XPsiz-1;
-           if( XTsiz <= xmaxP)
-             xmaxP = XTsiz-1;
-           
-           if( xmaxP < (Byte4_t)xmin || xminP > (Byte4_t)xmax || ymaxP < (Byte4_t)ymin || yminP > (Byte4_t)ymax){
-             /* Precinct completely excluded from view-window */
-           }
-           else if( xminP >= (Byte4_t)xmin && xmaxP <= (Byte4_t)xmax && yminP >= (Byte4_t)ymin && ymaxP <= (Byte4_t)ymax){
-             /* Precinct completely contained within view-window
-              high priority */
-             enqueue_precinct( seq_id, tile_id, c, (dec_lev>level)?-1:layers, msgqueue);
-           }
-           else{
-             /* Precinct partially overlaps view-window
-              low priority */
-             enqueue_precinct( seq_id, tile_id, c, (dec_lev>level)?-1:layers, msgqueue);
-           }
-         }
-       }
-      }
+    index_param_t *codeidx;
+    int c, u, v, res_lev, dec_lev;
+    int seq_id;
+    Byte4_t XTsiz, YTsiz;
+    Byte4_t XPsiz, YPsiz;
+    Byte4_t xminP, xmaxP, yminP, ymaxP;
+
+    codeidx  = msgqueue->cachemodel->target->codeidx;
+    /* MM: shouldn't xmin/xmax be Byte4_t instead ? */
+    if (xmin < 0 || xmax < 0 || ymin < 0 || ymax < 0) {
+        return;
+    }
+    /* MM: I think the API should not really be int should it ? */
+    if (tile_id < 0) {
+        return;
     }
+
+    for (c = 0; c < codeidx->SIZ.Csiz; c++)
+        if (lastcomp == -1 /*all*/ || (c <= lastcomp && comps[c])) {
+            seq_id = 0;
+            for (res_lev = 0, dec_lev = codeidx->COD.numOfdecomp; dec_lev >= level;
+                    res_lev++, dec_lev--) {
+
+                XTsiz = get_tile_XSiz(codeidx->SIZ, (Byte4_t)tile_id, dec_lev);
+                YTsiz = get_tile_YSiz(codeidx->SIZ, (Byte4_t)tile_id, dec_lev);
+
+                XPsiz = (codeidx->COD.Scod & 0x01) ? codeidx->COD.XPsiz[ res_lev] : XTsiz;
+                YPsiz = (codeidx->COD.Scod & 0x01) ? codeidx->COD.YPsiz[ res_lev] : YTsiz;
+
+                for (u = 0; u < ceil((double)YTsiz / (double)YPsiz); u++) {
+                    yminP = (Byte4_t)u * YPsiz;
+                    ymaxP = (Byte4_t)(u + 1) * YPsiz - 1;
+                    if (YTsiz <= ymaxP) {
+                        ymaxP = YTsiz - 1;
+                    }
+
+                    for (v = 0; v < ceil((double)XTsiz / (double)XPsiz); v++, seq_id++) {
+                        xminP = (Byte4_t)v * XPsiz;
+                        xmaxP = (Byte4_t)(v + 1) * XPsiz - 1;
+                        if (XTsiz <= xmaxP) {
+                            xmaxP = XTsiz - 1;
+                        }
+
+                        if (xmaxP < (Byte4_t)xmin || xminP > (Byte4_t)xmax || ymaxP < (Byte4_t)ymin ||
+                                yminP > (Byte4_t)ymax) {
+                            /* Precinct completely excluded from view-window */
+                        } else if (xminP >= (Byte4_t)xmin && xmaxP <= (Byte4_t)xmax &&
+                                   yminP >= (Byte4_t)ymin && ymaxP <= (Byte4_t)ymax) {
+                            /* Precinct completely contained within view-window
+                             high priority */
+                            enqueue_precinct(seq_id, tile_id, c, (dec_lev > level) ? -1 : layers, msgqueue);
+                        } else {
+                            /* Precinct partially overlaps view-window
+                             low priority */
+                            enqueue_precinct(seq_id, tile_id, c, (dec_lev > level) ? -1 : layers, msgqueue);
+                        }
+                    }
+                }
+            }
+        }
 }
 
-void enqueue_allprecincts( int tile_id, int level, int lastcomp, OPJ_BOOL *comps, int layers, msgqueue_param_t *msgqueue)
+void enqueue_allprecincts(int tile_id, int level, int lastcomp, OPJ_BOOL *comps,
+                          int layers, msgqueue_param_t *msgqueue)
 {
-  index_param_t *codeidx;
-  int c, i, res_lev, dec_lev;
-  int seq_id;
-  Byte4_t XTsiz, YTsiz;
-  Byte4_t XPsiz, YPsiz;
-
-  codeidx  = msgqueue->cachemodel->target->codeidx;
-  if( tile_id < 0 )
-    return;
-
-  for( c=0; c<codeidx->SIZ.Csiz; c++)
-    if( lastcomp == -1 /*all*/ || ( c<=lastcomp && comps[c])){
-      seq_id = 0;
-      for( res_lev=0, dec_lev=codeidx->COD.numOfdecomp; dec_lev>=level; res_lev++, dec_lev--){
-       
-       XTsiz = get_tile_XSiz( codeidx->SIZ, (Byte4_t)tile_id, dec_lev);
-       YTsiz = get_tile_YSiz( codeidx->SIZ, (Byte4_t)tile_id, dec_lev);
-       
-       XPsiz = ( codeidx->COD.Scod & 0x01) ? codeidx->COD.XPsiz[ res_lev] : XTsiz;
-       YPsiz = ( codeidx->COD.Scod & 0x01) ? codeidx->COD.YPsiz[ res_lev] : YTsiz;
-       
-       for( i=0; i<ceil((double)YTsiz/(double)YPsiz)*ceil((double)XTsiz/(double)XPsiz); i++, seq_id++)
-         enqueue_precinct( seq_id, tile_id, c, (dec_lev>level)?-1:layers, msgqueue);
-      }
+    index_param_t *codeidx;
+    int c, i, res_lev, dec_lev;
+    int seq_id;
+    Byte4_t XTsiz, YTsiz;
+    Byte4_t XPsiz, YPsiz;
+
+    codeidx  = msgqueue->cachemodel->target->codeidx;
+    if (tile_id < 0) {
+        return;
     }
+
+    for (c = 0; c < codeidx->SIZ.Csiz; c++)
+        if (lastcomp == -1 /*all*/ || (c <= lastcomp && comps[c])) {
+            seq_id = 0;
+            for (res_lev = 0, dec_lev = codeidx->COD.numOfdecomp; dec_lev >= level;
+                    res_lev++, dec_lev--) {
+
+                XTsiz = get_tile_XSiz(codeidx->SIZ, (Byte4_t)tile_id, dec_lev);
+                YTsiz = get_tile_YSiz(codeidx->SIZ, (Byte4_t)tile_id, dec_lev);
+
+                XPsiz = (codeidx->COD.Scod & 0x01) ? codeidx->COD.XPsiz[ res_lev] : XTsiz;
+                YPsiz = (codeidx->COD.Scod & 0x01) ? codeidx->COD.YPsiz[ res_lev] : YTsiz;
+
+                for (i = 0;
+                        i < ceil((double)YTsiz / (double)YPsiz)*ceil((double)XTsiz / (double)XPsiz);
+                        i++, seq_id++) {
+                    enqueue_precinct(seq_id, tile_id, c, (dec_lev > level) ? -1 : layers,
+                                     msgqueue);
+                }
+            }
+        }
 }
 
-OPJ_BOOL enqueue_metabins( query_param_t query_param, metadatalist_param_t *metadatalist, msgqueue_param_t *msgqueue)
+OPJ_BOOL enqueue_metabins(query_param_t query_param,
+                          metadatalist_param_t *metadatalist, msgqueue_param_t *msgqueue)
 {
-  int i;
-  for( i=0; i<MAX_NUMOFBOX && query_param.box_type[i][0]!=0; i++){
-    if( query_param.box_type[i][0] == '*'){
-      fprintf( FCGI_stdout, "Status: 501\r\n");
-      fprintf( FCGI_stdout, "Reason: metareq with all box-property * not implemented\r\n");
-      return OPJ_FALSE;
+    int i;
+    for (i = 0; i < MAX_NUMOFBOX && query_param.box_type[i][0] != 0; i++) {
+        if (query_param.box_type[i][0] == '*') {
+            fprintf(FCGI_stdout, "Status: 501\r\n");
+            fprintf(FCGI_stdout,
+                    "Reason: metareq with all box-property * not implemented\r\n");
+            return OPJ_FALSE;
+        } else {
+            Byte8_t idx = search_metadataidx(query_param.box_type[i], metadatalist);
+
+            if (idx != (Byte8_t) - 1) {
+                enqueue_metadata(idx, msgqueue);
+            } else {
+                fprintf(FCGI_stdout, "Status: 400\r\n");
+                fprintf(FCGI_stdout, "Reason: box-type %.4s not found\r\n",
+                        query_param.box_type[i]);
+                return OPJ_FALSE;
+            }
+        }
     }
-    else{
-      Byte8_t idx = search_metadataidx( query_param.box_type[i], metadatalist);
-
-      if( idx != (Byte8_t)-1)
-       enqueue_metadata( idx, msgqueue);
-      else{
-       fprintf( FCGI_stdout, "Status: 400\r\n");
-       fprintf( FCGI_stdout, "Reason: box-type %.4s not found\r\n", query_param.box_type[i]);
-       return OPJ_FALSE;
-      }
-    }
-  }
-  return OPJ_TRUE;
+    return OPJ_TRUE;
 }
index 3929b495b1504612efd17daba7467b30028f7151..29ddc8b800e451f2698a1a4af107d8d4eec0ab5f 100644 (file)
 #include "ihdrbox_manager.h"
 #include "j2kheader_manager.h"
 
-Byte_t * update_JPIPstream( Byte_t *newstream, OPJ_SIZE_T newstreamlen, Byte_t *cache_stream, OPJ_SIZE_T *streamlen)
+Byte_t * update_JPIPstream(Byte_t *newstream, OPJ_SIZE_T newstreamlen,
+                           Byte_t *cache_stream, OPJ_SIZE_T *streamlen)
 {
-  Byte_t *stream = (Byte_t *)opj_malloc( (*streamlen)+newstreamlen);
-  if( *streamlen > 0)
-    memcpy( stream, cache_stream, *streamlen);
-  memcpy( stream+(*streamlen), newstream, newstreamlen);
-  *streamlen += newstreamlen;
-
-  if(cache_stream)
-    opj_free( cache_stream);
-  
-  return stream;
+    Byte_t *stream = (Byte_t *)opj_malloc((*streamlen) + newstreamlen);
+    if (*streamlen > 0) {
+        memcpy(stream, cache_stream, *streamlen);
+    }
+    memcpy(stream + (*streamlen), newstream, newstreamlen);
+    *streamlen += newstreamlen;
+
+    if (cache_stream) {
+        opj_free(cache_stream);
+    }
+
+    return stream;
 }
 
-void save_codestream( Byte_t *codestream, OPJ_SIZE_T streamlen, const char *fmt)
+void save_codestream(Byte_t *codestream, OPJ_SIZE_T streamlen, const char *fmt)
 {
-  time_t timer;
-  struct tm *t_st;
-  char filename[20];
-  FILE *fp;
-
-  time(&timer);
-  t_st = localtime( &timer);
-  
-  sprintf( filename, "%4d%02d%02d%02d%02d%02d.%.3s", t_st->tm_year+1900, t_st->tm_mon+1, t_st->tm_mday, t_st->tm_hour, t_st->tm_min, t_st->tm_sec, fmt);
-
-  fp = fopen( filename, "wb");
-  if( fwrite( codestream, streamlen, 1, fp) != 1)
-    fprintf( stderr, "Error: failed to write codestream to file %s\n", filename);
-  fclose( fp);
+    time_t timer;
+    struct tm *t_st;
+    char filename[20];
+    FILE *fp;
+
+    time(&timer);
+    t_st = localtime(&timer);
+
+    sprintf(filename, "%4d%02d%02d%02d%02d%02d.%.3s", t_st->tm_year + 1900,
+            t_st->tm_mon + 1, t_st->tm_mday, t_st->tm_hour, t_st->tm_min, t_st->tm_sec,
+            fmt);
+
+    fp = fopen(filename, "wb");
+    if (fwrite(codestream, streamlen, 1, fp) != 1) {
+        fprintf(stderr, "Error: failed to write codestream to file %s\n", filename);
+    }
+    fclose(fp);
 }
 
 
-Byte_t * jpipstream_to_pnm( Byte_t *jpipstream, msgqueue_param_t *msgqueue, Byte8_t csn, int fw, int fh, ihdrbox_param_t **ihdrbox)
+Byte_t * jpipstream_to_pnm(Byte_t *jpipstream, msgqueue_param_t *msgqueue,
+                           Byte8_t csn, int fw, int fh, ihdrbox_param_t **ihdrbox)
 {
-  Byte_t *pnmstream;
-  Byte_t *j2kstream; /* j2k or jp2 codestream */
-  Byte8_t j2klen;
-  size_t retlen;
-  FILE *fp;
-  const char j2kfname[] = "tmp.j2k";
-
-  fp = fopen( j2kfname, "w+b");
-  if( !fp )
-    {
-    return NULL;
+    Byte_t *pnmstream;
+    Byte_t *j2kstream; /* j2k or jp2 codestream */
+    Byte8_t j2klen;
+    size_t retlen;
+    FILE *fp;
+    const char j2kfname[] = "tmp.j2k";
+
+    fp = fopen(j2kfname, "w+b");
+    if (!fp) {
+        return NULL;
     }
-  j2kstream = recons_j2k( msgqueue, jpipstream, csn, fw, fh, &j2klen); 
-  if( !j2kstream )
-    {
-    fclose(fp);
-    remove( j2kfname);
-    return NULL;
+    j2kstream = recons_j2k(msgqueue, jpipstream, csn, fw, fh, &j2klen);
+    if (!j2kstream) {
+        fclose(fp);
+        remove(j2kfname);
+        return NULL;
     }
 
-  retlen = fwrite( j2kstream, 1, j2klen, fp);
-  opj_free( j2kstream);
-  fclose(fp);
-  if( retlen != j2klen )
-    {
-    remove( j2kfname);
-    return NULL;
+    retlen = fwrite(j2kstream, 1, j2klen, fp);
+    opj_free(j2kstream);
+    fclose(fp);
+    if (retlen != j2klen) {
+        remove(j2kfname);
+        return NULL;
     }
 
-  pnmstream = j2k_to_pnm( j2kfname, ihdrbox);
+    pnmstream = j2k_to_pnm(j2kfname, ihdrbox);
 
-  remove( j2kfname);
+    remove(j2kfname);
 
-  return pnmstream;
+    return pnmstream;
 }
 
-ihdrbox_param_t * get_SIZ_from_jpipstream( Byte_t *jpipstream, msgqueue_param_t *msgqueue, Byte8_t csn)
+ihdrbox_param_t * get_SIZ_from_jpipstream(Byte_t *jpipstream,
+        msgqueue_param_t *msgqueue, Byte8_t csn)
 {
-  ihdrbox_param_t *ihdrbox;
-  Byte_t *j2kstream;
-  Byte8_t j2klen;
-  SIZmarker_param_t SIZ;
-
-  j2kstream = recons_j2kmainhead( msgqueue, jpipstream, csn, &j2klen);
-  if( !get_mainheader_from_j2kstream( j2kstream, &SIZ, NULL)){
-    opj_free( j2kstream);
-    return NULL;
-  }
-
-  ihdrbox = (ihdrbox_param_t *)opj_malloc( sizeof(ihdrbox_param_t));
-
-  ihdrbox->width = SIZ.Xsiz;
-  ihdrbox->height = SIZ.Ysiz;
-  ihdrbox->nc = SIZ.Csiz;
-  ihdrbox->bpc = SIZ.Ssiz[0];
-  
-  opj_free( j2kstream);
-
-  return ihdrbox;
+    ihdrbox_param_t *ihdrbox;
+    Byte_t *j2kstream;
+    Byte8_t j2klen;
+    SIZmarker_param_t SIZ;
+
+    j2kstream = recons_j2kmainhead(msgqueue, jpipstream, csn, &j2klen);
+    if (!get_mainheader_from_j2kstream(j2kstream, &SIZ, NULL)) {
+        opj_free(j2kstream);
+        return NULL;
+    }
+
+    ihdrbox = (ihdrbox_param_t *)opj_malloc(sizeof(ihdrbox_param_t));
+
+    ihdrbox->width = SIZ.Xsiz;
+    ihdrbox->height = SIZ.Ysiz;
+    ihdrbox->nc = SIZ.Csiz;
+    ihdrbox->bpc = SIZ.Ssiz[0];
+
+    opj_free(j2kstream);
+
+    return ihdrbox;
 }
index 66269577995ad11b728246bd6b58363611659e40..57531248c95baff854450ecd24caed125b96de8d 100644 (file)
 #define logstream stderr
 #endif /*SERVER */
 
-manfbox_param_t * gene_manfbox( box_param_t *box)
+manfbox_param_t * gene_manfbox(box_param_t *box)
 {
-  manfbox_param_t *manf;   /* manifest parameters */
-  boxheader_param_t *bh;   /* current box pointer */
-  boxheader_param_t *last; /* last boxheader pointer of the list */
-  OPJ_OFF_T pos;                 /* current position in manf_box contents; */
-  
-  manf = ( manfbox_param_t *)malloc( sizeof( manfbox_param_t));
-
-  pos = 0;
-  manf->first = last = NULL;
-
-  while( (OPJ_SIZE_T)pos < get_DBoxlen( box)){
-
-    bh = gene_childboxheader( box, pos);
-    pos += bh->headlen;
-    
-    /* insert into the list */
-    if( manf->first)
-      last->next = bh;
-    else
-      manf->first = bh;
-    last = bh;
-  }
-  return manf;
+    manfbox_param_t *manf;   /* manifest parameters */
+    boxheader_param_t *bh;   /* current box pointer */
+    boxheader_param_t *last; /* last boxheader pointer of the list */
+    OPJ_OFF_T pos;                 /* current position in manf_box contents; */
+
+    manf = (manfbox_param_t *)malloc(sizeof(manfbox_param_t));
+
+    pos = 0;
+    manf->first = last = NULL;
+
+    while ((OPJ_SIZE_T)pos < get_DBoxlen(box)) {
+
+        bh = gene_childboxheader(box, pos);
+        pos += bh->headlen;
+
+        /* insert into the list */
+        if (manf->first) {
+            last->next = bh;
+        } else {
+            manf->first = bh;
+        }
+        last = bh;
+    }
+    return manf;
 }
 
-void delete_manfbox( manfbox_param_t **manf)
+void delete_manfbox(manfbox_param_t **manf)
 {
-  boxheader_param_t *bhPtr, *bhNext;
-  
-  bhPtr = (*manf)->first;
-  while( bhPtr != NULL){
-    bhNext = bhPtr->next;
+    boxheader_param_t *bhPtr, *bhNext;
+
+    bhPtr = (*manf)->first;
+    while (bhPtr != NULL) {
+        bhNext = bhPtr->next;
 #ifndef SERVER
-    /*      fprintf( logstream, "local log: boxheader %.4s deleted!\n", bhPtr->type); */
+        /*      fprintf( logstream, "local log: boxheader %.4s deleted!\n", bhPtr->type); */
 #endif
-      free(bhPtr);
-      bhPtr = bhNext;
-  }
-  free( *manf);
+        free(bhPtr);
+        bhPtr = bhNext;
+    }
+    free(*manf);
 }
 
-void print_manfbox( manfbox_param_t *manf)
+void print_manfbox(manfbox_param_t *manf)
 {
-  boxheader_param_t *ptr;
+    boxheader_param_t *ptr;
 
-  ptr = manf->first;
-  while( ptr != NULL){
-    print_boxheader( ptr);
-    ptr=ptr->next;
-  }
+    ptr = manf->first;
+    while (ptr != NULL) {
+        print_boxheader(ptr);
+        ptr = ptr->next;
+    }
 }
 
-boxheader_param_t * search_boxheader( const char type[], manfbox_param_t *manf)
+boxheader_param_t * search_boxheader(const char type[], manfbox_param_t *manf)
 {
-  boxheader_param_t *found;
-  
-  found = manf->first;
-  
-  while( found != NULL){
-    
-    if( strncmp( type, found->type, 4) == 0)
-      return found;
-      
-    found = found->next;
-  }
-  fprintf( FCGI_stderr, "Error: Boxheader %s not found\n", type);
-
-  return NULL;
+    boxheader_param_t *found;
+
+    found = manf->first;
+
+    while (found != NULL) {
+
+        if (strncmp(type, found->type, 4) == 0) {
+            return found;
+        }
+
+        found = found->next;
+    }
+    fprintf(FCGI_stderr, "Error: Boxheader %s not found\n", type);
+
+    return NULL;
 }
index 155a2d0dc678d1e3e57bd5b97b035a488236efae..9186d96fc1c0f327baf83703ceae3fa441c3720d 100644 (file)
 #define logstream stderr
 #endif /*SERVER */
 
-marker_param_t set_marker( codestream_param_t cs, Byte2_t code, OPJ_OFF_T offset, Byte2_t length)
+marker_param_t set_marker(codestream_param_t cs, Byte2_t code, OPJ_OFF_T offset,
+                          Byte2_t length)
 {
-  marker_param_t mkr;
+    marker_param_t mkr;
 
-  mkr.cs = cs;
-  mkr.code = code;
-  mkr.offset = offset;
-  mkr.length = length;
+    mkr.cs = cs;
+    mkr.code = code;
+    mkr.offset = offset;
+    mkr.length = length;
 
-  return mkr;
+    return mkr;
 }
 
 
-Byte_t fetch_marker1byte( marker_param_t marker, OPJ_OFF_T offset)
+Byte_t fetch_marker1byte(marker_param_t marker, OPJ_OFF_T offset)
 {
-  return fetch_codestream1byte( &(marker.cs), marker.offset+offset);
+    return fetch_codestream1byte(&(marker.cs), marker.offset + offset);
 }
 
-Byte2_t fetch_marker2bytebigendian( marker_param_t marker, OPJ_OFF_T offset)
+Byte2_t fetch_marker2bytebigendian(marker_param_t marker, OPJ_OFF_T offset)
 {
-  return fetch_codestream2bytebigendian( &(marker.cs), marker.offset+offset);
+    return fetch_codestream2bytebigendian(&(marker.cs), marker.offset + offset);
 }
 
-Byte4_t fetch_marker4bytebigendian( marker_param_t marker, OPJ_OFF_T offset)
+Byte4_t fetch_marker4bytebigendian(marker_param_t marker, OPJ_OFF_T offset)
 {
-  return fetch_codestream4bytebigendian( &(marker.cs), marker.offset+offset);
+    return fetch_codestream4bytebigendian(&(marker.cs), marker.offset + offset);
 }
index e46666225cdb79a519da6827fa7c2cb699142485..d7128b9442025c178f1edd9c2e8eeb5478b4a8d7 100644 (file)
 
 metadatalist_param_t * gene_metadatalist(void)
 {
-  metadatalist_param_t *list;
+    metadatalist_param_t *list;
 
-  list = (metadatalist_param_t *)malloc( sizeof(metadatalist_param_t));
-  
-  list->first = NULL;
-  list->last  = NULL;
+    list = (metadatalist_param_t *)malloc(sizeof(metadatalist_param_t));
 
-  return list;
+    list->first = NULL;
+    list->last  = NULL;
+
+    return list;
 }
 
-metadatalist_param_t * const_metadatalist( int fd)
+metadatalist_param_t * const_metadatalist(int fd)
 {
-  metadatalist_param_t *metadatalist;
-  metadata_param_t *metabin;
-  boxlist_param_t *toplev_boxlist;
-  box_param_t *box, *next;
-  placeholderlist_param_t *phldlist;
-  placeholder_param_t *phld;
-  Byte8_t idx;
-  Byte8_t filesize;
-
-  if(!(filesize = (Byte8_t)get_filesize( fd)))
-    return NULL;
-  
-  if( !(toplev_boxlist = get_boxstructure( fd, 0, filesize))){
-    fprintf( FCGI_stderr, "Error: Not correctl JP2 format\n");
-    return NULL;
-  }
-  
-  phldlist = gene_placeholderlist();
-  metadatalist = gene_metadatalist();
-
-  box = toplev_boxlist->first;
-  idx = 0;
-  while( box){
-    next = box->next;
-    if( strncmp( box->type, "jP  ",4)!=0 && strncmp( box->type, "ftyp",4)!=0 && strncmp( box->type, "jp2h",4)!=0){
-      boxlist_param_t *boxlist = NULL;
-      boxcontents_param_t *boxcontents = NULL;
-
-      phld = gene_placeholder( box, ++idx);
-      insert_placeholder_into_list( phld, phldlist);
-
-      boxlist = get_boxstructure( box->fd, get_DBoxoff( box), get_DBoxlen(box));
-      if( !boxlist)
-       boxcontents = gene_boxcontents( get_DBoxoff( box), get_DBoxlen(box));
-      
-      delete_box_in_list( &box, toplev_boxlist);
-      metabin = gene_metadata( idx, boxlist, NULL, boxcontents);
-      insert_metadata_into_list( metabin, metadatalist);
+    metadatalist_param_t *metadatalist;
+    metadata_param_t *metabin;
+    boxlist_param_t *toplev_boxlist;
+    box_param_t *box, *next;
+    placeholderlist_param_t *phldlist;
+    placeholder_param_t *phld;
+    Byte8_t idx;
+    Byte8_t filesize;
+
+    if (!(filesize = (Byte8_t)get_filesize(fd))) {
+        return NULL;
     }
-    box = next;
-  }
 
-  metabin = gene_metadata( 0, toplev_boxlist, phldlist, NULL);
-  insert_metadata_into_list( metabin, metadatalist);
+    if (!(toplev_boxlist = get_boxstructure(fd, 0, filesize))) {
+        fprintf(FCGI_stderr, "Error: Not correctl JP2 format\n");
+        return NULL;
+    }
+
+    phldlist = gene_placeholderlist();
+    metadatalist = gene_metadatalist();
+
+    box = toplev_boxlist->first;
+    idx = 0;
+    while (box) {
+        next = box->next;
+        if (strncmp(box->type, "jP  ", 4) != 0 && strncmp(box->type, "ftyp", 4) != 0 &&
+                strncmp(box->type, "jp2h", 4) != 0) {
+            boxlist_param_t *boxlist = NULL;
+            boxcontents_param_t *boxcontents = NULL;
+
+            phld = gene_placeholder(box, ++idx);
+            insert_placeholder_into_list(phld, phldlist);
 
-  return metadatalist;
+            boxlist = get_boxstructure(box->fd, get_DBoxoff(box), get_DBoxlen(box));
+            if (!boxlist) {
+                boxcontents = gene_boxcontents(get_DBoxoff(box), get_DBoxlen(box));
+            }
+
+            delete_box_in_list(&box, toplev_boxlist);
+            metabin = gene_metadata(idx, boxlist, NULL, boxcontents);
+            insert_metadata_into_list(metabin, metadatalist);
+        }
+        box = next;
+    }
+
+    metabin = gene_metadata(0, toplev_boxlist, phldlist, NULL);
+    insert_metadata_into_list(metabin, metadatalist);
+
+    return metadatalist;
 }
 
-void delete_metadatalist( metadatalist_param_t **list)
+void delete_metadatalist(metadatalist_param_t **list)
 {
-  metadata_param_t *ptr, *next;
+    metadata_param_t *ptr, *next;
 
-  ptr = (*list)->first;
+    ptr = (*list)->first;
 
-  while( ptr != NULL){
-    next=ptr->next;
-    delete_metadata( &ptr);
-    ptr=next;
-  }
-  free( *list);
+    while (ptr != NULL) {
+        next = ptr->next;
+        delete_metadata(&ptr);
+        ptr = next;
+    }
+    free(*list);
 }
 
-metadata_param_t * gene_metadata( Byte8_t idx, boxlist_param_t *boxlist, placeholderlist_param_t *phldlist, boxcontents_param_t *boxcontents)
+metadata_param_t * gene_metadata(Byte8_t idx, boxlist_param_t *boxlist,
+                                 placeholderlist_param_t *phldlist, boxcontents_param_t *boxcontents)
 {
-  metadata_param_t *bin;
-  
-  bin = (metadata_param_t *)malloc( sizeof(metadata_param_t));
-  bin->idx = idx;
-  bin->boxlist = boxlist;
-  bin->placeholderlist = phldlist;
-  bin->boxcontents = boxcontents;
-  bin->next = NULL;
-
-  return bin;
+    metadata_param_t *bin;
+
+    bin = (metadata_param_t *)malloc(sizeof(metadata_param_t));
+    bin->idx = idx;
+    bin->boxlist = boxlist;
+    bin->placeholderlist = phldlist;
+    bin->boxcontents = boxcontents;
+    bin->next = NULL;
+
+    return bin;
 }
 
-void delete_metadata( metadata_param_t **metadata)
+void delete_metadata(metadata_param_t **metadata)
 {
-  delete_boxlist( &((*metadata)->boxlist));
-  delete_placeholderlist( &((*metadata)->placeholderlist));
-  if((*metadata)->boxcontents)
-    free((*metadata)->boxcontents);
+    delete_boxlist(&((*metadata)->boxlist));
+    delete_placeholderlist(&((*metadata)->placeholderlist));
+    if ((*metadata)->boxcontents) {
+        free((*metadata)->boxcontents);
+    }
 #ifndef SERVER
-  /*  fprintf( logstream, "local log: Metadata-bin: %d deleted\n", (*metadata)->idx);*/
+    /*  fprintf( logstream, "local log: Metadata-bin: %d deleted\n", (*metadata)->idx);*/
 #endif
-  free( *metadata);
+    free(*metadata);
 }
 
-void insert_metadata_into_list( metadata_param_t *metabin, metadatalist_param_t *metadatalist)
+void insert_metadata_into_list(metadata_param_t *metabin,
+                               metadatalist_param_t *metadatalist)
 {
-  if( metadatalist->first)
-    metadatalist->last->next = metabin;
-  else
-    metadatalist->first = metabin;
-  metadatalist->last = metabin;
+    if (metadatalist->first) {
+        metadatalist->last->next = metabin;
+    } else {
+        metadatalist->first = metabin;
+    }
+    metadatalist->last = metabin;
 }
 
-void print_metadata( metadata_param_t *metadata)
+void print_metadata(metadata_param_t *metadata)
 {
-  boxcontents_param_t *boxcont;
-  fprintf( logstream, "metadata-bin %" PRIu64 " info:\n", metadata->idx);
-  print_allbox( metadata->boxlist);
-  print_allplaceholder( metadata->placeholderlist);
-  boxcont = metadata->boxcontents;
-  if( boxcont)
-      fprintf( logstream, "box contents:\n"
-              "\t offset: %" PRId64 " %#" PRIx64 "\n" 
-         "\t length: %" PRId64 " %#" PRIx64 "\n", boxcont->offset,
-         boxcont->offset, boxcont->length, boxcont->length);
+    boxcontents_param_t *boxcont;
+    fprintf(logstream, "metadata-bin %" PRIu64 " info:\n", metadata->idx);
+    print_allbox(metadata->boxlist);
+    print_allplaceholder(metadata->placeholderlist);
+
+    boxcont = metadata->boxcontents;
+    if (boxcont)
+        fprintf(logstream, "box contents:\n"
+                "\t offset: %" PRId64 " %#" PRIx64 "\n"
+                "\t length: %" PRId64 " %#" PRIx64 "\n", boxcont->offset,
+                boxcont->offset, boxcont->length, boxcont->length);
 }
 
-void print_allmetadata( metadatalist_param_t *list)
+void print_allmetadata(metadatalist_param_t *list)
 {
-  metadata_param_t *ptr;
-  
-  fprintf( logstream, "all metadata info: \n");
-  ptr = list->first;
-  while( ptr != NULL){
-    print_metadata( ptr);
-    ptr=ptr->next;
-  }
+    metadata_param_t *ptr;
+
+    fprintf(logstream, "all metadata info: \n");
+    ptr = list->first;
+    while (ptr != NULL) {
+        print_metadata(ptr);
+        ptr = ptr->next;
+    }
 }
 
-boxcontents_param_t * gene_boxcontents( OPJ_OFF_T offset, OPJ_SIZE_T length)
+boxcontents_param_t * gene_boxcontents(OPJ_OFF_T offset, OPJ_SIZE_T length)
 {
-  boxcontents_param_t *contents;
+    boxcontents_param_t *contents;
 
-  contents = (boxcontents_param_t *)malloc( sizeof(boxcontents_param_t));
+    contents = (boxcontents_param_t *)malloc(sizeof(boxcontents_param_t));
 
-  contents->offset = offset;
-  contents->length = length;
+    contents->offset = offset;
+    contents->length = length;
 
-  return contents;
+    return contents;
 }
 
-metadata_param_t * search_metadata( Byte8_t idx, metadatalist_param_t *list)
-{ 
-  metadata_param_t *found;
-
-  found = list->first;
-  
-  while( found){
-    
-    if( found->idx == idx)
-      return found;
-      
-    found = found->next;
-  }
-  return NULL;
+metadata_param_t * search_metadata(Byte8_t idx, metadatalist_param_t *list)
+{
+    metadata_param_t *found;
+
+    found = list->first;
+
+    while (found) {
+
+        if (found->idx == idx) {
+            return found;
+        }
+
+        found = found->next;
+    }
+    return NULL;
 }
 
-Byte8_t search_metadataidx( char boxtype[4], metadatalist_param_t *list)
+Byte8_t search_metadataidx(char boxtype[4], metadatalist_param_t *list)
 {
-  /* MM FIXME: what is the return type of this function ?
-   Byte8_t or int ? */
-  metadata_param_t *ptr;
-  int i;
-
-  for( i=0; i<4; i++)
-    if( boxtype[i] == '_')
-      boxtype[i] = ' ';
-  
-  ptr = list->first;
-  while( ptr){
-    if( ptr->boxlist){
-      box_param_t *box = ptr->boxlist->first;
-      while( box){
-       if( strncmp ( boxtype, box->type, 4) == 0)
-         return ptr->idx;
-       box = box->next;
-      }
+    /* MM FIXME: what is the return type of this function ?
+     Byte8_t or int ? */
+    metadata_param_t *ptr;
+    int i;
+
+    for (i = 0; i < 4; i++)
+        if (boxtype[i] == '_') {
+            boxtype[i] = ' ';
+        }
+
+    ptr = list->first;
+    while (ptr) {
+        if (ptr->boxlist) {
+            box_param_t *box = ptr->boxlist->first;
+            while (box) {
+                if (strncmp(boxtype, box->type, 4) == 0) {
+                    return ptr->idx;
+                }
+                box = box->next;
+            }
+        }
+        ptr = ptr->next;
     }
-    ptr = ptr->next;
-  }
-
-  ptr = list->first;
-  while( ptr){
-    if( ptr->placeholderlist){
-      placeholder_param_t *phld = ptr->placeholderlist->first;
-      while( phld){
-       if( strncmp ( boxtype, (char *)phld->OrigBH+4, 4) == 0){
-         return phld->OrigID;
-       }
-       phld = phld->next;
-      }
+
+    ptr = list->first;
+    while (ptr) {
+        if (ptr->placeholderlist) {
+            placeholder_param_t *phld = ptr->placeholderlist->first;
+            while (phld) {
+                if (strncmp(boxtype, (char *)phld->OrigBH + 4, 4) == 0) {
+                    return phld->OrigID;
+                }
+                phld = phld->next;
+            }
+        }
+        ptr = ptr->next;
     }
-    ptr = ptr->next;
-  }
-  return (Byte8_t)-1;
+    return (Byte8_t) - 1;
 }
index dcfcfac4bdc673c333df937bba220e9c26dbbfcb..1a8eaa0863f7e483bd12efae4787d92fc68859a5 100644 (file)
 #endif /*SERVER */
 
 
-mhixbox_param_t * gene_mhixbox( box_param_t *box)
+mhixbox_param_t * gene_mhixbox(box_param_t *box)
 {
-  mhixbox_param_t *mhix;
-  markeridx_param_t  *mkridx, *lastmkidx;
-  OPJ_OFF_T pos = 0;
-
-  mhix = ( mhixbox_param_t *)malloc( sizeof( mhixbox_param_t));
-  
-  mhix->tlen = fetch_DBox8bytebigendian( box, (pos+=8)-8);
-  mhix->first = lastmkidx = NULL;
-  while( (OPJ_SIZE_T)pos < get_DBoxlen( box)){
-    
-    mkridx = ( markeridx_param_t *)malloc( sizeof( markeridx_param_t));
-    mkridx->code       = fetch_DBox2bytebigendian( box, (pos+=2)-2);
-    mkridx->num_remain = fetch_DBox2bytebigendian( box, (pos+=2)-2);
-    mkridx->offset     = (OPJ_OFF_T)fetch_DBox8bytebigendian( box, (pos+=8)-8);
-    mkridx->length     = fetch_DBox2bytebigendian( box, (pos+=2)-2);
-    mkridx->next = NULL;
-    
-    if( mhix->first)
-      lastmkidx->next = mkridx;
-    else
-      mhix->first = mkridx;
-    lastmkidx = mkridx;
-  } 
-  return mhix;
+    mhixbox_param_t *mhix;
+    markeridx_param_t  *mkridx, *lastmkidx;
+    OPJ_OFF_T pos = 0;
+
+    mhix = (mhixbox_param_t *)malloc(sizeof(mhixbox_param_t));
+
+    mhix->tlen = fetch_DBox8bytebigendian(box, (pos += 8) - 8);
+
+    mhix->first = lastmkidx = NULL;
+    while ((OPJ_SIZE_T)pos < get_DBoxlen(box)) {
+
+        mkridx = (markeridx_param_t *)malloc(sizeof(markeridx_param_t));
+        mkridx->code       = fetch_DBox2bytebigendian(box, (pos += 2) - 2);
+        mkridx->num_remain = fetch_DBox2bytebigendian(box, (pos += 2) - 2);
+        mkridx->offset     = (OPJ_OFF_T)fetch_DBox8bytebigendian(box, (pos += 8) - 8);
+        mkridx->length     = fetch_DBox2bytebigendian(box, (pos += 2) - 2);
+        mkridx->next = NULL;
+
+        if (mhix->first) {
+            lastmkidx->next = mkridx;
+        } else {
+            mhix->first = mkridx;
+        }
+        lastmkidx = mkridx;
+    }
+    return mhix;
 }
 
 
-markeridx_param_t * search_markeridx( Byte2_t code, mhixbox_param_t *mhix)
+markeridx_param_t * search_markeridx(Byte2_t code, mhixbox_param_t *mhix)
 {
-  markeridx_param_t *found;
-  
-  found = mhix->first;
-  
-  while( found != NULL){
-    
-    if( code == found->code)
-      return found;
-    
-    found = found->next;
-  }
-  fprintf( FCGI_stderr, "Error: Marker index %#x not found\n", code);
-
-  return NULL;
+    markeridx_param_t *found;
+
+    found = mhix->first;
+
+    while (found != NULL) {
+
+        if (code == found->code) {
+            return found;
+        }
+
+        found = found->next;
+    }
+    fprintf(FCGI_stderr, "Error: Marker index %#x not found\n", code);
+
+    return NULL;
 }
 
 
-void print_mhixbox( mhixbox_param_t *mhix)
+void print_mhixbox(mhixbox_param_t *mhix)
 {
-  markeridx_param_t *ptr;
-
-  fprintf( logstream, "mhix box info:\n");
-  fprintf( logstream, "\t tlen: %#" PRIx64 "\n", mhix->tlen);
-
-  ptr = mhix->first;
-  while( ptr != NULL){
-    fprintf( logstream, "marker index info:\n"
-            "\t code: %#x\n"
-            "\t num_remain: %#x\n"
-            "\t offset: %#" PRIx64 "\n"
-            "\t length: %#x\n", ptr->code, ptr->num_remain, ptr->offset, ptr->length);
-    ptr=ptr->next;
-  }
+    markeridx_param_t *ptr;
+
+    fprintf(logstream, "mhix box info:\n");
+    fprintf(logstream, "\t tlen: %#" PRIx64 "\n", mhix->tlen);
+
+    ptr = mhix->first;
+    while (ptr != NULL) {
+        fprintf(logstream, "marker index info:\n"
+                "\t code: %#x\n"
+                "\t num_remain: %#x\n"
+                "\t offset: %#" PRIx64 "\n"
+                "\t length: %#x\n", ptr->code, ptr->num_remain, ptr->offset, ptr->length);
+        ptr = ptr->next;
+    }
 }
 
 
-void print_markeridx( markeridx_param_t *markeridx)
+void print_markeridx(markeridx_param_t *markeridx)
 {
-  fprintf( logstream, "marker index info:\n"
-          "\t code: %#x\n"
-          "\t num_remain: %#x\n"
-          "\t offset: %#" PRIx64 "\n"
-          "\t length: %#x\n", markeridx->code, markeridx->num_remain, markeridx->offset, markeridx->length);
+    fprintf(logstream, "marker index info:\n"
+            "\t code: %#x\n"
+            "\t num_remain: %#x\n"
+            "\t offset: %#" PRIx64 "\n"
+            "\t length: %#x\n", markeridx->code, markeridx->num_remain, markeridx->offset,
+            markeridx->length);
 }
 
 
-void delete_mhixbox( mhixbox_param_t **mhix)
+void delete_mhixbox(mhixbox_param_t **mhix)
 {
-  markeridx_param_t *mkPtr, *mkNext;
-  
-  mkPtr = (*mhix)->first;
-  while( mkPtr != NULL){
-    mkNext=mkPtr->next;
+    markeridx_param_t *mkPtr, *mkNext;
+
+    mkPtr = (*mhix)->first;
+    while (mkPtr != NULL) {
+        mkNext = mkPtr->next;
 #ifndef SERVER
-    /*      fprintf( logstream, "local log: marker index %#x deleted!\n", mkPtr->code); */
+        /*      fprintf( logstream, "local log: marker index %#x deleted!\n", mkPtr->code); */
 #endif
-      free(mkPtr);
-      mkPtr=mkNext;
-  }
-  free(*mhix);
+        free(mkPtr);
+        mkPtr = mkNext;
+    }
+    free(*mhix);
 }
 
 
index 072a970bf29234ba7ce1272a2f63e4228e599d0f..c65962710fcb2ec766678e3e8532226bdb9676db 100644 (file)
 #define logstream stderr
 #endif /*SERVER*/
 
-msgqueue_param_t * gene_msgqueue( OPJ_BOOL stateless, cachemodel_param_t *cachemodel)
+msgqueue_param_t * gene_msgqueue(OPJ_BOOL stateless,
+                                 cachemodel_param_t *cachemodel)
 {
-  msgqueue_param_t *msgqueue;
+    msgqueue_param_t *msgqueue;
 
-  msgqueue = (msgqueue_param_t *)opj_malloc( sizeof(msgqueue_param_t));
+    msgqueue = (msgqueue_param_t *)opj_malloc(sizeof(msgqueue_param_t));
 
-  msgqueue->first = NULL;
-  msgqueue->last  = NULL;
+    msgqueue->first = NULL;
+    msgqueue->last  = NULL;
 
-  msgqueue->stateless = stateless;
-  msgqueue->cachemodel = cachemodel;
-  
-  return msgqueue;
+    msgqueue->stateless = stateless;
+    msgqueue->cachemodel = cachemodel;
+
+    return msgqueue;
 }
 
-void delete_msgqueue( msgqueue_param_t **msgqueue)
+void delete_msgqueue(msgqueue_param_t **msgqueue)
 {
-  message_param_t *ptr, *next;
-
-  if( !(*msgqueue))
-    return;
-  
-  ptr = (*msgqueue)->first;
-
-  while( ptr){
-    next = ptr->next;
-    opj_free( ptr);
-    ptr = next;
-  }
-  if( (*msgqueue)->stateless && (*msgqueue)->cachemodel)
-    delete_cachemodel( &((*msgqueue)->cachemodel));
-
-  opj_free(*msgqueue); 
+    message_param_t *ptr, *next;
+
+    if (!(*msgqueue)) {
+        return;
+    }
+
+    ptr = (*msgqueue)->first;
+
+    while (ptr) {
+        next = ptr->next;
+        opj_free(ptr);
+        ptr = next;
+    }
+    if ((*msgqueue)->stateless && (*msgqueue)->cachemodel) {
+        delete_cachemodel(&((*msgqueue)->cachemodel));
+    }
+
+    opj_free(*msgqueue);
 }
 
-void print_msgqueue( msgqueue_param_t *msgqueue)
+void print_msgqueue(msgqueue_param_t *msgqueue)
 {
-  message_param_t *ptr;
-  static const char *message_class[] = { "Precinct", "Ext-Prec", "TileHead", "non",
-    "Tile", "Ext-Tile", "Main", "non", "Meta"};
-
-  if( !msgqueue)
-    return;
-
-  fprintf( logstream, "message queue:\n");
-  ptr = msgqueue->first;
-
-  while( ptr){
-    fprintf( logstream, "\t class_id: %" PRId64 " %s\n", ptr->class_id, message_class[ptr->class_id]);
-    fprintf( logstream, "\t in_class_id: %" PRId64 "\n", ptr->in_class_id );
-    fprintf( logstream, "\t csn: %" PRId64 "\n", ptr->csn );
-    fprintf( logstream, "\t bin_offset: %#" PRIx64 "\n", ptr->bin_offset );
-    fprintf( logstream, "\t length: %#" PRIx64 "\n", ptr->length );
-    if( ptr->class_id%2)
-      fprintf( logstream, "\t aux: %" PRId64 "\n", ptr->aux );
-    fprintf( logstream, "\t last_byte: %d\n", ptr->last_byte );
-    if( ptr->phld)
-      print_placeholder( ptr->phld);
-    else
-      fprintf( logstream, "\t res_offset: %#" PRIx64 "\n", ptr->res_offset );
-    fprintf( logstream, "\n");
-
-    ptr = ptr->next;
-  }
-}
+    message_param_t *ptr;
+    static const char *message_class[] = { "Precinct", "Ext-Prec", "TileHead", "non",
+                                           "Tile", "Ext-Tile", "Main", "non", "Meta"
+                                         };
 
-void enqueue_message( message_param_t *msg, msgqueue_param_t *msgqueue);
+    if (!msgqueue) {
+        return;
+    }
 
-void enqueue_mainheader( msgqueue_param_t *msgqueue)
-{
-  cachemodel_param_t *cachemodel;
-  target_param_t *target;
-  index_param_t *codeidx;
-  message_param_t *msg;
-
-  cachemodel = msgqueue->cachemodel;
-  target = cachemodel->target;
-  codeidx = target->codeidx;
-  
-  msg = (message_param_t *)opj_malloc( sizeof(message_param_t));
-
-  msg->last_byte = OPJ_TRUE;
-  msg->in_class_id = 0;
-  msg->class_id = MAINHEADER_MSG;
-  assert( target->csn >= 0 );
-  msg->csn = (Byte8_t)target->csn;
-  msg->bin_offset = 0;
-  msg->length = codeidx->mhead_length;
-  msg->aux = 0; /* non exist*/
-  msg->res_offset = codeidx->offset;
-  msg->phld = NULL;
-  msg->next = NULL;
-
-  enqueue_message( msg, msgqueue);
-
-  cachemodel->mhead_model = OPJ_TRUE;
+    fprintf(logstream, "message queue:\n");
+    ptr = msgqueue->first;
+
+    while (ptr) {
+        fprintf(logstream, "\t class_id: %" PRId64 " %s\n", ptr->class_id,
+                message_class[ptr->class_id]);
+        fprintf(logstream, "\t in_class_id: %" PRId64 "\n", ptr->in_class_id);
+        fprintf(logstream, "\t csn: %" PRId64 "\n", ptr->csn);
+        fprintf(logstream, "\t bin_offset: %#" PRIx64 "\n", ptr->bin_offset);
+        fprintf(logstream, "\t length: %#" PRIx64 "\n", ptr->length);
+        if (ptr->class_id % 2) {
+            fprintf(logstream, "\t aux: %" PRId64 "\n", ptr->aux);
+        }
+        fprintf(logstream, "\t last_byte: %d\n", ptr->last_byte);
+        if (ptr->phld) {
+            print_placeholder(ptr->phld);
+        } else {
+            fprintf(logstream, "\t res_offset: %#" PRIx64 "\n", ptr->res_offset);
+        }
+        fprintf(logstream, "\n");
+
+        ptr = ptr->next;
+    }
 }
 
-void enqueue_tileheader( int tile_id, msgqueue_param_t *msgqueue)
+void enqueue_message(message_param_t *msg, msgqueue_param_t *msgqueue);
+
+void enqueue_mainheader(msgqueue_param_t *msgqueue)
 {
-  cachemodel_param_t *cachemodel;
-  target_param_t *target;
-  index_param_t *codeidx;
-  message_param_t *msg;
+    cachemodel_param_t *cachemodel;
+    target_param_t *target;
+    index_param_t *codeidx;
+    message_param_t *msg;
+
+    cachemodel = msgqueue->cachemodel;
+    target = cachemodel->target;
+    codeidx = target->codeidx;
 
-  cachemodel = msgqueue->cachemodel;
-  target = cachemodel->target;
-  codeidx = target->codeidx;
+    msg = (message_param_t *)opj_malloc(sizeof(message_param_t));
 
-  if( !cachemodel->th_model[ tile_id]){
-    msg = (message_param_t *)opj_malloc( sizeof(message_param_t));
     msg->last_byte = OPJ_TRUE;
-    assert( tile_id >= 0 );
-    msg->in_class_id = (Byte8_t)tile_id;
-    msg->class_id = TILE_HEADER_MSG;
-    assert( target->csn >= 0 );
+    msg->in_class_id = 0;
+    msg->class_id = MAINHEADER_MSG;
+    assert(target->csn >= 0);
     msg->csn = (Byte8_t)target->csn;
     msg->bin_offset = 0;
-    msg->length = codeidx->tileheader[tile_id]->tlen-2; /* SOT marker segment is removed*/
+    msg->length = codeidx->mhead_length;
     msg->aux = 0; /* non exist*/
-    msg->res_offset = codeidx->offset + (OPJ_OFF_T)get_elemOff(codeidx->tilepart, 0, (Byte8_t)tile_id) + 2; /* skip SOT marker seg*/
+    msg->res_offset = codeidx->offset;
     msg->phld = NULL;
     msg->next = NULL;
-    
-    enqueue_message( msg, msgqueue);
-    cachemodel->th_model[ tile_id] = OPJ_TRUE;
-  }
+
+    enqueue_message(msg, msgqueue);
+
+    cachemodel->mhead_model = OPJ_TRUE;
+}
+
+void enqueue_tileheader(int tile_id, msgqueue_param_t *msgqueue)
+{
+    cachemodel_param_t *cachemodel;
+    target_param_t *target;
+    index_param_t *codeidx;
+    message_param_t *msg;
+
+    cachemodel = msgqueue->cachemodel;
+    target = cachemodel->target;
+    codeidx = target->codeidx;
+
+    if (!cachemodel->th_model[ tile_id]) {
+        msg = (message_param_t *)opj_malloc(sizeof(message_param_t));
+        msg->last_byte = OPJ_TRUE;
+        assert(tile_id >= 0);
+        msg->in_class_id = (Byte8_t)tile_id;
+        msg->class_id = TILE_HEADER_MSG;
+        assert(target->csn >= 0);
+        msg->csn = (Byte8_t)target->csn;
+        msg->bin_offset = 0;
+        msg->length = codeidx->tileheader[tile_id]->tlen -
+                      2; /* SOT marker segment is removed*/
+        msg->aux = 0; /* non exist*/
+        msg->res_offset = codeidx->offset + (OPJ_OFF_T)get_elemOff(codeidx->tilepart, 0,
+                          (Byte8_t)tile_id) + 2; /* skip SOT marker seg*/
+        msg->phld = NULL;
+        msg->next = NULL;
+
+        enqueue_message(msg, msgqueue);
+        cachemodel->th_model[ tile_id] = OPJ_TRUE;
+    }
 }
 
-void enqueue_tile( Byte4_t tile_id, int level, msgqueue_param_t *msgqueue)
+void enqueue_tile(Byte4_t tile_id, int level, msgqueue_param_t *msgqueue)
 {
-  cachemodel_param_t *cachemodel;
-  target_param_t *target;
-  OPJ_BOOL *tp_model;
-  Byte8_t numOftparts; /* num of tile parts par tile*/
-  Byte8_t numOftiles;
-  index_param_t *codeidx;
-  faixbox_param_t *tilepart;
-  message_param_t *msg;
-  Byte8_t binOffset, binLength, class_id;
-  Byte8_t i;
-
-  cachemodel = msgqueue->cachemodel;
-  target = cachemodel->target;
-  codeidx  = target->codeidx;
-  tilepart = codeidx->tilepart;
-  
-  numOftparts = get_nmax( tilepart);
-  numOftiles  = get_m( tilepart);
-
-  class_id = (numOftparts==1) ? TILE_MSG : EXT_TILE_MSG;
-  
-  if( /*tile_id < 0 ||*/ numOftiles <= (Byte8_t)tile_id){
-    fprintf( FCGI_stderr, "Error, Invalid tile-id %d\n", tile_id);
-    return;
-  }
-  
-  tp_model = &cachemodel->tp_model[ tile_id*numOftparts];
-
-  binOffset=0;
-  for( i=0; i<numOftparts-(Byte8_t)level; i++){
-    binLength = get_elemLen( tilepart, i, tile_id);
-    
-    if( !tp_model[i]){
-      msg = (message_param_t *)opj_malloc( sizeof(message_param_t));
-      
-      msg->last_byte = (i==numOftparts-1);
-      msg->in_class_id = tile_id;
-      msg->class_id = class_id;
-      assert( target->csn >= 0 );
-      msg->csn = (Byte8_t)target->csn;
-      msg->bin_offset = binOffset;
-      msg->length = binLength;
-      msg->aux = numOftparts-i;
-      msg->res_offset = codeidx->offset+(OPJ_OFF_T)get_elemOff( tilepart, i, tile_id)/*-1*/;
-      msg->phld = NULL;
-      msg->next = NULL;
-
-      enqueue_message( msg, msgqueue);
-
-      tp_model[i] = OPJ_TRUE;
-    }
-    binOffset += binLength;
-  }
+    cachemodel_param_t *cachemodel;
+    target_param_t *target;
+    OPJ_BOOL *tp_model;
+    Byte8_t numOftparts; /* num of tile parts par tile*/
+    Byte8_t numOftiles;
+    index_param_t *codeidx;
+    faixbox_param_t *tilepart;
+    message_param_t *msg;
+    Byte8_t binOffset, binLength, class_id;
+    Byte8_t i;
+
+    cachemodel = msgqueue->cachemodel;
+    target = cachemodel->target;
+    codeidx  = target->codeidx;
+    tilepart = codeidx->tilepart;
+
+    numOftparts = get_nmax(tilepart);
+    numOftiles  = get_m(tilepart);
+
+    class_id = (numOftparts == 1) ? TILE_MSG : EXT_TILE_MSG;
+
+    if (/*tile_id < 0 ||*/ numOftiles <= (Byte8_t)tile_id) {
+        fprintf(FCGI_stderr, "Error, Invalid tile-id %d\n", tile_id);
+        return;
+    }
+
+    tp_model = &cachemodel->tp_model[ tile_id * numOftparts];
+
+    binOffset = 0;
+    for (i = 0; i < numOftparts - (Byte8_t)level; i++) {
+        binLength = get_elemLen(tilepart, i, tile_id);
+
+        if (!tp_model[i]) {
+            msg = (message_param_t *)opj_malloc(sizeof(message_param_t));
+
+            msg->last_byte = (i == numOftparts - 1);
+            msg->in_class_id = tile_id;
+            msg->class_id = class_id;
+            assert(target->csn >= 0);
+            msg->csn = (Byte8_t)target->csn;
+            msg->bin_offset = binOffset;
+            msg->length = binLength;
+            msg->aux = numOftparts - i;
+            msg->res_offset = codeidx->offset + (OPJ_OFF_T)get_elemOff(tilepart, i,
+                              tile_id)/*-1*/;
+            msg->phld = NULL;
+            msg->next = NULL;
+
+            enqueue_message(msg, msgqueue);
+
+            tp_model[i] = OPJ_TRUE;
+        }
+        binOffset += binLength;
+    }
 }
 
-void enqueue_precinct( int seq_id, int tile_id, int comp_id, int layers, msgqueue_param_t *msgqueue)
+void enqueue_precinct(int seq_id, int tile_id, int comp_id, int layers,
+                      msgqueue_param_t *msgqueue)
 {
-  cachemodel_param_t *cachemodel;
-  index_param_t *codeidx;
-  faixbox_param_t *precpacket;
-  message_param_t *msg;
-  Byte8_t nmax, binOffset, binLength;
-  int layer_id, numOflayers;
-  
-  cachemodel = msgqueue->cachemodel;
-  codeidx = cachemodel->target->codeidx;
-  precpacket = codeidx->precpacket[ comp_id];
-  numOflayers = codeidx->COD.numOflayers;
-
-  nmax = get_nmax(precpacket);
-  assert( nmax < INT_MAX );
-  if( layers < 0)
-    layers = numOflayers;
-  assert( tile_id >= 0 );
-    
-  binOffset = 0;
-  for( layer_id = 0; layer_id < layers; layer_id++){
-
-    binLength = get_elemLen( precpacket, (Byte8_t)(seq_id*numOflayers+layer_id), (Byte8_t)tile_id);
-    
-    if( !cachemodel->pp_model[comp_id][tile_id*(int)nmax+seq_id*numOflayers+layer_id]){
-  
-      msg = (message_param_t *)opj_malloc( sizeof(message_param_t));
-      msg->last_byte = (layer_id == (numOflayers-1));
-      msg->in_class_id = comp_precinct_id( tile_id, comp_id, seq_id, codeidx->SIZ.Csiz, (int)codeidx->SIZ.XTnum * (int) codeidx->SIZ.YTnum);
-      msg->class_id = PRECINCT_MSG;
-      msg->csn = (Byte8_t)cachemodel->target->csn;
-      msg->bin_offset = binOffset;
-      msg->length = binLength;
-      msg->aux = 0;
-      msg->res_offset = codeidx->offset+(OPJ_OFF_T)get_elemOff( precpacket, (Byte8_t)(seq_id*numOflayers+layer_id), (Byte8_t)tile_id);
-      msg->phld = NULL;
-      msg->next = NULL;
-
-      enqueue_message( msg, msgqueue);
-      
-      cachemodel->pp_model[comp_id][tile_id*(int)nmax+seq_id*numOflayers+layer_id] = OPJ_TRUE;
-    }
-    binOffset += binLength;
-  }
+    cachemodel_param_t *cachemodel;
+    index_param_t *codeidx;
+    faixbox_param_t *precpacket;
+    message_param_t *msg;
+    Byte8_t nmax, binOffset, binLength;
+    int layer_id, numOflayers;
+
+    cachemodel = msgqueue->cachemodel;
+    codeidx = cachemodel->target->codeidx;
+    precpacket = codeidx->precpacket[ comp_id];
+    numOflayers = codeidx->COD.numOflayers;
+
+    nmax = get_nmax(precpacket);
+    assert(nmax < INT_MAX);
+    if (layers < 0) {
+        layers = numOflayers;
+    }
+    assert(tile_id >= 0);
+
+    binOffset = 0;
+    for (layer_id = 0; layer_id < layers; layer_id++) {
+
+        binLength = get_elemLen(precpacket, (Byte8_t)(seq_id * numOflayers + layer_id),
+                                (Byte8_t)tile_id);
+
+        if (!cachemodel->pp_model[comp_id][tile_id * (int)nmax + seq_id * numOflayers +
+                                           layer_id]) {
+
+            msg = (message_param_t *)opj_malloc(sizeof(message_param_t));
+            msg->last_byte = (layer_id == (numOflayers - 1));
+            msg->in_class_id = comp_precinct_id(tile_id, comp_id, seq_id, codeidx->SIZ.Csiz,
+                                                (int)codeidx->SIZ.XTnum * (int) codeidx->SIZ.YTnum);
+            msg->class_id = PRECINCT_MSG;
+            msg->csn = (Byte8_t)cachemodel->target->csn;
+            msg->bin_offset = binOffset;
+            msg->length = binLength;
+            msg->aux = 0;
+            msg->res_offset = codeidx->offset + (OPJ_OFF_T)get_elemOff(precpacket,
+                              (Byte8_t)(seq_id * numOflayers + layer_id), (Byte8_t)tile_id);
+            msg->phld = NULL;
+            msg->next = NULL;
+
+            enqueue_message(msg, msgqueue);
+
+            cachemodel->pp_model[comp_id][tile_id * (int)nmax + seq_id * numOflayers +
+                                          layer_id] = OPJ_TRUE;
+        }
+        binOffset += binLength;
+    }
 }
 
 /* MM FIXME: each params is coded on int, this is really not clear from the specs what it should be */
-Byte8_t comp_precinct_id( int t, int c, int s, int num_components, int num_tiles)
+Byte8_t comp_precinct_id(int t, int c, int s, int num_components, int num_tiles)
 {
-  return (Byte8_t)(t + (c + s * num_components ) * num_tiles);
+    return (Byte8_t)(t + (c + s * num_components) * num_tiles);
 }
 
-void enqueue_box(  Byte8_t meta_id, boxlist_param_t *boxlist, msgqueue_param_t *msgqueue, Byte8_t *binOffset);
-void enqueue_phld( Byte8_t meta_id, placeholderlist_param_t *phldlist, msgqueue_param_t *msgqueue, Byte8_t *binOffset);
-void enqueue_boxcontents( Byte8_t meta_id, boxcontents_param_t *boxcontents, msgqueue_param_t *msgqueue, Byte8_t *binOffset);
+void enqueue_box(Byte8_t meta_id, boxlist_param_t *boxlist,
+                 msgqueue_param_t *msgqueue, Byte8_t *binOffset);
+void enqueue_phld(Byte8_t meta_id, placeholderlist_param_t *phldlist,
+                  msgqueue_param_t *msgqueue, Byte8_t *binOffset);
+void enqueue_boxcontents(Byte8_t meta_id, boxcontents_param_t *boxcontents,
+                         msgqueue_param_t *msgqueue, Byte8_t *binOffset);
 
-void enqueue_metadata( Byte8_t meta_id, msgqueue_param_t *msgqueue)
+void enqueue_metadata(Byte8_t meta_id, msgqueue_param_t *msgqueue)
 {
-  metadatalist_param_t *metadatalist;
-  metadata_param_t *metadata;
-  Byte8_t binOffset;
-
-  metadatalist = msgqueue->cachemodel->target->codeidx->metadatalist;
-  metadata = search_metadata( meta_id, metadatalist);
-  
-  if( !metadata){
-    fprintf( FCGI_stderr, "Error: metadata-bin %" PRIu64 " not found\n", meta_id);
-    return;
-  }
-  binOffset = 0;
-  
-  if( metadata->boxlist)
-    enqueue_box( meta_id, metadata->boxlist, msgqueue, &binOffset);
-
-  if( metadata->placeholderlist)
-    enqueue_phld( meta_id, metadata->placeholderlist, msgqueue, &binOffset);
-
-  if( metadata->boxcontents)
-    enqueue_boxcontents( meta_id, metadata->boxcontents, msgqueue, &binOffset);
-  
-  msgqueue->last->last_byte = OPJ_TRUE;
+    metadatalist_param_t *metadatalist;
+    metadata_param_t *metadata;
+    Byte8_t binOffset;
+
+    metadatalist = msgqueue->cachemodel->target->codeidx->metadatalist;
+    metadata = search_metadata(meta_id, metadatalist);
+
+    if (!metadata) {
+        fprintf(FCGI_stderr, "Error: metadata-bin %" PRIu64 " not found\n", meta_id);
+        return;
+    }
+    binOffset = 0;
+
+    if (metadata->boxlist) {
+        enqueue_box(meta_id, metadata->boxlist, msgqueue, &binOffset);
+    }
+
+    if (metadata->placeholderlist) {
+        enqueue_phld(meta_id, metadata->placeholderlist, msgqueue, &binOffset);
+    }
+
+    if (metadata->boxcontents) {
+        enqueue_boxcontents(meta_id, metadata->boxcontents, msgqueue, &binOffset);
+    }
+
+    msgqueue->last->last_byte = OPJ_TRUE;
 }
 
-message_param_t * gene_metamsg( Byte8_t meta_id, Byte8_t binoffset, Byte8_t length, OPJ_OFF_T res_offset, placeholder_param_t *phld, Byte8_t csn);
+message_param_t * gene_metamsg(Byte8_t meta_id, Byte8_t binoffset,
+                               Byte8_t length, OPJ_OFF_T res_offset, placeholder_param_t *phld, Byte8_t csn);
 
-void enqueue_box( Byte8_t meta_id, boxlist_param_t *boxlist, msgqueue_param_t *msgqueue, Byte8_t *binOffset)
+void enqueue_box(Byte8_t meta_id, boxlist_param_t *boxlist,
+                 msgqueue_param_t *msgqueue, Byte8_t *binOffset)
 {
-  box_param_t *box;
-  message_param_t *msg;
-  
-  box = boxlist->first;
-  assert( msgqueue->cachemodel->target->csn >= 0);
-  while( box){
-    msg = gene_metamsg( meta_id, *binOffset, box->length, box->offset, NULL, (Byte8_t)msgqueue->cachemodel->target->csn);
-    enqueue_message( msg, msgqueue);
-
-    *binOffset += box->length;
-    box = box->next;
-  }
+    box_param_t *box;
+    message_param_t *msg;
+
+    box = boxlist->first;
+    assert(msgqueue->cachemodel->target->csn >= 0);
+    while (box) {
+        msg = gene_metamsg(meta_id, *binOffset, box->length, box->offset, NULL,
+                           (Byte8_t)msgqueue->cachemodel->target->csn);
+        enqueue_message(msg, msgqueue);
+
+        *binOffset += box->length;
+        box = box->next;
+    }
 }
 
-void enqueue_phld( Byte8_t meta_id, placeholderlist_param_t *phldlist, msgqueue_param_t *msgqueue, Byte8_t *binOffset)
+void enqueue_phld(Byte8_t meta_id, placeholderlist_param_t *phldlist,
+                  msgqueue_param_t *msgqueue, Byte8_t *binOffset)
 {
-  placeholder_param_t *phld;
-  message_param_t *msg;
-  
-  phld = phldlist->first;
-  assert( msgqueue->cachemodel->target->csn >= 0);
-  while( phld){
-    msg = gene_metamsg( meta_id, *binOffset, phld->LBox, 0, phld, (Byte8_t)msgqueue->cachemodel->target->csn);
-    enqueue_message( msg, msgqueue);
-
-    *binOffset += phld->LBox;
-    phld = phld->next;
-  }
+    placeholder_param_t *phld;
+    message_param_t *msg;
+
+    phld = phldlist->first;
+    assert(msgqueue->cachemodel->target->csn >= 0);
+    while (phld) {
+        msg = gene_metamsg(meta_id, *binOffset, phld->LBox, 0, phld,
+                           (Byte8_t)msgqueue->cachemodel->target->csn);
+        enqueue_message(msg, msgqueue);
+
+        *binOffset += phld->LBox;
+        phld = phld->next;
+    }
 }
 
-void enqueue_boxcontents( Byte8_t meta_id, boxcontents_param_t *boxcontents, msgqueue_param_t *msgqueue, Byte8_t *binOffset)
+void enqueue_boxcontents(Byte8_t meta_id, boxcontents_param_t *boxcontents,
+                         msgqueue_param_t *msgqueue, Byte8_t *binOffset)
 {
-  message_param_t *msg;
-
-  assert(msgqueue->cachemodel->target->csn >= 0);
-  msg = gene_metamsg( meta_id, *binOffset, boxcontents->length,
-    boxcontents->offset, NULL, (Byte8_t)msgqueue->cachemodel->target->csn);
-  enqueue_message( msg, msgqueue);
-  
-  *binOffset += boxcontents->length;
+    message_param_t *msg;
+
+    assert(msgqueue->cachemodel->target->csn >= 0);
+    msg = gene_metamsg(meta_id, *binOffset, boxcontents->length,
+                       boxcontents->offset, NULL, (Byte8_t)msgqueue->cachemodel->target->csn);
+    enqueue_message(msg, msgqueue);
+
+    *binOffset += boxcontents->length;
 }
 
-message_param_t * gene_metamsg( Byte8_t meta_id, Byte8_t binOffset, Byte8_t length, OPJ_OFF_T res_offset, placeholder_param_t *phld, Byte8_t csn)
+message_param_t * gene_metamsg(Byte8_t meta_id, Byte8_t binOffset,
+                               Byte8_t length, OPJ_OFF_T res_offset, placeholder_param_t *phld, Byte8_t csn)
 {
-  message_param_t *msg;
-
-  msg = (message_param_t *)opj_malloc( sizeof(message_param_t));
-    
-  msg->last_byte = OPJ_FALSE;
-  msg->in_class_id = meta_id;
-  msg->class_id = METADATA_MSG;
-  msg->csn = csn;
-  msg->bin_offset = binOffset;
-  msg->length = length;
-  msg->aux = 0; /* non exist*/
-  msg->res_offset = res_offset;
-  msg->phld = phld;
-  msg->next = NULL;
-
-  return msg;
+    message_param_t *msg;
+
+    msg = (message_param_t *)opj_malloc(sizeof(message_param_t));
+
+    msg->last_byte = OPJ_FALSE;
+    msg->in_class_id = meta_id;
+    msg->class_id = METADATA_MSG;
+    msg->csn = csn;
+    msg->bin_offset = binOffset;
+    msg->length = length;
+    msg->aux = 0; /* non exist*/
+    msg->res_offset = res_offset;
+    msg->phld = phld;
+    msg->next = NULL;
+
+    return msg;
 }
 
-void enqueue_message( message_param_t *msg, msgqueue_param_t *msgqueue)
+void enqueue_message(message_param_t *msg, msgqueue_param_t *msgqueue)
 {
-  if( msgqueue->first)
-    msgqueue->last->next = msg;
-  else
-    msgqueue->first = msg;
-  
-  msgqueue->last = msg;
+    if (msgqueue->first) {
+        msgqueue->last->next = msg;
+    } else {
+        msgqueue->first = msg;
+    }
+
+    msgqueue->last = msg;
 }
 
-void add_bin_id_vbas_stream( Byte_t bb, Byte_t c, Byte8_t in_class_id, int tmpfd);
-void add_vbas_stream( Byte8_t code, int tmpfd);
-void add_body_stream( message_param_t *msg, int fd, int tmpfd);
-void add_placeholder_stream( placeholder_param_t *phld, int tmpfd);
+void add_bin_id_vbas_stream(Byte_t bb, Byte_t c, Byte8_t in_class_id,
+                            int tmpfd);
+void add_vbas_stream(Byte8_t code, int tmpfd);
+void add_body_stream(message_param_t *msg, int fd, int tmpfd);
+void add_placeholder_stream(placeholder_param_t *phld, int tmpfd);
 
-void recons_stream_from_msgqueue( msgqueue_param_t *msgqueue, int tmpfd)
+void recons_stream_from_msgqueue(msgqueue_param_t *msgqueue, int tmpfd)
 {
-  message_param_t *msg;
-  Byte8_t class_id, csn;
-  Byte_t bb, c;
-  
-  if( !(msgqueue))
-    return;
-
-  msg = msgqueue->first;
-  class_id = (Byte8_t)-1;
-  csn = (Byte8_t)-1;
-  while( msg){
-    if( msg->csn == csn){
-      if( msg->class_id == class_id)
-       bb = 1;
-      else{
-       bb = 2;
-       class_id = msg->class_id;
-      }
-    }
-    else{
-      bb = 3;
-      class_id = msg->class_id;
-      csn = msg->csn;
-    }
-
-    c = msg->last_byte ? 1 : 0;
-    
-    add_bin_id_vbas_stream( bb, c, msg->in_class_id, tmpfd);
-    
-    if( bb >= 2)
-      add_vbas_stream( class_id, tmpfd);
-    if (bb == 3)
-      add_vbas_stream( csn, tmpfd);
-    
-    add_vbas_stream( msg->bin_offset, tmpfd);
-    add_vbas_stream (msg->length, tmpfd);
-    
-    if( msg->class_id%2) /* Aux is present only if the id is odd*/
-      add_vbas_stream( msg->aux, tmpfd);
-
-    if( msg->phld)
-      add_placeholder_stream( msg->phld, tmpfd);
-    else
-      add_body_stream( msg, msgqueue->cachemodel->target->fd, tmpfd);
-
-    msg = msg->next;
-  }
+    message_param_t *msg;
+    Byte8_t class_id, csn;
+    Byte_t bb, c;
+
+    if (!(msgqueue)) {
+        return;
+    }
+
+    msg = msgqueue->first;
+    class_id = (Byte8_t) - 1;
+    csn = (Byte8_t) - 1;
+    while (msg) {
+        if (msg->csn == csn) {
+            if (msg->class_id == class_id) {
+                bb = 1;
+            } else {
+                bb = 2;
+                class_id = msg->class_id;
+            }
+        } else {
+            bb = 3;
+            class_id = msg->class_id;
+            csn = msg->csn;
+        }
+
+        c = msg->last_byte ? 1 : 0;
+
+        add_bin_id_vbas_stream(bb, c, msg->in_class_id, tmpfd);
+
+        if (bb >= 2) {
+            add_vbas_stream(class_id, tmpfd);
+        }
+        if (bb == 3) {
+            add_vbas_stream(csn, tmpfd);
+        }
+
+        add_vbas_stream(msg->bin_offset, tmpfd);
+        add_vbas_stream(msg->length, tmpfd);
+
+        if (msg->class_id % 2) { /* Aux is present only if the id is odd*/
+            add_vbas_stream(msg->aux, tmpfd);
+        }
+
+        if (msg->phld) {
+            add_placeholder_stream(msg->phld, tmpfd);
+        } else {
+            add_body_stream(msg, msgqueue->cachemodel->target->fd, tmpfd);
+        }
+
+        msg = msg->next;
+    }
 }
 
-void add_vbas_with_bytelen_stream( Byte8_t code, int bytelength, int tmpfd);
-void print_binarycode( Byte8_t n, int segmentlen);
+void add_vbas_with_bytelen_stream(Byte8_t code, int bytelength, int tmpfd);
+void print_binarycode(Byte8_t n, int segmentlen);
 
-void add_bin_id_vbas_stream( Byte_t bb, Byte_t c, Byte8_t in_class_id, int tmpfd)
+void add_bin_id_vbas_stream(Byte_t bb, Byte_t c, Byte8_t in_class_id, int tmpfd)
 {
-  int bytelength;
-  Byte8_t tmp;
-
-  /* A.2.3 In-class identifiers */
-  /* 7k-3bits, where k is the number of bytes in the VBAS*/
-  bytelength = 1;
-  tmp = in_class_id >> 4;
-  while( tmp){
-    bytelength ++;
-    tmp >>= 7;
-  }
-
-  in_class_id |= (Byte8_t)((((bb & 3) << 5) | (c & 1) << 4) << ((bytelength-1)*7));
-  
-  add_vbas_with_bytelen_stream( in_class_id, bytelength, tmpfd);
+    int bytelength;
+    Byte8_t tmp;
+
+    /* A.2.3 In-class identifiers */
+    /* 7k-3bits, where k is the number of bytes in the VBAS*/
+    bytelength = 1;
+    tmp = in_class_id >> 4;
+    while (tmp) {
+        bytelength ++;
+        tmp >>= 7;
+    }
+
+    in_class_id |= (Byte8_t)((((bb & 3) << 5) | (c & 1) << 4) << ((
+                                 bytelength - 1) * 7));
+
+    add_vbas_with_bytelen_stream(in_class_id, bytelength, tmpfd);
 }
 
-void add_vbas_stream( Byte8_t code, int tmpfd)
+void add_vbas_stream(Byte8_t code, int tmpfd)
 {
-  int bytelength;
-  Byte8_t tmp;
+    int bytelength;
+    Byte8_t tmp;
 
-  bytelength = 1;
-  tmp = code;
-  while( tmp >>= 7)
-    bytelength ++;
+    bytelength = 1;
+    tmp = code;
+    while (tmp >>= 7) {
+        bytelength ++;
+    }
 
-  add_vbas_with_bytelen_stream( code, bytelength, tmpfd);
+    add_vbas_with_bytelen_stream(code, bytelength, tmpfd);
 }
 
-void add_vbas_with_bytelen_stream( Byte8_t code, int bytelength, int tmpfd)
+void add_vbas_with_bytelen_stream(Byte8_t code, int bytelength, int tmpfd)
 {
-  int n;
-  Byte8_t seg;
-  
-  n = bytelength - 1;
-  while( n >= 0) {
-    seg = ( code >> (n*7)) & 0x7f;
-    if( n)
-      seg |= 0x80;
-    if( write( tmpfd, ( Byte4_t *)&seg, 1) != 1){
-      fprintf( FCGI_stderr, "Error: failed to write vbas\n");
-      return;
-    }
-    n--;
-  }
+    int n;
+    Byte8_t seg;
+
+    n = bytelength - 1;
+    while (n >= 0) {
+        seg = (code >> (n * 7)) & 0x7f;
+        if (n) {
+            seg |= 0x80;
+        }
+        if (write(tmpfd, (Byte4_t *)&seg, 1) != 1) {
+            fprintf(FCGI_stderr, "Error: failed to write vbas\n");
+            return;
+        }
+        n--;
+    }
 }
 
-void add_body_stream( message_param_t *msg, int fd, int tmpfd)
+void add_body_stream(message_param_t *msg, int fd, int tmpfd)
 {
-  Byte_t *data;
-
-  if( !(data = fetch_bytes( fd, msg->res_offset, msg->length))){
-    fprintf( FCGI_stderr, "Error: fetch_bytes in add_body_stream()\n");
-    return;
-  }
-
-  if( write( tmpfd, data, msg->length) < 1){
-    opj_free( data);
-    fprintf( FCGI_stderr, "Error: fwrite in add_body_stream()\n");
-    return;
-  }
-  opj_free(data);
+    Byte_t *data;
+
+    if (!(data = fetch_bytes(fd, msg->res_offset, msg->length))) {
+        fprintf(FCGI_stderr, "Error: fetch_bytes in add_body_stream()\n");
+        return;
+    }
+
+    if (write(tmpfd, data, msg->length) < 1) {
+        opj_free(data);
+        fprintf(FCGI_stderr, "Error: fwrite in add_body_stream()\n");
+        return;
+    }
+    opj_free(data);
 }
 
-void add_bigendian_bytestream( Byte8_t code, int bytelength, int tmpfd);
+void add_bigendian_bytestream(Byte8_t code, int bytelength, int tmpfd);
 
-void add_placeholder_stream( placeholder_param_t *phld, int tmpfd)
+void add_placeholder_stream(placeholder_param_t *phld, int tmpfd)
 {
-  add_bigendian_bytestream( phld->LBox, 4, tmpfd);
-  if( write( tmpfd, phld->TBox, 4) < 1){
-    fprintf( FCGI_stderr, "Error: fwrite in add_placeholder_stream()\n");
-    return;
-  }
-  add_bigendian_bytestream( phld->Flags, 4, tmpfd);
-  add_bigendian_bytestream( phld->OrigID, 8, tmpfd);
-
-  if( write( tmpfd, phld->OrigBH, phld->OrigBHlen) < 1){
-    fprintf( FCGI_stderr, "Error: fwrite in add_placeholder_stream()\n");
-    return;
-  }
+    add_bigendian_bytestream(phld->LBox, 4, tmpfd);
+    if (write(tmpfd, phld->TBox, 4) < 1) {
+        fprintf(FCGI_stderr, "Error: fwrite in add_placeholder_stream()\n");
+        return;
+    }
+    add_bigendian_bytestream(phld->Flags, 4, tmpfd);
+    add_bigendian_bytestream(phld->OrigID, 8, tmpfd);
+
+    if (write(tmpfd, phld->OrigBH, phld->OrigBHlen) < 1) {
+        fprintf(FCGI_stderr, "Error: fwrite in add_placeholder_stream()\n");
+        return;
+    }
 }
 
-void add_bigendian_bytestream( Byte8_t code, int bytelength, int tmpfd)
+void add_bigendian_bytestream(Byte8_t code, int bytelength, int tmpfd)
 {
-  int n;
-  Byte8_t seg;
-  
-  n = bytelength - 1;
-  while( n >= 0) {
-    seg = ( code >> (n*8)) & 0xff;
-    if( write( tmpfd, ( Byte4_t *)&seg, 1) != 1){
-      fprintf( FCGI_stderr, "ERROR: failed to write bigendian_bytestream\n");
-      return;
-    }
-    n--;
-  }
+    int n;
+    Byte8_t seg;
+
+    n = bytelength - 1;
+    while (n >= 0) {
+        seg = (code >> (n * 8)) & 0xff;
+        if (write(tmpfd, (Byte4_t *)&seg, 1) != 1) {
+            fprintf(FCGI_stderr, "ERROR: failed to write bigendian_bytestream\n");
+            return;
+        }
+        n--;
+    }
 }
 
-void print_binarycode( Byte8_t n, int segmentlen)
+void print_binarycode(Byte8_t n, int segmentlen)
 {
-  char buf[256];
-  int i=0, j, k;
-
-  do{
-    buf[i++] = n%2 ? '1' : '0';
-  }while((n=n/2));
-
-  for( j=segmentlen-1; j>=i; j--)
-    putchar('0');
-  
-  for( j=i-1, k=0; j>=0; j--, k++){
-    putchar( buf[j]);
-    if( !((k+1)%segmentlen))
-      printf(" ");
-  }
-  printf("\n");
+    char buf[256];
+    int i = 0, j, k;
+
+    do {
+        buf[i++] = n % 2 ? '1' : '0';
+    } while ((n = n / 2));
+
+    for (j = segmentlen - 1; j >= i; j--) {
+        putchar('0');
+    }
+
+    for (j = i - 1, k = 0; j >= 0; j--, k++) {
+        putchar(buf[j]);
+        if (!((k + 1) % segmentlen)) {
+            printf(" ");
+        }
+    }
+    printf("\n");
 }
 
-Byte_t * parse_bin_id_vbas( Byte_t *streamptr, Byte_t *bb, Byte_t *c, Byte8_t *in_class_id);
-Byte_t * parse_vbas( Byte_t *streamptr, Byte8_t *elem);
+Byte_t * parse_bin_id_vbas(Byte_t *streamptr, Byte_t *bb, Byte_t *c,
+                           Byte8_t *in_class_id);
+Byte_t * parse_vbas(Byte_t *streamptr, Byte8_t *elem);
 
-void parse_JPIPstream( Byte_t *JPIPstream, Byte8_t streamlen, OPJ_OFF_T offset, msgqueue_param_t *msgqueue)
+void parse_JPIPstream(Byte_t *JPIPstream, Byte8_t streamlen, OPJ_OFF_T offset,
+                      msgqueue_param_t *msgqueue)
 {
-  Byte_t *ptr;  /* stream pointer*/
-  message_param_t *msg;
-  Byte_t bb, c;
-  Byte8_t class_id, csn;
-
-  class_id = (Byte8_t)-1; /* dummy*/
-  csn = (Byte8_t)-1;
-  ptr = JPIPstream;
-  while( (Byte8_t)(ptr-JPIPstream) < streamlen){
-    msg = (message_param_t *)opj_malloc( sizeof(message_param_t));
-    
-    ptr = parse_bin_id_vbas( ptr, &bb, &c, &msg->in_class_id);
-    
-    msg->last_byte   = c == 1 ? OPJ_TRUE : OPJ_FALSE;
-    
-    if( bb >= 2)
-      ptr = parse_vbas( ptr, &class_id);
-
-    msg->class_id = class_id;
-    
-    if (bb == 3)
-      ptr = parse_vbas( ptr, &csn);
-    msg->csn = csn;
-    
-    ptr = parse_vbas( ptr, &msg->bin_offset);
-    ptr = parse_vbas( ptr, &msg->length);
-    
-    if( msg->class_id%2) /* Aux is present only if the id is odd*/
-      ptr = parse_vbas( ptr, &msg->aux);
-    else
-      msg->aux = 0;
-    
-    msg->res_offset = ptr-JPIPstream+offset;
-    msg->phld = NULL;
-    msg->next = NULL;
+    Byte_t *ptr;  /* stream pointer*/
+    message_param_t *msg;
+    Byte_t bb, c;
+    Byte8_t class_id, csn;
 
-    if(msgqueue->first)
-      msgqueue->last->next = msg;
-    else
-      msgqueue->first = msg;
-    msgqueue->last = msg;
-    
-    ptr += msg->length;
-  }
+    class_id = (Byte8_t) - 1; /* dummy*/
+    csn = (Byte8_t) - 1;
+    ptr = JPIPstream;
+    while ((Byte8_t)(ptr - JPIPstream) < streamlen) {
+        msg = (message_param_t *)opj_malloc(sizeof(message_param_t));
+
+        ptr = parse_bin_id_vbas(ptr, &bb, &c, &msg->in_class_id);
+
+        msg->last_byte   = c == 1 ? OPJ_TRUE : OPJ_FALSE;
+
+        if (bb >= 2) {
+            ptr = parse_vbas(ptr, &class_id);
+        }
+
+        msg->class_id = class_id;
+
+        if (bb == 3) {
+            ptr = parse_vbas(ptr, &csn);
+        }
+        msg->csn = csn;
+
+        ptr = parse_vbas(ptr, &msg->bin_offset);
+        ptr = parse_vbas(ptr, &msg->length);
+
+        if (msg->class_id % 2) { /* Aux is present only if the id is odd*/
+            ptr = parse_vbas(ptr, &msg->aux);
+        } else {
+            msg->aux = 0;
+        }
+
+        msg->res_offset = ptr - JPIPstream + offset;
+        msg->phld = NULL;
+        msg->next = NULL;
+
+        if (msgqueue->first) {
+            msgqueue->last->next = msg;
+        } else {
+            msgqueue->first = msg;
+        }
+        msgqueue->last = msg;
+
+        ptr += msg->length;
+    }
 }
 
-void parse_metadata( metadata_param_t *metadata, message_param_t *msg, Byte_t *stream);
+void parse_metadata(metadata_param_t *metadata, message_param_t *msg,
+                    Byte_t *stream);
 
-void parse_metamsg( msgqueue_param_t *msgqueue, Byte_t *stream, Byte8_t streamlen, metadatalist_param_t *metadatalist)
+void parse_metamsg(msgqueue_param_t *msgqueue, Byte_t *stream,
+                   Byte8_t streamlen, metadatalist_param_t *metadatalist)
 {
-  message_param_t *msg;
-  (void)streamlen;
-
-  if( metadatalist == NULL)
-    return;
-  
-  msg = msgqueue->first;
-  while( msg){
-    if( msg->class_id == METADATA_MSG){
-      metadata_param_t *metadata = gene_metadata( msg->in_class_id, NULL, NULL, NULL);
-      insert_metadata_into_list( metadata, metadatalist);
-      parse_metadata( metadata, msg, stream+msg->res_offset);
-    }
-    msg = msg->next;
-  }
+    message_param_t *msg;
+    (void)streamlen;
+
+    if (metadatalist == NULL) {
+        return;
+    }
+
+    msg = msgqueue->first;
+    while (msg) {
+        if (msg->class_id == METADATA_MSG) {
+            metadata_param_t *metadata = gene_metadata(msg->in_class_id, NULL, NULL, NULL);
+            insert_metadata_into_list(metadata, metadatalist);
+            parse_metadata(metadata, msg, stream + msg->res_offset);
+        }
+        msg = msg->next;
+    }
 }
 
-placeholder_param_t * parse_phld( Byte_t *datastream, Byte8_t metalength);
+placeholder_param_t * parse_phld(Byte_t *datastream, Byte8_t metalength);
 
-void parse_metadata( metadata_param_t *metadata, message_param_t *msg, Byte_t *datastream)
+void parse_metadata(metadata_param_t *metadata, message_param_t *msg,
+                    Byte_t *datastream)
 {
-  box_param_t *box;
-  placeholder_param_t *phld;
-  char *boxtype = (char *)(datastream+4);
+    box_param_t *box;
+    placeholder_param_t *phld;
+    char *boxtype = (char *)(datastream + 4);
 
-  msg->phld = NULL;
+    msg->phld = NULL;
 
-  if( strncmp( boxtype, "phld", 4) == 0){
-    if( !metadata->placeholderlist)
-       metadata->placeholderlist = gene_placeholderlist();
-    
-    phld = parse_phld( datastream, msg->length);
-    msg->phld = phld;
-    insert_placeholder_into_list( phld, metadata->placeholderlist);
-  }
-  else if( isalpha(boxtype[0]) && isalpha(boxtype[1]) &&
-          (isalnum(boxtype[2])||isspace(boxtype[2])) &&
-          (isalpha(boxtype[3])||isspace(boxtype[3]))){
-    if( !metadata->boxlist)
-      metadata->boxlist = gene_boxlist();
-    
-    box = gene_boxbyOffinStream( datastream, msg->res_offset);
-    insert_box_into_list( box, metadata->boxlist);
-  }
-  else
-    metadata->boxcontents = gene_boxcontents( msg->res_offset, msg->length);
+    if (strncmp(boxtype, "phld", 4) == 0) {
+        if (!metadata->placeholderlist) {
+            metadata->placeholderlist = gene_placeholderlist();
+        }
+
+        phld = parse_phld(datastream, msg->length);
+        msg->phld = phld;
+        insert_placeholder_into_list(phld, metadata->placeholderlist);
+    } else if (isalpha(boxtype[0]) && isalpha(boxtype[1]) &&
+               (isalnum(boxtype[2]) || isspace(boxtype[2])) &&
+               (isalpha(boxtype[3]) || isspace(boxtype[3]))) {
+        if (!metadata->boxlist) {
+            metadata->boxlist = gene_boxlist();
+        }
+
+        box = gene_boxbyOffinStream(datastream, msg->res_offset);
+        insert_box_into_list(box, metadata->boxlist);
+    } else {
+        metadata->boxcontents = gene_boxcontents(msg->res_offset, msg->length);
+    }
 }
 
-placeholder_param_t * parse_phld( Byte_t *datastream, Byte8_t metalength)
+placeholder_param_t * parse_phld(Byte_t *datastream, Byte8_t metalength)
 {
-  placeholder_param_t *phld;
-
-  phld = (placeholder_param_t *)opj_malloc( sizeof(placeholder_param_t));
-  
-  phld->LBox = big4( datastream);
-  strncpy( phld->TBox, "phld", 4);
-  phld->Flags = big4( datastream+8);
-  phld->OrigID = big8( datastream+12);
-  phld->OrigBHlen = (Byte_t)(metalength - 20);
-  phld->OrigBH = (Byte_t *)opj_malloc(phld->OrigBHlen);
-  memcpy( phld->OrigBH, datastream+20, phld->OrigBHlen);
-  phld->next = NULL;
-
-  return phld;
+    placeholder_param_t *phld;
+
+    phld = (placeholder_param_t *)opj_malloc(sizeof(placeholder_param_t));
+
+    phld->LBox = big4(datastream);
+    strncpy(phld->TBox, "phld", 4);
+    phld->Flags = big4(datastream + 8);
+    phld->OrigID = big8(datastream + 12);
+    phld->OrigBHlen = (Byte_t)(metalength - 20);
+    phld->OrigBH = (Byte_t *)opj_malloc(phld->OrigBHlen);
+    memcpy(phld->OrigBH, datastream + 20, phld->OrigBHlen);
+    phld->next = NULL;
+
+    return phld;
 }
 
-Byte_t * parse_bin_id_vbas( Byte_t *streamptr, Byte_t *bb, Byte_t *c, Byte8_t *in_class_id)
+Byte_t * parse_bin_id_vbas(Byte_t *streamptr, Byte_t *bb, Byte_t *c,
+                           Byte8_t *in_class_id)
 {
-  Byte_t code;
-  Byte_t *ptr;
+    Byte_t code;
+    Byte_t *ptr;
+
+    ptr = streamptr;
+    code = *(ptr++);
 
-  ptr = streamptr;
-  code = *(ptr++);
+    *bb = (code >> 5) & 3;
+    *c  = (code >> 4) & 1;
 
-  *bb = (code >> 5) & 3;
-  *c  = (code >> 4) & 1;
-  
-  *in_class_id = code & 15;
+    *in_class_id = code & 15;
 
-  while(code >> 7){
-    code = *(ptr++);
-    *in_class_id = (*in_class_id << 7) | (code & 0x7f);
-  }
-  return ptr;
+    while (code >> 7) {
+        code = *(ptr++);
+        *in_class_id = (*in_class_id << 7) | (code & 0x7f);
+    }
+    return ptr;
 }
 
-Byte_t * parse_vbas( Byte_t *streamptr, Byte8_t *elem)
+Byte_t * parse_vbas(Byte_t *streamptr, Byte8_t *elem)
 {
-  Byte_t code;
-  Byte_t *ptr;
-  
-  *elem = 0;
-  ptr = streamptr;
-  do{
-    code = *(ptr++);
-    *elem = (*elem << 7) | (code & 0x7f);
-  }while(code >> 7);
-  
-  return ptr;
+    Byte_t code;
+    Byte_t *ptr;
+
+    *elem = 0;
+    ptr = streamptr;
+    do {
+        code = *(ptr++);
+        *elem = (*elem << 7) | (code & 0x7f);
+    } while (code >> 7);
+
+    return ptr;
 }
 
-void delete_message_in_msgqueue( message_param_t **msg, msgqueue_param_t *msgqueue)
+void delete_message_in_msgqueue(message_param_t **msg,
+                                msgqueue_param_t *msgqueue)
 {
-  message_param_t *ptr;
+    message_param_t *ptr;
 
-  if( !(*msg))
-    return;
+    if (!(*msg)) {
+        return;
+    }
 
-  if( *msg == msgqueue->first)
-    msgqueue->first = (*msg)->next;
-  else{
-    ptr = msgqueue->first;
-    while( ptr->next != *msg){
-      ptr=ptr->next;
-    }
-    
-    ptr->next = (*msg)->next;
-    
-    if( *msg == msgqueue->last)
-      msgqueue->last = ptr;
-  }
-  opj_free( *msg);
+    if (*msg == msgqueue->first) {
+        msgqueue->first = (*msg)->next;
+    } else {
+        ptr = msgqueue->first;
+        while (ptr->next != *msg) {
+            ptr = ptr->next;
+        }
+
+        ptr->next = (*msg)->next;
+
+        if (*msg == msgqueue->last) {
+            msgqueue->last = ptr;
+        }
+    }
+    opj_free(*msg);
 }
index 6932dfa73f241e7c3947bc8a09d8f5e89cc866f4..7fa53136b9714fd77761a37c2c7588e32651e370 100644 (file)
 
 #ifdef SERVER
 
-server_record_t * init_JPIPserver( int tcp_auxport, int udp_auxport)
+server_record_t * init_JPIPserver(int tcp_auxport, int udp_auxport)
 {
-  server_record_t *record = (server_record_t *)opj_malloc( sizeof(server_record_t));
-  
-  record->sessionlist = gene_sessionlist();
-  record->targetlist  = gene_targetlist();
-  record->auxtrans = init_aux_transport( tcp_auxport, udp_auxport);
-   
-  return record;
+    server_record_t *record = (server_record_t *)opj_malloc(sizeof(
+                                  server_record_t));
+
+    record->sessionlist = gene_sessionlist();
+    record->targetlist  = gene_targetlist();
+    record->auxtrans = init_aux_transport(tcp_auxport, udp_auxport);
+
+    return record;
 }
 
-void terminate_JPIPserver( server_record_t **rec)
+void terminate_JPIPserver(server_record_t **rec)
 {
-  delete_sessionlist( &(*rec)->sessionlist);
-  delete_targetlist( &(*rec)->targetlist); 
-  close_aux_transport( (*rec)->auxtrans);
-   
-  opj_free( *rec);
+    delete_sessionlist(&(*rec)->sessionlist);
+    delete_targetlist(&(*rec)->targetlist);
+    close_aux_transport((*rec)->auxtrans);
+
+    opj_free(*rec);
 }
 
-QR_t * parse_querystring( const char *query_string)
+QR_t * parse_querystring(const char *query_string)
 {
-  QR_t *qr;
+    QR_t *qr;
 
-  qr = (QR_t *)opj_malloc( sizeof(QR_t));
-    
-  qr->query = parse_query( query_string);
-  qr->msgqueue = NULL;
-  qr->channel = NULL;
+    qr = (QR_t *)opj_malloc(sizeof(QR_t));
 
-  return qr;
+    qr->query = parse_query(query_string);
+    qr->msgqueue = NULL;
+    qr->channel = NULL;
+
+    return qr;
 }
 
-OPJ_BOOL process_JPIPrequest( server_record_t *rec, QR_t *qr)
+OPJ_BOOL process_JPIPrequest(server_record_t *rec, QR_t *qr)
 {
-  target_param_t *target = NULL;
-  session_param_t *cursession = NULL;
-  channel_param_t *curchannel = NULL;
-
-  if( qr->query->target || qr->query->tid){
-    if( !identify_target( *(qr->query), rec->targetlist, &target))
-      return OPJ_FALSE;
-  }
-
-  if( qr->query->cid){
-    if( !associate_channel( *(qr->query), rec->sessionlist, &cursession, &curchannel))
-      return OPJ_FALSE;
-    qr->channel = curchannel;
-  }
-  
-  if( qr->query->cnew != non){
-    if( !open_channel( *(qr->query), rec->sessionlist, rec->auxtrans, target, &cursession, &curchannel))
-      return OPJ_FALSE;
-    qr->channel = curchannel;
-  }
-  
-  if( qr->query->cclose)
-    if( !close_channel( *(qr->query), rec->sessionlist, &cursession, &curchannel))
-      return OPJ_FALSE;
-  
-  if( (qr->query->fx > 0 && qr->query->fy > 0) || qr->query->box_type[0][0] != 0 || qr->query->len > 0)
-    if( !gene_JPIPstream( *(qr->query), target, cursession, curchannel, &qr->msgqueue))
-      return OPJ_FALSE;
-
-  return OPJ_TRUE;
+    target_param_t *target = NULL;
+    session_param_t *cursession = NULL;
+    channel_param_t *curchannel = NULL;
+
+    if (qr->query->target || qr->query->tid) {
+        if (!identify_target(*(qr->query), rec->targetlist, &target)) {
+            return OPJ_FALSE;
+        }
+    }
+
+    if (qr->query->cid) {
+        if (!associate_channel(*(qr->query), rec->sessionlist, &cursession,
+                               &curchannel)) {
+            return OPJ_FALSE;
+        }
+        qr->channel = curchannel;
+    }
+
+    if (qr->query->cnew != non) {
+        if (!open_channel(*(qr->query), rec->sessionlist, rec->auxtrans, target,
+                          &cursession, &curchannel)) {
+            return OPJ_FALSE;
+        }
+        qr->channel = curchannel;
+    }
+
+    if (qr->query->cclose)
+        if (!close_channel(*(qr->query), rec->sessionlist, &cursession, &curchannel)) {
+            return OPJ_FALSE;
+        }
+
+    if ((qr->query->fx > 0 && qr->query->fy > 0) ||
+            qr->query->box_type[0][0] != 0 || qr->query->len > 0)
+        if (!gene_JPIPstream(*(qr->query), target, cursession, curchannel,
+                             &qr->msgqueue)) {
+            return OPJ_FALSE;
+        }
+
+    return OPJ_TRUE;
 }
 
-void add_EORmsg( int fd, QR_t *qr);
+void add_EORmsg(int fd, QR_t *qr);
 
-void send_responsedata( server_record_t *rec, QR_t *qr)
+void send_responsedata(server_record_t *rec, QR_t *qr)
 {
-  int fd;
-  const char tmpfname[] = "tmpjpipstream.jpp";
-  Byte_t *jpipstream;
-  Byte8_t len_of_jpipstream;
-
-  if( (fd = open( tmpfname, O_RDWR|O_CREAT|O_EXCL, S_IRWXU)) == -1){
-    fprintf( FCGI_stderr, "file open error %s", tmpfname);
-    fprintf( FCGI_stdout, "Status: 503\r\n");
-    fprintf( FCGI_stdout, "Reason: Implementation failed\r\n");
+    int fd;
+    const char tmpfname[] = "tmpjpipstream.jpp";
+    Byte_t *jpipstream;
+    Byte8_t len_of_jpipstream;
+
+    if ((fd = open(tmpfname, O_RDWR | O_CREAT | O_EXCL, S_IRWXU)) == -1) {
+        fprintf(FCGI_stderr, "file open error %s", tmpfname);
+        fprintf(FCGI_stdout, "Status: 503\r\n");
+        fprintf(FCGI_stdout, "Reason: Implementation failed\r\n");
+        return;
+    }
+
+    recons_stream_from_msgqueue(qr->msgqueue, fd);
+
+    add_EORmsg(fd, qr);  /* needed at least for tcp and udp */
+
+    len_of_jpipstream = (Byte8_t)get_filesize(fd);
+    jpipstream = fetch_bytes(fd, 0, len_of_jpipstream);
+
+    close(fd);
+    remove(tmpfname);
+
+    fprintf(FCGI_stdout, "\r\n");
+
+    if (len_of_jpipstream) {
+
+        if (qr->channel)
+            if (qr->channel->aux == tcp || qr->channel->aux == udp) {
+                send_responsedata_on_aux(qr->channel->aux == tcp, rec->auxtrans,
+                                         qr->channel->cid, jpipstream, len_of_jpipstream, 1000); /* 1KB per frame*/
+                return;
+            }
+
+        if (fwrite(jpipstream, len_of_jpipstream, 1, FCGI_stdout) != 1) {
+            fprintf(FCGI_stderr, "Error: failed to write jpipstream\n");
+        }
+    }
+
+    opj_free(jpipstream);
+
     return;
-  }
-  
-  recons_stream_from_msgqueue( qr->msgqueue, fd);
-  
-  add_EORmsg( fd, qr); /* needed at least for tcp and udp */
-  
-  len_of_jpipstream = (Byte8_t)get_filesize( fd);
-  jpipstream = fetch_bytes( fd, 0, len_of_jpipstream);
-  
-  close( fd);
-  remove( tmpfname);
-
-  fprintf( FCGI_stdout, "\r\n");
-
-  if( len_of_jpipstream){
-    
-    if( qr->channel)
-      if( qr->channel->aux == tcp || qr->channel->aux == udp){
-       send_responsedata_on_aux( qr->channel->aux==tcp, rec->auxtrans, qr->channel->cid, jpipstream, len_of_jpipstream, 1000); /* 1KB per frame*/
-       return;
-      }
-    
-    if( fwrite( jpipstream, len_of_jpipstream, 1, FCGI_stdout) != 1)
-      fprintf( FCGI_stderr, "Error: failed to write jpipstream\n");
-  }
-
-  opj_free( jpipstream);
-
-  return;
 }
 
-void add_EORmsg( int fd, QR_t *qr)
+void add_EORmsg(int fd, QR_t *qr)
 {
-  unsigned char EOR[3];
-
-  if( qr->channel){
-    EOR[0] = 0x00;   
-    EOR[1] = is_allsent( *(qr->channel->cachemodel)) ? 0x01 : 0x02;
-    EOR[2] = 0x00;
-    if( write( fd, EOR, 3) != 3)
-      fprintf( FCGI_stderr, "Error: failed to write EOR message\n");
-  }
+    unsigned char EOR[3];
+
+    if (qr->channel) {
+        EOR[0] = 0x00;
+        EOR[1] = is_allsent(*(qr->channel->cachemodel)) ? 0x01 : 0x02;
+        EOR[2] = 0x00;
+        if (write(fd, EOR, 3) != 3) {
+            fprintf(FCGI_stderr, "Error: failed to write EOR message\n");
+        }
+    }
 }
 
-void end_QRprocess( server_record_t *rec, QR_t **qr)
+void end_QRprocess(server_record_t *rec, QR_t **qr)
 {
-  /* TODO: record client preferences if necessary*/
-  (void)rec; /* unused */
-  delete_query( &((*qr)->query));
-  delete_msgqueue( &((*qr)->msgqueue));
-  opj_free( *qr);
+    /* TODO: record client preferences if necessary*/
+    (void)rec; /* unused */
+    delete_query(&((*qr)->query));
+    delete_msgqueue(&((*qr)->msgqueue));
+    opj_free(*qr);
 }
 
 
-void local_log( OPJ_BOOL query, OPJ_BOOL messages, OPJ_BOOL sessions, OPJ_BOOL targets, QR_t *qr, server_record_t *rec)
+void local_log(OPJ_BOOL query, OPJ_BOOL messages, OPJ_BOOL sessions,
+               OPJ_BOOL targets, QR_t *qr, server_record_t *rec)
 {
-  if( query)
-    print_queryparam( *qr->query);
+    if (query) {
+        print_queryparam(*qr->query);
+    }
 
-  if( messages)
-    print_msgqueue( qr->msgqueue);
+    if (messages) {
+        print_msgqueue(qr->msgqueue);
+    }
 
-  if( sessions)
-    print_allsession( rec->sessionlist);
-  
-  if( targets)
-    print_alltarget( rec->targetlist);
+    if (sessions) {
+        print_allsession(rec->sessionlist);
+    }
+
+    if (targets) {
+        print_alltarget(rec->targetlist);
+    }
 }
 
 #endif /*SERVER*/
 
 #ifndef SERVER
 
-dec_server_record_t * OPJ_CALLCONV init_dec_server( int port)
+dec_server_record_t * OPJ_CALLCONV init_dec_server(int port)
 {
-  dec_server_record_t *record = (dec_server_record_t *)opj_malloc( sizeof(dec_server_record_t));
+    dec_server_record_t *record = (dec_server_record_t *)opj_malloc(sizeof(
+                                      dec_server_record_t));
 
-  record->cachelist = gene_cachelist();
-  record->jpipstream = NULL;
-  record->jpipstreamlen = 0;
-  record->msgqueue = gene_msgqueue( OPJ_TRUE, NULL);
-  record->listening_socket = open_listeningsocket( (uint16_t)port);
+    record->cachelist = gene_cachelist();
+    record->jpipstream = NULL;
+    record->jpipstreamlen = 0;
+    record->msgqueue = gene_msgqueue(OPJ_TRUE, NULL);
+    record->listening_socket = open_listeningsocket((uint16_t)port);
 
-  return record;
+    return record;
 }
 
-void OPJ_CALLCONV terminate_dec_server( dec_server_record_t **rec)
+void OPJ_CALLCONV terminate_dec_server(dec_server_record_t **rec)
 {
-  delete_cachelist( &(*rec)->cachelist);  
-  opj_free( (*rec)->jpipstream);
-  
-  if( (*rec)->msgqueue)
-    delete_msgqueue( &((*rec)->msgqueue));
-
-  if( close_socket( (*rec)->listening_socket) != 0)
-    perror("close");
-  
-  opj_free( *rec);
+    delete_cachelist(&(*rec)->cachelist);
+    opj_free((*rec)->jpipstream);
+
+    if ((*rec)->msgqueue) {
+        delete_msgqueue(&((*rec)->msgqueue));
+    }
+
+    if (close_socket((*rec)->listening_socket) != 0) {
+        perror("close");
+    }
+
+    opj_free(*rec);
 }
 
-client_t OPJ_CALLCONV accept_connection( dec_server_record_t *rec)
+client_t OPJ_CALLCONV accept_connection(dec_server_record_t *rec)
 {
-  client_t client;
-  
-  client = accept_socket( rec->listening_socket);
-  if( client == -1)
-    fprintf( stderr, "error: failed to connect to client\n");
-  
-  return client;
+    client_t client;
+
+    client = accept_socket(rec->listening_socket);
+    if (client == -1) {
+        fprintf(stderr, "error: failed to connect to client\n");
+    }
+
+    return client;
 }
 
-OPJ_BOOL OPJ_CALLCONV handle_clientreq( client_t client, dec_server_record_t *rec)
+OPJ_BOOL OPJ_CALLCONV handle_clientreq(client_t client,
+                                       dec_server_record_t *rec)
 {
-  OPJ_BOOL quit = OPJ_FALSE;
-  msgtype_t msgtype = identify_clientmsg( client);
-  
-  switch( msgtype){
-  case JPIPSTREAM:
-    handle_JPIPstreamMSG( client, rec->cachelist, &rec->jpipstream, &rec->jpipstreamlen, rec->msgqueue);
-    break;
-      
-  case PNMREQ:
-    handle_PNMreqMSG( client, rec->jpipstream, rec->msgqueue, rec->cachelist);
-    break;
-    
-  case XMLREQ:
-    handle_XMLreqMSG( client, rec->jpipstream, rec->cachelist);
-    break;
-
-  case TIDREQ:
-    handle_TIDreqMSG( client, rec->cachelist);
-    break;
-                                               
-  case CIDREQ:
-    handle_CIDreqMSG( client, rec->cachelist);
-    break;
-
-  case CIDDST:
-    handle_dstCIDreqMSG( client, rec->cachelist);
-    break;
-    
-  case SIZREQ:
-    handle_SIZreqMSG( client, rec->jpipstream, rec->msgqueue, rec->cachelist);
-    break;
-
-  case JP2SAVE:
-    handle_JP2saveMSG( client, rec->cachelist, rec->msgqueue, rec->jpipstream);
-    break;
-
-  case QUIT:
-    quit = OPJ_TRUE;
-    save_codestream( rec->jpipstream, rec->jpipstreamlen, "jpt");
-    break;
-  case MSGERROR:
-    break;
-  }
-
-  fprintf( stderr, "\t end of the connection\n\n");
-  if( close_socket(client) != 0){
-    perror("close");
-    return OPJ_FALSE;
-  }
-
-  if( quit)
-    return OPJ_FALSE;
-
-  return OPJ_TRUE;
+    OPJ_BOOL quit = OPJ_FALSE;
+    msgtype_t msgtype = identify_clientmsg(client);
+
+    switch (msgtype) {
+    case JPIPSTREAM:
+        handle_JPIPstreamMSG(client, rec->cachelist, &rec->jpipstream,
+                             &rec->jpipstreamlen, rec->msgqueue);
+        break;
+
+    case PNMREQ:
+        handle_PNMreqMSG(client, rec->jpipstream, rec->msgqueue, rec->cachelist);
+        break;
+
+    case XMLREQ:
+        handle_XMLreqMSG(client, rec->jpipstream, rec->cachelist);
+        break;
+
+    case TIDREQ:
+        handle_TIDreqMSG(client, rec->cachelist);
+        break;
+
+    case CIDREQ:
+        handle_CIDreqMSG(client, rec->cachelist);
+        break;
+
+    case CIDDST:
+        handle_dstCIDreqMSG(client, rec->cachelist);
+        break;
+
+    case SIZREQ:
+        handle_SIZreqMSG(client, rec->jpipstream, rec->msgqueue, rec->cachelist);
+        break;
+
+    case JP2SAVE:
+        handle_JP2saveMSG(client, rec->cachelist, rec->msgqueue, rec->jpipstream);
+        break;
+
+    case QUIT:
+        quit = OPJ_TRUE;
+        save_codestream(rec->jpipstream, rec->jpipstreamlen, "jpt");
+        break;
+    case MSGERROR:
+        break;
+    }
+
+    fprintf(stderr, "\t end of the connection\n\n");
+    if (close_socket(client) != 0) {
+        perror("close");
+        return OPJ_FALSE;
+    }
+
+    if (quit) {
+        return OPJ_FALSE;
+    }
+
+    return OPJ_TRUE;
 }
 
 
-jpip_dec_param_t * OPJ_CALLCONV init_jpipdecoder( OPJ_BOOL jp2)
+jpip_dec_param_t * OPJ_CALLCONV init_jpipdecoder(OPJ_BOOL jp2)
 {
-  jpip_dec_param_t *dec;
-  
-  dec = (jpip_dec_param_t *)opj_calloc( 1, sizeof(jpip_dec_param_t));
+    jpip_dec_param_t *dec;
 
-  dec->msgqueue = gene_msgqueue( OPJ_TRUE, NULL);
-  
-  if( jp2)
-    dec->metadatalist = gene_metadatalist();
+    dec = (jpip_dec_param_t *)opj_calloc(1, sizeof(jpip_dec_param_t));
 
-  return dec;
+    dec->msgqueue = gene_msgqueue(OPJ_TRUE, NULL);
+
+    if (jp2) {
+        dec->metadatalist = gene_metadatalist();
+    }
+
+    return dec;
 }
 
 
-OPJ_BOOL OPJ_CALLCONV fread_jpip( const char fname[], jpip_dec_param_t *dec)
+OPJ_BOOL OPJ_CALLCONV fread_jpip(const char fname[], jpip_dec_param_t *dec)
 {
-  int infd;
-
-  if(( infd = open( fname, O_RDONLY)) == -1){
-    fprintf( stderr, "file %s not exist\n", fname);
-    return OPJ_FALSE;
-  }
-  
-  if(!(dec->jpiplen = (Byte8_t)get_filesize(infd)))
-    return OPJ_FALSE;
-  
-  dec->jpipstream = (Byte_t *)opj_malloc( dec->jpiplen);
-
-  if( read( infd, dec->jpipstream, dec->jpiplen) != (int)dec->jpiplen){
-    fprintf( stderr, "file reading error\n");
-    opj_free( dec->jpipstream);
-    return OPJ_FALSE;
-  }
-
-  close(infd);
-
-  return OPJ_TRUE;
+    int infd;
+
+    if ((infd = open(fname, O_RDONLY)) == -1) {
+        fprintf(stderr, "file %s not exist\n", fname);
+        return OPJ_FALSE;
+    }
+
+    if (!(dec->jpiplen = (Byte8_t)get_filesize(infd))) {
+        return OPJ_FALSE;
+    }
+
+    dec->jpipstream = (Byte_t *)opj_malloc(dec->jpiplen);
+
+    if (read(infd, dec->jpipstream, dec->jpiplen) != (int)dec->jpiplen) {
+        fprintf(stderr, "file reading error\n");
+        opj_free(dec->jpipstream);
+        return OPJ_FALSE;
+    }
+
+    close(infd);
+
+    return OPJ_TRUE;
 }
 
-void OPJ_CALLCONV decode_jpip( jpip_dec_param_t *dec)
+void OPJ_CALLCONV decode_jpip(jpip_dec_param_t *dec)
 {
-  parse_JPIPstream( dec->jpipstream, dec->jpiplen, 0, dec->msgqueue);
-
-  if( dec->metadatalist){ /* JP2 encoding*/
-    parse_metamsg( dec->msgqueue, dec->jpipstream, dec->jpiplen, dec->metadatalist);
-    dec->ihdrbox = gene_ihdrbox( dec->metadatalist, dec->jpipstream);
-    
-    dec->jp2kstream = recons_jp2( dec->msgqueue, dec->jpipstream, dec->msgqueue->first->csn, &dec->jp2klen);
-  }
-  else /* J2k encoding  */
-    /* Notice: arguments fw, fh need to be set for LRCP, PCRL, CPRL*/
-    dec->jp2kstream = recons_j2k( dec->msgqueue, dec->jpipstream, dec->msgqueue->first->csn, 0, 0, &dec->jp2klen);  
+    parse_JPIPstream(dec->jpipstream, dec->jpiplen, 0, dec->msgqueue);
+
+    if (dec->metadatalist) { /* JP2 encoding*/
+        parse_metamsg(dec->msgqueue, dec->jpipstream, dec->jpiplen, dec->metadatalist);
+        dec->ihdrbox = gene_ihdrbox(dec->metadatalist, dec->jpipstream);
+
+        dec->jp2kstream = recons_jp2(dec->msgqueue, dec->jpipstream,
+                                     dec->msgqueue->first->csn, &dec->jp2klen);
+    } else /* J2k encoding  */
+        /* Notice: arguments fw, fh need to be set for LRCP, PCRL, CPRL*/
+    {
+        dec->jp2kstream = recons_j2k(dec->msgqueue, dec->jpipstream,
+                                     dec->msgqueue->first->csn, 0, 0, &dec->jp2klen);
+    }
 }
 
-OPJ_BOOL OPJ_CALLCONV fwrite_jp2k( const char fname[], jpip_dec_param_t *dec)
+OPJ_BOOL OPJ_CALLCONV fwrite_jp2k(const char fname[], jpip_dec_param_t *dec)
 {
-  int outfd;
-  
+    int outfd;
+
 #ifdef _WIN32
-  if(( outfd = open( fname, O_WRONLY|O_CREAT, _S_IREAD | _S_IWRITE)) == -1){
+    if ((outfd = open(fname, O_WRONLY | O_CREAT, _S_IREAD | _S_IWRITE)) == -1) {
 #else
if(( outfd = open( fname, O_WRONLY|O_CREAT, S_IRWXU|S_IRWXG)) == -1){
   if ((outfd = open(fname, O_WRONLY | O_CREAT, S_IRWXU | S_IRWXG)) == -1) {
 #endif
-   fprintf( stderr, "file %s open error\n", fname);
-   return OPJ_FALSE;
- }
-  
- if( write( outfd, dec->jp2kstream, dec->jp2klen) != (int)dec->jp2klen)
-   fprintf( stderr, "j2k file write error\n");
+        fprintf(stderr, "file %s open error\n", fname);
+        return OPJ_FALSE;
+    }
+
+    if (write(outfd, dec->jp2kstream, dec->jp2klen) != (int)dec->jp2klen) {
+        fprintf(stderr, "j2k file write error\n");
+    }
 
- close(outfd);
   close(outfd);
 
- return OPJ_TRUE;
   return OPJ_TRUE;
 }
 
-void OPJ_CALLCONV output_log( OPJ_BOOL messages, OPJ_BOOL metadata, OPJ_BOOL ihdrbox, jpip_dec_param_t *dec)
+void OPJ_CALLCONV output_log(OPJ_BOOL messages, OPJ_BOOL metadata,
+                             OPJ_BOOL ihdrbox, jpip_dec_param_t *dec)
 {
-  if( messages)
-    print_msgqueue( dec->msgqueue);
-
-  if( metadata)
-    print_allmetadata( dec->metadatalist);
-
-  if( ihdrbox){
-    printf("W*H: %d*%d\n", dec->ihdrbox->height, dec->ihdrbox->width);
-    printf("NC: %d, bpc: %d\n", dec->ihdrbox->nc, dec->ihdrbox->bpc);
-  }
+    if (messages) {
+        print_msgqueue(dec->msgqueue);
+    }
+
+    if (metadata) {
+        print_allmetadata(dec->metadatalist);
+    }
+
+    if (ihdrbox) {
+        printf("W*H: %d*%d\n", dec->ihdrbox->height, dec->ihdrbox->width);
+        printf("NC: %d, bpc: %d\n", dec->ihdrbox->nc, dec->ihdrbox->bpc);
+    }
 }
 
-void OPJ_CALLCONV destroy_jpipdecoder( jpip_dec_param_t **dec)
+void OPJ_CALLCONV destroy_jpipdecoder(jpip_dec_param_t **dec)
 {
-  opj_free( (*dec)->jpipstream);
-  delete_msgqueue( &(*dec)->msgqueue);
-  if( (*dec)->metadatalist){
-    delete_metadatalist( &(*dec)->metadatalist);
-    opj_free( (*dec)->ihdrbox);
-  }
-
-  opj_free( (*dec)->jp2kstream);
-  opj_free( *dec);
+    opj_free((*dec)->jpipstream);
+    delete_msgqueue(&(*dec)->msgqueue);
+    if ((*dec)->metadatalist) {
+        delete_metadatalist(&(*dec)->metadatalist);
+        opj_free((*dec)->ihdrbox);
+    }
+
+    opj_free((*dec)->jp2kstream);
+    opj_free(*dec);
 }
 
-index_t * OPJ_CALLCONV get_index_from_JP2file( int fd)
+index_t * OPJ_CALLCONV get_index_from_JP2file(int fd)
 {
-  char *data;
-  /* Check resource is a JP family file.*/
-  if( lseek( fd, 0, SEEK_SET)==-1){
-    fprintf( stderr, "Error: File broken (lseek error)\n");
-    return NULL;
-  }
-  
-  data = (char *)opj_malloc( 12); /* size of header*/
-  if( read( fd, data, 12) != 12){
-    opj_free( data);
-    fprintf( stderr, "Error: File broken (read error)\n");
-    return NULL;
-  }
-    
-  if( *data || *(data + 1) || *(data + 2) ||
-      *(data + 3) != 12 || strncmp (data + 4, "jP  \r\n\x87\n", 8)){
-    opj_free( data);
-    fprintf( stderr, "Error: No JPEG 2000 Signature box in this file\n");
-    return NULL;
-  }
-  opj_free( data);
-  
-  return parse_jp2file( fd);
+    char *data;
+
+    /* Check resource is a JP family file.*/
+    if (lseek(fd, 0, SEEK_SET) == -1) {
+        fprintf(stderr, "Error: File broken (lseek error)\n");
+        return NULL;
+    }
+
+    data = (char *)opj_malloc(12);  /* size of header*/
+    if (read(fd, data, 12) != 12) {
+        opj_free(data);
+        fprintf(stderr, "Error: File broken (read error)\n");
+        return NULL;
+    }
+
+    if (*data || *(data + 1) || *(data + 2) ||
+            *(data + 3) != 12 || strncmp(data + 4, "jP  \r\n\x87\n", 8)) {
+        opj_free(data);
+        fprintf(stderr, "Error: No JPEG 2000 Signature box in this file\n");
+        return NULL;
+    }
+    opj_free(data);
+
+    return parse_jp2file(fd);
 }
 
-void OPJ_CALLCONV destroy_index( index_t **idx)
+void OPJ_CALLCONV destroy_index(index_t **idx)
 {
-  delete_index( idx);
+    delete_index(idx);
 }
 
-void OPJ_CALLCONV output_index( index_t *index)
+void OPJ_CALLCONV output_index(index_t *index)
 {
-  print_index( *index);
+    print_index(*index);
 }
 
 #endif /*SERVER*/
index 4acfeb873767a7f4f09235b969aa1f77057eaaab..2ffa20348672ec4aade23341e9986657c777903a 100644 (file)
 
 placeholderlist_param_t * gene_placeholderlist(void)
 {
-  placeholderlist_param_t *list;
+    placeholderlist_param_t *list;
 
-  list = (placeholderlist_param_t *)malloc( sizeof(placeholderlist_param_t));
-  
-  list->first = NULL;
-  list->last  = NULL;
+    list = (placeholderlist_param_t *)malloc(sizeof(placeholderlist_param_t));
 
-  return list;
+    list->first = NULL;
+    list->last  = NULL;
+
+    return list;
 }
 
-void delete_placeholderlist( placeholderlist_param_t **list)
+void delete_placeholderlist(placeholderlist_param_t **list)
 {
-  placeholder_param_t *ptr, *next;
-
-  if(!(*list))
-    return;
-
-  ptr = (*list)->first;
-  
-  while( ptr){
-    next=ptr->next;
-    delete_placeholder( &ptr);
-    ptr=next;
-  }
-  free( *list);
+    placeholder_param_t *ptr, *next;
+
+    if (!(*list)) {
+        return;
+    }
+
+    ptr = (*list)->first;
+
+    while (ptr) {
+        next = ptr->next;
+        delete_placeholder(&ptr);
+        ptr = next;
+    }
+    free(*list);
 }
 
-placeholder_param_t * gene_placeholder( box_param_t *box, Byte8_t origID)
+placeholder_param_t * gene_placeholder(box_param_t *box, Byte8_t origID)
 {
-  placeholder_param_t *placeholder;
-
-  placeholder = (placeholder_param_t *)malloc( sizeof(placeholder_param_t));
-  
-  strncpy( placeholder->TBox, "phld", 4);
-  placeholder->Flags = 1; /* only the access to the original contents of this box, for now */
-  placeholder->OrigID = origID;
-  placeholder->OrigBH = fetch_headbytes( box);
-  placeholder->OrigBHlen = box->headlen;
-  placeholder->LBox = 20+(Byte4_t)box->headlen;
-  placeholder->next = NULL;
-
-  return placeholder;
+    placeholder_param_t *placeholder;
+
+    placeholder = (placeholder_param_t *)malloc(sizeof(placeholder_param_t));
+
+    strncpy(placeholder->TBox, "phld", 4);
+    placeholder->Flags =
+        1; /* only the access to the original contents of this box, for now */
+    placeholder->OrigID = origID;
+    placeholder->OrigBH = fetch_headbytes(box);
+    placeholder->OrigBHlen = box->headlen;
+    placeholder->LBox = 20 + (Byte4_t)box->headlen;
+    placeholder->next = NULL;
+
+    return placeholder;
 }
 
-void delete_placeholder( placeholder_param_t **placeholder)
+void delete_placeholder(placeholder_param_t **placeholder)
 {
-  if( (*placeholder)->OrigBH)
-    free((*placeholder)->OrigBH);
-  free(*placeholder);
+    if ((*placeholder)->OrigBH) {
+        free((*placeholder)->OrigBH);
+    }
+    free(*placeholder);
 }
 
-void insert_placeholder_into_list( placeholder_param_t *phld, placeholderlist_param_t *phldlist)
+void insert_placeholder_into_list(placeholder_param_t *phld,
+                                  placeholderlist_param_t *phldlist)
 {
-  if( phldlist->first)
-    phldlist->last->next = phld;
-  else
-    phldlist->first = phld;
-  phldlist->last = phld;
+    if (phldlist->first) {
+        phldlist->last->next = phld;
+    } else {
+        phldlist->first = phld;
+    }
+    phldlist->last = phld;
 }
 
-void print_placeholder( placeholder_param_t *phld)
+void print_placeholder(placeholder_param_t *phld)
 {
-  int i;
-
-  fprintf( logstream, "placeholder info:\n");
-  fprintf( logstream, "\t LBox: %d %#x\n", phld->LBox, phld->LBox);
-  fprintf( logstream, "\t TBox: %.4s\n", phld->TBox);
-  fprintf( logstream, "\t Flags: %#x %#x\n", phld->Flags, phld->Flags);
-  fprintf( logstream, "\t OrigID: %" PRId64 "\n", phld->OrigID);
-  fprintf( logstream, "\t OrigBH: ");
-  
-  for( i=0; i< phld->OrigBHlen; i++)
-    fprintf( logstream, "%02x ", phld->OrigBH[i]);
-  fprintf( logstream, "\t");
-
-  for( i=0; i< phld->OrigBHlen; i++)
-    fprintf( logstream, "%c", phld->OrigBH[i]);
-  fprintf( logstream, "\n");
+    int i;
+
+    fprintf(logstream, "placeholder info:\n");
+    fprintf(logstream, "\t LBox: %d %#x\n", phld->LBox, phld->LBox);
+    fprintf(logstream, "\t TBox: %.4s\n", phld->TBox);
+    fprintf(logstream, "\t Flags: %#x %#x\n", phld->Flags, phld->Flags);
+    fprintf(logstream, "\t OrigID: %" PRId64 "\n", phld->OrigID);
+    fprintf(logstream, "\t OrigBH: ");
+
+    for (i = 0; i < phld->OrigBHlen; i++) {
+        fprintf(logstream, "%02x ", phld->OrigBH[i]);
+    }
+    fprintf(logstream, "\t");
+
+    for (i = 0; i < phld->OrigBHlen; i++) {
+        fprintf(logstream, "%c", phld->OrigBH[i]);
+    }
+    fprintf(logstream, "\n");
 }
 
-void print_allplaceholder( placeholderlist_param_t *list)
+void print_allplaceholder(placeholderlist_param_t *list)
 {
-  placeholder_param_t *ptr;
-
-  if( !list)
-    return;
-  
-  fprintf( logstream, "all placeholder info: \n");
-  ptr = list->first;
-  while( ptr != NULL){
-    print_placeholder( ptr);
-    ptr=ptr->next;
-  }
+    placeholder_param_t *ptr;
+
+    if (!list) {
+        return;
+    }
+
+    fprintf(logstream, "all placeholder info: \n");
+    ptr = list->first;
+    while (ptr != NULL) {
+        print_placeholder(ptr);
+        ptr = ptr->next;
+    }
 }
index 8f07fa61161dae3884808dfe86c28f6067c89725..9b2fac2d2fbbcc5f5dc2897448307bfae65674e1 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
  * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara 
+ * Copyright (c) 2010-2011, Kaori Hagihara
  * Copyright (c) 2011,      Lucian Corlaciu, GSoC
  * All rights reserved.
  *
@@ -70,13 +70,13 @@ query_param_t * get_initquery(void);
  * @param[out] fieldval string to copy the field value, if not found, NULL
  * @return pointer to the next field string, if there is none, NULL
  */
-char * get_fieldparam( const char *stringptr, char *fieldname, char *fieldval);
+char * get_fieldparam(const char *stringptr, char *fieldname, char *fieldval);
 
-void parse_cclose( char *src, query_param_t *query_param);
-void parse_metareq( char *field, query_param_t *query_param);
+void parse_cclose(char *src, query_param_t *query_param);
+void parse_metareq(char *field, query_param_t *query_param);
 
 /* parse the requested components (parses forms like:a; a,b; a-b; a-b,c;  a,b-c)*/
-void parse_comps( char *field, query_param_t *query_param);
+void parse_comps(char *field, query_param_t *query_param);
 
 
 /** maximum length of field name*/
@@ -85,345 +85,388 @@ void parse_comps( char *field, query_param_t *query_param);
 /** maximum length of field value*/
 #define MAX_LENOFFIELDVAL 128
 
-query_param_t * parse_query( const char *query_string)
+query_param_t * parse_query(const char *query_string)
 {
-  query_param_t *query_param;
-  const char *pquery;
-  char fieldname[MAX_LENOFFIELDNAME], fieldval[MAX_LENOFFIELDVAL];
-
-  query_param = get_initquery();
-  
-  pquery = query_string;
-
-  while( pquery!=NULL) {
-    
-    pquery = get_fieldparam( pquery, fieldname, fieldval);
-
-    if( fieldname[0] != '\0'){
-      if( strcasecmp( fieldname, "target") == 0)
-       query_param->target = strdup( fieldval);
-      
-      else if( strcasecmp( fieldname, "tid") == 0)
-       query_param->tid = strdup( fieldval);
-
-      else if( strcasecmp( fieldname, "fsiz") == 0)
-       sscanf( fieldval, "%d,%d", &query_param->fx, &query_param->fy);
-      
-      else if( strcasecmp( fieldname, "roff") == 0)
-       sscanf( fieldval, "%d,%d", &query_param->rx, &query_param->ry);
-
-      else if( strcasecmp( fieldname, "rsiz") == 0)
-       sscanf( fieldval, "%d,%d", &query_param->rw, &query_param->rh);
-      
-      else if( strcasecmp( fieldname, "layers") == 0)
-       sscanf( fieldval, "%d", &query_param->layers);
-      
-      else if( strcasecmp( fieldname, "cid") == 0)
-       query_param->cid = strdup( fieldval);
-
-      else if( strcasecmp( fieldname, "cnew") == 0){
-       if( strncasecmp( fieldval, "http-tcp", 8) == 0)
-         query_param->cnew = tcp;
-       else if( strncasecmp( fieldval, "http", 4) == 0)
-         query_param->cnew = http;
-      }
-      
-      else if( strcasecmp( fieldname, "cclose") == 0)
-       parse_cclose( fieldval, query_param);
-      
-      else if( strcasecmp( fieldname, "metareq") == 0)
-       parse_metareq( fieldval, query_param);
-      
-      else if( strcasecmp( fieldname, "comps") == 0)
-       parse_comps( fieldval, query_param);
-      
-      else if( strcasecmp( fieldname, "type") == 0){
-       if( strncasecmp( fieldval, "jpp-stream", 10) == 0)
-         query_param->return_type = JPPstream;
-       else if( strncasecmp( fieldval, "jpt-stream", 10) == 0)
-         query_param->return_type = JPTstream;
-      }
-
-      else if( strcasecmp( fieldname, "len") == 0){
-       sscanf( fieldval, "%d", &query_param->len);
-       if( query_param->len == 2000) /* for kakadu client*/
-         strncpy( query_param->box_type[0], "ftyp", 4);
-      }
+    query_param_t *query_param;
+    const char *pquery;
+    char fieldname[MAX_LENOFFIELDNAME], fieldval[MAX_LENOFFIELDVAL];
+
+    query_param = get_initquery();
+
+    pquery = query_string;
+
+    while (pquery != NULL) {
+
+        pquery = get_fieldparam(pquery, fieldname, fieldval);
+
+        if (fieldname[0] != '\0') {
+            if (strcasecmp(fieldname, "target") == 0) {
+                query_param->target = strdup(fieldval);
+            }
+
+            else if (strcasecmp(fieldname, "tid") == 0) {
+                query_param->tid = strdup(fieldval);
+            }
+
+            else if (strcasecmp(fieldname, "fsiz") == 0) {
+                sscanf(fieldval, "%d,%d", &query_param->fx, &query_param->fy);
+            }
+
+            else if (strcasecmp(fieldname, "roff") == 0) {
+                sscanf(fieldval, "%d,%d", &query_param->rx, &query_param->ry);
+            }
+
+            else if (strcasecmp(fieldname, "rsiz") == 0) {
+                sscanf(fieldval, "%d,%d", &query_param->rw, &query_param->rh);
+            }
+
+            else if (strcasecmp(fieldname, "layers") == 0) {
+                sscanf(fieldval, "%d", &query_param->layers);
+            }
+
+            else if (strcasecmp(fieldname, "cid") == 0) {
+                query_param->cid = strdup(fieldval);
+            }
+
+            else if (strcasecmp(fieldname, "cnew") == 0) {
+                if (strncasecmp(fieldval, "http-tcp", 8) == 0) {
+                    query_param->cnew = tcp;
+                } else if (strncasecmp(fieldval, "http", 4) == 0) {
+                    query_param->cnew = http;
+                }
+            }
+
+            else if (strcasecmp(fieldname, "cclose") == 0) {
+                parse_cclose(fieldval, query_param);
+            }
+
+            else if (strcasecmp(fieldname, "metareq") == 0) {
+                parse_metareq(fieldval, query_param);
+            }
+
+            else if (strcasecmp(fieldname, "comps") == 0) {
+                parse_comps(fieldval, query_param);
+            }
+
+            else if (strcasecmp(fieldname, "type") == 0) {
+                if (strncasecmp(fieldval, "jpp-stream", 10) == 0) {
+                    query_param->return_type = JPPstream;
+                } else if (strncasecmp(fieldval, "jpt-stream", 10) == 0) {
+                    query_param->return_type = JPTstream;
+                }
+            }
+
+            else if (strcasecmp(fieldname, "len") == 0) {
+                sscanf(fieldval, "%d", &query_param->len);
+                if (query_param->len == 2000) { /* for kakadu client*/
+                    strncpy(query_param->box_type[0], "ftyp", 4);
+                }
+            }
+        }
     }
-  }
-  return query_param;
+    return query_param;
 }
 
 query_param_t * get_initquery(void)
 {
-  query_param_t *query;
-  int i;
-
-  query = (query_param_t *)opj_malloc( sizeof(query_param_t));
-
-  query->target = NULL;
-  query->tid = NULL;
-  query->fx = -1;
-  query->fy = -1;
-  query->rx = -1;
-  query->ry = -1;
-  query->rw = -1;
-  query->rh = -1;
-  query->layers = -1;
-  query->lastcomp = -1;
-  query->comps = NULL;  
-  query->cid = NULL;
-  query->cnew = non;
-  query->cclose = NULL;
-  query->numOfcclose = 0;
-  memset( query->box_type, 0, MAX_NUMOFBOX*4);
-  memset( query->limit, 0, MAX_NUMOFBOX*sizeof(int));
-  for( i=0; i<MAX_NUMOFBOX; i++){
-    query->w[i] = OPJ_FALSE;
-    query->s[i] = OPJ_FALSE;
-    query->g[i] = OPJ_FALSE;
-    query->a[i] = OPJ_FALSE;
-    query->priority[i] = OPJ_FALSE;
-  }
-  query->root_bin = 0;
-  query->max_depth = -1;
-  query->metadata_only = OPJ_FALSE;
-  query->return_type = UNKNOWN;
-  query->len = -1;
-
-  return query;
+    query_param_t *query;
+    int i;
+
+    query = (query_param_t *)opj_malloc(sizeof(query_param_t));
+
+    query->target = NULL;
+    query->tid = NULL;
+    query->fx = -1;
+    query->fy = -1;
+    query->rx = -1;
+    query->ry = -1;
+    query->rw = -1;
+    query->rh = -1;
+    query->layers = -1;
+    query->lastcomp = -1;
+    query->comps = NULL;
+    query->cid = NULL;
+    query->cnew = non;
+    query->cclose = NULL;
+    query->numOfcclose = 0;
+    memset(query->box_type, 0, MAX_NUMOFBOX * 4);
+    memset(query->limit, 0, MAX_NUMOFBOX * sizeof(int));
+    for (i = 0; i < MAX_NUMOFBOX; i++) {
+        query->w[i] = OPJ_FALSE;
+        query->s[i] = OPJ_FALSE;
+        query->g[i] = OPJ_FALSE;
+        query->a[i] = OPJ_FALSE;
+        query->priority[i] = OPJ_FALSE;
+    }
+    query->root_bin = 0;
+    query->max_depth = -1;
+    query->metadata_only = OPJ_FALSE;
+    query->return_type = UNKNOWN;
+    query->len = -1;
+
+    return query;
 }
 
 
-char * get_fieldparam( const char *stringptr, char *fieldname, char *fieldval)
+char * get_fieldparam(const char *stringptr, char *fieldname, char *fieldval)
 {
-  char *eqp, *andp, *nexfieldptr;
-
-  if((eqp = strchr( stringptr, '='))==NULL){
-    fprintf( stderr, "= not found\n");
-    strcpy( fieldname, "");
-    strcpy( fieldval, "");
-    return NULL;
-  }
-  if((andp = strchr( stringptr, '&'))==NULL){
-    andp = strchr( stringptr, '\0');
-    nexfieldptr = NULL;
-  }
-  else
-    nexfieldptr = andp+1;
-
-  assert( (size_t)(eqp-stringptr));
-  strncpy( fieldname, stringptr, (size_t)(eqp-stringptr));
-  fieldname[eqp-stringptr]='\0';
-  assert( andp-eqp-1 >= 0);
-  strncpy( fieldval, eqp+1, (size_t)(andp-eqp-1));
-  fieldval[andp-eqp-1]='\0';
-
-  return nexfieldptr;
+    char *eqp, *andp, *nexfieldptr;
+
+    if ((eqp = strchr(stringptr, '=')) == NULL) {
+        fprintf(stderr, "= not found\n");
+        strcpy(fieldname, "");
+        strcpy(fieldval, "");
+        return NULL;
+    }
+    if ((andp = strchr(stringptr, '&')) == NULL) {
+        andp = strchr(stringptr, '\0');
+        nexfieldptr = NULL;
+    } else {
+        nexfieldptr = andp + 1;
+    }
+
+    assert((size_t)(eqp - stringptr));
+    strncpy(fieldname, stringptr, (size_t)(eqp - stringptr));
+    fieldname[eqp - stringptr] = '\0';
+    assert(andp - eqp - 1 >= 0);
+    strncpy(fieldval, eqp + 1, (size_t)(andp - eqp - 1));
+    fieldval[andp - eqp - 1] = '\0';
+
+    return nexfieldptr;
 }
 
-void print_queryparam( query_param_t query_param)
+void print_queryparam(query_param_t query_param)
 {
-  int i;
-  char *cclose;
-
-  fprintf( logstream, "query parameters:\n");
-  
-  if( query_param.target)
-    fprintf( logstream, "\t target: %s\n", query_param.target);
-  
-  if( query_param.tid)
-    fprintf( logstream, "\t tid: %s\n", query_param.tid);
-  
-  fprintf( logstream, "\t fx,fy: %d, %d\n", query_param.fx, query_param.fy);
-  fprintf( logstream, "\t rx,ry: %d, %d \t rw,rh: %d, %d\n", query_param.rx, query_param.ry, query_param.rw, query_param.rh);
-  fprintf( logstream, "\t layers: %d\n", query_param.layers);
-  fprintf( logstream, "\t components: ");
-  
-  if( query_param.lastcomp == -1)
-    fprintf( logstream, "ALL\n");
-  else{
-    for( i=0; i<=query_param.lastcomp; i++)
-      if( query_param.comps[i])
-       fprintf( logstream, "%d ", i);
-    fprintf( logstream, "\n");
-  }
-  fprintf( logstream, "\t cnew: %d\n", query_param.cnew);
-  
-  if( query_param.cid)
-    fprintf( logstream, "\t cid: %s\n", query_param.cid);
-  
-  if( query_param.cclose){
-    fprintf( logstream, "\t cclose: ");
-    
-    for( i=0, cclose=query_param.cclose; i<query_param.numOfcclose; i++){
-      fprintf( logstream, "%s ", cclose);
-      cclose += (strlen(cclose)+1);
+    int i;
+    char *cclose;
+
+    fprintf(logstream, "query parameters:\n");
+
+    if (query_param.target) {
+        fprintf(logstream, "\t target: %s\n", query_param.target);
+    }
+
+    if (query_param.tid) {
+        fprintf(logstream, "\t tid: %s\n", query_param.tid);
+    }
+
+    fprintf(logstream, "\t fx,fy: %d, %d\n", query_param.fx, query_param.fy);
+    fprintf(logstream, "\t rx,ry: %d, %d \t rw,rh: %d, %d\n", query_param.rx,
+            query_param.ry, query_param.rw, query_param.rh);
+    fprintf(logstream, "\t layers: %d\n", query_param.layers);
+    fprintf(logstream, "\t components: ");
+
+    if (query_param.lastcomp == -1) {
+        fprintf(logstream, "ALL\n");
+    } else {
+        for (i = 0; i <= query_param.lastcomp; i++)
+            if (query_param.comps[i]) {
+                fprintf(logstream, "%d ", i);
+            }
+        fprintf(logstream, "\n");
+    }
+    fprintf(logstream, "\t cnew: %d\n", query_param.cnew);
+
+    if (query_param.cid) {
+        fprintf(logstream, "\t cid: %s\n", query_param.cid);
+    }
+
+    if (query_param.cclose) {
+        fprintf(logstream, "\t cclose: ");
+
+        for (i = 0, cclose = query_param.cclose; i < query_param.numOfcclose; i++) {
+            fprintf(logstream, "%s ", cclose);
+            cclose += (strlen(cclose) + 1);
+        }
+        fprintf(logstream, "\n");
     }
-    fprintf(logstream, "\n");
-  }
-
-  fprintf( logstream, "\t req-box-prop\n");
-  for( i=0; i<MAX_NUMOFBOX && query_param.box_type[i][0]!=0; i++){
-    fprintf( logstream, "\t\t box_type: %.4s limit: %d w:%d s:%d g:%d a:%d priority:%d\n", query_param.box_type[i], query_param.limit[i], query_param.w[i], query_param.s[i], query_param.g[i], query_param.a[i], query_param.priority[i]);
-  }
-  
-  fprintf( logstream, "\t root-bin:  %d\n", query_param.root_bin);
-  fprintf( logstream, "\t max-depth: %d\n", query_param.max_depth);
-  fprintf( logstream, "\t metadata-only: %d\n", query_param.metadata_only);
-  fprintf( logstream, "\t image return type: %d, [JPP-stream=0, JPT-stream=1, UNKNOWN=-1]\n", query_param.return_type);
-  fprintf( logstream, "\t len:  %d\n", query_param.len);
+
+    fprintf(logstream, "\t req-box-prop\n");
+    for (i = 0; i < MAX_NUMOFBOX && query_param.box_type[i][0] != 0; i++) {
+        fprintf(logstream,
+                "\t\t box_type: %.4s limit: %d w:%d s:%d g:%d a:%d priority:%d\n",
+                query_param.box_type[i], query_param.limit[i], query_param.w[i],
+                query_param.s[i], query_param.g[i], query_param.a[i], query_param.priority[i]);
+    }
+
+    fprintf(logstream, "\t root-bin:  %d\n", query_param.root_bin);
+    fprintf(logstream, "\t max-depth: %d\n", query_param.max_depth);
+    fprintf(logstream, "\t metadata-only: %d\n", query_param.metadata_only);
+    fprintf(logstream,
+            "\t image return type: %d, [JPP-stream=0, JPT-stream=1, UNKNOWN=-1]\n",
+            query_param.return_type);
+    fprintf(logstream, "\t len:  %d\n", query_param.len);
 }
 
-void parse_cclose( char *src, query_param_t *query_param)
+void parse_cclose(char *src, query_param_t *query_param)
 {
-  size_t i;
-  size_t len;
-  
-  len = strlen( src);
-  query_param->cclose = strdup( src);
-  
-  for( i=0; i<len; i++)
-    if( query_param->cclose[i] == ','){
-      query_param->cclose[i] = '\0';
-      query_param->numOfcclose ++;
-    }
-  
-  query_param->numOfcclose ++;
+    size_t i;
+    size_t len;
+
+    len = strlen(src);
+    query_param->cclose = strdup(src);
+
+    for (i = 0; i < len; i++)
+        if (query_param->cclose[i] == ',') {
+            query_param->cclose[i] = '\0';
+            query_param->numOfcclose ++;
+        }
+
+    query_param->numOfcclose ++;
 }
 
-void parse_req_box_prop( char *req_box_prop, int idx, query_param_t *query_param);
+void parse_req_box_prop(char *req_box_prop, int idx,
+                        query_param_t *query_param);
 
-void parse_metareq( char *field, query_param_t *query_param)
+void parse_metareq(char *field, query_param_t *query_param)
 {
-  char req_box_prop[20];
-  char *ptr, *src;
-  int numofboxreq = 0;
-  
-  memset( req_box_prop, 0, 20);
-
-  /* req-box-prop*/
-  ptr = strchr( field, '[');
-  ptr++;
-  src = ptr;
-  while( *ptr != ']'){
-    if( *ptr == ';'){
-      assert( ptr-src >= 0);
-      strncpy( req_box_prop, src, (size_t)(ptr-src));
-      parse_req_box_prop( req_box_prop, numofboxreq++, query_param);
-      ptr++;
-      src = ptr;
-      memset( req_box_prop, 0, 20);
-    }
+    char req_box_prop[20];
+    char *ptr, *src;
+    int numofboxreq = 0;
+
+    memset(req_box_prop, 0, 20);
+
+    /* req-box-prop*/
+    ptr = strchr(field, '[');
     ptr++;
-  }
-  assert(ptr-src>=0);
-  strncpy( req_box_prop, src, (size_t)(ptr-src));
+    src = ptr;
+    while (*ptr != ']') {
+        if (*ptr == ';') {
+            assert(ptr - src >= 0);
+            strncpy(req_box_prop, src, (size_t)(ptr - src));
+            parse_req_box_prop(req_box_prop, numofboxreq++, query_param);
+            ptr++;
+            src = ptr;
+            memset(req_box_prop, 0, 20);
+        }
+        ptr++;
+    }
+    assert(ptr - src >= 0);
+    strncpy(req_box_prop, src, (size_t)(ptr - src));
+
+    parse_req_box_prop(req_box_prop, numofboxreq++, query_param);
 
-  parse_req_box_prop( req_box_prop, numofboxreq++, query_param);
+    if ((ptr = strchr(field, 'R'))) {
+        sscanf(ptr + 1, "%d", &(query_param->root_bin));
+    }
 
-  if(( ptr = strchr( field, 'R')))
-    sscanf( ptr+1, "%d", &(query_param->root_bin));
-  
-  if(( ptr = strchr( field, 'D')))
-    sscanf( ptr+1, "%d", &(query_param->max_depth));
+    if ((ptr = strchr(field, 'D'))) {
+        sscanf(ptr + 1, "%d", &(query_param->max_depth));
+    }
 
-  if(( ptr = strstr( field, "!!")))
-    query_param->metadata_only = OPJ_TRUE;
+    if ((ptr = strstr(field, "!!"))) {
+        query_param->metadata_only = OPJ_TRUE;
+    }
 }
 
-void parse_req_box_prop( char *req_box_prop, int idx, query_param_t *query_param)
+void parse_req_box_prop(char *req_box_prop, int idx, query_param_t *query_param)
 {
-  char *ptr;
-  
-  if( *req_box_prop == '*')
-    query_param->box_type[idx][0]='*';
-  else
-    strncpy( query_param->box_type[idx], req_box_prop, 4);
-  
-  if(( ptr = strchr( req_box_prop, ':'))){
-    if( *(ptr+1)=='r')
-      query_param->limit[idx] = -1;
-    else
-      sscanf( ptr+1, "%d", &(query_param->limit[idx]));
-  }
-
-  if(( ptr = strchr( req_box_prop, '/'))){
-    ptr++;
-    while( *ptr=='w' || *ptr=='s' || *ptr=='g' || *ptr=='a'){
-      switch( *ptr){
-      case 'w': query_param->w[idx] = OPJ_TRUE; break;
-      case 's': query_param->s[idx] = OPJ_TRUE; break;
-      case 'g': query_param->g[idx] = OPJ_TRUE; break;
-      case 'a': query_param->a[idx] = OPJ_TRUE; break;
-      }
-      ptr++;
+    char *ptr;
+
+    if (*req_box_prop == '*') {
+        query_param->box_type[idx][0] = '*';
+    } else {
+        strncpy(query_param->box_type[idx], req_box_prop, 4);
     }
-  }
-  else{
-    query_param->g[idx] = OPJ_TRUE;
-    query_param->s[idx] = OPJ_TRUE;
-    query_param->w[idx] = OPJ_TRUE;
-  }
-
-  if((ptr = strchr( req_box_prop, '!')))
-    query_param->priority[idx] = OPJ_TRUE;
-  
-  idx++;   
+
+    if ((ptr = strchr(req_box_prop, ':'))) {
+        if (*(ptr + 1) == 'r') {
+            query_param->limit[idx] = -1;
+        } else {
+            sscanf(ptr + 1, "%d", &(query_param->limit[idx]));
+        }
+    }
+
+    if ((ptr = strchr(req_box_prop, '/'))) {
+        ptr++;
+        while (*ptr == 'w' || *ptr == 's' || *ptr == 'g' || *ptr == 'a') {
+            switch (*ptr) {
+            case 'w':
+                query_param->w[idx] = OPJ_TRUE;
+                break;
+            case 's':
+                query_param->s[idx] = OPJ_TRUE;
+                break;
+            case 'g':
+                query_param->g[idx] = OPJ_TRUE;
+                break;
+            case 'a':
+                query_param->a[idx] = OPJ_TRUE;
+                break;
+            }
+            ptr++;
+        }
+    } else {
+        query_param->g[idx] = OPJ_TRUE;
+        query_param->s[idx] = OPJ_TRUE;
+        query_param->w[idx] = OPJ_TRUE;
+    }
+
+    if ((ptr = strchr(req_box_prop, '!'))) {
+        query_param->priority[idx] = OPJ_TRUE;
+    }
+
+    idx++;
 }
 
-void parse_comps( char *field, query_param_t *query_param)
+void parse_comps(char *field, query_param_t *query_param)
 {
-  int i,start,stop,aux = -1;
-  char *ptr1,*ptr2;
-
-  ptr1 = strchr( field, '-');
-  ptr2 = strchr( field, ',');
-
-  if( ptr1 && ptr2)
-    if( ptr1 > ptr2)
-      sscanf( field, "%d,%d-%d",&aux, &start, &stop);
-    else
-      sscanf( field, "%d-%d,%d", &start, &stop, &aux);
-  else
-    if(ptr1)
-      sscanf( field, "%d-%d", &start, &stop);
-    else if(ptr2){
-      sscanf( field, "%d,%d", &start, &stop);
-      aux = start;
-      start = stop;
+    int i, start, stop, aux = -1;
+    char *ptr1, *ptr2;
+
+    ptr1 = strchr(field, '-');
+    ptr2 = strchr(field, ',');
+
+    if (ptr1 && ptr2)
+        if (ptr1 > ptr2) {
+            sscanf(field, "%d,%d-%d", &aux, &start, &stop);
+        } else {
+            sscanf(field, "%d-%d,%d", &start, &stop, &aux);
+        } else if (ptr1) {
+        sscanf(field, "%d-%d", &start, &stop);
+    } else if (ptr2) {
+        sscanf(field, "%d,%d", &start, &stop);
+        aux = start;
+        start = stop;
+    } else {
+        sscanf(field, "%d", &stop);
+        start = stop;
     }
-    else{
-      sscanf( field, "%d", &stop);
-      start = stop;
+
+    query_param->lastcomp = stop > aux ? stop : aux;
+    query_param->comps = (OPJ_BOOL *)opj_calloc(1,
+                         (OPJ_SIZE_T)(query_param->lastcomp + 1) * sizeof(OPJ_BOOL));
+
+    for (i = start; i <= stop; i++) {
+        query_param->comps[i] = OPJ_TRUE;
+    }
+
+    if (aux != -1) {
+        query_param->comps[aux] = OPJ_TRUE;
     }
-  
-  query_param->lastcomp = stop > aux ? stop : aux;
-  query_param->comps = (OPJ_BOOL *)opj_calloc( 1, (OPJ_SIZE_T)(query_param->lastcomp+1)*sizeof(OPJ_BOOL));
-
-  for( i=start; i<=stop; i++)
-    query_param->comps[i]=OPJ_TRUE;
-  
-  if(aux!=-1)
-    query_param->comps[aux] = OPJ_TRUE;
 }
 
-void delete_query( query_param_t **query)
+void delete_query(query_param_t **query)
 {
-  if( (*query)->target)
-    opj_free( (*query)->target);
-  
-  if( (*query)->tid)
-    opj_free( (*query)->tid);
-  
-  if( (*query)->comps)
-    opj_free((*query)->comps);
-  
-  if( (*query)->cid)
-    opj_free( (*query)->cid);
-
-  if( (*query)->cclose)
-    opj_free( (*query)->cclose);
-  
-  opj_free( *query);
+    if ((*query)->target) {
+        opj_free((*query)->target);
+    }
+
+    if ((*query)->tid) {
+        opj_free((*query)->tid);
+    }
+
+    if ((*query)->comps) {
+        opj_free((*query)->comps);
+    }
+
+    if ((*query)->cid) {
+        opj_free((*query)->cid);
+    }
+
+    if ((*query)->cclose) {
+        opj_free((*query)->cclose);
+    }
+
+    opj_free(*query);
 }
index e48873e886c10ca7b731e25f61e0f58f86b66302..4e43d6812763dd65205cfe24014d4453181f0ae8 100644 (file)
 
 sessionlist_param_t * gene_sessionlist(void)
 {
-  sessionlist_param_t *sessionlist;
+    sessionlist_param_t *sessionlist;
 
-  sessionlist = (sessionlist_param_t *)opj_malloc( sizeof(sessionlist_param_t));
-  
-  sessionlist->first = NULL;
-  sessionlist->last  = NULL;
+    sessionlist = (sessionlist_param_t *)opj_malloc(sizeof(sessionlist_param_t));
 
-  return sessionlist;
+    sessionlist->first = NULL;
+    sessionlist->last  = NULL;
+
+    return sessionlist;
 }
 
-session_param_t * gene_session( sessionlist_param_t *sessionlist)
+session_param_t * gene_session(sessionlist_param_t *sessionlist)
 {
-  session_param_t *session;
-  
-  session = (session_param_t *)opj_malloc( sizeof(session_param_t));
-
-  session->channellist = gene_channellist();
-  session->cachemodellist = gene_cachemodellist();
-
-  session->next = NULL;
-  
-  if( sessionlist->first) /* there are one or more entries */
-    sessionlist->last->next = session;
-  else                   /* first entry */
-    sessionlist->first = session;
-  sessionlist->last = session;
-  
-  return session;
+    session_param_t *session;
+
+    session = (session_param_t *)opj_malloc(sizeof(session_param_t));
+
+    session->channellist = gene_channellist();
+    session->cachemodellist = gene_cachemodellist();
+
+    session->next = NULL;
+
+    if (sessionlist->first) { /* there are one or more entries */
+        sessionlist->last->next = session;
+    } else {               /* first entry */
+        sessionlist->first = session;
+    }
+    sessionlist->last = session;
+
+    return session;
 }
 
-OPJ_BOOL search_session_and_channel( char cid[], 
-                                sessionlist_param_t *sessionlist, 
-                                session_param_t **foundsession, 
-                                channel_param_t **foundchannel)
+OPJ_BOOL search_session_and_channel(char cid[],
+                                    sessionlist_param_t *sessionlist,
+                                    session_param_t **foundsession,
+                                    channel_param_t **foundchannel)
 {
-  *foundsession = sessionlist->first;
-  
-  while( *foundsession != NULL){
-
-    *foundchannel = (*foundsession)->channellist->first;
-    
-    while( *foundchannel != NULL){
-      
-      if( strcmp( cid, (*foundchannel)->cid) == 0)
-       return OPJ_TRUE;
-      
-      *foundchannel = (*foundchannel)->next;
+    *foundsession = sessionlist->first;
+
+    while (*foundsession != NULL) {
+
+        *foundchannel = (*foundsession)->channellist->first;
+
+        while (*foundchannel != NULL) {
+
+            if (strcmp(cid, (*foundchannel)->cid) == 0) {
+                return OPJ_TRUE;
+            }
+
+            *foundchannel = (*foundchannel)->next;
+        }
+        *foundsession = (*foundsession)->next;
     }
-    *foundsession = (*foundsession)->next;
-  }
-  
-  fprintf( FCGI_stdout, "Status: 503\r\n");
-  fprintf( FCGI_stdout, "Reason: Channel %s not found\r\n", cid); 
 
-  return OPJ_FALSE;
+    fprintf(FCGI_stdout, "Status: 503\r\n");
+    fprintf(FCGI_stdout, "Reason: Channel %s not found\r\n", cid);
+
+    return OPJ_FALSE;
 }
 
-void insert_cachemodel_into_session( session_param_t *session, cachemodel_param_t *cachemodel)
+void insert_cachemodel_into_session(session_param_t *session,
+                                    cachemodel_param_t *cachemodel)
 {
-  if(!cachemodel)
-    return;
+    if (!cachemodel) {
+        return;
+    }
 
 #ifndef SERVER
-  fprintf( logstream, "local log: insert cachemodel into session\n");
+    fprintf(logstream, "local log: insert cachemodel into session\n");
 #endif
-  if( session->cachemodellist->first != NULL)
-    session->cachemodellist->last->next = cachemodel;
-  else
-    session->cachemodellist->first = cachemodel;
-  session->cachemodellist->last = cachemodel;
+    if (session->cachemodellist->first != NULL) {
+        session->cachemodellist->last->next = cachemodel;
+    } else {
+        session->cachemodellist->first = cachemodel;
+    }
+    session->cachemodellist->last = cachemodel;
 }
 
-OPJ_BOOL delete_session( session_param_t **session, sessionlist_param_t *sessionlist)
+OPJ_BOOL delete_session(session_param_t **session,
+                        sessionlist_param_t *sessionlist)
 {
-  session_param_t *ptr;
+    session_param_t *ptr;
 
-  if( *session == NULL)
-    return OPJ_FALSE;
+    if (*session == NULL) {
+        return OPJ_FALSE;
+    }
 
 
-  if( *session == sessionlist->first)
-    sessionlist->first = (*session)->next;
-  else{
-    ptr = sessionlist->first;
-    while( ptr->next != *session)
-      ptr = ptr->next;
-    ptr->next = (*session)->next;
+    if (*session == sessionlist->first) {
+        sessionlist->first = (*session)->next;
+    } else {
+        ptr = sessionlist->first;
+        while (ptr->next != *session) {
+            ptr = ptr->next;
+        }
+        ptr->next = (*session)->next;
 
-    if( *session == sessionlist->last)
-      sessionlist->last = ptr;
-  }
-  
-  delete_channellist( &((*session)->channellist));
-  delete_cachemodellist( &((*session)->cachemodellist));
+        if (*session == sessionlist->last) {
+            sessionlist->last = ptr;
+        }
+    }
+
+    delete_channellist(&((*session)->channellist));
+    delete_cachemodellist(&((*session)->cachemodellist));
 
 #ifndef SERVER
-  fprintf( logstream, "local log: session: %p deleted!\n", (void *)(*session));
+    fprintf(logstream, "local log: session: %p deleted!\n", (void *)(*session));
 #endif
-  opj_free( *session);
+    opj_free(*session);
 
-  return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-void delete_sessionlist( sessionlist_param_t **sessionlist)
-{  
-  session_param_t *sessionPtr, *sessionNext;
+void delete_sessionlist(sessionlist_param_t **sessionlist)
+{
+    session_param_t *sessionPtr, *sessionNext;
 
-  sessionPtr = (*sessionlist)->first;
-  while( sessionPtr != NULL){
-    sessionNext=sessionPtr->next;
+    sessionPtr = (*sessionlist)->first;
+    while (sessionPtr != NULL) {
+        sessionNext = sessionPtr->next;
 
-    delete_channellist( &(sessionPtr->channellist));
-    delete_cachemodellist( &(sessionPtr->cachemodellist));
+        delete_channellist(&(sessionPtr->channellist));
+        delete_cachemodellist(&(sessionPtr->cachemodellist));
 
 #ifndef SERVER
-    fprintf( logstream, "local log: session: %p deleted!\n", (void *)sessionPtr);
+        fprintf(logstream, "local log: session: %p deleted!\n", (void *)sessionPtr);
 #endif
-    opj_free( sessionPtr);
+        opj_free(sessionPtr);
 
-    sessionPtr=sessionNext;
-  }
+        sessionPtr = sessionNext;
+    }
 
-  (*sessionlist)->first = NULL;
-  (*sessionlist)->last  = NULL;
+    (*sessionlist)->first = NULL;
+    (*sessionlist)->last  = NULL;
 
-  opj_free(*sessionlist);
+    opj_free(*sessionlist);
 }
 
-void print_allsession( sessionlist_param_t *sessionlist)
+void print_allsession(sessionlist_param_t *sessionlist)
 {
-  session_param_t *ptr;
-  cachemodel_param_t *cachemodel;
-  int i=0;
-
-  fprintf( logstream, "SESSIONS info:\n");
-
-  ptr = sessionlist->first;
-  while( ptr != NULL){
-    fprintf( logstream, "session No.%d\n", i++);
-    print_allchannel( ptr->channellist);
-    cachemodel = ptr->cachemodellist->first;
-    while( cachemodel){
-      print_target( cachemodel->target);
-      cachemodel = cachemodel->next;
+    session_param_t *ptr;
+    cachemodel_param_t *cachemodel;
+    int i = 0;
+
+    fprintf(logstream, "SESSIONS info:\n");
+
+    ptr = sessionlist->first;
+    while (ptr != NULL) {
+        fprintf(logstream, "session No.%d\n", i++);
+        print_allchannel(ptr->channellist);
+        cachemodel = ptr->cachemodellist->first;
+        while (cachemodel) {
+            print_target(cachemodel->target);
+            cachemodel = cachemodel->next;
+        }
+        ptr = ptr->next;
     }
-    ptr=ptr->next;
-  }
 }
index 5634556d403c5a1443cf8d3673f63c90a8912032..ec2455e8f6d943b6c297a4abdd9d961174211684 100644 (file)
@@ -52,131 +52,134 @@ typedef SSIZE_T ssize_t;
 #define logstream stderr
 #endif /*SERVER*/
 
-SOCKET open_listeningsocket( uint16_t port)
+SOCKET open_listeningsocket(uint16_t port)
 {
-  SOCKET listening_socket;
-  struct sockaddr_in sin;
-  int sock_optval = 1;
-  
-  listening_socket = socket(AF_INET, SOCK_STREAM, 0);
-  if ( listening_socket == -1 ){
-    perror("socket");
-    exit(1);
-  }
-  
-  if ( setsockopt(listening_socket, SOL_SOCKET, SO_REUSEADDR, (const char *)&sock_optval, sizeof(sock_optval)) == -1 ){
-    perror("setsockopt");
-    exit(1);
-  }
-
-  memset(&sin, 0, sizeof(sin));
-  sin.sin_family = AF_INET;
-  sin.sin_port = htons(port);
-  sin.sin_addr.s_addr = htonl(INADDR_ANY);
-
-  if ( bind(listening_socket, (struct sockaddr *)&sin, sizeof(sin)) < 0 ){
-    perror("bind");
-    close_socket(listening_socket);
-    exit(1);
-  }
-
-  if( listen(listening_socket, SOMAXCONN) == -1){
-    perror("listen");
-    close_socket(listening_socket);
-    exit(1);
-  }
-  fprintf( FCGI_stderr, "port %d is listened\n", port);
-
-  return listening_socket;
+    SOCKET listening_socket;
+    struct sockaddr_in sin;
+    int sock_optval = 1;
+
+    listening_socket = socket(AF_INET, SOCK_STREAM, 0);
+    if (listening_socket == -1) {
+        perror("socket");
+        exit(1);
+    }
+
+    if (setsockopt(listening_socket, SOL_SOCKET, SO_REUSEADDR,
+                   (const char *)&sock_optval, sizeof(sock_optval)) == -1) {
+        perror("setsockopt");
+        exit(1);
+    }
+
+    memset(&sin, 0, sizeof(sin));
+    sin.sin_family = AF_INET;
+    sin.sin_port = htons(port);
+    sin.sin_addr.s_addr = htonl(INADDR_ANY);
+
+    if (bind(listening_socket, (struct sockaddr *)&sin, sizeof(sin)) < 0) {
+        perror("bind");
+        close_socket(listening_socket);
+        exit(1);
+    }
+
+    if (listen(listening_socket, SOMAXCONN) == -1) {
+        perror("listen");
+        close_socket(listening_socket);
+        exit(1);
+    }
+    fprintf(FCGI_stderr, "port %d is listened\n", port);
+
+    return listening_socket;
 }
 
-SOCKET accept_socket( SOCKET listening_socket)
+SOCKET accept_socket(SOCKET listening_socket)
 {
-  struct sockaddr_in peer_sin;
-  unsigned int addrlen = sizeof(peer_sin);
+    struct sockaddr_in peer_sin;
+    unsigned int addrlen = sizeof(peer_sin);
 
-  return accept( listening_socket, (struct sockaddr *)&peer_sin, &addrlen);
+    return accept(listening_socket, (struct sockaddr *)&peer_sin, &addrlen);
 }
 
-void send_stream( SOCKET connected_socket, const void *stream, OPJ_SIZE_T length)
+void send_stream(SOCKET connected_socket, const void *stream, OPJ_SIZE_T length)
 {
-  char *ptr = (char*)stream;
-  OPJ_SIZE_T remlen = length;
-
-  while( remlen > 0){
-    ssize_t sentlen = send( connected_socket, ptr, remlen, 0);
-    if( sentlen == -1){
-      fprintf( FCGI_stderr, "sending stream error\n");
-      break;
+    char *ptr = (char*)stream;
+    OPJ_SIZE_T remlen = length;
+
+    while (remlen > 0) {
+        ssize_t sentlen = send(connected_socket, ptr, remlen, 0);
+        if (sentlen == -1) {
+            fprintf(FCGI_stderr, "sending stream error\n");
+            break;
+        }
+        remlen = remlen - (OPJ_SIZE_T)sentlen;
+        ptr = ptr + sentlen;
     }
-    remlen = remlen - (OPJ_SIZE_T)sentlen;
-    ptr = ptr + sentlen;
-  }
 }
 
-void * receive_stream( SOCKET connected_socket, OPJ_SIZE_T length)
+void * receive_stream(SOCKET connected_socket, OPJ_SIZE_T length)
 {
-  char *stream, *ptr;
-  OPJ_SIZE_T remlen;
-
-  ptr = stream = malloc( length);
-  remlen = length;
-
-  while( remlen > 0){
-    ssize_t redlen = recv( connected_socket, ptr, remlen, 0);
-    if( redlen == -1){
-      fprintf( FCGI_stderr, "receive stream error\n");
-      free( stream);
-      stream = NULL;
-      break;
+    char *stream, *ptr;
+    OPJ_SIZE_T remlen;
+
+    ptr = stream = malloc(length);
+    remlen = length;
+
+    while (remlen > 0) {
+        ssize_t redlen = recv(connected_socket, ptr, remlen, 0);
+        if (redlen == -1) {
+            fprintf(FCGI_stderr, "receive stream error\n");
+            free(stream);
+            stream = NULL;
+            break;
+        }
+        remlen -= (OPJ_SIZE_T)redlen;
+        ptr = ptr + redlen;
     }
-    remlen -= (OPJ_SIZE_T)redlen;
-    ptr = ptr + redlen;
-  }
-  return stream;
+    return stream;
 }
 
 OPJ_SIZE_T receive_line(SOCKET connected_socket, char *p)
 {
-  OPJ_SIZE_T len = 0;
-  while (1){
-    ssize_t ret;
-    ret = recv( connected_socket, p, 1, 0);
-    if ( ret == -1 ){
-      perror("receive");
-      exit(1);
-    } else if ( ret == 0 ){
-      break;
+    OPJ_SIZE_T len = 0;
+    while (1) {
+        ssize_t ret;
+        ret = recv(connected_socket, p, 1, 0);
+        if (ret == -1) {
+            perror("receive");
+            exit(1);
+        } else if (ret == 0) {
+            break;
+        }
+        if (*p == '\n') {
+            break;
+        }
+        p++;
+        len++;
     }
-    if ( *p == '\n' )
-      break;
-    p++;
-    len++;
-  }
-  *p = '\0';
+    *p = '\0';
 
-  if( len == 0)
-    fprintf( FCGI_stderr, "Header receive error\n");
+    if (len == 0) {
+        fprintf(FCGI_stderr, "Header receive error\n");
+    }
 
-  return len;
+    return len;
 }
 
-char * receive_string( SOCKET connected_socket)
+char * receive_string(SOCKET connected_socket)
 {
-  char buf[BUF_LEN];
-  
-  /* MM FIXME: there is a nasty bug here, size of buf if BUF_LEN which is never
-  indicated to downstream receive_line */
-  receive_line( connected_socket, buf);
-    
-  return strdup(buf);
+    char buf[BUF_LEN];
+
+    /* MM FIXME: there is a nasty bug here, size of buf if BUF_LEN which is never
+    indicated to downstream receive_line */
+    receive_line(connected_socket, buf);
+
+    return strdup(buf);
 }
 
-int close_socket( SOCKET sock)
+int close_socket(SOCKET sock)
 {
 #ifdef _WIN32
-  return closesocket( sock);
+    return closesocket(sock);
 #else
-  return close( sock);
+    return close(sock);
 #endif
 }
index fe9a62356cc0cee90c408143a83065178a7ef455..244d05fab9e253dfd1774b4e12d1998e075ec0f3 100644 (file)
 
 targetlist_param_t * gene_targetlist(void)
 {
-  targetlist_param_t *targetlist;
+    targetlist_param_t *targetlist;
 
-  targetlist = (targetlist_param_t *)opj_malloc( sizeof(targetlist_param_t));
-  
-  targetlist->first = NULL;
-  targetlist->last  = NULL;
+    targetlist = (targetlist_param_t *)opj_malloc(sizeof(targetlist_param_t));
 
-  return targetlist;
+    targetlist->first = NULL;
+    targetlist->last  = NULL;
+
+    return targetlist;
 }
 
 
@@ -74,272 +74,285 @@ targetlist_param_t * gene_targetlist(void)
  * @param[out] tmpfname new file name if filepath is a URL
  * @return              file descriptor
  */
-int open_jp2file( const char filepath[], char tmpfname[]);
+int open_jp2file(const char filepath[], char tmpfname[]);
 
-target_param_t * gene_target( targetlist_param_t *targetlist, char *targetpath)
+target_param_t * gene_target(targetlist_param_t *targetlist, char *targetpath)
 {
-  target_param_t *target;
-  int fd;
-  index_param_t *jp2idx;
-  char tmpfname[MAX_LENOFTID];
-  static int last_csn = 0;
-  
-  if( targetpath[0]=='\0'){
-    fprintf( FCGI_stderr, "Error: exception, no targetpath in gene_target()\n");
-    return NULL;
-  }
+    target_param_t *target;
+    int fd;
+    index_param_t *jp2idx;
+    char tmpfname[MAX_LENOFTID];
+    static int last_csn = 0;
+
+    if (targetpath[0] == '\0') {
+        fprintf(FCGI_stderr, "Error: exception, no targetpath in gene_target()\n");
+        return NULL;
+    }
 
-  if((fd = open_jp2file( targetpath, tmpfname)) == -1){
-    fprintf( FCGI_stdout, "Status: 404\r\n"); 
-    return NULL;
-  }
-  
-  if( !(jp2idx = parse_jp2file( fd))){
-    fprintf( FCGI_stdout, "Status: 501\r\n");
-    return NULL;
-  }
+    if ((fd = open_jp2file(targetpath, tmpfname)) == -1) {
+        fprintf(FCGI_stdout, "Status: 404\r\n");
+        return NULL;
+    }
 
-  target = (target_param_t *)opj_malloc( sizeof(target_param_t));
-  snprintf( target->tid, MAX_LENOFTID, "%x-%x", (unsigned int)time(NULL), (unsigned int)rand());
-  target->targetname = strdup( targetpath); 
-  target->fd = fd;
+    if (!(jp2idx = parse_jp2file(fd))) {
+        fprintf(FCGI_stdout, "Status: 501\r\n");
+        return NULL;
+    }
+
+    target = (target_param_t *)opj_malloc(sizeof(target_param_t));
+    snprintf(target->tid, MAX_LENOFTID, "%x-%x", (unsigned int)time(NULL),
+             (unsigned int)rand());
+    target->targetname = strdup(targetpath);
+    target->fd = fd;
 #ifdef SERVER
-  if( tmpfname[0])
-    target->tmpfname = strdup( tmpfname);
-  else
-    target->tmpfname = NULL;
+    if (tmpfname[0]) {
+        target->tmpfname = strdup(tmpfname);
+    } else {
+        target->tmpfname = NULL;
+    }
 #endif
-  target->csn = last_csn++;
-  target->codeidx = jp2idx;
-  target->num_of_use = 0; 
-  target->jppstream = OPJ_TRUE;
-  target->jptstream = isJPTfeasible( *jp2idx);
-  target->next=NULL;
-
-  if( targetlist->first) /* there are one or more entries*/
-    targetlist->last->next = target;
-  else                   /* first entry*/
-    targetlist->first = target;
-  targetlist->last = target;
+    target->csn = last_csn++;
+    target->codeidx = jp2idx;
+    target->num_of_use = 0;
+    target->jppstream = OPJ_TRUE;
+    target->jptstream = isJPTfeasible(*jp2idx);
+    target->next = NULL;
+
+    if (targetlist->first) { /* there are one or more entries*/
+        targetlist->last->next = target;
+    } else {               /* first entry*/
+        targetlist->first = target;
+    }
+    targetlist->last = target;
 
 #ifndef SERVER
-  fprintf( logstream, "local log: target %s generated\n", targetpath);
+    fprintf(logstream, "local log: target %s generated\n", targetpath);
 #endif
-  
-  return target;
+
+    return target;
 }
 
-void refer_target( target_param_t *reftarget, target_param_t **ptr)
+void refer_target(target_param_t *reftarget, target_param_t **ptr)
 {
-  *ptr = reftarget;
-  reftarget->num_of_use++;
+    *ptr = reftarget;
+    reftarget->num_of_use++;
 }
 
-void unrefer_target( target_param_t *target)
+void unrefer_target(target_param_t *target)
 {
-  target->num_of_use--;
+    target->num_of_use--;
 }
 
-void delete_target( target_param_t **target)
+void delete_target(target_param_t **target)
 {
-  close( (*target)->fd);
+    close((*target)->fd);
 
 #ifdef SERVER
-  if( (*target)->tmpfname){
-    fprintf( FCGI_stderr, "Temporal file %s is deleted\n", (*target)->tmpfname);
-    remove( (*target)->tmpfname);
-  }
+    if ((*target)->tmpfname) {
+        fprintf(FCGI_stderr, "Temporal file %s is deleted\n", (*target)->tmpfname);
+        remove((*target)->tmpfname);
+    }
 #endif
 
-  if( (*target)->codeidx)
-    delete_index ( &(*target)->codeidx);
-  
+    if ((*target)->codeidx) {
+        delete_index(&(*target)->codeidx);
+    }
+
 #ifndef SERVER
-  fprintf( logstream, "local log: target: %s deleted\n", (*target)->targetname);
+    fprintf(logstream, "local log: target: %s deleted\n", (*target)->targetname);
 #endif
 
-  opj_free( (*target)->targetname);
+    opj_free((*target)->targetname);
 
-  opj_free(*target);
+    opj_free(*target);
 }
 
-void delete_target_in_list( target_param_t **target, targetlist_param_t *targetlist)
+void delete_target_in_list(target_param_t **target,
+                           targetlist_param_t *targetlist)
 {
-  target_param_t *ptr;
+    target_param_t *ptr;
 
-  if( *target == targetlist->first)
-    targetlist->first = (*target)->next;
-  else{
-    ptr = targetlist->first;
-    while( ptr->next != *target){
-      ptr=ptr->next;
+    if (*target == targetlist->first) {
+        targetlist->first = (*target)->next;
+    } else {
+        ptr = targetlist->first;
+        while (ptr->next != *target) {
+            ptr = ptr->next;
+        }
+
+        ptr->next = (*target)->next;
+
+        if (*target == targetlist->last) {
+            targetlist->last = ptr;
+        }
     }
-    
-    ptr->next = (*target)->next;
-    
-    if( *target == targetlist->last)
-      targetlist->last = ptr;
-  }
-  delete_target( target);
+    delete_target(target);
 }
 
 void delete_targetlist(targetlist_param_t **targetlist)
 {
-  target_param_t *targetPtr, *targetNext;
-  
-  targetPtr = (*targetlist)->first;
-  while( targetPtr != NULL){
-    targetNext=targetPtr->next;
-    delete_target( &targetPtr);
-    targetPtr=targetNext;
-  }
-  opj_free( *targetlist);
+    target_param_t *targetPtr, *targetNext;
+
+    targetPtr = (*targetlist)->first;
+    while (targetPtr != NULL) {
+        targetNext = targetPtr->next;
+        delete_target(&targetPtr);
+        targetPtr = targetNext;
+    }
+    opj_free(*targetlist);
 }
 
-void print_target( target_param_t *target)
+void print_target(target_param_t *target)
 {
-  fprintf( logstream, "target:\n");
-  fprintf( logstream, "\t tid=%s\n", target->tid);
-  fprintf( logstream, "\t csn=%d\n", target->csn);
-  fprintf( logstream, "\t target=%s\n\n", target->targetname);
+    fprintf(logstream, "target:\n");
+    fprintf(logstream, "\t tid=%s\n", target->tid);
+    fprintf(logstream, "\t csn=%d\n", target->csn);
+    fprintf(logstream, "\t target=%s\n\n", target->targetname);
 }
 
-void print_alltarget( targetlist_param_t *targetlist)
+void print_alltarget(targetlist_param_t *targetlist)
 {
-  target_param_t *ptr;
+    target_param_t *ptr;
 
-  ptr = targetlist->first;
-  while( ptr != NULL){
-    print_target( ptr);
-    ptr=ptr->next;
-  }
+    ptr = targetlist->first;
+    while (ptr != NULL) {
+        print_target(ptr);
+        ptr = ptr->next;
+    }
 }
 
-target_param_t * search_target( const char targetname[], targetlist_param_t *targetlist)
+target_param_t * search_target(const char targetname[],
+                               targetlist_param_t *targetlist)
 {
-  target_param_t *foundtarget;
-
-  foundtarget = targetlist->first;
-  
-  while( foundtarget != NULL){
-    
-    if( strcmp( targetname, foundtarget->targetname) == 0)
-      return foundtarget;
-      
-    foundtarget = foundtarget->next;
-  }
-  return NULL;
+    target_param_t *foundtarget;
+
+    foundtarget = targetlist->first;
+
+    while (foundtarget != NULL) {
+
+        if (strcmp(targetname, foundtarget->targetname) == 0) {
+            return foundtarget;
+        }
+
+        foundtarget = foundtarget->next;
+    }
+    return NULL;
 }
 
-target_param_t * search_targetBytid( const char tid[], targetlist_param_t *targetlist)
+target_param_t * search_targetBytid(const char tid[],
+                                    targetlist_param_t *targetlist)
 {
-  target_param_t *foundtarget;
-  
-  foundtarget = targetlist->first;
-  
-  while( foundtarget != NULL){
-    
-    if( strcmp( tid, foundtarget->tid) == 0)
-      return foundtarget;
-      
-    foundtarget = foundtarget->next;
-  }
-
-  return NULL;
+    target_param_t *foundtarget;
+
+    foundtarget = targetlist->first;
+
+    while (foundtarget != NULL) {
+
+        if (strcmp(tid, foundtarget->tid) == 0) {
+            return foundtarget;
+        }
+
+        foundtarget = foundtarget->next;
+    }
+
+    return NULL;
 }
 
-int open_remotefile( const char filepath[], char tmpfname[]);
+int open_remotefile(const char filepath[], char tmpfname[]);
 
-int open_jp2file( const char filepath[], char tmpfname[])
+int open_jp2file(const char filepath[], char tmpfname[])
 {
-  int fd;
-  char *data;
-  
-  /* download remote target file to local storage*/
-  if( strncmp( filepath, "http://", 7) == 0){
-    if( (fd = open_remotefile( filepath, tmpfname)) == -1)
-      return -1;
-  }
-  else{
-    tmpfname[0] = 0;
-    if( (fd = open( filepath, O_RDONLY)) == -1){
-      fprintf( FCGI_stdout, "Reason: Target %s not found\r\n", filepath);
-      return -1;
+    int fd;
+    char *data;
+
+    /* download remote target file to local storage*/
+    if (strncmp(filepath, "http://", 7) == 0) {
+        if ((fd = open_remotefile(filepath, tmpfname)) == -1) {
+            return -1;
+        }
+    } else {
+        tmpfname[0] = 0;
+        if ((fd = open(filepath, O_RDONLY)) == -1) {
+            fprintf(FCGI_stdout, "Reason: Target %s not found\r\n", filepath);
+            return -1;
+        }
+    }
+    /* Check resource is a JP family file.*/
+    if (lseek(fd, 0, SEEK_SET) == -1) {
+        close(fd);
+        fprintf(FCGI_stdout, "Reason: Target %s broken (lseek error)\r\n", filepath);
+        return -1;
     }
-  }
-  /* Check resource is a JP family file.*/
-  if( lseek( fd, 0, SEEK_SET)==-1){
-    close(fd);
-    fprintf( FCGI_stdout, "Reason: Target %s broken (lseek error)\r\n", filepath);
-    return -1;
-  }
-  
-  data = (char *)opj_malloc( 12); /* size of header*/
-
-  if( read( fd, data, 12) != 12){
-    opj_free( data);
-    close(fd);
-    fprintf( FCGI_stdout, "Reason: Target %s broken (read error)\r\n", filepath);
-    return -1;
-  }
-    
-  if( *data || *(data + 1) || *(data + 2) ||
-      *(data + 3) != 12 || strncmp (data + 4, "jP  \r\n\x87\n", 8)){
-    opj_free( data);
-    close(fd);
-    fprintf( FCGI_stdout, "Reason: No JPEG 2000 Signature box in target %s\r\n", filepath);
-    return -1;
-  } 
 
-  opj_free( data);
+    data = (char *)opj_malloc(12);  /* size of header*/
 
-  return fd;
+    if (read(fd, data, 12) != 12) {
+        opj_free(data);
+        close(fd);
+        fprintf(FCGI_stdout, "Reason: Target %s broken (read error)\r\n", filepath);
+        return -1;
+    }
+
+    if (*data || *(data + 1) || *(data + 2) ||
+            *(data + 3) != 12 || strncmp(data + 4, "jP  \r\n\x87\n", 8)) {
+        opj_free(data);
+        close(fd);
+        fprintf(FCGI_stdout, "Reason: No JPEG 2000 Signature box in target %s\r\n",
+                filepath);
+        return -1;
+    }
+
+    opj_free(data);
+
+    return fd;
 }
 
 #ifdef SERVER
 static size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream);
 #endif
 
-int open_remotefile( const char filepath[], char tmpfname[])
+int open_remotefile(const char filepath[], char tmpfname[])
 {
 #ifndef SERVER
-  (void)filepath;
-  (void)tmpfname;
-  fprintf( FCGI_stderr, "Remote file can not be opened in local mode\n");
-  return -1;
+    (void)filepath;
+    (void)tmpfname;
+    fprintf(FCGI_stderr, "Remote file can not be opened in local mode\n");
+    return -1;
 
 #else
 
-  CURL *curl_handle;
-  int fd;
-    
-  curl_handle = curl_easy_init();
-  curl_easy_setopt(curl_handle, CURLOPT_URL, filepath);
-  curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1L);
-  curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data);
-  
-  snprintf( tmpfname, MAX_LENOFTID, "%x-%x.jp2", (unsigned int)time(NULL), (unsigned int)rand());
-  fprintf( FCGI_stderr, "%s is downloaded to a temporal new file %s\n", filepath, tmpfname);
-  if( (fd = open( tmpfname, O_RDWR|O_CREAT|O_EXCL, S_IRWXU)) == -1){
-    fprintf( FCGI_stdout, "Reason: File open error %s\r\n", tmpfname);
+    CURL *curl_handle;
+    int fd;
+
+    curl_handle = curl_easy_init();
+    curl_easy_setopt(curl_handle, CURLOPT_URL, filepath);
+    curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1L);
+    curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data);
+
+    snprintf(tmpfname, MAX_LENOFTID, "%x-%x.jp2", (unsigned int)time(NULL),
+             (unsigned int)rand());
+    fprintf(FCGI_stderr, "%s is downloaded to a temporal new file %s\n", filepath,
+            tmpfname);
+    if ((fd = open(tmpfname, O_RDWR | O_CREAT | O_EXCL, S_IRWXU)) == -1) {
+        fprintf(FCGI_stdout, "Reason: File open error %s\r\n", tmpfname);
+        curl_easy_cleanup(curl_handle);
+        return -1;
+    }
+    curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, &fd);
+    curl_easy_perform(curl_handle);
     curl_easy_cleanup(curl_handle);
-    return -1;
-  }
-  curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, &fd);
-  curl_easy_perform(curl_handle);
-  curl_easy_cleanup(curl_handle);
 
-  return fd;
+    return fd;
 #endif /*SERVER*/
 }
 
 #ifdef SERVER
 static size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)
 {
-  int *fd = (int *)stream;
-  ssize_t written = write( *fd, ptr, size*nmemb);
-  assert( written >= 0 );
+    int *fd = (int *)stream;
+    ssize_t written = write(*fd, ptr, size * nmemb);
+    assert(written >= 0);
 
-  return (size_t)written;
+    return (size_t)written;
 }
 #endif /*SERVER*/
index e2ffafacdbe09732b21c346bc8d0577eb3649cae..96924a30bc273f7ed840776d3cfa649033da657b 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
  * CRC-checksum.
  *
  * implemented by Michael Neumann, 14.06.1998
- * 
+ *
  */
 const unsigned short CRC16_table[256] = {
-       0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 
-       0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 
-       0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 
-       0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
-       0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 
-       0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 
-       0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 
-       0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 
-       0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 
-       0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 
-       0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 
-       0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
-       0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 
-       0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 
-       0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 
-       0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 
-       0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 
-       0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
-       0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 
-       0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 
-       0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
-       0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 
-       0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 
-       0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 
-       0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 
-       0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 
-       0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 
-       0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 
-       0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 
-       0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 
-       0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 
-       0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
+    0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
+    0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
+    0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
+    0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
+    0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
+    0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
+    0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
+    0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
+    0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
+    0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
+    0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
+    0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
+    0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
+    0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
+    0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
+    0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
+    0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
+    0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
+    0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
+    0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
+    0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
+    0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
+    0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
+    0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
+    0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
+    0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
+    0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
+    0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
+    0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
+    0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
+    0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
+    0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
 };
 
-void updateCRC16(unsigned short *crc, unsigned char data) {
-       *crc = CRC16_table[(*crc >> 8) & 0xFF] ^ (*crc << 8) ^ data;
+void updateCRC16(unsigned short *crc, unsigned char data)
+{
+    *crc = CRC16_table[(*crc >> 8) & 0xFF] ^ (*crc << 8) ^ data;
 }
 
 
@@ -113,53 +114,54 @@ void updateCRC16(unsigned short *crc, unsigned char data) {
  *
  */
 const unsigned long CRC32_table[256] = {
-       0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
-       0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
-       0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
-       0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
-       0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
-       0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
-       0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
-       0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
-       0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
-       0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
-       0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
-       0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
-       0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
-       0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
-       0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
-       0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
-       0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
-       0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
-       0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
-       0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
-       0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
-       0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
-       0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
-       0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
-       0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
-       0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
-       0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
-       0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
-       0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
-       0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
-       0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
-       0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
-       0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
-       0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
-       0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
-       0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
-       0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
-       0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
-       0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
-       0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
-       0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
-       0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
-       0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
+    0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
+    0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
+    0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
+    0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
+    0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
+    0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
+    0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
+    0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
+    0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
+    0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+    0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
+    0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
+    0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
+    0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
+    0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
+    0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
+    0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
+    0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
+    0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
+    0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+    0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
+    0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
+    0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
+    0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
+    0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
+    0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
+    0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
+    0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
+    0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
+    0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+    0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
+    0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
+    0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
+    0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
+    0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
+    0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
+    0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
+    0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
+    0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
+    0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+    0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
+    0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
+    0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
 };
 
-void updateCRC32(unsigned long *crc, unsigned char data) {
-       *crc = CRC32_table[(unsigned char) *crc ^ data] ^ ((*crc >> 8) & 0x00FFFFFF);
+void updateCRC32(unsigned long *crc, unsigned char data)
+{
+    *crc = CRC32_table[(unsigned char) * crc ^ data] ^ ((*crc >> 8) & 0x00FFFFFF);
 }
 
 #endif /* USE_JPWL */
index 99a34990fbd3759caf6e4cdfc9e4ed07325bc53a..3cd74ad75f72495cca9d64bfc1bd9d01b92c142f 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -47,7 +47,7 @@
 /** number of JPWL prepared markers */
 static int jwmarker_num;
 /** properties of JPWL markers to insert */
-static jpwl_marker_t jwmarker[JPWL_MAX_NO_MARKERS]; 
+static jpwl_marker_t jwmarker[JPWL_MAX_NO_MARKERS];
 
 /*@}*/
 
@@ -64,7 +64,8 @@ static jpwl_marker_t jwmarker[JPWL_MAX_NO_MARKERS];
 @param info_on true if informative techniques are activated
 @return returns the freshly created EPC
 */
-jpwl_epc_ms_t *jpwl_epc_create(opj_j2k_t *j2k, opj_bool esd_on, opj_bool red_on, opj_bool epb_on, opj_bool info_on);
+jpwl_epc_ms_t *jpwl_epc_create(opj_j2k_t *j2k, opj_bool esd_on, opj_bool red_on,
+                               opj_bool epb_on, opj_bool info_on);
 
 /*@}*/
 
@@ -80,11 +81,11 @@ jpwl_epc_ms_t *jpwl_epc_create(opj_j2k_t *j2k, opj_bool esd_on, opj_bool red_on,
 @param sensval pointer to an array of sensitivity values (if NULL, they will be automatically filled)
 @return returns the freshly created ESD
 */
-jpwl_esd_ms_t *jpwl_esd_create(opj_j2k_t *j2k, int comps, 
-        unsigned char addrm, unsigned char ad_size,
-        unsigned char senst, int se_size, int tileno,
-        unsigned long int svalnum, void *sensval);
-                        
+jpwl_esd_ms_t *jpwl_esd_create(opj_j2k_t *j2k, int comps,
+                               unsigned char addrm, unsigned char ad_size,
+                               unsigned char senst, int se_size, int tileno,
+                               unsigned long int svalnum, void *sensval);
+
 /** this function is used to compare two JPWL markers based on
 their relevant wishlist position
 @param arg1 pointer to first marker
@@ -117,1201 +118,1269 @@ void jpwl_esd_write(opj_j2k_t *j2k, jpwl_esd_ms_t *esdmark, unsigned char *buf);
 
 /*-----------------------------------------------------------------*/
 
-void jpwl_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image) {
+void jpwl_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image)
+{
 
-        int mm;
+    int mm;
 
-        /* let's reset some settings */
+    /* let's reset some settings */
 
-        /* clear the existing markers */
-        for (mm = 0; mm < jwmarker_num; mm++) {
+    /* clear the existing markers */
+    for (mm = 0; mm < jwmarker_num; mm++) {
 
-                switch (jwmarker[mm].id) {
+        switch (jwmarker[mm].id) {
 
-                case J2K_MS_EPB:
-                        opj_free(jwmarker[mm].m.epbmark);
-                        break;
+        case J2K_MS_EPB:
+            opj_free(jwmarker[mm].m.epbmark);
+            break;
 
-                case J2K_MS_EPC:
-                        opj_free(jwmarker[mm].m.epcmark);
-                        break;
+        case J2K_MS_EPC:
+            opj_free(jwmarker[mm].m.epcmark);
+            break;
 
-                case J2K_MS_ESD:
-                        opj_free(jwmarker[mm].m.esdmark);
-                        break;
+        case J2K_MS_ESD:
+            opj_free(jwmarker[mm].m.esdmark);
+            break;
 
-                case J2K_MS_RED:
-                        opj_free(jwmarker[mm].m.redmark);
-                        break;
+        case J2K_MS_RED:
+            opj_free(jwmarker[mm].m.redmark);
+            break;
 
-                default:
-                        break;
-                }
+        default:
+            break;
         }
+    }
 
-        /* clear the marker structure array */
-        memset(jwmarker, 0, sizeof(jpwl_marker_t) * JPWL_MAX_NO_MARKERS);
+    /* clear the marker structure array */
+    memset(jwmarker, 0, sizeof(jpwl_marker_t) * JPWL_MAX_NO_MARKERS);
 
-        /* no more markers in the list */
-        jwmarker_num = 0;
+    /* no more markers in the list */
+    jwmarker_num = 0;
 
-        /* let's begin creating a marker list, according to user wishes */
-        jpwl_prepare_marks(j2k, cio, image);
+    /* let's begin creating a marker list, according to user wishes */
+    jpwl_prepare_marks(j2k, cio, image);
 
-        /* now we dump the JPWL markers on the codestream */
-        jpwl_dump_marks(j2k, cio, image);
+    /* now we dump the JPWL markers on the codestream */
+    jpwl_dump_marks(j2k, cio, image);
 
-        /* do not know exactly what is this for,
-        but it gets called during index creation */
-        j2k->pos_correction = 0;
+    /* do not know exactly what is this for,
+    but it gets called during index creation */
+    j2k->pos_correction = 0;
 
 }
 
-opj_bool j2k_add_marker(opj_codestream_info_t *cstr_info, unsigned short int type, int pos, int len) {
-
-        if (!cstr_info)
-                return OPJ_FALSE;
-
-        /* expand the list? */
-        if ((cstr_info->marknum + 1) > cstr_info->maxmarknum) {
-                opj_marker_info_t* new_marker;
-                cstr_info->maxmarknum += 100;
-                new_marker = (opj_marker_info_t*)opj_realloc(cstr_info->marker, cstr_info->maxmarknum * sizeof(opj_marker_info_t));
-                if (! new_marker)
-                {
-                        opj_free(cstr_info->marker);
-                        cstr_info->marker = 0;
-                        cstr_info->marknum = 0;
-                        cstr_info->maxmarknum = 0;
-                        /* opj_event_msg_v2(p_manager, EVT_ERROR, "Not enough memory to add a marker\n"); */
-                        /* TODO_test_add_marker_result;*/
-                        return OPJ_FALSE;
-                }
-                cstr_info->marker = new_marker;
+opj_bool j2k_add_marker(opj_codestream_info_t *cstr_info,
+                        unsigned short int type, int pos, int len)
+{
+
+    if (!cstr_info) {
+        return OPJ_FALSE;
+    }
+
+    /* expand the list? */
+    if ((cstr_info->marknum + 1) > cstr_info->maxmarknum) {
+        opj_marker_info_t* new_marker;
+        cstr_info->maxmarknum += 100;
+        new_marker = (opj_marker_info_t*)opj_realloc(cstr_info->marker,
+                     cstr_info->maxmarknum * sizeof(opj_marker_info_t));
+        if (! new_marker) {
+            opj_free(cstr_info->marker);
+            cstr_info->marker = 0;
+            cstr_info->marknum = 0;
+            cstr_info->maxmarknum = 0;
+            /* opj_event_msg_v2(p_manager, EVT_ERROR, "Not enough memory to add a marker\n"); */
+            /* TODO_test_add_marker_result;*/
+            return OPJ_FALSE;
         }
+        cstr_info->marker = new_marker;
+    }
 
-        /* add the marker */
-        cstr_info->marker[cstr_info->marknum].type = type;
-        cstr_info->marker[cstr_info->marknum].pos = pos;
-        cstr_info->marker[cstr_info->marknum].len = len;
-        cstr_info->marknum++;
-        return OPJ_TRUE;
+    /* add the marker */
+    cstr_info->marker[cstr_info->marknum].type = type;
+    cstr_info->marker[cstr_info->marknum].pos = pos;
+    cstr_info->marker[cstr_info->marknum].len = len;
+    cstr_info->marknum++;
+    return OPJ_TRUE;
 
 }
 
-void jpwl_prepare_marks(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image) {
-
-        unsigned short int socsiz_len = 0;
-        int ciopos = cio_tell(cio), soc_pos = j2k->cstr_info->main_head_start;
-        unsigned char *socp = NULL;
-
-        int tileno, acc_tpno, tpno, tilespec, hprot, sens, pprot, packspec, lastileno, packno;
-
-        jpwl_epb_ms_t *epb_mark;
-        jpwl_epc_ms_t *epc_mark;
-        jpwl_esd_ms_t *esd_mark;
-  (void)image;
-
-        /* find (SOC + SIZ) length */
-        /* I assume SIZ is always the first marker after SOC */
-        cio_seek(cio, soc_pos + 4);
-        socsiz_len = (unsigned short int) cio_read(cio, 2) + 4; /* add the 2 marks length itself */
-        cio_seek(cio, soc_pos + 0);
-        socp = cio_getbp(cio); /* pointer to SOC */
-
-        /* 
-         EPC MS for Main Header: if we are here it's required
-        */
-        /* create the EPC */
-        if ((epc_mark = jpwl_epc_create(
+void jpwl_prepare_marks(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image)
+{
+
+    unsigned short int socsiz_len = 0;
+    int ciopos = cio_tell(cio), soc_pos = j2k->cstr_info->main_head_start;
+    unsigned char *socp = NULL;
+
+    int tileno, acc_tpno, tpno, tilespec, hprot, sens, pprot, packspec, lastileno,
+        packno;
+
+    jpwl_epb_ms_t *epb_mark;
+    jpwl_epc_ms_t *epc_mark;
+    jpwl_esd_ms_t *esd_mark;
+    (void)image;
+
+    /* find (SOC + SIZ) length */
+    /* I assume SIZ is always the first marker after SOC */
+    cio_seek(cio, soc_pos + 4);
+    socsiz_len = (unsigned short int) cio_read(cio,
+                 2) + 4; /* add the 2 marks length itself */
+    cio_seek(cio, soc_pos + 0);
+    socp = cio_getbp(cio); /* pointer to SOC */
+
+    /*
+     EPC MS for Main Header: if we are here it's required
+    */
+    /* create the EPC */
+    if ((epc_mark = jpwl_epc_create(
                         j2k,
                         j2k->cp->esd_on, /* is ESD present? */
                         j2k->cp->red_on, /* is RED present? */
                         j2k->cp->epb_on, /* is EPB present? */
                         OPJ_FALSE /* are informative techniques present? */
-                ))) {
-
-                /* Add this marker to the 'insertanda' list */
-                if (epc_mark) {
-                        jwmarker[jwmarker_num].id = J2K_MS_EPC; /* its type */
-                        jwmarker[jwmarker_num].m.epcmark = epc_mark; /* the EPC */
-                        jwmarker[jwmarker_num].pos = soc_pos + socsiz_len; /* after SIZ */
-                        jwmarker[jwmarker_num].dpos = (double) jwmarker[jwmarker_num].pos + 0.1; /* not so first */
-                        jwmarker[jwmarker_num].len = epc_mark->Lepc; /* its length */
-                        jwmarker[jwmarker_num].len_ready = OPJ_TRUE; /* ready */
-                        jwmarker[jwmarker_num].pos_ready = OPJ_TRUE; /* ready */
-                        jwmarker[jwmarker_num].parms_ready = OPJ_FALSE; /* not ready */
-                        jwmarker[jwmarker_num].data_ready = OPJ_TRUE; /* ready */
-                        jwmarker_num++;
-                };
+                    ))) {
+
+        /* Add this marker to the 'insertanda' list */
+        if (epc_mark) {
+            jwmarker[jwmarker_num].id = J2K_MS_EPC; /* its type */
+            jwmarker[jwmarker_num].m.epcmark = epc_mark; /* the EPC */
+            jwmarker[jwmarker_num].pos = soc_pos + socsiz_len; /* after SIZ */
+            jwmarker[jwmarker_num].dpos = (double) jwmarker[jwmarker_num].pos +
+                                          0.1; /* not so first */
+            jwmarker[jwmarker_num].len = epc_mark->Lepc; /* its length */
+            jwmarker[jwmarker_num].len_ready = OPJ_TRUE; /* ready */
+            jwmarker[jwmarker_num].pos_ready = OPJ_TRUE; /* ready */
+            jwmarker[jwmarker_num].parms_ready = OPJ_FALSE; /* not ready */
+            jwmarker[jwmarker_num].data_ready = OPJ_TRUE; /* ready */
+            jwmarker_num++;
+        };
 
-                opj_event_msg(j2k->cinfo, EVT_INFO,
-                        "MH  EPC : setting %s%s%s\n",
-                        j2k->cp->esd_on ? "ESD, " : "",
-                        j2k->cp->red_on ? "RED, " : "",
-                        j2k->cp->epb_on ? "EPB, " : ""
-                        );
+        opj_event_msg(j2k->cinfo, EVT_INFO,
+                      "MH  EPC : setting %s%s%s\n",
+                      j2k->cp->esd_on ? "ESD, " : "",
+                      j2k->cp->red_on ? "RED, " : "",
+                      j2k->cp->epb_on ? "EPB, " : ""
+                     );
+
+    } else {
+        /* ooops, problems */
+        opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create MH EPC\n");
+    };
+
+    /*
+     ESD MS for Main Header
+    */
+    /* first of all, must MH have an ESD MS? */
+    if (j2k->cp->esd_on && (j2k->cp->sens_MH >= 0)) {
+
+        /* Create the ESD */
+        if ((esd_mark = jpwl_esd_create(
+                            j2k, /* this encoder handle */
+                            -1, /* we are averaging over all components */
+                            (unsigned char) j2k->cp->sens_range, /* range method */
+                            (unsigned char) j2k->cp->sens_addr, /* sensitivity addressing */
+                            (unsigned char) j2k->cp->sens_MH, /* sensitivity method */
+                            j2k->cp->sens_size, /* sensitivity size */
+                            -1, /* this ESD is in main header */
+                            0 /*j2k->cstr_info->num*/, /* number of packets in codestream */
+                            NULL /*sensval*/ /* pointer to sensitivity data of packets */
+                        ))) {
+
+            /* Add this marker to the 'insertanda' list */
+            if (jwmarker_num < JPWL_MAX_NO_MARKERS) {
+                jwmarker[jwmarker_num].id = J2K_MS_ESD; /* its type */
+                jwmarker[jwmarker_num].m.esdmark = esd_mark; /* the EPB */
+                jwmarker[jwmarker_num].pos = soc_pos +
+                                             socsiz_len; /* we choose to place it after SIZ */
+                jwmarker[jwmarker_num].dpos = (double) jwmarker[jwmarker_num].pos +
+                                              0.2; /* not first at all! */
+                jwmarker[jwmarker_num].len = esd_mark->Lesd; /* its length */
+                jwmarker[jwmarker_num].len_ready = OPJ_TRUE; /* not ready, yet */
+                jwmarker[jwmarker_num].pos_ready = OPJ_TRUE; /* ready */
+                jwmarker[jwmarker_num].parms_ready = OPJ_TRUE; /* not ready */
+                jwmarker[jwmarker_num].data_ready = OPJ_FALSE; /* not ready */
+                jwmarker_num++;
+            }
+
+            opj_event_msg(j2k->cinfo, EVT_INFO,
+                          "MH  ESDs: method %d\n",
+                          j2k->cp->sens_MH
+                         );
 
         } else {
-                /* ooops, problems */
-                opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create MH EPC\n");                              
+            /* ooops, problems */
+            opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create MH ESD\n");
         };
 
-        /* 
-         ESD MS for Main Header
-        */
-        /* first of all, must MH have an ESD MS? */
-        if (j2k->cp->esd_on && (j2k->cp->sens_MH >= 0)) {
+    }
+
+    /*
+     ESD MSs for Tile Part Headers
+    */
+    /* cycle through tiles */
+    sens = -1; /* default spec: no ESD */
+    tilespec = 0; /* first tile spec */
+    acc_tpno = 0;
+    for (tileno = 0; tileno < j2k->cstr_info->tw * j2k->cstr_info->th; tileno++) {
+
+        opj_event_msg(j2k->cinfo, EVT_INFO,
+                      "Tile %d has %d tile part(s)\n",
+                      tileno, j2k->cstr_info->tile[tileno].num_tps
+                     );
+
+        /* for every tile part in the tile */
+        for (tpno = 0; tpno < j2k->cstr_info->tile[tileno].num_tps;
+                tpno++, acc_tpno++) {
+
+            int sot_len, Psot, Psotp, mm;
+            unsigned long sot_pos, post_sod_pos;
+
+            unsigned long int left_THmarks_len;
+
+            /******* sot_pos = j2k->cstr_info->tile[tileno].start_pos; */
+            sot_pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos;
+            cio_seek(cio, sot_pos + 2);
+            sot_len = cio_read(cio, 2); /* SOT Len */
+            cio_skip(cio, 2);
+            Psotp = cio_tell(cio);
+            Psot = cio_read(cio, 4); /* tile length */
+
+            /******* post_sod_pos = j2k->cstr_info->tile[tileno].end_header + 1; */
+            post_sod_pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_end_header + 1;
+            left_THmarks_len = post_sod_pos - sot_pos;
+
+            /* add all the lengths of the markers which are len-ready and stay within SOT and SOD */
+            for (mm = 0; mm < jwmarker_num; mm++) {
+                if ((jwmarker[mm].pos >= sot_pos) && (jwmarker[mm].pos < post_sod_pos)) {
+                    if (jwmarker[mm].len_ready) {
+                        left_THmarks_len += jwmarker[mm].len + 2;
+                    } else {
+                        opj_event_msg(j2k->cinfo, EVT_ERROR,
+                                      "MS %x in %f is not len-ready: could not set up TH EPB\n",
+                                      jwmarker[mm].id, jwmarker[mm].dpos);
+                        exit(1);
+                    }
+                }
+            }
+
+            /******* if ((tilespec < JPWL_MAX_NO_TILESPECS) && (j2k->cp->sens_TPH_tileno[tilespec] == tileno)) */
+            if ((tilespec < JPWL_MAX_NO_TILESPECS) &&
+                    (j2k->cp->sens_TPH_tileno[tilespec] == acc_tpno))
+                /* we got a specification from this tile onwards */
+            {
+                sens = j2k->cp->sens_TPH[tilespec++];
+            }
+
+            /* must this TPH have an ESD MS? */
+            if (j2k->cp->esd_on && (sens >= 0)) {
 
                 /* Create the ESD */
                 if ((esd_mark = jpwl_esd_create(
-                        j2k, /* this encoder handle */
-                        -1, /* we are averaging over all components */
-                        (unsigned char) j2k->cp->sens_range, /* range method */
-                        (unsigned char) j2k->cp->sens_addr, /* sensitivity addressing */
-                        (unsigned char) j2k->cp->sens_MH, /* sensitivity method */
-                        j2k->cp->sens_size, /* sensitivity size */
-                        -1, /* this ESD is in main header */
-                        0 /*j2k->cstr_info->num*/, /* number of packets in codestream */
-                        NULL /*sensval*/ /* pointer to sensitivity data of packets */
-                        ))) {
-                        
-                        /* Add this marker to the 'insertanda' list */
-                        if (jwmarker_num < JPWL_MAX_NO_MARKERS) {
-                                jwmarker[jwmarker_num].id = J2K_MS_ESD; /* its type */
-                                jwmarker[jwmarker_num].m.esdmark = esd_mark; /* the EPB */
-                                jwmarker[jwmarker_num].pos = soc_pos + socsiz_len; /* we choose to place it after SIZ */
-                                jwmarker[jwmarker_num].dpos = (double) jwmarker[jwmarker_num].pos + 0.2; /* not first at all! */
-                                jwmarker[jwmarker_num].len = esd_mark->Lesd; /* its length */
-                                jwmarker[jwmarker_num].len_ready = OPJ_TRUE; /* not ready, yet */
-                                jwmarker[jwmarker_num].pos_ready = OPJ_TRUE; /* ready */
-                                jwmarker[jwmarker_num].parms_ready = OPJ_TRUE; /* not ready */
-                                jwmarker[jwmarker_num].data_ready = OPJ_FALSE; /* not ready */
-                                jwmarker_num++;
-                        }
+                                    j2k, /* this encoder handle */
+                                    -1, /* we are averaging over all components */
+                                    (unsigned char) j2k->cp->sens_range, /* range method */
+                                    (unsigned char) j2k->cp->sens_addr, /* sensitivity addressing size */
+                                    (unsigned char) sens, /* sensitivity method */
+                                    j2k->cp->sens_size, /* sensitivity value size */
+                                    tileno, /* this ESD is in a tile */
+                                    0, /* number of packets in codestream */
+                                    NULL /* pointer to sensitivity data of packets */
+                                ))) {
+
+                    /* Add this marker to the 'insertanda' list */
+                    if (jwmarker_num < JPWL_MAX_NO_MARKERS) {
+                        jwmarker[jwmarker_num].id = J2K_MS_ESD; /* its type */
+                        jwmarker[jwmarker_num].m.esdmark = esd_mark; /* the EPB */
+                        /****** jwmarker[jwmarker_num].pos = j2k->cstr_info->tile[tileno].start_pos + sot_len + 2; */ /* after SOT */
+                        jwmarker[jwmarker_num].pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos
+                                                     + sot_len + 2; /* after SOT */
+                        jwmarker[jwmarker_num].dpos = (double) jwmarker[jwmarker_num].pos +
+                                                      0.2; /* not first at all! */
+                        jwmarker[jwmarker_num].len = esd_mark->Lesd; /* its length */
+                        jwmarker[jwmarker_num].len_ready = OPJ_TRUE; /* ready, yet */
+                        jwmarker[jwmarker_num].pos_ready = OPJ_TRUE; /* ready */
+                        jwmarker[jwmarker_num].parms_ready = OPJ_TRUE; /* not ready */
+                        jwmarker[jwmarker_num].data_ready = OPJ_FALSE; /* ready */
+                        jwmarker_num++;
+                    }
 
-                        opj_event_msg(j2k->cinfo, EVT_INFO,
-                                "MH  ESDs: method %d\n",
-                                j2k->cp->sens_MH
-                                );
+                    /* update Psot of the tile  */
+                    cio_seek(cio, Psotp);
+                    cio_write(cio, Psot + esd_mark->Lesd + 2, 4);
+
+                    opj_event_msg(j2k->cinfo, EVT_INFO,
+                                  /******* "TPH ESDs: tile %02d, method %d\n", */
+                                  "TPH ESDs: tile %02d, part %02d, method %d\n",
+                                  /******* tileno, */
+                                  tileno, tpno,
+                                  sens
+                                 );
 
                 } else {
-                        /* ooops, problems */
-                        opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create MH ESD\n");                              
+                    /* ooops, problems */
+                    /***** opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create TPH ESD #%d\n", tileno); */
+                    opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create TPH ESD #%d,%d\n",
+                                  tileno, tpno);
                 };
 
+            }
+
         }
 
-        /* 
-         ESD MSs for Tile Part Headers 
-        */
-        /* cycle through tiles */
-        sens = -1; /* default spec: no ESD */
-        tilespec = 0; /* first tile spec */
-        acc_tpno = 0;
-        for (tileno = 0; tileno < j2k->cstr_info->tw * j2k->cstr_info->th; tileno++) {
+    };
 
-                opj_event_msg(j2k->cinfo, EVT_INFO,
-                        "Tile %d has %d tile part(s)\n",
-                        tileno, j2k->cstr_info->tile[tileno].num_tps
-                        );
+    /*
+     EPB MS for Main Header
+    */
+    /* first of all, must MH have an EPB MS? */
+    if (j2k->cp->epb_on && (j2k->cp->hprot_MH > 0)) {
 
-                /* for every tile part in the tile */
-                for (tpno = 0; tpno < j2k->cstr_info->tile[tileno].num_tps; tpno++, acc_tpno++) {
-        
-                        int sot_len, Psot, Psotp, mm;
-                        unsigned long sot_pos, post_sod_pos;
-
-                        unsigned long int left_THmarks_len;
-
-                        /******* sot_pos = j2k->cstr_info->tile[tileno].start_pos; */
-                        sot_pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos;
-                        cio_seek(cio, sot_pos + 2); 
-                        sot_len = cio_read(cio, 2); /* SOT Len */
-                        cio_skip(cio, 2);
-                        Psotp = cio_tell(cio);
-                        Psot = cio_read(cio, 4); /* tile length */
-
-                        /******* post_sod_pos = j2k->cstr_info->tile[tileno].end_header + 1; */
-                        post_sod_pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_end_header + 1;
-                        left_THmarks_len = post_sod_pos - sot_pos;
-
-                        /* add all the lengths of the markers which are len-ready and stay within SOT and SOD */
-                        for (mm = 0; mm < jwmarker_num; mm++) {
-                                if ((jwmarker[mm].pos >= sot_pos) && (jwmarker[mm].pos < post_sod_pos)) {
-                                        if (jwmarker[mm].len_ready)
-                                                left_THmarks_len += jwmarker[mm].len + 2;
-                                        else {
-                                                opj_event_msg(j2k->cinfo, EVT_ERROR, "MS %x in %f is not len-ready: could not set up TH EPB\n",
-                                                        jwmarker[mm].id, jwmarker[mm].dpos);                            
-                                                exit(1);
-                                        }
-                                }
-                        }
+        int mm;
 
-                        /******* if ((tilespec < JPWL_MAX_NO_TILESPECS) && (j2k->cp->sens_TPH_tileno[tilespec] == tileno)) */
-                        if ((tilespec < JPWL_MAX_NO_TILESPECS) && (j2k->cp->sens_TPH_tileno[tilespec] == acc_tpno))
-                                /* we got a specification from this tile onwards */
-                                sens = j2k->cp->sens_TPH[tilespec++];
-                
-                        /* must this TPH have an ESD MS? */
-                        if (j2k->cp->esd_on && (sens >= 0)) {
-
-                                /* Create the ESD */
-                                if ((esd_mark = jpwl_esd_create(
-                                        j2k, /* this encoder handle */
-                                        -1, /* we are averaging over all components */
-                                        (unsigned char) j2k->cp->sens_range, /* range method */
-                                        (unsigned char) j2k->cp->sens_addr, /* sensitivity addressing size */
-                                        (unsigned char) sens, /* sensitivity method */
-                                        j2k->cp->sens_size, /* sensitivity value size */
-                                        tileno, /* this ESD is in a tile */
-                                        0, /* number of packets in codestream */
-                                        NULL /* pointer to sensitivity data of packets */
-                                        ))) {
-                                        
-                                        /* Add this marker to the 'insertanda' list */
-                                        if (jwmarker_num < JPWL_MAX_NO_MARKERS) {
-                                                jwmarker[jwmarker_num].id = J2K_MS_ESD; /* its type */
-                                                jwmarker[jwmarker_num].m.esdmark = esd_mark; /* the EPB */
-                                                /****** jwmarker[jwmarker_num].pos = j2k->cstr_info->tile[tileno].start_pos + sot_len + 2; */ /* after SOT */
-                                                jwmarker[jwmarker_num].pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos + sot_len + 2; /* after SOT */
-                                                jwmarker[jwmarker_num].dpos = (double) jwmarker[jwmarker_num].pos + 0.2; /* not first at all! */
-                                                jwmarker[jwmarker_num].len = esd_mark->Lesd; /* its length */
-                                                jwmarker[jwmarker_num].len_ready = OPJ_TRUE; /* ready, yet */
-                                                jwmarker[jwmarker_num].pos_ready = OPJ_TRUE; /* ready */
-                                                jwmarker[jwmarker_num].parms_ready = OPJ_TRUE; /* not ready */
-                                                jwmarker[jwmarker_num].data_ready = OPJ_FALSE; /* ready */
-                                                jwmarker_num++;
-                                        }
-
-                                        /* update Psot of the tile  */
-                                        cio_seek(cio, Psotp);
-                                        cio_write(cio, Psot + esd_mark->Lesd + 2, 4);
-
-                                        opj_event_msg(j2k->cinfo, EVT_INFO,
-                                                /******* "TPH ESDs: tile %02d, method %d\n", */
-                                                "TPH ESDs: tile %02d, part %02d, method %d\n",
-                                                /******* tileno, */
-                                                tileno, tpno,
-                                                sens
-                                                );
-
-                                } else {
-                                        /* ooops, problems */
-                                        /***** opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create TPH ESD #%d\n", tileno); */
-                                        opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create TPH ESD #%d,%d\n", tileno, tpno);
-                                };
+        /* position of SOT */
+        unsigned int sot_pos = j2k->cstr_info->main_head_end + 1;
 
-                        }
-                        
+        /* how much space is there between end of SIZ and beginning of SOT? */
+        int left_MHmarks_len = sot_pos - socsiz_len;
+
+        /* add all the lengths of the markers which are len-ready and stay within SOC and SOT */
+        for (mm = 0; mm < jwmarker_num; mm++) {
+            if (jwmarker[mm].pos < sot_pos) {  /* jwmarker[mm].pos >=0 since ulong */
+                if (jwmarker[mm].len_ready) {
+                    left_MHmarks_len += jwmarker[mm].len + 2;
+                } else {
+                    opj_event_msg(j2k->cinfo, EVT_ERROR,
+                                  "MS %x in %f is not len-ready: could not set up MH EPB\n",
+                                  jwmarker[mm].id, jwmarker[mm].dpos);
+                    exit(1);
                 }
-        
+            }
+        }
+
+        /* Create the EPB */
+        if ((epb_mark = jpwl_epb_create(
+                            j2k, /* this encoder handle */
+                            OPJ_TRUE, /* is it the latest? */
+                            OPJ_TRUE, /* is it packed? not for now */
+                            -1, /* we are in main header */
+                            0, /* its index is 0 (first) */
+                            j2k->cp->hprot_MH, /* protection type parameters of data */
+                            socsiz_len, /* pre-data: only SOC+SIZ */
+                            left_MHmarks_len /* post-data: from SOC to SOT, and all JPWL markers within */
+                        ))) {
+
+            /* Add this marker to the 'insertanda' list */
+            if (jwmarker_num < JPWL_MAX_NO_MARKERS) {
+                jwmarker[jwmarker_num].id = J2K_MS_EPB; /* its type */
+                jwmarker[jwmarker_num].m.epbmark = epb_mark; /* the EPB */
+                jwmarker[jwmarker_num].pos = soc_pos + socsiz_len; /* after SIZ */
+                jwmarker[jwmarker_num].dpos = (double)
+                                              jwmarker[jwmarker_num].pos; /* first first first! */
+                jwmarker[jwmarker_num].len = epb_mark->Lepb; /* its length */
+                jwmarker[jwmarker_num].len_ready = OPJ_TRUE; /* ready */
+                jwmarker[jwmarker_num].pos_ready = OPJ_TRUE; /* ready */
+                jwmarker[jwmarker_num].parms_ready = OPJ_TRUE; /* ready */
+                jwmarker[jwmarker_num].data_ready = OPJ_FALSE; /* not ready */
+                jwmarker_num++;
+            }
+
+            opj_event_msg(j2k->cinfo, EVT_INFO,
+                          "MH  EPB : prot. %d\n",
+                          j2k->cp->hprot_MH
+                         );
+
+        } else {
+            /* ooops, problems */
+            opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create MH EPB\n");
         };
+    }
+
+    /*
+     EPB MSs for Tile Parts
+    */
+    /* cycle through TPHs */
+    hprot = j2k->cp->hprot_MH; /* default spec */
+    tilespec = 0; /* first tile spec */
+    lastileno = 0;
+    packspec = 0;
+    pprot = -1;
+    acc_tpno = 0;
+    for (tileno = 0; tileno < j2k->cstr_info->tw * j2k->cstr_info->th; tileno++) {
 
-        /* 
-         EPB MS for Main Header
-        */
-        /* first of all, must MH have an EPB MS? */
-        if (j2k->cp->epb_on && (j2k->cp->hprot_MH > 0)) {
-
-                int mm;
-
-                /* position of SOT */
-                unsigned int sot_pos = j2k->cstr_info->main_head_end + 1;
-
-                /* how much space is there between end of SIZ and beginning of SOT? */
-                int left_MHmarks_len = sot_pos - socsiz_len;
-
-                /* add all the lengths of the markers which are len-ready and stay within SOC and SOT */
-                for (mm = 0; mm < jwmarker_num; mm++) {
-                        if ( jwmarker[mm].pos < sot_pos) { /* jwmarker[mm].pos >=0 since ulong */
-                                if (jwmarker[mm].len_ready)
-                                        left_MHmarks_len += jwmarker[mm].len + 2;
-                                else {
-                                        opj_event_msg(j2k->cinfo, EVT_ERROR, "MS %x in %f is not len-ready: could not set up MH EPB\n",
-                                                jwmarker[mm].id, jwmarker[mm].dpos);                            
-                                        exit(1);
-                                }
-                        }
+        opj_event_msg(j2k->cinfo, EVT_INFO,
+                      "Tile %d has %d tile part(s)\n",
+                      tileno, j2k->cstr_info->tile[tileno].num_tps
+                     );
+
+        /* for every tile part in the tile */
+        for (tpno = 0; tpno < j2k->cstr_info->tile[tileno].num_tps;
+                tpno++, acc_tpno++) {
+
+            int sot_len, Psot, Psotp, mm, epb_index = 0, prot_len = 0;
+            unsigned long sot_pos, post_sod_pos;
+            unsigned long int left_THmarks_len/*, epbs_len = 0*/;
+            int startpack = 0, stoppack = j2k->cstr_info->packno;
+            int first_tp_pack, last_tp_pack;
+            jpwl_epb_ms_t *tph_epb = NULL;
+
+            /****** sot_pos = j2k->cstr_info->tile[tileno].start_pos; */
+            sot_pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos;
+            cio_seek(cio, sot_pos + 2);
+            sot_len = cio_read(cio, 2); /* SOT Len */
+            cio_skip(cio, 2);
+            Psotp = cio_tell(cio);
+            Psot = cio_read(cio, 4); /* tile length */
+
+            /* a-priori length of the data dwelling between SOT and SOD */
+            /****** post_sod_pos = j2k->cstr_info->tile[tileno].end_header + 1; */
+            post_sod_pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_end_header + 1;
+            left_THmarks_len = post_sod_pos - (sot_pos + sot_len + 2);
+
+            /* add all the lengths of the JPWL markers which are len-ready and stay within SOT and SOD */
+            for (mm = 0; mm < jwmarker_num; mm++) {
+                if ((jwmarker[mm].pos >= sot_pos) && (jwmarker[mm].pos < post_sod_pos)) {
+                    if (jwmarker[mm].len_ready) {
+                        left_THmarks_len += jwmarker[mm].len + 2;
+                    } else {
+                        opj_event_msg(j2k->cinfo, EVT_ERROR,
+                                      "MS %x in %f is not len-ready: could not set up TH EPB\n",
+                                      jwmarker[mm].id, jwmarker[mm].dpos);
+                        exit(1);
+                    }
                 }
+            }
+
+            /****** if ((tilespec < JPWL_MAX_NO_TILESPECS) && (j2k->cp->hprot_TPH_tileno[tilespec] == tileno)) */
+            if ((tilespec < JPWL_MAX_NO_TILESPECS) &&
+                    (j2k->cp->hprot_TPH_tileno[tilespec] == acc_tpno))
+                /* we got a specification from this tile part onwards */
+            {
+                hprot = j2k->cp->hprot_TPH[tilespec++];
+            }
+
+            /* must this TPH have an EPB MS? */
+            if (j2k->cp->epb_on && (hprot > 0)) {
 
                 /* Create the EPB */
                 if ((epb_mark = jpwl_epb_create(
-                        j2k, /* this encoder handle */
-                        OPJ_TRUE, /* is it the latest? */
-                        OPJ_TRUE, /* is it packed? not for now */
-                        -1, /* we are in main header */
-                        0, /* its index is 0 (first) */
-                        j2k->cp->hprot_MH, /* protection type parameters of data */
-                        socsiz_len, /* pre-data: only SOC+SIZ */
-                        left_MHmarks_len /* post-data: from SOC to SOT, and all JPWL markers within */
-                        ))) {
-                        
-                        /* Add this marker to the 'insertanda' list */
-                        if (jwmarker_num < JPWL_MAX_NO_MARKERS) {
-                                jwmarker[jwmarker_num].id = J2K_MS_EPB; /* its type */
-                                jwmarker[jwmarker_num].m.epbmark = epb_mark; /* the EPB */
-                                jwmarker[jwmarker_num].pos = soc_pos + socsiz_len; /* after SIZ */
-                                jwmarker[jwmarker_num].dpos = (double) jwmarker[jwmarker_num].pos; /* first first first! */
-                                jwmarker[jwmarker_num].len = epb_mark->Lepb; /* its length */
-                                jwmarker[jwmarker_num].len_ready = OPJ_TRUE; /* ready */
-                                jwmarker[jwmarker_num].pos_ready = OPJ_TRUE; /* ready */
-                                jwmarker[jwmarker_num].parms_ready = OPJ_TRUE; /* ready */
-                                jwmarker[jwmarker_num].data_ready = OPJ_FALSE; /* not ready */
-                                jwmarker_num++;
-                        }
+                                    j2k, /* this encoder handle */
+                                    OPJ_FALSE, /* is it the latest? in TPH, no for now (if huge data size in TPH, we'd need more) */
+                                    OPJ_TRUE, /* is it packed? yes for now */
+                                    tileno, /* we are in TPH */
+                                    epb_index++, /* its index is 0 (first) */
+                                    hprot, /* protection type parameters of following data */
+                                    sot_len + 2, /* pre-data length: only SOT */
+                                    left_THmarks_len /* post-data length: from SOT end to SOD inclusive */
+                                ))) {
+
+                    /* Add this marker to the 'insertanda' list */
+                    if (jwmarker_num < JPWL_MAX_NO_MARKERS) {
+                        jwmarker[jwmarker_num].id = J2K_MS_EPB; /* its type */
+                        jwmarker[jwmarker_num].m.epbmark = epb_mark; /* the EPB */
+                        /****** jwmarker[jwmarker_num].pos = j2k->cstr_info->tile[tileno].start_pos + sot_len + 2; */ /* after SOT */
+                        jwmarker[jwmarker_num].pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos
+                                                     + sot_len + 2; /* after SOT */
+                        jwmarker[jwmarker_num].dpos = (double)
+                                                      jwmarker[jwmarker_num].pos; /* first first first! */
+                        jwmarker[jwmarker_num].len = epb_mark->Lepb; /* its length */
+                        jwmarker[jwmarker_num].len_ready = OPJ_TRUE; /* ready */
+                        jwmarker[jwmarker_num].pos_ready = OPJ_TRUE; /* ready */
+                        jwmarker[jwmarker_num].parms_ready = OPJ_TRUE; /* ready */
+                        jwmarker[jwmarker_num].data_ready = OPJ_FALSE; /* not ready */
+                        jwmarker_num++;
+                    }
 
-                        opj_event_msg(j2k->cinfo, EVT_INFO,
-                                "MH  EPB : prot. %d\n",
-                                j2k->cp->hprot_MH
-                                );
+                    /* update Psot of the tile  */
+                    Psot += epb_mark->Lepb + 2;
+
+                    opj_event_msg(j2k->cinfo, EVT_INFO,
+                                  /***** "TPH EPB : tile %02d, prot. %d\n", */
+                                  "TPH EPB : tile %02d, part %02d, prot. %d\n",
+                                  /***** tileno, */
+                                  tileno, tpno,
+                                  hprot
+                                 );
+
+                    /* save this TPH EPB address */
+                    tph_epb = epb_mark;
 
                 } else {
-                        /* ooops, problems */
-                        opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create MH EPB\n");                              
+                    /* ooops, problems */
+                    /****** opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create TPH EPB #%d\n", tileno); */
+                    opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create TPH EPB in #%d,d\n",
+                                  tileno, tpno);
                 };
-        }
 
-        /* 
-         EPB MSs for Tile Parts
-        */
-        /* cycle through TPHs */
-        hprot = j2k->cp->hprot_MH; /* default spec */
-        tilespec = 0; /* first tile spec */
-        lastileno = 0;
-        packspec = 0;
-        pprot = -1;
-        acc_tpno = 0;
-        for (tileno = 0; tileno < j2k->cstr_info->tw * j2k->cstr_info->th; tileno++) {
+            }
+
+            startpack = 0;
+            /* EPB MSs for UEP packet data protection in Tile Parts */
+            /****** for (packno = 0; packno < j2k->cstr_info->num; packno++) { */
+            /*first_tp_pack = (tpno > 0) ? (first_tp_pack + j2k->cstr_info->tile[tileno].tp[tpno - 1].tp_numpacks) : 0;*/
+            first_tp_pack = j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pack;
+            last_tp_pack = first_tp_pack + j2k->cstr_info->tile[tileno].tp[tpno].tp_numpacks
+                           - 1;
+            for (packno = 0; packno < j2k->cstr_info->tile[tileno].tp[tpno].tp_numpacks;
+                    packno++) {
+
+                /******** if ((packspec < JPWL_MAX_NO_PACKSPECS) &&
+                        (j2k->cp->pprot_tileno[packspec] == tileno) && (j2k->cp->pprot_packno[packspec] == packno)) { */
+                if ((packspec < JPWL_MAX_NO_PACKSPECS) &&
+                        (j2k->cp->pprot_tileno[packspec] == acc_tpno) &&
+                        (j2k->cp->pprot_packno[packspec] == packno)) {
+
+                    /* we got a specification from this tile and packet onwards */
+                    /* print the previous spec */
+                    if (packno > 0) {
+                        stoppack = packno - 1;
+                        opj_event_msg(j2k->cinfo, EVT_INFO,
+                                      /***** "UEP EPBs: tile %02d, packs. %02d-%02d (B %d-%d), prot. %d\n", */
+                                      "UEP EPBs: tile %02d, part %02d, packs. %02d-%02d (B %d-%d), prot. %d\n",
+                                      /***** tileno, */
+                                      tileno, tpno,
+                                      startpack,
+                                      stoppack,
+                                      /***** j2k->cstr_info->tile[tileno].packet[startpack].start_pos, */
+                                      j2k->cstr_info->tile[tileno].packet[first_tp_pack + startpack].start_pos,
+                                      /***** j2k->cstr_info->tile[tileno].packet[stoppack].end_pos, */
+                                      j2k->cstr_info->tile[tileno].packet[first_tp_pack + stoppack].end_pos,
+                                      pprot);
+
+                        /***** prot_len = j2k->cstr_info->tile[tileno].packet[stoppack].end_pos + 1 -
+                                j2k->cstr_info->tile[tileno].packet[startpack].start_pos; */
+                        prot_len = j2k->cstr_info->tile[tileno].packet[first_tp_pack + stoppack].end_pos
+                                   + 1 -
+                                   j2k->cstr_info->tile[tileno].packet[first_tp_pack + startpack].start_pos;
+
+                        /*
+                          particular case: if this is the last header and the last packet,
+                          then it is better to protect even the EOC marker
+                        */
+                        /****** if ((tileno == ((j2k->cstr_info->tw * j2k->cstr_info->th) - 1)) &&
+                                (stoppack == (j2k->cstr_info->num - 1))) */
+                        if ((tileno == ((j2k->cstr_info->tw * j2k->cstr_info->th) - 1)) &&
+                                (tpno == (j2k->cstr_info->tile[tileno].num_tps - 1)) &&
+                                (stoppack == last_tp_pack))
+                            /* add the EOC len */
+                        {
+                            prot_len += 2;
+                        }
 
-                opj_event_msg(j2k->cinfo, EVT_INFO,
-                        "Tile %d has %d tile part(s)\n",
-                        tileno, j2k->cstr_info->tile[tileno].num_tps
-                        );
+                        /* let's add the EPBs */
+                        Psot += jpwl_epbs_add(
+                                    j2k, /* J2K handle */
+                                    jwmarker, /* pointer to JPWL markers list */
+                                    &jwmarker_num, /* pointer to the number of current markers */
+                                    OPJ_FALSE, /* latest */
+                                    OPJ_TRUE, /* packed */
+                                    OPJ_FALSE, /* inside MH */
+                                    &epb_index, /* pointer to EPB index */
+                                    pprot, /* protection type */
+                                    /****** (double) (j2k->cstr_info->tile[tileno].start_pos + sot_len + 2) + 0.0001, */ /* position */
+                                    (double)(j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos + sot_len + 2) +
+                                    0.0001, /* position */
+                                    tileno, /* number of tile */
+                                    0, /* length of pre-data */
+                                    prot_len /*4000*/ /* length of post-data */
+                                );
+                    }
 
-                /* for every tile part in the tile */
-                for (tpno = 0; tpno < j2k->cstr_info->tile[tileno].num_tps; tpno++, acc_tpno++) { 
-                
-                        int sot_len, Psot, Psotp, mm, epb_index = 0, prot_len = 0;
-                        unsigned long sot_pos, post_sod_pos;
-                        unsigned long int left_THmarks_len/*, epbs_len = 0*/;
-                        int startpack = 0, stoppack = j2k->cstr_info->packno;
-                        int first_tp_pack, last_tp_pack;
-                        jpwl_epb_ms_t *tph_epb = NULL;
-
-                        /****** sot_pos = j2k->cstr_info->tile[tileno].start_pos; */
-                        sot_pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos;
-                        cio_seek(cio, sot_pos + 2); 
-                        sot_len = cio_read(cio, 2); /* SOT Len */
-                        cio_skip(cio, 2);
-                        Psotp = cio_tell(cio);
-                        Psot = cio_read(cio, 4); /* tile length */
-
-                        /* a-priori length of the data dwelling between SOT and SOD */
-                        /****** post_sod_pos = j2k->cstr_info->tile[tileno].end_header + 1; */
-                        post_sod_pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_end_header + 1;
-                        left_THmarks_len = post_sod_pos - (sot_pos + sot_len + 2);
-
-                        /* add all the lengths of the JPWL markers which are len-ready and stay within SOT and SOD */
-                        for (mm = 0; mm < jwmarker_num; mm++) {
-                                if ((jwmarker[mm].pos >= sot_pos) && (jwmarker[mm].pos < post_sod_pos)) {
-                                        if (jwmarker[mm].len_ready)
-                                                left_THmarks_len += jwmarker[mm].len + 2;
-                                        else {
-                                                opj_event_msg(j2k->cinfo, EVT_ERROR, "MS %x in %f is not len-ready: could not set up TH EPB\n",
-                                                        jwmarker[mm].id, jwmarker[mm].dpos);                            
-                                                exit(1);
-                                        }
-                                }
-                        }
+                    startpack = packno;
+                    pprot = j2k->cp->pprot[packspec++];
+                }
 
-                        /****** if ((tilespec < JPWL_MAX_NO_TILESPECS) && (j2k->cp->hprot_TPH_tileno[tilespec] == tileno)) */
-                        if ((tilespec < JPWL_MAX_NO_TILESPECS) && (j2k->cp->hprot_TPH_tileno[tilespec] == acc_tpno))
-                                /* we got a specification from this tile part onwards */
-                                hprot = j2k->cp->hprot_TPH[tilespec++];
-                
-                        /* must this TPH have an EPB MS? */
-                        if (j2k->cp->epb_on && (hprot > 0)) {
-
-                                /* Create the EPB */
-                                if ((epb_mark = jpwl_epb_create(
-                                        j2k, /* this encoder handle */
-                                        OPJ_FALSE, /* is it the latest? in TPH, no for now (if huge data size in TPH, we'd need more) */
-                                        OPJ_TRUE, /* is it packed? yes for now */
-                                        tileno, /* we are in TPH */
-                                        epb_index++, /* its index is 0 (first) */
-                                        hprot, /* protection type parameters of following data */
-                                        sot_len + 2, /* pre-data length: only SOT */
-                                        left_THmarks_len /* post-data length: from SOT end to SOD inclusive */
-                                        ))) {
-                                        
-                                        /* Add this marker to the 'insertanda' list */
-                                        if (jwmarker_num < JPWL_MAX_NO_MARKERS) {
-                                                jwmarker[jwmarker_num].id = J2K_MS_EPB; /* its type */
-                                                jwmarker[jwmarker_num].m.epbmark = epb_mark; /* the EPB */
-                                                /****** jwmarker[jwmarker_num].pos = j2k->cstr_info->tile[tileno].start_pos + sot_len + 2; */ /* after SOT */
-                                                jwmarker[jwmarker_num].pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos + sot_len + 2; /* after SOT */
-                                                jwmarker[jwmarker_num].dpos = (double) jwmarker[jwmarker_num].pos; /* first first first! */
-                                                jwmarker[jwmarker_num].len = epb_mark->Lepb; /* its length */
-                                                jwmarker[jwmarker_num].len_ready = OPJ_TRUE; /* ready */
-                                                jwmarker[jwmarker_num].pos_ready = OPJ_TRUE; /* ready */
-                                                jwmarker[jwmarker_num].parms_ready = OPJ_TRUE; /* ready */
-                                                jwmarker[jwmarker_num].data_ready = OPJ_FALSE; /* not ready */
-                                                jwmarker_num++;
-                                        }
-
-                                        /* update Psot of the tile  */
-                                        Psot += epb_mark->Lepb + 2;
-
-                                        opj_event_msg(j2k->cinfo, EVT_INFO,
-                                                /***** "TPH EPB : tile %02d, prot. %d\n", */
-                                                "TPH EPB : tile %02d, part %02d, prot. %d\n",
-                                                /***** tileno, */
-                                                tileno, tpno,
-                                                hprot
-                                                );
-
-                                        /* save this TPH EPB address */
-                                        tph_epb = epb_mark;
-
-                                } else {
-                                        /* ooops, problems */
-                                        /****** opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create TPH EPB #%d\n", tileno); */
-                                        opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create TPH EPB in #%d,d\n", tileno, tpno);
-                                };
-
-                        }                               
-                
-                        startpack = 0;
-                        /* EPB MSs for UEP packet data protection in Tile Parts */
-                        /****** for (packno = 0; packno < j2k->cstr_info->num; packno++) { */
-                        /*first_tp_pack = (tpno > 0) ? (first_tp_pack + j2k->cstr_info->tile[tileno].tp[tpno - 1].tp_numpacks) : 0;*/
-                        first_tp_pack = j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pack;
-                        last_tp_pack = first_tp_pack + j2k->cstr_info->tile[tileno].tp[tpno].tp_numpacks - 1;
-                        for (packno = 0; packno < j2k->cstr_info->tile[tileno].tp[tpno].tp_numpacks; packno++) {
-
-                                /******** if ((packspec < JPWL_MAX_NO_PACKSPECS) &&
-                                        (j2k->cp->pprot_tileno[packspec] == tileno) && (j2k->cp->pprot_packno[packspec] == packno)) { */
-                                if ((packspec < JPWL_MAX_NO_PACKSPECS) &&
-                                        (j2k->cp->pprot_tileno[packspec] == acc_tpno) && (j2k->cp->pprot_packno[packspec] == packno)) {
-
-                                        /* we got a specification from this tile and packet onwards */
-                                        /* print the previous spec */
-                                        if (packno > 0) {
-                                                stoppack = packno - 1;                          
-                                                opj_event_msg(j2k->cinfo, EVT_INFO,
-                                                        /***** "UEP EPBs: tile %02d, packs. %02d-%02d (B %d-%d), prot. %d\n", */
-                                                        "UEP EPBs: tile %02d, part %02d, packs. %02d-%02d (B %d-%d), prot. %d\n",
-                                                        /***** tileno, */
-                                                        tileno, tpno,
-                                                        startpack,
-                                                        stoppack,
-                                                        /***** j2k->cstr_info->tile[tileno].packet[startpack].start_pos, */
-                                                        j2k->cstr_info->tile[tileno].packet[first_tp_pack + startpack].start_pos,
-                                                        /***** j2k->cstr_info->tile[tileno].packet[stoppack].end_pos, */
-                                                        j2k->cstr_info->tile[tileno].packet[first_tp_pack + stoppack].end_pos,
-                                                        pprot);
-
-                                                /***** prot_len = j2k->cstr_info->tile[tileno].packet[stoppack].end_pos + 1 -
-                                                        j2k->cstr_info->tile[tileno].packet[startpack].start_pos; */
-                                                prot_len = j2k->cstr_info->tile[tileno].packet[first_tp_pack + stoppack].end_pos + 1 -
-                                                        j2k->cstr_info->tile[tileno].packet[first_tp_pack + startpack].start_pos;
-
-                                                /*
-                                                  particular case: if this is the last header and the last packet,
-                                                  then it is better to protect even the EOC marker
-                                                */
-                                                /****** if ((tileno == ((j2k->cstr_info->tw * j2k->cstr_info->th) - 1)) &&
-                                                        (stoppack == (j2k->cstr_info->num - 1))) */
-                                                if ((tileno == ((j2k->cstr_info->tw * j2k->cstr_info->th) - 1)) &&
-                                                        (tpno == (j2k->cstr_info->tile[tileno].num_tps - 1)) &&
-                                                        (stoppack == last_tp_pack))
-                                                        /* add the EOC len */
-                                                        prot_len += 2;
-
-                                                /* let's add the EPBs */
-                                                Psot += jpwl_epbs_add(
-                                                        j2k, /* J2K handle */
-                                                        jwmarker, /* pointer to JPWL markers list */
-                                                        &jwmarker_num, /* pointer to the number of current markers */
-                                                        OPJ_FALSE, /* latest */
-                                                        OPJ_TRUE, /* packed */
-                                                        OPJ_FALSE, /* inside MH */
-                                                        &epb_index, /* pointer to EPB index */
-                                                        pprot, /* protection type */
-                                                        /****** (double) (j2k->cstr_info->tile[tileno].start_pos + sot_len + 2) + 0.0001, */ /* position */
-                                                        (double) (j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos + sot_len + 2) + 0.0001, /* position */
-                                                        tileno, /* number of tile */
-                                                        0, /* length of pre-data */
-                                                        prot_len /*4000*/ /* length of post-data */
-                                                        );
-                                        }
-
-                                        startpack = packno;
-                                        pprot = j2k->cp->pprot[packspec++];
-                                }
-
-                                /*printf("Tile %02d, pack %02d ==> %d\n", tileno, packno, pprot);*/
-                
-                        }
+                /*printf("Tile %02d, pack %02d ==> %d\n", tileno, packno, pprot);*/
 
-                        /* we are at the end: print the remaining spec */
-                        stoppack = packno - 1;
-                        if (pprot >= 0) {
-
-                                opj_event_msg(j2k->cinfo, EVT_INFO,
-                                        /**** "UEP EPBs: tile %02d, packs. %02d-%02d (B %d-%d), prot. %d\n", */
-                                        "UEP EPBs: tile %02d, part %02d, packs. %02d-%02d (B %d-%d), prot. %d\n",
-                                        /**** tileno, */
-                                        tileno, tpno,
-                                        startpack,
-                                        stoppack,
-                                        /***** j2k->image_info->tile[tileno].packet[startpack].start_pos,
-                                        j2k->image_info->tile[tileno].packet[stoppack].end_pos, */
-                                        j2k->cstr_info->tile[tileno].packet[first_tp_pack + startpack].start_pos,
-                                        j2k->cstr_info->tile[tileno].packet[first_tp_pack + stoppack].end_pos,
-                                        pprot);
-
-                                /***** prot_len = j2k->cstr_info->tile[tileno].packet[stoppack].end_pos + 1 -
-                                        j2k->cstr_info->tile[tileno].packet[startpack].start_pos; */
-                                prot_len = j2k->cstr_info->tile[tileno].packet[first_tp_pack + stoppack].end_pos + 1 -
-                                        j2k->cstr_info->tile[tileno].packet[first_tp_pack + startpack].start_pos;
-
-                                /*
-                                  particular case: if this is the last header and the last packet,
-                                  then it is better to protect even the EOC marker
-                                */
-                                /***** if ((tileno == ((j2k->cstr_info->tw * j2k->cstr_info->th) - 1)) &&
-                                        (stoppack == (j2k->cstr_info->num - 1))) */
-                                if ((tileno == ((j2k->cstr_info->tw * j2k->cstr_info->th) - 1)) &&
-                                        (tpno == (j2k->cstr_info->tile[tileno].num_tps - 1)) &&
-                                        (stoppack == last_tp_pack))
-                                        /* add the EOC len */
-                                        prot_len += 2;
-
-                                /* let's add the EPBs */
-                                Psot += jpwl_epbs_add(
-                                                        j2k, /* J2K handle */
-                                                        jwmarker, /* pointer to JPWL markers list */
-                                                        &jwmarker_num, /* pointer to the number of current markers */
-                                                        OPJ_TRUE, /* latest */
-                                                        OPJ_TRUE, /* packed */
-                                                        OPJ_FALSE, /* inside MH */
-                                                        &epb_index, /* pointer to EPB index */
-                                                        pprot, /* protection type */
-                                                        /***** (double) (j2k->cstr_info->tile[tileno].start_pos + sot_len + 2) + 0.0001,*/ /* position */
-                                                        (double) (j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos + sot_len + 2) + 0.0001, /* position */
-                                                        tileno, /* number of tile */
-                                                        0, /* length of pre-data */
-                                                        prot_len /*4000*/ /* length of post-data */
-                                                        );
-                        }
+            }
 
-                        /* we can now check if the TPH EPB was really the last one */
-                        if (tph_epb && (epb_index == 1)) {
-                                /* set the TPH EPB to be the last one in current header */
-                                tph_epb->Depb |= (unsigned char) ((OPJ_TRUE & 0x0001) << 6);
-                                tph_epb = NULL;
-                        }
+            /* we are at the end: print the remaining spec */
+            stoppack = packno - 1;
+            if (pprot >= 0) {
 
-                        /* write back Psot */
-                        cio_seek(cio, Psotp);
-                        cio_write(cio, Psot, 4);
-                
-                }
+                opj_event_msg(j2k->cinfo, EVT_INFO,
+                              /**** "UEP EPBs: tile %02d, packs. %02d-%02d (B %d-%d), prot. %d\n", */
+                              "UEP EPBs: tile %02d, part %02d, packs. %02d-%02d (B %d-%d), prot. %d\n",
+                              /**** tileno, */
+                              tileno, tpno,
+                              startpack,
+                              stoppack,
+                              /***** j2k->image_info->tile[tileno].packet[startpack].start_pos,
+                              j2k->image_info->tile[tileno].packet[stoppack].end_pos, */
+                              j2k->cstr_info->tile[tileno].packet[first_tp_pack + startpack].start_pos,
+                              j2k->cstr_info->tile[tileno].packet[first_tp_pack + stoppack].end_pos,
+                              pprot);
+
+                /***** prot_len = j2k->cstr_info->tile[tileno].packet[stoppack].end_pos + 1 -
+                        j2k->cstr_info->tile[tileno].packet[startpack].start_pos; */
+                prot_len = j2k->cstr_info->tile[tileno].packet[first_tp_pack + stoppack].end_pos
+                           + 1 -
+                           j2k->cstr_info->tile[tileno].packet[first_tp_pack + startpack].start_pos;
 
-        };
+                /*
+                  particular case: if this is the last header and the last packet,
+                  then it is better to protect even the EOC marker
+                */
+                /***** if ((tileno == ((j2k->cstr_info->tw * j2k->cstr_info->th) - 1)) &&
+                        (stoppack == (j2k->cstr_info->num - 1))) */
+                if ((tileno == ((j2k->cstr_info->tw * j2k->cstr_info->th) - 1)) &&
+                        (tpno == (j2k->cstr_info->tile[tileno].num_tps - 1)) &&
+                        (stoppack == last_tp_pack))
+                    /* add the EOC len */
+                {
+                    prot_len += 2;
+                }
 
-        /* reset the position */
-        cio_seek(cio, ciopos);
+                /* let's add the EPBs */
+                Psot += jpwl_epbs_add(
+                            j2k, /* J2K handle */
+                            jwmarker, /* pointer to JPWL markers list */
+                            &jwmarker_num, /* pointer to the number of current markers */
+                            OPJ_TRUE, /* latest */
+                            OPJ_TRUE, /* packed */
+                            OPJ_FALSE, /* inside MH */
+                            &epb_index, /* pointer to EPB index */
+                            pprot, /* protection type */
+                            /***** (double) (j2k->cstr_info->tile[tileno].start_pos + sot_len + 2) + 0.0001,*/ /* position */
+                            (double)(j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos + sot_len + 2) +
+                            0.0001, /* position */
+                            tileno, /* number of tile */
+                            0, /* length of pre-data */
+                            prot_len /*4000*/ /* length of post-data */
+                        );
+            }
 
-}
+            /* we can now check if the TPH EPB was really the last one */
+            if (tph_epb && (epb_index == 1)) {
+                /* set the TPH EPB to be the last one in current header */
+                tph_epb->Depb |= (unsigned char)((OPJ_TRUE & 0x0001) << 6);
+                tph_epb = NULL;
+            }
 
-void jpwl_dump_marks(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image) {
+            /* write back Psot */
+            cio_seek(cio, Psotp);
+            cio_write(cio, Psot, 4);
 
-        int mm;
-        unsigned long int old_size = j2k->cstr_info->codestream_size;
-        unsigned long int new_size = old_size;
-        int /*ciopos = cio_tell(cio),*/ soc_pos = j2k->cstr_info->main_head_start;
-        unsigned char *jpwl_buf, *orig_buf;
-        unsigned long int orig_pos;
-        double epbcoding_time = 0.0, esdcoding_time = 0.0;
-  (void)image;
-
-        /* Order JPWL markers according to their wishlist position */
-        qsort((void *) jwmarker, (size_t) jwmarker_num, sizeof (jpwl_marker_t), jpwl_markcomp);
-
-        /* compute markers total size */ 
-        for (mm = 0; mm < jwmarker_num; mm++) {
-                /*printf("%x, %d, %.10f, %d long\n", jwmarker[mm].id, jwmarker[mm].pos,
-                        jwmarker[mm].dpos, jwmarker[mm].len);*/
-                new_size += jwmarker[mm].len + 2;
         }
 
-        /* allocate a new buffer of proper size */
-        if (!(jpwl_buf = (unsigned char *) opj_malloc((size_t) (new_size + soc_pos) * sizeof(unsigned char)))) {
-                opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not allocate room for JPWL codestream buffer\n");
-                exit(1);
-        };
-
-        /* copy the jp2 part, if any */
-        orig_buf = jpwl_buf;
-        memcpy(jpwl_buf, cio->buffer, soc_pos);
-        jpwl_buf += soc_pos;
+    };
 
-        /* cycle through markers */
-        orig_pos = soc_pos + 0; /* start from the beginning */
-        cio_seek(cio, soc_pos + 0); /* rewind the original */
-        for (mm = 0; mm < jwmarker_num; mm++) {
+    /* reset the position */
+    cio_seek(cio, ciopos);
 
-                /*
-                need to copy a piece of the original codestream
-                if there is such
-                */
-                memcpy(jpwl_buf, cio_getbp(cio), jwmarker[mm].pos - orig_pos);
-                jpwl_buf += jwmarker[mm].pos - orig_pos;
-                orig_pos = jwmarker[mm].pos;
-                cio_seek(cio, orig_pos);
+}
 
-                /*
-                then write down the marker
-                */
-                switch (jwmarker[mm].id) {
+void jpwl_dump_marks(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image)
+{
+
+    int mm;
+    unsigned long int old_size = j2k->cstr_info->codestream_size;
+    unsigned long int new_size = old_size;
+    int /*ciopos = cio_tell(cio),*/ soc_pos = j2k->cstr_info->main_head_start;
+    unsigned char *jpwl_buf, *orig_buf;
+    unsigned long int orig_pos;
+    double epbcoding_time = 0.0, esdcoding_time = 0.0;
+    (void)image;
+
+    /* Order JPWL markers according to their wishlist position */
+    qsort((void *) jwmarker, (size_t) jwmarker_num, sizeof(jpwl_marker_t),
+          jpwl_markcomp);
+
+    /* compute markers total size */
+    for (mm = 0; mm < jwmarker_num; mm++) {
+        /*printf("%x, %d, %.10f, %d long\n", jwmarker[mm].id, jwmarker[mm].pos,
+                jwmarker[mm].dpos, jwmarker[mm].len);*/
+        new_size += jwmarker[mm].len + 2;
+    }
+
+    /* allocate a new buffer of proper size */
+    if (!(jpwl_buf = (unsigned char *) opj_malloc((size_t)(new_size + soc_pos) *
+                     sizeof(unsigned char)))) {
+        opj_event_msg(j2k->cinfo, EVT_ERROR,
+                      "Could not allocate room for JPWL codestream buffer\n");
+        exit(1);
+    };
+
+    /* copy the jp2 part, if any */
+    orig_buf = jpwl_buf;
+    memcpy(jpwl_buf, cio->buffer, soc_pos);
+    jpwl_buf += soc_pos;
+
+    /* cycle through markers */
+    orig_pos = soc_pos + 0; /* start from the beginning */
+    cio_seek(cio, soc_pos + 0); /* rewind the original */
+    for (mm = 0; mm < jwmarker_num; mm++) {
 
-                case J2K_MS_EPB:
-                        jpwl_epb_write(j2k, jwmarker[mm].m.epbmark, jpwl_buf);
-                        break;
+        /*
+        need to copy a piece of the original codestream
+        if there is such
+        */
+        memcpy(jpwl_buf, cio_getbp(cio), jwmarker[mm].pos - orig_pos);
+        jpwl_buf += jwmarker[mm].pos - orig_pos;
+        orig_pos = jwmarker[mm].pos;
+        cio_seek(cio, orig_pos);
 
-                case J2K_MS_EPC:
-                        jpwl_epc_write(j2k, jwmarker[mm].m.epcmark, jpwl_buf);
-                        break;
+        /*
+        then write down the marker
+        */
+        switch (jwmarker[mm].id) {
 
-                case J2K_MS_ESD:
-                        jpwl_esd_write(j2k, jwmarker[mm].m.esdmark, jpwl_buf);
-                        break;
+        case J2K_MS_EPB:
+            jpwl_epb_write(j2k, jwmarker[mm].m.epbmark, jpwl_buf);
+            break;
 
-                case J2K_MS_RED:
-                        memset(jpwl_buf, 0, jwmarker[mm].len + 2); /* placeholder */
-                        break;
+        case J2K_MS_EPC:
+            jpwl_epc_write(j2k, jwmarker[mm].m.epcmark, jpwl_buf);
+            break;
 
-                default:
-                        break;
-                };
+        case J2K_MS_ESD:
+            jpwl_esd_write(j2k, jwmarker[mm].m.esdmark, jpwl_buf);
+            break;
 
-                /* we update the markers struct */
-                if (j2k->cstr_info)
-                        j2k->cstr_info->marker[j2k->cstr_info->marknum - 1].pos = (jpwl_buf - orig_buf);
-                
-                /* we set the marker dpos to the new position in the JPWL codestream */
-                jwmarker[mm].dpos = (double) (jpwl_buf - orig_buf);
+        case J2K_MS_RED:
+            memset(jpwl_buf, 0, jwmarker[mm].len + 2); /* placeholder */
+            break;
 
-                /* advance JPWL buffer position */
-                jpwl_buf += jwmarker[mm].len + 2;
+        default:
+            break;
+        };
 
+        /* we update the markers struct */
+        if (j2k->cstr_info) {
+            j2k->cstr_info->marker[j2k->cstr_info->marknum - 1].pos =
+                (jpwl_buf - orig_buf);
         }
 
-        /* finish remaining original codestream */
-        memcpy(jpwl_buf, cio_getbp(cio), old_size - (orig_pos - soc_pos));
-        jpwl_buf += old_size - (orig_pos - soc_pos);
-        cio_seek(cio, soc_pos + old_size);
-        
-        /*
-        update info file based on added markers
-        */
-        if (!jpwl_update_info(j2k, jwmarker, jwmarker_num))
-                opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not update OPJ cstr_info structure\n");
+        /* we set the marker dpos to the new position in the JPWL codestream */
+        jwmarker[mm].dpos = (double)(jpwl_buf - orig_buf);
 
-        /* now we need to repass some markers and fill their data fields */
-        
-        /* first of all, DL and Pcrc in EPCs */ 
-        for (mm = 0; mm < jwmarker_num; mm++) {
+        /* advance JPWL buffer position */
+        jpwl_buf += jwmarker[mm].len + 2;
 
-                /* find the EPCs */
-                if (jwmarker[mm].id == J2K_MS_EPC) {
+    }
 
-                        int epc_pos = (int) jwmarker[mm].dpos, pp;
-                        unsigned short int mycrc = 0x0000;
+    /* finish remaining original codestream */
+    memcpy(jpwl_buf, cio_getbp(cio), old_size - (orig_pos - soc_pos));
+    jpwl_buf += old_size - (orig_pos - soc_pos);
+    cio_seek(cio, soc_pos + old_size);
 
-                        /* fix and fill the DL field */
-                        jwmarker[mm].m.epcmark->DL = new_size;
-                        orig_buf[epc_pos + 6] = (unsigned char) (jwmarker[mm].m.epcmark->DL >> 24);
-                        orig_buf[epc_pos + 7] = (unsigned char) (jwmarker[mm].m.epcmark->DL >> 16);
-                        orig_buf[epc_pos + 8] = (unsigned char) (jwmarker[mm].m.epcmark->DL >> 8);
-                        orig_buf[epc_pos + 9] = (unsigned char) (jwmarker[mm].m.epcmark->DL >> 0);
+    /*
+    update info file based on added markers
+    */
+    if (!jpwl_update_info(j2k, jwmarker, jwmarker_num)) {
+        opj_event_msg(j2k->cinfo, EVT_ERROR,
+                      "Could not update OPJ cstr_info structure\n");
+    }
 
-                        /* compute the CRC field (excluding itself) */
-                        for (pp = 0; pp < 4; pp++)
-                                jpwl_updateCRC16(&mycrc, orig_buf[epc_pos + pp]);
-                        for (pp = 6; pp < (jwmarker[mm].len + 2); pp++)
-                                jpwl_updateCRC16(&mycrc, orig_buf[epc_pos + pp]);
+    /* now we need to repass some markers and fill their data fields */
 
-                        /* fix and fill the CRC */
-                        jwmarker[mm].m.epcmark->Pcrc = mycrc;
-                        orig_buf[epc_pos + 4] = (unsigned char) (jwmarker[mm].m.epcmark->Pcrc >> 8);
-                        orig_buf[epc_pos + 5] = (unsigned char) (jwmarker[mm].m.epcmark->Pcrc >> 0);
+    /* first of all, DL and Pcrc in EPCs */
+    for (mm = 0; mm < jwmarker_num; mm++) {
 
-                }
-        }
+        /* find the EPCs */
+        if (jwmarker[mm].id == J2K_MS_EPC) {
 
-        /* then, sensitivity data in ESDs */ 
-        esdcoding_time = opj_clock();
-        for (mm = 0; mm < jwmarker_num; mm++) {
+            int epc_pos = (int) jwmarker[mm].dpos, pp;
+            unsigned short int mycrc = 0x0000;
 
-                /* find the ESDs */
-                if (jwmarker[mm].id == J2K_MS_ESD) {
+            /* fix and fill the DL field */
+            jwmarker[mm].m.epcmark->DL = new_size;
+            orig_buf[epc_pos + 6] = (unsigned char)(jwmarker[mm].m.epcmark->DL >> 24);
+            orig_buf[epc_pos + 7] = (unsigned char)(jwmarker[mm].m.epcmark->DL >> 16);
+            orig_buf[epc_pos + 8] = (unsigned char)(jwmarker[mm].m.epcmark->DL >> 8);
+            orig_buf[epc_pos + 9] = (unsigned char)(jwmarker[mm].m.epcmark->DL >> 0);
 
-                        /* remember that they are now in a new position (dpos) */
-                        int esd_pos = (int) jwmarker[mm].dpos;
+            /* compute the CRC field (excluding itself) */
+            for (pp = 0; pp < 4; pp++) {
+                jpwl_updateCRC16(&mycrc, orig_buf[epc_pos + pp]);
+            }
+            for (pp = 6; pp < (jwmarker[mm].len + 2); pp++) {
+                jpwl_updateCRC16(&mycrc, orig_buf[epc_pos + pp]);
+            }
 
-                        jpwl_esd_fill(j2k, jwmarker[mm].m.esdmark, &orig_buf[esd_pos]);
-                
-                }
+            /* fix and fill the CRC */
+            jwmarker[mm].m.epcmark->Pcrc = mycrc;
+            orig_buf[epc_pos + 4] = (unsigned char)(jwmarker[mm].m.epcmark->Pcrc >> 8);
+            orig_buf[epc_pos + 5] = (unsigned char)(jwmarker[mm].m.epcmark->Pcrc >> 0);
 
         }
-        esdcoding_time = opj_clock() - esdcoding_time;
-        if (j2k->cp->esd_on)
-                opj_event_msg(j2k->cinfo, EVT_INFO, "ESDs sensitivities computed in %f s\n", esdcoding_time);
+    }
 
-        /* finally, RS or CRC parity in EPBs */ 
-        epbcoding_time = opj_clock();
-        for (mm = 0; mm < jwmarker_num; mm++) {
+    /* then, sensitivity data in ESDs */
+    esdcoding_time = opj_clock();
+    for (mm = 0; mm < jwmarker_num; mm++) {
 
-                /* find the EPBs */
-                if (jwmarker[mm].id == J2K_MS_EPB) {
-
-                        /* remember that they are now in a new position (dpos) */
-                        int nn, accum_len;
-
-                        /* let's see how many EPBs are following this one, included itself */
-                        /* for this to work, we suppose that the markers are correctly ordered */
-                        /* and, overall, that they are in packed mode inside headers */
-                        accum_len = 0;
-                        for (nn = mm; (nn < jwmarker_num) && (jwmarker[nn].id == J2K_MS_EPB) &&
-                                (jwmarker[nn].pos == jwmarker[mm].pos); nn++)
-                                accum_len += jwmarker[nn].m.epbmark->Lepb + 2;
-
-                        /* fill the current (first) EPB with post-data starting from the computed position */
-                        jpwl_epb_fill(j2k, jwmarker[mm].m.epbmark, &orig_buf[(int) jwmarker[mm].dpos],
-                                &orig_buf[(int) jwmarker[mm].dpos + accum_len]);
-                
-                        /* fill the remaining EPBs in the header with post-data starting from the last position */
-                        for (nn = mm + 1; (nn < jwmarker_num) && (jwmarker[nn].id == J2K_MS_EPB) &&
-                                (jwmarker[nn].pos == jwmarker[mm].pos); nn++)
-                                jpwl_epb_fill(j2k, jwmarker[nn].m.epbmark, &orig_buf[(int) jwmarker[nn].dpos], NULL);
-
-                        /* skip all the processed EPBs */
-                        mm = nn - 1;
-                }
+        /* find the ESDs */
+        if (jwmarker[mm].id == J2K_MS_ESD) {
+
+            /* remember that they are now in a new position (dpos) */
+            int esd_pos = (int) jwmarker[mm].dpos;
 
+            jpwl_esd_fill(j2k, jwmarker[mm].m.esdmark, &orig_buf[esd_pos]);
+
+        }
+
+    }
+    esdcoding_time = opj_clock() - esdcoding_time;
+    if (j2k->cp->esd_on) {
+        opj_event_msg(j2k->cinfo, EVT_INFO, "ESDs sensitivities computed in %f s\n",
+                      esdcoding_time);
+    }
+
+    /* finally, RS or CRC parity in EPBs */
+    epbcoding_time = opj_clock();
+    for (mm = 0; mm < jwmarker_num; mm++) {
+
+        /* find the EPBs */
+        if (jwmarker[mm].id == J2K_MS_EPB) {
+
+            /* remember that they are now in a new position (dpos) */
+            int nn, accum_len;
+
+            /* let's see how many EPBs are following this one, included itself */
+            /* for this to work, we suppose that the markers are correctly ordered */
+            /* and, overall, that they are in packed mode inside headers */
+            accum_len = 0;
+            for (nn = mm; (nn < jwmarker_num) && (jwmarker[nn].id == J2K_MS_EPB) &&
+                    (jwmarker[nn].pos == jwmarker[mm].pos); nn++) {
+                accum_len += jwmarker[nn].m.epbmark->Lepb + 2;
+            }
+
+            /* fill the current (first) EPB with post-data starting from the computed position */
+            jpwl_epb_fill(j2k, jwmarker[mm].m.epbmark, &orig_buf[(int) jwmarker[mm].dpos],
+                          &orig_buf[(int) jwmarker[mm].dpos + accum_len]);
+
+            /* fill the remaining EPBs in the header with post-data starting from the last position */
+            for (nn = mm + 1; (nn < jwmarker_num) && (jwmarker[nn].id == J2K_MS_EPB) &&
+                    (jwmarker[nn].pos == jwmarker[mm].pos); nn++) {
+                jpwl_epb_fill(j2k, jwmarker[nn].m.epbmark, &orig_buf[(int) jwmarker[nn].dpos],
+                              NULL);
+            }
+
+            /* skip all the processed EPBs */
+            mm = nn - 1;
         }
-        epbcoding_time = opj_clock() - epbcoding_time;
-        if (j2k->cp->epb_on)
-                opj_event_msg(j2k->cinfo, EVT_INFO, "EPBs redundancy computed in %f s\n", epbcoding_time);
-
-        /* free original cio buffer and set it to the JPWL one */
-        opj_free(cio->buffer);
-        cio->cinfo = cio->cinfo; /* no change */
-        cio->openmode = cio->openmode; /* no change */
-        cio->buffer = orig_buf;
-        cio->length = new_size + soc_pos;
-        cio->start = cio->buffer;
-        cio->end = cio->buffer + cio->length;
-        cio->bp = cio->buffer;
-        cio_seek(cio, soc_pos + new_size);
+
+    }
+    epbcoding_time = opj_clock() - epbcoding_time;
+    if (j2k->cp->epb_on) {
+        opj_event_msg(j2k->cinfo, EVT_INFO, "EPBs redundancy computed in %f s\n",
+                      epbcoding_time);
+    }
+
+    /* free original cio buffer and set it to the JPWL one */
+    opj_free(cio->buffer);
+    cio->cinfo = cio->cinfo; /* no change */
+    cio->openmode = cio->openmode; /* no change */
+    cio->buffer = orig_buf;
+    cio->length = new_size + soc_pos;
+    cio->start = cio->buffer;
+    cio->end = cio->buffer + cio->length;
+    cio->bp = cio->buffer;
+    cio_seek(cio, soc_pos + new_size);
 
 }
 
 
-void j2k_read_epc(opj_j2k_t *j2k) {
-        unsigned long int DL, Lepcp, Pcrcp, l;
-        unsigned short int Lepc, Pcrc = 0x0000;
-        unsigned char Pepc;     
-        opj_cio_t *cio = j2k->cio;
-        const char *ans1;
-
-        /* Simply read the EPC parameters */
-        Lepcp = cio_tell(cio);
-        Lepc = cio_read(cio, 2);
-        Pcrcp = cio_tell(cio);
-        cio_skip(cio, 2); /* Pcrc */
-        DL = cio_read(cio, 4);
-        Pepc = cio_read(cio, 1);
-
-        /* compute Pcrc */
-        cio_seek(cio, Lepcp - 2);
-
-                /* Marker */
-                jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1)); 
-                jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1)); 
-
-                /* Length */
-                jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1)); 
-                jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1)); 
-
-                /* skip Pcrc */
-                cio_skip(cio, 2);
-
-                /* read all remaining */
-                for (l = 4; l < Lepc; l++)
-                        jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1)); 
-
-                /* check Pcrc with the result */
-                cio_seek(cio, Pcrcp);
-                ans1 = (Pcrc == (unsigned short int) cio_read(cio, 2)) ? "crc-ok" : "crc-ko";
-
-        /* now we write them to screen */
-        opj_event_msg(j2k->cinfo, EVT_INFO, 
-                "EPC(%u,%d): %s, DL=%d%s %s %s\n",
-                Lepcp - 2,
-                Lepc,
-                ans1,
-                DL, /* data length this EPC is referring to */
-                (Pepc & 0x10) ? ", esd" : "", /* ESD is present */
-                (Pepc & 0x20) ? ", red" : "", /* RED is present */
-                (Pepc & 0x40) ? ", epb" : ""); /* EPB is present */
-
-        cio_seek(cio, Lepcp + Lepc);  
+void j2k_read_epc(opj_j2k_t *j2k)
+{
+    unsigned long int DL, Lepcp, Pcrcp, l;
+    unsigned short int Lepc, Pcrc = 0x0000;
+    unsigned char Pepc;
+    opj_cio_t *cio = j2k->cio;
+    const char *ans1;
+
+    /* Simply read the EPC parameters */
+    Lepcp = cio_tell(cio);
+    Lepc = cio_read(cio, 2);
+    Pcrcp = cio_tell(cio);
+    cio_skip(cio, 2); /* Pcrc */
+    DL = cio_read(cio, 4);
+    Pepc = cio_read(cio, 1);
+
+    /* compute Pcrc */
+    cio_seek(cio, Lepcp - 2);
+
+    /* Marker */
+    jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1));
+    jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1));
+
+    /* Length */
+    jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1));
+    jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1));
+
+    /* skip Pcrc */
+    cio_skip(cio, 2);
+
+    /* read all remaining */
+    for (l = 4; l < Lepc; l++) {
+        jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1));
+    }
+
+    /* check Pcrc with the result */
+    cio_seek(cio, Pcrcp);
+    ans1 = (Pcrc == (unsigned short int) cio_read(cio, 2)) ? "crc-ok" : "crc-ko";
+
+    /* now we write them to screen */
+    opj_event_msg(j2k->cinfo, EVT_INFO,
+                  "EPC(%u,%d): %s, DL=%d%s %s %s\n",
+                  Lepcp - 2,
+                  Lepc,
+                  ans1,
+                  DL, /* data length this EPC is referring to */
+                  (Pepc & 0x10) ? ", esd" : "", /* ESD is present */
+                  (Pepc & 0x20) ? ", red" : "", /* RED is present */
+                  (Pepc & 0x40) ? ", epb" : ""); /* EPB is present */
+
+    cio_seek(cio, Lepcp + Lepc);
 }
 
 #if 0
-void j2k_write_epc(opj_j2k_t *j2k) {
+void j2k_write_epc(opj_j2k_t *j2k)
+{
 
-        unsigned long int DL, Lepcp, Pcrcp, l;
-        unsigned short int Lepc, Pcrc;
-        unsigned char Pepc;     
+    unsigned long int DL, Lepcp, Pcrcp, l;
+    unsigned short int Lepc, Pcrc;
+    unsigned char Pepc;
 
-        opj_cio_t *cio = j2k->cio;
+    opj_cio_t *cio = j2k->cio;
 
-        cio_write(cio, J2K_MS_EPC, 2);  /* EPC */
-        Lepcp = cio_tell(cio);
-        cio_skip(cio, 2);
+    cio_write(cio, J2K_MS_EPC, 2);  /* EPC */
+    Lepcp = cio_tell(cio);
+    cio_skip(cio, 2);
 
-        /* CRC-16 word of the EPC */
-        Pcrc = 0x0000; /* initialize */
-        Pcrcp = cio_tell(cio);
-        cio_write(cio, Pcrc, 2); /* Pcrc placeholder*/
+    /* CRC-16 word of the EPC */
+    Pcrc = 0x0000; /* initialize */
+    Pcrcp = cio_tell(cio);
+    cio_write(cio, Pcrc, 2); /* Pcrc placeholder*/
 
-        /* data length of the EPC protection domain */
-        DL = 0x00000000; /* we leave this set to 0, as if the information is not available */
-        cio_write(cio, DL, 4);   /* DL */
+    /* data length of the EPC protection domain */
+    DL = 0x00000000; /* we leave this set to 0, as if the information is not available */
+    cio_write(cio, DL, 4);   /* DL */
 
-        /* jpwl capabilities */
-        Pepc = 0x00;
-        cio_write(cio, Pepc, 1); /* Pepc */
+    /* jpwl capabilities */
+    Pepc = 0x00;
+    cio_write(cio, Pepc, 1); /* Pepc */
 
-        /* ID section */
-        /* no ID's, as of now */
+    /* ID section */
+    /* no ID's, as of now */
 
-        Lepc = (unsigned short) (cio_tell(cio) - Lepcp);
-        cio_seek(cio, Lepcp);
-        cio_write(cio, Lepc, 2); /* Lepc */
+    Lepc = (unsigned short)(cio_tell(cio) - Lepcp);
+    cio_seek(cio, Lepcp);
+    cio_write(cio, Lepc, 2); /* Lepc */
 
-        /* compute Pcrc */
-        cio_seek(cio, Lepcp - 2);
+    /* compute Pcrc */
+    cio_seek(cio, Lepcp - 2);
 
-                /* Marker */
-                jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1)); 
-                jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1)); 
+    /* Marker */
+    jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1));
+    jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1));
 
-                /* Length */
-                jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1)); 
-                jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1)); 
+    /* Length */
+    jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1));
+    jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1));
 
-                /* skip Pcrc */
-                cio_skip(cio, 2);
+    /* skip Pcrc */
+    cio_skip(cio, 2);
 
-                /* read all remaining */
-                for (l = 4; l < Lepc; l++)
-                        jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1)); 
+    /* read all remaining */
+    for (l = 4; l < Lepc; l++) {
+        jpwl_updateCRC16(&Pcrc, (unsigned char) cio_read(cio, 1));
+    }
 
-                /* fill Pcrc with the result */
-                cio_seek(cio, Pcrcp);
-                cio_write(cio, Pcrc, 2);
+    /* fill Pcrc with the result */
+    cio_seek(cio, Pcrcp);
+    cio_write(cio, Pcrc, 2);
 
-        cio_seek(cio, Lepcp + Lepc);
+    cio_seek(cio, Lepcp + Lepc);
 
-        /* marker struct update */
-        j2k_add_marker(j2k->cstr_info, J2K_MS_EPC, Lepcp - 2, Lepc + 2);
+    /* marker struct update */
+    j2k_add_marker(j2k->cstr_info, J2K_MS_EPC, Lepcp - 2, Lepc + 2);
 
 }
 #endif
 
-void j2k_read_epb(opj_j2k_t *j2k) {
-        unsigned long int LDPepb, Pepb;
-        unsigned short int Lepb;
-        unsigned char Depb;
-        char str1[25] = "";
-        opj_bool status;
-        static opj_bool first_in_tph = OPJ_TRUE;
-        int type, pre_len, post_len;
-        static unsigned char *redund = NULL;
-        
-        opj_cio_t *cio = j2k->cio;
-
-        /* B/W = 45, RGB = 51 */
-        /*           SIZ   SIZ_FIELDS     SIZ_COMPS               FOLLOWING_MARKER */
-        int skipnum = 2  +     38     + 3 * j2k->cp->exp_comps  +         2;
-
-        if (j2k->cp->correct) {
-
-                /* go back to EPB marker value */
-                cio_seek(cio, cio_tell(cio) - 2);
-
-                /* we need to understand where we are */
-                if (j2k->state == J2K_STATE_MH) {
-                        /* we are in MH */
-                        type = 0; /* MH */
-                        pre_len = skipnum; /* SOC+SIZ */
-                        post_len = -1; /* auto */
-
-                } else if ((j2k->state == J2K_STATE_TPH) && first_in_tph) {
-                        /* we are in TPH */
-                        type = 1; /* TPH */
-                        pre_len = 12; /* SOC+SIZ */
-                        first_in_tph = OPJ_FALSE;
-                        post_len = -1; /* auto */
+void j2k_read_epb(opj_j2k_t *j2k)
+{
+    unsigned long int LDPepb, Pepb;
+    unsigned short int Lepb;
+    unsigned char Depb;
+    char str1[25] = "";
+    opj_bool status;
+    static opj_bool first_in_tph = OPJ_TRUE;
+    int type, pre_len, post_len;
+    static unsigned char *redund = NULL;
+
+    opj_cio_t *cio = j2k->cio;
+
+    /* B/W = 45, RGB = 51 */
+    /*           SIZ   SIZ_FIELDS     SIZ_COMPS               FOLLOWING_MARKER */
+    int skipnum = 2  +     38     + 3 * j2k->cp->exp_comps  +         2;
+
+    if (j2k->cp->correct) {
+
+        /* go back to EPB marker value */
+        cio_seek(cio, cio_tell(cio) - 2);
+
+        /* we need to understand where we are */
+        if (j2k->state == J2K_STATE_MH) {
+            /* we are in MH */
+            type = 0; /* MH */
+            pre_len = skipnum; /* SOC+SIZ */
+            post_len = -1; /* auto */
+
+        } else if ((j2k->state == J2K_STATE_TPH) && first_in_tph) {
+            /* we are in TPH */
+            type = 1; /* TPH */
+            pre_len = 12; /* SOC+SIZ */
+            first_in_tph = OPJ_FALSE;
+            post_len = -1; /* auto */
 
-                } else {
-                        /* we are elsewhere */
-                        type = 2; /* other */
-                        pre_len = 0; /* nada */
-                        post_len = -1; /* auto */
+        } else {
+            /* we are elsewhere */
+            type = 2; /* other */
+            pre_len = 0; /* nada */
+            post_len = -1; /* auto */
 
-                }
+        }
 
-                /* call EPB corrector */
-                /*printf("before %x, ", redund);*/
-                status = jpwl_epb_correct(j2k,      /* J2K decompressor handle */
-                                                                  cio->bp,  /* pointer to EPB in codestream buffer */
-                                                                  type,     /* EPB type: MH */
-                                                                  pre_len,  /* length of pre-data */
-                                                                  post_len, /* length of post-data: -1 means auto */
-                                                                  NULL,     /* do everything auto */
-                                                                  &redund
-                                                                 );
-                /*printf("after %x\n", redund);*/
-
-                /* Read the (possibly corrected) EPB parameters */
-                cio_skip(cio, 2);
-                Lepb = cio_read(cio, 2);
-                Depb = cio_read(cio, 1);
-                LDPepb = cio_read(cio, 4);
-                Pepb = cio_read(cio, 4);
-
-                if (!status) {
-
-                        opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL correction could not be performed\n");
-
-                        /* advance to EPB endpoint */
-                        cio_skip(cio, Lepb + 2);  
-
-                        return;
-                }
+        /* call EPB corrector */
+        /*printf("before %x, ", redund);*/
+        status = jpwl_epb_correct(j2k,      /* J2K decompressor handle */
+                                  cio->bp,  /* pointer to EPB in codestream buffer */
+                                  type,     /* EPB type: MH */
+                                  pre_len,  /* length of pre-data */
+                                  post_len, /* length of post-data: -1 means auto */
+                                  NULL,     /* do everything auto */
+                                  &redund
+                                 );
+        /*printf("after %x\n", redund);*/
+
+        /* Read the (possibly corrected) EPB parameters */
+        cio_skip(cio, 2);
+        Lepb = cio_read(cio, 2);
+        Depb = cio_read(cio, 1);
+        LDPepb = cio_read(cio, 4);
+        Pepb = cio_read(cio, 4);
 
-                /* last in current header? */
-                if (Depb & 0x40) {
-                        redund = NULL; /* reset the pointer to L4 buffer */
-                        first_in_tph = OPJ_TRUE;
-                }
+        if (!status) {
 
-                /* advance to EPB endpoint */
-                cio_skip(cio, Lepb - 11);  
+            opj_event_msg(j2k->cinfo, EVT_ERROR,
+                          "JPWL correction could not be performed\n");
 
-        } else {
+            /* advance to EPB endpoint */
+            cio_skip(cio, Lepb + 2);
 
-                /* Simply read the EPB parameters */
-                Lepb = cio_read(cio, 2);
-                Depb = cio_read(cio, 1);
-                LDPepb = cio_read(cio, 4);
-                Pepb = cio_read(cio, 4);
-
-                /* What does Pepb tells us about the protection method? */
-                if (((Pepb & 0xF0000000) >> 28) == 0)
-                        sprintf(str1, "pred"); /* predefined */
-                else if (((Pepb & 0xF0000000) >> 28) == 1)
-                        sprintf(str1, "crc-%lu", 16 * ((Pepb & 0x00000001) + 1)); /* CRC mode */
-                else if (((Pepb & 0xF0000000) >> 28) == 2)
-                        sprintf(str1, "rs(%lu,32)", (Pepb & 0x0000FF00) >> 8); /* RS mode */
-                else if (Pepb == 0xFFFFFFFF)
-                        sprintf(str1, "nometh"); /* RS mode */
-                else
-                        sprintf(str1, "unknown"); /* unknown */
-
-                /* Now we write them to screen */
-                opj_event_msg(j2k->cinfo, EVT_INFO,
-                        "EPB(%d): (%sl, %sp, %u), %lu, %s\n",
-                        cio_tell(cio) - 13,
-                        (Depb & 0x40) ? "" : "n", /* latest EPB or not? */
-                        (Depb & 0x80) ? "" : "n", /* packed or unpacked EPB? */
-                        (Depb & 0x3F), /* EPB index value */
-                        LDPepb, /*length of the data protected by the EPB */
-                        str1); /* protection method */
-
-                cio_skip(cio, Lepb - 11);  
+            return;
+        }
+
+        /* last in current header? */
+        if (Depb & 0x40) {
+            redund = NULL; /* reset the pointer to L4 buffer */
+            first_in_tph = OPJ_TRUE;
         }
+
+        /* advance to EPB endpoint */
+        cio_skip(cio, Lepb - 11);
+
+    } else {
+
+        /* Simply read the EPB parameters */
+        Lepb = cio_read(cio, 2);
+        Depb = cio_read(cio, 1);
+        LDPepb = cio_read(cio, 4);
+        Pepb = cio_read(cio, 4);
+
+        /* What does Pepb tells us about the protection method? */
+        if (((Pepb & 0xF0000000) >> 28) == 0) {
+            sprintf(str1, "pred");    /* predefined */
+        } else if (((Pepb & 0xF0000000) >> 28) == 1) {
+            sprintf(str1, "crc-%lu", 16 * ((Pepb & 0x00000001) + 1));    /* CRC mode */
+        } else if (((Pepb & 0xF0000000) >> 28) == 2) {
+            sprintf(str1, "rs(%lu,32)", (Pepb & 0x0000FF00) >> 8);    /* RS mode */
+        } else if (Pepb == 0xFFFFFFFF) {
+            sprintf(str1, "nometh");    /* RS mode */
+        } else {
+            sprintf(str1, "unknown");    /* unknown */
+        }
+
+        /* Now we write them to screen */
+        opj_event_msg(j2k->cinfo, EVT_INFO,
+                      "EPB(%d): (%sl, %sp, %u), %lu, %s\n",
+                      cio_tell(cio) - 13,
+                      (Depb & 0x40) ? "" : "n", /* latest EPB or not? */
+                      (Depb & 0x80) ? "" : "n", /* packed or unpacked EPB? */
+                      (Depb & 0x3F), /* EPB index value */
+                      LDPepb, /*length of the data protected by the EPB */
+                      str1); /* protection method */
+
+        cio_skip(cio, Lepb - 11);
+    }
 }
 
-void j2k_write_epb(opj_j2k_t *j2k) {
-        unsigned long int LDPepb, Pepb, Lepbp;
-        unsigned short int Lepb;
-        unsigned char Depb;
+void j2k_write_epb(opj_j2k_t *j2k)
+{
+    unsigned long int LDPepb, Pepb, Lepbp;
+    unsigned short int Lepb;
+    unsigned char Depb;
 
-        opj_cio_t *cio = j2k->cio;
+    opj_cio_t *cio = j2k->cio;
 
-        cio_write(cio, J2K_MS_EPB, 2);  /* EPB */
-        Lepbp = cio_tell(cio);
-        cio_skip(cio, 2);
+    cio_write(cio, J2K_MS_EPB, 2);  /* EPB */
+    Lepbp = cio_tell(cio);
+    cio_skip(cio, 2);
 
-        /* EPB style */
-        Depb = 0x00; /* test */
-        cio_write(cio, Depb, 1);   /* Depb */
+    /* EPB style */
+    Depb = 0x00; /* test */
+    cio_write(cio, Depb, 1);   /* Depb */
 
-        /* length of the data to be protected by this EPB */
-        LDPepb = 0x00000000; /* test */
-        cio_write(cio, LDPepb, 4);   /* LDPepb */
+    /* length of the data to be protected by this EPB */
+    LDPepb = 0x00000000; /* test */
+    cio_write(cio, LDPepb, 4);   /* LDPepb */
 
-        /* next error correction tool */
-        Pepb = 0x00000000; /* test */
-        cio_write(cio, Pepb, 4);   /* Pepb */
+    /* next error correction tool */
+    Pepb = 0x00000000; /* test */
+    cio_write(cio, Pepb, 4);   /* Pepb */
 
-        /* EPB data */
-        /* no data, as of now */
+    /* EPB data */
+    /* no data, as of now */
 
-        Lepb = (unsigned short) (cio_tell(cio) - Lepbp);
-        cio_seek(cio, Lepbp);
-        cio_write(cio, Lepb, 2);                /* Lepb */
+    Lepb = (unsigned short)(cio_tell(cio) - Lepbp);
+    cio_seek(cio, Lepbp);
+    cio_write(cio, Lepb, 2);                /* Lepb */
 
-        cio_seek(cio, Lepbp + Lepb);
+    cio_seek(cio, Lepbp + Lepb);
 
-        /* marker struct update */
-        j2k_add_marker(j2k->cstr_info, J2K_MS_EPB, Lepbp - 2, Lepb + 2);
+    /* marker struct update */
+    j2k_add_marker(j2k->cstr_info, J2K_MS_EPB, Lepbp - 2, Lepb + 2);
 }
 
-void j2k_read_esd(opj_j2k_t *j2k) {
-        unsigned short int Lesd, Cesd;
-        unsigned char Pesd;
+void j2k_read_esd(opj_j2k_t *j2k)
+{
+    unsigned short int Lesd, Cesd;
+    unsigned char Pesd;
 
-        int cesdsize = (j2k->image->numcomps >= 257) ? 2 : 1;
+    int cesdsize = (j2k->image->numcomps >= 257) ? 2 : 1;
 
-        char str1[4][4] = {"p", "br", "pr", "res"};
-        char str2[8][8] = {"res", "mse", "mse-r", "psnr", "psnr-i", "maxerr", "tse", "res"};
-        
-        opj_cio_t *cio = j2k->cio;
+    char str1[4][4] = {"p", "br", "pr", "res"};
+    char str2[8][8] = {"res", "mse", "mse-r", "psnr", "psnr-i", "maxerr", "tse", "res"};
 
-        /* Simply read the ESD parameters */
-        Lesd = cio_read(cio, 2);
-        Cesd = cio_read(cio, cesdsize);
-        Pesd = cio_read(cio, 1);
+    opj_cio_t *cio = j2k->cio;
 
-        /* Now we write them to screen */
-        opj_event_msg(j2k->cinfo, EVT_INFO,
-                "ESD(%d): c%d, %s, %s, %s, %s, %s\n",
-                cio_tell(cio) - (5 + cesdsize),
-                Cesd, /* component number for this ESD */
-                str1[(Pesd & (unsigned char) 0xC0) >> 6], /* addressing mode */
-                str2[(Pesd & (unsigned char) 0x38) >> 3], /* sensitivity type */
-                ((Pesd & (unsigned char) 0x04) >> 2) ? "2Bs" : "1Bs",
-                ((Pesd & (unsigned char) 0x02) >> 1) ? "4Ba" : "2Ba",
-                (Pesd & (unsigned char) 0x01) ? "avgc" : "");
-
-        cio_skip(cio, Lesd - (3 + cesdsize));  
+    /* Simply read the ESD parameters */
+    Lesd = cio_read(cio, 2);
+    Cesd = cio_read(cio, cesdsize);
+    Pesd = cio_read(cio, 1);
+
+    /* Now we write them to screen */
+    opj_event_msg(j2k->cinfo, EVT_INFO,
+                  "ESD(%d): c%d, %s, %s, %s, %s, %s\n",
+                  cio_tell(cio) - (5 + cesdsize),
+                  Cesd, /* component number for this ESD */
+                  str1[(Pesd & (unsigned char) 0xC0) >> 6], /* addressing mode */
+                  str2[(Pesd & (unsigned char) 0x38) >> 3], /* sensitivity type */
+                  ((Pesd & (unsigned char) 0x04) >> 2) ? "2Bs" : "1Bs",
+                  ((Pesd & (unsigned char) 0x02) >> 1) ? "4Ba" : "2Ba",
+                  (Pesd & (unsigned char) 0x01) ? "avgc" : "");
+
+    cio_skip(cio, Lesd - (3 + cesdsize));
 }
 
-void j2k_read_red(opj_j2k_t *j2k) {
-        unsigned short int Lred;
-        unsigned char Pred;
-        char str1[4][4] = {"p", "br", "pr", "res"};
-        
-        opj_cio_t *cio = j2k->cio;
+void j2k_read_red(opj_j2k_t *j2k)
+{
+    unsigned short int Lred;
+    unsigned char Pred;
+    char str1[4][4] = {"p", "br", "pr", "res"};
 
-        /* Simply read the RED parameters */
-        Lred = cio_read(cio, 2);
-        Pred = cio_read(cio, 1);
+    opj_cio_t *cio = j2k->cio;
 
-        /* Now we write them to screen */
-        opj_event_msg(j2k->cinfo, EVT_INFO,
-                "RED(%d): %s, %dc, %s, %s\n",
-                cio_tell(cio) - 5,
-                str1[(Pred & (unsigned char) 0xC0) >> 6], /* addressing mode */
-                (Pred & (unsigned char) 0x38) >> 3, /* corruption level */
-                ((Pred & (unsigned char) 0x02) >> 1) ? "4Ba" : "2Ba", /* address range */
-                (Pred & (unsigned char) 0x01) ? "errs" : "free"); /* error free? */
-
-        cio_skip(cio, Lred - 3);  
+    /* Simply read the RED parameters */
+    Lred = cio_read(cio, 2);
+    Pred = cio_read(cio, 1);
+
+    /* Now we write them to screen */
+    opj_event_msg(j2k->cinfo, EVT_INFO,
+                  "RED(%d): %s, %dc, %s, %s\n",
+                  cio_tell(cio) - 5,
+                  str1[(Pred & (unsigned char) 0xC0) >> 6], /* addressing mode */
+                  (Pred & (unsigned char) 0x38) >> 3, /* corruption level */
+                  ((Pred & (unsigned char) 0x02) >> 1) ? "4Ba" : "2Ba", /* address range */
+                  (Pred & (unsigned char) 0x01) ? "errs" : "free"); /* error free? */
+
+    cio_skip(cio, Lred - 3);
 }
 
-opj_bool jpwl_check_tile(opj_j2k_t *j2k, opj_tcd_t *tcd, int tileno) {
+opj_bool jpwl_check_tile(opj_j2k_t *j2k, opj_tcd_t *tcd, int tileno)
+{
 
 #ifdef oerhgierhgvhreit4u
-        /*
-           we navigate through the tile and find possible invalid parameters:
-       this saves a lot of crashes!!!!!
-         */
-        int compno, resno, precno, /*layno,*/ bandno, blockno;
-        int numprecincts, numblocks;
-
-        /* this is the selected tile */
-        opj_tcd_tile_t *tile = &(tcd->tcd_image->tiles[tileno]);
-
-        /* will keep the component */
-        opj_tcd_tilecomp_t *comp = NULL;
-
-        /* will keep the resolution */
-        opj_tcd_resolution_t *res;
-
-        /* will keep the subband */
-        opj_tcd_band_t *band; 
-
-        /* will keep the precinct */
-        opj_tcd_precinct_t *prec; 
-
-        /* will keep the codeblock */
-        opj_tcd_cblk_t *block;
-
-        /* check all tile components */
-        for (compno = 0; compno < tile->numcomps; compno++) {
-                comp = &(tile->comps[compno]);
-
-                /* check all component resolutions */
-                for (resno = 0; resno < comp->numresolutions; resno++) {
-                        res = &(comp->resolutions[resno]);
-                        numprecincts = res->pw * res->ph;
-
-                        /* check all the subbands */
-                        for (bandno = 0; bandno < res->numbands; bandno++) {
-                                band = &(res->bands[bandno]);
-
-                                /* check all the precincts */
-                                for (precno = 0; precno < numprecincts; precno++) {
-                                        prec = &(band->precincts[precno]);
-                                        numblocks = prec->ch * prec->cw;
-
-                                        /* check all the codeblocks */
-                                        for (blockno = 0; blockno < numblocks; blockno++) {
-                                                block = &(prec->cblks[blockno]);
-
-                                                /* x-origin is invalid */
-                                                if ((block->x0 < prec->x0) || (block->x0 > prec->x1)) {
-                                                        opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
-                                                                "JPWL: wrong x-cord of block origin %d => x-prec is (%d, %d)\n",
-                                                                block->x0, prec->x0, prec->x1);
-                                                        if (!JPWL_ASSUME)
-                                                                return OPJ_FALSE;
-                                                };
-                                        }
-                                }                               
-                        }
+    /*
+       we navigate through the tile and find possible invalid parameters:
+    this saves a lot of crashes!!!!!
+     */
+    int compno, resno, precno, /*layno,*/ bandno, blockno;
+    int numprecincts, numblocks;
+
+    /* this is the selected tile */
+    opj_tcd_tile_t *tile = &(tcd->tcd_image->tiles[tileno]);
+
+    /* will keep the component */
+    opj_tcd_tilecomp_t *comp = NULL;
+
+    /* will keep the resolution */
+    opj_tcd_resolution_t *res;
+
+    /* will keep the subband */
+    opj_tcd_band_t *band;
+
+    /* will keep the precinct */
+    opj_tcd_precinct_t *prec;
+
+    /* will keep the codeblock */
+    opj_tcd_cblk_t *block;
+
+    /* check all tile components */
+    for (compno = 0; compno < tile->numcomps; compno++) {
+        comp = &(tile->comps[compno]);
+
+        /* check all component resolutions */
+        for (resno = 0; resno < comp->numresolutions; resno++) {
+            res = &(comp->resolutions[resno]);
+            numprecincts = res->pw * res->ph;
+
+            /* check all the subbands */
+            for (bandno = 0; bandno < res->numbands; bandno++) {
+                band = &(res->bands[bandno]);
+
+                /* check all the precincts */
+                for (precno = 0; precno < numprecincts; precno++) {
+                    prec = &(band->precincts[precno]);
+                    numblocks = prec->ch * prec->cw;
+
+                    /* check all the codeblocks */
+                    for (blockno = 0; blockno < numblocks; blockno++) {
+                        block = &(prec->cblks[blockno]);
+
+                        /* x-origin is invalid */
+                        if ((block->x0 < prec->x0) || (block->x0 > prec->x1)) {
+                            opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
+                                          "JPWL: wrong x-cord of block origin %d => x-prec is (%d, %d)\n",
+                                          block->x0, prec->x0, prec->x1);
+                            if (!JPWL_ASSUME) {
+                                return OPJ_FALSE;
+                            }
+                        };
+                    }
                 }
+            }
         }
+    }
 
 #else
-  (void)j2k;
-  (void)tcd;
-  (void)tileno;
+    (void)j2k;
+    (void)tcd;
+    (void)tileno;
 #endif
 
-        return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 /*@}*/
@@ -1328,52 +1397,56 @@ opj_bool jpwl_check_tile(opj_j2k_t *j2k, opj_tcd_t *tcd, int tileno) {
 /** @name Local static functions */
 /*@{*/
 
-void j2k_read_sec(opj_j2k_t *j2k) {
-        unsigned short int Lsec;
-        
-        opj_cio_t *cio = j2k->cio;
+void j2k_read_sec(opj_j2k_t *j2k)
+{
+    unsigned short int Lsec;
 
-        /* Simply read the SEC length */
-        Lsec = cio_read(cio, 2);
+    opj_cio_t *cio = j2k->cio;
 
-        /* Now we write them to screen */
-        opj_event_msg(j2k->cinfo, EVT_INFO,
-                "SEC(%d)\n",
-                cio_tell(cio) - 2
-                );
+    /* Simply read the SEC length */
+    Lsec = cio_read(cio, 2);
 
-        cio_skip(cio, Lsec - 2);  
+    /* Now we write them to screen */
+    opj_event_msg(j2k->cinfo, EVT_INFO,
+                  "SEC(%d)\n",
+                  cio_tell(cio) - 2
+                 );
+
+    cio_skip(cio, Lsec - 2);
 }
 
-void j2k_write_sec(opj_j2k_t *j2k) {
-        unsigned short int Lsec = 24;
-        int i;
+void j2k_write_sec(opj_j2k_t *j2k)
+{
+    unsigned short int Lsec = 24;
+    int i;
 
-        opj_cio_t *cio = j2k->cio;
+    opj_cio_t *cio = j2k->cio;
 
-        cio_write(cio, J2K_MS_SEC, 2);  /* SEC */
-        cio_write(cio, Lsec, 2);
+    cio_write(cio, J2K_MS_SEC, 2);  /* SEC */
+    cio_write(cio, Lsec, 2);
 
-        /* write dummy data */
-        for (i = 0; i < Lsec - 2; i++)
-                cio_write(cio, 0, 1);
+    /* write dummy data */
+    for (i = 0; i < Lsec - 2; i++) {
+        cio_write(cio, 0, 1);
+    }
 }
 
-void j2k_read_insec(opj_j2k_t *j2k) {
-        unsigned short int Linsec;
-        
-        opj_cio_t *cio = j2k->cio;
+void j2k_read_insec(opj_j2k_t *j2k)
+{
+    unsigned short int Linsec;
 
-        /* Simply read the INSEC length */
-        Linsec = cio_read(cio, 2);
+    opj_cio_t *cio = j2k->cio;
 
-        /* Now we write them to screen */
-        opj_event_msg(j2k->cinfo, EVT_INFO,
-                "INSEC(%d)\n",
-                cio_tell(cio) - 2
-                );
+    /* Simply read the INSEC length */
+    Linsec = cio_read(cio, 2);
+
+    /* Now we write them to screen */
+    opj_event_msg(j2k->cinfo, EVT_INFO,
+                  "INSEC(%d)\n",
+                  cio_tell(cio) - 2
+                 );
 
-        cio_skip(cio, Linsec - 2);  
+    cio_skip(cio, Linsec - 2);
 }
 
 
index 772c8db34ee3e0cfac7f4d23fa87575f44e4388f..de1e8808e99898314e0fe2ae5648e1c95ef3b61d 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -46,7 +46,7 @@
 #define MAX_V2 131040.0
 
 /** conversion between a double precision floating point
-number and the corresponding pseudo-floating point used 
+number and the corresponding pseudo-floating point used
 to represent sensitivity values
 @param V the double precision value
 @param bytes the number of bytes of the representation
@@ -54,1750 +54,1891 @@ to represent sensitivity values
 */
 unsigned short int jpwl_double_to_pfp(double V, int bytes);
 
-/** conversion between a pseudo-floating point used 
+/** conversion between a pseudo-floating point used
 to represent sensitivity values and the corresponding
-double precision floating point number  
+double precision floating point number
 @param em the pseudo-floating point value (cast accordingly)
 @param bytes the number of bytes of the representation
 @return the double precision value
 */
 double jpwl_pfp_to_double(unsigned short int em, int bytes);
 
-       /*-------------------------------------------------------------*/
+/*-------------------------------------------------------------*/
 
 int jpwl_markcomp(const void *arg1, const void *arg2)
 {
-   /* Compare the two markers' positions */
-   double diff = (((jpwl_marker_t *) arg1)->dpos - ((jpwl_marker_t *) arg2)->dpos);
-
-   if (diff == 0.0)
-          return (0);
-   else if (diff < 0)
-          return (-1);
-   else
-          return (+1);
+    /* Compare the two markers' positions */
+    double diff = (((jpwl_marker_t *) arg1)->dpos - ((jpwl_marker_t *) arg2)->dpos);
+
+    if (diff == 0.0) {
+        return (0);
+    } else if (diff < 0) {
+        return (-1);
+    } else {
+        return (+1);
+    }
 }
 
 int jpwl_epbs_add(opj_j2k_t *j2k, jpwl_marker_t *jwmarker, int *jwmarker_num,
-                                 opj_bool latest, opj_bool packed, opj_bool insideMH, int *idx, int hprot,
-                                 double place_pos, int tileno,
-                                 unsigned long int pre_len, unsigned long int post_len) {
-
-       jpwl_epb_ms_t *epb_mark = NULL;
-
-       int k_pre, k_post, n_pre, n_post;
-       
-       unsigned long int L1, L2, dL4, max_postlen, epbs_len = 0;
-
-       /* We find RS(n,k) for EPB parms and pre-data, if any */
-       if (insideMH && (*idx == 0)) {
-               /* First EPB in MH */ 
-               k_pre = 64;
-               n_pre = 160;
-       } else if (!insideMH && (*idx == 0)) {
-               /* First EPB in TH */
-               k_pre = 25;
-               n_pre = 80;
-       } else {
-               /* Following EPBs in MH or TH */
-               k_pre = 13;
-               n_pre = 40;
-       };
-
-       /* Find lengths, Figs. B3 and B4 */
-       /* size of pre data: pre_buf(pre_len) + EPB(2) + Lepb(2) + Depb(1) + LDPepb(4) + Pepb(4) */
-       L1 = pre_len + 13;
-
-       /* size of pre-data redundancy */
-       /*   (redundancy per codeword)       *     (number of codewords, rounded up)   */
-       L2 = (n_pre - k_pre) * (unsigned long int) ceil((double) L1 / (double) k_pre);
-
-       /* Find protection type for post data and its associated redundancy field length*/
-       if ((hprot == 16) || (hprot == 32)) {
-               /* there is a CRC for post-data */
-               k_post = post_len;
-               n_post = post_len + (hprot >> 3);
-               /*L3 = hprot >> 3;*/ /* 2 (CRC-16) or 4 (CRC-32) bytes */
-
-       } else if ((hprot >= 37) && (hprot <= 128)) {
-               /* there is a RS for post-data */
-               k_post = 32;
-               n_post = hprot;
-
-       } else {
-               /* Use predefined codes */
-               n_post = n_pre;
-               k_post = k_pre;
-       };
-
-       /* Create the EPB(s) */
-       while (post_len > 0) {
-
-               /* maximum postlen in order to respect EPB size
-               (we use JPWL_MAXIMUM_EPB_ROOM instead of 65535 for keeping room for EPB parms)*/
-               /*      (message word size)    *            (number of containable parity words)  */
-               max_postlen = k_post * (unsigned long int) floor((double) JPWL_MAXIMUM_EPB_ROOM / (double) (n_post - k_post));
-
-               /* maximum postlen in order to respect EPB size */
-               if (*idx == 0)
-                       /* (we use (JPWL_MAXIMUM_EPB_ROOM - L2) instead of 65535 for keeping room for EPB parms + pre-data) */
-                       /*      (message word size)    *                   (number of containable parity words)  */
-                       max_postlen = k_post * (unsigned long int) floor((double) (JPWL_MAXIMUM_EPB_ROOM - L2) / (double) (n_post - k_post));
-
-               else
-                       /* (we use JPWL_MAXIMUM_EPB_ROOM instead of 65535 for keeping room for EPB parms) */
-                       /*      (message word size)    *            (number of containable parity words)  */
-                       max_postlen = k_post * (unsigned long int) floor((double) JPWL_MAXIMUM_EPB_ROOM / (double) (n_post - k_post));
-
-               /* null protection case */
-               /* the max post length can be as large as the LDPepb field can host */
-               if (hprot == 0)
-                       max_postlen = INT_MAX;
-               
-               /* length to use */
-               dL4 = min(max_postlen, post_len);
-
-               if ((epb_mark = jpwl_epb_create(
-                       j2k, /* this encoder handle */
-                       latest ? (dL4 < max_postlen) : OPJ_FALSE, /* is it the latest? */
-                       packed, /* is it packed? */
-                       tileno, /* we are in TPH */
-                       *idx, /* its index */
-                       hprot, /* protection type parameters of following data */
-                       0, /* pre-data: nothing for now */
-                       dL4 /* post-data: the stub computed previously */
-                       ))) {
-                       
-                       /* Add this marker to the 'insertanda' list */
-                       if (*jwmarker_num < JPWL_MAX_NO_MARKERS) {
-                               jwmarker[*jwmarker_num].id = J2K_MS_EPB; /* its type */
-                               jwmarker[*jwmarker_num].m.epbmark = epb_mark; /* the EPB */
-                               jwmarker[*jwmarker_num].pos = (int) place_pos; /* after SOT */
-                               jwmarker[*jwmarker_num].dpos = place_pos + 0.0000001 * (double)(*idx); /* not very first! */
-                               jwmarker[*jwmarker_num].len = epb_mark->Lepb; /* its length */
-                               jwmarker[*jwmarker_num].len_ready = OPJ_TRUE; /* ready */
-                               jwmarker[*jwmarker_num].pos_ready = OPJ_TRUE; /* ready */
-                               jwmarker[*jwmarker_num].parms_ready = OPJ_TRUE; /* ready */
-                               jwmarker[*jwmarker_num].data_ready = OPJ_FALSE; /* not ready */
-                               (*jwmarker_num)++;
-                       }
-
-                       /* increment epb index */
-                       (*idx)++;
-
-                       /* decrease postlen */
-                       post_len -= dL4;
-
-                       /* increase the total length of EPBs */
-                       epbs_len += epb_mark->Lepb + 2;
-
-               } else {
-                       /* ooops, problems */
-                       opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not create TPH EPB for UEP in tile %d\n", tileno);                          
-               };
-       }
-
-       return epbs_len;
+                  opj_bool latest, opj_bool packed, opj_bool insideMH, int *idx, int hprot,
+                  double place_pos, int tileno,
+                  unsigned long int pre_len, unsigned long int post_len)
+{
+
+    jpwl_epb_ms_t *epb_mark = NULL;
+
+    int k_pre, k_post, n_pre, n_post;
+
+    unsigned long int L1, L2, dL4, max_postlen, epbs_len = 0;
+
+    /* We find RS(n,k) for EPB parms and pre-data, if any */
+    if (insideMH && (*idx == 0)) {
+        /* First EPB in MH */
+        k_pre = 64;
+        n_pre = 160;
+    } else if (!insideMH && (*idx == 0)) {
+        /* First EPB in TH */
+        k_pre = 25;
+        n_pre = 80;
+    } else {
+        /* Following EPBs in MH or TH */
+        k_pre = 13;
+        n_pre = 40;
+    };
+
+    /* Find lengths, Figs. B3 and B4 */
+    /* size of pre data: pre_buf(pre_len) + EPB(2) + Lepb(2) + Depb(1) + LDPepb(4) + Pepb(4) */
+    L1 = pre_len + 13;
+
+    /* size of pre-data redundancy */
+    /*   (redundancy per codeword)       *     (number of codewords, rounded up)   */
+    L2 = (n_pre - k_pre) * (unsigned long int) ceil((double) L1 / (double) k_pre);
+
+    /* Find protection type for post data and its associated redundancy field length*/
+    if ((hprot == 16) || (hprot == 32)) {
+        /* there is a CRC for post-data */
+        k_post = post_len;
+        n_post = post_len + (hprot >> 3);
+        /*L3 = hprot >> 3;*/ /* 2 (CRC-16) or 4 (CRC-32) bytes */
+
+    } else if ((hprot >= 37) && (hprot <= 128)) {
+        /* there is a RS for post-data */
+        k_post = 32;
+        n_post = hprot;
+
+    } else {
+        /* Use predefined codes */
+        n_post = n_pre;
+        k_post = k_pre;
+    };
+
+    /* Create the EPB(s) */
+    while (post_len > 0) {
+
+        /* maximum postlen in order to respect EPB size
+        (we use JPWL_MAXIMUM_EPB_ROOM instead of 65535 for keeping room for EPB parms)*/
+        /*      (message word size)    *            (number of containable parity words)  */
+        max_postlen = k_post * (unsigned long int) floor((double)
+                      JPWL_MAXIMUM_EPB_ROOM / (double)(n_post - k_post));
+
+        /* maximum postlen in order to respect EPB size */
+        if (*idx == 0)
+            /* (we use (JPWL_MAXIMUM_EPB_ROOM - L2) instead of 65535 for keeping room for EPB parms + pre-data) */
+            /*      (message word size)    *                   (number of containable parity words)  */
+        {
+            max_postlen = k_post * (unsigned long int) floor((double)(
+                              JPWL_MAXIMUM_EPB_ROOM - L2) / (double)(n_post - k_post));
+        }
+
+        else
+            /* (we use JPWL_MAXIMUM_EPB_ROOM instead of 65535 for keeping room for EPB parms) */
+            /*      (message word size)    *            (number of containable parity words)  */
+        {
+            max_postlen = k_post * (unsigned long int) floor((double)
+                          JPWL_MAXIMUM_EPB_ROOM / (double)(n_post - k_post));
+        }
+
+        /* null protection case */
+        /* the max post length can be as large as the LDPepb field can host */
+        if (hprot == 0) {
+            max_postlen = INT_MAX;
+        }
+
+        /* length to use */
+        dL4 = min(max_postlen, post_len);
+
+        if ((epb_mark = jpwl_epb_create(
+                            j2k, /* this encoder handle */
+                            latest ? (dL4 < max_postlen) : OPJ_FALSE, /* is it the latest? */
+                            packed, /* is it packed? */
+                            tileno, /* we are in TPH */
+                            *idx, /* its index */
+                            hprot, /* protection type parameters of following data */
+                            0, /* pre-data: nothing for now */
+                            dL4 /* post-data: the stub computed previously */
+                        ))) {
+
+            /* Add this marker to the 'insertanda' list */
+            if (*jwmarker_num < JPWL_MAX_NO_MARKERS) {
+                jwmarker[*jwmarker_num].id = J2K_MS_EPB; /* its type */
+                jwmarker[*jwmarker_num].m.epbmark = epb_mark; /* the EPB */
+                jwmarker[*jwmarker_num].pos = (int) place_pos; /* after SOT */
+                jwmarker[*jwmarker_num].dpos = place_pos + 0.0000001 * (double)(
+                                                   *idx); /* not very first! */
+                jwmarker[*jwmarker_num].len = epb_mark->Lepb; /* its length */
+                jwmarker[*jwmarker_num].len_ready = OPJ_TRUE; /* ready */
+                jwmarker[*jwmarker_num].pos_ready = OPJ_TRUE; /* ready */
+                jwmarker[*jwmarker_num].parms_ready = OPJ_TRUE; /* ready */
+                jwmarker[*jwmarker_num].data_ready = OPJ_FALSE; /* not ready */
+                (*jwmarker_num)++;
+            }
+
+            /* increment epb index */
+            (*idx)++;
+
+            /* decrease postlen */
+            post_len -= dL4;
+
+            /* increase the total length of EPBs */
+            epbs_len += epb_mark->Lepb + 2;
+
+        } else {
+            /* ooops, problems */
+            opj_event_msg(j2k->cinfo, EVT_ERROR,
+                          "Could not create TPH EPB for UEP in tile %d\n", tileno);
+        };
+    }
+
+    return epbs_len;
 }
 
 
-jpwl_epb_ms_t *jpwl_epb_create(opj_j2k_t *j2k, opj_bool latest, opj_bool packed, int tileno, int idx, int hprot,
-                                                 unsigned long int pre_len, unsigned long int post_len) {
-
-       jpwl_epb_ms_t *epb = NULL;
-       /*unsigned short int data_len = 0;*/
-       unsigned short int L2, L3;
-       unsigned long int L1, L4;
-       /*unsigned char *predata_in = NULL;*/
-
-       opj_bool insideMH = (tileno == -1);
-
-       /* Alloc space */
-       if (!(epb = (jpwl_epb_ms_t *) opj_malloc((size_t) 1 * sizeof (jpwl_epb_ms_t)))) {
-               opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not allocate room for one EPB MS\n");
-               return NULL;
-       };
-
-       /* We set RS(n,k) for EPB parms and pre-data, if any */
-       if (insideMH && (idx == 0)) {
-               /* First EPB in MH */ 
-               epb->k_pre = 64;
-               epb->n_pre = 160;
-       } else if (!insideMH && (idx == 0)) {
-               /* First EPB in TH */
-               epb->k_pre = 25;
-               epb->n_pre = 80;
-       } else {
-               /* Following EPBs in MH or TH */
-               epb->k_pre = 13;
-               epb->n_pre = 40;
-       };
-
-       /* Find lengths, Figs. B3 and B4 */
-       /* size of pre data: pre_buf(pre_len) + EPB(2) + Lepb(2) + Depb(1) + LDPepb(4) + Pepb(4) */
-       L1 = pre_len + 13;
-       epb->pre_len = pre_len;
-
-       /* size of pre-data redundancy */
-       /*   (redundancy per codeword)       *               (number of codewords, rounded up)   */
-       L2 = (epb->n_pre - epb->k_pre) * (unsigned short int) ceil((double) L1 / (double) epb->k_pre);
-
-       /* length of post-data */
-       L4 = post_len;
-       epb->post_len = post_len;
-
-       /* Find protection type for post data and its associated redundancy field length*/
-       if ((hprot == 16) || (hprot == 32)) {
-               /* there is a CRC for post-data */
-               epb->Pepb = 0x10000000 | ((unsigned long int) hprot >> 5); /* 0=CRC-16, 1=CRC-32 */
-               epb->k_post = post_len;
-               epb->n_post = post_len + (hprot >> 3);
-               /*L3 = hprot >> 3;*/ /* 2 (CRC-16) or 4 (CRC-32) bytes */
-
-       } else if ((hprot >= 37) && (hprot <= 128)) {
-               /* there is a RS for post-data */
-               epb->Pepb = 0x20000020 | (((unsigned long int) hprot & 0x000000FF) << 8);
-               epb->k_post = 32;
-               epb->n_post = hprot;
-
-       } else if (hprot == 1) {
-               /* Use predefined codes */
-               epb->Pepb = (unsigned long int) 0x00000000;
-               epb->n_post = epb->n_pre;
-               epb->k_post = epb->k_pre;
-       
-       } else if (hprot == 0) {
-               /* Placeholder EPB: only protects its parameters, no protection method */
-               epb->Pepb = (unsigned long int) 0xFFFFFFFF;
-               epb->n_post = 1;
-               epb->k_post = 1;
-       
-       } else {
-               opj_event_msg(j2k->cinfo, EVT_ERROR, "Invalid protection value for EPB h = %d\n", hprot);                               
-               return NULL;
-       }
-
-       epb->hprot = hprot;
-
-       /*   (redundancy per codeword)          *                (number of codewords, rounded up) */
-       L3 = (epb->n_post - epb->k_post) * (unsigned short int) ceil((double) L4 / (double) epb->k_post);
-
-       /* private fields */
-       epb->tileno = tileno;
-
-       /* Fill some fields of the EPB */
-
-       /* total length of the EPB MS (less the EPB marker itself): */
-       /* Lepb(2) + Depb(1) + LDPepb(4) + Pepb(4) + pre_redundancy + post-redundancy */
-       epb->Lepb = 11 + L2 + L3;
-
-       /* EPB style */
-       epb->Depb = ((packed & 0x0001) << 7) | ((latest & 0x0001) << 6) | (idx & 0x003F);
-
-       /* length of data protected by EPB: */
-       epb->LDPepb = L1 + L4;
-
-       return epb;
+jpwl_epb_ms_t *jpwl_epb_create(opj_j2k_t *j2k, opj_bool latest, opj_bool packed,
+                               int tileno, int idx, int hprot,
+                               unsigned long int pre_len, unsigned long int post_len)
+{
+
+    jpwl_epb_ms_t *epb = NULL;
+    /*unsigned short int data_len = 0;*/
+    unsigned short int L2, L3;
+    unsigned long int L1, L4;
+    /*unsigned char *predata_in = NULL;*/
+
+    opj_bool insideMH = (tileno == -1);
+
+    /* Alloc space */
+    if (!(epb = (jpwl_epb_ms_t *) opj_malloc((size_t) 1 * sizeof(jpwl_epb_ms_t)))) {
+        opj_event_msg(j2k->cinfo, EVT_ERROR,
+                      "Could not allocate room for one EPB MS\n");
+        return NULL;
+    };
+
+    /* We set RS(n,k) for EPB parms and pre-data, if any */
+    if (insideMH && (idx == 0)) {
+        /* First EPB in MH */
+        epb->k_pre = 64;
+        epb->n_pre = 160;
+    } else if (!insideMH && (idx == 0)) {
+        /* First EPB in TH */
+        epb->k_pre = 25;
+        epb->n_pre = 80;
+    } else {
+        /* Following EPBs in MH or TH */
+        epb->k_pre = 13;
+        epb->n_pre = 40;
+    };
+
+    /* Find lengths, Figs. B3 and B4 */
+    /* size of pre data: pre_buf(pre_len) + EPB(2) + Lepb(2) + Depb(1) + LDPepb(4) + Pepb(4) */
+    L1 = pre_len + 13;
+    epb->pre_len = pre_len;
+
+    /* size of pre-data redundancy */
+    /*   (redundancy per codeword)       *               (number of codewords, rounded up)   */
+    L2 = (epb->n_pre - epb->k_pre) * (unsigned short int) ceil((double) L1 /
+            (double) epb->k_pre);
+
+    /* length of post-data */
+    L4 = post_len;
+    epb->post_len = post_len;
+
+    /* Find protection type for post data and its associated redundancy field length*/
+    if ((hprot == 16) || (hprot == 32)) {
+        /* there is a CRC for post-data */
+        epb->Pepb = 0x10000000 | ((unsigned long int) hprot >>
+                                  5); /* 0=CRC-16, 1=CRC-32 */
+        epb->k_post = post_len;
+        epb->n_post = post_len + (hprot >> 3);
+        /*L3 = hprot >> 3;*/ /* 2 (CRC-16) or 4 (CRC-32) bytes */
+
+    } else if ((hprot >= 37) && (hprot <= 128)) {
+        /* there is a RS for post-data */
+        epb->Pepb = 0x20000020 | (((unsigned long int) hprot & 0x000000FF) << 8);
+        epb->k_post = 32;
+        epb->n_post = hprot;
+
+    } else if (hprot == 1) {
+        /* Use predefined codes */
+        epb->Pepb = (unsigned long int) 0x00000000;
+        epb->n_post = epb->n_pre;
+        epb->k_post = epb->k_pre;
+
+    } else if (hprot == 0) {
+        /* Placeholder EPB: only protects its parameters, no protection method */
+        epb->Pepb = (unsigned long int) 0xFFFFFFFF;
+        epb->n_post = 1;
+        epb->k_post = 1;
+
+    } else {
+        opj_event_msg(j2k->cinfo, EVT_ERROR,
+                      "Invalid protection value for EPB h = %d\n", hprot);
+        return NULL;
+    }
+
+    epb->hprot = hprot;
+
+    /*   (redundancy per codeword)          *                (number of codewords, rounded up) */
+    L3 = (epb->n_post - epb->k_post) * (unsigned short int) ceil((double) L4 /
+            (double) epb->k_post);
+
+    /* private fields */
+    epb->tileno = tileno;
+
+    /* Fill some fields of the EPB */
+
+    /* total length of the EPB MS (less the EPB marker itself): */
+    /* Lepb(2) + Depb(1) + LDPepb(4) + Pepb(4) + pre_redundancy + post-redundancy */
+    epb->Lepb = 11 + L2 + L3;
+
+    /* EPB style */
+    epb->Depb = ((packed & 0x0001) << 7) | ((latest & 0x0001) << 6) |
+                (idx & 0x003F);
+
+    /* length of data protected by EPB: */
+    epb->LDPepb = L1 + L4;
+
+    return epb;
 }
 
-void jpwl_epb_write(opj_j2k_t *j2k, jpwl_epb_ms_t *epb, unsigned char *buf) {
+void jpwl_epb_write(opj_j2k_t *j2k, jpwl_epb_ms_t *epb, unsigned char *buf)
+{
 
-       /* Marker */
-       *(buf++) = (unsigned char) (J2K_MS_EPB >> 8); 
-       *(buf++) = (unsigned char) (J2K_MS_EPB >> 0); 
+    /* Marker */
+    *(buf++) = (unsigned char)(J2K_MS_EPB >> 8);
+    *(buf++) = (unsigned char)(J2K_MS_EPB >> 0);
 
-       /* Lepb */
-       *(buf++) = (unsigned char) (epb->Lepb >> 8); 
-       *(buf++) = (unsigned char) (epb->Lepb >> 0); 
+    /* Lepb */
+    *(buf++) = (unsigned char)(epb->Lepb >> 8);
+    *(buf++) = (unsigned char)(epb->Lepb >> 0);
 
-       /* Depb */
-       *(buf++) = (unsigned char) (epb->Depb >> 0); 
+    /* Depb */
+    *(buf++) = (unsigned char)(epb->Depb >> 0);
 
-       /* LDPepb */
-       *(buf++) = (unsigned char) (epb->LDPepb >> 24); 
-       *(buf++) = (unsigned char) (epb->LDPepb >> 16); 
-       *(buf++) = (unsigned char) (epb->LDPepb >> 8); 
-       *(buf++) = (unsigned char) (epb->LDPepb >> 0); 
+    /* LDPepb */
+    *(buf++) = (unsigned char)(epb->LDPepb >> 24);
+    *(buf++) = (unsigned char)(epb->LDPepb >> 16);
+    *(buf++) = (unsigned char)(epb->LDPepb >> 8);
+    *(buf++) = (unsigned char)(epb->LDPepb >> 0);
 
-       /* Pepb */
-       *(buf++) = (unsigned char) (epb->Pepb >> 24); 
-       *(buf++) = (unsigned char) (epb->Pepb >> 16); 
-       *(buf++) = (unsigned char) (epb->Pepb >> 8); 
-       *(buf++) = (unsigned char) (epb->Pepb >> 0); 
+    /* Pepb */
+    *(buf++) = (unsigned char)(epb->Pepb >> 24);
+    *(buf++) = (unsigned char)(epb->Pepb >> 16);
+    *(buf++) = (unsigned char)(epb->Pepb >> 8);
+    *(buf++) = (unsigned char)(epb->Pepb >> 0);
 
-       /* Data */
-       /*memcpy(buf, epb->data, (size_t) epb->Lepb - 11);*/
-       memset(buf, 0, (size_t) epb->Lepb - 11);
+    /* Data */
+    /*memcpy(buf, epb->data, (size_t) epb->Lepb - 11);*/
+    memset(buf, 0, (size_t) epb->Lepb - 11);
 
-       /* update markers struct */
-       j2k_add_marker(j2k->cstr_info, J2K_MS_EPB, -1, epb->Lepb + 2);
+    /* update markers struct */
+    j2k_add_marker(j2k->cstr_info, J2K_MS_EPB, -1, epb->Lepb + 2);
 
 }
 
 
-jpwl_epc_ms_t *jpwl_epc_create(opj_j2k_t *j2k, opj_bool esd_on, opj_bool red_on, opj_bool epb_on, opj_bool info_on) {
-
-       jpwl_epc_ms_t *epc = NULL;
-
-       /* Alloc space */
-       if (!(epc = (jpwl_epc_ms_t *) opj_malloc((size_t) 1 * sizeof (jpwl_epc_ms_t)))) {
-               opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not allocate room for EPC MS\n");
-               return NULL;
-       };
+jpwl_epc_ms_t *jpwl_epc_create(opj_j2k_t *j2k, opj_bool esd_on, opj_bool red_on,
+                               opj_bool epb_on, opj_bool info_on)
+{
 
-       /* Set the EPC parameters */
-       epc->esd_on = esd_on;
-       epc->epb_on = epb_on;
-       epc->red_on = red_on;
-       epc->info_on = info_on;
+    jpwl_epc_ms_t *epc = NULL;
+
+    /* Alloc space */
+    if (!(epc = (jpwl_epc_ms_t *) opj_malloc((size_t) 1 * sizeof(jpwl_epc_ms_t)))) {
+        opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not allocate room for EPC MS\n");
+        return NULL;
+    };
+
+    /* Set the EPC parameters */
+    epc->esd_on = esd_on;
+    epc->epb_on = epb_on;
+    epc->red_on = red_on;
+    epc->info_on = info_on;
+
+    /* Fill the EPC fields with default values */
+    epc->Lepc = 9;
+    epc->Pcrc = 0x0000;
+    epc->DL = 0x00000000;
+    epc->Pepc = ((j2k->cp->esd_on & 0x0001) << 4) | ((j2k->cp->red_on & 0x0001) <<
+                5) |
+                ((j2k->cp->epb_on & 0x0001) << 6) | ((j2k->cp->info_on & 0x0001) << 7);
+
+    return (epc);
+}
 
-       /* Fill the EPC fields with default values */
-       epc->Lepc = 9;
-       epc->Pcrc = 0x0000;
-       epc->DL = 0x00000000;
-       epc->Pepc = ((j2k->cp->esd_on & 0x0001) << 4) | ((j2k->cp->red_on & 0x0001) << 5) |
-               ((j2k->cp->epb_on & 0x0001) << 6) | ((j2k->cp->info_on & 0x0001) << 7);
+opj_bool jpwl_epb_fill(opj_j2k_t *j2k, jpwl_epb_ms_t *epb, unsigned char *buf,
+                       unsigned char *post_buf)
+{
 
-       return (epc);
-}
+    unsigned long int L1, L2, L3, L4;
+    int remaining;
+    unsigned long int P, NN_P;
+
+    /* Operating buffer */
+    static unsigned char codeword[NN], *parityword;
+
+    unsigned char *L1_buf, *L2_buf;
+    /* these ones are static, since we need to keep memory of
+     the exact place from one call to the other */
+    static unsigned char *L3_buf, *L4_buf;
+
+    /* some consistency check */
+    if (!buf) {
+        opj_event_msg(j2k->cinfo, EVT_ERROR, "There is no operating buffer for EPBs\n");
+        return OPJ_FALSE;
+    }
+
+    if (!post_buf && !L4_buf) {
+        opj_event_msg(j2k->cinfo, EVT_ERROR,
+                      "There is no operating buffer for EPBs data\n");
+        return OPJ_FALSE;
+    }
+
+    /*
+     * Compute parity bytes on pre-data, ALWAYS present (at least only for EPB parms)
+     */
+
+    /* Initialize RS structures */
+    P = epb->n_pre - epb->k_pre;
+    NN_P = NN - P;
+    memset(codeword, 0, NN);
+    parityword = codeword + NN_P;
+    init_rs(NN_P);
+
+    /* pre-data begins pre_len bytes before of EPB buf */
+    L1_buf = buf - epb->pre_len;
+    L1 = epb->pre_len + 13;
+
+    /* redundancy for pre-data begins immediately after EPB parms */
+    L2_buf = buf + 13;
+    L2 = (epb->n_pre - epb->k_pre) * (unsigned short int) ceil((double) L1 /
+            (double) epb->k_pre);
+
+    /* post-data
+       the position of L4 buffer can be:
+         1) passed as a parameter: in that case use it
+         2) null: in that case use the previous (static) one
+    */
+    if (post_buf) {
+        L4_buf = post_buf;
+    }
+    L4 = epb->post_len;
+
+    /* post-data redundancy begins immediately after pre-data redundancy */
+    L3_buf = L2_buf + L2;
+    L3 = (epb->n_post - epb->k_post) * (unsigned short int) ceil((double) L4 /
+            (double) epb->k_post);
+
+    /* let's check whether EPB length is sufficient to contain all these data */
+    if (epb->Lepb < (11 + L2 + L3)) {
+        opj_event_msg(j2k->cinfo, EVT_ERROR,
+                      "There is no room in EPB data field for writing redundancy data\n");
+    }
+    /*printf("Env. %d, nec. %d (%d + %d)\n", epb->Lepb - 11, L2 + L3, L2, L3);*/
+
+    /* Compute redundancy of pre-data message words */
+    remaining = L1;
+    while (remaining) {
+
+        /* copy message data into codeword buffer */
+        if (remaining < epb->k_pre) {
+            /* the last message word is zero-padded */
+            memset(codeword, 0, NN);
+            memcpy(codeword, L1_buf, remaining);
+            L1_buf += remaining;
+            remaining = 0;
+
+        } else {
+            memcpy(codeword, L1_buf, epb->k_pre);
+            L1_buf += epb->k_pre;
+            remaining -= epb->k_pre;
+
+        }
+
+        /* Encode the buffer and obtain parity bytes */
+        if (encode_rs(codeword, parityword))
+            opj_event_msg(j2k->cinfo, EVT_WARNING,
+                          "Possible encoding error in codeword @ position #%d\n",
+                          (L1_buf - buf) / epb->k_pre);
+
+        /* copy parity bytes only in redundancy buffer */
+        memcpy(L2_buf, parityword, P);
+
+        /* advance parity buffer */
+        L2_buf += P;
+    }
+
+    /*
+     * Compute parity bytes on post-data, may be absent if there are no data
+     */
+    /*printf("Hprot is %d (tileno=%d, k_pre=%d, n_pre=%d, k_post=%d, n_post=%d, pre_len=%d, post_len=%d)\n",
+        epb->hprot, epb->tileno, epb->k_pre, epb->n_pre, epb->k_post, epb->n_post, epb->pre_len,
+        epb->post_len);*/
+    if (epb->hprot < 0) {
+
+        /* there should be no EPB */
+
+    } else if (epb->hprot == 0) {
+
+        /* no protection for the data */
+        /* advance anyway */
+        L4_buf += epb->post_len;
+
+    } else if (epb->hprot == 16) {
+
+        /* CRC-16 */
+        unsigned short int mycrc = 0x0000;
+
+        /* compute the CRC field (excluding itself) */
+        remaining = L4;
+        while (remaining--) {
+            jpwl_updateCRC16(&mycrc, *(L4_buf++));
+        }
+
+        /* write the CRC field */
+        *(L3_buf++) = (unsigned char)(mycrc >> 8);
+        *(L3_buf++) = (unsigned char)(mycrc >> 0);
+
+    } else if (epb->hprot == 32) {
+
+        /* CRC-32 */
+        unsigned long int mycrc = 0x00000000;
+
+        /* compute the CRC field (excluding itself) */
+        remaining = L4;
+        while (remaining--) {
+            jpwl_updateCRC32(&mycrc, *(L4_buf++));
+        }
+
+        /* write the CRC field */
+        *(L3_buf++) = (unsigned char)(mycrc >> 24);
+        *(L3_buf++) = (unsigned char)(mycrc >> 16);
+        *(L3_buf++) = (unsigned char)(mycrc >> 8);
+        *(L3_buf++) = (unsigned char)(mycrc >> 0);
+
+    } else {
+
+        /* RS */
+
+        /* Initialize RS structures */
+        P = epb->n_post - epb->k_post;
+        NN_P = NN - P;
+        memset(codeword, 0, NN);
+        parityword = codeword + NN_P;
+        init_rs(NN_P);
+
+        /* Compute redundancy of post-data message words */
+        remaining = L4;
+        while (remaining) {
+
+            /* copy message data into codeword buffer */
+            if (remaining < epb->k_post) {
+                /* the last message word is zero-padded */
+                memset(codeword, 0, NN);
+                memcpy(codeword, L4_buf, remaining);
+                L4_buf += remaining;
+                remaining = 0;
+
+            } else {
+                memcpy(codeword, L4_buf, epb->k_post);
+                L4_buf += epb->k_post;
+                remaining -= epb->k_post;
 
-opj_bool jpwl_epb_fill(opj_j2k_t *j2k, jpwl_epb_ms_t *epb, unsigned char *buf, unsigned char *post_buf) {
-
-       unsigned long int L1, L2, L3, L4;
-       int remaining;
-       unsigned long int P, NN_P;
-
-       /* Operating buffer */
-       static unsigned char codeword[NN], *parityword;
-
-       unsigned char *L1_buf, *L2_buf;
-       /* these ones are static, since we need to keep memory of
-        the exact place from one call to the other */
-       static unsigned char *L3_buf, *L4_buf;
-
-       /* some consistency check */
-       if (!buf) {
-               opj_event_msg(j2k->cinfo, EVT_ERROR, "There is no operating buffer for EPBs\n");
-               return OPJ_FALSE;
-       }
-
-       if (!post_buf && !L4_buf) {
-               opj_event_msg(j2k->cinfo, EVT_ERROR, "There is no operating buffer for EPBs data\n");
-               return OPJ_FALSE;
-       }
-
-       /*
-        * Compute parity bytes on pre-data, ALWAYS present (at least only for EPB parms)
-        */
-
-       /* Initialize RS structures */
-       P = epb->n_pre - epb->k_pre;
-       NN_P = NN - P;
-       memset(codeword, 0, NN);
-       parityword = codeword + NN_P;
-       init_rs(NN_P);
-
-       /* pre-data begins pre_len bytes before of EPB buf */
-       L1_buf = buf - epb->pre_len;
-       L1 = epb->pre_len + 13;
-
-       /* redundancy for pre-data begins immediately after EPB parms */
-       L2_buf = buf + 13;
-       L2 = (epb->n_pre - epb->k_pre) * (unsigned short int) ceil((double) L1 / (double) epb->k_pre);
-
-       /* post-data
-          the position of L4 buffer can be:
-            1) passed as a parameter: in that case use it
-            2) null: in that case use the previous (static) one
-       */
-       if (post_buf)
-               L4_buf = post_buf;
-       L4 = epb->post_len;
-
-       /* post-data redundancy begins immediately after pre-data redundancy */
-       L3_buf = L2_buf + L2;
-       L3 = (epb->n_post - epb->k_post) * (unsigned short int) ceil((double) L4 / (double) epb->k_post);
-
-       /* let's check whether EPB length is sufficient to contain all these data */
-       if (epb->Lepb < (11 + L2 + L3))
-               opj_event_msg(j2k->cinfo, EVT_ERROR, "There is no room in EPB data field for writing redundancy data\n");
-       /*printf("Env. %d, nec. %d (%d + %d)\n", epb->Lepb - 11, L2 + L3, L2, L3);*/
-
-       /* Compute redundancy of pre-data message words */
-       remaining = L1;
-       while (remaining) {
-
-               /* copy message data into codeword buffer */
-               if (remaining < epb->k_pre) {
-                       /* the last message word is zero-padded */
-                       memset(codeword, 0, NN);
-                       memcpy(codeword, L1_buf, remaining);
-                       L1_buf += remaining;
-                       remaining = 0;
-
-               } else {
-                       memcpy(codeword, L1_buf, epb->k_pre);
-                       L1_buf += epb->k_pre;
-                       remaining -= epb->k_pre;
-
-               }
-
-               /* Encode the buffer and obtain parity bytes */
-               if (encode_rs(codeword, parityword))
-                       opj_event_msg(j2k->cinfo, EVT_WARNING,
-                               "Possible encoding error in codeword @ position #%d\n", (L1_buf - buf) / epb->k_pre);
-
-               /* copy parity bytes only in redundancy buffer */
-               memcpy(L2_buf, parityword, P); 
-
-               /* advance parity buffer */
-               L2_buf += P;
-       }
-
-       /*
-        * Compute parity bytes on post-data, may be absent if there are no data
-        */
-       /*printf("Hprot is %d (tileno=%d, k_pre=%d, n_pre=%d, k_post=%d, n_post=%d, pre_len=%d, post_len=%d)\n",
-               epb->hprot, epb->tileno, epb->k_pre, epb->n_pre, epb->k_post, epb->n_post, epb->pre_len,
-               epb->post_len);*/
-       if (epb->hprot < 0) {
-
-               /* there should be no EPB */
-               
-       } else if (epb->hprot == 0) {
-
-               /* no protection for the data */
-               /* advance anyway */
-               L4_buf += epb->post_len;
-
-       } else if (epb->hprot == 16) {
-
-               /* CRC-16 */
-               unsigned short int mycrc = 0x0000;
-
-               /* compute the CRC field (excluding itself) */
-               remaining = L4;
-               while (remaining--)
-                       jpwl_updateCRC16(&mycrc, *(L4_buf++));
-
-               /* write the CRC field */
-               *(L3_buf++) = (unsigned char) (mycrc >> 8);
-               *(L3_buf++) = (unsigned char) (mycrc >> 0);
-
-       } else if (epb->hprot == 32) {
-
-               /* CRC-32 */
-               unsigned long int mycrc = 0x00000000;
-
-               /* compute the CRC field (excluding itself) */
-               remaining = L4;
-               while (remaining--)
-                       jpwl_updateCRC32(&mycrc, *(L4_buf++));
-
-               /* write the CRC field */
-               *(L3_buf++) = (unsigned char) (mycrc >> 24);
-               *(L3_buf++) = (unsigned char) (mycrc >> 16);
-               *(L3_buf++) = (unsigned char) (mycrc >> 8);
-               *(L3_buf++) = (unsigned char) (mycrc >> 0);
-
-       } else {
-
-               /* RS */
-
-               /* Initialize RS structures */
-               P = epb->n_post - epb->k_post;
-               NN_P = NN - P;
-               memset(codeword, 0, NN);
-               parityword = codeword + NN_P;
-               init_rs(NN_P);
-
-               /* Compute redundancy of post-data message words */
-               remaining = L4;
-               while (remaining) {
-
-                       /* copy message data into codeword buffer */
-                       if (remaining < epb->k_post) {
-                               /* the last message word is zero-padded */
-                               memset(codeword, 0, NN);
-                               memcpy(codeword, L4_buf, remaining);
-                               L4_buf += remaining;
-                               remaining = 0;
+            }
 
-                       } else {
-                               memcpy(codeword, L4_buf, epb->k_post);
-                               L4_buf += epb->k_post;
-                               remaining -= epb->k_post;
-
-                       }
-
-                       /* Encode the buffer and obtain parity bytes */
-                       if (encode_rs(codeword, parityword))
-                               opj_event_msg(j2k->cinfo, EVT_WARNING,
-                                       "Possible encoding error in codeword @ position #%d\n", (L4_buf - buf) / epb->k_post);
+            /* Encode the buffer and obtain parity bytes */
+            if (encode_rs(codeword, parityword))
+                opj_event_msg(j2k->cinfo, EVT_WARNING,
+                              "Possible encoding error in codeword @ position #%d\n",
+                              (L4_buf - buf) / epb->k_post);
 
-                       /* copy parity bytes only in redundancy buffer */
-                       memcpy(L3_buf, parityword, P); 
+            /* copy parity bytes only in redundancy buffer */
+            memcpy(L3_buf, parityword, P);
 
-                       /* advance parity buffer */
-                       L3_buf += P;
-               }
+            /* advance parity buffer */
+            L3_buf += P;
+        }
 
-       }
+    }
 
-       return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
 
-opj_bool jpwl_correct(opj_j2k_t *j2k) {
-
-       opj_cio_t *cio = j2k->cio;
-       opj_bool status;
-       static opj_bool mh_done = OPJ_FALSE;
-       int mark_pos, id, len, skips, sot_pos;
-       unsigned long int Psot = 0;
-
-       /* go back to marker position */
-       mark_pos = cio_tell(cio) - 2;
-       cio_seek(cio, mark_pos);
-
-       if ((j2k->state == J2K_STATE_MHSOC) && !mh_done) {
-
-               int mark_val = 0, skipnum = 0;
-
-               /*
-                 COLOR IMAGE
-                 first thing to do, if we are here, is to look whether
-                 51 (skipnum) positions ahead there is an EPB, in case of MH
-               */
-               /*
-                 B/W IMAGE
-                 first thing to do, if we are here, is to look whether
-                 45 (skipnum) positions ahead there is an EPB, in case of MH
-               */
-               /*       SIZ   SIZ_FIELDS     SIZ_COMPS               FOLLOWING_MARKER */
-               skipnum = 2  +     38     + 3 * j2k->cp->exp_comps  +         2;
-               if ((cio->bp + skipnum) < cio->end) {
-
-                       cio_skip(cio, skipnum);
-
-                       /* check that you are not going beyond the end of codestream */
-
-                       /* call EPB corrector */
-                       status = jpwl_epb_correct(j2k,     /* J2K decompressor handle */
-                                                                         cio->bp, /* pointer to EPB in codestream buffer */
-                                                                         0,       /* EPB type: MH */
-                                                                         skipnum,      /* length of pre-data */
-                                                                         -1,      /* length of post-data: -1 means auto */
-                                                                         NULL,
-                                                                         NULL
-                                                                        );
-
-                       /* read the marker value */
-                       mark_val = (*(cio->bp) << 8) | *(cio->bp + 1);
-
-                       if (status && (mark_val == J2K_MS_EPB)) {
-                               /* we found it! */
-                               mh_done = OPJ_TRUE;
-                               return OPJ_TRUE;
-                       }
-
-                       /* Disable correction in case of missing or bad head EPB */
-                       /* We can't do better! */
-                       /* PATCHED: 2008-01-25 */
-                       /* MOVED UP: 2008-02-01 */
-                       if (!status) {
-                               j2k->cp->correct = OPJ_FALSE;
-                               opj_event_msg(j2k->cinfo, EVT_WARNING, "Couldn't find the MH EPB: disabling JPWL\n");
-                       }
-
-               }
-
-       }
-
-       if (OPJ_TRUE /*(j2k->state == J2K_STATE_TPHSOT) || (j2k->state == J2K_STATE_TPH)*/) {
-               /* else, look if 12 positions ahead there is an EPB, in case of TPH */
-               cio_seek(cio, mark_pos);
-               if ((cio->bp + 12) < cio->end) {
-
-                       cio_skip(cio, 12);
-
-                       /* call EPB corrector */
-                       status = jpwl_epb_correct(j2k,     /* J2K decompressor handle */
-                                                                         cio->bp, /* pointer to EPB in codestream buffer */
-                                                                         1,       /* EPB type: TPH */
-                                                                         12,      /* length of pre-data */
-                                                                         -1,      /* length of post-data: -1 means auto */
-                                                                         NULL,
-                                                                         NULL
-                                                                        );
-                       if (status)
-                               /* we found it! */
-                               return OPJ_TRUE;
-               }
-       }
-
-       return OPJ_FALSE;
-
-       /* for now, don't use this code */
-
-       /* else, look if here is an EPB, in case of other */
-       if (mark_pos > 64) {
-               /* it cannot stay before the first MH EPB */
-               cio_seek(cio, mark_pos);
-               cio_skip(cio, 0);
-
-               /* call EPB corrector */
-               status = jpwl_epb_correct(j2k,     /* J2K decompressor handle */
-                                                                 cio->bp, /* pointer to EPB in codestream buffer */
-                                                                 2,       /* EPB type: TPH */
-                                                                 0,       /* length of pre-data */
-                                                                 -1,      /* length of post-data: -1 means auto */
-                                                                 NULL,
-                                                                 NULL
-                                                                );
-               if (status)
-                       /* we found it! */
-                       return OPJ_TRUE;
-       }
-
-       /* nope, no EPBs probably, or they are so damaged that we can give up */
-       return OPJ_FALSE;
-       
-       return OPJ_TRUE;
-
-       /* AN ATTEMPT OF PARSER */
-       /* NOT USED ACTUALLY    */
-
-       /* go to the beginning of the file */
-       cio_seek(cio, 0);
-
-       /* let's begin */
-       j2k->state = J2K_STATE_MHSOC;
-
-       /* cycle all over the markers */
-       while (cio_tell(cio) < cio->length) {
-
-               /* read the marker */
-               mark_pos = cio_tell(cio);
-               id = cio_read(cio, 2);
-
-               /* details */
-               printf("Marker@%d: %X\n", cio_tell(cio) - 2, id);
-
-               /* do an action in response to the read marker */
-               switch (id) {
-
-               /* short markers */
-
-                       /* SOC */
-               case J2K_MS_SOC:
-                       j2k->state = J2K_STATE_MHSIZ;
-                       len = 0;
-                       skips = 0;
-                       break;
-
-                       /* EOC */
-               case J2K_MS_EOC:
-                       j2k->state = J2K_STATE_MT;
-                       len = 0;
-                       skips = 0;
-                       break;
-
-                       /* particular case of SOD */
-               case J2K_MS_SOD:
-                       len = Psot - (mark_pos - sot_pos) - 2;
-                       skips = len;
-                       break;
-
-               /* long markers */
-
-                       /* SOT */
-               case J2K_MS_SOT:
-                       j2k->state = J2K_STATE_TPH;
-                       sot_pos = mark_pos; /* position of SOT */
-                       len = cio_read(cio, 2); /* read the length field */
-                       cio_skip(cio, 2); /* this field is unnecessary */
-                       Psot = cio_read(cio, 4); /* tile length */
-                       skips = len - 8;
-                       break;
-
-                       /* remaining */
-               case J2K_MS_SIZ:
-                       j2k->state = J2K_STATE_MH;
-                       /* read the length field */
-                       len = cio_read(cio, 2);
-                       skips = len - 2;
-                       break;
-
-                       /* remaining */
-               default:
-                       /* read the length field */
-                       len = cio_read(cio, 2);
-                       skips = len - 2;
-                       break;
-
-               }
-
-               /* skip to marker's end */
-               cio_skip(cio, skips);   
-
-       }
+opj_bool jpwl_correct(opj_j2k_t *j2k)
+{
+
+    opj_cio_t *cio = j2k->cio;
+    opj_bool status;
+    static opj_bool mh_done = OPJ_FALSE;
+    int mark_pos, id, len, skips, sot_pos;
+    unsigned long int Psot = 0;
+
+    /* go back to marker position */
+    mark_pos = cio_tell(cio) - 2;
+    cio_seek(cio, mark_pos);
+
+    if ((j2k->state == J2K_STATE_MHSOC) && !mh_done) {
+
+        int mark_val = 0, skipnum = 0;
+
+        /*
+          COLOR IMAGE
+          first thing to do, if we are here, is to look whether
+          51 (skipnum) positions ahead there is an EPB, in case of MH
+        */
+        /*
+          B/W IMAGE
+          first thing to do, if we are here, is to look whether
+          45 (skipnum) positions ahead there is an EPB, in case of MH
+        */
+        /*       SIZ   SIZ_FIELDS     SIZ_COMPS               FOLLOWING_MARKER */
+        skipnum = 2  +     38     + 3 * j2k->cp->exp_comps  +         2;
+        if ((cio->bp + skipnum) < cio->end) {
+
+            cio_skip(cio, skipnum);
+
+            /* check that you are not going beyond the end of codestream */
+
+            /* call EPB corrector */
+            status = jpwl_epb_correct(j2k,     /* J2K decompressor handle */
+                                      cio->bp, /* pointer to EPB in codestream buffer */
+                                      0,       /* EPB type: MH */
+                                      skipnum,      /* length of pre-data */
+                                      -1,      /* length of post-data: -1 means auto */
+                                      NULL,
+                                      NULL
+                                     );
+
+            /* read the marker value */
+            mark_val = (*(cio->bp) << 8) | *(cio->bp + 1);
+
+            if (status && (mark_val == J2K_MS_EPB)) {
+                /* we found it! */
+                mh_done = OPJ_TRUE;
+                return OPJ_TRUE;
+            }
+
+            /* Disable correction in case of missing or bad head EPB */
+            /* We can't do better! */
+            /* PATCHED: 2008-01-25 */
+            /* MOVED UP: 2008-02-01 */
+            if (!status) {
+                j2k->cp->correct = OPJ_FALSE;
+                opj_event_msg(j2k->cinfo, EVT_WARNING,
+                              "Couldn't find the MH EPB: disabling JPWL\n");
+            }
+
+        }
+
+    }
+
+    if (OPJ_TRUE /*(j2k->state == J2K_STATE_TPHSOT) || (j2k->state == J2K_STATE_TPH)*/) {
+        /* else, look if 12 positions ahead there is an EPB, in case of TPH */
+        cio_seek(cio, mark_pos);
+        if ((cio->bp + 12) < cio->end) {
+
+            cio_skip(cio, 12);
+
+            /* call EPB corrector */
+            status = jpwl_epb_correct(j2k,     /* J2K decompressor handle */
+                                      cio->bp, /* pointer to EPB in codestream buffer */
+                                      1,       /* EPB type: TPH */
+                                      12,      /* length of pre-data */
+                                      -1,      /* length of post-data: -1 means auto */
+                                      NULL,
+                                      NULL
+                                     );
+            if (status)
+                /* we found it! */
+            {
+                return OPJ_TRUE;
+            }
+        }
+    }
+
+    return OPJ_FALSE;
+
+    /* for now, don't use this code */
+
+    /* else, look if here is an EPB, in case of other */
+    if (mark_pos > 64) {
+        /* it cannot stay before the first MH EPB */
+        cio_seek(cio, mark_pos);
+        cio_skip(cio, 0);
+
+        /* call EPB corrector */
+        status = jpwl_epb_correct(j2k,     /* J2K decompressor handle */
+                                  cio->bp, /* pointer to EPB in codestream buffer */
+                                  2,       /* EPB type: TPH */
+                                  0,       /* length of pre-data */
+                                  -1,      /* length of post-data: -1 means auto */
+                                  NULL,
+                                  NULL
+                                 );
+        if (status)
+            /* we found it! */
+        {
+            return OPJ_TRUE;
+        }
+    }
+
+    /* nope, no EPBs probably, or they are so damaged that we can give up */
+    return OPJ_FALSE;
+
+    return OPJ_TRUE;
+
+    /* AN ATTEMPT OF PARSER */
+    /* NOT USED ACTUALLY    */
+
+    /* go to the beginning of the file */
+    cio_seek(cio, 0);
+
+    /* let's begin */
+    j2k->state = J2K_STATE_MHSOC;
+
+    /* cycle all over the markers */
+    while (cio_tell(cio) < cio->length) {
+
+        /* read the marker */
+        mark_pos = cio_tell(cio);
+        id = cio_read(cio, 2);
+
+        /* details */
+        printf("Marker@%d: %X\n", cio_tell(cio) - 2, id);
+
+        /* do an action in response to the read marker */
+        switch (id) {
+
+        /* short markers */
+
+        /* SOC */
+        case J2K_MS_SOC:
+            j2k->state = J2K_STATE_MHSIZ;
+            len = 0;
+            skips = 0;
+            break;
+
+        /* EOC */
+        case J2K_MS_EOC:
+            j2k->state = J2K_STATE_MT;
+            len = 0;
+            skips = 0;
+            break;
+
+        /* particular case of SOD */
+        case J2K_MS_SOD:
+            len = Psot - (mark_pos - sot_pos) - 2;
+            skips = len;
+            break;
+
+        /* long markers */
+
+        /* SOT */
+        case J2K_MS_SOT:
+            j2k->state = J2K_STATE_TPH;
+            sot_pos = mark_pos; /* position of SOT */
+            len = cio_read(cio, 2); /* read the length field */
+            cio_skip(cio, 2); /* this field is unnecessary */
+            Psot = cio_read(cio, 4); /* tile length */
+            skips = len - 8;
+            break;
+
+        /* remaining */
+        case J2K_MS_SIZ:
+            j2k->state = J2K_STATE_MH;
+            /* read the length field */
+            len = cio_read(cio, 2);
+            skips = len - 2;
+            break;
+
+        /* remaining */
+        default:
+            /* read the length field */
+            len = cio_read(cio, 2);
+            skips = len - 2;
+            break;
+
+        }
+
+        /* skip to marker's end */
+        cio_skip(cio, skips);
+
+    }
 
 
 }
 
-opj_bool jpwl_epb_correct(opj_j2k_t *j2k, unsigned char *buffer, int type, int pre_len, int post_len, int *conn,
-                                         unsigned char **L4_bufp) {
-
-       /* Operating buffer */
-       unsigned char codeword[NN], *parityword;
-
-       unsigned long int P, NN_P;
-       unsigned long int L1, L4;
-       int remaining, n_pre, k_pre, n_post, k_post;
-
-       int status, tt;
-
-       int orig_pos = cio_tell(j2k->cio);
-
-       unsigned char *L1_buf, *L2_buf;
-       unsigned char *L3_buf, *L4_buf;
-
-       unsigned long int LDPepb, Pepb;
-       unsigned short int Lepb;
-       unsigned char Depb;
-       char str1[25] = "";
-       int myconn, errnum = 0;
-       opj_bool errflag = OPJ_FALSE;
-       
-       opj_cio_t *cio = j2k->cio;
-
-       /* check for common errors */
-       if (!buffer) {
-               opj_event_msg(j2k->cinfo, EVT_ERROR, "The EPB pointer is a NULL buffer\n");
-               return OPJ_FALSE;
-       }
-       
-       /* set bignesses */
-       L1 = pre_len + 13;
-
-       /* pre-data correction */
-       switch (type) {
-
-       case 0:
-               /* MH EPB */
-               k_pre = 64;
-               n_pre = 160;
-               break;
-
-       case 1:
-               /* TPH EPB */
-               k_pre = 25;
-               n_pre = 80;
-               break;
-
-       case 2:
-               /* other EPBs */
-               k_pre = 13;
-               n_pre = 40;
-               break;
-
-       case 3:
-               /* automatic setup */
-               opj_event_msg(j2k->cinfo, EVT_ERROR, "Auto. setup not yet implemented\n");
-               return OPJ_FALSE;
-               break;
-
-       default:
-               /* unknown type */
-               opj_event_msg(j2k->cinfo, EVT_ERROR, "Unknown expected EPB type\n");
-               return OPJ_FALSE;
-               break;
-
-       }
-
-       /* Initialize RS structures */
-       P = n_pre - k_pre;
-       NN_P = NN - P;
-       tt = (int) floor((float) P / 2.0F); /* correction capability of the code */
-       memset(codeword, 0, NN);
-       parityword = codeword + NN_P;
-       init_rs(NN_P);
-
-       /* Correct pre-data message words */
-       L1_buf = buffer - pre_len;
-       L2_buf = buffer + 13;
-       remaining = L1;
-       while (remaining) {
-               /* always zero-pad codewords */
-               /* (this is required, since after decoding the zeros in the long codeword
-                   could change, and keep unchanged in subsequent calls) */
-               memset(codeword, 0, NN);
-
-               /* copy codeword buffer into message bytes */
-               if (remaining < k_pre)
-                       memcpy(codeword, L1_buf, remaining);
-               else
-                       memcpy(codeword, L1_buf, k_pre);
-
-               /* copy redundancy buffer in parity bytes */
-               memcpy(parityword, L2_buf, P); 
-
-               /* Decode the buffer and possibly obtain corrected bytes */
-               status = eras_dec_rs(codeword, NULL, 0);
-               if (status == -1) {
-                       /*if (conn == NULL)
-                               opj_event_msg(j2k->cinfo, EVT_WARNING,
-                                       "Possible decoding error in codeword @ position #%d\n", (L1_buf - buffer) / k_pre);*/
-                       errflag = OPJ_TRUE;
-                       /* we can try to safely get out from the function:
-                         if we are here, either this is not an EPB or the first codeword
-                         is too damaged to be helpful */
-                       /*return OPJ_FALSE;*/
-
-               } else if (status == 0) {
-                       /*if (conn == NULL)
-                               opj_event_msg(j2k->cinfo, EVT_INFO, "codeword is correctly decoded\n");*/
-
-               } else if (status <= tt) {
-                       /* it has corrected 0 <= errs <= tt */
-                       /*if (conn == NULL)
-                               opj_event_msg(j2k->cinfo, EVT_WARNING, "%d errors corrected in codeword\n", status);*/
-                       errnum += status;
-
-               } else {
-                       /*if (conn == NULL)
-                               opj_event_msg(j2k->cinfo, EVT_WARNING, "EPB correction capability exceeded\n");
-                       return OPJ_FALSE;*/
-                       errflag = OPJ_TRUE;
-               }
-
-
-               /* advance parity buffer */
-               if ((status >= 0) && (status <= tt))
-                       /* copy back corrected parity only if all is OK */
-                       memcpy(L2_buf, parityword, P);
-               L2_buf += P;
-
-               /* advance message buffer */
-               if (remaining < k_pre) {
-                       if ((status >= 0) && (status <= tt))
-                               /* copy back corrected data only if all is OK */
-                               memcpy(L1_buf, codeword, remaining);
-                       L1_buf += remaining;
-                       remaining = 0;
-
-               } else {
-                       if ((status >= 0) && (status <= tt))
-                               /* copy back corrected data only if all is OK */
-                               memcpy(L1_buf, codeword, k_pre);
-                       L1_buf += k_pre;
-                       remaining -= k_pre;
-
-               }
-       }
-
-       /* print summary */
-       if (!conn) {
-
-               /*if (errnum)
-                       opj_event_msg(j2k->cinfo, EVT_INFO, "+ %d symbol errors corrected (Ps=%.1e)\n", errnum,
-                               (float) errnum / ((float) n_pre * (float) L1 / (float) k_pre));*/
-               if (errflag) {
-                       /*opj_event_msg(j2k->cinfo, EVT_INFO, "+ there were unrecoverable errors\n");*/
-                       return OPJ_FALSE;
-               }
-
-       }
-
-       /* presumably, now, EPB parameters are correct */
-       /* let's get them */
-
-       /* Simply read the EPB parameters */
-       if (conn)
-               cio->bp = buffer;
-       cio_skip(cio, 2); /* the marker */
-       Lepb = cio_read(cio, 2);
-       Depb = cio_read(cio, 1);
-       LDPepb = cio_read(cio, 4);
-       Pepb = cio_read(cio, 4);
-
-       /* What does Pepb tells us about the protection method? */
-       if (((Pepb & 0xF0000000) >> 28) == 0)
-               sprintf(str1, "pred"); /* predefined */
-       else if (((Pepb & 0xF0000000) >> 28) == 1)
-               sprintf(str1, "crc-%lu", 16 * ((Pepb & 0x00000001) + 1)); /* CRC mode */
-       else if (((Pepb & 0xF0000000) >> 28) == 2)
-               sprintf(str1, "rs(%lu,32)", (Pepb & 0x0000FF00) >> 8); /* RS mode */
-       else if (Pepb == 0xFFFFFFFF)
-               sprintf(str1, "nometh"); /* RS mode */
-       else
-               sprintf(str1, "unknown"); /* unknown */
-
-       /* Now we write them to screen */
-       if (!conn && post_len)
-               opj_event_msg(j2k->cinfo, EVT_INFO,
-                       "EPB(%d): (%sl, %sp, %u), %lu, %s\n",
-                       cio_tell(cio) - 13,
-                       (Depb & 0x40) ? "" : "n", /* latest EPB or not? */
-                       (Depb & 0x80) ? "" : "n", /* packed or unpacked EPB? */
-                       (Depb & 0x3F), /* EPB index value */
-                       LDPepb, /*length of the data protected by the EPB */
-                       str1); /* protection method */
-
-
-       /* well, we need to investigate how long is the connected length of packed EPBs */
-       myconn = Lepb + 2;
-       if ((Depb & 0x40) == 0) /* not latest in header */
-               jpwl_epb_correct(j2k,      /* J2K decompressor handle */
-                                            buffer + Lepb + 2,   /* pointer to next EPB in codestream buffer */
-                                            2,     /* EPB type: should be of other type */
-                                            0,  /* only EPB fields */
-                                            0, /* do not look after */
-                                                &myconn,
-                                                NULL
-                                            );
-       if (conn)
-               *conn += myconn;
-
-       /*if (!conn)
-               printf("connected = %d\n", myconn);*/
-
-       /*cio_seek(j2k->cio, orig_pos);
-       return OPJ_TRUE;*/
-
-       /* post-data
-          the position of L4 buffer is at the end of currently connected EPBs
-       */
-       if (!(L4_bufp))
-               L4_buf = buffer + myconn;
-       else if (!(*L4_bufp))
-               L4_buf = buffer + myconn;
-       else
-               L4_buf = *L4_bufp;
-       if (post_len == -1) 
-               L4 = LDPepb - pre_len - 13;
-       else if (post_len == 0)
-               L4 = 0;
-       else
-               L4 = post_len;
-
-       L3_buf = L2_buf;
-
-       /* Do a further check here on the read parameters */
-       if (L4 > (unsigned long) cio_numbytesleft(j2k->cio))
-               /* overflow */
-               return OPJ_FALSE;
-
-       /* we are ready for decoding the remaining data */
-       if (((Pepb & 0xF0000000) >> 28) == 1) {
-               /* CRC here */
-               if ((16 * ((Pepb & 0x00000001) + 1)) == 16) {
-
-                       /* CRC-16 */
-                       unsigned short int mycrc = 0x0000, filecrc = 0x0000;
-
-                       /* compute the CRC field */
-                       remaining = L4;
-                       while (remaining--)
-                               jpwl_updateCRC16(&mycrc, *(L4_buf++));
-
-                       /* read the CRC field */
-                       filecrc = *(L3_buf++) << 8;
-                       filecrc |= *(L3_buf++);
-
-                       /* check the CRC field */
-                       if (mycrc == filecrc) {
-                               if (conn == NULL)
-                                       opj_event_msg(j2k->cinfo, EVT_INFO, "- CRC is OK\n");
-                       } else {
-                               if (conn == NULL)
-                                       opj_event_msg(j2k->cinfo, EVT_WARNING, "- CRC is KO (r=%d, c=%d)\n", filecrc, mycrc);
-                               errflag = OPJ_TRUE;
-                       }       
-               }
-
-               if ((16 * ((Pepb & 0x00000001) + 1)) == 32) {
-
-                       /* CRC-32 */
-                       unsigned long int mycrc = 0x00000000, filecrc = 0x00000000;
-
-                       /* compute the CRC field */
-                       remaining = L4;
-                       while (remaining--)
-                               jpwl_updateCRC32(&mycrc, *(L4_buf++));
-
-                       /* read the CRC field */
-                       filecrc = *(L3_buf++) << 24;
-                       filecrc |= *(L3_buf++) << 16;
-                       filecrc |= *(L3_buf++) << 8;
-                       filecrc |= *(L3_buf++);
-
-                       /* check the CRC field */
-                       if (mycrc == filecrc) {
-                               if (conn == NULL)
-                                       opj_event_msg(j2k->cinfo, EVT_INFO, "- CRC is OK\n");
-                       } else {
-                               if (conn == NULL)
-                                       opj_event_msg(j2k->cinfo, EVT_WARNING, "- CRC is KO (r=%d, c=%d)\n", filecrc, mycrc);
-                               errflag = OPJ_TRUE;
-                       }
-               }
-
-       } else if (Pepb == 0xFFFFFFFF) {
-               /* no method */
-
-               /* advance without doing anything */
-               remaining = L4;
-               while (remaining--)
-                       L4_buf++;
-
-       } else if ((((Pepb & 0xF0000000) >> 28) == 2) || (((Pepb & 0xF0000000) >> 28) == 0)) {
-               /* RS coding here */
-
-               if (((Pepb & 0xF0000000) >> 28) == 0) {
-
-                       k_post = k_pre;
-                       n_post = n_pre;
-
-               } else {
-
-                       k_post = 32;
-                       n_post = (Pepb & 0x0000FF00) >> 8;
-               }
-
-               /* Initialize RS structures */
-               P = n_post - k_post;
-               NN_P = NN - P;
-               tt = (int) floor((float) P / 2.0F); /* again, correction capability */
-               memset(codeword, 0, NN);
-               parityword = codeword + NN_P;
-               init_rs(NN_P);
-
-               /* Correct post-data message words */
-               /*L4_buf = buffer + Lepb + 2;*/
-               L3_buf = L2_buf;
-               remaining = L4;
-               while (remaining) {
-                       /* always zero-pad codewords */
-                       /* (this is required, since after decoding the zeros in the long codeword
-                               could change, and keep unchanged in subsequent calls) */
-                       memset(codeword, 0, NN);
-
-                       /* copy codeword buffer into message bytes */
-                       if (remaining < k_post)
-                               memcpy(codeword, L4_buf, remaining);
-                       else
-                               memcpy(codeword, L4_buf, k_post);
-
-                       /* copy redundancy buffer in parity bytes */
-                       memcpy(parityword, L3_buf, P); 
-
-                       /* Decode the buffer and possibly obtain corrected bytes */
-                       status = eras_dec_rs(codeword, NULL, 0);
-                       if (status == -1) {
-                               /*if (conn == NULL)
-                                       opj_event_msg(j2k->cinfo, EVT_WARNING,
-                                               "Possible decoding error in codeword @ position #%d\n", (L4_buf - (buffer + Lepb + 2)) / k_post);*/
-                               errflag = OPJ_TRUE;
-
-                       } else if (status == 0) {
-                               /*if (conn == NULL)
-                                       opj_event_msg(j2k->cinfo, EVT_INFO, "codeword is correctly decoded\n");*/
-
-                       } else if (status <= tt) {
-                               /*if (conn == NULL)
-                                       opj_event_msg(j2k->cinfo, EVT_WARNING, "%d errors corrected in codeword\n", status);*/
-                               errnum += status;
-
-                       } else {
-                               /*if (conn == NULL)
-                                       opj_event_msg(j2k->cinfo, EVT_WARNING, "EPB correction capability exceeded\n");
-                               return OPJ_FALSE;*/
-                               errflag = OPJ_TRUE;
-                       }
-
-
-                       /* advance parity buffer */
-                       if ((status >= 0) && (status <= tt))
-                               /* copy back corrected data only if all is OK */
-                               memcpy(L3_buf, parityword, P);
-                       L3_buf += P;
-
-                       /* advance message buffer */
-                       if (remaining < k_post) {
-                               if ((status >= 0) && (status <= tt))
-                                       /* copy back corrected data only if all is OK */
-                                       memcpy(L4_buf, codeword, remaining);
-                               L4_buf += remaining;
-                               remaining = 0;
-
-                       } else {
-                               if ((status >= 0) && (status <= tt))
-                                       /* copy back corrected data only if all is OK */
-                                       memcpy(L4_buf, codeword, k_post);
-                               L4_buf += k_post;
-                               remaining -= k_post;
-
-                       }
-               }
-       }
-
-       /* give back the L4_buf address */
-       if (L4_bufp)
-               *L4_bufp = L4_buf;
-
-       /* print summary */
-       if (!conn) {
-
-               if (errnum)
-                       opj_event_msg(j2k->cinfo, EVT_INFO, "- %d symbol errors corrected (Ps=%.1e)\n", errnum,
-                               (float) errnum / (float) LDPepb);
-               if (errflag)
-                       opj_event_msg(j2k->cinfo, EVT_INFO, "- there were unrecoverable errors\n");
-
-       }
-
-       cio_seek(j2k->cio, orig_pos);
-
-       return OPJ_TRUE;
+opj_bool jpwl_epb_correct(opj_j2k_t *j2k, unsigned char *buffer, int type,
+                          int pre_len, int post_len, int *conn,
+                          unsigned char **L4_bufp)
+{
+
+    /* Operating buffer */
+    unsigned char codeword[NN], *parityword;
+
+    unsigned long int P, NN_P;
+    unsigned long int L1, L4;
+    int remaining, n_pre, k_pre, n_post, k_post;
+
+    int status, tt;
+
+    int orig_pos = cio_tell(j2k->cio);
+
+    unsigned char *L1_buf, *L2_buf;
+    unsigned char *L3_buf, *L4_buf;
+
+    unsigned long int LDPepb, Pepb;
+    unsigned short int Lepb;
+    unsigned char Depb;
+    char str1[25] = "";
+    int myconn, errnum = 0;
+    opj_bool errflag = OPJ_FALSE;
+
+    opj_cio_t *cio = j2k->cio;
+
+    /* check for common errors */
+    if (!buffer) {
+        opj_event_msg(j2k->cinfo, EVT_ERROR, "The EPB pointer is a NULL buffer\n");
+        return OPJ_FALSE;
+    }
+
+    /* set bignesses */
+    L1 = pre_len + 13;
+
+    /* pre-data correction */
+    switch (type) {
+
+    case 0:
+        /* MH EPB */
+        k_pre = 64;
+        n_pre = 160;
+        break;
+
+    case 1:
+        /* TPH EPB */
+        k_pre = 25;
+        n_pre = 80;
+        break;
+
+    case 2:
+        /* other EPBs */
+        k_pre = 13;
+        n_pre = 40;
+        break;
+
+    case 3:
+        /* automatic setup */
+        opj_event_msg(j2k->cinfo, EVT_ERROR, "Auto. setup not yet implemented\n");
+        return OPJ_FALSE;
+        break;
+
+    default:
+        /* unknown type */
+        opj_event_msg(j2k->cinfo, EVT_ERROR, "Unknown expected EPB type\n");
+        return OPJ_FALSE;
+        break;
+
+    }
+
+    /* Initialize RS structures */
+    P = n_pre - k_pre;
+    NN_P = NN - P;
+    tt = (int) floor((float) P / 2.0F); /* correction capability of the code */
+    memset(codeword, 0, NN);
+    parityword = codeword + NN_P;
+    init_rs(NN_P);
+
+    /* Correct pre-data message words */
+    L1_buf = buffer - pre_len;
+    L2_buf = buffer + 13;
+    remaining = L1;
+    while (remaining) {
+
+        /* always zero-pad codewords */
+        /* (this is required, since after decoding the zeros in the long codeword
+            could change, and keep unchanged in subsequent calls) */
+        memset(codeword, 0, NN);
+
+        /* copy codeword buffer into message bytes */
+        if (remaining < k_pre) {
+            memcpy(codeword, L1_buf, remaining);
+        } else {
+            memcpy(codeword, L1_buf, k_pre);
+        }
+
+        /* copy redundancy buffer in parity bytes */
+        memcpy(parityword, L2_buf, P);
+
+        /* Decode the buffer and possibly obtain corrected bytes */
+        status = eras_dec_rs(codeword, NULL, 0);
+        if (status == -1) {
+            /*if (conn == NULL)
+                opj_event_msg(j2k->cinfo, EVT_WARNING,
+                    "Possible decoding error in codeword @ position #%d\n", (L1_buf - buffer) / k_pre);*/
+            errflag = OPJ_TRUE;
+            /* we can try to safely get out from the function:
+              if we are here, either this is not an EPB or the first codeword
+              is too damaged to be helpful */
+            /*return OPJ_FALSE;*/
+
+        } else if (status == 0) {
+            /*if (conn == NULL)
+                opj_event_msg(j2k->cinfo, EVT_INFO, "codeword is correctly decoded\n");*/
+
+        } else if (status <= tt) {
+            /* it has corrected 0 <= errs <= tt */
+            /*if (conn == NULL)
+                opj_event_msg(j2k->cinfo, EVT_WARNING, "%d errors corrected in codeword\n", status);*/
+            errnum += status;
+
+        } else {
+            /*if (conn == NULL)
+                opj_event_msg(j2k->cinfo, EVT_WARNING, "EPB correction capability exceeded\n");
+            return OPJ_FALSE;*/
+            errflag = OPJ_TRUE;
+        }
+
+
+        /* advance parity buffer */
+        if ((status >= 0) && (status <= tt))
+            /* copy back corrected parity only if all is OK */
+        {
+            memcpy(L2_buf, parityword, P);
+        }
+        L2_buf += P;
+
+        /* advance message buffer */
+        if (remaining < k_pre) {
+            if ((status >= 0) && (status <= tt))
+                /* copy back corrected data only if all is OK */
+            {
+                memcpy(L1_buf, codeword, remaining);
+            }
+            L1_buf += remaining;
+            remaining = 0;
+
+        } else {
+            if ((status >= 0) && (status <= tt))
+                /* copy back corrected data only if all is OK */
+            {
+                memcpy(L1_buf, codeword, k_pre);
+            }
+            L1_buf += k_pre;
+            remaining -= k_pre;
+
+        }
+    }
+
+    /* print summary */
+    if (!conn) {
+
+        /*if (errnum)
+            opj_event_msg(j2k->cinfo, EVT_INFO, "+ %d symbol errors corrected (Ps=%.1e)\n", errnum,
+                (float) errnum / ((float) n_pre * (float) L1 / (float) k_pre));*/
+        if (errflag) {
+            /*opj_event_msg(j2k->cinfo, EVT_INFO, "+ there were unrecoverable errors\n");*/
+            return OPJ_FALSE;
+        }
+
+    }
+
+    /* presumably, now, EPB parameters are correct */
+    /* let's get them */
+
+    /* Simply read the EPB parameters */
+    if (conn) {
+        cio->bp = buffer;
+    }
+    cio_skip(cio, 2); /* the marker */
+    Lepb = cio_read(cio, 2);
+    Depb = cio_read(cio, 1);
+    LDPepb = cio_read(cio, 4);
+    Pepb = cio_read(cio, 4);
+
+    /* What does Pepb tells us about the protection method? */
+    if (((Pepb & 0xF0000000) >> 28) == 0) {
+        sprintf(str1, "pred");    /* predefined */
+    } else if (((Pepb & 0xF0000000) >> 28) == 1) {
+        sprintf(str1, "crc-%lu", 16 * ((Pepb & 0x00000001) + 1));    /* CRC mode */
+    } else if (((Pepb & 0xF0000000) >> 28) == 2) {
+        sprintf(str1, "rs(%lu,32)", (Pepb & 0x0000FF00) >> 8);    /* RS mode */
+    } else if (Pepb == 0xFFFFFFFF) {
+        sprintf(str1, "nometh");    /* RS mode */
+    } else {
+        sprintf(str1, "unknown");    /* unknown */
+    }
+
+    /* Now we write them to screen */
+    if (!conn && post_len)
+        opj_event_msg(j2k->cinfo, EVT_INFO,
+                      "EPB(%d): (%sl, %sp, %u), %lu, %s\n",
+                      cio_tell(cio) - 13,
+                      (Depb & 0x40) ? "" : "n", /* latest EPB or not? */
+                      (Depb & 0x80) ? "" : "n", /* packed or unpacked EPB? */
+                      (Depb & 0x3F), /* EPB index value */
+                      LDPepb, /*length of the data protected by the EPB */
+                      str1); /* protection method */
+
+
+    /* well, we need to investigate how long is the connected length of packed EPBs */
+    myconn = Lepb + 2;
+    if ((Depb & 0x40) == 0) /* not latest in header */
+        jpwl_epb_correct(j2k,      /* J2K decompressor handle */
+                         buffer + Lepb + 2,   /* pointer to next EPB in codestream buffer */
+                         2,     /* EPB type: should be of other type */
+                         0,  /* only EPB fields */
+                         0, /* do not look after */
+                         &myconn,
+                         NULL
+                        );
+    if (conn) {
+        *conn += myconn;
+    }
+
+    /*if (!conn)
+        printf("connected = %d\n", myconn);*/
+
+    /*cio_seek(j2k->cio, orig_pos);
+    return OPJ_TRUE;*/
+
+    /* post-data
+       the position of L4 buffer is at the end of currently connected EPBs
+    */
+    if (!(L4_bufp)) {
+        L4_buf = buffer + myconn;
+    } else if (!(*L4_bufp)) {
+        L4_buf = buffer + myconn;
+    } else {
+        L4_buf = *L4_bufp;
+    }
+    if (post_len == -1) {
+        L4 = LDPepb - pre_len - 13;
+    } else if (post_len == 0) {
+        L4 = 0;
+    } else {
+        L4 = post_len;
+    }
+
+    L3_buf = L2_buf;
+
+    /* Do a further check here on the read parameters */
+    if (L4 > (unsigned long) cio_numbytesleft(j2k->cio))
+        /* overflow */
+    {
+        return OPJ_FALSE;
+    }
+
+    /* we are ready for decoding the remaining data */
+    if (((Pepb & 0xF0000000) >> 28) == 1) {
+        /* CRC here */
+        if ((16 * ((Pepb & 0x00000001) + 1)) == 16) {
+
+            /* CRC-16 */
+            unsigned short int mycrc = 0x0000, filecrc = 0x0000;
+
+            /* compute the CRC field */
+            remaining = L4;
+            while (remaining--) {
+                jpwl_updateCRC16(&mycrc, *(L4_buf++));
+            }
+
+            /* read the CRC field */
+            filecrc = *(L3_buf++) << 8;
+            filecrc |= *(L3_buf++);
+
+            /* check the CRC field */
+            if (mycrc == filecrc) {
+                if (conn == NULL) {
+                    opj_event_msg(j2k->cinfo, EVT_INFO, "- CRC is OK\n");
+                }
+            } else {
+                if (conn == NULL) {
+                    opj_event_msg(j2k->cinfo, EVT_WARNING, "- CRC is KO (r=%d, c=%d)\n", filecrc,
+                                  mycrc);
+                }
+                errflag = OPJ_TRUE;
+            }
+        }
+
+        if ((16 * ((Pepb & 0x00000001) + 1)) == 32) {
+
+            /* CRC-32 */
+            unsigned long int mycrc = 0x00000000, filecrc = 0x00000000;
+
+            /* compute the CRC field */
+            remaining = L4;
+            while (remaining--) {
+                jpwl_updateCRC32(&mycrc, *(L4_buf++));
+            }
+
+            /* read the CRC field */
+            filecrc = *(L3_buf++) << 24;
+            filecrc |= *(L3_buf++) << 16;
+            filecrc |= *(L3_buf++) << 8;
+            filecrc |= *(L3_buf++);
+
+            /* check the CRC field */
+            if (mycrc == filecrc) {
+                if (conn == NULL) {
+                    opj_event_msg(j2k->cinfo, EVT_INFO, "- CRC is OK\n");
+                }
+            } else {
+                if (conn == NULL) {
+                    opj_event_msg(j2k->cinfo, EVT_WARNING, "- CRC is KO (r=%d, c=%d)\n", filecrc,
+                                  mycrc);
+                }
+                errflag = OPJ_TRUE;
+            }
+        }
+
+    } else if (Pepb == 0xFFFFFFFF) {
+        /* no method */
+
+        /* advance without doing anything */
+        remaining = L4;
+        while (remaining--) {
+            L4_buf++;
+        }
+
+    } else if ((((Pepb & 0xF0000000) >> 28) == 2) ||
+               (((Pepb & 0xF0000000) >> 28) == 0)) {
+        /* RS coding here */
+
+        if (((Pepb & 0xF0000000) >> 28) == 0) {
+
+            k_post = k_pre;
+            n_post = n_pre;
+
+        } else {
+
+            k_post = 32;
+            n_post = (Pepb & 0x0000FF00) >> 8;
+        }
+
+        /* Initialize RS structures */
+        P = n_post - k_post;
+        NN_P = NN - P;
+        tt = (int) floor((float) P / 2.0F); /* again, correction capability */
+        memset(codeword, 0, NN);
+        parityword = codeword + NN_P;
+        init_rs(NN_P);
+
+        /* Correct post-data message words */
+        /*L4_buf = buffer + Lepb + 2;*/
+        L3_buf = L2_buf;
+        remaining = L4;
+        while (remaining) {
+
+            /* always zero-pad codewords */
+            /* (this is required, since after decoding the zeros in the long codeword
+                could change, and keep unchanged in subsequent calls) */
+            memset(codeword, 0, NN);
+
+            /* copy codeword buffer into message bytes */
+            if (remaining < k_post) {
+                memcpy(codeword, L4_buf, remaining);
+            } else {
+                memcpy(codeword, L4_buf, k_post);
+            }
+
+            /* copy redundancy buffer in parity bytes */
+            memcpy(parityword, L3_buf, P);
+
+            /* Decode the buffer and possibly obtain corrected bytes */
+            status = eras_dec_rs(codeword, NULL, 0);
+            if (status == -1) {
+                /*if (conn == NULL)
+                    opj_event_msg(j2k->cinfo, EVT_WARNING,
+                        "Possible decoding error in codeword @ position #%d\n", (L4_buf - (buffer + Lepb + 2)) / k_post);*/
+                errflag = OPJ_TRUE;
+
+            } else if (status == 0) {
+                /*if (conn == NULL)
+                    opj_event_msg(j2k->cinfo, EVT_INFO, "codeword is correctly decoded\n");*/
+
+            } else if (status <= tt) {
+                /*if (conn == NULL)
+                    opj_event_msg(j2k->cinfo, EVT_WARNING, "%d errors corrected in codeword\n", status);*/
+                errnum += status;
+
+            } else {
+                /*if (conn == NULL)
+                    opj_event_msg(j2k->cinfo, EVT_WARNING, "EPB correction capability exceeded\n");
+                return OPJ_FALSE;*/
+                errflag = OPJ_TRUE;
+            }
+
+
+            /* advance parity buffer */
+            if ((status >= 0) && (status <= tt))
+                /* copy back corrected data only if all is OK */
+            {
+                memcpy(L3_buf, parityword, P);
+            }
+            L3_buf += P;
+
+            /* advance message buffer */
+            if (remaining < k_post) {
+                if ((status >= 0) && (status <= tt))
+                    /* copy back corrected data only if all is OK */
+                {
+                    memcpy(L4_buf, codeword, remaining);
+                }
+                L4_buf += remaining;
+                remaining = 0;
+
+            } else {
+                if ((status >= 0) && (status <= tt))
+                    /* copy back corrected data only if all is OK */
+                {
+                    memcpy(L4_buf, codeword, k_post);
+                }
+                L4_buf += k_post;
+                remaining -= k_post;
+
+            }
+        }
+    }
+
+    /* give back the L4_buf address */
+    if (L4_bufp) {
+        *L4_bufp = L4_buf;
+    }
+
+    /* print summary */
+    if (!conn) {
+
+        if (errnum)
+            opj_event_msg(j2k->cinfo, EVT_INFO, "- %d symbol errors corrected (Ps=%.1e)\n",
+                          errnum,
+                          (float) errnum / (float) LDPepb);
+        if (errflag) {
+            opj_event_msg(j2k->cinfo, EVT_INFO, "- there were unrecoverable errors\n");
+        }
+
+    }
+
+    cio_seek(j2k->cio, orig_pos);
+
+    return OPJ_TRUE;
 }
 
-void jpwl_epc_write(opj_j2k_t *j2k, jpwl_epc_ms_t *epc, unsigned char *buf) {
+void jpwl_epc_write(opj_j2k_t *j2k, jpwl_epc_ms_t *epc, unsigned char *buf)
+{
 
-       /* Marker */
-       *(buf++) = (unsigned char) (J2K_MS_EPC >> 8); 
-       *(buf++) = (unsigned char) (J2K_MS_EPC >> 0); 
+    /* Marker */
+    *(buf++) = (unsigned char)(J2K_MS_EPC >> 8);
+    *(buf++) = (unsigned char)(J2K_MS_EPC >> 0);
 
-       /* Lepc */
-       *(buf++) = (unsigned char) (epc->Lepc >> 8); 
-       *(buf++) = (unsigned char) (epc->Lepc >> 0); 
+    /* Lepc */
+    *(buf++) = (unsigned char)(epc->Lepc >> 8);
+    *(buf++) = (unsigned char)(epc->Lepc >> 0);
 
-       /* Pcrc */
-       *(buf++) = (unsigned char) (epc->Pcrc >> 8); 
-       *(buf++) = (unsigned char) (epc->Pcrc >> 0);
+    /* Pcrc */
+    *(buf++) = (unsigned char)(epc->Pcrc >> 8);
+    *(buf++) = (unsigned char)(epc->Pcrc >> 0);
 
-       /* DL */
-       *(buf++) = (unsigned char) (epc->DL >> 24); 
-       *(buf++) = (unsigned char) (epc->DL >> 16); 
-       *(buf++) = (unsigned char) (epc->DL >> 8); 
-       *(buf++) = (unsigned char) (epc->DL >> 0); 
+    /* DL */
+    *(buf++) = (unsigned char)(epc->DL >> 24);
+    *(buf++) = (unsigned char)(epc->DL >> 16);
+    *(buf++) = (unsigned char)(epc->DL >> 8);
+    *(buf++) = (unsigned char)(epc->DL >> 0);
 
-       /* Pepc */
-       *(buf++) = (unsigned char) (epc->Pepc >> 0); 
+    /* Pepc */
+    *(buf++) = (unsigned char)(epc->Pepc >> 0);
 
-       /* Data */
-       /*memcpy(buf, epc->data, (size_t) epc->Lepc - 9);*/
-       memset(buf, 0, (size_t) epc->Lepc - 9);
+    /* Data */
+    /*memcpy(buf, epc->data, (size_t) epc->Lepc - 9);*/
+    memset(buf, 0, (size_t) epc->Lepc - 9);
 
-       /* update markers struct */
-       j2k_add_marker(j2k->cstr_info, J2K_MS_EPC, -1, epc->Lepc + 2);
+    /* update markers struct */
+    j2k_add_marker(j2k->cstr_info, J2K_MS_EPC, -1, epc->Lepc + 2);
 
 }
 
 int jpwl_esds_add(opj_j2k_t *j2k, jpwl_marker_t *jwmarker, int *jwmarker_num,
-                                 int comps, unsigned char addrm, unsigned char ad_size,
-                                 unsigned char senst, unsigned char se_size,
-                                 double place_pos, int tileno) {
+                  int comps, unsigned char addrm, unsigned char ad_size,
+                  unsigned char senst, unsigned char se_size,
+                  double place_pos, int tileno)
+{
 
-       return 0;
+    return 0;
 }
 
-jpwl_esd_ms_t *jpwl_esd_create(opj_j2k_t *j2k, int comp, 
-       unsigned char addrm, unsigned char ad_size,
-       unsigned char senst, int se_size, int tileno,
-       unsigned long int svalnum, void *sensval) {
-
-       jpwl_esd_ms_t *esd = NULL;
-
-       /* Alloc space */
-       if (!(esd = (jpwl_esd_ms_t *) opj_malloc((size_t) 1 * sizeof (jpwl_esd_ms_t)))) {
-               opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not allocate room for ESD MS\n");
-               return NULL;
-       };
-
-       /* if relative sensitivity, activate byte range mode */
-       if (senst == 0)
-               addrm = 1;
-
-       /* size of sensval's ... */
-       if ((ad_size != 0) && (ad_size != 2) && (ad_size != 4)) {
-               opj_event_msg(j2k->cinfo, EVT_ERROR, "Address size %d for ESD MS is forbidden\n", ad_size);
-               return NULL;
-       }
-       if ((se_size != 1) && (se_size != 2)) {
-               opj_event_msg(j2k->cinfo, EVT_ERROR, "Sensitivity size %d for ESD MS is forbidden\n", se_size);
-               return NULL;
-       }
-       
-       /* ... depends on the addressing mode */
-       switch (addrm) {
-
-       /* packet mode */
-       case (0):
-               ad_size = 0; /* as per the standard */
-               esd->sensval_size = (unsigned int)se_size; 
-               break;
-
-       /* byte range */
-       case (1):
-               /* auto sense address size */
-               if (ad_size == 0)
-                       /* if there are more than 66% of (2^16 - 1) bytes, switch to 4 bytes
-                        (we keep space for possible EPBs being inserted) */
-                       ad_size = (j2k->cstr_info->codestream_size > (1 * 65535 / 3)) ? 4 : 2;
-               esd->sensval_size = ad_size + ad_size + se_size; 
-               break;
-
-       /* packet range */
-       case (2):
-               /* auto sense address size */
-               if (ad_size == 0)
-                       /* if there are more than 2^16 - 1 packets, switch to 4 bytes */
-                       ad_size = (j2k->cstr_info->packno > 65535) ? 4 : 2;
-               esd->sensval_size = ad_size + ad_size + se_size; 
-               break;
-
-       case (3):
-               opj_event_msg(j2k->cinfo, EVT_ERROR, "Address mode %d for ESD MS is unimplemented\n", addrm);
-               return NULL;
-
-       default:
-               opj_event_msg(j2k->cinfo, EVT_ERROR, "Address mode %d for ESD MS is forbidden\n", addrm);
-               return NULL;
-       }
-
-       /* set or unset sensitivity values */
-       if (svalnum <= 0) {
-
-               switch (senst) {
-
-               /* just based on the portions of a codestream */
-               case (0):
-                       /* MH + no. of THs + no. of packets */
-                       svalnum = 1 + (j2k->cstr_info->tw * j2k->cstr_info->th) * (1 + j2k->cstr_info->packno);
-                       break;
-
-               /* all the ones that are based on the packets */
-               default:
-                       if (tileno < 0)
-                               /* MH: all the packets and all the tiles info is written */
-                               svalnum = j2k->cstr_info->tw * j2k->cstr_info->th * j2k->cstr_info->packno;
-                       else
-                               /* TPH: only that tile info is written */
-                               svalnum = j2k->cstr_info->packno;
-                       break;
-
-               }
-       }               
-
-       /* fill private fields */
-       esd->senst = senst;
-       esd->ad_size = ad_size;
-       esd->se_size = se_size;
-       esd->addrm = addrm;
-       esd->svalnum = svalnum;
-       esd->numcomps = j2k->image->numcomps;
-       esd->tileno = tileno;
-       
-       /* Set the ESD parameters */
-       /* length, excluding data field */
-       if (esd->numcomps < 257)
-               esd->Lesd = 4 + (unsigned short int) (esd->svalnum * esd->sensval_size);
-       else
-               esd->Lesd = 5 + (unsigned short int) (esd->svalnum * esd->sensval_size);
-
-       /* component data field */
-       if (comp >= 0)
-               esd->Cesd = comp;
-       else
-               /* we are averaging */
-               esd->Cesd = 0;
-
-       /* Pesd field */
-       esd->Pesd = 0x00;
-       esd->Pesd |= (esd->addrm & 0x03) << 6; /* addressing mode */
-       esd->Pesd |= (esd->senst & 0x07) << 3; /* sensitivity type */
-       esd->Pesd |= ((esd->se_size >> 1) & 0x01) << 2; /* sensitivity size */
-       esd->Pesd |= ((esd->ad_size >> 2) & 0x01) << 1; /* addressing size */
-       esd->Pesd |= (comp < 0) ? 0x01 : 0x00; /* averaging components */
-
-       /* if pointer to sensval is NULL, we can fill data field by ourselves */
-       if (!sensval) {
-
-               /* old code moved to jpwl_esd_fill() */
-               esd->data = NULL;
-
-       } else {
-                       /* we set the data field as the sensitivity values poinnter passed to the function */
-                       esd->data = (unsigned char *) sensval;
-       }
-
-       return (esd);
-}
+jpwl_esd_ms_t *jpwl_esd_create(opj_j2k_t *j2k, int comp,
+                               unsigned char addrm, unsigned char ad_size,
+                               unsigned char senst, int se_size, int tileno,
+                               unsigned long int svalnum, void *sensval)
+{
 
-opj_bool jpwl_esd_fill(opj_j2k_t *j2k, jpwl_esd_ms_t *esd, unsigned char *buf) {
-
-       int i;
-       unsigned long int vv;
-       unsigned long int addr1 = 0L, addr2 = 0L;
-       double dvalue = 0.0, Omax2, tmp, TSE = 0.0, MSE, oldMSE = 0.0, PSNR, oldPSNR = 0.0;
-       unsigned short int pfpvalue;
-       unsigned long int addrmask = 0x00000000;
-       opj_bool doneMH = OPJ_FALSE, doneTPH = OPJ_FALSE;
-
-       /* sensitivity values in image info are as follows:
-               - for each tile, distotile is the starting distortion for that tile, sum of all components
-               - for each packet in a tile, disto is the distortion reduction caused by that packet to that tile
-               - the TSE for a single tile should be given by   distotile - sum(disto)  , for all components
-               - the MSE for a single tile is given by     TSE / nbpix    , for all components
-               - the PSNR for a single tile is given by   10*log10( Omax^2 / MSE)    , for all components
-                 (Omax is given by    2^bpp - 1    for unsigned images and by    2^(bpp - 1) - 1    for signed images
-       */
-
-       /* browse all components and find Omax */
-       Omax2 = 0.0;
-       for (i = 0; i < j2k->image->numcomps; i++) {
-               tmp = pow(2.0, (double) (j2k->image->comps[i].sgnd ?
-                       (j2k->image->comps[i].bpp - 1) : (j2k->image->comps[i].bpp))) - 1;
-               if (tmp > Omax2)
-                       Omax2 = tmp;
-       }
-       Omax2 = Omax2 * Omax2;
-
-       /* if pointer of esd->data is not null, simply write down all the values byte by byte */
-       if (esd->data) {
-               for (i = 0; i < (int) esd->svalnum; i++)
-                       *(buf++) = esd->data[i]; 
-               return OPJ_TRUE;
-       }
-
-       /* addressing mask */
-       if (esd->ad_size == 2)
-               addrmask = 0x0000FFFF; /* two bytes */
-       else
-               addrmask = 0xFFFFFFFF; /* four bytes */
-
-       /* set on precise point where sensitivity starts */
-       if (esd->numcomps < 257)
-               buf += 6;
-       else
-               buf += 7;
-
-       /* let's fill the data fields */
-       for (vv = (esd->tileno < 0) ? 0 : (j2k->cstr_info->packno * esd->tileno); vv < esd->svalnum; vv++) {
-
-               int thistile = vv / j2k->cstr_info->packno, thispacket = vv % j2k->cstr_info->packno;
-
-               /* skip for the hack some lines below */
-               if (thistile == j2k->cstr_info->tw * j2k->cstr_info->th)
-                       break;
-
-               /* starting tile distortion */
-               if (thispacket == 0) {
-                       TSE = j2k->cstr_info->tile[thistile].distotile;
-                       oldMSE = TSE / j2k->cstr_info->tile[thistile].numpix;
-                       oldPSNR = 10.0 * log10(Omax2 / oldMSE);
-               }
-
-               /* TSE */
-               TSE -= j2k->cstr_info->tile[thistile].packet[thispacket].disto;
-
-               /* MSE */
-               MSE = TSE / j2k->cstr_info->tile[thistile].numpix;
-
-               /* PSNR */
-               PSNR = 10.0 * log10(Omax2 / MSE);
-
-               /* fill the address range */
-               switch (esd->addrm) {
-
-               /* packet mode */
-               case (0):
-                       /* nothing, there is none */
-                       break;
-
-               /* byte range */
-               case (1):
-                       /* start address of packet */
-                       addr1 = (j2k->cstr_info->tile[thistile].packet[thispacket].start_pos) & addrmask;
-                       /* end address of packet */
-                       addr2 = (j2k->cstr_info->tile[thistile].packet[thispacket].end_pos) & addrmask;
-                       break;
-
-               /* packet range */
-               case (2):
-                       /* not implemented here */
-                       opj_event_msg(j2k->cinfo, EVT_WARNING, "Addressing mode packet_range is not implemented\n");
-                       break;
-
-               /* unknown addressing method */
-               default:
-                       /* not implemented here */
-                       opj_event_msg(j2k->cinfo, EVT_WARNING, "Unknown addressing mode\n");
-                       break;
-
-               }
-
-               /* hack for writing relative sensitivity of MH and TPHs */
-               if ((esd->senst == 0) && (thispacket == 0)) {
-
-                       /* possible MH */
-                       if ((thistile == 0) && !doneMH) {
-                               /* we have to manage MH addresses */
-                               addr1 = 0; /* start of MH */
-                               addr2 = j2k->cstr_info->main_head_end; /* end of MH */
-                               /* set special dvalue for this MH */
-                               dvalue = -10.0;
-                               doneMH = OPJ_TRUE; /* don't come here anymore */
-                               vv--; /* wrap back loop counter */
-
-                       } else if (!doneTPH) {
-                               /* we have to manage TPH addresses */
-                               addr1 = j2k->cstr_info->tile[thistile].start_pos;
-                               addr2 = j2k->cstr_info->tile[thistile].end_header;
-                               /* set special dvalue for this TPH */
-                               dvalue = -1.0;
-                               doneTPH = OPJ_TRUE; /* don't come here till the next tile */
-                               vv--; /* wrap back loop counter */
-                       }
-
-               } else
-                       doneTPH = OPJ_FALSE; /* reset TPH counter */
-
-               /* write the addresses to the buffer */
-               switch (esd->ad_size) {
-
-               case (0):
-                       /* do nothing */
-                       break;
-
-               case (2):
-                       /* two bytes */
-                       *(buf++) = (unsigned char) (addr1 >> 8); 
-                       *(buf++) = (unsigned char) (addr1 >> 0); 
-                       *(buf++) = (unsigned char) (addr2 >> 8); 
-                       *(buf++) = (unsigned char) (addr2 >> 0); 
-                       break;
-
-               case (4):
-                       /* four bytes */
-                       *(buf++) = (unsigned char) (addr1 >> 24); 
-                       *(buf++) = (unsigned char) (addr1 >> 16); 
-                       *(buf++) = (unsigned char) (addr1 >> 8); 
-                       *(buf++) = (unsigned char) (addr1 >> 0); 
-                       *(buf++) = (unsigned char) (addr2 >> 24); 
-                       *(buf++) = (unsigned char) (addr2 >> 16); 
-                       *(buf++) = (unsigned char) (addr2 >> 8); 
-                       *(buf++) = (unsigned char) (addr2 >> 0); 
-                       break;
-
-               default:
-                       /* do nothing */
-                       break;
-               }
-
-
-               /* let's fill the value field */
-               switch (esd->senst) {
-
-               /* relative sensitivity */
-               case (0):
-                       /* we just write down the packet ordering */
-                       if (dvalue == -10)
-                               /* MH */
-                               dvalue = MAX_V1 + 1000.0; /* this will cause pfpvalue set to 0xFFFF */
-                       else if (dvalue == -1)
-                               /* TPH */
-                               dvalue = MAX_V1 + 1000.0; /* this will cause pfpvalue set to 0xFFFF */
-                       else
-                               /* packet: first is most important, and then in decreasing order
-                               down to the last, which counts for 1 */
-                               dvalue = jpwl_pfp_to_double((unsigned short) (j2k->cstr_info->packno - thispacket), esd->se_size);
-                       break;
-
-               /* MSE */
-               case (1):
-                       /* !!! WRONG: let's put here disto field of packets !!! */
-                       dvalue = MSE;
-                       break;
-
-               /* MSE reduction */
-               case (2):
-                       dvalue = oldMSE - MSE;
-                       oldMSE = MSE;
-                       break;
-
-               /* PSNR */
-               case (3):
-                       dvalue = PSNR;
-                       break;
-
-               /* PSNR increase */
-               case (4):
-                       dvalue = PSNR - oldPSNR;
-                       oldPSNR = PSNR;
-                       break;
-
-               /* MAXERR */
-               case (5):
-                       dvalue = 0.0;
-                       opj_event_msg(j2k->cinfo, EVT_WARNING, "MAXERR sensitivity mode is not implemented\n");
-                       break;
-
-               /* TSE */
-               case (6):
-                       dvalue = TSE;
-                       break;
-
-               /* reserved */
-               case (7):
-                       dvalue = 0.0;
-                       opj_event_msg(j2k->cinfo, EVT_WARNING, "Reserved sensitivity mode is not implemented\n");
-                       break;
-
-               default:
-                       dvalue = 0.0;
-                       break;
-               }
-
-               /* compute the pseudo-floating point value */
-               pfpvalue = jpwl_double_to_pfp(dvalue, esd->se_size);
-
-               /* write the pfp value to the buffer */
-               switch (esd->se_size) {
-
-               case (1):
-                       /* one byte */
-                       *(buf++) = (unsigned char) (pfpvalue >> 0); 
-                       break;
-
-               case (2):
-                       /* two bytes */
-                       *(buf++) = (unsigned char) (pfpvalue >> 8); 
-                       *(buf++) = (unsigned char) (pfpvalue >> 0); 
-                       break;
-               }
-
-       }
-
-       return OPJ_TRUE;
+    jpwl_esd_ms_t *esd = NULL;
+
+    /* Alloc space */
+    if (!(esd = (jpwl_esd_ms_t *) opj_malloc((size_t) 1 * sizeof(jpwl_esd_ms_t)))) {
+        opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not allocate room for ESD MS\n");
+        return NULL;
+    };
+
+    /* if relative sensitivity, activate byte range mode */
+    if (senst == 0) {
+        addrm = 1;
+    }
+
+    /* size of sensval's ... */
+    if ((ad_size != 0) && (ad_size != 2) && (ad_size != 4)) {
+        opj_event_msg(j2k->cinfo, EVT_ERROR,
+                      "Address size %d for ESD MS is forbidden\n", ad_size);
+        return NULL;
+    }
+    if ((se_size != 1) && (se_size != 2)) {
+        opj_event_msg(j2k->cinfo, EVT_ERROR,
+                      "Sensitivity size %d for ESD MS is forbidden\n", se_size);
+        return NULL;
+    }
+
+    /* ... depends on the addressing mode */
+    switch (addrm) {
+
+    /* packet mode */
+    case (0):
+        ad_size = 0; /* as per the standard */
+        esd->sensval_size = (unsigned int)se_size;
+        break;
+
+    /* byte range */
+    case (1):
+        /* auto sense address size */
+        if (ad_size == 0)
+            /* if there are more than 66% of (2^16 - 1) bytes, switch to 4 bytes
+             (we keep space for possible EPBs being inserted) */
+        {
+            ad_size = (j2k->cstr_info->codestream_size > (1 * 65535 / 3)) ? 4 : 2;
+        }
+        esd->sensval_size = ad_size + ad_size + se_size;
+        break;
+
+    /* packet range */
+    case (2):
+        /* auto sense address size */
+        if (ad_size == 0)
+            /* if there are more than 2^16 - 1 packets, switch to 4 bytes */
+        {
+            ad_size = (j2k->cstr_info->packno > 65535) ? 4 : 2;
+        }
+        esd->sensval_size = ad_size + ad_size + se_size;
+        break;
+
+    case (3):
+        opj_event_msg(j2k->cinfo, EVT_ERROR,
+                      "Address mode %d for ESD MS is unimplemented\n", addrm);
+        return NULL;
+
+    default:
+        opj_event_msg(j2k->cinfo, EVT_ERROR,
+                      "Address mode %d for ESD MS is forbidden\n", addrm);
+        return NULL;
+    }
+
+    /* set or unset sensitivity values */
+    if (svalnum <= 0) {
+
+        switch (senst) {
+
+        /* just based on the portions of a codestream */
+        case (0):
+            /* MH + no. of THs + no. of packets */
+            svalnum = 1 + (j2k->cstr_info->tw * j2k->cstr_info->th) *
+                      (1 + j2k->cstr_info->packno);
+            break;
+
+        /* all the ones that are based on the packets */
+        default:
+            if (tileno < 0)
+                /* MH: all the packets and all the tiles info is written */
+            {
+                svalnum = j2k->cstr_info->tw * j2k->cstr_info->th * j2k->cstr_info->packno;
+            } else
+                /* TPH: only that tile info is written */
+            {
+                svalnum = j2k->cstr_info->packno;
+            }
+            break;
+
+        }
+    }
+
+    /* fill private fields */
+    esd->senst = senst;
+    esd->ad_size = ad_size;
+    esd->se_size = se_size;
+    esd->addrm = addrm;
+    esd->svalnum = svalnum;
+    esd->numcomps = j2k->image->numcomps;
+    esd->tileno = tileno;
+
+    /* Set the ESD parameters */
+    /* length, excluding data field */
+    if (esd->numcomps < 257) {
+        esd->Lesd = 4 + (unsigned short int)(esd->svalnum * esd->sensval_size);
+    } else {
+        esd->Lesd = 5 + (unsigned short int)(esd->svalnum * esd->sensval_size);
+    }
+
+    /* component data field */
+    if (comp >= 0) {
+        esd->Cesd = comp;
+    } else
+        /* we are averaging */
+    {
+        esd->Cesd = 0;
+    }
+
+    /* Pesd field */
+    esd->Pesd = 0x00;
+    esd->Pesd |= (esd->addrm & 0x03) << 6; /* addressing mode */
+    esd->Pesd |= (esd->senst & 0x07) << 3; /* sensitivity type */
+    esd->Pesd |= ((esd->se_size >> 1) & 0x01) << 2; /* sensitivity size */
+    esd->Pesd |= ((esd->ad_size >> 2) & 0x01) << 1; /* addressing size */
+    esd->Pesd |= (comp < 0) ? 0x01 : 0x00; /* averaging components */
+
+    /* if pointer to sensval is NULL, we can fill data field by ourselves */
+    if (!sensval) {
+
+        /* old code moved to jpwl_esd_fill() */
+        esd->data = NULL;
+
+    } else {
+        /* we set the data field as the sensitivity values poinnter passed to the function */
+        esd->data = (unsigned char *) sensval;
+    }
+
+    return (esd);
 }
 
-opj_bool jpwl_esd_write(opj_j2k_t *j2k, jpwl_esd_ms_t *esd, unsigned char *buf) {
-
-       /* Marker */
-       *(buf++) = (unsigned char) (J2K_MS_ESD >> 8); 
-       *(buf++) = (unsigned char) (J2K_MS_ESD >> 0); 
-
-       /* Lesd */
-       *(buf++) = (unsigned char) (esd->Lesd >> 8); 
-       *(buf++) = (unsigned char) (esd->Lesd >> 0); 
-
-       /* Cesd */
-       if (esd->numcomps >= 257)
-               *(buf++) = (unsigned char) (esd->Cesd >> 8); 
-       *(buf++) = (unsigned char) (esd->Cesd >> 0); 
-
-       /* Pesd */
-       *(buf++) = (unsigned char) (esd->Pesd >> 0); 
+opj_bool jpwl_esd_fill(opj_j2k_t *j2k, jpwl_esd_ms_t *esd, unsigned char *buf)
+{
 
-       /* Data */
-       if (esd->numcomps < 257)
-               memset(buf, 0xAA, (size_t) esd->Lesd - 4);
-               /*memcpy(buf, esd->data, (size_t) esd->Lesd - 4);*/
-       else
-               memset(buf, 0xAA, (size_t) esd->Lesd - 5);
-               /*memcpy(buf, esd->data, (size_t) esd->Lesd - 5);*/
+    int i;
+    unsigned long int vv;
+    unsigned long int addr1 = 0L, addr2 = 0L;
+    double dvalue = 0.0, Omax2, tmp, TSE = 0.0, MSE, oldMSE = 0.0, PSNR,
+           oldPSNR = 0.0;
+    unsigned short int pfpvalue;
+    unsigned long int addrmask = 0x00000000;
+    opj_bool doneMH = OPJ_FALSE, doneTPH = OPJ_FALSE;
+
+    /* sensitivity values in image info are as follows:
+        - for each tile, distotile is the starting distortion for that tile, sum of all components
+        - for each packet in a tile, disto is the distortion reduction caused by that packet to that tile
+        - the TSE for a single tile should be given by   distotile - sum(disto)  , for all components
+        - the MSE for a single tile is given by     TSE / nbpix    , for all components
+        - the PSNR for a single tile is given by   10*log10( Omax^2 / MSE)    , for all components
+          (Omax is given by    2^bpp - 1    for unsigned images and by    2^(bpp - 1) - 1    for signed images
+    */
+
+    /* browse all components and find Omax */
+    Omax2 = 0.0;
+    for (i = 0; i < j2k->image->numcomps; i++) {
+        tmp = pow(2.0, (double)(j2k->image->comps[i].sgnd ?
+                                (j2k->image->comps[i].bpp - 1) : (j2k->image->comps[i].bpp))) - 1;
+        if (tmp > Omax2) {
+            Omax2 = tmp;
+        }
+    }
+    Omax2 = Omax2 * Omax2;
+
+    /* if pointer of esd->data is not null, simply write down all the values byte by byte */
+    if (esd->data) {
+        for (i = 0; i < (int) esd->svalnum; i++) {
+            *(buf++) = esd->data[i];
+        }
+        return OPJ_TRUE;
+    }
+
+    /* addressing mask */
+    if (esd->ad_size == 2) {
+        addrmask = 0x0000FFFF;    /* two bytes */
+    } else {
+        addrmask = 0xFFFFFFFF;    /* four bytes */
+    }
+
+    /* set on precise point where sensitivity starts */
+    if (esd->numcomps < 257) {
+        buf += 6;
+    } else {
+        buf += 7;
+    }
+
+    /* let's fill the data fields */
+    for (vv = (esd->tileno < 0) ? 0 : (j2k->cstr_info->packno * esd->tileno);
+            vv < esd->svalnum; vv++) {
+
+        int thistile = vv / j2k->cstr_info->packno,
+            thispacket = vv % j2k->cstr_info->packno;
+
+        /* skip for the hack some lines below */
+        if (thistile == j2k->cstr_info->tw * j2k->cstr_info->th) {
+            break;
+        }
+
+        /* starting tile distortion */
+        if (thispacket == 0) {
+            TSE = j2k->cstr_info->tile[thistile].distotile;
+            oldMSE = TSE / j2k->cstr_info->tile[thistile].numpix;
+            oldPSNR = 10.0 * log10(Omax2 / oldMSE);
+        }
+
+        /* TSE */
+        TSE -= j2k->cstr_info->tile[thistile].packet[thispacket].disto;
+
+        /* MSE */
+        MSE = TSE / j2k->cstr_info->tile[thistile].numpix;
+
+        /* PSNR */
+        PSNR = 10.0 * log10(Omax2 / MSE);
+
+        /* fill the address range */
+        switch (esd->addrm) {
+
+        /* packet mode */
+        case (0):
+            /* nothing, there is none */
+            break;
+
+        /* byte range */
+        case (1):
+            /* start address of packet */
+            addr1 = (j2k->cstr_info->tile[thistile].packet[thispacket].start_pos) &
+                    addrmask;
+            /* end address of packet */
+            addr2 = (j2k->cstr_info->tile[thistile].packet[thispacket].end_pos) & addrmask;
+            break;
+
+        /* packet range */
+        case (2):
+            /* not implemented here */
+            opj_event_msg(j2k->cinfo, EVT_WARNING,
+                          "Addressing mode packet_range is not implemented\n");
+            break;
+
+        /* unknown addressing method */
+        default:
+            /* not implemented here */
+            opj_event_msg(j2k->cinfo, EVT_WARNING, "Unknown addressing mode\n");
+            break;
+
+        }
+
+        /* hack for writing relative sensitivity of MH and TPHs */
+        if ((esd->senst == 0) && (thispacket == 0)) {
+
+            /* possible MH */
+            if ((thistile == 0) && !doneMH) {
+                /* we have to manage MH addresses */
+                addr1 = 0; /* start of MH */
+                addr2 = j2k->cstr_info->main_head_end; /* end of MH */
+                /* set special dvalue for this MH */
+                dvalue = -10.0;
+                doneMH = OPJ_TRUE; /* don't come here anymore */
+                vv--; /* wrap back loop counter */
+
+            } else if (!doneTPH) {
+                /* we have to manage TPH addresses */
+                addr1 = j2k->cstr_info->tile[thistile].start_pos;
+                addr2 = j2k->cstr_info->tile[thistile].end_header;
+                /* set special dvalue for this TPH */
+                dvalue = -1.0;
+                doneTPH = OPJ_TRUE; /* don't come here till the next tile */
+                vv--; /* wrap back loop counter */
+            }
+
+        } else {
+            doneTPH = OPJ_FALSE;    /* reset TPH counter */
+        }
+
+        /* write the addresses to the buffer */
+        switch (esd->ad_size) {
+
+        case (0):
+            /* do nothing */
+            break;
+
+        case (2):
+            /* two bytes */
+            *(buf++) = (unsigned char)(addr1 >> 8);
+            *(buf++) = (unsigned char)(addr1 >> 0);
+            *(buf++) = (unsigned char)(addr2 >> 8);
+            *(buf++) = (unsigned char)(addr2 >> 0);
+            break;
+
+        case (4):
+            /* four bytes */
+            *(buf++) = (unsigned char)(addr1 >> 24);
+            *(buf++) = (unsigned char)(addr1 >> 16);
+            *(buf++) = (unsigned char)(addr1 >> 8);
+            *(buf++) = (unsigned char)(addr1 >> 0);
+            *(buf++) = (unsigned char)(addr2 >> 24);
+            *(buf++) = (unsigned char)(addr2 >> 16);
+            *(buf++) = (unsigned char)(addr2 >> 8);
+            *(buf++) = (unsigned char)(addr2 >> 0);
+            break;
+
+        default:
+            /* do nothing */
+            break;
+        }
+
+
+        /* let's fill the value field */
+        switch (esd->senst) {
+
+        /* relative sensitivity */
+        case (0):
+            /* we just write down the packet ordering */
+            if (dvalue == -10)
+                /* MH */
+            {
+                dvalue = MAX_V1 + 1000.0;    /* this will cause pfpvalue set to 0xFFFF */
+            } else if (dvalue == -1)
+                /* TPH */
+            {
+                dvalue = MAX_V1 + 1000.0;    /* this will cause pfpvalue set to 0xFFFF */
+            } else
+                /* packet: first is most important, and then in decreasing order
+                down to the last, which counts for 1 */
+            {
+                dvalue = jpwl_pfp_to_double((unsigned short)(j2k->cstr_info->packno -
+                                            thispacket), esd->se_size);
+            }
+            break;
+
+        /* MSE */
+        case (1):
+            /* !!! WRONG: let's put here disto field of packets !!! */
+            dvalue = MSE;
+            break;
+
+        /* MSE reduction */
+        case (2):
+            dvalue = oldMSE - MSE;
+            oldMSE = MSE;
+            break;
+
+        /* PSNR */
+        case (3):
+            dvalue = PSNR;
+            break;
+
+        /* PSNR increase */
+        case (4):
+            dvalue = PSNR - oldPSNR;
+            oldPSNR = PSNR;
+            break;
+
+        /* MAXERR */
+        case (5):
+            dvalue = 0.0;
+            opj_event_msg(j2k->cinfo, EVT_WARNING,
+                          "MAXERR sensitivity mode is not implemented\n");
+            break;
+
+        /* TSE */
+        case (6):
+            dvalue = TSE;
+            break;
+
+        /* reserved */
+        case (7):
+            dvalue = 0.0;
+            opj_event_msg(j2k->cinfo, EVT_WARNING,
+                          "Reserved sensitivity mode is not implemented\n");
+            break;
+
+        default:
+            dvalue = 0.0;
+            break;
+        }
+
+        /* compute the pseudo-floating point value */
+        pfpvalue = jpwl_double_to_pfp(dvalue, esd->se_size);
+
+        /* write the pfp value to the buffer */
+        switch (esd->se_size) {
+
+        case (1):
+            /* one byte */
+            *(buf++) = (unsigned char)(pfpvalue >> 0);
+            break;
+
+        case (2):
+            /* two bytes */
+            *(buf++) = (unsigned char)(pfpvalue >> 8);
+            *(buf++) = (unsigned char)(pfpvalue >> 0);
+            break;
+        }
+
+    }
+
+    return OPJ_TRUE;
+}
 
-       /* update markers struct */
-       j2k_add_marker(j2k->cstr_info, J2K_MS_ESD, -1, esd->Lesd + 2);
+opj_bool jpwl_esd_write(opj_j2k_t *j2k, jpwl_esd_ms_t *esd, unsigned char *buf)
+{
 
-       return OPJ_TRUE;
+    /* Marker */
+    *(buf++) = (unsigned char)(J2K_MS_ESD >> 8);
+    *(buf++) = (unsigned char)(J2K_MS_ESD >> 0);
+
+    /* Lesd */
+    *(buf++) = (unsigned char)(esd->Lesd >> 8);
+    *(buf++) = (unsigned char)(esd->Lesd >> 0);
+
+    /* Cesd */
+    if (esd->numcomps >= 257) {
+        *(buf++) = (unsigned char)(esd->Cesd >> 8);
+    }
+    *(buf++) = (unsigned char)(esd->Cesd >> 0);
+
+    /* Pesd */
+    *(buf++) = (unsigned char)(esd->Pesd >> 0);
+
+    /* Data */
+    if (esd->numcomps < 257) {
+        memset(buf, 0xAA, (size_t) esd->Lesd - 4);
+    }
+    /*memcpy(buf, esd->data, (size_t) esd->Lesd - 4);*/
+    else {
+        memset(buf, 0xAA, (size_t) esd->Lesd - 5);
+    }
+    /*memcpy(buf, esd->data, (size_t) esd->Lesd - 5);*/
+
+    /* update markers struct */
+    j2k_add_marker(j2k->cstr_info, J2K_MS_ESD, -1, esd->Lesd + 2);
+
+    return OPJ_TRUE;
 }
 
-unsigned short int jpwl_double_to_pfp(double V, int bytes) {
-
-       unsigned short int em, e, m;
-
-       switch (bytes) {
-
-       case (1):
-
-               if (V < MIN_V1) {
-                       e = 0x0000;
-                       m = 0x0000;
-               } else if (V > MAX_V1) {
-                       e = 0x000F;
-                       m = 0x000F;
-               } else {
-                       e = (unsigned short int) (floor(log(V) * 1.44269504088896) / 4.0);
-                       m = (unsigned short int) (0.5 + (V / (pow(2.0, (double) (4 * e)))));
-               }
-               em = ((e & 0x000F) << 4) + (m & 0x000F);                
-               break;
-
-       case (2):
-
-               if (V < MIN_V2) {
-                       e = 0x0000;
-                       m = 0x0000;
-               } else if (V > MAX_V2) {
-                       e = 0x001F;
-                       m = 0x07FF;
-               } else {
-                       e = (unsigned short int) floor(log(V) * 1.44269504088896) + 15;
-                       m = (unsigned short int) (0.5 + 2048.0 * ((V / (pow(2.0, (double) e - 15.0))) - 1.0));
-               }
-               em = ((e & 0x001F) << 11) + (m & 0x07FF);
-               break;
-
-       default:
-
-               em = 0x0000;
-               break;
-       };
-
-       return em;
+unsigned short int jpwl_double_to_pfp(double V, int bytes)
+{
+
+    unsigned short int em, e, m;
+
+    switch (bytes) {
+
+    case (1):
+
+        if (V < MIN_V1) {
+            e = 0x0000;
+            m = 0x0000;
+        } else if (V > MAX_V1) {
+            e = 0x000F;
+            m = 0x000F;
+        } else {
+            e = (unsigned short int)(floor(log(V) * 1.44269504088896) / 4.0);
+            m = (unsigned short int)(0.5 + (V / (pow(2.0, (double)(4 * e)))));
+        }
+        em = ((e & 0x000F) << 4) + (m & 0x000F);
+        break;
+
+    case (2):
+
+        if (V < MIN_V2) {
+            e = 0x0000;
+            m = 0x0000;
+        } else if (V > MAX_V2) {
+            e = 0x001F;
+            m = 0x07FF;
+        } else {
+            e = (unsigned short int) floor(log(V) * 1.44269504088896) + 15;
+            m = (unsigned short int)(0.5 + 2048.0 * ((V / (pow(2.0,
+                                     (double) e - 15.0))) - 1.0));
+        }
+        em = ((e & 0x001F) << 11) + (m & 0x07FF);
+        break;
+
+    default:
+
+        em = 0x0000;
+        break;
+    };
+
+    return em;
 }
 
-double jpwl_pfp_to_double(unsigned short int em, int bytes) {
+double jpwl_pfp_to_double(unsigned short int em, int bytes)
+{
 
-       double V;
+    double V;
 
-       switch (bytes) {
+    switch (bytes) {
 
-       case 1:
-               V = (double) (em & 0x0F) * pow(2.0, (double) (em & 0xF0));
-               break;
+    case 1:
+        V = (double)(em & 0x0F) * pow(2.0, (double)(em & 0xF0));
+        break;
 
-       case 2:
+    case 2:
 
-               V = pow(2.0, (double) ((em & 0xF800) >> 11) - 15.0) * (1.0 + (double) (em & 0x07FF) / 2048.0);
-               break;
+        V = pow(2.0, (double)((em & 0xF800) >> 11) - 15.0) * (1.0 + (double)(
+                    em & 0x07FF) / 2048.0);
+        break;
 
-       default:
-               V = 0.0;
-               break;
+    default:
+        V = 0.0;
+        break;
 
-       }
+    }
 
-       return V;
+    return V;
 
 }
 
-opj_bool jpwl_update_info(opj_j2k_t *j2k, jpwl_marker_t *jwmarker, int jwmarker_num) {
-
-       int mm;
-       unsigned long int addlen;
-
-       opj_codestream_info_t *info = j2k->cstr_info;
-       int tileno, tpno, packno, numtiles = info->th * info->tw, numpacks = info->packno;
-
-       if (!j2k || !jwmarker ) {
-               opj_event_msg(j2k->cinfo, EVT_ERROR, "J2K handle or JPWL markers list badly allocated\n");
-               return OPJ_FALSE;
-       }
-
-       /* main_head_end: how many markers are there before? */
-       addlen = 0;
-       for (mm = 0; mm < jwmarker_num; mm++)
-               if (jwmarker[mm].pos < (unsigned long int) info->main_head_end)
-                       addlen += jwmarker[mm].len + 2;
-       info->main_head_end += addlen;
-
-       /* codestream_size: always increment with all markers */
-       addlen = 0;
-       for (mm = 0; mm < jwmarker_num; mm++)
-               addlen += jwmarker[mm].len + 2;
-       info->codestream_size += addlen;
-
-       /* navigate through all the tiles */
-       for (tileno = 0; tileno < numtiles; tileno++) {
-
-               /* start_pos: increment with markers before SOT */
-               addlen = 0;
-               for (mm = 0; mm < jwmarker_num; mm++)
-                       if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].start_pos)
-                               addlen += jwmarker[mm].len + 2;
-               info->tile[tileno].start_pos += addlen;
-
-               /* end_header: increment with markers before of it */
-               addlen = 0;
-               for (mm = 0; mm < jwmarker_num; mm++)
-                       if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].end_header)
-                               addlen += jwmarker[mm].len + 2;
-               info->tile[tileno].end_header += addlen;
-
-               /* end_pos: increment with markers before the end of this tile */
-               /* code is disabled, since according to JPWL no markers can be beyond TPH */
-               addlen = 0;
-               for (mm = 0; mm < jwmarker_num; mm++)
-                       if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].end_pos)
-                               addlen += jwmarker[mm].len + 2;
-               info->tile[tileno].end_pos += addlen;
-
-               /* navigate through all the tile parts */
-               for (tpno = 0; tpno < info->tile[tileno].num_tps; tpno++) {
-
-                       /* start_pos: increment with markers before SOT */
-                       addlen = 0;
-                       for (mm = 0; mm < jwmarker_num; mm++)
-                               if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].tp[tpno].tp_start_pos)
-                                       addlen += jwmarker[mm].len + 2;
-                       info->tile[tileno].tp[tpno].tp_start_pos += addlen;
-
-                       /* end_header: increment with markers before of it */
-                       addlen = 0;
-                       for (mm = 0; mm < jwmarker_num; mm++)
-                               if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].tp[tpno].tp_end_header)
-                                       addlen += jwmarker[mm].len + 2;
-                       info->tile[tileno].tp[tpno].tp_end_header += addlen;
-
-                       /* end_pos: increment with markers before the end of this tile part */
-                       addlen = 0;
-                       for (mm = 0; mm < jwmarker_num; mm++)
-                               if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].tp[tpno].tp_end_pos)
-                                       addlen += jwmarker[mm].len + 2;
-                       info->tile[tileno].tp[tpno].tp_end_pos += addlen;
-
-               }
-
-               /* navigate through all the packets in this tile */
-               for (packno = 0; packno < numpacks; packno++) {
-                       
-                       /* start_pos: increment with markers before the packet */
-                       /* disabled for the same reason as before */
-                       addlen = 0;
-                       for (mm = 0; mm < jwmarker_num; mm++)
-                               if (jwmarker[mm].pos <= (unsigned long int) info->tile[tileno].packet[packno].start_pos)
-                                       addlen += jwmarker[mm].len + 2;
-                       info->tile[tileno].packet[packno].start_pos += addlen;
-
-                       /* end_ph_pos: increment with markers before the packet */
-                       /* disabled for the same reason as before */
-                       /*addlen = 0;
-                       for (mm = 0; mm < jwmarker_num; mm++)
-                               if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].packet[packno].end_ph_pos)
-                                       addlen += jwmarker[mm].len + 2;*/
-                       info->tile[tileno].packet[packno].end_ph_pos += addlen;
-
-                       /* end_pos: increment if marker is before the end of packet */
-                       /* disabled for the same reason as before */
-                       /*addlen = 0;
-                       for (mm = 0; mm < jwmarker_num; mm++)
-                               if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].packet[packno].end_pos)
-                                       addlen += jwmarker[mm].len + 2;*/
-                       info->tile[tileno].packet[packno].end_pos += addlen;
-
-               }
-       }
-
-       /* reorder the markers list */
-
-       return OPJ_TRUE;
+opj_bool jpwl_update_info(opj_j2k_t *j2k, jpwl_marker_t *jwmarker,
+                          int jwmarker_num)
+{
+
+    int mm;
+    unsigned long int addlen;
+
+    opj_codestream_info_t *info = j2k->cstr_info;
+    int tileno, tpno, packno, numtiles = info->th * info->tw,
+                              numpacks = info->packno;
+
+    if (!j2k || !jwmarker) {
+        opj_event_msg(j2k->cinfo, EVT_ERROR,
+                      "J2K handle or JPWL markers list badly allocated\n");
+        return OPJ_FALSE;
+    }
+
+    /* main_head_end: how many markers are there before? */
+    addlen = 0;
+    for (mm = 0; mm < jwmarker_num; mm++)
+        if (jwmarker[mm].pos < (unsigned long int) info->main_head_end) {
+            addlen += jwmarker[mm].len + 2;
+        }
+    info->main_head_end += addlen;
+
+    /* codestream_size: always increment with all markers */
+    addlen = 0;
+    for (mm = 0; mm < jwmarker_num; mm++) {
+        addlen += jwmarker[mm].len + 2;
+    }
+    info->codestream_size += addlen;
+
+    /* navigate through all the tiles */
+    for (tileno = 0; tileno < numtiles; tileno++) {
+
+        /* start_pos: increment with markers before SOT */
+        addlen = 0;
+        for (mm = 0; mm < jwmarker_num; mm++)
+            if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].start_pos) {
+                addlen += jwmarker[mm].len + 2;
+            }
+        info->tile[tileno].start_pos += addlen;
+
+        /* end_header: increment with markers before of it */
+        addlen = 0;
+        for (mm = 0; mm < jwmarker_num; mm++)
+            if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].end_header) {
+                addlen += jwmarker[mm].len + 2;
+            }
+        info->tile[tileno].end_header += addlen;
+
+        /* end_pos: increment with markers before the end of this tile */
+        /* code is disabled, since according to JPWL no markers can be beyond TPH */
+        addlen = 0;
+        for (mm = 0; mm < jwmarker_num; mm++)
+            if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].end_pos) {
+                addlen += jwmarker[mm].len + 2;
+            }
+        info->tile[tileno].end_pos += addlen;
+
+        /* navigate through all the tile parts */
+        for (tpno = 0; tpno < info->tile[tileno].num_tps; tpno++) {
+
+            /* start_pos: increment with markers before SOT */
+            addlen = 0;
+            for (mm = 0; mm < jwmarker_num; mm++)
+                if (jwmarker[mm].pos < (unsigned long int)
+                        info->tile[tileno].tp[tpno].tp_start_pos) {
+                    addlen += jwmarker[mm].len + 2;
+                }
+            info->tile[tileno].tp[tpno].tp_start_pos += addlen;
+
+            /* end_header: increment with markers before of it */
+            addlen = 0;
+            for (mm = 0; mm < jwmarker_num; mm++)
+                if (jwmarker[mm].pos < (unsigned long int)
+                        info->tile[tileno].tp[tpno].tp_end_header) {
+                    addlen += jwmarker[mm].len + 2;
+                }
+            info->tile[tileno].tp[tpno].tp_end_header += addlen;
+
+            /* end_pos: increment with markers before the end of this tile part */
+            addlen = 0;
+            for (mm = 0; mm < jwmarker_num; mm++)
+                if (jwmarker[mm].pos < (unsigned long int)
+                        info->tile[tileno].tp[tpno].tp_end_pos) {
+                    addlen += jwmarker[mm].len + 2;
+                }
+            info->tile[tileno].tp[tpno].tp_end_pos += addlen;
+
+        }
+
+        /* navigate through all the packets in this tile */
+        for (packno = 0; packno < numpacks; packno++) {
+
+            /* start_pos: increment with markers before the packet */
+            /* disabled for the same reason as before */
+            addlen = 0;
+            for (mm = 0; mm < jwmarker_num; mm++)
+                if (jwmarker[mm].pos <= (unsigned long int)
+                        info->tile[tileno].packet[packno].start_pos) {
+                    addlen += jwmarker[mm].len + 2;
+                }
+            info->tile[tileno].packet[packno].start_pos += addlen;
+
+            /* end_ph_pos: increment with markers before the packet */
+            /* disabled for the same reason as before */
+            /*addlen = 0;
+            for (mm = 0; mm < jwmarker_num; mm++)
+                if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].packet[packno].end_ph_pos)
+                    addlen += jwmarker[mm].len + 2;*/
+            info->tile[tileno].packet[packno].end_ph_pos += addlen;
+
+            /* end_pos: increment if marker is before the end of packet */
+            /* disabled for the same reason as before */
+            /*addlen = 0;
+            for (mm = 0; mm < jwmarker_num; mm++)
+                if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].packet[packno].end_pos)
+                    addlen += jwmarker[mm].len + 2;*/
+            info->tile[tileno].packet[packno].end_pos += addlen;
+
+        }
+    }
+
+    /* reorder the markers list */
+
+    return OPJ_TRUE;
 }
 
 #endif /* USE_JPWL */
index a0bd7c715c41bf322a665208eab02c704f118fba..793fd3303809e585895c9ae3c5fb2586c3afe1e9 100644 (file)
@@ -1,38 +1,38 @@
- /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
- * party and contributor rights, including patent rights, and no such rights
- * are granted under this license.
- *
- * Copyright (c) 2001-2003, David Janssens
- * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herve Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * Copyright (c) 2005-2006, Dept. of Electronic and Information Engineering, Universita' degli Studi di Perugia, Italy
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
+/*
+* The copyright in this software is being made available under the 2-clauses
+* BSD License, included below. This software may be subject to other third
+* party and contributor rights, including patent rights, and no such rights
+* are granted under this license.
+*
+* Copyright (c) 2001-2003, David Janssens
+* Copyright (c) 2002-2003, Yannick Verschueren
+* Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
+* Copyright (c) 2005, Herve Drolon, FreeImage Team
+* Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
+* Copyright (c) 2005-2006, Dept. of Electronic and Information Engineering, Universita' degli Studi di Perugia, Italy
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+* 1. Redistributions of source code must retain the above copyright
+*    notice, this list of conditions and the following disclaimer.
+* 2. Redistributions in binary form must reproduce the above copyright
+*    notice, this list of conditions and the following disclaimer in the
+*    documentation and/or other materials provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+* POSSIBILITY OF SUCH DAMAGE.
+*/
 
 #ifdef USE_JPWL
 
@@ -45,7 +45,7 @@
 /**
  * Reed-Solomon coding and decoding
  * Phil Karn (karn@ka9q.ampr.org) September 1996
- * 
+ *
  * This file is derived from the program "new_rs_erasures.c" by Robert
  * Morelos-Zaragoza (robert@spectra.eng.hawaii.edu) and Hari Thirumoorthy
  * (harit@spectra.eng.hawaii.edu), Aug 1995
 typedef int gf;
 
 /* KK = number of information symbols */
-static int     KK;
+static int  KK;
 
 /* Primitive polynomials - see Lin & Costello, Appendix A,
  * and  Lee & Messerschmitt, p. 453.
  */
 #if(MM == 2)/* Admittedly silly */
-int Pp[MM+1] = { 1, 1, 1 };
+int Pp[MM + 1] = { 1, 1, 1 };
 
 #elif(MM == 3)
 /* 1 + x + x^3 */
-int Pp[MM+1] = { 1, 1, 0, 1 };
+int Pp[MM + 1] = { 1, 1, 0, 1 };
 
 #elif(MM == 4)
 /* 1 + x + x^4 */
-int Pp[MM+1] = { 1, 1, 0, 0, 1 };
+int Pp[MM + 1] = { 1, 1, 0, 0, 1 };
 
 #elif(MM == 5)
 /* 1 + x^2 + x^5 */
-int Pp[MM+1] = { 1, 0, 1, 0, 0, 1 };
+int Pp[MM + 1] = { 1, 0, 1, 0, 0, 1 };
 
 #elif(MM == 6)
 /* 1 + x + x^6 */
-int Pp[MM+1] = { 1, 1, 0, 0, 0, 0, 1 };
+int Pp[MM + 1] = { 1, 1, 0, 0, 0, 0, 1 };
 
 #elif(MM == 7)
 /* 1 + x^3 + x^7 */
-int Pp[MM+1] = { 1, 0, 0, 1, 0, 0, 0, 1 };
+int Pp[MM + 1] = { 1, 0, 0, 1, 0, 0, 0, 1 };
 
 #elif(MM == 8)
 /* 1+x^2+x^3+x^4+x^8 */
-int Pp[MM+1] = { 1, 0, 1, 1, 1, 0, 0, 0, 1 };
+int Pp[MM + 1] = { 1, 0, 1, 1, 1, 0, 0, 0, 1 };
 
 #elif(MM == 9)
 /* 1+x^4+x^9 */
-int Pp[MM+1] = { 1, 0, 0, 0, 1, 0, 0, 0, 0, 1 };
+int Pp[MM + 1] = { 1, 0, 0, 0, 1, 0, 0, 0, 0, 1 };
 
 #elif(MM == 10)
 /* 1+x^3+x^10 */
-int Pp[MM+1] = { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1 };
+int Pp[MM + 1] = { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1 };
 
 #elif(MM == 11)
 /* 1+x^2+x^11 */
-int Pp[MM+1] = { 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
+int Pp[MM + 1] = { 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
 
 #elif(MM == 12)
 /* 1+x+x^4+x^6+x^12 */
-int Pp[MM+1] = { 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1 };
+int Pp[MM + 1] = { 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1 };
 
 #elif(MM == 13)
 /* 1+x+x^3+x^4+x^13 */
-int Pp[MM+1] = { 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
+int Pp[MM + 1] = { 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
 
 #elif(MM == 14)
 /* 1+x+x^6+x^10+x^14 */
-int Pp[MM+1] = { 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1 };
+int Pp[MM + 1] = { 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1 };
 
 #elif(MM == 15)
 /* 1+x+x^15 */
-int Pp[MM+1] = { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
+int Pp[MM + 1] = { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
 
 #elif(MM == 16)
 /* 1+x+x^3+x^12+x^16 */
-int Pp[MM+1] = { 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1 };
+int Pp[MM + 1] = { 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1 };
 
 #else
 #error "MM must be in range 2-16"
 #endif
 
 /* Alpha exponent for the first root of the generator polynomial */
-#define B0     0  /* Different from the default 1 */
+#define B0  0  /* Different from the default 1 */
 
 /* index->polynomial form conversion table */
 gf Alpha_to[NN + 1];
@@ -159,14 +159,14 @@ gf Index_of[NN + 1];
 /* No legal value in index form represents zero, so
  * we need a special value for this purpose
  */
-#define A0     (NN)
+#define A0  (NN)
 
 /* Generator polynomial g(x)
  * Degree of g(x) = 2*TT
  * has roots @**B0, @**(B0+1), ... ,@^(B0+2*TT-1)
  */
 /*gf Gg[NN - KK + 1];*/
-gf             Gg[NN - 1];
+gf      Gg[NN - 1];
 
 /* Compute x % NN, where NN is 2**MM - 1,
  * without a slow divide
@@ -174,42 +174,42 @@ gf                Gg[NN - 1];
 static /*inline*/ gf
 modnn(int x)
 {
-       while (x >= NN) {
-               x -= NN;
-               x = (x >> MM) + (x & NN);
-       }
-       return x;
+    while (x >= NN) {
+        x -= NN;
+        x = (x >> MM) + (x & NN);
+    }
+    return x;
 }
 
-/*#define      min(a,b)        ((a) < (b) ? (a) : (b))*/
-
-#define        CLEAR(a,n) {\
-       int ci;\
-       for(ci=(n)-1;ci >=0;ci--)\
-               (a)[ci] = 0;\
-       }
-
-#define        COPY(a,b,n) {\
-       int ci;\
-       for(ci=(n)-1;ci >=0;ci--)\
-               (a)[ci] = (b)[ci];\
-       }
-#define        COPYDOWN(a,b,n) {\
-       int ci;\
-       for(ci=(n)-1;ci >=0;ci--)\
-               (a)[ci] = (b)[ci];\
-       }
+/*#define   min(a,b)    ((a) < (b) ? (a) : (b))*/
+
+#define CLEAR(a,n) {\
+    int ci;\
+    for(ci=(n)-1;ci >=0;ci--)\
+        (a)[ci] = 0;\
+    }
+
+#define COPY(a,b,n) {\
+    int ci;\
+    for(ci=(n)-1;ci >=0;ci--)\
+        (a)[ci] = (b)[ci];\
+    }
+#define COPYDOWN(a,b,n) {\
+    int ci;\
+    for(ci=(n)-1;ci >=0;ci--)\
+        (a)[ci] = (b)[ci];\
+    }
 
 void init_rs(int k)
 {
-       KK = k;
-       if (KK >= NN) {
-               printf("KK must be less than 2**MM - 1\n");
-               exit(1);
-       }
-       
-       generate_gf();
-       gen_poly();
+    KK = k;
+    if (KK >= NN) {
+        printf("KK must be less than 2**MM - 1\n");
+        exit(1);
+    }
+
+    generate_gf();
+    gen_poly();
 }
 
 /* generate GF(2**m) from the irreducible polynomial p(X) in p[0]..p[m]
@@ -232,7 +232,7 @@ void init_rs(int k)
         a(0) + a(1) @ + a(2) @^2 + ... + a(m-1) @^(m-1)
    we consider the integer "i" whose binary representation with a(0) being LSB
    and a(m-1) MSB is (a(0),a(1),...,a(m-1)) and locate the entry
-   "index_of[i]". Now, @^index_of[i] is that element whose polynomial 
+   "index_of[i]". Now, @^index_of[i] is that element whose polynomial
     representation is (a(0),a(1),a(2),...,a(m-1)).
    NOTE:
         The element alpha_to[2^m-1] = 0 always signifying that the
@@ -240,40 +240,42 @@ void init_rs(int k)
         Similarly, the element index_of[0] = A0 always signifying
    that the power of alpha which has the polynomial representation
    (0,0,...,0) is "infinity".
+
 */
 
 void
 generate_gf(void)
 {
-       register int i, mask;
-
-       mask = 1;
-       Alpha_to[MM] = 0;
-       for (i = 0; i < MM; i++) {
-               Alpha_to[i] = mask;
-               Index_of[Alpha_to[i]] = i;
-               /* If Pp[i] == 1 then, term @^i occurs in poly-repr of @^MM */
-               if (Pp[i] != 0)
-                       Alpha_to[MM] ^= mask;   /* Bit-wise EXOR operation */
-               mask <<= 1;     /* single left-shift */
-       }
-       Index_of[Alpha_to[MM]] = MM;
-       /*
-        * Have obtained poly-repr of @^MM. Poly-repr of @^(i+1) is given by
-        * poly-repr of @^i shifted left one-bit and accounting for any @^MM
-        * term that may occur when poly-repr of @^i is shifted.
-        */
-       mask >>= 1;
-       for (i = MM + 1; i < NN; i++) {
-               if (Alpha_to[i - 1] >= mask)
-                       Alpha_to[i] = Alpha_to[MM] ^ ((Alpha_to[i - 1] ^ mask) << 1);
-               else
-                       Alpha_to[i] = Alpha_to[i - 1] << 1;
-               Index_of[Alpha_to[i]] = i;
-       }
-       Index_of[0] = A0;
-       Alpha_to[NN] = 0;
+    register int i, mask;
+
+    mask = 1;
+    Alpha_to[MM] = 0;
+    for (i = 0; i < MM; i++) {
+        Alpha_to[i] = mask;
+        Index_of[Alpha_to[i]] = i;
+        /* If Pp[i] == 1 then, term @^i occurs in poly-repr of @^MM */
+        if (Pp[i] != 0) {
+            Alpha_to[MM] ^= mask;    /* Bit-wise EXOR operation */
+        }
+        mask <<= 1; /* single left-shift */
+    }
+    Index_of[Alpha_to[MM]] = MM;
+    /*
+     * Have obtained poly-repr of @^MM. Poly-repr of @^(i+1) is given by
+     * poly-repr of @^i shifted left one-bit and accounting for any @^MM
+     * term that may occur when poly-repr of @^i is shifted.
+     */
+    mask >>= 1;
+    for (i = MM + 1; i < NN; i++) {
+        if (Alpha_to[i - 1] >= mask) {
+            Alpha_to[i] = Alpha_to[MM] ^ ((Alpha_to[i - 1] ^ mask) << 1);
+        } else {
+            Alpha_to[i] = Alpha_to[i - 1] << 1;
+        }
+        Index_of[Alpha_to[i]] = i;
+    }
+    Index_of[0] = A0;
+    Alpha_to[NN] = 0;
 }
 
 
@@ -293,27 +295,29 @@ generate_gf(void)
 void
 gen_poly(void)
 {
-       register int i, j;
-
-       Gg[0] = Alpha_to[B0];
-       Gg[1] = 1;              /* g(x) = (X+@**B0) initially */
-       for (i = 2; i <= NN - KK; i++) {
-               Gg[i] = 1;
-               /*
-                * Below multiply (Gg[0]+Gg[1]*x + ... +Gg[i]x^i) by
-                * (@**(B0+i-1) + x)
-                */
-               for (j = i - 1; j > 0; j--)
-                       if (Gg[j] != 0)
-                               Gg[j] = Gg[j - 1] ^ Alpha_to[modnn((Index_of[Gg[j]]) + B0 + i - 1)];
-                       else
-                               Gg[j] = Gg[j - 1];
-               /* Gg[0] can never be zero */
-               Gg[0] = Alpha_to[modnn((Index_of[Gg[0]]) + B0 + i - 1)];
-       }
-       /* convert Gg[] to index form for quicker encoding */
-       for (i = 0; i <= NN - KK; i++)
-               Gg[i] = Index_of[Gg[i]];
+    register int i, j;
+
+    Gg[0] = Alpha_to[B0];
+    Gg[1] = 1;      /* g(x) = (X+@**B0) initially */
+    for (i = 2; i <= NN - KK; i++) {
+        Gg[i] = 1;
+        /*
+         * Below multiply (Gg[0]+Gg[1]*x + ... +Gg[i]x^i) by
+         * (@**(B0+i-1) + x)
+         */
+        for (j = i - 1; j > 0; j--)
+            if (Gg[j] != 0) {
+                Gg[j] = Gg[j - 1] ^ Alpha_to[modnn((Index_of[Gg[j]]) + B0 + i - 1)];
+            } else {
+                Gg[j] = Gg[j - 1];
+            }
+        /* Gg[0] can never be zero */
+        Gg[0] = Alpha_to[modnn((Index_of[Gg[0]]) + B0 + i - 1)];
+    }
+    /* convert Gg[] to index form for quicker encoding */
+    for (i = 0; i <= NN - KK; i++) {
+        Gg[i] = Index_of[Gg[i]];
+    }
 }
 
 
@@ -328,31 +332,35 @@ gen_poly(void)
 int
 encode_rs(dtype *data, dtype *bb)
 {
-       register int i, j;
-       gf feedback;
+    register int i, j;
+    gf feedback;
 
-       CLEAR(bb,NN-KK);
-       for (i = KK - 1; i >= 0; i--) {
+    CLEAR(bb, NN - KK);
+    for (i = KK - 1; i >= 0; i--) {
 #if (MM != 8)
-               if(data[i] > NN)
-                       return -1;      /* Illegal symbol */
+        if (data[i] > NN) {
+            return -1;    /* Illegal symbol */
+        }
 #endif
-               feedback = Index_of[data[i] ^ bb[NN - KK - 1]];
-               if (feedback != A0) {   /* feedback term is non-zero */
-                       for (j = NN - KK - 1; j > 0; j--)
-                               if (Gg[j] != A0)
-                                       bb[j] = bb[j - 1] ^ Alpha_to[modnn(Gg[j] + feedback)];
-                               else
-                                       bb[j] = bb[j - 1];
-                       bb[0] = Alpha_to[modnn(Gg[0] + feedback)];
-               } else {        /* feedback term is zero. encoder becomes a
-                                * single-byte shifter */
-                       for (j = NN - KK - 1; j > 0; j--)
-                               bb[j] = bb[j - 1];
-                       bb[0] = 0;
-               }
-       }
-       return 0;
+        feedback = Index_of[data[i] ^ bb[NN - KK - 1]];
+        if (feedback != A0) {   /* feedback term is non-zero */
+            for (j = NN - KK - 1; j > 0; j--)
+                if (Gg[j] != A0) {
+                    bb[j] = bb[j - 1] ^ Alpha_to[modnn(Gg[j] + feedback)];
+                } else {
+                    bb[j] = bb[j - 1];
+                }
+            bb[0] = Alpha_to[modnn(Gg[0] + feedback)];
+        } else {
+            /* feedback term is zero. encoder becomes a
+                     * single-byte shifter */
+            for (j = NN - KK - 1; j > 0; j--) {
+                bb[j] = bb[j - 1];
+            }
+            bb[0] = 0;
+        }
+    }
+    return 0;
 }
 
 /*
@@ -361,7 +369,7 @@ encode_rs(dtype *data, dtype *bb)
  *
  * Return number of symbols corrected, or -1 if codeword is illegal
  * or uncorrectable.
- * 
+ *
  * First "no_eras" erasures are declared by the calling program. Then, the
  * maximum # of errors correctable is t_after_eras = floor((NN-KK-no_eras)/2).
  * If the number of channel errors is not greater than "t_after_eras" the
@@ -371,231 +379,246 @@ encode_rs(dtype *data, dtype *bb)
 int
 eras_dec_rs(dtype *data, int *eras_pos, int no_eras)
 {
-       int deg_lambda, el, deg_omega;
-       int i, j, r;
-       gf u,q,tmp,num1,num2,den,discr_r;
-       gf recd[NN];
-       /* Err+Eras Locator poly and syndrome poly */
-       /*gf lambda[NN-KK + 1], s[NN-KK + 1];   
-       gf b[NN-KK + 1], t[NN-KK + 1], omega[NN-KK + 1];
-       gf root[NN-KK], reg[NN-KK + 1], loc[NN-KK];*/
-       gf lambda[NN + 1], s[NN + 1];   
-       gf b[NN + 1], t[NN + 1], omega[NN + 1];
-       gf root[NN], reg[NN + 1], loc[NN];
-       int syn_error, count;
-
-       /* data[] is in polynomial form, copy and convert to index form */
-       for (i = NN-1; i >= 0; i--){
+    int deg_lambda, el, deg_omega;
+    int i, j, r;
+    gf u, q, tmp, num1, num2, den, discr_r;
+    gf recd[NN];
+    /* Err+Eras Locator poly and syndrome poly */
+    /*gf lambda[NN-KK + 1], s[NN-KK + 1];
+    gf b[NN-KK + 1], t[NN-KK + 1], omega[NN-KK + 1];
+    gf root[NN-KK], reg[NN-KK + 1], loc[NN-KK];*/
+    gf lambda[NN + 1], s[NN + 1];
+    gf b[NN + 1], t[NN + 1], omega[NN + 1];
+    gf root[NN], reg[NN + 1], loc[NN];
+    int syn_error, count;
+
+    /* data[] is in polynomial form, copy and convert to index form */
+    for (i = NN - 1; i >= 0; i--) {
 #if (MM != 8)
-               if(data[i] > NN)
-                       return -1;      /* Illegal symbol */
+        if (data[i] > NN) {
+            return -1;    /* Illegal symbol */
+        }
 #endif
-               recd[i] = Index_of[data[i]];
-       }
-       /* first form the syndromes; i.e., evaluate recd(x) at roots of g(x)
-        * namely @**(B0+i), i = 0, ... ,(NN-KK-1)
-        */
-       syn_error = 0;
-       for (i = 1; i <= NN-KK; i++) {
-               tmp = 0;
-               for (j = 0; j < NN; j++)
-                       if (recd[j] != A0)      /* recd[j] in index form */
-                               tmp ^= Alpha_to[modnn(recd[j] + (B0+i-1)*j)];
-               syn_error |= tmp;       /* set flag if non-zero syndrome =>
-                                        * error */
-               /* store syndrome in index form  */
-               s[i] = Index_of[tmp];
-       }
-       if (!syn_error) {
-               /*
-                * if syndrome is zero, data[] is a codeword and there are no
-                * errors to correct. So return data[] unmodified
-                */
-               return 0;
-       }
-       CLEAR(&lambda[1],NN-KK);
-       lambda[0] = 1;
-       if (no_eras > 0) {
-               /* Init lambda to be the erasure locator polynomial */
-               lambda[1] = Alpha_to[eras_pos[0]];
-               for (i = 1; i < no_eras; i++) {
-                       u = eras_pos[i];
-                       for (j = i+1; j > 0; j--) {
-                               tmp = Index_of[lambda[j - 1]];
-                               if(tmp != A0)
-                                       lambda[j] ^= Alpha_to[modnn(u + tmp)];
-                       }
-               }
+        recd[i] = Index_of[data[i]];
+    }
+    /* first form the syndromes; i.e., evaluate recd(x) at roots of g(x)
+     * namely @**(B0+i), i = 0, ... ,(NN-KK-1)
+     */
+    syn_error = 0;
+    for (i = 1; i <= NN - KK; i++) {
+        tmp = 0;
+        for (j = 0; j < NN; j++)
+            if (recd[j] != A0) { /* recd[j] in index form */
+                tmp ^= Alpha_to[modnn(recd[j] + (B0 + i - 1) * j)];
+            }
+        syn_error |= tmp;   /* set flag if non-zero syndrome =>
+                     * error */
+        /* store syndrome in index form  */
+        s[i] = Index_of[tmp];
+    }
+    if (!syn_error) {
+        /*
+         * if syndrome is zero, data[] is a codeword and there are no
+         * errors to correct. So return data[] unmodified
+         */
+        return 0;
+    }
+    CLEAR(&lambda[1], NN - KK);
+    lambda[0] = 1;
+    if (no_eras > 0) {
+        /* Init lambda to be the erasure locator polynomial */
+        lambda[1] = Alpha_to[eras_pos[0]];
+        for (i = 1; i < no_eras; i++) {
+            u = eras_pos[i];
+            for (j = i + 1; j > 0; j--) {
+                tmp = Index_of[lambda[j - 1]];
+                if (tmp != A0) {
+                    lambda[j] ^= Alpha_to[modnn(u + tmp)];
+                }
+            }
+        }
 #ifdef ERASURE_DEBUG
-               /* find roots of the erasure location polynomial */
-               for(i=1;i<=no_eras;i++)
-                       reg[i] = Index_of[lambda[i]];
-               count = 0;
-               for (i = 1; i <= NN; i++) {
-                       q = 1;
-                       for (j = 1; j <= no_eras; j++)
-                               if (reg[j] != A0) {
-                                       reg[j] = modnn(reg[j] + j);
-                                       q ^= Alpha_to[reg[j]];
-                               }
-                       if (!q) {
-                               /* store root and error location
-                                * number indices
-                                */
-                               root[count] = i;
-                               loc[count] = NN - i;
-                               count++;
-                       }
-               }
-               if (count != no_eras) {
-                       printf("\n lambda(x) is WRONG\n");
-                       return -1;
-               }
+        /* find roots of the erasure location polynomial */
+        for (i = 1; i <= no_eras; i++) {
+            reg[i] = Index_of[lambda[i]];
+        }
+        count = 0;
+        for (i = 1; i <= NN; i++) {
+            q = 1;
+            for (j = 1; j <= no_eras; j++)
+                if (reg[j] != A0) {
+                    reg[j] = modnn(reg[j] + j);
+                    q ^= Alpha_to[reg[j]];
+                }
+            if (!q) {
+                /* store root and error location
+                 * number indices
+                 */
+                root[count] = i;
+                loc[count] = NN - i;
+                count++;
+            }
+        }
+        if (count != no_eras) {
+            printf("\n lambda(x) is WRONG\n");
+            return -1;
+        }
 #ifndef NO_PRINT
-               printf("\n Erasure positions as determined by roots of Eras Loc Poly:\n");
-               for (i = 0; i < count; i++)
-                       printf("%d ", loc[i]);
-               printf("\n");
+        printf("\n Erasure positions as determined by roots of Eras Loc Poly:\n");
+        for (i = 0; i < count; i++) {
+            printf("%d ", loc[i]);
+        }
+        printf("\n");
 #endif
 #endif
-       }
-       for(i=0;i<NN-KK+1;i++)
-               b[i] = Index_of[lambda[i]];
-
-       /*
-        * Begin Berlekamp-Massey algorithm to determine error+erasure
-        * locator polynomial
-        */
-       r = no_eras;
-       el = no_eras;
-       while (++r <= NN-KK) {  /* r is the step number */
-               /* Compute discrepancy at the r-th step in poly-form */
-               discr_r = 0;
-               for (i = 0; i < r; i++){
-                       if ((lambda[i] != 0) && (s[r - i] != A0)) {
-                               discr_r ^= Alpha_to[modnn(Index_of[lambda[i]] + s[r - i])];
-                       }
-               }
-               discr_r = Index_of[discr_r];    /* Index form */
-               if (discr_r == A0) {
-                       /* 2 lines below: B(x) <-- x*B(x) */
-                       COPYDOWN(&b[1],b,NN-KK);
-                       b[0] = A0;
-               } else {
-                       /* 7 lines below: T(x) <-- lambda(x) - discr_r*x*b(x) */
-                       t[0] = lambda[0];
-                       for (i = 0 ; i < NN-KK; i++) {
-                               if(b[i] != A0)
-                                       t[i+1] = lambda[i+1] ^ Alpha_to[modnn(discr_r + b[i])];
-                               else
-                                       t[i+1] = lambda[i+1];
-                       }
-                       if (2 * el <= r + no_eras - 1) {
-                               el = r + no_eras - el;
-                               /*
-                                * 2 lines below: B(x) <-- inv(discr_r) *
-                                * lambda(x)
-                                */
-                               for (i = 0; i <= NN-KK; i++)
-                                       b[i] = (lambda[i] == 0) ? A0 : modnn(Index_of[lambda[i]] - discr_r + NN);
-                       } else {
-                               /* 2 lines below: B(x) <-- x*B(x) */
-                               COPYDOWN(&b[1],b,NN-KK);
-                               b[0] = A0;
-                       }
-                       COPY(lambda,t,NN-KK+1);
-               }
-       }
-
-       /* Convert lambda to index form and compute deg(lambda(x)) */
-       deg_lambda = 0;
-       for(i=0;i<NN-KK+1;i++){
-               lambda[i] = Index_of[lambda[i]];
-               if(lambda[i] != A0)
-                       deg_lambda = i;
-       }
-       /*
-        * Find roots of the error+erasure locator polynomial. By Chien
-        * Search
-        */
-       COPY(&reg[1],&lambda[1],NN-KK);
-       count = 0;              /* Number of roots of lambda(x) */
-       for (i = 1; i <= NN; i++) {
-               q = 1;
-               for (j = deg_lambda; j > 0; j--)
-                       if (reg[j] != A0) {
-                               reg[j] = modnn(reg[j] + j);
-                               q ^= Alpha_to[reg[j]];
-                       }
-               if (!q) {
-                       /* store root (index-form) and error location number */
-                       root[count] = i;
-                       loc[count] = NN - i;
-                       count++;
-               }
-       }
+    }
+    for (i = 0; i < NN - KK + 1; i++) {
+        b[i] = Index_of[lambda[i]];
+    }
+
+    /*
+     * Begin Berlekamp-Massey algorithm to determine error+erasure
+     * locator polynomial
+     */
+    r = no_eras;
+    el = no_eras;
+    while (++r <= NN - KK) { /* r is the step number */
+        /* Compute discrepancy at the r-th step in poly-form */
+        discr_r = 0;
+        for (i = 0; i < r; i++) {
+            if ((lambda[i] != 0) && (s[r - i] != A0)) {
+                discr_r ^= Alpha_to[modnn(Index_of[lambda[i]] + s[r - i])];
+            }
+        }
+        discr_r = Index_of[discr_r];    /* Index form */
+        if (discr_r == A0) {
+            /* 2 lines below: B(x) <-- x*B(x) */
+            COPYDOWN(&b[1], b, NN - KK);
+            b[0] = A0;
+        } else {
+            /* 7 lines below: T(x) <-- lambda(x) - discr_r*x*b(x) */
+            t[0] = lambda[0];
+            for (i = 0 ; i < NN - KK; i++) {
+                if (b[i] != A0) {
+                    t[i + 1] = lambda[i + 1] ^ Alpha_to[modnn(discr_r + b[i])];
+                } else {
+                    t[i + 1] = lambda[i + 1];
+                }
+            }
+            if (2 * el <= r + no_eras - 1) {
+                el = r + no_eras - el;
+                /*
+                 * 2 lines below: B(x) <-- inv(discr_r) *
+                 * lambda(x)
+                 */
+                for (i = 0; i <= NN - KK; i++) {
+                    b[i] = (lambda[i] == 0) ? A0 : modnn(Index_of[lambda[i]] - discr_r + NN);
+                }
+            } else {
+                /* 2 lines below: B(x) <-- x*B(x) */
+                COPYDOWN(&b[1], b, NN - KK);
+                b[0] = A0;
+            }
+            COPY(lambda, t, NN - KK + 1);
+        }
+    }
+
+    /* Convert lambda to index form and compute deg(lambda(x)) */
+    deg_lambda = 0;
+    for (i = 0; i < NN - KK + 1; i++) {
+        lambda[i] = Index_of[lambda[i]];
+        if (lambda[i] != A0) {
+            deg_lambda = i;
+        }
+    }
+    /*
+     * Find roots of the error+erasure locator polynomial. By Chien
+     * Search
+     */
+    COPY(&reg[1], &lambda[1], NN - KK);
+    count = 0;      /* Number of roots of lambda(x) */
+    for (i = 1; i <= NN; i++) {
+        q = 1;
+        for (j = deg_lambda; j > 0; j--)
+            if (reg[j] != A0) {
+                reg[j] = modnn(reg[j] + j);
+                q ^= Alpha_to[reg[j]];
+            }
+        if (!q) {
+            /* store root (index-form) and error location number */
+            root[count] = i;
+            loc[count] = NN - i;
+            count++;
+        }
+    }
 
 #ifdef DEBUG
-       printf("\n Final error positions:\t");
-       for (i = 0; i < count; i++)
-               printf("%d ", loc[i]);
-       printf("\n");
+    printf("\n Final error positions:\t");
+    for (i = 0; i < count; i++) {
+        printf("%d ", loc[i]);
+    }
+    printf("\n");
 #endif
-       if (deg_lambda != count) {
-               /*
-                * deg(lambda) unequal to number of roots => uncorrectable
-                * error detected
-                */
-               return -1;
-       }
-       /*
-        * Compute err+eras evaluator poly omega(x) = s(x)*lambda(x) (modulo
-        * x**(NN-KK)). in index form. Also find deg(omega).
-        */
-       deg_omega = 0;
-       for (i = 0; i < NN-KK;i++){
-               tmp = 0;
-               j = (deg_lambda < i) ? deg_lambda : i;
-               for(;j >= 0; j--){
-                       if ((s[i + 1 - j] != A0) && (lambda[j] != A0))
-                               tmp ^= Alpha_to[modnn(s[i + 1 - j] + lambda[j])];
-               }
-               if(tmp != 0)
-                       deg_omega = i;
-               omega[i] = Index_of[tmp];
-       }
-       omega[NN-KK] = A0;
-
-       /*
-        * Compute error values in poly-form. num1 = omega(inv(X(l))), num2 =
-        * inv(X(l))**(B0-1) and den = lambda_pr(inv(X(l))) all in poly-form
-        */
-       for (j = count-1; j >=0; j--) {
-               num1 = 0;
-               for (i = deg_omega; i >= 0; i--) {
-                       if (omega[i] != A0)
-                               num1  ^= Alpha_to[modnn(omega[i] + i * root[j])];
-               }
-               num2 = Alpha_to[modnn(root[j] * (B0 - 1) + NN)];
-               den = 0;
-
-               /* lambda[i+1] for i even is the formal derivative lambda_pr of lambda[i] */
-               for (i = min(deg_lambda,NN-KK-1) & ~1; i >= 0; i -=2) {
-                       if(lambda[i+1] != A0)
-                               den ^= Alpha_to[modnn(lambda[i+1] + i * root[j])];
-               }
-               if (den == 0) {
+    if (deg_lambda != count) {
+        /*
+         * deg(lambda) unequal to number of roots => uncorrectable
+         * error detected
+         */
+        return -1;
+    }
+    /*
+     * Compute err+eras evaluator poly omega(x) = s(x)*lambda(x) (modulo
+     * x**(NN-KK)). in index form. Also find deg(omega).
+     */
+    deg_omega = 0;
+    for (i = 0; i < NN - KK; i++) {
+        tmp = 0;
+        j = (deg_lambda < i) ? deg_lambda : i;
+        for (; j >= 0; j--) {
+            if ((s[i + 1 - j] != A0) && (lambda[j] != A0)) {
+                tmp ^= Alpha_to[modnn(s[i + 1 - j] + lambda[j])];
+            }
+        }
+        if (tmp != 0) {
+            deg_omega = i;
+        }
+        omega[i] = Index_of[tmp];
+    }
+    omega[NN - KK] = A0;
+
+    /*
+     * Compute error values in poly-form. num1 = omega(inv(X(l))), num2 =
+     * inv(X(l))**(B0-1) and den = lambda_pr(inv(X(l))) all in poly-form
+     */
+    for (j = count - 1; j >= 0; j--) {
+        num1 = 0;
+        for (i = deg_omega; i >= 0; i--) {
+            if (omega[i] != A0) {
+                num1  ^= Alpha_to[modnn(omega[i] + i * root[j])];
+            }
+        }
+        num2 = Alpha_to[modnn(root[j] * (B0 - 1) + NN)];
+        den = 0;
+
+        /* lambda[i+1] for i even is the formal derivative lambda_pr of lambda[i] */
+        for (i = min(deg_lambda, NN - KK - 1) & ~1; i >= 0; i -= 2) {
+            if (lambda[i + 1] != A0) {
+                den ^= Alpha_to[modnn(lambda[i + 1] + i * root[j])];
+            }
+        }
+        if (den == 0) {
 #ifdef DEBUG
-                       printf("\n ERROR: denominator = 0\n");
+            printf("\n ERROR: denominator = 0\n");
 #endif
-                       return -1;
-               }
-               /* Apply error to data */
-               if (num1 != 0) {
-                       data[loc[j]] ^= Alpha_to[modnn(Index_of[num1] + Index_of[num2] + NN - Index_of[den])];
-               }
-       }
-       return count;
+            return -1;
+        }
+        /* Apply error to data */
+        if (num1 != 0) {
+            data[loc[j]] ^= Alpha_to[modnn(Index_of[num1] + Index_of[num2] + NN -
+                                           Index_of[den])];
+        }
+    }
+    return count;
 }
 
 
index a4f983d33a0b4c40c607b4e88421458aaa42ed32..91596d8b02aae70878170bd00d17990be99ad3c3 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * All rights reserved.
@@ -72,122 +72,135 @@ static int bio_bytein(opj_bio_t *bio);
 
 /*@}*/
 
-/* 
+/*
 ==========================================================
    local functions
 ==========================================================
 */
 
-static int bio_byteout(opj_bio_t *bio) {
-       bio->buf = (bio->buf << 8) & 0xffff;
-       bio->ct = bio->buf == 0xff00 ? 7 : 8;
-       if (bio->bp >= bio->end) {
-               return 1;
-       }
-       *bio->bp++ = bio->buf >> 8;
-       return 0;
+static int bio_byteout(opj_bio_t *bio)
+{
+    bio->buf = (bio->buf << 8) & 0xffff;
+    bio->ct = bio->buf == 0xff00 ? 7 : 8;
+    if (bio->bp >= bio->end) {
+        return 1;
+    }
+    *bio->bp++ = bio->buf >> 8;
+    return 0;
 }
 
-static int bio_bytein(opj_bio_t *bio) {
-       bio->buf = (bio->buf << 8) & 0xffff;
-       bio->ct = bio->buf == 0xff00 ? 7 : 8;
-       if (bio->bp >= bio->end) {
-               return 1;
-       }
-       bio->buf |= *bio->bp++;
-       return 0;
+static int bio_bytein(opj_bio_t *bio)
+{
+    bio->buf = (bio->buf << 8) & 0xffff;
+    bio->ct = bio->buf == 0xff00 ? 7 : 8;
+    if (bio->bp >= bio->end) {
+        return 1;
+    }
+    bio->buf |= *bio->bp++;
+    return 0;
 }
 
-static void bio_putbit(opj_bio_t *bio, int b) {
-       if (bio->ct == 0) {
-               bio_byteout(bio);
-       }
-       bio->ct--;
-       bio->buf |= b << bio->ct;
+static void bio_putbit(opj_bio_t *bio, int b)
+{
+    if (bio->ct == 0) {
+        bio_byteout(bio);
+    }
+    bio->ct--;
+    bio->buf |= b << bio->ct;
 }
 
-static int bio_getbit(opj_bio_t *bio) {
-       if (bio->ct == 0) {
-               bio_bytein(bio);
-       }
-       bio->ct--;
-       return (bio->buf >> bio->ct) & 1;
+static int bio_getbit(opj_bio_t *bio)
+{
+    if (bio->ct == 0) {
+        bio_bytein(bio);
+    }
+    bio->ct--;
+    return (bio->buf >> bio->ct) & 1;
 }
 
-/* 
+/*
 ==========================================================
    Bit Input/Output interface
 ==========================================================
 */
 
-opj_bio_t* bio_create(void) {
-       opj_bio_t *bio = (opj_bio_t*)opj_malloc(sizeof(opj_bio_t));
-       return bio;
+opj_bio_t* bio_create(void)
+{
+    opj_bio_t *bio = (opj_bio_t*)opj_malloc(sizeof(opj_bio_t));
+    return bio;
 }
 
-void bio_destroy(opj_bio_t *bio) {
-       if(bio) {
-               opj_free(bio);
-       }
+void bio_destroy(opj_bio_t *bio)
+{
+    if (bio) {
+        opj_free(bio);
+    }
 }
 
-int bio_numbytes(opj_bio_t *bio) {
-       return (bio->bp - bio->start);
+int bio_numbytes(opj_bio_t *bio)
+{
+    return (bio->bp - bio->start);
 }
 
-void bio_init_enc(opj_bio_t *bio, unsigned char *bp, int len) {
-       bio->start = bp;
-       bio->end = bp + len;
-       bio->bp = bp;
-       bio->buf = 0;
-       bio->ct = 8;
+void bio_init_enc(opj_bio_t *bio, unsigned char *bp, int len)
+{
+    bio->start = bp;
+    bio->end = bp + len;
+    bio->bp = bp;
+    bio->buf = 0;
+    bio->ct = 8;
 }
 
-void bio_init_dec(opj_bio_t *bio, unsigned char *bp, int len) {
-       bio->start = bp;
-       bio->end = bp + len;
-       bio->bp = bp;
-       bio->buf = 0;
-       bio->ct = 0;
+void bio_init_dec(opj_bio_t *bio, unsigned char *bp, int len)
+{
+    bio->start = bp;
+    bio->end = bp + len;
+    bio->bp = bp;
+    bio->buf = 0;
+    bio->ct = 0;
 }
 
-void bio_write(opj_bio_t *bio, int v, int n) {
-       int i;
-       for (i = n - 1; i >= 0; i--) {
-               bio_putbit(bio, (v >> i) & 1);
-       }
+void bio_write(opj_bio_t *bio, int v, int n)
+{
+    int i;
+    for (i = n - 1; i >= 0; i--) {
+        bio_putbit(bio, (v >> i) & 1);
+    }
 }
 
-int bio_read(opj_bio_t *bio, int n) {
-       int i, v;
-       v = 0;
-       for (i = n - 1; i >= 0; i--) {
-               v += bio_getbit(bio) << i;
-       }
-       return v;
+int bio_read(opj_bio_t *bio, int n)
+{
+    int i, v;
+    v = 0;
+    for (i = n - 1; i >= 0; i--) {
+        v += bio_getbit(bio) << i;
+    }
+    return v;
 }
 
-int bio_flush(opj_bio_t *bio) {
-       bio->ct = 0;
-       if (bio_byteout(bio)) {
-               return 1;
-       }
-       if (bio->ct == 7) {
-               bio->ct = 0;
-               if (bio_byteout(bio)) {
-                       return 1;
-               }
-       }
-       return 0;
+int bio_flush(opj_bio_t *bio)
+{
+    bio->ct = 0;
+    if (bio_byteout(bio)) {
+        return 1;
+    }
+    if (bio->ct == 7) {
+        bio->ct = 0;
+        if (bio_byteout(bio)) {
+            return 1;
+        }
+    }
+    return 0;
 }
 
-int bio_inalign(opj_bio_t *bio) {
-       bio->ct = 0;
-       if ((bio->buf & 0xff) == 0xff) {
-               if (bio_bytein(bio)) {
-                       return 1;
-               }
-               bio->ct = 0;
-       }
-       return 0;
+int bio_inalign(opj_bio_t *bio)
+{
+    bio->ct = 0;
+    if ((bio->buf & 0xff) == 0xff) {
+        if (bio_bytein(bio)) {
+            return 1;
+        }
+        bio->ct = 0;
+    }
+    return 0;
 }
index 51ea135d5a60328e673870ef9ff00308c2f006e4..433d3aacf0b93c2771a12e346e29646020fe90d2 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * All rights reserved.
 
 /* ----------------------------------------------------------------------- */
 
-opj_cio_t* OPJ_CALLCONV opj_cio_open(opj_common_ptr cinfo, unsigned char *buffer, int length) {
-       opj_cp_t *cp = NULL;
-       opj_cio_t *cio = (opj_cio_t*)opj_malloc(sizeof(opj_cio_t));
-       if(!cio) return NULL;
-       cio->cinfo = cinfo;
-       if(buffer && length) {
-               /* wrap a user buffer containing the encoded image */
-               cio->openmode = OPJ_STREAM_READ;
-               cio->buffer = buffer;
-               cio->length = length;
-       }
-       else if(!buffer && !length && cinfo) {
-               /* allocate a buffer for the encoded image */
-               cio->openmode = OPJ_STREAM_WRITE;
-               switch(cinfo->codec_format) {
-                       case CODEC_J2K:
-                               cp = ((opj_j2k_t*)cinfo->j2k_handle)->cp;
-                               break;
-                       case CODEC_JP2:
-                               cp = ((opj_jp2_t*)cinfo->jp2_handle)->j2k->cp;
-                               break;
-                       default:
-                               opj_free(cio);
-                               return NULL;
-               }
-               cio->length = (unsigned int) (0.1625 * cp->img_size + 2000); /* 0.1625 = 1.3/8 and 2000 bytes as a minimum for headers */
-               cio->buffer = (unsigned char *)opj_malloc(cio->length);
-               if(!cio->buffer) {
-                       opj_event_msg(cio->cinfo, EVT_ERROR, "Error allocating memory for compressed bitstream\n");
-                       opj_free(cio);
-                       return NULL;
-               }
-       }
-       else {
-               opj_free(cio);
-               return NULL;
-       }
-
-       /* Initialize byte IO */
-       cio->start = cio->buffer;
-       cio->end = cio->buffer + cio->length;
-       cio->bp = cio->buffer;
-
-       return cio;
+opj_cio_t* OPJ_CALLCONV opj_cio_open(opj_common_ptr cinfo,
+                                     unsigned char *buffer, int length)
+{
+    opj_cp_t *cp = NULL;
+    opj_cio_t *cio = (opj_cio_t*)opj_malloc(sizeof(opj_cio_t));
+    if (!cio) {
+        return NULL;
+    }
+    cio->cinfo = cinfo;
+    if (buffer && length) {
+        /* wrap a user buffer containing the encoded image */
+        cio->openmode = OPJ_STREAM_READ;
+        cio->buffer = buffer;
+        cio->length = length;
+    } else if (!buffer && !length && cinfo) {
+        /* allocate a buffer for the encoded image */
+        cio->openmode = OPJ_STREAM_WRITE;
+        switch (cinfo->codec_format) {
+        case CODEC_J2K:
+            cp = ((opj_j2k_t*)cinfo->j2k_handle)->cp;
+            break;
+        case CODEC_JP2:
+            cp = ((opj_jp2_t*)cinfo->jp2_handle)->j2k->cp;
+            break;
+        default:
+            opj_free(cio);
+            return NULL;
+        }
+        cio->length = (unsigned int)(0.1625 * cp->img_size +
+                                     2000);  /* 0.1625 = 1.3/8 and 2000 bytes as a minimum for headers */
+        cio->buffer = (unsigned char *)opj_malloc(cio->length);
+        if (!cio->buffer) {
+            opj_event_msg(cio->cinfo, EVT_ERROR,
+                          "Error allocating memory for compressed bitstream\n");
+            opj_free(cio);
+            return NULL;
+        }
+    } else {
+        opj_free(cio);
+        return NULL;
+    }
+
+    /* Initialize byte IO */
+    cio->start = cio->buffer;
+    cio->end = cio->buffer + cio->length;
+    cio->bp = cio->buffer;
+
+    return cio;
 }
 
-void OPJ_CALLCONV opj_cio_close(opj_cio_t *cio) {
-       if(cio) {
-               if(cio->openmode == OPJ_STREAM_WRITE) {
-                       /* destroy the allocated buffer */
-                       opj_free(cio->buffer);
-               }
-               /* destroy the cio */
-               opj_free(cio);
-       }
+void OPJ_CALLCONV opj_cio_close(opj_cio_t *cio)
+{
+    if (cio) {
+        if (cio->openmode == OPJ_STREAM_WRITE) {
+            /* destroy the allocated buffer */
+            opj_free(cio->buffer);
+        }
+        /* destroy the cio */
+        opj_free(cio);
+    }
 }
 
 
@@ -102,8 +107,9 @@ void OPJ_CALLCONV opj_cio_close(opj_cio_t *cio) {
 /*
  * Get position in byte stream.
  */
-int OPJ_CALLCONV cio_tell(opj_cio_t *cio) {
-       return cio->bp - cio->start;
+int OPJ_CALLCONV cio_tell(opj_cio_t *cio)
+{
+    return cio->bp - cio->start;
 }
 
 /*
@@ -111,45 +117,52 @@ int OPJ_CALLCONV cio_tell(opj_cio_t *cio) {
  *
  * pos : position, in number of bytes, from the beginning of the stream
  */
-void OPJ_CALLCONV cio_seek(opj_cio_t *cio, int pos) {
-       cio->bp = cio->start + pos;
+void OPJ_CALLCONV cio_seek(opj_cio_t *cio, int pos)
+{
+    cio->bp = cio->start + pos;
 }
 
 /*
  * Number of bytes left before the end of the stream.
  */
-int cio_numbytesleft(opj_cio_t *cio) {
-       return cio->end - cio->bp;
+int cio_numbytesleft(opj_cio_t *cio)
+{
+    return cio->end - cio->bp;
 }
 
 /*
  * Get pointer to the current position in the stream.
  */
-unsigned char *cio_getbp(opj_cio_t *cio) {
-       return cio->bp;
+unsigned char *cio_getbp(opj_cio_t *cio)
+{
+    return cio->bp;
 }
 
 /*
  * Write a byte.
  */
-opj_bool cio_byteout(opj_cio_t *cio, unsigned char v) {
-       if (cio->bp >= cio->end) {
-               opj_event_msg(cio->cinfo, EVT_ERROR, "write error\n");
-               return OPJ_FALSE;
-       }
-       *cio->bp++ = v;
-       return OPJ_TRUE;
+opj_bool cio_byteout(opj_cio_t *cio, unsigned char v)
+{
+    if (cio->bp >= cio->end) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "write error\n");
+        return OPJ_FALSE;
+    }
+    *cio->bp++ = v;
+    return OPJ_TRUE;
 }
 
 /*
  * Read a byte.
  */
-unsigned char cio_bytein(opj_cio_t *cio) {
-       if (cio->bp >= cio->end) {
-               opj_event_msg(cio->cinfo, EVT_ERROR, "read error: passed the end of the codestream (start = %d, current = %d, end = %d\n", cio->start, cio->bp, cio->end);
-               return 0;
-       }
-       return *cio->bp++;
+unsigned char cio_bytein(opj_cio_t *cio)
+{
+    if (cio->bp >= cio->end) {
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "read error: passed the end of the codestream (start = %d, current = %d, end = %d\n",
+                      cio->start, cio->bp, cio->end);
+        return 0;
+    }
+    return *cio->bp++;
 }
 
 /*
@@ -158,13 +171,15 @@ unsigned char cio_bytein(opj_cio_t *cio) {
  * v : value to write
  * n : number of bytes to write
  */
-unsigned int OPJ_CALLCONV cio_write(opj_cio_t *cio, unsigned int64 v, int n) {
-       int i;
-       for (i = n - 1; i >= 0; i--) {
-               if( !cio_byteout(cio, (unsigned char) ((v >> (i << 3)) & 0xff)) )
-                       return 0;
-       }
-       return n;
+unsigned int OPJ_CALLCONV cio_write(opj_cio_t *cio, unsigned int64 v, int n)
+{
+    int i;
+    for (i = n - 1; i >= 0; i--) {
+        if (!cio_byteout(cio, (unsigned char)((v >> (i << 3)) & 0xff))) {
+            return 0;
+        }
+    }
+    return n;
 }
 
 /*
@@ -174,23 +189,25 @@ unsigned int OPJ_CALLCONV cio_write(opj_cio_t *cio, unsigned int64 v, int n) {
  *
  * return : value of the n bytes read
  */
-unsigned int OPJ_CALLCONV cio_read(opj_cio_t *cio, int n) {
-       int i;
-       unsigned int v;
-       v = 0;
-       for (i = n - 1; i >= 0; i--) {
-               v += cio_bytein(cio) << (i << 3);
-       }
-       return v;
+unsigned int OPJ_CALLCONV cio_read(opj_cio_t *cio, int n)
+{
+    int i;
+    unsigned int v;
+    v = 0;
+    for (i = n - 1; i >= 0; i--) {
+        v += cio_bytein(cio) << (i << 3);
+    }
+    return v;
 }
 
-/* 
+/*
  * Skip some bytes.
  *
  * n : number of bytes to skip
  */
-void OPJ_CALLCONV cio_skip(opj_cio_t *cio, int n) {
-       cio->bp += n;
+void OPJ_CALLCONV cio_skip(opj_cio_t *cio, int n)
+{
+    cio->bp += n;
 }
 
 
index 178e4d02a3cc726f9788f7a7770e5f2d8a2409b2..8c7ed13765d54a77f028244721a0ffb605f6c8b5 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * Copyright (c) 2007, Jonathan Ballard <dzonatas@dzonux.net>
 /*@{*/
 
 typedef struct dwt_local {
-       int* mem;
-       int dn;
-       int sn;
-       int cas;
+    int* mem;
+    int dn;
+    int sn;
+    int cas;
 } dwt_t;
 
 typedef union {
-       float   f[4];
+    float   f[4];
 } v4;
 
 typedef struct v4dwt_local {
-       v4*     wavelet ;
-       int             dn ;
-       int             sn ;
-       int             cas ;
+    v4* wavelet ;
+    int     dn ;
+    int     sn ;
+    int     cas ;
 } v4dwt_t ;
 
 static const float dwt_alpha =  1.586134342f; /*  12994 */
@@ -82,7 +82,7 @@ static const float c13318 = 1.625732422f;
 /*@}*/
 
 /**
-Virtual function type for wavelet transform in 1-D 
+Virtual function type for wavelet transform in 1-D
 */
 typedef void (*DWT1DFN)(dwt_t* v);
 
@@ -118,9 +118,10 @@ Forward 9-7 wavelet transform in 1-D
 */
 static void dwt_encode_1_real(int *a, int dn, int sn, int cas);
 /**
-Explicit calculation of the Quantization Stepsizes 
+Explicit calculation of the Quantization Stepsizes
 */
-static void dwt_encode_stepsize(int stepsize, int numbps, opj_stepsize_t *bandno_stepsize);
+static void dwt_encode_stepsize(int stepsize, int numbps,
+                                opj_stepsize_t *bandno_stepsize);
 /**
 Inverse wavelet transform in 2-D.
 */
@@ -142,85 +143,97 @@ static void dwt_decode_tile(opj_tcd_tilecomp_t* tilec, int i, DWT1DFN fn);
 /* This table contains the norms of the 5-3 wavelets for different bands. */
 /* </summary>                                                             */
 static const double dwt_norms[4][10] = {
-       {1.000, 1.500, 2.750, 5.375, 10.68, 21.34, 42.67, 85.33, 170.7, 341.3},
-       {1.038, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
-       {1.038, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
-       {.7186, .9218, 1.586, 3.043, 6.019, 12.01, 24.00, 47.97, 95.93}
+    {1.000, 1.500, 2.750, 5.375, 10.68, 21.34, 42.67, 85.33, 170.7, 341.3},
+    {1.038, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
+    {1.038, 1.592, 2.919, 5.703, 11.33, 22.64, 45.25, 90.48, 180.9},
+    {.7186, .9218, 1.586, 3.043, 6.019, 12.01, 24.00, 47.97, 95.93}
 };
 
 /* <summary>                                                              */
 /* This table contains the norms of the 9-7 wavelets for different bands. */
 /* </summary>                                                             */
 static const double dwt_norms_real[4][10] = {
-       {1.000, 1.965, 4.177, 8.403, 16.90, 33.84, 67.69, 135.3, 270.6, 540.9},
-       {2.022, 3.989, 8.355, 17.04, 34.27, 68.63, 137.3, 274.6, 549.0},
-       {2.022, 3.989, 8.355, 17.04, 34.27, 68.63, 137.3, 274.6, 549.0},
-       {2.080, 3.865, 8.307, 17.18, 34.71, 69.59, 139.3, 278.6, 557.2}
+    {1.000, 1.965, 4.177, 8.403, 16.90, 33.84, 67.69, 135.3, 270.6, 540.9},
+    {2.022, 3.989, 8.355, 17.04, 34.27, 68.63, 137.3, 274.6, 549.0},
+    {2.022, 3.989, 8.355, 17.04, 34.27, 68.63, 137.3, 274.6, 549.0},
+    {2.080, 3.865, 8.307, 17.18, 34.71, 69.59, 139.3, 278.6, 557.2}
 };
 
-/* 
+/*
 ==========================================================
    local functions
 ==========================================================
 */
 
-/* <summary>                                    */
+/* <summary>                             */
 /* Forward lazy transform (horizontal).  */
-/* </summary>                            */ 
-static void dwt_deinterleave_h(int *a, int *b, int dn, int sn, int cas) {
-       int i;
-    for (i=0; i<sn; i++) b[i]=a[2*i+cas];
-    for (i=0; i<dn; i++) b[sn+i]=a[(2*i+1-cas)];
+/* </summary>                            */
+static void dwt_deinterleave_h(int *a, int *b, int dn, int sn, int cas)
+{
+    int i;
+    for (i = 0; i < sn; i++) {
+        b[i] = a[2 * i + cas];
+    }
+    for (i = 0; i < dn; i++) {
+        b[sn + i] = a[(2 * i + 1 - cas)];
+    }
 }
 
-/* <summary>                             */  
+/* <summary>                             */
 /* Forward lazy transform (vertical).    */
-/* </summary>                            */ 
-static void dwt_deinterleave_v(int *a, int *b, int dn, int sn, int x, int cas) {
+/* </summary>                            */
+static void dwt_deinterleave_v(int *a, int *b, int dn, int sn, int x, int cas)
+{
     int i;
-    for (i=0; i<sn; i++) b[i*x]=a[2*i+cas];
-    for (i=0; i<dn; i++) b[(sn+i)*x]=a[(2*i+1-cas)];
+    for (i = 0; i < sn; i++) {
+        b[i * x] = a[2 * i + cas];
+    }
+    for (i = 0; i < dn; i++) {
+        b[(sn + i)*x] = a[(2 * i + 1 - cas)];
+    }
 }
 
 /* <summary>                             */
 /* Inverse lazy transform (horizontal).  */
 /* </summary>                            */
-static void dwt_interleave_h(dwt_t* h, int *a) {
+static void dwt_interleave_h(dwt_t* h, int *a)
+{
     int *ai = a;
     int *bi = h->mem + h->cas;
-    int  i     = h->sn;
-    while( i-- ) {
-      *bi = *(ai++);
-         bi += 2;
+    int  i  = h->sn;
+    while (i--) {
+        *bi = *(ai++);
+        bi += 2;
     }
-    ai = a + h->sn;
-    bi = h->mem + 1 - h->cas;
-    i  = h->dn ;
-    while( i-- ) {
-      *bi = *(ai++);
-         bi += 2;
+    ai  = a + h->sn;
+    bi  = h->mem + 1 - h->cas;
+    i   = h->dn ;
+    while (i--) {
+        *bi = *(ai++);
+        bi += 2;
     }
 }
 
-/* <summary>                             */  
+/* <summary>                             */
 /* Inverse lazy transform (vertical).    */
-/* </summary>                            */ 
-static void dwt_interleave_v(dwt_t* v, int *a, int x) {
+/* </summary>                            */
+static void dwt_interleave_v(dwt_t* v, int *a, int x)
+{
     int *ai = a;
     int *bi = v->mem + v->cas;
     int  i = v->sn;
-    while( i-- ) {
-      *bi = *ai;
-         bi += 2;
-         ai += x;
+    while (i--) {
+        *bi = *ai;
+        bi += 2;
+        ai += x;
     }
     ai = a + (v->sn * x);
     bi = v->mem + 1 - v->cas;
     i = v->dn ;
-    while( i-- ) {
-      *bi = *ai;
-         bi += 2;  
-         ai += x;
+    while (i--) {
+        *bi = *ai;
+        bi += 2;
+        ai += x;
     }
 }
 
@@ -228,99 +241,133 @@ static void dwt_interleave_v(dwt_t* v, int *a, int x) {
 /* <summary>                            */
 /* Forward 5-3 wavelet transform in 1-D. */
 /* </summary>                           */
-static void dwt_encode_1(int *a, int dn, int sn, int cas) {
-       int i;
-       
-       if (!cas) {
-               if ((dn > 0) || (sn > 1)) {     /* NEW :  CASE ONE ELEMENT */
-                       for (i = 0; i < dn; i++) D(i) -= (S_(i) + S_(i + 1)) >> 1;
-                       for (i = 0; i < sn; i++) S(i) += (D_(i - 1) + D_(i) + 2) >> 2;
-               }
-       } else {
-               if (!sn && dn == 1)                 /* NEW :  CASE ONE ELEMENT */
-                       S(0) *= 2;
-               else {
-                       for (i = 0; i < dn; i++) S(i) -= (DD_(i) + DD_(i - 1)) >> 1;
-                       for (i = 0; i < sn; i++) D(i) += (SS_(i) + SS_(i + 1) + 2) >> 2;
-               }
-       }
+static void dwt_encode_1(int *a, int dn, int sn, int cas)
+{
+    int i;
+
+    if (!cas) {
+        if ((dn > 0) || (sn > 1)) { /* NEW :  CASE ONE ELEMENT */
+            for (i = 0; i < dn; i++) {
+                D(i) -= (S_(i) + S_(i + 1)) >> 1;
+            }
+            for (i = 0; i < sn; i++) {
+                S(i) += (D_(i - 1) + D_(i) + 2) >> 2;
+            }
+        }
+    } else {
+        if (!sn && dn == 1) {       /* NEW :  CASE ONE ELEMENT */
+            S(0) *= 2;
+        } else {
+            for (i = 0; i < dn; i++) {
+                S(i) -= (DD_(i) + DD_(i - 1)) >> 1;
+            }
+            for (i = 0; i < sn; i++) {
+                D(i) += (SS_(i) + SS_(i + 1) + 2) >> 2;
+            }
+        }
+    }
 }
 
 /* <summary>                            */
 /* Inverse 5-3 wavelet transform in 1-D. */
-/* </summary>                           */ 
-static void dwt_decode_1_(int *a, int dn, int sn, int cas) {
-       int i;
-       
-       if (!cas) {
-               if ((dn > 0) || (sn > 1)) { /* NEW :  CASE ONE ELEMENT */
-                       for (i = 0; i < sn; i++) S(i) -= (D_(i - 1) + D_(i) + 2) >> 2;
-                       for (i = 0; i < dn; i++) D(i) += (S_(i) + S_(i + 1)) >> 1;
-               }
-       } else {
-               if (!sn  && dn == 1)          /* NEW :  CASE ONE ELEMENT */
-                       S(0) /= 2;
-               else {
-                       for (i = 0; i < sn; i++) D(i) -= (SS_(i) + SS_(i + 1) + 2) >> 2;
-                       for (i = 0; i < dn; i++) S(i) += (DD_(i) + DD_(i - 1)) >> 1;
-               }
-       }
+/* </summary>                           */
+static void dwt_decode_1_(int *a, int dn, int sn, int cas)
+{
+    int i;
+
+    if (!cas) {
+        if ((dn > 0) || (sn > 1)) { /* NEW :  CASE ONE ELEMENT */
+            for (i = 0; i < sn; i++) {
+                S(i) -= (D_(i - 1) + D_(i) + 2) >> 2;
+            }
+            for (i = 0; i < dn; i++) {
+                D(i) += (S_(i) + S_(i + 1)) >> 1;
+            }
+        }
+    } else {
+        if (!sn  && dn == 1) {        /* NEW :  CASE ONE ELEMENT */
+            S(0) /= 2;
+        } else {
+            for (i = 0; i < sn; i++) {
+                D(i) -= (SS_(i) + SS_(i + 1) + 2) >> 2;
+            }
+            for (i = 0; i < dn; i++) {
+                S(i) += (DD_(i) + DD_(i - 1)) >> 1;
+            }
+        }
+    }
 }
 
 /* <summary>                            */
 /* Inverse 5-3 wavelet transform in 1-D. */
-/* </summary>                           */ 
-static void dwt_decode_1(dwt_t *v) {
-       dwt_decode_1_(v->mem, v->dn, v->sn, v->cas);
+/* </summary>                           */
+static void dwt_decode_1(dwt_t *v)
+{
+    dwt_decode_1_(v->mem, v->dn, v->sn, v->cas);
 }
 
 /* <summary>                             */
 /* Forward 9-7 wavelet transform in 1-D. */
 /* </summary>                            */
-static void dwt_encode_1_real(int *a, int dn, int sn, int cas) {
-       int i;
-       if (!cas) {
-               if ((dn > 0) || (sn > 1)) {     /* NEW :  CASE ONE ELEMENT */
-                       for (i = 0; i < dn; i++)
-                               D(i) -= fix_mul(S_(i) + S_(i + 1), 12993);
-                       for (i = 0; i < sn; i++)
-                               S(i) -= fix_mul(D_(i - 1) + D_(i), 434);
-                       for (i = 0; i < dn; i++)
-                               D(i) += fix_mul(S_(i) + S_(i + 1), 7233);
-                       for (i = 0; i < sn; i++)
-                               S(i) += fix_mul(D_(i - 1) + D_(i), 3633);
-                       for (i = 0; i < dn; i++)
-                               D(i) = fix_mul(D(i), 5038);     /*5038 */
-                       for (i = 0; i < sn; i++)
-                               S(i) = fix_mul(S(i), 6659);     /*6660 */
-               }
-       } else {
-               if ((sn > 0) || (dn > 1)) {     /* NEW :  CASE ONE ELEMENT */
-                       for (i = 0; i < dn; i++)
-                               S(i) -= fix_mul(DD_(i) + DD_(i - 1), 12993);
-                       for (i = 0; i < sn; i++)
-                               D(i) -= fix_mul(SS_(i) + SS_(i + 1), 434);
-                       for (i = 0; i < dn; i++)
-                               S(i) += fix_mul(DD_(i) + DD_(i - 1), 7233);
-                       for (i = 0; i < sn; i++)
-                               D(i) += fix_mul(SS_(i) + SS_(i + 1), 3633);
-                       for (i = 0; i < dn; i++)
-                               S(i) = fix_mul(S(i), 5038);     /*5038 */
-                       for (i = 0; i < sn; i++)
-                               D(i) = fix_mul(D(i), 6659);     /*6660 */
-               }
-       }
+static void dwt_encode_1_real(int *a, int dn, int sn, int cas)
+{
+    int i;
+    if (!cas) {
+        if ((dn > 0) || (sn > 1)) { /* NEW :  CASE ONE ELEMENT */
+            for (i = 0; i < dn; i++) {
+                D(i) -= fix_mul(S_(i) + S_(i + 1), 12993);
+            }
+            for (i = 0; i < sn; i++) {
+                S(i) -= fix_mul(D_(i - 1) + D_(i), 434);
+            }
+            for (i = 0; i < dn; i++) {
+                D(i) += fix_mul(S_(i) + S_(i + 1), 7233);
+            }
+            for (i = 0; i < sn; i++) {
+                S(i) += fix_mul(D_(i - 1) + D_(i), 3633);
+            }
+            for (i = 0; i < dn; i++) {
+                D(i) = fix_mul(D(i), 5038);    /*5038 */
+            }
+            for (i = 0; i < sn; i++) {
+                S(i) = fix_mul(S(i), 6659);    /*6660 */
+            }
+        }
+    } else {
+        if ((sn > 0) || (dn > 1)) { /* NEW :  CASE ONE ELEMENT */
+            for (i = 0; i < dn; i++) {
+                S(i) -= fix_mul(DD_(i) + DD_(i - 1), 12993);
+            }
+            for (i = 0; i < sn; i++) {
+                D(i) -= fix_mul(SS_(i) + SS_(i + 1), 434);
+            }
+            for (i = 0; i < dn; i++) {
+                S(i) += fix_mul(DD_(i) + DD_(i - 1), 7233);
+            }
+            for (i = 0; i < sn; i++) {
+                D(i) += fix_mul(SS_(i) + SS_(i + 1), 3633);
+            }
+            for (i = 0; i < dn; i++) {
+                S(i) = fix_mul(S(i), 5038);    /*5038 */
+            }
+            for (i = 0; i < sn; i++) {
+                D(i) = fix_mul(D(i), 6659);    /*6660 */
+            }
+        }
+    }
 }
 
-static void dwt_encode_stepsize(int stepsize, int numbps, opj_stepsize_t *bandno_stepsize) {
-       int p, n;
-       p = int_floorlog2(stepsize) - 13;
-       n = 11 - int_floorlog2(stepsize);
-       bandno_stepsize->mant = (n < 0 ? stepsize >> -n : stepsize << n) & 0x7ff;
-       bandno_stepsize->expn = numbps - p;
+static void dwt_encode_stepsize(int stepsize, int numbps,
+                                opj_stepsize_t *bandno_stepsize)
+{
+    int p, n;
+    p = int_floorlog2(stepsize) - 13;
+    n = 11 - int_floorlog2(stepsize);
+    bandno_stepsize->mant = (n < 0 ? stepsize >> -n : stepsize << n) & 0x7ff;
+    bandno_stepsize->expn = numbps - p;
 }
 
-/* 
+/*
 ==========================================================
    DWT interface
 ==========================================================
@@ -329,413 +376,453 @@ static void dwt_encode_stepsize(int stepsize, int numbps, opj_stepsize_t *bandno
 /* <summary>                            */
 /* Forward 5-3 wavelet transform in 2-D. */
 /* </summary>                           */
-void dwt_encode(opj_tcd_tilecomp_t * tilec) {
-       int i, j, k;
-       int *a = NULL;
-       int *aj = NULL;
-       int *bj = NULL;
-       int w, l;
-       
-       w = tilec->x1-tilec->x0;
-       l = tilec->numresolutions-1;
-       a = tilec->data;
-       
-       for (i = 0; i < l; i++) {
-               int rw;                 /* width of the resolution level computed                                                           */
-               int rh;                 /* height of the resolution level computed                                                          */
-               int rw1;                /* width of the resolution level once lower than computed one                                       */
-               int rh1;                /* height of the resolution level once lower than computed one                                      */
-               int cas_col;    /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */
-               int cas_row;    /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering   */
-               int dn, sn;
-               
-               rw = tilec->resolutions[l - i].x1 - tilec->resolutions[l - i].x0;
-               rh = tilec->resolutions[l - i].y1 - tilec->resolutions[l - i].y0;
-               rw1= tilec->resolutions[l - i - 1].x1 - tilec->resolutions[l - i - 1].x0;
-               rh1= tilec->resolutions[l - i - 1].y1 - tilec->resolutions[l - i - 1].y0;
-               
-               cas_row = tilec->resolutions[l - i].x0 % 2;
-               cas_col = tilec->resolutions[l - i].y0 % 2;
-        
-               sn = rh1;
-               dn = rh - rh1;
-               bj = (int*)opj_malloc(rh * sizeof(int));
-               for (j = 0; j < rw; j++) {
-                       aj = a + j;
-                       for (k = 0; k < rh; k++)  bj[k] = aj[k*w];
-                       dwt_encode_1(bj, dn, sn, cas_col);
-                       dwt_deinterleave_v(bj, aj, dn, sn, w, cas_col);
-               }
-               opj_free(bj);
-               
-               sn = rw1;
-               dn = rw - rw1;
-               bj = (int*)opj_malloc(rw * sizeof(int));
-               for (j = 0; j < rh; j++) {
-                       aj = a + j * w;
-                       for (k = 0; k < rw; k++)  bj[k] = aj[k];
-                       dwt_encode_1(bj, dn, sn, cas_row);
-                       dwt_deinterleave_h(bj, aj, dn, sn, cas_row);
-               }
-               opj_free(bj);
-       }
+void dwt_encode(opj_tcd_tilecomp_t * tilec)
+{
+    int i, j, k;
+    int *a = NULL;
+    int *aj = NULL;
+    int *bj = NULL;
+    int w, l;
+
+    w = tilec->x1 - tilec->x0;
+    l = tilec->numresolutions - 1;
+    a = tilec->data;
+
+    for (i = 0; i < l; i++) {
+        int rw;         /* width of the resolution level computed                                                           */
+        int rh;         /* height of the resolution level computed                                                          */
+        int rw1;        /* width of the resolution level once lower than computed one                                       */
+        int rh1;        /* height of the resolution level once lower than computed one                                      */
+        int cas_col;    /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */
+        int cas_row;    /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering   */
+        int dn, sn;
+
+        rw = tilec->resolutions[l - i].x1 - tilec->resolutions[l - i].x0;
+        rh = tilec->resolutions[l - i].y1 - tilec->resolutions[l - i].y0;
+        rw1 = tilec->resolutions[l - i - 1].x1 - tilec->resolutions[l - i - 1].x0;
+        rh1 = tilec->resolutions[l - i - 1].y1 - tilec->resolutions[l - i - 1].y0;
+
+        cas_row = tilec->resolutions[l - i].x0 % 2;
+        cas_col = tilec->resolutions[l - i].y0 % 2;
+
+        sn = rh1;
+        dn = rh - rh1;
+        bj = (int*)opj_malloc(rh * sizeof(int));
+        for (j = 0; j < rw; j++) {
+            aj = a + j;
+            for (k = 0; k < rh; k++) {
+                bj[k] = aj[k * w];
+            }
+            dwt_encode_1(bj, dn, sn, cas_col);
+            dwt_deinterleave_v(bj, aj, dn, sn, w, cas_col);
+        }
+        opj_free(bj);
+
+        sn = rw1;
+        dn = rw - rw1;
+        bj = (int*)opj_malloc(rw * sizeof(int));
+        for (j = 0; j < rh; j++) {
+            aj = a + j * w;
+            for (k = 0; k < rw; k++) {
+                bj[k] = aj[k];
+            }
+            dwt_encode_1(bj, dn, sn, cas_row);
+            dwt_deinterleave_h(bj, aj, dn, sn, cas_row);
+        }
+        opj_free(bj);
+    }
 }
 
 
 /* <summary>                            */
 /* Inverse 5-3 wavelet transform in 2-D. */
 /* </summary>                           */
-void dwt_decode(opj_tcd_tilecomp_t* tilec, int numres) {
-       dwt_decode_tile(tilec, numres, &dwt_decode_1);
+void dwt_decode(opj_tcd_tilecomp_t* tilec, int numres)
+{
+    dwt_decode_tile(tilec, numres, &dwt_decode_1);
 }
 
 
 /* <summary>                          */
 /* Get gain of 5-3 wavelet transform. */
 /* </summary>                         */
-int dwt_getgain(int orient) {
-       if (orient == 0)
-               return 0;
-       if (orient == 1 || orient == 2)
-               return 1;
-       return 2;
+int dwt_getgain(int orient)
+{
+    if (orient == 0) {
+        return 0;
+    }
+    if (orient == 1 || orient == 2) {
+        return 1;
+    }
+    return 2;
 }
 
 /* <summary>                */
 /* Get norm of 5-3 wavelet. */
 /* </summary>               */
-double dwt_getnorm(int level, int orient) {
-       return dwt_norms[orient][level];
+double dwt_getnorm(int level, int orient)
+{
+    return dwt_norms[orient][level];
 }
 
 /* <summary>                             */
 /* Forward 9-7 wavelet transform in 2-D. */
 /* </summary>                            */
 
-void dwt_encode_real(opj_tcd_tilecomp_t * tilec) {
-       int i, j, k;
-       int *a = NULL;
-       int *aj = NULL;
-       int *bj = NULL;
-       int w, l;
-       
-       w = tilec->x1-tilec->x0;
-       l = tilec->numresolutions-1;
-       a = tilec->data;
-       
-       for (i = 0; i < l; i++) {
-               int rw;                 /* width of the resolution level computed                                                     */
-               int rh;                 /* height of the resolution level computed                                                    */
-               int rw1;                /* width of the resolution level once lower than computed one                                 */
-               int rh1;                /* height of the resolution level once lower than computed one                                */
-               int cas_col;    /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */
-               int cas_row;    /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering   */
-               int dn, sn;
-               
-               rw = tilec->resolutions[l - i].x1 - tilec->resolutions[l - i].x0;
-               rh = tilec->resolutions[l - i].y1 - tilec->resolutions[l - i].y0;
-               rw1= tilec->resolutions[l - i - 1].x1 - tilec->resolutions[l - i - 1].x0;
-               rh1= tilec->resolutions[l - i - 1].y1 - tilec->resolutions[l - i - 1].y0;
-               
-               cas_row = tilec->resolutions[l - i].x0 % 2;
-               cas_col = tilec->resolutions[l - i].y0 % 2;
-               
-               sn = rh1;
-               dn = rh - rh1;
-               bj = (int*)opj_malloc(rh * sizeof(int));
-               for (j = 0; j < rw; j++) {
-                       aj = a + j;
-                       for (k = 0; k < rh; k++)  bj[k] = aj[k*w];
-                       dwt_encode_1_real(bj, dn, sn, cas_col);
-                       dwt_deinterleave_v(bj, aj, dn, sn, w, cas_col);
-               }
-               opj_free(bj);
-               
-               sn = rw1;
-               dn = rw - rw1;
-               bj = (int*)opj_malloc(rw * sizeof(int));
-               for (j = 0; j < rh; j++) {
-                       aj = a + j * w;
-                       for (k = 0; k < rw; k++)  bj[k] = aj[k];
-                       dwt_encode_1_real(bj, dn, sn, cas_row);
-                       dwt_deinterleave_h(bj, aj, dn, sn, cas_row);
-               }
-               opj_free(bj);
-       }
+void dwt_encode_real(opj_tcd_tilecomp_t * tilec)
+{
+    int i, j, k;
+    int *a = NULL;
+    int *aj = NULL;
+    int *bj = NULL;
+    int w, l;
+
+    w = tilec->x1 - tilec->x0;
+    l = tilec->numresolutions - 1;
+    a = tilec->data;
+
+    for (i = 0; i < l; i++) {
+        int rw;         /* width of the resolution level computed                                                     */
+        int rh;         /* height of the resolution level computed                                                    */
+        int rw1;        /* width of the resolution level once lower than computed one                                 */
+        int rh1;        /* height of the resolution level once lower than computed one                                */
+        int cas_col;    /* 0 = non inversion on horizontal filtering 1 = inversion between low-pass and high-pass filtering */
+        int cas_row;    /* 0 = non inversion on vertical filtering 1 = inversion between low-pass and high-pass filtering   */
+        int dn, sn;
+
+        rw = tilec->resolutions[l - i].x1 - tilec->resolutions[l - i].x0;
+        rh = tilec->resolutions[l - i].y1 - tilec->resolutions[l - i].y0;
+        rw1 = tilec->resolutions[l - i - 1].x1 - tilec->resolutions[l - i - 1].x0;
+        rh1 = tilec->resolutions[l - i - 1].y1 - tilec->resolutions[l - i - 1].y0;
+
+        cas_row = tilec->resolutions[l - i].x0 % 2;
+        cas_col = tilec->resolutions[l - i].y0 % 2;
+
+        sn = rh1;
+        dn = rh - rh1;
+        bj = (int*)opj_malloc(rh * sizeof(int));
+        for (j = 0; j < rw; j++) {
+            aj = a + j;
+            for (k = 0; k < rh; k++) {
+                bj[k] = aj[k * w];
+            }
+            dwt_encode_1_real(bj, dn, sn, cas_col);
+            dwt_deinterleave_v(bj, aj, dn, sn, w, cas_col);
+        }
+        opj_free(bj);
+
+        sn = rw1;
+        dn = rw - rw1;
+        bj = (int*)opj_malloc(rw * sizeof(int));
+        for (j = 0; j < rh; j++) {
+            aj = a + j * w;
+            for (k = 0; k < rw; k++) {
+                bj[k] = aj[k];
+            }
+            dwt_encode_1_real(bj, dn, sn, cas_row);
+            dwt_deinterleave_h(bj, aj, dn, sn, cas_row);
+        }
+        opj_free(bj);
+    }
 }
 
 
 /* <summary>                          */
 /* Get gain of 9-7 wavelet transform. */
 /* </summary>                         */
-int dwt_getgain_real(int orient) {
-       (void)orient;
-       return 0;
+int dwt_getgain_real(int orient)
+{
+    (void)orient;
+    return 0;
 }
 
 /* <summary>                */
 /* Get norm of 9-7 wavelet. */
 /* </summary>               */
-double dwt_getnorm_real(int level, int orient) {
-       return dwt_norms_real[orient][level];
+double dwt_getnorm_real(int level, int orient)
+{
+    return dwt_norms_real[orient][level];
 }
 
-void dwt_calc_explicit_stepsizes(opj_tccp_t * tccp, int prec) {
-       int numbands, bandno;
-       numbands = 3 * tccp->numresolutions - 2;
-       for (bandno = 0; bandno < numbands; bandno++) {
-               double stepsize;
-               int resno, level, orient, gain;
-
-               resno = (bandno == 0) ? 0 : ((bandno - 1) / 3 + 1);
-               orient = (bandno == 0) ? 0 : ((bandno - 1) % 3 + 1);
-               level = tccp->numresolutions - 1 - resno;
-               gain = (tccp->qmfbid == 0) ? 0 : ((orient == 0) ? 0 : (((orient == 1) || (orient == 2)) ? 1 : 2));
-               if (tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) {
-                       stepsize = 1.0;
-               } else {
-                       double norm = dwt_norms_real[orient][level];
-                       stepsize = (1 << (gain)) / norm;
-               }
-               dwt_encode_stepsize((int) floor(stepsize * 8192.0), prec + gain, &tccp->stepsizes[bandno]);
-       }
+void dwt_calc_explicit_stepsizes(opj_tccp_t * tccp, int prec)
+{
+    int numbands, bandno;
+    numbands = 3 * tccp->numresolutions - 2;
+    for (bandno = 0; bandno < numbands; bandno++) {
+        double stepsize;
+        int resno, level, orient, gain;
+
+        resno = (bandno == 0) ? 0 : ((bandno - 1) / 3 + 1);
+        orient = (bandno == 0) ? 0 : ((bandno - 1) % 3 + 1);
+        level = tccp->numresolutions - 1 - resno;
+        gain = (tccp->qmfbid == 0) ? 0 : ((orient == 0) ? 0 : (((orient == 1) ||
+                                          (orient == 2)) ? 1 : 2));
+        if (tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) {
+            stepsize = 1.0;
+        } else {
+            double norm = dwt_norms_real[orient][level];
+            stepsize = (1 << (gain)) / norm;
+        }
+        dwt_encode_stepsize((int) floor(stepsize * 8192.0), prec + gain,
+                            &tccp->stepsizes[bandno]);
+    }
 }
 
 
 /* <summary>                             */
 /* Determine maximum computed resolution level for inverse wavelet transform */
 /* </summary>                            */
-static int dwt_decode_max_resolution(opj_tcd_resolution_t* restrict r, int i) {
-       int mr  = 1;
-       int w;
-       while( --i ) {
-               r++;
-               if( mr < ( w = r->x1 - r->x0 ) )
-                       mr = w ;
-               if( mr < ( w = r->y1 - r->y0 ) )
-                       mr = w ;
-       }
-       return mr ;
+static int dwt_decode_max_resolution(opj_tcd_resolution_t* restrict r, int i)
+{
+    int mr  = 1;
+    int w;
+    while (--i) {
+        r++;
+        if (mr < (w = r->x1 - r->x0)) {
+            mr = w ;
+        }
+        if (mr < (w = r->y1 - r->y0)) {
+            mr = w ;
+        }
+    }
+    return mr ;
 }
 
 
 /* <summary>                            */
 /* Inverse wavelet transform in 2-D.     */
 /* </summary>                           */
-static void dwt_decode_tile(opj_tcd_tilecomp_t* tilec, int numres, DWT1DFN dwt_1D) {
-       dwt_t h;
-       dwt_t v;
-
-       opj_tcd_resolution_t* tr = tilec->resolutions;
-
-       int rw = tr->x1 - tr->x0;       /* width of the resolution level computed */
-       int rh = tr->y1 - tr->y0;       /* height of the resolution level computed */
-
-       int w = tilec->x1 - tilec->x0;
-
-       h.mem = (int*)opj_aligned_malloc(dwt_decode_max_resolution(tr, numres) * sizeof(int));
-       v.mem = h.mem;
-
-       while( --numres) {
-               int * restrict tiledp = tilec->data;
-               int j;
-
-               ++tr;
-               h.sn = rw;
-               v.sn = rh;
-
-               rw = tr->x1 - tr->x0;
-               rh = tr->y1 - tr->y0;
-
-               h.dn = rw - h.sn;
-               h.cas = tr->x0 % 2;
-
-               for(j = 0; j < rh; ++j) {
-                       dwt_interleave_h(&h, &tiledp[j*w]);
-                       (dwt_1D)(&h);
-                       memcpy(&tiledp[j*w], h.mem, rw * sizeof(int));
-               }
-
-               v.dn = rh - v.sn;
-               v.cas = tr->y0 % 2;
-
-               for(j = 0; j < rw; ++j){
-                       int k;
-                       dwt_interleave_v(&v, &tiledp[j], w);
-                       (dwt_1D)(&v);
-                       for(k = 0; k < rh; ++k) {
-                               tiledp[k * w + j] = v.mem[k];
-                       }
-               }
-       }
-       opj_aligned_free(h.mem);
+static void dwt_decode_tile(opj_tcd_tilecomp_t* tilec, int numres,
+                            DWT1DFN dwt_1D)
+{
+    dwt_t h;
+    dwt_t v;
+
+    opj_tcd_resolution_t* tr = tilec->resolutions;
+
+    int rw = tr->x1 - tr->x0;   /* width of the resolution level computed */
+    int rh = tr->y1 - tr->y0;   /* height of the resolution level computed */
+
+    int w = tilec->x1 - tilec->x0;
+
+    h.mem = (int*)opj_aligned_malloc(dwt_decode_max_resolution(tr,
+                                     numres) * sizeof(int));
+    v.mem = h.mem;
+
+    while (--numres) {
+        int * restrict tiledp = tilec->data;
+        int j;
+
+        ++tr;
+        h.sn = rw;
+        v.sn = rh;
+
+        rw = tr->x1 - tr->x0;
+        rh = tr->y1 - tr->y0;
+
+        h.dn = rw - h.sn;
+        h.cas = tr->x0 % 2;
+
+        for (j = 0; j < rh; ++j) {
+            dwt_interleave_h(&h, &tiledp[j * w]);
+            (dwt_1D)(&h);
+            memcpy(&tiledp[j * w], h.mem, rw * sizeof(int));
+        }
+
+        v.dn = rh - v.sn;
+        v.cas = tr->y0 % 2;
+
+        for (j = 0; j < rw; ++j) {
+            int k;
+            dwt_interleave_v(&v, &tiledp[j], w);
+            (dwt_1D)(&v);
+            for (k = 0; k < rh; ++k) {
+                tiledp[k * w + j] = v.mem[k];
+            }
+        }
+    }
+    opj_aligned_free(h.mem);
 }
 
-static void v4dwt_interleave_h(v4dwt_t* restrict w, float* restrict a, int x, int size){
-       float* restrict bi = (float*) (w->wavelet + w->cas);
-       int count = w->sn;
-       int i, k;
-       for(k = 0; k < 2; ++k){
-               if (count + 3 * x < size && ((size_t) a & 0x0f) == 0 && ((size_t) bi & 0x0f) == 0 && (x & 0x0f) == 0) {
-                       /* Fast code path */
-                       for(i = 0; i < count; ++i){
-                               int j = i;
-                               bi[i*8    ] = a[j];
-                               j += x;
-                               bi[i*8 + 1] = a[j];
-                               j += x;
-                               bi[i*8 + 2] = a[j];
-                               j += x;
-                               bi[i*8 + 3] = a[j];
-                       }
-               } else {
-                       /* Slow code path */
-               for(i = 0; i < count; ++i){
-                       int j = i;
-                       bi[i*8    ] = a[j];
-                       j += x;
-                       if(j > size) continue;
-                       bi[i*8 + 1] = a[j];
-                       j += x;
-                       if(j > size) continue;
-                       bi[i*8 + 2] = a[j];
-                       j += x;
-                       if(j > size) continue;
-                       bi[i*8 + 3] = a[j];
-               }
-               }
-               bi = (float*) (w->wavelet + 1 - w->cas);
-               a += w->sn;
-               size -= w->sn;
-               count = w->dn;
-       }
+static void v4dwt_interleave_h(v4dwt_t* restrict w, float* restrict a, int x,
+                               int size)
+{
+    float* restrict bi = (float*)(w->wavelet + w->cas);
+    int count = w->sn;
+    int i, k;
+    for (k = 0; k < 2; ++k) {
+        if (count + 3 * x < size && ((size_t) a & 0x0f) == 0 &&
+                ((size_t) bi & 0x0f) == 0 && (x & 0x0f) == 0) {
+            /* Fast code path */
+            for (i = 0; i < count; ++i) {
+                int j = i;
+                bi[i * 8    ] = a[j];
+                j += x;
+                bi[i * 8 + 1] = a[j];
+                j += x;
+                bi[i * 8 + 2] = a[j];
+                j += x;
+                bi[i * 8 + 3] = a[j];
+            }
+        } else {
+            /* Slow code path */
+            for (i = 0; i < count; ++i) {
+                int j = i;
+                bi[i * 8    ] = a[j];
+                j += x;
+                if (j > size) {
+                    continue;
+                }
+                bi[i * 8 + 1] = a[j];
+                j += x;
+                if (j > size) {
+                    continue;
+                }
+                bi[i * 8 + 2] = a[j];
+                j += x;
+                if (j > size) {
+                    continue;
+                }
+                bi[i * 8 + 3] = a[j];
+            }
+        }
+        bi = (float*)(w->wavelet + 1 - w->cas);
+        a += w->sn;
+        size -= w->sn;
+        count = w->dn;
+    }
 }
 
-static void v4dwt_interleave_v(v4dwt_t* restrict v , float* restrict a , int x){
-       v4* restrict bi = v->wavelet + v->cas;
-       int i;
-       for(i = 0; i < v->sn; ++i){
-               memcpy(&bi[i*2], &a[i*x], 4 * sizeof(float));
-       }
-       a += v->sn * x;
-       bi = v->wavelet + 1 - v->cas;
-       for(i = 0; i < v->dn; ++i){
-               memcpy(&bi[i*2], &a[i*x], 4 * sizeof(float));
-       }
+static void v4dwt_interleave_v(v4dwt_t* restrict v, float* restrict a, int x)
+{
+    v4* restrict bi = v->wavelet + v->cas;
+    int i;
+    for (i = 0; i < v->sn; ++i) {
+        memcpy(&bi[i * 2], &a[i * x], 4 * sizeof(float));
+    }
+    a += v->sn * x;
+    bi = v->wavelet + 1 - v->cas;
+    for (i = 0; i < v->dn; ++i) {
+        memcpy(&bi[i * 2], &a[i * x], 4 * sizeof(float));
+    }
 }
 
 #ifdef __SSE__
 
-static void v4dwt_decode_step1_sse(v4* w, int count, const __m128 c){
-       __m128* restrict vw = (__m128*) w;
-       int i;
-       /* 4x unrolled loop */
-       for(i = 0; i < count >> 2; ++i){
-               *vw = _mm_mul_ps(*vw, c);
-               vw += 2;
-               *vw = _mm_mul_ps(*vw, c);
-               vw += 2;
-               *vw = _mm_mul_ps(*vw, c);
-               vw += 2;
-               *vw = _mm_mul_ps(*vw, c);
-               vw += 2;
-       }
-       count &= 3;
-       for(i = 0; i < count; ++i){
-               *vw = _mm_mul_ps(*vw, c);
-               vw += 2;
-       }
+static void v4dwt_decode_step1_sse(v4* w, int count, const __m128 c)
+{
+    __m128* restrict vw = (__m128*) w;
+    int i;
+    /* 4x unrolled loop */
+    for (i = 0; i < count >> 2; ++i) {
+        *vw = _mm_mul_ps(*vw, c);
+        vw += 2;
+        *vw = _mm_mul_ps(*vw, c);
+        vw += 2;
+        *vw = _mm_mul_ps(*vw, c);
+        vw += 2;
+        *vw = _mm_mul_ps(*vw, c);
+        vw += 2;
+    }
+    count &= 3;
+    for (i = 0; i < count; ++i) {
+        *vw = _mm_mul_ps(*vw, c);
+        vw += 2;
+    }
 }
 
-static void v4dwt_decode_step2_sse(v4* l, v4* w, int k, int m, __m128 c){
-       __m128* restrict vl = (__m128*) l;
-       __m128* restrict vw = (__m128*) w;
-       int i;
-       __m128 tmp1, tmp2, tmp3;
-       tmp1 = vl[0];
-       for(i = 0; i < m; ++i){
-               tmp2 = vw[-1];
-               tmp3 = vw[ 0];
-               vw[-1] = _mm_add_ps(tmp2, _mm_mul_ps(_mm_add_ps(tmp1, tmp3), c));
-               tmp1 = tmp3;
-               vw += 2;
-       }
-       vl = vw - 2;
-       if(m >= k){
-               return;
-       }
-       c = _mm_add_ps(c, c);
-       c = _mm_mul_ps(c, vl[0]);
-       for(; m < k; ++m){
-               __m128 tmp = vw[-1];
-               vw[-1] = _mm_add_ps(tmp, c);
-               vw += 2;
-       }
+static void v4dwt_decode_step2_sse(v4* l, v4* w, int k, int m, __m128 c)
+{
+    __m128* restrict vl = (__m128*) l;
+    __m128* restrict vw = (__m128*) w;
+    int i;
+    __m128 tmp1, tmp2, tmp3;
+    tmp1 = vl[0];
+    for (i = 0; i < m; ++i) {
+        tmp2 = vw[-1];
+        tmp3 = vw[ 0];
+        vw[-1] = _mm_add_ps(tmp2, _mm_mul_ps(_mm_add_ps(tmp1, tmp3), c));
+        tmp1 = tmp3;
+        vw += 2;
+    }
+    vl = vw - 2;
+    if (m >= k) {
+        return;
+    }
+    c = _mm_add_ps(c, c);
+    c = _mm_mul_ps(c, vl[0]);
+    for (; m < k; ++m) {
+        __m128 tmp = vw[-1];
+        vw[-1] = _mm_add_ps(tmp, c);
+        vw += 2;
+    }
 }
 
 #else
 
-static void v4dwt_decode_step1(v4* w, int count, const float c){
-       float* restrict fw = (float*) w;
-       int i;
-       for(i = 0; i < count; ++i){
-               float tmp1 = fw[i*8    ];
-               float tmp2 = fw[i*8 + 1];
-               float tmp3 = fw[i*8 + 2];
-               float tmp4 = fw[i*8 + 3];
-               fw[i*8    ] = tmp1 * c;
-               fw[i*8 + 1] = tmp2 * c;
-               fw[i*8 + 2] = tmp3 * c;
-               fw[i*8 + 3] = tmp4 * c;
-       }
+static void v4dwt_decode_step1(v4* w, int count, const float c)
+{
+    float* restrict fw = (float*) w;
+    int i;
+    for (i = 0; i < count; ++i) {
+        float tmp1 = fw[i * 8    ];
+        float tmp2 = fw[i * 8 + 1];
+        float tmp3 = fw[i * 8 + 2];
+        float tmp4 = fw[i * 8 + 3];
+        fw[i * 8    ] = tmp1 * c;
+        fw[i * 8 + 1] = tmp2 * c;
+        fw[i * 8 + 2] = tmp3 * c;
+        fw[i * 8 + 3] = tmp4 * c;
+    }
 }
 
-static void v4dwt_decode_step2(v4* l, v4* w, int k, int m, float c){
-       float* restrict fl = (float*) l;
-       float* restrict fw = (float*) w;
-       int i;
-       for(i = 0; i < m; ++i){
-               float tmp1_1 = fl[0];
-               float tmp1_2 = fl[1];
-               float tmp1_3 = fl[2];
-               float tmp1_4 = fl[3];
-               float tmp2_1 = fw[-4];
-               float tmp2_2 = fw[-3];
-               float tmp2_3 = fw[-2];
-               float tmp2_4 = fw[-1];
-               float tmp3_1 = fw[0];
-               float tmp3_2 = fw[1];
-               float tmp3_3 = fw[2];
-               float tmp3_4 = fw[3];
-               fw[-4] = tmp2_1 + ((tmp1_1 + tmp3_1) * c);
-               fw[-3] = tmp2_2 + ((tmp1_2 + tmp3_2) * c);
-               fw[-2] = tmp2_3 + ((tmp1_3 + tmp3_3) * c);
-               fw[-1] = tmp2_4 + ((tmp1_4 + tmp3_4) * c);
-               fl = fw;
-               fw += 8;
-       }
-       if(m < k){
-               float c1;
-               float c2;
-               float c3;
-               float c4;
-               c += c;
-               c1 = fl[0] * c;
-               c2 = fl[1] * c;
-               c3 = fl[2] * c;
-               c4 = fl[3] * c;
-               for(; m < k; ++m){
-                       float tmp1 = fw[-4];
-                       float tmp2 = fw[-3];
-                       float tmp3 = fw[-2];
-                       float tmp4 = fw[-1];
-                       fw[-4] = tmp1 + c1;
-                       fw[-3] = tmp2 + c2;
-                       fw[-2] = tmp3 + c3;
-                       fw[-1] = tmp4 + c4;
-                       fw += 8;
-               }
-       }
+static void v4dwt_decode_step2(v4* l, v4* w, int k, int m, float c)
+{
+    float* restrict fl = (float*) l;
+    float* restrict fw = (float*) w;
+    int i;
+    for (i = 0; i < m; ++i) {
+        float tmp1_1 = fl[0];
+        float tmp1_2 = fl[1];
+        float tmp1_3 = fl[2];
+        float tmp1_4 = fl[3];
+        float tmp2_1 = fw[-4];
+        float tmp2_2 = fw[-3];
+        float tmp2_3 = fw[-2];
+        float tmp2_4 = fw[-1];
+        float tmp3_1 = fw[0];
+        float tmp3_2 = fw[1];
+        float tmp3_3 = fw[2];
+        float tmp3_4 = fw[3];
+        fw[-4] = tmp2_1 + ((tmp1_1 + tmp3_1) * c);
+        fw[-3] = tmp2_2 + ((tmp1_2 + tmp3_2) * c);
+        fw[-2] = tmp2_3 + ((tmp1_3 + tmp3_3) * c);
+        fw[-1] = tmp2_4 + ((tmp1_4 + tmp3_4) * c);
+        fl = fw;
+        fw += 8;
+    }
+    if (m < k) {
+        float c1;
+        float c2;
+        float c3;
+        float c4;
+        c += c;
+        c1 = fl[0] * c;
+        c2 = fl[1] * c;
+        c3 = fl[2] * c;
+        c4 = fl[3] * c;
+        for (; m < k; ++m) {
+            float tmp1 = fw[-4];
+            float tmp2 = fw[-3];
+            float tmp3 = fw[-2];
+            float tmp4 = fw[-1];
+            fw[-4] = tmp1 + c1;
+            fw[-3] = tmp2 + c2;
+            fw[-2] = tmp3 + c3;
+            fw[-1] = tmp4 + c4;
+            fw += 8;
+        }
+    }
 }
 
 #endif
@@ -743,122 +830,136 @@ static void v4dwt_decode_step2(v4* l, v4* w, int k, int m, float c){
 /* <summary>                             */
 /* Inverse 9-7 wavelet transform in 1-D. */
 /* </summary>                            */
-static void v4dwt_decode(v4dwt_t* restrict dwt){
-       int a, b;
-       if(dwt->cas == 0) {
-               if(!((dwt->dn > 0) || (dwt->sn > 1))){
-                       return;
-               }
-               a = 0;
-               b = 1;
-       }else{
-               if(!((dwt->sn > 0) || (dwt->dn > 1))) {
-                       return;
-               }
-               a = 1;
-               b = 0;
-       }
+static void v4dwt_decode(v4dwt_t* restrict dwt)
+{
+    int a, b;
+    if (dwt->cas == 0) {
+        if (!((dwt->dn > 0) || (dwt->sn > 1))) {
+            return;
+        }
+        a = 0;
+        b = 1;
+    } else {
+        if (!((dwt->sn > 0) || (dwt->dn > 1))) {
+            return;
+        }
+        a = 1;
+        b = 0;
+    }
 #ifdef __SSE__
-       v4dwt_decode_step1_sse(dwt->wavelet+a, dwt->sn, _mm_set1_ps(K));
-       v4dwt_decode_step1_sse(dwt->wavelet+b, dwt->dn, _mm_set1_ps(c13318));
-       v4dwt_decode_step2_sse(dwt->wavelet+b, dwt->wavelet+a+1, dwt->sn, int_min(dwt->sn, dwt->dn-a), _mm_set1_ps(dwt_delta));
-       v4dwt_decode_step2_sse(dwt->wavelet+a, dwt->wavelet+b+1, dwt->dn, int_min(dwt->dn, dwt->sn-b), _mm_set1_ps(dwt_gamma));
-       v4dwt_decode_step2_sse(dwt->wavelet+b, dwt->wavelet+a+1, dwt->sn, int_min(dwt->sn, dwt->dn-a), _mm_set1_ps(dwt_beta));
-       v4dwt_decode_step2_sse(dwt->wavelet+a, dwt->wavelet+b+1, dwt->dn, int_min(dwt->dn, dwt->sn-b), _mm_set1_ps(dwt_alpha));
+    v4dwt_decode_step1_sse(dwt->wavelet + a, dwt->sn, _mm_set1_ps(K));
+    v4dwt_decode_step1_sse(dwt->wavelet + b, dwt->dn, _mm_set1_ps(c13318));
+    v4dwt_decode_step2_sse(dwt->wavelet + b, dwt->wavelet + a + 1, dwt->sn,
+                           int_min(dwt->sn, dwt->dn - a), _mm_set1_ps(dwt_delta));
+    v4dwt_decode_step2_sse(dwt->wavelet + a, dwt->wavelet + b + 1, dwt->dn,
+                           int_min(dwt->dn, dwt->sn - b), _mm_set1_ps(dwt_gamma));
+    v4dwt_decode_step2_sse(dwt->wavelet + b, dwt->wavelet + a + 1, dwt->sn,
+                           int_min(dwt->sn, dwt->dn - a), _mm_set1_ps(dwt_beta));
+    v4dwt_decode_step2_sse(dwt->wavelet + a, dwt->wavelet + b + 1, dwt->dn,
+                           int_min(dwt->dn, dwt->sn - b), _mm_set1_ps(dwt_alpha));
 #else
-       v4dwt_decode_step1(dwt->wavelet+a, dwt->sn, K);
-       v4dwt_decode_step1(dwt->wavelet+b, dwt->dn, c13318);
-       v4dwt_decode_step2(dwt->wavelet+b, dwt->wavelet+a+1, dwt->sn, int_min(dwt->sn, dwt->dn-a), dwt_delta);
-       v4dwt_decode_step2(dwt->wavelet+a, dwt->wavelet+b+1, dwt->dn, int_min(dwt->dn, dwt->sn-b), dwt_gamma);
-       v4dwt_decode_step2(dwt->wavelet+b, dwt->wavelet+a+1, dwt->sn, int_min(dwt->sn, dwt->dn-a), dwt_beta);
-       v4dwt_decode_step2(dwt->wavelet+a, dwt->wavelet+b+1, dwt->dn, int_min(dwt->dn, dwt->sn-b), dwt_alpha);
+    v4dwt_decode_step1(dwt->wavelet + a, dwt->sn, K);
+    v4dwt_decode_step1(dwt->wavelet + b, dwt->dn, c13318);
+    v4dwt_decode_step2(dwt->wavelet + b, dwt->wavelet + a + 1, dwt->sn,
+                       int_min(dwt->sn, dwt->dn - a), dwt_delta);
+    v4dwt_decode_step2(dwt->wavelet + a, dwt->wavelet + b + 1, dwt->dn,
+                       int_min(dwt->dn, dwt->sn - b), dwt_gamma);
+    v4dwt_decode_step2(dwt->wavelet + b, dwt->wavelet + a + 1, dwt->sn,
+                       int_min(dwt->sn, dwt->dn - a), dwt_beta);
+    v4dwt_decode_step2(dwt->wavelet + a, dwt->wavelet + b + 1, dwt->dn,
+                       int_min(dwt->dn, dwt->sn - b), dwt_alpha);
 #endif
 }
 
 /* <summary>                             */
 /* Inverse 9-7 wavelet transform in 2-D. */
 /* </summary>                            */
-void dwt_decode_real(opj_tcd_tilecomp_t* restrict tilec, int numres){
-       v4dwt_t h;
-       v4dwt_t v;
-
-       opj_tcd_resolution_t* res = tilec->resolutions;
-
-       int rw = res->x1 - res->x0;     /* width of the resolution level computed */
-       int rh = res->y1 - res->y0;     /* height of the resolution level computed */
-
-       int w = tilec->x1 - tilec->x0;
-
-       h.wavelet = (v4*) opj_aligned_malloc((dwt_decode_max_resolution(res, numres)+5) * sizeof(v4));
-       v.wavelet = h.wavelet;
-
-       while( --numres) {
-               float * restrict aj = (float*) tilec->data;
-               int bufsize = (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0);
-               int j;
-
-               h.sn = rw;
-               v.sn = rh;
-
-               ++res;
-
-               rw = res->x1 - res->x0; /* width of the resolution level computed */
-               rh = res->y1 - res->y0; /* height of the resolution level computed */
-
-               h.dn = rw - h.sn;
-               h.cas = res->x0 % 2;
-
-               for(j = rh; j > 3; j -= 4){
-                       int k;
-                       v4dwt_interleave_h(&h, aj, w, bufsize);
-                       v4dwt_decode(&h);
-                               for(k = rw; --k >= 0;){
-                                       aj[k    ] = h.wavelet[k].f[0];
-                                       aj[k+w  ] = h.wavelet[k].f[1];
-                                       aj[k+w*2] = h.wavelet[k].f[2];
-                                       aj[k+w*3] = h.wavelet[k].f[3];
-                               }
-                       aj += w*4;
-                       bufsize -= w*4;
-               }
-               if (rh & 0x03) {
-                               int k;
-                       j = rh & 0x03;
-                       v4dwt_interleave_h(&h, aj, w, bufsize);
-                       v4dwt_decode(&h);
-                               for(k = rw; --k >= 0;){
-                                       switch(j) {
-                                               case 3: aj[k+w*2] = h.wavelet[k].f[2];
-                                               case 2: aj[k+w  ] = h.wavelet[k].f[1];
-                                               case 1: aj[k    ] = h.wavelet[k].f[0];
-                                       }
-                               }
-                       }
-
-               v.dn = rh - v.sn;
-               v.cas = res->y0 % 2;
-
-               aj = (float*) tilec->data;
-               for(j = rw; j > 3; j -= 4){
-                       int k;
-                       v4dwt_interleave_v(&v, aj, w);
-                       v4dwt_decode(&v);
-                               for(k = 0; k < rh; ++k){
-                                       memcpy(&aj[k*w], &v.wavelet[k], 4 * sizeof(float));
-                               }
-                       aj += 4;
-               }
-               if (rw & 0x03){
-                               int k;
-                       j = rw & 0x03;
-                       v4dwt_interleave_v(&v, aj, w);
-                       v4dwt_decode(&v);
-                               for(k = 0; k < rh; ++k){
-                                       memcpy(&aj[k*w], &v.wavelet[k], j * sizeof(float));
-                               }
-                       }
-       }
-
-       opj_aligned_free(h.wavelet);
+void dwt_decode_real(opj_tcd_tilecomp_t* restrict tilec, int numres)
+{
+    v4dwt_t h;
+    v4dwt_t v;
+
+    opj_tcd_resolution_t* res = tilec->resolutions;
+
+    int rw = res->x1 - res->x0; /* width of the resolution level computed */
+    int rh = res->y1 - res->y0; /* height of the resolution level computed */
+
+    int w = tilec->x1 - tilec->x0;
+
+    h.wavelet = (v4*) opj_aligned_malloc((dwt_decode_max_resolution(res,
+                                          numres) + 5) * sizeof(v4));
+    v.wavelet = h.wavelet;
+
+    while (--numres) {
+        float * restrict aj = (float*) tilec->data;
+        int bufsize = (tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0);
+        int j;
+
+        h.sn = rw;
+        v.sn = rh;
+
+        ++res;
+
+        rw = res->x1 - res->x0; /* width of the resolution level computed */
+        rh = res->y1 - res->y0; /* height of the resolution level computed */
+
+        h.dn = rw - h.sn;
+        h.cas = res->x0 % 2;
+
+        for (j = rh; j > 3; j -= 4) {
+            int k;
+            v4dwt_interleave_h(&h, aj, w, bufsize);
+            v4dwt_decode(&h);
+            for (k = rw; --k >= 0;) {
+                aj[k    ] = h.wavelet[k].f[0];
+                aj[k + w  ] = h.wavelet[k].f[1];
+                aj[k + w * 2] = h.wavelet[k].f[2];
+                aj[k + w * 3] = h.wavelet[k].f[3];
+            }
+            aj += w * 4;
+            bufsize -= w * 4;
+        }
+        if (rh & 0x03) {
+            int k;
+            j = rh & 0x03;
+            v4dwt_interleave_h(&h, aj, w, bufsize);
+            v4dwt_decode(&h);
+            for (k = rw; --k >= 0;) {
+                switch (j) {
+                case 3:
+                    aj[k + w * 2] = h.wavelet[k].f[2];
+                case 2:
+                    aj[k + w  ] = h.wavelet[k].f[1];
+                case 1:
+                    aj[k    ] = h.wavelet[k].f[0];
+                }
+            }
+        }
+
+        v.dn = rh - v.sn;
+        v.cas = res->y0 % 2;
+
+        aj = (float*) tilec->data;
+        for (j = rw; j > 3; j -= 4) {
+            int k;
+            v4dwt_interleave_v(&v, aj, w);
+            v4dwt_decode(&v);
+            for (k = 0; k < rh; ++k) {
+                memcpy(&aj[k * w], &v.wavelet[k], 4 * sizeof(float));
+            }
+            aj += 4;
+        }
+        if (rw & 0x03) {
+            int k;
+            j = rw & 0x03;
+            v4dwt_interleave_v(&v, aj, w);
+            v4dwt_decode(&v);
+            for (k = 0; k < rh; ++k) {
+                memcpy(&aj[k * w], &v.wavelet[k], j * sizeof(float));
+            }
+        }
+    }
+
+    opj_aligned_free(h.wavelet);
 }
 
index 0210ed684ec22fd8535da2540542ddb2249e1989..7eebfaa45dfc4f085df52d6b0ab1e73476ab650b 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
 #ifdef OPJ_CODE_NOT_USED
 #ifndef _WIN32
 static char*
-i2a(unsigned i, char *a, unsigned r) {
-       if (i/r > 0) a = i2a(i/r,a,r);
-       *a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i%r];
-       return a+1;
+i2a(unsigned i, char *a, unsigned r)
+{
+    if (i / r > 0) {
+        a = i2a(i / r, a, r);
+    }
+    *a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i % r];
+    return a + 1;
 }
 
-/** 
- Transforms integer i into an ascii string and stores the result in a; 
+/**
+ Transforms integer i into an ascii string and stores the result in a;
  string is encoded in the base indicated by r.
  @param i Number to be converted
  @param a String result
@@ -53,74 +56,82 @@ i2a(unsigned i, char *a, unsigned r) {
  @return Returns a
 */
 static char *
-_itoa(int i, char *a, int r) {
-       r = ((r < 2) || (r > 36)) ? 10 : r;
-       if(i < 0) {
-               *a = '-';
-               *i2a(-i, a+1, r) = 0;
-       }
-       else *i2a(i, a, r) = 0;
-       return a;
+_itoa(int i, char *a, int r)
+{
+    r = ((r < 2) || (r > 36)) ? 10 : r;
+    if (i < 0) {
+        *a = '-';
+        *i2a(-i, a + 1, r) = 0;
+    } else {
+        *i2a(i, a, r) = 0;
+    }
+    return a;
 }
 
 #endif /* !_WIN32 */
 #endif
 /* ----------------------------------------------------------------------- */
 
-opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo, opj_event_mgr_t *event_mgr, void *context) {
-       if(cinfo) {
-               opj_event_mgr_t *previous = cinfo->event_mgr;
-               cinfo->event_mgr = event_mgr;
-               cinfo->client_data = context;
-               return previous;
-       }
+opj_event_mgr_t* OPJ_CALLCONV opj_set_event_mgr(opj_common_ptr cinfo,
+        opj_event_mgr_t *event_mgr, void *context)
+{
+    if (cinfo) {
+        opj_event_mgr_t *previous = cinfo->event_mgr;
+        cinfo->event_mgr = event_mgr;
+        cinfo->client_data = context;
+        return previous;
+    }
 
-       return NULL;
+    return NULL;
 }
 
-opj_bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt, ...) {
+opj_bool opj_event_msg(opj_common_ptr cinfo, int event_type, const char *fmt,
+                       ...)
+{
 #define MSG_SIZE 512 /* 512 bytes should be more than enough for a short message */
-       opj_msg_callback msg_handler = NULL;
+    opj_msg_callback msg_handler = NULL;
 
-       opj_event_mgr_t *event_mgr = cinfo->event_mgr;
-       if(event_mgr != NULL) {
-               switch(event_type) {
-                       case EVT_ERROR:
-                               msg_handler = event_mgr->error_handler;
-                               break;
-                       case EVT_WARNING:
-                               msg_handler = event_mgr->warning_handler;
-                               break;
-                       case EVT_INFO:
-                               msg_handler = event_mgr->info_handler;
-                               break;
-                       default:
-                               break;
-               }
-               if(msg_handler == NULL) {
-                       return OPJ_FALSE;
-               }
-       } else {
-               return OPJ_FALSE;
-       }
+    opj_event_mgr_t *event_mgr = cinfo->event_mgr;
+    if (event_mgr != NULL) {
+        switch (event_type) {
+        case EVT_ERROR:
+            msg_handler = event_mgr->error_handler;
+            break;
+        case EVT_WARNING:
+            msg_handler = event_mgr->warning_handler;
+            break;
+        case EVT_INFO:
+            msg_handler = event_mgr->info_handler;
+            break;
+        default:
+            break;
+        }
+        if (msg_handler == NULL) {
+            return OPJ_FALSE;
+        }
+    } else {
+        return OPJ_FALSE;
+    }
 
-       if ((fmt != NULL) && (event_mgr != NULL)) {
-               va_list arg;
-               int str_length/*, i, j*/; /* UniPG */
-               char message[MSG_SIZE];
-               /* initialize the optional parameter list */
-               va_start(arg, fmt);
-               /* parse the format string and put the result in 'message' */
-               str_length = vsnprintf(message, MSG_SIZE, fmt, arg); /* UniPG */
-               /* deinitialize the optional parameter list */
-               va_end(arg);
+    if ((fmt != NULL) && (event_mgr != NULL)) {
+        va_list arg;
+        int str_length/*, i, j*/; /* UniPG */
+        char message[MSG_SIZE];
+        /* initialize the optional parameter list */
+        va_start(arg, fmt);
+        /* parse the format string and put the result in 'message' */
+        str_length = vsnprintf(message, MSG_SIZE, fmt, arg); /* UniPG */
+        /* deinitialize the optional parameter list */
+        va_end(arg);
 
-               /* output the message to the user program */
-    if( str_length > -1 && str_length < MSG_SIZE )
-      msg_handler(message, cinfo->client_data);
-    else return OPJ_FALSE;
-       }
+        /* output the message to the user program */
+        if (str_length > -1 && str_length < MSG_SIZE) {
+            msg_handler(message, cinfo->client_data);
+        } else {
+            return OPJ_FALSE;
+        }
+    }
 
-       return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
index 18d0cac4c2a1a3feac5049b34fa3f13f5448e035..163ab8b8a665240f5fa240cd4ff7455d55fa878e 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
 
 #include "opj_includes.h"
 
-opj_image_t* opj_image_create0(void) {
-       opj_image_t *image = (opj_image_t*)opj_calloc(1, sizeof(opj_image_t));
-       return image;
+opj_image_t* opj_image_create0(void)
+{
+    opj_image_t *image = (opj_image_t*)opj_calloc(1, sizeof(opj_image_t));
+    return image;
 }
 
-opj_image_t* OPJ_CALLCONV opj_image_create(int numcmpts, opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc) {
-       int compno;
-       opj_image_t *image = NULL;
+opj_image_t* OPJ_CALLCONV opj_image_create(int numcmpts,
+        opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc)
+{
+    int compno;
+    opj_image_t *image = NULL;
 
-       image = (opj_image_t*) opj_calloc(1, sizeof(opj_image_t));
-       if(image) {
-               image->color_space = clrspc;
-               image->numcomps = numcmpts;
-               /* allocate memory for the per-component information */
-               image->comps = (opj_image_comp_t*)opj_malloc(image->numcomps * sizeof(opj_image_comp_t));
-               if(!image->comps) {
-                       fprintf(stderr,"Unable to allocate memory for image.\n");
-                       opj_image_destroy(image);
-                       return NULL;
-               }
-               /* create the individual image components */
-               for(compno = 0; compno < numcmpts; compno++) {
-                       opj_image_comp_t *comp = &image->comps[compno];
-                       comp->dx = cmptparms[compno].dx;
-                       comp->dy = cmptparms[compno].dy;
-                       comp->w = cmptparms[compno].w;
-                       comp->h = cmptparms[compno].h;
-                       comp->x0 = cmptparms[compno].x0;
-                       comp->y0 = cmptparms[compno].y0;
-                       comp->prec = cmptparms[compno].prec;
-                       comp->bpp = cmptparms[compno].bpp;
-                       comp->sgnd = cmptparms[compno].sgnd;
-                       comp->data = (int*) opj_calloc(comp->w * comp->h, sizeof(int));
-                       if(!comp->data) {
-                               fprintf(stderr,"Unable to allocate memory for image.\n");
-                               opj_image_destroy(image);
-                               return NULL;
-                       }
-               }
-       }
+    image = (opj_image_t*) opj_calloc(1, sizeof(opj_image_t));
+    if (image) {
+        image->color_space = clrspc;
+        image->numcomps = numcmpts;
+        /* allocate memory for the per-component information */
+        image->comps = (opj_image_comp_t*)opj_malloc(image->numcomps * sizeof(
+                           opj_image_comp_t));
+        if (!image->comps) {
+            fprintf(stderr, "Unable to allocate memory for image.\n");
+            opj_image_destroy(image);
+            return NULL;
+        }
+        /* create the individual image components */
+        for (compno = 0; compno < numcmpts; compno++) {
+            opj_image_comp_t *comp = &image->comps[compno];
+            comp->dx = cmptparms[compno].dx;
+            comp->dy = cmptparms[compno].dy;
+            comp->w = cmptparms[compno].w;
+            comp->h = cmptparms[compno].h;
+            comp->x0 = cmptparms[compno].x0;
+            comp->y0 = cmptparms[compno].y0;
+            comp->prec = cmptparms[compno].prec;
+            comp->bpp = cmptparms[compno].bpp;
+            comp->sgnd = cmptparms[compno].sgnd;
+            comp->data = (int*) opj_calloc(comp->w * comp->h, sizeof(int));
+            if (!comp->data) {
+                fprintf(stderr, "Unable to allocate memory for image.\n");
+                opj_image_destroy(image);
+                return NULL;
+            }
+        }
+    }
 
-       return image;
+    return image;
 }
 
-void OPJ_CALLCONV opj_image_destroy(opj_image_t *image) {
-       int i;
-       if(image) {
-               if(image->comps) {
-                       /* image components */
-                       for(i = 0; i < image->numcomps; i++) {
-                               opj_image_comp_t *image_comp = &image->comps[i];
-                               if(image_comp->data) {
-                                       opj_free(image_comp->data);
-                               }
-                       }
-                       opj_free(image->comps);
-               }
-               opj_free(image);
-       }
+void OPJ_CALLCONV opj_image_destroy(opj_image_t *image)
+{
+    int i;
+    if (image) {
+        if (image->comps) {
+            /* image components */
+            for (i = 0; i < image->numcomps; i++) {
+                opj_image_comp_t *image_comp = &image->comps[i];
+                if (image_comp->data) {
+                    opj_free(image_comp->data);
+                }
+            }
+            opj_free(image->comps);
+        }
+        opj_free(image);
+    }
 }
 
index f31937a4dfe968e870eb612f8b0fdd43a3a7ad87..e367737b783fde70b884957b03944f3abc4061d4 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * Copyright (c) 2006-2007, Parvatha Elangovan
@@ -242,7 +242,8 @@ Add main header marker information
 @param pos byte offset of marker segment
 @param len length of marker segment
  */
-static void j2k_add_mhmarker(opj_codestream_info_t *cstr_info, unsigned short int type, int pos, int len);
+static void j2k_add_mhmarker(opj_codestream_info_t *cstr_info,
+                             unsigned short int type, int pos, int len);
 /**
 Add tile header marker information
 @param tileno tile index number
@@ -251,1525 +252,1624 @@ Add tile header marker information
 @param pos byte offset of marker segment
 @param len length of marker segment
  */
-static void j2k_add_tlmarker( int tileno, opj_codestream_info_t *cstr_info, unsigned short int type, int pos, int len);
+static void j2k_add_tlmarker(int tileno, opj_codestream_info_t *cstr_info,
+                             unsigned short int type, int pos, int len);
 
 /*@}*/
 
 /*@}*/
 
 /* ----------------------------------------------------------------------- */
-typedef struct j2k_prog_order{
-       OPJ_PROG_ORDER enum_prog;
-       char str_prog[5];
-}j2k_prog_order_t;
+typedef struct j2k_prog_order {
+    OPJ_PROG_ORDER enum_prog;
+    char str_prog[5];
+} j2k_prog_order_t;
 
 j2k_prog_order_t j2k_prog_order_list[] = {
-       {CPRL, "CPRL"},
-       {LRCP, "LRCP"},
-       {PCRL, "PCRL"},
-       {RLCP, "RLCP"},
-       {RPCL, "RPCL"},
-       {(OPJ_PROG_ORDER)-1, ""}
+    {CPRL, "CPRL"},
+    {LRCP, "LRCP"},
+    {PCRL, "PCRL"},
+    {RLCP, "RLCP"},
+    {RPCL, "RPCL"},
+    {(OPJ_PROG_ORDER) - 1, ""}
 };
 
-char *j2k_convert_progression_order(OPJ_PROG_ORDER prg_order){
-       j2k_prog_order_t *po;
-       for(po = j2k_prog_order_list; po->enum_prog != -1; po++ ){
-               if(po->enum_prog == prg_order){
-                       break;
-               }
-       }
-       return po->str_prog;
+char *j2k_convert_progression_order(OPJ_PROG_ORDER prg_order)
+{
+    j2k_prog_order_t *po;
+    for (po = j2k_prog_order_list; po->enum_prog != -1; po++) {
+        if (po->enum_prog == prg_order) {
+            break;
+        }
+    }
+    return po->str_prog;
 }
 
 /* ----------------------------------------------------------------------- */
-static int j2k_get_num_tp(opj_cp_t *cp,int pino,int tileno){
-       char *prog;
-       int i;
-       int tpnum=1,tpend=0;
-       opj_tcp_t *tcp = &cp->tcps[tileno];
-       prog = j2k_convert_progression_order(tcp->prg);
-       
-       if(cp->tp_on == 1){
-               for(i=0;i<4;i++){
-                       if(tpend!=1){
-                               if( cp->tp_flag == prog[i] ){
-                                       tpend=1;cp->tp_pos=i;
-                               }
-                               switch(prog[i]){
-                               case 'C':
-                                       tpnum= tpnum * tcp->pocs[pino].compE;
-                                       break;
-                               case 'R':
-                                       tpnum= tpnum * tcp->pocs[pino].resE;
-                                       break;
-                               case 'P':
-                                       tpnum= tpnum * tcp->pocs[pino].prcE;
-                                       break;
-                               case 'L':
-                                       tpnum= tpnum * tcp->pocs[pino].layE;
-                                       break;
-                               }
-                       }
-               }
-       }else{
-               tpnum=1;
-       }
-       return tpnum;
+static int j2k_get_num_tp(opj_cp_t *cp, int pino, int tileno)
+{
+    char *prog;
+    int i;
+    int tpnum = 1, tpend = 0;
+    opj_tcp_t *tcp = &cp->tcps[tileno];
+    prog = j2k_convert_progression_order(tcp->prg);
+
+    if (cp->tp_on == 1) {
+        for (i = 0; i < 4; i++) {
+            if (tpend != 1) {
+                if (cp->tp_flag == prog[i]) {
+                    tpend = 1;
+                    cp->tp_pos = i;
+                }
+                switch (prog[i]) {
+                case 'C':
+                    tpnum = tpnum * tcp->pocs[pino].compE;
+                    break;
+                case 'R':
+                    tpnum = tpnum * tcp->pocs[pino].resE;
+                    break;
+                case 'P':
+                    tpnum = tpnum * tcp->pocs[pino].prcE;
+                    break;
+                case 'L':
+                    tpnum = tpnum * tcp->pocs[pino].layE;
+                    break;
+                }
+            }
+        }
+    } else {
+        tpnum = 1;
+    }
+    return tpnum;
 }
 
-/**    mem allocation for TLM marker*/
-static int j2k_calculate_tp(opj_cp_t *cp,int img_numcomp,opj_image_t *image,opj_j2k_t *j2k ){
-       int pino,tileno,totnum_tp=0;
-
-       OPJ_ARG_NOT_USED(img_numcomp);
-
-       j2k->cur_totnum_tp = (int *) opj_malloc(cp->tw * cp->th * sizeof(int));
-       for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
-               int cur_totnum_tp = 0;
-               opj_tcp_t *tcp = &cp->tcps[tileno];
-               for(pino = 0; pino <= tcp->numpocs; pino++) {
-                       int tp_num=0;
-                       opj_pi_iterator_t *pi = pi_initialise_encode(image, cp, tileno,FINAL_PASS);
-                       if(!pi) { return -1;}
-                       tp_num = j2k_get_num_tp(cp,pino,tileno);
-                       totnum_tp = totnum_tp + tp_num;
-                       cur_totnum_tp = cur_totnum_tp + tp_num;
-                       pi_destroy(pi, cp, tileno);
-               }
-               j2k->cur_totnum_tp[tileno] = cur_totnum_tp;
-               /* INDEX >> */
-               if (j2k->cstr_info) {
-                       j2k->cstr_info->tile[tileno].num_tps = cur_totnum_tp;
-                       j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_malloc(cur_totnum_tp * sizeof(opj_tp_info_t));
-               }
-               /* << INDEX */
-       }
-       return totnum_tp;
+/** mem allocation for TLM marker*/
+static int j2k_calculate_tp(opj_cp_t *cp, int img_numcomp, opj_image_t *image,
+                            opj_j2k_t *j2k)
+{
+    int pino, tileno, totnum_tp = 0;
+
+    OPJ_ARG_NOT_USED(img_numcomp);
+
+    j2k->cur_totnum_tp = (int *) opj_malloc(cp->tw * cp->th * sizeof(int));
+    for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
+        int cur_totnum_tp = 0;
+        opj_tcp_t *tcp = &cp->tcps[tileno];
+        for (pino = 0; pino <= tcp->numpocs; pino++) {
+            int tp_num = 0;
+            opj_pi_iterator_t *pi = pi_initialise_encode(image, cp, tileno, FINAL_PASS);
+            if (!pi) {
+                return -1;
+            }
+            tp_num = j2k_get_num_tp(cp, pino, tileno);
+            totnum_tp = totnum_tp + tp_num;
+            cur_totnum_tp = cur_totnum_tp + tp_num;
+            pi_destroy(pi, cp, tileno);
+        }
+        j2k->cur_totnum_tp[tileno] = cur_totnum_tp;
+        /* INDEX >> */
+        if (j2k->cstr_info) {
+            j2k->cstr_info->tile[tileno].num_tps = cur_totnum_tp;
+            j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_malloc(
+                                                  cur_totnum_tp * sizeof(opj_tp_info_t));
+        }
+        /* << INDEX */
+    }
+    return totnum_tp;
 }
 
-static void j2k_write_soc(opj_j2k_t *j2k) {
-       opj_cio_t *cio = j2k->cio;
-       cio_write(cio, J2K_MS_SOC, 2);
+static void j2k_write_soc(opj_j2k_t *j2k)
+{
+    opj_cio_t *cio = j2k->cio;
+    cio_write(cio, J2K_MS_SOC, 2);
 
-       if(j2k->cstr_info)
-         j2k_add_mhmarker(j2k->cstr_info, J2K_MS_SOC, cio_tell(cio), 0);
+    if (j2k->cstr_info) {
+        j2k_add_mhmarker(j2k->cstr_info, J2K_MS_SOC, cio_tell(cio), 0);
+    }
 
-/* UniPG>> */
+    /* UniPG>> */
 #ifdef USE_JPWL
 
-       /* update markers struct */
-       j2k_add_marker(j2k->cstr_info, J2K_MS_SOC, cio_tell(cio) - 2, 2);
+    /* update markers struct */
+    j2k_add_marker(j2k->cstr_info, J2K_MS_SOC, cio_tell(cio) - 2, 2);
 #endif /* USE_JPWL */
-/* <<UniPG */
+    /* <<UniPG */
 }
 
-static void j2k_read_soc(opj_j2k_t *j2k) {     
-       j2k->state = J2K_STATE_MHSIZ;
-       /* Index */
-       if (j2k->cstr_info) {
-               j2k->cstr_info->main_head_start = cio_tell(j2k->cio) - 2;
-               j2k->cstr_info->codestream_size = cio_numbytesleft(j2k->cio) + 2 - j2k->cstr_info->main_head_start;
-       }
+static void j2k_read_soc(opj_j2k_t *j2k)
+{
+    j2k->state = J2K_STATE_MHSIZ;
+    /* Index */
+    if (j2k->cstr_info) {
+        j2k->cstr_info->main_head_start = cio_tell(j2k->cio) - 2;
+        j2k->cstr_info->codestream_size = cio_numbytesleft(j2k->cio) + 2 -
+                                          j2k->cstr_info->main_head_start;
+    }
 }
 
-static void j2k_write_siz(opj_j2k_t *j2k) {
-       int i;
-       int lenp, len;
-
-       opj_cio_t *cio = j2k->cio;
-       opj_image_t *image = j2k->image;
-       opj_cp_t *cp = j2k->cp;
-
-       cio_write(cio, J2K_MS_SIZ, 2);  /* SIZ */
-       lenp = cio_tell(cio);
-       cio_skip(cio, 2);
-       cio_write(cio, cp->rsiz, 2);                    /* Rsiz (capabilities) */
-       cio_write(cio, image->x1, 4);   /* Xsiz */
-       cio_write(cio, image->y1, 4);   /* Ysiz */
-       cio_write(cio, image->x0, 4);   /* X0siz */
-       cio_write(cio, image->y0, 4);   /* Y0siz */
-       cio_write(cio, cp->tdx, 4);             /* XTsiz */
-       cio_write(cio, cp->tdy, 4);             /* YTsiz */
-       cio_write(cio, cp->tx0, 4);             /* XT0siz */
-       cio_write(cio, cp->ty0, 4);             /* YT0siz */
-       cio_write(cio, image->numcomps, 2);     /* Csiz */
-       for (i = 0; i < image->numcomps; i++) {
-               cio_write(cio, image->comps[i].prec - 1 + (image->comps[i].sgnd << 7), 1);      /* Ssiz_i */
-               cio_write(cio, image->comps[i].dx, 1);  /* XRsiz_i */
-               cio_write(cio, image->comps[i].dy, 1);  /* YRsiz_i */
-       }
-       len = cio_tell(cio) - lenp;
-       cio_seek(cio, lenp);
-       cio_write(cio, len, 2);         /* Lsiz */
-       cio_seek(cio, lenp + len);
-       
-       if(j2k->cstr_info)
-         j2k_add_mhmarker(j2k->cstr_info, J2K_MS_SIZ, lenp, len);
+static void j2k_write_siz(opj_j2k_t *j2k)
+{
+    int i;
+    int lenp, len;
+
+    opj_cio_t *cio = j2k->cio;
+    opj_image_t *image = j2k->image;
+    opj_cp_t *cp = j2k->cp;
+
+    cio_write(cio, J2K_MS_SIZ, 2);  /* SIZ */
+    lenp = cio_tell(cio);
+    cio_skip(cio, 2);
+    cio_write(cio, cp->rsiz, 2);            /* Rsiz (capabilities) */
+    cio_write(cio, image->x1, 4);   /* Xsiz */
+    cio_write(cio, image->y1, 4);   /* Ysiz */
+    cio_write(cio, image->x0, 4);   /* X0siz */
+    cio_write(cio, image->y0, 4);   /* Y0siz */
+    cio_write(cio, cp->tdx, 4);     /* XTsiz */
+    cio_write(cio, cp->tdy, 4);     /* YTsiz */
+    cio_write(cio, cp->tx0, 4);     /* XT0siz */
+    cio_write(cio, cp->ty0, 4);     /* YT0siz */
+    cio_write(cio, image->numcomps, 2); /* Csiz */
+    for (i = 0; i < image->numcomps; i++) {
+        cio_write(cio, image->comps[i].prec - 1 + (image->comps[i].sgnd << 7),
+                  1);  /* Ssiz_i */
+        cio_write(cio, image->comps[i].dx, 1);  /* XRsiz_i */
+        cio_write(cio, image->comps[i].dy, 1);  /* YRsiz_i */
+    }
+    len = cio_tell(cio) - lenp;
+    cio_seek(cio, lenp);
+    cio_write(cio, len, 2);     /* Lsiz */
+    cio_seek(cio, lenp + len);
+
+    if (j2k->cstr_info) {
+        j2k_add_mhmarker(j2k->cstr_info, J2K_MS_SIZ, lenp, len);
+    }
 }
 
-static void j2k_read_siz(opj_j2k_t *j2k) {
-       int len, i;
-       
-       opj_cio_t *cio = j2k->cio;
-       opj_image_t *image = j2k->image;
-       opj_cp_t *cp = j2k->cp;
-       
-       len = cio_read(cio, 2);                 /* Lsiz */
-       cio_read(cio, 2);                               /* Rsiz (capabilities) */
-       image->x1 = cio_read(cio, 4);   /* Xsiz */
-       image->y1 = cio_read(cio, 4);   /* Ysiz */
-       image->x0 = cio_read(cio, 4);   /* X0siz */
-       image->y0 = cio_read(cio, 4);   /* Y0siz */
-       cp->tdx = cio_read(cio, 4);             /* XTsiz */
-       cp->tdy = cio_read(cio, 4);             /* YTsiz */
-       cp->tx0 = cio_read(cio, 4);             /* XT0siz */
-       cp->ty0 = cio_read(cio, 4);             /* YT0siz */
-       
-       if ((image->x0<0)||(image->x1<0)||(image->y0<0)||(image->y1<0)) {
-               opj_event_msg(j2k->cinfo, EVT_ERROR,
-                                                                       "%s: invalid image size (x0:%d, x1:%d, y0:%d, y1:%d)\n",
-                                                                       image->x0,image->x1,image->y0,image->y1);
-               return;
-       }
-       
-       image->numcomps = cio_read(cio, 2);     /* Csiz */
+static void j2k_read_siz(opj_j2k_t *j2k)
+{
+    int len, i;
+
+    opj_cio_t *cio = j2k->cio;
+    opj_image_t *image = j2k->image;
+    opj_cp_t *cp = j2k->cp;
+
+    len = cio_read(cio, 2);         /* Lsiz */
+    cio_read(cio, 2);               /* Rsiz (capabilities) */
+    image->x1 = cio_read(cio, 4);   /* Xsiz */
+    image->y1 = cio_read(cio, 4);   /* Ysiz */
+    image->x0 = cio_read(cio, 4);   /* X0siz */
+    image->y0 = cio_read(cio, 4);   /* Y0siz */
+    cp->tdx = cio_read(cio, 4);     /* XTsiz */
+    cp->tdy = cio_read(cio, 4);     /* YTsiz */
+    cp->tx0 = cio_read(cio, 4);     /* XT0siz */
+    cp->ty0 = cio_read(cio, 4);     /* YT0siz */
+
+    if ((image->x0 < 0) || (image->x1 < 0) || (image->y0 < 0) || (image->y1 < 0)) {
+        opj_event_msg(j2k->cinfo, EVT_ERROR,
+                      "%s: invalid image size (x0:%d, x1:%d, y0:%d, y1:%d)\n",
+                      image->x0, image->x1, image->y0, image->y1);
+        return;
+    }
 
-#ifdef USE_JPWL
-       if (j2k->cp->correct) {
-               /* if JPWL is on, we check whether TX errors have damaged
-                 too much the SIZ parameters */
-               if (!(image->x1 * image->y1)) {
-                       opj_event_msg(j2k->cinfo, EVT_ERROR,
-                               "JPWL: bad image size (%d x %d)\n",
-                               image->x1, image->y1);
-                       if (!JPWL_ASSUME || JPWL_ASSUME) {
-                               opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
-                               return;
-                       }
-               }
-               if (image->numcomps != ((len - 38) / 3)) {
-                       opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
-                               "JPWL: Csiz is %d => space in SIZ only for %d comps.!!!\n",
-                               image->numcomps, ((len - 38) / 3));
-                       if (!JPWL_ASSUME) {
-                               opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
-                               return;
-                       }
-                       /* we try to correct */
-                       opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n");
-                       if (image->numcomps < ((len - 38) / 3)) {
-                               len = 38 + 3 * image->numcomps;
-                               opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting Lsiz to %d => HYPOTHESIS!!!\n",
-                                       len);                           
-                       } else {
-                               image->numcomps = ((len - 38) / 3);
-                               opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting Csiz to %d => HYPOTHESIS!!!\n",
-                                       image->numcomps);                               
-                       }
-               }
-
-               /* update components number in the jpwl_exp_comps filed */
-               cp->exp_comps = image->numcomps;
-       }
-#endif /* USE_JPWL */
+    image->numcomps = cio_read(cio, 2); /* Csiz */
 
-  /* prevent division by zero */
-  if (!(cp->tdx * cp->tdy)) {
-    opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: invalid tile size (tdx: %d, tdy: %d)\n", cp->tdx, cp->tdy);
-    return;
-  }
-
-       image->comps = (opj_image_comp_t*) opj_calloc(image->numcomps, sizeof(opj_image_comp_t));
-       for (i = 0; i < image->numcomps; i++) {
-               int tmp, w, h;
-               tmp = cio_read(cio, 1);         /* Ssiz_i */
-               image->comps[i].prec = (tmp & 0x7f) + 1;
-               image->comps[i].sgnd = tmp >> 7;
-               image->comps[i].dx = cio_read(cio, 1);  /* XRsiz_i */
-               image->comps[i].dy = cio_read(cio, 1);  /* YRsiz_i */
-               
 #ifdef USE_JPWL
-               if (j2k->cp->correct) {
-               /* if JPWL is on, we check whether TX errors have damaged
-                       too much the SIZ parameters, again */
-                       if (!(image->comps[i].dx * image->comps[i].dy)) {
-                               opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
-                                       "JPWL: bad XRsiz_%d/YRsiz_%d (%d x %d)\n",
-                                       i, i, image->comps[i].dx, image->comps[i].dy);
-                               if (!JPWL_ASSUME) {
-                                       opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
-                                       return;
-                               }
-                               /* we try to correct */
-                               opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust them\n");
-                               if (!image->comps[i].dx) {
-                                       image->comps[i].dx = 1;
-                                       opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting XRsiz_%d to %d => HYPOTHESIS!!!\n",
-                                               i, image->comps[i].dx);
-                               }
-                               if (!image->comps[i].dy) {
-                                       image->comps[i].dy = 1;
-                                       opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting YRsiz_%d to %d => HYPOTHESIS!!!\n",
-                                               i, image->comps[i].dy);
-                               }
-                       }
-                       
-               }
+    if (j2k->cp->correct) {
+        /* if JPWL is on, we check whether TX errors have damaged
+          too much the SIZ parameters */
+        if (!(image->x1 * image->y1)) {
+            opj_event_msg(j2k->cinfo, EVT_ERROR,
+                          "JPWL: bad image size (%d x %d)\n",
+                          image->x1, image->y1);
+            if (!JPWL_ASSUME || JPWL_ASSUME) {
+                opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
+                return;
+            }
+        }
+        if (image->numcomps != ((len - 38) / 3)) {
+            opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
+                          "JPWL: Csiz is %d => space in SIZ only for %d comps.!!!\n",
+                          image->numcomps, ((len - 38) / 3));
+            if (!JPWL_ASSUME) {
+                opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
+                return;
+            }
+            /* we try to correct */
+            opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n");
+            if (image->numcomps < ((len - 38) / 3)) {
+                len = 38 + 3 * image->numcomps;
+                opj_event_msg(j2k->cinfo, EVT_WARNING,
+                              "- setting Lsiz to %d => HYPOTHESIS!!!\n",
+                              len);
+            } else {
+                image->numcomps = ((len - 38) / 3);
+                opj_event_msg(j2k->cinfo, EVT_WARNING,
+                              "- setting Csiz to %d => HYPOTHESIS!!!\n",
+                              image->numcomps);
+            }
+        }
+
+        /* update components number in the jpwl_exp_comps filed */
+        cp->exp_comps = image->numcomps;
+    }
 #endif /* USE_JPWL */
 
     /* prevent division by zero */
-    if (!(image->comps[i].dx * image->comps[i].dy)) {
-      opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: invalid component size (dx: %d, dy: %d)\n", image->comps[i].dx, image->comps[i].dy);
-      return;
+    if (!(cp->tdx * cp->tdy)) {
+        opj_event_msg(j2k->cinfo, EVT_ERROR,
+                      "JPWL: invalid tile size (tdx: %d, tdy: %d)\n", cp->tdx, cp->tdy);
+        return;
     }
 
-               /* TODO: unused ? */
-               w = int_ceildiv(image->x1 - image->x0, image->comps[i].dx);
-               h = int_ceildiv(image->y1 - image->y0, image->comps[i].dy);
+    image->comps = (opj_image_comp_t*) opj_calloc(image->numcomps,
+                   sizeof(opj_image_comp_t));
+    for (i = 0; i < image->numcomps; i++) {
+        int tmp, w, h;
+        tmp = cio_read(cio, 1);     /* Ssiz_i */
+        image->comps[i].prec = (tmp & 0x7f) + 1;
+        image->comps[i].sgnd = tmp >> 7;
+        image->comps[i].dx = cio_read(cio, 1);  /* XRsiz_i */
+        image->comps[i].dy = cio_read(cio, 1);  /* YRsiz_i */
+
+#ifdef USE_JPWL
+        if (j2k->cp->correct) {
+            /* if JPWL is on, we check whether TX errors have damaged
+                too much the SIZ parameters, again */
+            if (!(image->comps[i].dx * image->comps[i].dy)) {
+                opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
+                              "JPWL: bad XRsiz_%d/YRsiz_%d (%d x %d)\n",
+                              i, i, image->comps[i].dx, image->comps[i].dy);
+                if (!JPWL_ASSUME) {
+                    opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
+                    return;
+                }
+                /* we try to correct */
+                opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust them\n");
+                if (!image->comps[i].dx) {
+                    image->comps[i].dx = 1;
+                    opj_event_msg(j2k->cinfo, EVT_WARNING,
+                                  "- setting XRsiz_%d to %d => HYPOTHESIS!!!\n",
+                                  i, image->comps[i].dx);
+                }
+                if (!image->comps[i].dy) {
+                    image->comps[i].dy = 1;
+                    opj_event_msg(j2k->cinfo, EVT_WARNING,
+                                  "- setting YRsiz_%d to %d => HYPOTHESIS!!!\n",
+                                  i, image->comps[i].dy);
+                }
+            }
+
+        }
+#endif /* USE_JPWL */
+
+        /* prevent division by zero */
+        if (!(image->comps[i].dx * image->comps[i].dy)) {
+            opj_event_msg(j2k->cinfo, EVT_ERROR,
+                          "JPWL: invalid component size (dx: %d, dy: %d)\n", image->comps[i].dx,
+                          image->comps[i].dy);
+            return;
+        }
+
+        /* TODO: unused ? */
+        w = int_ceildiv(image->x1 - image->x0, image->comps[i].dx);
+        h = int_ceildiv(image->y1 - image->y0, image->comps[i].dy);
 
-               image->comps[i].resno_decoded = 0;      /* number of resolution decoded */
-               image->comps[i].factor = cp->reduce; /* reducing factor per component */
-       }
-       
-       cp->tw = int_ceildiv(image->x1 - cp->tx0, cp->tdx);
-       cp->th = int_ceildiv(image->y1 - cp->ty0, cp->tdy);
+        image->comps[i].resno_decoded = 0;  /* number of resolution decoded */
+        image->comps[i].factor = cp->reduce; /* reducing factor per component */
+    }
+
+    cp->tw = int_ceildiv(image->x1 - cp->tx0, cp->tdx);
+    cp->th = int_ceildiv(image->y1 - cp->ty0, cp->tdy);
 
 #ifdef USE_JPWL
-       if (j2k->cp->correct) {
-               /* if JPWL is on, we check whether TX errors have damaged
-                 too much the SIZ parameters */
-               if ((cp->tw < 1) || (cp->th < 1) || (cp->tw > cp->max_tiles) || (cp->th > cp->max_tiles)) {
-                       opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
-                               "JPWL: bad number of tiles (%d x %d)\n",
-                               cp->tw, cp->th);
-                       if (!JPWL_ASSUME) {
-                               opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
-                               return;
-                       }
-                       /* we try to correct */
-                       opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust them\n");
-                       if (cp->tw < 1) {
-                               cp->tw= 1;
-                               opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting %d tiles in x => HYPOTHESIS!!!\n",
-                                       cp->tw);
-                       }
-                       if (cp->tw > cp->max_tiles) {
-                               cp->tw= 1;
-                               opj_event_msg(j2k->cinfo, EVT_WARNING, "- too large x, increase expectance of %d\n"
-                                       "- setting %d tiles in x => HYPOTHESIS!!!\n",
-                                       cp->max_tiles, cp->tw);
-                       }
-                       if (cp->th < 1) {
-                               cp->th= 1;
-                               opj_event_msg(j2k->cinfo, EVT_WARNING, "- setting %d tiles in y => HYPOTHESIS!!!\n",
-                                       cp->th);
-                       }
-                       if (cp->th > cp->max_tiles) {
-                               cp->th= 1;
-                               opj_event_msg(j2k->cinfo, EVT_WARNING, "- too large y, increase expectance of %d to continue\n",
-                                       "- setting %d tiles in y => HYPOTHESIS!!!\n",
-                                       cp->max_tiles, cp->th);
-                       }
-               }
-       }
+    if (j2k->cp->correct) {
+        /* if JPWL is on, we check whether TX errors have damaged
+          too much the SIZ parameters */
+        if ((cp->tw < 1) || (cp->th < 1) || (cp->tw > cp->max_tiles) ||
+                (cp->th > cp->max_tiles)) {
+            opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
+                          "JPWL: bad number of tiles (%d x %d)\n",
+                          cp->tw, cp->th);
+            if (!JPWL_ASSUME) {
+                opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
+                return;
+            }
+            /* we try to correct */
+            opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust them\n");
+            if (cp->tw < 1) {
+                cp->tw = 1;
+                opj_event_msg(j2k->cinfo, EVT_WARNING,
+                              "- setting %d tiles in x => HYPOTHESIS!!!\n",
+                              cp->tw);
+            }
+            if (cp->tw > cp->max_tiles) {
+                cp->tw = 1;
+                opj_event_msg(j2k->cinfo, EVT_WARNING,
+                              "- too large x, increase expectance of %d\n"
+                              "- setting %d tiles in x => HYPOTHESIS!!!\n",
+                              cp->max_tiles, cp->tw);
+            }
+            if (cp->th < 1) {
+                cp->th = 1;
+                opj_event_msg(j2k->cinfo, EVT_WARNING,
+                              "- setting %d tiles in y => HYPOTHESIS!!!\n",
+                              cp->th);
+            }
+            if (cp->th > cp->max_tiles) {
+                cp->th = 1;
+                opj_event_msg(j2k->cinfo, EVT_WARNING,
+                              "- too large y, increase expectance of %d to continue\n",
+                              "- setting %d tiles in y => HYPOTHESIS!!!\n",
+                              cp->max_tiles, cp->th);
+            }
+        }
+    }
 #endif /* USE_JPWL */
 
-       cp->tcps = (opj_tcp_t*) opj_calloc(cp->tw * cp->th, sizeof(opj_tcp_t));
-    if (cp->tcps == NULL)
-    {
+    cp->tcps = (opj_tcp_t*) opj_calloc(cp->tw * cp->th, sizeof(opj_tcp_t));
+    if (cp->tcps == NULL) {
         opj_event_msg(j2k->cinfo, EVT_ERROR, "Out of memory\n");
         return;
     }
-       cp->tileno = (int*) opj_malloc(cp->tw * cp->th * sizeof(int));
-    if (cp->tileno == NULL)
-    {
+    cp->tileno = (int*) opj_malloc(cp->tw * cp->th * sizeof(int));
+    if (cp->tileno == NULL) {
         opj_event_msg(j2k->cinfo, EVT_ERROR, "Out of memory\n");
         return;
     }
-       cp->tileno_size = 0;
-       
+    cp->tileno_size = 0;
+
 #ifdef USE_JPWL
-       if (j2k->cp->correct) {
-               if (!cp->tcps) {
-                       opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
-                               "JPWL: could not alloc tcps field of cp\n");
-                       if (!JPWL_ASSUME || JPWL_ASSUME) {
-                               opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
-                               return;
-                       }
-               }
-       }
+    if (j2k->cp->correct) {
+        if (!cp->tcps) {
+            opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
+                          "JPWL: could not alloc tcps field of cp\n");
+            if (!JPWL_ASSUME || JPWL_ASSUME) {
+                opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
+                return;
+            }
+        }
+    }
 #endif /* USE_JPWL */
 
-       for (i = 0; i < cp->tw * cp->th; i++) {
-               cp->tcps[i].POC = 0;
-               cp->tcps[i].numpocs = 0;
-               cp->tcps[i].first = 1;
-       }
-       
-       /* Initialization for PPM marker */
-       cp->ppm = 0;
-       cp->ppm_data = NULL;
-       cp->ppm_data_first = NULL;
-       cp->ppm_previous = 0;
-       cp->ppm_store = 0;
-
-       j2k->default_tcp->tccps = (opj_tccp_t*) opj_calloc(image->numcomps, sizeof(opj_tccp_t));
-       for (i = 0; i < cp->tw * cp->th; i++) {
-               cp->tcps[i].tccps = (opj_tccp_t*) opj_malloc(image->numcomps * sizeof(opj_tccp_t));
-       }       
-       j2k->tile_data = (unsigned char**) opj_calloc(cp->tw * cp->th, sizeof(unsigned char*));
-       j2k->tile_len = (int*) opj_calloc(cp->tw * cp->th, sizeof(int));
-       j2k->state = J2K_STATE_MH;
-
-       /* Index */
-       if (j2k->cstr_info) {
-               opj_codestream_info_t *cstr_info = j2k->cstr_info;
-               cstr_info->image_w = image->x1 - image->x0;
-               cstr_info->image_h = image->y1 - image->y0;
-               cstr_info->numcomps = image->numcomps;
-               cstr_info->tw = cp->tw;
-               cstr_info->th = cp->th;
-               cstr_info->tile_x = cp->tdx;    
-               cstr_info->tile_y = cp->tdy;    
-               cstr_info->tile_Ox = cp->tx0;   
-               cstr_info->tile_Oy = cp->ty0;                   
-               cstr_info->tile = (opj_tile_info_t*) opj_calloc(cp->tw * cp->th, sizeof(opj_tile_info_t));              
-       }
+    for (i = 0; i < cp->tw * cp->th; i++) {
+        cp->tcps[i].POC = 0;
+        cp->tcps[i].numpocs = 0;
+        cp->tcps[i].first = 1;
+    }
+
+    /* Initialization for PPM marker */
+    cp->ppm = 0;
+    cp->ppm_data = NULL;
+    cp->ppm_data_first = NULL;
+    cp->ppm_previous = 0;
+    cp->ppm_store = 0;
+
+    j2k->default_tcp->tccps = (opj_tccp_t*) opj_calloc(image->numcomps,
+                              sizeof(opj_tccp_t));
+    for (i = 0; i < cp->tw * cp->th; i++) {
+        cp->tcps[i].tccps = (opj_tccp_t*) opj_malloc(image->numcomps * sizeof(
+                                opj_tccp_t));
+    }
+    j2k->tile_data = (unsigned char**) opj_calloc(cp->tw * cp->th,
+                     sizeof(unsigned char*));
+    j2k->tile_len = (int*) opj_calloc(cp->tw * cp->th, sizeof(int));
+    j2k->state = J2K_STATE_MH;
+
+    /* Index */
+    if (j2k->cstr_info) {
+        opj_codestream_info_t *cstr_info = j2k->cstr_info;
+        cstr_info->image_w = image->x1 - image->x0;
+        cstr_info->image_h = image->y1 - image->y0;
+        cstr_info->numcomps = image->numcomps;
+        cstr_info->tw = cp->tw;
+        cstr_info->th = cp->th;
+        cstr_info->tile_x = cp->tdx;
+        cstr_info->tile_y = cp->tdy;
+        cstr_info->tile_Ox = cp->tx0;
+        cstr_info->tile_Oy = cp->ty0;
+        cstr_info->tile = (opj_tile_info_t*) opj_calloc(cp->tw * cp->th,
+                          sizeof(opj_tile_info_t));
+    }
 }
 
-static void j2k_write_com(opj_j2k_t *j2k) {
-       unsigned int i;
-       int lenp, len;
-
-       if(j2k->cp->comment) {
-               opj_cio_t *cio = j2k->cio;
-               char *comment = j2k->cp->comment;
-
-               cio_write(cio, J2K_MS_COM, 2);
-               lenp = cio_tell(cio);
-               cio_skip(cio, 2);
-               cio_write(cio, 1, 2);           /* General use (IS 8859-15:1999 (Latin) values) */
-               for (i = 0; i < strlen(comment); i++) {
-                       cio_write(cio, comment[i], 1);
-               }
-               len = cio_tell(cio) - lenp;
-               cio_seek(cio, lenp);
-               cio_write(cio, len, 2);
-               cio_seek(cio, lenp + len);
-
-               
-               if(j2k->cstr_info)
-                 j2k_add_mhmarker(j2k->cstr_info, J2K_MS_COM, lenp, len);
-
-       }
+static void j2k_write_com(opj_j2k_t *j2k)
+{
+    unsigned int i;
+    int lenp, len;
+
+    if (j2k->cp->comment) {
+        opj_cio_t *cio = j2k->cio;
+        char *comment = j2k->cp->comment;
+
+        cio_write(cio, J2K_MS_COM, 2);
+        lenp = cio_tell(cio);
+        cio_skip(cio, 2);
+        cio_write(cio, 1, 2);       /* General use (IS 8859-15:1999 (Latin) values) */
+        for (i = 0; i < strlen(comment); i++) {
+            cio_write(cio, comment[i], 1);
+        }
+        len = cio_tell(cio) - lenp;
+        cio_seek(cio, lenp);
+        cio_write(cio, len, 2);
+        cio_seek(cio, lenp + len);
+
+
+        if (j2k->cstr_info) {
+            j2k_add_mhmarker(j2k->cstr_info, J2K_MS_COM, lenp, len);
+        }
+
+    }
 }
 
-static void j2k_read_com(opj_j2k_t *j2k) {
-       int len;
-       
-       opj_cio_t *cio = j2k->cio;
+static void j2k_read_com(opj_j2k_t *j2k)
+{
+    int len;
+
+    opj_cio_t *cio = j2k->cio;
 
-       len = cio_read(cio, 2);
-       cio_skip(cio, len - 2);  
+    len = cio_read(cio, 2);
+    cio_skip(cio, len - 2);
 }
 
-static void j2k_write_cox(opj_j2k_t *j2k, int compno) {
-       int i;
-
-       opj_cp_t *cp = j2k->cp;
-       opj_tcp_t *tcp = &cp->tcps[j2k->curtileno];
-       opj_tccp_t *tccp = &tcp->tccps[compno];
-       opj_cio_t *cio = j2k->cio;
-       
-       cio_write(cio, tccp->numresolutions - 1, 1);    /* SPcox (D) */
-       cio_write(cio, tccp->cblkw - 2, 1);                             /* SPcox (E) */
-       cio_write(cio, tccp->cblkh - 2, 1);                             /* SPcox (F) */
-       cio_write(cio, tccp->cblksty, 1);                               /* SPcox (G) */
-       cio_write(cio, tccp->qmfbid, 1);                                /* SPcox (H) */
-       
-       if (tccp->csty & J2K_CCP_CSTY_PRT) {
-               for (i = 0; i < tccp->numresolutions; i++) {
-                       cio_write(cio, tccp->prcw[i] + (tccp->prch[i] << 4), 1);        /* SPcox (I_i) */
-               }
-       }
+static void j2k_write_cox(opj_j2k_t *j2k, int compno)
+{
+    int i;
+
+    opj_cp_t *cp = j2k->cp;
+    opj_tcp_t *tcp = &cp->tcps[j2k->curtileno];
+    opj_tccp_t *tccp = &tcp->tccps[compno];
+    opj_cio_t *cio = j2k->cio;
+
+    cio_write(cio, tccp->numresolutions - 1, 1);    /* SPcox (D) */
+    cio_write(cio, tccp->cblkw - 2, 1);             /* SPcox (E) */
+    cio_write(cio, tccp->cblkh - 2, 1);             /* SPcox (F) */
+    cio_write(cio, tccp->cblksty, 1);               /* SPcox (G) */
+    cio_write(cio, tccp->qmfbid, 1);                /* SPcox (H) */
+
+    if (tccp->csty & J2K_CCP_CSTY_PRT) {
+        for (i = 0; i < tccp->numresolutions; i++) {
+            cio_write(cio, tccp->prcw[i] + (tccp->prch[i] << 4), 1);    /* SPcox (I_i) */
+        }
+    }
 }
 
-static void j2k_read_cox(opj_j2k_t *j2k, int compno) {
-       int i;
-
-       opj_cp_t *cp = j2k->cp;
-       opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] : j2k->default_tcp;
-       opj_tccp_t *tccp = &tcp->tccps[compno];
-       opj_cio_t *cio = j2k->cio;
-
-       tccp->numresolutions = cio_read(cio, 1) + 1;    /* SPcox (D) */
-
-       /* If user wants to remove more resolutions than the codestream contains, return error*/
-       if (cp->reduce >= tccp->numresolutions) {
-               opj_event_msg(j2k->cinfo, EVT_ERROR, "Error decoding component %d.\nThe number of resolutions to remove is higher than the number "
-                                       "of resolutions of this component\nModify the cp_reduce parameter.\n\n", compno);
-               j2k->state |= J2K_STATE_ERR;
-       }
-  if( tccp->numresolutions > J2K_MAXRLVLS ) {
-    opj_event_msg(j2k->cinfo, EVT_ERROR, "Error decoding component %d.\nThe number of resolutions is too big: %d vs max= %d. Truncating.\n\n",
-      compno, tccp->numresolutions, J2K_MAXRLVLS);
-               j2k->state |= J2K_STATE_ERR;
-    tccp->numresolutions = J2K_MAXRLVLS;
- }
-
-       tccp->cblkw = cio_read(cio, 1) + 2;     /* SPcox (E) */
-       tccp->cblkh = cio_read(cio, 1) + 2;     /* SPcox (F) */
-       tccp->cblksty = cio_read(cio, 1);       /* SPcox (G) */
-       tccp->qmfbid = cio_read(cio, 1);        /* SPcox (H) */
-       if (tccp->csty & J2K_CP_CSTY_PRT) {
-               for (i = 0; i < tccp->numresolutions; i++) {
-                       int tmp = cio_read(cio, 1);     /* SPcox (I_i) */
-                       tccp->prcw[i] = tmp & 0xf;
-                       tccp->prch[i] = tmp >> 4;
-               }
-       }
-
-       /* INDEX >> */
-       if(j2k->cstr_info && compno == 0) {
-               for (i = 0; i < tccp->numresolutions; i++) {
-                       if (tccp->csty & J2K_CP_CSTY_PRT) {
-                               j2k->cstr_info->tile[j2k->curtileno].pdx[i] = tccp->prcw[i];
-                               j2k->cstr_info->tile[j2k->curtileno].pdy[i] = tccp->prch[i];
-                       }
-                       else {
-                               j2k->cstr_info->tile[j2k->curtileno].pdx[i] = 15;
-                               j2k->cstr_info->tile[j2k->curtileno].pdx[i] = 15;
-                       }
-               }
-       }
-       /* << INDEX */
+static void j2k_read_cox(opj_j2k_t *j2k, int compno)
+{
+    int i;
+
+    opj_cp_t *cp = j2k->cp;
+    opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] :
+                     j2k->default_tcp;
+    opj_tccp_t *tccp = &tcp->tccps[compno];
+    opj_cio_t *cio = j2k->cio;
+
+    tccp->numresolutions = cio_read(cio, 1) + 1;    /* SPcox (D) */
+
+    /* If user wants to remove more resolutions than the codestream contains, return error*/
+    if (cp->reduce >= tccp->numresolutions) {
+        opj_event_msg(j2k->cinfo, EVT_ERROR,
+                      "Error decoding component %d.\nThe number of resolutions to remove is higher than the number "
+                      "of resolutions of this component\nModify the cp_reduce parameter.\n\n",
+                      compno);
+        j2k->state |= J2K_STATE_ERR;
+    }
+    if (tccp->numresolutions > J2K_MAXRLVLS) {
+        opj_event_msg(j2k->cinfo, EVT_ERROR,
+                      "Error decoding component %d.\nThe number of resolutions is too big: %d vs max= %d. Truncating.\n\n",
+                      compno, tccp->numresolutions, J2K_MAXRLVLS);
+        j2k->state |= J2K_STATE_ERR;
+        tccp->numresolutions = J2K_MAXRLVLS;
+    }
+
+    tccp->cblkw = cio_read(cio, 1) + 2; /* SPcox (E) */
+    tccp->cblkh = cio_read(cio, 1) + 2; /* SPcox (F) */
+    tccp->cblksty = cio_read(cio, 1);   /* SPcox (G) */
+    tccp->qmfbid = cio_read(cio, 1);    /* SPcox (H) */
+    if (tccp->csty & J2K_CP_CSTY_PRT) {
+        for (i = 0; i < tccp->numresolutions; i++) {
+            int tmp = cio_read(cio, 1); /* SPcox (I_i) */
+            tccp->prcw[i] = tmp & 0xf;
+            tccp->prch[i] = tmp >> 4;
+        }
+    }
+
+    /* INDEX >> */
+    if (j2k->cstr_info && compno == 0) {
+        for (i = 0; i < tccp->numresolutions; i++) {
+            if (tccp->csty & J2K_CP_CSTY_PRT) {
+                j2k->cstr_info->tile[j2k->curtileno].pdx[i] = tccp->prcw[i];
+                j2k->cstr_info->tile[j2k->curtileno].pdy[i] = tccp->prch[i];
+            } else {
+                j2k->cstr_info->tile[j2k->curtileno].pdx[i] = 15;
+                j2k->cstr_info->tile[j2k->curtileno].pdx[i] = 15;
+            }
+        }
+    }
+    /* << INDEX */
 }
 
-static void j2k_write_cod(opj_j2k_t *j2k) {
-       opj_cp_t *cp = NULL;
-       opj_tcp_t *tcp = NULL;
-       int lenp, len;
-
-       opj_cio_t *cio = j2k->cio;
-       
-       cio_write(cio, J2K_MS_COD, 2);  /* COD */
-       
-       lenp = cio_tell(cio);
-       cio_skip(cio, 2);
-       
-       cp = j2k->cp;
-       tcp = &cp->tcps[j2k->curtileno];
-
-       cio_write(cio, tcp->csty, 1);           /* Scod */
-       cio_write(cio, tcp->prg, 1);            /* SGcod (A) */
-       cio_write(cio, tcp->numlayers, 2);      /* SGcod (B) */
-       cio_write(cio, tcp->mct, 1);            /* SGcod (C) */
-       
-       j2k_write_cox(j2k, 0);
-       len = cio_tell(cio) - lenp;
-       cio_seek(cio, lenp);
-       cio_write(cio, len, 2);         /* Lcod */
-       cio_seek(cio, lenp + len);
-
-       if(j2k->cstr_info)
-         j2k_add_mhmarker(j2k->cstr_info, J2K_MS_COD, lenp, len);
+static void j2k_write_cod(opj_j2k_t *j2k)
+{
+    opj_cp_t *cp = NULL;
+    opj_tcp_t *tcp = NULL;
+    int lenp, len;
+
+    opj_cio_t *cio = j2k->cio;
+
+    cio_write(cio, J2K_MS_COD, 2);  /* COD */
+
+    lenp = cio_tell(cio);
+    cio_skip(cio, 2);
+
+    cp = j2k->cp;
+    tcp = &cp->tcps[j2k->curtileno];
+
+    cio_write(cio, tcp->csty, 1);       /* Scod */
+    cio_write(cio, tcp->prg, 1);        /* SGcod (A) */
+    cio_write(cio, tcp->numlayers, 2);  /* SGcod (B) */
+    cio_write(cio, tcp->mct, 1);        /* SGcod (C) */
+
+    j2k_write_cox(j2k, 0);
+    len = cio_tell(cio) - lenp;
+    cio_seek(cio, lenp);
+    cio_write(cio, len, 2);     /* Lcod */
+    cio_seek(cio, lenp + len);
+
+    if (j2k->cstr_info) {
+        j2k_add_mhmarker(j2k->cstr_info, J2K_MS_COD, lenp, len);
+    }
 
 }
 
-static void j2k_read_cod(opj_j2k_t *j2k) {
-       int len, i, pos;
-       
-       opj_cio_t *cio = j2k->cio;
-       opj_cp_t *cp = j2k->cp;
-       opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] : j2k->default_tcp;
-       opj_image_t *image = j2k->image;
-       
-       len = cio_read(cio, 2);                         /* Lcod */
-       tcp->csty = cio_read(cio, 1);           /* Scod */
-       tcp->prg = (OPJ_PROG_ORDER)cio_read(cio, 1);            /* SGcod (A) */
-       tcp->numlayers = cio_read(cio, 2);      /* SGcod (B) */
-       tcp->mct = cio_read(cio, 1);            /* SGcod (C) */
-       
-       pos = cio_tell(cio);
-       for (i = 0; i < image->numcomps; i++) {
-               tcp->tccps[i].csty = tcp->csty & J2K_CP_CSTY_PRT;
-               cio_seek(cio, pos);
-               j2k_read_cox(j2k, i);
-       }
-
-       /* Index */
-       if (j2k->cstr_info) {
-               opj_codestream_info_t *cstr_info = j2k->cstr_info;
-               cstr_info->prog = tcp->prg;
-               cstr_info->numlayers = tcp->numlayers;
-               cstr_info->numdecompos = (int*) opj_malloc(image->numcomps * sizeof(int));
-               for (i = 0; i < image->numcomps; i++) {
-                       cstr_info->numdecompos[i] = tcp->tccps[i].numresolutions - 1;
-               }
-       }
+static void j2k_read_cod(opj_j2k_t *j2k)
+{
+    int len, i, pos;
+
+    opj_cio_t *cio = j2k->cio;
+    opj_cp_t *cp = j2k->cp;
+    opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] :
+                     j2k->default_tcp;
+    opj_image_t *image = j2k->image;
+
+    len = cio_read(cio, 2);             /* Lcod */
+    tcp->csty = cio_read(cio, 1);       /* Scod */
+    tcp->prg = (OPJ_PROG_ORDER)cio_read(cio, 1);        /* SGcod (A) */
+    tcp->numlayers = cio_read(cio, 2);  /* SGcod (B) */
+    tcp->mct = cio_read(cio, 1);        /* SGcod (C) */
+
+    pos = cio_tell(cio);
+    for (i = 0; i < image->numcomps; i++) {
+        tcp->tccps[i].csty = tcp->csty & J2K_CP_CSTY_PRT;
+        cio_seek(cio, pos);
+        j2k_read_cox(j2k, i);
+    }
+
+    /* Index */
+    if (j2k->cstr_info) {
+        opj_codestream_info_t *cstr_info = j2k->cstr_info;
+        cstr_info->prog = tcp->prg;
+        cstr_info->numlayers = tcp->numlayers;
+        cstr_info->numdecompos = (int*) opj_malloc(image->numcomps * sizeof(int));
+        for (i = 0; i < image->numcomps; i++) {
+            cstr_info->numdecompos[i] = tcp->tccps[i].numresolutions - 1;
+        }
+    }
 }
 
-static void j2k_write_coc(opj_j2k_t *j2k, int compno) {
-       int lenp, len;
-
-       opj_cp_t *cp = j2k->cp;
-       opj_tcp_t *tcp = &cp->tcps[j2k->curtileno];
-       opj_image_t *image = j2k->image;
-       opj_cio_t *cio = j2k->cio;
-       
-       cio_write(cio, J2K_MS_COC, 2);  /* COC */
-       lenp = cio_tell(cio);
-       cio_skip(cio, 2);
-       cio_write(cio, compno, image->numcomps <= 256 ? 1 : 2); /* Ccoc */
-       cio_write(cio, tcp->tccps[compno].csty, 1);     /* Scoc */
-       j2k_write_cox(j2k, compno);
-       len = cio_tell(cio) - lenp;
-       cio_seek(cio, lenp);
-       cio_write(cio, len, 2);                 /* Lcoc */
-       cio_seek(cio, lenp + len);
+static void j2k_write_coc(opj_j2k_t *j2k, int compno)
+{
+    int lenp, len;
+
+    opj_cp_t *cp = j2k->cp;
+    opj_tcp_t *tcp = &cp->tcps[j2k->curtileno];
+    opj_image_t *image = j2k->image;
+    opj_cio_t *cio = j2k->cio;
+
+    cio_write(cio, J2K_MS_COC, 2);  /* COC */
+    lenp = cio_tell(cio);
+    cio_skip(cio, 2);
+    cio_write(cio, compno, image->numcomps <= 256 ? 1 : 2); /* Ccoc */
+    cio_write(cio, tcp->tccps[compno].csty, 1); /* Scoc */
+    j2k_write_cox(j2k, compno);
+    len = cio_tell(cio) - lenp;
+    cio_seek(cio, lenp);
+    cio_write(cio, len, 2);         /* Lcoc */
+    cio_seek(cio, lenp + len);
 }
 
-static void j2k_read_coc(opj_j2k_t *j2k) {
-       int len, compno;
-
-       opj_cp_t *cp = j2k->cp;
-       opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] : j2k->default_tcp;
-       opj_image_t *image = j2k->image;
-       opj_cio_t *cio = j2k->cio;
-       
-       len = cio_read(cio, 2);         /* Lcoc */
-       compno = cio_read(cio, image->numcomps <= 256 ? 1 : 2); /* Ccoc */
-  if (compno >= image->numcomps) {
-    opj_event_msg(j2k->cinfo, EVT_ERROR,
-      "bad component number in COC (%d out of a maximum of %d)\n",
-      compno, image->numcomps);
-    return;
-  }
-       tcp->tccps[compno].csty = cio_read(cio, 1);     /* Scoc */
-       j2k_read_cox(j2k, compno);
+static void j2k_read_coc(opj_j2k_t *j2k)
+{
+    int len, compno;
+
+    opj_cp_t *cp = j2k->cp;
+    opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] :
+                     j2k->default_tcp;
+    opj_image_t *image = j2k->image;
+    opj_cio_t *cio = j2k->cio;
+
+    len = cio_read(cio, 2);     /* Lcoc */
+    compno = cio_read(cio, image->numcomps <= 256 ? 1 : 2); /* Ccoc */
+    if (compno >= image->numcomps) {
+        opj_event_msg(j2k->cinfo, EVT_ERROR,
+                      "bad component number in COC (%d out of a maximum of %d)\n",
+                      compno, image->numcomps);
+        return;
+    }
+    tcp->tccps[compno].csty = cio_read(cio, 1); /* Scoc */
+    j2k_read_cox(j2k, compno);
 }
 
-static void j2k_write_qcx(opj_j2k_t *j2k, int compno) {
-       int bandno, numbands;
-       int expn, mant;
-       
-       opj_cp_t *cp = j2k->cp;
-       opj_tcp_t *tcp = &cp->tcps[j2k->curtileno];
-       opj_tccp_t *tccp = &tcp->tccps[compno];
-       opj_cio_t *cio = j2k->cio;
-       
-       cio_write(cio, tccp->qntsty + (tccp->numgbits << 5), 1);        /* Sqcx */
-       numbands = tccp->qntsty == J2K_CCP_QNTSTY_SIQNT ? 1 : tccp->numresolutions * 3 - 2;
-       
-       for (bandno = 0; bandno < numbands; bandno++) {
-               expn = tccp->stepsizes[bandno].expn;
-               mant = tccp->stepsizes[bandno].mant;
-               
-               if (tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) {
-                       cio_write(cio, expn << 3, 1);   /* SPqcx_i */
-               } else {
-                       cio_write(cio, (expn << 11) + mant, 2); /* SPqcx_i */
-               }
-       }
+static void j2k_write_qcx(opj_j2k_t *j2k, int compno)
+{
+    int bandno, numbands;
+    int expn, mant;
+
+    opj_cp_t *cp = j2k->cp;
+    opj_tcp_t *tcp = &cp->tcps[j2k->curtileno];
+    opj_tccp_t *tccp = &tcp->tccps[compno];
+    opj_cio_t *cio = j2k->cio;
+
+    cio_write(cio, tccp->qntsty + (tccp->numgbits << 5), 1);    /* Sqcx */
+    numbands = tccp->qntsty == J2K_CCP_QNTSTY_SIQNT ? 1 : tccp->numresolutions * 3 -
+               2;
+
+    for (bandno = 0; bandno < numbands; bandno++) {
+        expn = tccp->stepsizes[bandno].expn;
+        mant = tccp->stepsizes[bandno].mant;
+
+        if (tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) {
+            cio_write(cio, expn << 3, 1);   /* SPqcx_i */
+        } else {
+            cio_write(cio, (expn << 11) + mant, 2); /* SPqcx_i */
+        }
+    }
 }
 
-static void j2k_read_qcx(opj_j2k_t *j2k, int compno, int len) {
-       int tmp;
-       int bandno, numbands;
+static void j2k_read_qcx(opj_j2k_t *j2k, int compno, int len)
+{
+    int tmp;
+    int bandno, numbands;
 
-       opj_cp_t *cp = j2k->cp;
-       opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] : j2k->default_tcp;
-       opj_tccp_t *tccp = &tcp->tccps[compno];
-       opj_cio_t *cio = j2k->cio;
+    opj_cp_t *cp = j2k->cp;
+    opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] :
+                     j2k->default_tcp;
+    opj_tccp_t *tccp = &tcp->tccps[compno];
+    opj_cio_t *cio = j2k->cio;
 
-       tmp = cio_read(cio, 1);         /* Sqcx */
-       tccp->qntsty = tmp & 0x1f;
-       tccp->numgbits = tmp >> 5;
-       numbands = (tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) ? 
-               1 : ((tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) ? len - 1 : (len - 1) / 2);
+    tmp = cio_read(cio, 1);     /* Sqcx */
+    tccp->qntsty = tmp & 0x1f;
+    tccp->numgbits = tmp >> 5;
+    numbands = (tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) ?
+               1 : ((tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) ? len - 1 : (len - 1) / 2);
 
 #ifdef USE_JPWL
-       if (j2k->cp->correct) {
-
-               /* if JPWL is on, we check whether there are too many subbands */
-               if ((numbands < 0) || (numbands >= J2K_MAXBANDS)) {
-                       opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
-                               "JPWL: bad number of subbands in Sqcx (%d)\n",
-                               numbands);
-                       if (!JPWL_ASSUME) {
-                               opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
-                               return;
-                       }
-                       /* we try to correct */
-                       numbands = 1;
-                       opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust them\n"
-                               "- setting number of bands to %d => HYPOTHESIS!!!\n",
-                               numbands);
-               };
-
-       };
+    if (j2k->cp->correct) {
+
+        /* if JPWL is on, we check whether there are too many subbands */
+        if ((numbands < 0) || (numbands >= J2K_MAXBANDS)) {
+            opj_event_msg(j2k->cinfo, JPWL_ASSUME ? EVT_WARNING : EVT_ERROR,
+                          "JPWL: bad number of subbands in Sqcx (%d)\n",
+                          numbands);
+            if (!JPWL_ASSUME) {
+                opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
+                return;
+            }
+            /* we try to correct */
+            numbands = 1;
+            opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust them\n"
+                          "- setting number of bands to %d => HYPOTHESIS!!!\n",
+                          numbands);
+        };
+
+    };
 
 #else
-       /* We check whether there are too many subbands */
-       if ((numbands < 0) || (numbands >= J2K_MAXBANDS)) {
-               opj_event_msg(j2k->cinfo, EVT_WARNING ,
-                                       "bad number of subbands in Sqcx (%d) regarding to J2K_MAXBANDS (%d) \n"
-                                   "- limiting number of bands to J2K_MAXBANDS and try to move to the next markers\n", numbands, J2K_MAXBANDS);
-       }
+    /* We check whether there are too many subbands */
+    if ((numbands < 0) || (numbands >= J2K_MAXBANDS)) {
+        opj_event_msg(j2k->cinfo, EVT_WARNING,
+                      "bad number of subbands in Sqcx (%d) regarding to J2K_MAXBANDS (%d) \n"
+                      "- limiting number of bands to J2K_MAXBANDS and try to move to the next markers\n",
+                      numbands, J2K_MAXBANDS);
+    }
 
 #endif /* USE_JPWL */
 
-       for (bandno = 0; bandno < numbands; bandno++) {
-               int expn, mant;
-               if (tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) {
-                       expn = cio_read(cio, 1) >> 3;   /* SPqcx_i */
-                       mant = 0;
-               } else {
-                       tmp = cio_read(cio, 2); /* SPqcx_i */
-                       expn = tmp >> 11;
-                       mant = tmp & 0x7ff;
-               }
-               if (bandno < J2K_MAXBANDS){
-                       tccp->stepsizes[bandno].expn = expn;
-                       tccp->stepsizes[bandno].mant = mant;
-               }
-       }
-       
-       /* Add Antonin : if scalar_derived -> compute other stepsizes */
-       if (tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) {
-               for (bandno = 1; bandno < J2K_MAXBANDS; bandno++) {
-                       tccp->stepsizes[bandno].expn = 
-                               ((tccp->stepsizes[0].expn) - ((bandno - 1) / 3) > 0) ? 
-                                       (tccp->stepsizes[0].expn) - ((bandno - 1) / 3) : 0;
-                       tccp->stepsizes[bandno].mant = tccp->stepsizes[0].mant;
-               }
-       }
-       /* ddA */
+    for (bandno = 0; bandno < numbands; bandno++) {
+        int expn, mant;
+        if (tccp->qntsty == J2K_CCP_QNTSTY_NOQNT) {
+            expn = cio_read(cio, 1) >> 3;   /* SPqcx_i */
+            mant = 0;
+        } else {
+            tmp = cio_read(cio, 2); /* SPqcx_i */
+            expn = tmp >> 11;
+            mant = tmp & 0x7ff;
+        }
+        if (bandno < J2K_MAXBANDS) {
+            tccp->stepsizes[bandno].expn = expn;
+            tccp->stepsizes[bandno].mant = mant;
+        }
+    }
+
+    /* Add Antonin : if scalar_derived -> compute other stepsizes */
+    if (tccp->qntsty == J2K_CCP_QNTSTY_SIQNT) {
+        for (bandno = 1; bandno < J2K_MAXBANDS; bandno++) {
+            tccp->stepsizes[bandno].expn =
+                ((tccp->stepsizes[0].expn) - ((bandno - 1) / 3) > 0) ?
+                (tccp->stepsizes[0].expn) - ((bandno - 1) / 3) : 0;
+            tccp->stepsizes[bandno].mant = tccp->stepsizes[0].mant;
+        }
+    }
+    /* ddA */
 }
 
-static void j2k_write_qcd(opj_j2k_t *j2k) {
-       int lenp, len;
-
-       opj_cio_t *cio = j2k->cio;
-       
-       cio_write(cio, J2K_MS_QCD, 2);  /* QCD */
-       lenp = cio_tell(cio);
-       cio_skip(cio, 2);
-       j2k_write_qcx(j2k, 0);
-       len = cio_tell(cio) - lenp;
-       cio_seek(cio, lenp);
-       cio_write(cio, len, 2);                 /* Lqcd */
-       cio_seek(cio, lenp + len);
-
-       if(j2k->cstr_info)
-         j2k_add_mhmarker(j2k->cstr_info, J2K_MS_QCD, lenp, len);
+static void j2k_write_qcd(opj_j2k_t *j2k)
+{
+    int lenp, len;
+
+    opj_cio_t *cio = j2k->cio;
+
+    cio_write(cio, J2K_MS_QCD, 2);  /* QCD */
+    lenp = cio_tell(cio);
+    cio_skip(cio, 2);
+    j2k_write_qcx(j2k, 0);
+    len = cio_tell(cio) - lenp;
+    cio_seek(cio, lenp);
+    cio_write(cio, len, 2);         /* Lqcd */
+    cio_seek(cio, lenp + len);
+
+    if (j2k->cstr_info) {
+        j2k_add_mhmarker(j2k->cstr_info, J2K_MS_QCD, lenp, len);
+    }
 }
 
-static void j2k_read_qcd(opj_j2k_t *j2k) {
-       int len, i, pos;
-
-       opj_cio_t *cio = j2k->cio;
-       opj_image_t *image = j2k->image;
-       
-       len = cio_read(cio, 2);         /* Lqcd */
-       pos = cio_tell(cio);
-       for (i = 0; i < image->numcomps; i++) {
-               cio_seek(cio, pos);
-               j2k_read_qcx(j2k, i, len - 2);
-       }
+static void j2k_read_qcd(opj_j2k_t *j2k)
+{
+    int len, i, pos;
+
+    opj_cio_t *cio = j2k->cio;
+    opj_image_t *image = j2k->image;
+
+    len = cio_read(cio, 2);     /* Lqcd */
+    pos = cio_tell(cio);
+    for (i = 0; i < image->numcomps; i++) {
+        cio_seek(cio, pos);
+        j2k_read_qcx(j2k, i, len - 2);
+    }
 }
 
-static void j2k_write_qcc(opj_j2k_t *j2k, int compno) {
-       int lenp, len;
-
-       opj_cio_t *cio = j2k->cio;
-       
-       cio_write(cio, J2K_MS_QCC, 2);  /* QCC */
-       lenp = cio_tell(cio);
-       cio_skip(cio, 2);
-       cio_write(cio, compno, j2k->image->numcomps <= 256 ? 1 : 2);    /* Cqcc */
-       j2k_write_qcx(j2k, compno);
-       len = cio_tell(cio) - lenp;
-       cio_seek(cio, lenp);
-       cio_write(cio, len, 2);                 /* Lqcc */
-       cio_seek(cio, lenp + len);
+static void j2k_write_qcc(opj_j2k_t *j2k, int compno)
+{
+    int lenp, len;
+
+    opj_cio_t *cio = j2k->cio;
+
+    cio_write(cio, J2K_MS_QCC, 2);  /* QCC */
+    lenp = cio_tell(cio);
+    cio_skip(cio, 2);
+    cio_write(cio, compno, j2k->image->numcomps <= 256 ? 1 : 2);    /* Cqcc */
+    j2k_write_qcx(j2k, compno);
+    len = cio_tell(cio) - lenp;
+    cio_seek(cio, lenp);
+    cio_write(cio, len, 2);         /* Lqcc */
+    cio_seek(cio, lenp + len);
 }
 
-static void j2k_read_qcc(opj_j2k_t *j2k) {
-       int len, compno;
-       int numcomp = j2k->image->numcomps;
-       opj_cio_t *cio = j2k->cio;
+static void j2k_read_qcc(opj_j2k_t *j2k)
+{
+    int len, compno;
+    int numcomp = j2k->image->numcomps;
+    opj_cio_t *cio = j2k->cio;
 
-       len = cio_read(cio, 2); /* Lqcc */
-       compno = cio_read(cio, numcomp <= 256 ? 1 : 2); /* Cqcc */
+    len = cio_read(cio, 2); /* Lqcc */
+    compno = cio_read(cio, numcomp <= 256 ? 1 : 2); /* Cqcc */
 
 #ifdef USE_JPWL
-       if (j2k->cp->correct) {
-
-               static int backup_compno = 0;
-
-               /* compno is negative or larger than the number of components!!! */
-               if ((compno < 0) || (compno >= numcomp)) {
-                       opj_event_msg(j2k->cinfo, EVT_ERROR,
-                               "JPWL: bad component number in QCC (%d out of a maximum of %d)\n",
-                               compno, numcomp);
-                       if (!JPWL_ASSUME) {
-                               opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
-                               return;
-                       }
-                       /* we try to correct */
-                       compno = backup_compno % numcomp;
-                       opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n"
-                               "- setting component number to %d\n",
-                               compno);
-               }
-
-               /* keep your private count of tiles */
-               backup_compno++;
-       }
+    if (j2k->cp->correct) {
+
+        static int backup_compno = 0;
+
+        /* compno is negative or larger than the number of components!!! */
+        if ((compno < 0) || (compno >= numcomp)) {
+            opj_event_msg(j2k->cinfo, EVT_ERROR,
+                          "JPWL: bad component number in QCC (%d out of a maximum of %d)\n",
+                          compno, numcomp);
+            if (!JPWL_ASSUME) {
+                opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
+                return;
+            }
+            /* we try to correct */
+            compno = backup_compno % numcomp;
+            opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n"
+                          "- setting component number to %d\n",
+                          compno);
+        }
+
+        /* keep your private count of tiles */
+        backup_compno++;
+    }
 #endif /* USE_JPWL */
 
-  if ((compno < 0) || (compno >= numcomp)) {
-    opj_event_msg(j2k->cinfo, EVT_ERROR,
-      "bad component number in QCC (%d out of a maximum of %d)\n",
-      compno, j2k->image->numcomps);
-    return;
-  }
+    if ((compno < 0) || (compno >= numcomp)) {
+        opj_event_msg(j2k->cinfo, EVT_ERROR,
+                      "bad component number in QCC (%d out of a maximum of %d)\n",
+                      compno, j2k->image->numcomps);
+        return;
+    }
 
-       j2k_read_qcx(j2k, compno, len - 2 - (numcomp <= 256 ? 1 : 2));
+    j2k_read_qcx(j2k, compno, len - 2 - (numcomp <= 256 ? 1 : 2));
 }
 
-static void j2k_write_poc(opj_j2k_t *j2k) {
-       int len, numpchgs, i;
-
-       int numcomps = j2k->image->numcomps;
-       
-       opj_cp_t *cp = j2k->cp;
-       opj_tcp_t *tcp = &cp->tcps[j2k->curtileno];
-       opj_tccp_t *tccp = &tcp->tccps[0];
-       opj_cio_t *cio = j2k->cio;
-
-       numpchgs = 1 + tcp->numpocs;
-       cio_write(cio, J2K_MS_POC, 2);  /* POC  */
-       len = 2 + (5 + 2 * (numcomps <= 256 ? 1 : 2)) * numpchgs;
-       cio_write(cio, len, 2);         /* Lpoc */
-       for (i = 0; i < numpchgs; i++) {
-               opj_poc_t *poc = &tcp->pocs[i];
-               cio_write(cio, poc->resno0, 1); /* RSpoc_i */
-               cio_write(cio, poc->compno0, (numcomps <= 256 ? 1 : 2));        /* CSpoc_i */
-               cio_write(cio, poc->layno1, 2); /* LYEpoc_i */
-               poc->layno1 = int_min(poc->layno1, tcp->numlayers);
-               cio_write(cio, poc->resno1, 1); /* REpoc_i */
-               poc->resno1 = int_min(poc->resno1, tccp->numresolutions);
-               cio_write(cio, poc->compno1, (numcomps <= 256 ? 1 : 2));        /* CEpoc_i */
-               poc->compno1 = int_min(poc->compno1, numcomps);
-               cio_write(cio, poc->prg, 1);    /* Ppoc_i */
-       }
+static void j2k_write_poc(opj_j2k_t *j2k)
+{
+    int len, numpchgs, i;
+
+    int numcomps = j2k->image->numcomps;
+
+    opj_cp_t *cp = j2k->cp;
+    opj_tcp_t *tcp = &cp->tcps[j2k->curtileno];
+    opj_tccp_t *tccp = &tcp->tccps[0];
+    opj_cio_t *cio = j2k->cio;
+
+    numpchgs = 1 + tcp->numpocs;
+    cio_write(cio, J2K_MS_POC, 2);  /* POC  */
+    len = 2 + (5 + 2 * (numcomps <= 256 ? 1 : 2)) * numpchgs;
+    cio_write(cio, len, 2);     /* Lpoc */
+    for (i = 0; i < numpchgs; i++) {
+        opj_poc_t *poc = &tcp->pocs[i];
+        cio_write(cio, poc->resno0, 1); /* RSpoc_i */
+        cio_write(cio, poc->compno0, (numcomps <= 256 ? 1 : 2));    /* CSpoc_i */
+        cio_write(cio, poc->layno1, 2); /* LYEpoc_i */
+        poc->layno1 = int_min(poc->layno1, tcp->numlayers);
+        cio_write(cio, poc->resno1, 1); /* REpoc_i */
+        poc->resno1 = int_min(poc->resno1, tccp->numresolutions);
+        cio_write(cio, poc->compno1, (numcomps <= 256 ? 1 : 2));    /* CEpoc_i */
+        poc->compno1 = int_min(poc->compno1, numcomps);
+        cio_write(cio, poc->prg, 1);    /* Ppoc_i */
+    }
 }
 
-static void j2k_read_poc(opj_j2k_t *j2k) {
-       int len, numpchgs, i, old_poc;
-
-       int numcomps = j2k->image->numcomps;
-       
-       opj_cp_t *cp = j2k->cp;
-       opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] : j2k->default_tcp;
-       opj_cio_t *cio = j2k->cio;
-       
-       old_poc = tcp->POC ? tcp->numpocs + 1 : 0;
-       tcp->POC = 1;
-       len = cio_read(cio, 2);         /* Lpoc */
-       numpchgs = (len - 2) / (5 + 2 * (numcomps <= 256 ? 1 : 2));
-       
-       for (i = old_poc; i < numpchgs + old_poc; i++) {
-               opj_poc_t *poc;
-               poc = &tcp->pocs[i];
-               poc->resno0 = cio_read(cio, 1); /* RSpoc_i */
-               poc->compno0 = cio_read(cio, numcomps <= 256 ? 1 : 2);  /* CSpoc_i */
-               poc->layno1 = cio_read(cio, 2);    /* LYEpoc_i */
-               poc->resno1 = cio_read(cio, 1);    /* REpoc_i */
-               poc->compno1 = int_min(
-                       cio_read(cio, numcomps <= 256 ? 1 : 2), (unsigned int) numcomps);       /* CEpoc_i */
-               poc->prg = (OPJ_PROG_ORDER)cio_read(cio, 1);    /* Ppoc_i */
-       }
-       
-       tcp->numpocs = numpchgs + old_poc - 1;
+static void j2k_read_poc(opj_j2k_t *j2k)
+{
+    int len, numpchgs, i, old_poc;
+
+    int numcomps = j2k->image->numcomps;
+
+    opj_cp_t *cp = j2k->cp;
+    opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] :
+                     j2k->default_tcp;
+    opj_cio_t *cio = j2k->cio;
+
+    old_poc = tcp->POC ? tcp->numpocs + 1 : 0;
+    tcp->POC = 1;
+    len = cio_read(cio, 2);     /* Lpoc */
+    numpchgs = (len - 2) / (5 + 2 * (numcomps <= 256 ? 1 : 2));
+
+    for (i = old_poc; i < numpchgs + old_poc; i++) {
+        opj_poc_t *poc;
+        poc = &tcp->pocs[i];
+        poc->resno0 = cio_read(cio, 1); /* RSpoc_i */
+        poc->compno0 = cio_read(cio, numcomps <= 256 ? 1 : 2);  /* CSpoc_i */
+        poc->layno1 = cio_read(cio, 2);    /* LYEpoc_i */
+        poc->resno1 = cio_read(cio, 1);    /* REpoc_i */
+        poc->compno1 = int_min(
+                           cio_read(cio, numcomps <= 256 ? 1 : 2),
+                           (unsigned int) numcomps);   /* CEpoc_i */
+        poc->prg = (OPJ_PROG_ORDER)cio_read(cio, 1);    /* Ppoc_i */
+    }
+
+    tcp->numpocs = numpchgs + old_poc - 1;
 }
 
-static void j2k_read_crg(opj_j2k_t *j2k) {
-       int len, i, Xcrg_i, Ycrg_i;
-       
-       opj_cio_t *cio = j2k->cio;
-       int numcomps = j2k->image->numcomps;
-       
-       len = cio_read(cio, 2);                 /* Lcrg */
-       for (i = 0; i < numcomps; i++) {
-               Xcrg_i = cio_read(cio, 2);      /* Xcrg_i */
-               Ycrg_i = cio_read(cio, 2);      /* Ycrg_i */
-       }
+static void j2k_read_crg(opj_j2k_t *j2k)
+{
+    int len, i, Xcrg_i, Ycrg_i;
+
+    opj_cio_t *cio = j2k->cio;
+    int numcomps = j2k->image->numcomps;
+
+    len = cio_read(cio, 2);         /* Lcrg */
+    for (i = 0; i < numcomps; i++) {
+        Xcrg_i = cio_read(cio, 2);  /* Xcrg_i */
+        Ycrg_i = cio_read(cio, 2);  /* Ycrg_i */
+    }
 }
 
-static void j2k_read_tlm(opj_j2k_t *j2k) {
-       int len, Ztlm, Stlm, ST, SP, tile_tlm, i;
-       long int Ttlm_i, Ptlm_i;
-
-       opj_cio_t *cio = j2k->cio;
-       
-       len = cio_read(cio, 2);         /* Ltlm */
-       Ztlm = cio_read(cio, 1);        /* Ztlm */
-       Stlm = cio_read(cio, 1);        /* Stlm */
-       ST = ((Stlm >> 4) & 0x01) + ((Stlm >> 4) & 0x02);
-       SP = (Stlm >> 6) & 0x01;
-       tile_tlm = (len - 4) / ((SP + 1) * 2 + ST);
-       for (i = 0; i < tile_tlm; i++) {
-               Ttlm_i = cio_read(cio, ST);     /* Ttlm_i */
-               Ptlm_i = cio_read(cio, SP ? 4 : 2);     /* Ptlm_i */
-       }
+static void j2k_read_tlm(opj_j2k_t *j2k)
+{
+    int len, Ztlm, Stlm, ST, SP, tile_tlm, i;
+    long int Ttlm_i, Ptlm_i;
+
+    opj_cio_t *cio = j2k->cio;
+
+    len = cio_read(cio, 2);     /* Ltlm */
+    Ztlm = cio_read(cio, 1);    /* Ztlm */
+    Stlm = cio_read(cio, 1);    /* Stlm */
+    ST = ((Stlm >> 4) & 0x01) + ((Stlm >> 4) & 0x02);
+    SP = (Stlm >> 6) & 0x01;
+    tile_tlm = (len - 4) / ((SP + 1) * 2 + ST);
+    for (i = 0; i < tile_tlm; i++) {
+        Ttlm_i = cio_read(cio, ST); /* Ttlm_i */
+        Ptlm_i = cio_read(cio, SP ? 4 : 2); /* Ptlm_i */
+    }
 }
 
-static void j2k_read_plm(opj_j2k_t *j2k) {
-       int len, i, Zplm, Nplm, add, packet_len = 0;
-       
-       opj_cio_t *cio = j2k->cio;
-
-       len = cio_read(cio, 2);         /* Lplm */
-       Zplm = cio_read(cio, 1);        /* Zplm */
-       len -= 3;
-       while (len > 0) {
-               Nplm = cio_read(cio, 4);                /* Nplm */
-               len -= 4;
-               for (i = Nplm; i > 0; i--) {
-                       add = cio_read(cio, 1);
-                       len--;
-                       packet_len = (packet_len << 7) + add;   /* Iplm_ij */
-                       if ((add & 0x80) == 0) {
-                               /* New packet */
-                               packet_len = 0;
-                       }
-                       if (len <= 0)
-                               break;
-               }
-       }
+static void j2k_read_plm(opj_j2k_t *j2k)
+{
+    int len, i, Zplm, Nplm, add, packet_len = 0;
+
+    opj_cio_t *cio = j2k->cio;
+
+    len = cio_read(cio, 2);     /* Lplm */
+    Zplm = cio_read(cio, 1);    /* Zplm */
+    len -= 3;
+    while (len > 0) {
+        Nplm = cio_read(cio, 4);        /* Nplm */
+        len -= 4;
+        for (i = Nplm; i > 0; i--) {
+            add = cio_read(cio, 1);
+            len--;
+            packet_len = (packet_len << 7) + add;   /* Iplm_ij */
+            if ((add & 0x80) == 0) {
+                /* New packet */
+                packet_len = 0;
+            }
+            if (len <= 0) {
+                break;
+            }
+        }
+    }
 }
 
-static void j2k_read_plt(opj_j2k_t *j2k) {
-       int len, i, Zplt, packet_len = 0, add;
-       
-       opj_cio_t *cio = j2k->cio;
-       
-       len = cio_read(cio, 2);         /* Lplt */
-       Zplt = cio_read(cio, 1);        /* Zplt */
-       for (i = len - 3; i > 0; i--) {
-               add = cio_read(cio, 1);
-               packet_len = (packet_len << 7) + add;   /* Iplt_i */
-               if ((add & 0x80) == 0) {
-                       /* New packet */
-                       packet_len = 0;
-               }
-       }
+static void j2k_read_plt(opj_j2k_t *j2k)
+{
+    int len, i, Zplt, packet_len = 0, add;
+
+    opj_cio_t *cio = j2k->cio;
+
+    len = cio_read(cio, 2);     /* Lplt */
+    Zplt = cio_read(cio, 1);    /* Zplt */
+    for (i = len - 3; i > 0; i--) {
+        add = cio_read(cio, 1);
+        packet_len = (packet_len << 7) + add;   /* Iplt_i */
+        if ((add & 0x80) == 0) {
+            /* New packet */
+            packet_len = 0;
+        }
+    }
 }
 
-static void j2k_read_ppm(opj_j2k_t *j2k) {
-       int len, Z_ppm, i, j;
-       int N_ppm;
-
-       opj_cp_t *cp = j2k->cp;
-       opj_cio_t *cio = j2k->cio;
-       
-       len = cio_read(cio, 2);
-       cp->ppm = 1;
-       
-       Z_ppm = cio_read(cio, 1);       /* Z_ppm */
-       len -= 3;
-       while (len > 0) {
-               if (cp->ppm_previous == 0) {
-                       N_ppm = cio_read(cio, 4);       /* N_ppm */
-                       len -= 4;
-               } else {
-                       N_ppm = cp->ppm_previous;
-               }
-               j = cp->ppm_store;
-               if (Z_ppm == 0) {       /* First PPM marker */
-                       cp->ppm_data = (unsigned char *) opj_malloc(N_ppm * sizeof(unsigned char));
-                       cp->ppm_data_first = cp->ppm_data;
-                       cp->ppm_len = N_ppm;
-               } else {                        /* NON-first PPM marker */
-                       cp->ppm_data = (unsigned char *) opj_realloc(cp->ppm_data, (N_ppm +     cp->ppm_store) * sizeof(unsigned char));
+static void j2k_read_ppm(opj_j2k_t *j2k)
+{
+    int len, Z_ppm, i, j;
+    int N_ppm;
+
+    opj_cp_t *cp = j2k->cp;
+    opj_cio_t *cio = j2k->cio;
+
+    len = cio_read(cio, 2);
+    cp->ppm = 1;
+
+    Z_ppm = cio_read(cio, 1);   /* Z_ppm */
+    len -= 3;
+    while (len > 0) {
+        if (cp->ppm_previous == 0) {
+            N_ppm = cio_read(cio, 4);   /* N_ppm */
+            len -= 4;
+        } else {
+            N_ppm = cp->ppm_previous;
+        }
+        j = cp->ppm_store;
+        if (Z_ppm == 0) {   /* First PPM marker */
+            cp->ppm_data = (unsigned char *) opj_malloc(N_ppm * sizeof(unsigned char));
+            cp->ppm_data_first = cp->ppm_data;
+            cp->ppm_len = N_ppm;
+        } else {            /* NON-first PPM marker */
+            cp->ppm_data = (unsigned char *) opj_realloc(cp->ppm_data,
+                           (N_ppm + cp->ppm_store) * sizeof(unsigned char));
 
 #ifdef USE_JPWL
-                       /* this memory allocation check could be done even in non-JPWL cases */
-                       if (cp->correct) {
-                               if (!cp->ppm_data) {
-                                       opj_event_msg(j2k->cinfo, EVT_ERROR,
-                                               "JPWL: failed memory allocation during PPM marker parsing (pos. %x)\n",
-                                               cio_tell(cio));
-                                       if (!JPWL_ASSUME || JPWL_ASSUME) {
-                                               opj_free(cp->ppm_data);
-                                               opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
-                                               return;
-                                       }
-                               }
-                       }
+            /* this memory allocation check could be done even in non-JPWL cases */
+            if (cp->correct) {
+                if (!cp->ppm_data) {
+                    opj_event_msg(j2k->cinfo, EVT_ERROR,
+                                  "JPWL: failed memory allocation during PPM marker parsing (pos. %x)\n",
+                                  cio_tell(cio));
+                    if (!JPWL_ASSUME || JPWL_ASSUME) {
+                        opj_free(cp->ppm_data);
+                        opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
+                        return;
+                    }
+                }
+            }
 #endif
 
-                       cp->ppm_data_first = cp->ppm_data;
-                       cp->ppm_len = N_ppm + cp->ppm_store;
-               }
-               for (i = N_ppm; i > 0; i--) {   /* Read packet header */
-                       cp->ppm_data[j] = cio_read(cio, 1);
-                       j++;
-                       len--;
-                       if (len == 0)
-                               break;                  /* Case of non-finished packet header in present marker but finished in next one */
-               }
-               cp->ppm_previous = i - 1;
-               cp->ppm_store = j;
-       }
+            cp->ppm_data_first = cp->ppm_data;
+            cp->ppm_len = N_ppm + cp->ppm_store;
+        }
+        for (i = N_ppm; i > 0; i--) {   /* Read packet header */
+            cp->ppm_data[j] = cio_read(cio, 1);
+            j++;
+            len--;
+            if (len == 0) {
+                break;    /* Case of non-finished packet header in present marker but finished in next one */
+            }
+        }
+        cp->ppm_previous = i - 1;
+        cp->ppm_store = j;
+    }
 }
 
-static void j2k_read_ppt(opj_j2k_t *j2k) {
-       int len, Z_ppt, i, j = 0;
-
-       opj_cp_t *cp = j2k->cp;
-       opj_tcp_t *tcp = cp->tcps + j2k->curtileno;
-       opj_cio_t *cio = j2k->cio;
-
-       len = cio_read(cio, 2);
-       Z_ppt = cio_read(cio, 1);
-       tcp->ppt = 1;
-       if (Z_ppt == 0) {               /* First PPT marker */
-               tcp->ppt_data = (unsigned char *) opj_malloc((len - 3) * sizeof(unsigned char));
-               tcp->ppt_data_first = tcp->ppt_data;
-               tcp->ppt_store = 0;
-               tcp->ppt_len = len - 3;
-       } else {                        /* NON-first PPT marker */
-               tcp->ppt_data = (unsigned char *) opj_realloc(tcp->ppt_data, (len - 3 + tcp->ppt_store) * sizeof(unsigned char));
-               tcp->ppt_data_first = tcp->ppt_data;
-               tcp->ppt_len = len - 3 + tcp->ppt_store;
-       }
-       j = tcp->ppt_store;
-       for (i = len - 3; i > 0; i--) {
-               tcp->ppt_data[j] = cio_read(cio, 1);
-               j++;
-       }
-       tcp->ppt_store = j;
+static void j2k_read_ppt(opj_j2k_t *j2k)
+{
+    int len, Z_ppt, i, j = 0;
+
+    opj_cp_t *cp = j2k->cp;
+    opj_tcp_t *tcp = cp->tcps + j2k->curtileno;
+    opj_cio_t *cio = j2k->cio;
+
+    len = cio_read(cio, 2);
+    Z_ppt = cio_read(cio, 1);
+    tcp->ppt = 1;
+    if (Z_ppt == 0) {       /* First PPT marker */
+        tcp->ppt_data = (unsigned char *) opj_malloc((len - 3) * sizeof(unsigned char));
+        tcp->ppt_data_first = tcp->ppt_data;
+        tcp->ppt_store = 0;
+        tcp->ppt_len = len - 3;
+    } else {            /* NON-first PPT marker */
+        tcp->ppt_data = (unsigned char *) opj_realloc(tcp->ppt_data,
+                        (len - 3 + tcp->ppt_store) * sizeof(unsigned char));
+        tcp->ppt_data_first = tcp->ppt_data;
+        tcp->ppt_len = len - 3 + tcp->ppt_store;
+    }
+    j = tcp->ppt_store;
+    for (i = len - 3; i > 0; i--) {
+        tcp->ppt_data[j] = cio_read(cio, 1);
+        j++;
+    }
+    tcp->ppt_store = j;
 }
 
-static void j2k_write_tlm(opj_j2k_t *j2k){
-       int lenp;
-       opj_cio_t *cio = j2k->cio;
-       j2k->tlm_start = cio_tell(cio);
-       cio_write(cio, J2K_MS_TLM, 2);/* TLM */
-       lenp = 4 + (5*j2k->totnum_tp);
-       cio_write(cio,lenp,2);                          /* Ltlm */
-       cio_write(cio, 0,1);                                    /* Ztlm=0*/
-       cio_write(cio,80,1);                                    /* Stlm ST=1(8bits-255 tiles max),SP=1(Ptlm=32bits) */
-       cio_skip(cio,5*j2k->totnum_tp);
+static void j2k_write_tlm(opj_j2k_t *j2k)
+{
+    int lenp;
+    opj_cio_t *cio = j2k->cio;
+    j2k->tlm_start = cio_tell(cio);
+    cio_write(cio, J2K_MS_TLM, 2);/* TLM */
+    lenp = 4 + (5 * j2k->totnum_tp);
+    cio_write(cio, lenp, 2);            /* Ltlm */
+    cio_write(cio, 0, 1);                   /* Ztlm=0*/
+    cio_write(cio, 80,
+              1);                  /* Stlm ST=1(8bits-255 tiles max),SP=1(Ptlm=32bits) */
+    cio_skip(cio, 5 * j2k->totnum_tp);
 }
 
-static void j2k_write_sot(opj_j2k_t *j2k) {
-       int lenp, len;
-
-       opj_cio_t *cio = j2k->cio;
-
-       j2k->sot_start = cio_tell(cio);
-       cio_write(cio, J2K_MS_SOT, 2);          /* SOT */
-       lenp = cio_tell(cio);
-       cio_skip(cio, 2);                                       /* Lsot (further) */
-       cio_write(cio, j2k->curtileno, 2);      /* Isot */
-       cio_skip(cio, 4);                                       /* Psot (further in j2k_write_sod) */
-       cio_write(cio, j2k->cur_tp_num , 1);    /* TPsot */
-       cio_write(cio, j2k->cur_totnum_tp[j2k->curtileno], 1);          /* TNsot */
-       len = cio_tell(cio) - lenp;
-       cio_seek(cio, lenp);
-       cio_write(cio, len, 2);                         /* Lsot */
-       cio_seek(cio, lenp + len);
-
-       /* UniPG>> */
+static void j2k_write_sot(opj_j2k_t *j2k)
+{
+    int lenp, len;
+
+    opj_cio_t *cio = j2k->cio;
+
+    j2k->sot_start = cio_tell(cio);
+    cio_write(cio, J2K_MS_SOT, 2);      /* SOT */
+    lenp = cio_tell(cio);
+    cio_skip(cio, 2);                   /* Lsot (further) */
+    cio_write(cio, j2k->curtileno, 2);  /* Isot */
+    cio_skip(cio, 4);                   /* Psot (further in j2k_write_sod) */
+    cio_write(cio, j2k->cur_tp_num, 1);     /* TPsot */
+    cio_write(cio, j2k->cur_totnum_tp[j2k->curtileno], 1);      /* TNsot */
+    len = cio_tell(cio) - lenp;
+    cio_seek(cio, lenp);
+    cio_write(cio, len, 2);             /* Lsot */
+    cio_seek(cio, lenp + len);
+
+    /* UniPG>> */
 #ifdef USE_JPWL
-       /* update markers struct */
-       j2k_add_marker(j2k->cstr_info, J2K_MS_SOT, j2k->sot_start, len + 2);
+    /* update markers struct */
+    j2k_add_marker(j2k->cstr_info, J2K_MS_SOT, j2k->sot_start, len + 2);
 #endif /* USE_JPWL */
-       /* <<UniPG */
+    /* <<UniPG */
 
-       if( j2k->cstr_info && j2k->cur_tp_num==0){
-         j2k_add_tlmarker( j2k->curtileno, j2k->cstr_info, J2K_MS_SOT, lenp, len);
-       }
+    if (j2k->cstr_info && j2k->cur_tp_num == 0) {
+        j2k_add_tlmarker(j2k->curtileno, j2k->cstr_info, J2K_MS_SOT, lenp, len);
+    }
 }
 
-static void j2k_read_sot(opj_j2k_t *j2k) {
-       int len, tileno, totlen, partno, numparts, i;
-       opj_tcp_t *tcp = NULL;
-       char status = 0;
+static void j2k_read_sot(opj_j2k_t *j2k)
+{
+    int len, tileno, totlen, partno, numparts, i;
+    opj_tcp_t *tcp = NULL;
+    char status = 0;
 
-       opj_cp_t *cp = j2k->cp;
-       opj_cio_t *cio = j2k->cio;
+    opj_cp_t *cp = j2k->cp;
+    opj_cio_t *cio = j2k->cio;
 
-       len = cio_read(cio, 2);
-       tileno = cio_read(cio, 2);
+    len = cio_read(cio, 2);
+    tileno = cio_read(cio, 2);
 
 #ifdef USE_JPWL
-       if (j2k->cp->correct) {
-
-               static int backup_tileno = 0;
-
-               /* tileno is negative or larger than the number of tiles!!! */
-               if ((tileno < 0) || (tileno >= (cp->tw * cp->th))) {
-                       opj_event_msg(j2k->cinfo, EVT_ERROR,
-                               "JPWL: bad tile number (%d out of a maximum of %d)\n",
-                               tileno, (cp->tw * cp->th));
-                       if (!JPWL_ASSUME) {
-                               opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
-                               return;
-                       }
-                       /* we try to correct */
-                       tileno = backup_tileno;
-                       opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n"
-                               "- setting tile number to %d\n",
-                               tileno);
-               }
-
-               /* keep your private count of tiles */
-               backup_tileno++;
-       }
-  else
+    if (j2k->cp->correct) {
+
+        static int backup_tileno = 0;
+
+        /* tileno is negative or larger than the number of tiles!!! */
+        if ((tileno < 0) || (tileno >= (cp->tw * cp->th))) {
+            opj_event_msg(j2k->cinfo, EVT_ERROR,
+                          "JPWL: bad tile number (%d out of a maximum of %d)\n",
+                          tileno, (cp->tw * cp->th));
+            if (!JPWL_ASSUME) {
+                opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
+                return;
+            }
+            /* we try to correct */
+            tileno = backup_tileno;
+            opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n"
+                          "- setting tile number to %d\n",
+                          tileno);
+        }
+
+        /* keep your private count of tiles */
+        backup_tileno++;
+    } else
 #endif /* USE_JPWL */
-  {
-    /* tileno is negative or larger than the number of tiles!!! */
-    if ((tileno < 0) || (tileno >= (cp->tw * cp->th))) {
-      opj_event_msg(j2k->cinfo, EVT_ERROR,
-        "JPWL: bad tile number (%d out of a maximum of %d)\n",
-        tileno, (cp->tw * cp->th));
-      return;
-    }
-  }
-       
-       if (cp->tileno_size == 0) {
-               cp->tileno[cp->tileno_size] = tileno;
-               cp->tileno_size++;
-       } else {
-               i = 0;
-               while (i < cp->tileno_size && status == 0) {
-                       status = cp->tileno[i] == tileno ? 1 : 0;
-                       i++;
-               }
-               if (status == 0) {
-                       cp->tileno[cp->tileno_size] = tileno;
-                       cp->tileno_size++;
-               }
-       }
-       
-       totlen = cio_read(cio, 4);
+    {
+        /* tileno is negative or larger than the number of tiles!!! */
+        if ((tileno < 0) || (tileno >= (cp->tw * cp->th))) {
+            opj_event_msg(j2k->cinfo, EVT_ERROR,
+                          "JPWL: bad tile number (%d out of a maximum of %d)\n",
+                          tileno, (cp->tw * cp->th));
+            return;
+        }
+    }
+
+    if (cp->tileno_size == 0) {
+        cp->tileno[cp->tileno_size] = tileno;
+        cp->tileno_size++;
+    } else {
+        i = 0;
+        while (i < cp->tileno_size && status == 0) {
+            status = cp->tileno[i] == tileno ? 1 : 0;
+            i++;
+        }
+        if (status == 0) {
+            cp->tileno[cp->tileno_size] = tileno;
+            cp->tileno_size++;
+        }
+    }
+
+    totlen = cio_read(cio, 4);
 
 #ifdef USE_JPWL
-       if (j2k->cp->correct) {
-
-               /* totlen is negative or larger than the bytes left!!! */
-               if ((totlen < 0) || (totlen > (cio_numbytesleft(cio) + 8))) {
-                       opj_event_msg(j2k->cinfo, EVT_ERROR,
-                               "JPWL: bad tile byte size (%d bytes against %d bytes left)\n",
-                               totlen, cio_numbytesleft(cio) + 8);
-                       if (!JPWL_ASSUME) {
-                               opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
-                               return;
-                       }
-                       /* we try to correct */
-                       totlen = 0;
-                       opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n"
-                               "- setting Psot to %d => assuming it is the last tile\n",
-                               totlen);
-               }
-
-       }
-  else
+    if (j2k->cp->correct) {
+
+        /* totlen is negative or larger than the bytes left!!! */
+        if ((totlen < 0) || (totlen > (cio_numbytesleft(cio) + 8))) {
+            opj_event_msg(j2k->cinfo, EVT_ERROR,
+                          "JPWL: bad tile byte size (%d bytes against %d bytes left)\n",
+                          totlen, cio_numbytesleft(cio) + 8);
+            if (!JPWL_ASSUME) {
+                opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
+                return;
+            }
+            /* we try to correct */
+            totlen = 0;
+            opj_event_msg(j2k->cinfo, EVT_WARNING, "- trying to adjust this\n"
+                          "- setting Psot to %d => assuming it is the last tile\n",
+                          totlen);
+        }
+
+    } else
 #endif /* USE_JPWL */
-  {
-    /* totlen is negative or larger than the bytes left!!! */
-    if ((totlen < 0) || (totlen > (cio_numbytesleft(cio) + 8))) {
-      opj_event_msg(j2k->cinfo, EVT_ERROR,
-        "JPWL: bad tile byte size (%d bytes against %d bytes left)\n",
-        totlen, cio_numbytesleft(cio) + 8);
-      return;
-    }
-  }
-
-       if (!totlen)
-               totlen = cio_numbytesleft(cio) + 8;
-       
-       partno = cio_read(cio, 1);
-       numparts = cio_read(cio, 1);
-  
-  if (partno >= numparts) {
-    opj_event_msg(j2k->cinfo, EVT_WARNING, "SOT marker inconsistency in tile %d: tile-part index greater (%d) than number of tile-parts (%d)\n", tileno, partno, numparts);
-    numparts = partno+1;
-  }
-       
-       j2k->curtileno = tileno;
-       j2k->cur_tp_num = partno;
-       j2k->eot = cio_getbp(cio) - 12 + totlen;
-       j2k->state = J2K_STATE_TPH;
-       tcp = &cp->tcps[j2k->curtileno];
-
-       /* Index */
-       if (j2k->cstr_info) {
-               if (tcp->first) {
-                       if (tileno == 0) 
-                               j2k->cstr_info->main_head_end = cio_tell(cio) - 13;
-                       j2k->cstr_info->tile[tileno].tileno = tileno;
-                       j2k->cstr_info->tile[tileno].start_pos = cio_tell(cio) - 12;
-                       j2k->cstr_info->tile[tileno].end_pos = j2k->cstr_info->tile[tileno].start_pos + totlen - 1;                             
-    } else {
-                       j2k->cstr_info->tile[tileno].end_pos += totlen;
-               }
-    j2k->cstr_info->tile[tileno].num_tps = numparts;
-    if (numparts)
-      j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_realloc(j2k->cstr_info->tile[tileno].tp, numparts * sizeof(opj_tp_info_t));
-    else
-      j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_realloc(j2k->cstr_info->tile[tileno].tp, 10 * sizeof(opj_tp_info_t)); /* Fixme (10)*/
-               j2k->cstr_info->tile[tileno].tp[partno].tp_start_pos = cio_tell(cio) - 12;
-               j2k->cstr_info->tile[tileno].tp[partno].tp_end_pos = 
-                       j2k->cstr_info->tile[tileno].tp[partno].tp_start_pos + totlen - 1;
-       }
-       
-       if (tcp->first == 1) {          
-               /* Initialization PPT */
-               opj_tccp_t *tmp = tcp->tccps;
-               memcpy(tcp, j2k->default_tcp, sizeof(opj_tcp_t));
-               tcp->ppt = 0;
-               tcp->ppt_data = NULL;
-               tcp->ppt_data_first = NULL;
-               tcp->tccps = tmp;
-
-               for (i = 0; i < j2k->image->numcomps; i++) {
-                       tcp->tccps[i] = j2k->default_tcp->tccps[i];
-               }
-               cp->tcps[j2k->curtileno].first = 0;
-       }
+    {
+        /* totlen is negative or larger than the bytes left!!! */
+        if ((totlen < 0) || (totlen > (cio_numbytesleft(cio) + 8))) {
+            opj_event_msg(j2k->cinfo, EVT_ERROR,
+                          "JPWL: bad tile byte size (%d bytes against %d bytes left)\n",
+                          totlen, cio_numbytesleft(cio) + 8);
+            return;
+        }
+    }
+
+    if (!totlen) {
+        totlen = cio_numbytesleft(cio) + 8;
+    }
+
+    partno = cio_read(cio, 1);
+    numparts = cio_read(cio, 1);
+
+    if (partno >= numparts) {
+        opj_event_msg(j2k->cinfo, EVT_WARNING,
+                      "SOT marker inconsistency in tile %d: tile-part index greater (%d) than number of tile-parts (%d)\n",
+                      tileno, partno, numparts);
+        numparts = partno + 1;
+    }
+
+    j2k->curtileno = tileno;
+    j2k->cur_tp_num = partno;
+    j2k->eot = cio_getbp(cio) - 12 + totlen;
+    j2k->state = J2K_STATE_TPH;
+    tcp = &cp->tcps[j2k->curtileno];
+
+    /* Index */
+    if (j2k->cstr_info) {
+        if (tcp->first) {
+            if (tileno == 0) {
+                j2k->cstr_info->main_head_end = cio_tell(cio) - 13;
+            }
+            j2k->cstr_info->tile[tileno].tileno = tileno;
+            j2k->cstr_info->tile[tileno].start_pos = cio_tell(cio) - 12;
+            j2k->cstr_info->tile[tileno].end_pos = j2k->cstr_info->tile[tileno].start_pos +
+                                                   totlen - 1;
+        } else {
+            j2k->cstr_info->tile[tileno].end_pos += totlen;
+        }
+        j2k->cstr_info->tile[tileno].num_tps = numparts;
+        if (numparts) {
+            j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_realloc(
+                                                  j2k->cstr_info->tile[tileno].tp, numparts * sizeof(opj_tp_info_t));
+        } else {
+            j2k->cstr_info->tile[tileno].tp = (opj_tp_info_t *) opj_realloc(
+                                                  j2k->cstr_info->tile[tileno].tp, 10 * sizeof(opj_tp_info_t));    /* Fixme (10)*/
+        }
+        j2k->cstr_info->tile[tileno].tp[partno].tp_start_pos = cio_tell(cio) - 12;
+        j2k->cstr_info->tile[tileno].tp[partno].tp_end_pos =
+            j2k->cstr_info->tile[tileno].tp[partno].tp_start_pos + totlen - 1;
+    }
+
+    if (tcp->first == 1) {
+        /* Initialization PPT */
+        opj_tccp_t *tmp = tcp->tccps;
+        memcpy(tcp, j2k->default_tcp, sizeof(opj_tcp_t));
+        tcp->ppt = 0;
+        tcp->ppt_data = NULL;
+        tcp->ppt_data_first = NULL;
+        tcp->tccps = tmp;
+
+        for (i = 0; i < j2k->image->numcomps; i++) {
+            tcp->tccps[i] = j2k->default_tcp->tccps[i];
+        }
+        cp->tcps[j2k->curtileno].first = 0;
+    }
 }
 
-static void j2k_write_sod(opj_j2k_t *j2k, void *tile_coder) {
-       int l, layno;
-       int totlen;
-       opj_tcp_t *tcp = NULL;
-       opj_codestream_info_t *cstr_info = NULL;
-       
-       opj_tcd_t *tcd = (opj_tcd_t*)tile_coder;        /* cast is needed because of conflicts in header inclusions */
-       opj_cp_t *cp = j2k->cp;
-       opj_cio_t *cio = j2k->cio;
-
-       tcd->tp_num = j2k->tp_num ;
-       tcd->cur_tp_num = j2k->cur_tp_num;
-       
-       cio_write(cio, J2K_MS_SOD, 2);
-
-       if( j2k->cstr_info && j2k->cur_tp_num==0){
-         j2k_add_tlmarker( j2k->curtileno, j2k->cstr_info, J2K_MS_SOD, cio_tell(cio), 0);
-       }
-
-       if (j2k->curtileno == 0) {
-               j2k->sod_start = cio_tell(cio) + j2k->pos_correction;
-       }
-
-       /* INDEX >> */
-       cstr_info = j2k->cstr_info;
-       if (cstr_info) {
-               if (!j2k->cur_tp_num ) {
-                       cstr_info->tile[j2k->curtileno].end_header = cio_tell(cio) + j2k->pos_correction - 1;
-                       j2k->cstr_info->tile[j2k->curtileno].tileno = j2k->curtileno;
-               }
-               else{
-                       if(cstr_info->tile[j2k->curtileno].packet[cstr_info->packno - 1].end_pos < cio_tell(cio))
-                               cstr_info->tile[j2k->curtileno].packet[cstr_info->packno].start_pos = cio_tell(cio);
-               }
-               /* UniPG>> */
+static void j2k_write_sod(opj_j2k_t *j2k, void *tile_coder)
+{
+    int l, layno;
+    int totlen;
+    opj_tcp_t *tcp = NULL;
+    opj_codestream_info_t *cstr_info = NULL;
+
+    opj_tcd_t *tcd = (opj_tcd_t*)
+                     tile_coder;    /* cast is needed because of conflicts in header inclusions */
+    opj_cp_t *cp = j2k->cp;
+    opj_cio_t *cio = j2k->cio;
+
+    tcd->tp_num = j2k->tp_num ;
+    tcd->cur_tp_num = j2k->cur_tp_num;
+
+    cio_write(cio, J2K_MS_SOD, 2);
+
+    if (j2k->cstr_info && j2k->cur_tp_num == 0) {
+        j2k_add_tlmarker(j2k->curtileno, j2k->cstr_info, J2K_MS_SOD, cio_tell(cio), 0);
+    }
+
+    if (j2k->curtileno == 0) {
+        j2k->sod_start = cio_tell(cio) + j2k->pos_correction;
+    }
+
+    /* INDEX >> */
+    cstr_info = j2k->cstr_info;
+    if (cstr_info) {
+        if (!j2k->cur_tp_num) {
+            cstr_info->tile[j2k->curtileno].end_header = cio_tell(cio) + j2k->pos_correction
+                    - 1;
+            j2k->cstr_info->tile[j2k->curtileno].tileno = j2k->curtileno;
+        } else {
+            if (cstr_info->tile[j2k->curtileno].packet[cstr_info->packno - 1].end_pos <
+                    cio_tell(cio)) {
+                cstr_info->tile[j2k->curtileno].packet[cstr_info->packno].start_pos = cio_tell(
+                            cio);
+            }
+        }
+        /* UniPG>> */
 #ifdef USE_JPWL
-               /* update markers struct */
-               j2k_add_marker(j2k->cstr_info, J2K_MS_SOD, j2k->sod_start, 2);
+        /* update markers struct */
+        j2k_add_marker(j2k->cstr_info, J2K_MS_SOD, j2k->sod_start, 2);
 #endif /* USE_JPWL */
-               /* <<UniPG */
-       }
-       /* << INDEX */
-       
-       tcp = &cp->tcps[j2k->curtileno];
-       for (layno = 0; layno < tcp->numlayers; layno++) {
-               if (tcp->rates[layno]>(j2k->sod_start / (cp->th * cp->tw))) {
-                       tcp->rates[layno]-=(j2k->sod_start / (cp->th * cp->tw));
-               } else if (tcp->rates[layno]) {
-                       tcp->rates[layno]=1;
-               }
-       }
-       if(j2k->cur_tp_num == 0){
-               tcd->tcd_image->tiles->packno = 0;
-               if(cstr_info)
-                       cstr_info->packno = 0;
-       }
-       
-       l = tcd_encode_tile(tcd, j2k->curtileno, cio_getbp(cio), cio_numbytesleft(cio) - 2, cstr_info);
-       
-       /* Writing Psot in SOT marker */
-       totlen = cio_tell(cio) + l - j2k->sot_start;
-       cio_seek(cio, j2k->sot_start + 6);
-       cio_write(cio, totlen, 4);
-       cio_seek(cio, j2k->sot_start + totlen);
-       /* Writing Ttlm and Ptlm in TLM marker */
-       if(cp->cinema){
-               cio_seek(cio, j2k->tlm_start + 6 + (5*j2k->cur_tp_num));
-               cio_write(cio, j2k->curtileno, 1);
-               cio_write(cio, totlen, 4);
-       }
-       cio_seek(cio, j2k->sot_start + totlen);
+        /* <<UniPG */
+    }
+    /* << INDEX */
+
+    tcp = &cp->tcps[j2k->curtileno];
+    for (layno = 0; layno < tcp->numlayers; layno++) {
+        if (tcp->rates[layno] > (j2k->sod_start / (cp->th * cp->tw))) {
+            tcp->rates[layno] -= (j2k->sod_start / (cp->th * cp->tw));
+        } else if (tcp->rates[layno]) {
+            tcp->rates[layno] = 1;
+        }
+    }
+    if (j2k->cur_tp_num == 0) {
+        tcd->tcd_image->tiles->packno = 0;
+        if (cstr_info) {
+            cstr_info->packno = 0;
+        }
+    }
+
+    l = tcd_encode_tile(tcd, j2k->curtileno, cio_getbp(cio),
+                        cio_numbytesleft(cio) - 2, cstr_info);
+
+    /* Writing Psot in SOT marker */
+    totlen = cio_tell(cio) + l - j2k->sot_start;
+    cio_seek(cio, j2k->sot_start + 6);
+    cio_write(cio, totlen, 4);
+    cio_seek(cio, j2k->sot_start + totlen);
+    /* Writing Ttlm and Ptlm in TLM marker */
+    if (cp->cinema) {
+        cio_seek(cio, j2k->tlm_start + 6 + (5 * j2k->cur_tp_num));
+        cio_write(cio, j2k->curtileno, 1);
+        cio_write(cio, totlen, 4);
+    }
+    cio_seek(cio, j2k->sot_start + totlen);
 }
 
-static void j2k_read_sod(opj_j2k_t *j2k) {
-       int len, truncate = 0, i;
-       unsigned char *data = NULL, *data_ptr = NULL;
-
-       opj_cio_t *cio = j2k->cio;
-       int curtileno = j2k->curtileno;
-
-       /* Index */
-       if (j2k->cstr_info) {
-               j2k->cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_end_header =
-                       cio_tell(cio) + j2k->pos_correction - 1;
-               if (j2k->cur_tp_num == 0)
-                       j2k->cstr_info->tile[j2k->curtileno].end_header = cio_tell(cio) + j2k->pos_correction - 1;
-               j2k->cstr_info->packno = 0;
-       }
-       
-       len = int_min(j2k->eot - cio_getbp(cio), cio_numbytesleft(cio) + 1);
-
-       if (len == cio_numbytesleft(cio) + 1) {
-               truncate = 1;           /* Case of a truncate codestream */
-       }       
-
-       data = j2k->tile_data[curtileno];
-       data = (unsigned char*) opj_realloc(data, (j2k->tile_len[curtileno] + len) * sizeof(unsigned char));
-
-       data_ptr = data + j2k->tile_len[curtileno];
-       for (i = 0; i < len; i++) {
-               data_ptr[i] = cio_read(cio, 1);
-       }
-
-       j2k->tile_len[curtileno] += len;
-       j2k->tile_data[curtileno] = data;
-       
-       if (!truncate) {
-               j2k->state = J2K_STATE_TPHSOT;
-       } else {
-               j2k->state = J2K_STATE_NEOC;    /* RAJOUTE !! */
-       }
-       j2k->cur_tp_num++;
+static void j2k_read_sod(opj_j2k_t *j2k)
+{
+    int len, truncate = 0, i;
+    unsigned char *data = NULL, *data_ptr = NULL;
+
+    opj_cio_t *cio = j2k->cio;
+    int curtileno = j2k->curtileno;
+
+    /* Index */
+    if (j2k->cstr_info) {
+        j2k->cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_end_header =
+            cio_tell(cio) + j2k->pos_correction - 1;
+        if (j2k->cur_tp_num == 0) {
+            j2k->cstr_info->tile[j2k->curtileno].end_header = cio_tell(
+                        cio) + j2k->pos_correction - 1;
+        }
+        j2k->cstr_info->packno = 0;
+    }
+
+    len = int_min(j2k->eot - cio_getbp(cio), cio_numbytesleft(cio) + 1);
+
+    if (len == cio_numbytesleft(cio) + 1) {
+        truncate = 1;       /* Case of a truncate codestream */
+    }
+
+    data = j2k->tile_data[curtileno];
+    data = (unsigned char*) opj_realloc(data,
+                                        (j2k->tile_len[curtileno] + len) * sizeof(unsigned char));
+
+    data_ptr = data + j2k->tile_len[curtileno];
+    for (i = 0; i < len; i++) {
+        data_ptr[i] = cio_read(cio, 1);
+    }
+
+    j2k->tile_len[curtileno] += len;
+    j2k->tile_data[curtileno] = data;
+
+    if (!truncate) {
+        j2k->state = J2K_STATE_TPHSOT;
+    } else {
+        j2k->state = J2K_STATE_NEOC;    /* RAJOUTE !! */
+    }
+    j2k->cur_tp_num++;
 }
 
-static void j2k_write_rgn(opj_j2k_t *j2k, int compno, int tileno) {
-       opj_cp_t *cp = j2k->cp;
-       opj_tcp_t *tcp = &cp->tcps[tileno];
-       opj_cio_t *cio = j2k->cio;
-       int numcomps = j2k->image->numcomps;
-       
-       cio_write(cio, J2K_MS_RGN, 2);                                          /* RGN  */
-       cio_write(cio, numcomps <= 256 ? 5 : 6, 2);                     /* Lrgn */
-       cio_write(cio, compno, numcomps <= 256 ? 1 : 2);        /* Crgn */
-       cio_write(cio, 0, 1);                                                           /* Srgn */
-       cio_write(cio, tcp->tccps[compno].roishift, 1);         /* SPrgn */
+static void j2k_write_rgn(opj_j2k_t *j2k, int compno, int tileno)
+{
+    opj_cp_t *cp = j2k->cp;
+    opj_tcp_t *tcp = &cp->tcps[tileno];
+    opj_cio_t *cio = j2k->cio;
+    int numcomps = j2k->image->numcomps;
+
+    cio_write(cio, J2K_MS_RGN, 2);                      /* RGN  */
+    cio_write(cio, numcomps <= 256 ? 5 : 6, 2);         /* Lrgn */
+    cio_write(cio, compno, numcomps <= 256 ? 1 : 2);    /* Crgn */
+    cio_write(cio, 0, 1);                               /* Srgn */
+    cio_write(cio, tcp->tccps[compno].roishift, 1);     /* SPrgn */
 }
 
-static void j2k_read_rgn(opj_j2k_t *j2k) {
-       int len, compno, roisty;
+static void j2k_read_rgn(opj_j2k_t *j2k)
+{
+    int len, compno, roisty;
 
-       opj_cp_t *cp = j2k->cp;
-       opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] : j2k->default_tcp;
-       opj_cio_t *cio = j2k->cio;
-       int numcomps = j2k->image->numcomps;
+    opj_cp_t *cp = j2k->cp;
+    opj_tcp_t *tcp = j2k->state == J2K_STATE_TPH ? &cp->tcps[j2k->curtileno] :
+                     j2k->default_tcp;
+    opj_cio_t *cio = j2k->cio;
+    int numcomps = j2k->image->numcomps;
 
-       len = cio_read(cio, 2);                                                                         /* Lrgn */
-       compno = cio_read(cio, numcomps <= 256 ? 1 : 2);                        /* Crgn */
-       roisty = cio_read(cio, 1);                                                                      /* Srgn */
+    len = cio_read(cio, 2);                                     /* Lrgn */
+    compno = cio_read(cio, numcomps <= 256 ? 1 : 2);            /* Crgn */
+    roisty = cio_read(cio, 1);                                  /* Srgn */
 
 #ifdef USE_JPWL
-       if (j2k->cp->correct) {
-               /* totlen is negative or larger than the bytes left!!! */
-               if (compno >= numcomps) {
-                       opj_event_msg(j2k->cinfo, EVT_ERROR,
-                               "JPWL: bad component number in RGN (%d when there are only %d)\n",
-                               compno, numcomps);
-                       if (!JPWL_ASSUME || JPWL_ASSUME) {
-                               opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
-                               return;
-                       }
-               }
-       };
+    if (j2k->cp->correct) {
+        /* totlen is negative or larger than the bytes left!!! */
+        if (compno >= numcomps) {
+            opj_event_msg(j2k->cinfo, EVT_ERROR,
+                          "JPWL: bad component number in RGN (%d when there are only %d)\n",
+                          compno, numcomps);
+            if (!JPWL_ASSUME || JPWL_ASSUME) {
+                opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
+                return;
+            }
+        }
+    };
 #endif /* USE_JPWL */
 
-  if (compno >= numcomps) {
-    opj_event_msg(j2k->cinfo, EVT_ERROR,
-      "bad component number in RGN (%d out of a maximum of %d)\n",
-      compno, j2k->image->numcomps);
-    return;
-  }
+    if (compno >= numcomps) {
+        opj_event_msg(j2k->cinfo, EVT_ERROR,
+                      "bad component number in RGN (%d out of a maximum of %d)\n",
+                      compno, j2k->image->numcomps);
+        return;
+    }
 
-       tcp->tccps[compno].roishift = cio_read(cio, 1);                         /* SPrgn */
+    tcp->tccps[compno].roishift = cio_read(cio, 1);             /* SPrgn */
 }
 
-static void j2k_write_eoc(opj_j2k_t *j2k) {
-       opj_cio_t *cio = j2k->cio;
-       /* opj_event_msg(j2k->cinfo, "%.8x: EOC\n", cio_tell(cio) + j2k->pos_correction); */
-       cio_write(cio, J2K_MS_EOC, 2);
+static void j2k_write_eoc(opj_j2k_t *j2k)
+{
+    opj_cio_t *cio = j2k->cio;
+    /* opj_event_msg(j2k->cinfo, "%.8x: EOC\n", cio_tell(cio) + j2k->pos_correction); */
+    cio_write(cio, J2K_MS_EOC, 2);
 
-/* UniPG>> */
+    /* UniPG>> */
 #ifdef USE_JPWL
-       /* update markers struct */
-       j2k_add_marker(j2k->cstr_info, J2K_MS_EOC, cio_tell(cio) - 2, 2);
+    /* update markers struct */
+    j2k_add_marker(j2k->cstr_info, J2K_MS_EOC, cio_tell(cio) - 2, 2);
 #endif /* USE_JPWL */
-/* <<UniPG */
+    /* <<UniPG */
 }
 
-static void j2k_read_eoc(opj_j2k_t *j2k) {
-       int i, tileno;
-       opj_bool success = OPJ_FALSE;
-
-       /* if packets should be decoded */
-       if (j2k->cp->limit_decoding != DECODE_ALL_BUT_PACKETS) {
-               opj_tcd_t *tcd = tcd_create(j2k->cinfo);
-               tcd_malloc_decode(tcd, j2k->image, j2k->cp);
-               for (i = 0; i < j2k->cp->tileno_size; i++) {
-                       tcd_malloc_decode_tile(tcd, j2k->image, j2k->cp, i, j2k->cstr_info);
-                       if (j2k->cp->tileno[i] != -1)
-                       {
-                               tileno = j2k->cp->tileno[i];
-                               success = tcd_decode_tile(tcd, j2k->tile_data[tileno], j2k->tile_len[tileno], tileno, j2k->cstr_info);
-                               opj_free(j2k->tile_data[tileno]);
-                               j2k->tile_data[tileno] = NULL;
-                               tcd_free_decode_tile(tcd, i);
-                       }
-                       else
-                               success = OPJ_FALSE;
-                       if (success == OPJ_FALSE) {
-                               j2k->state |= J2K_STATE_ERR;
-                               break;
-                       }
-               }
-               tcd_free_decode(tcd);
-               tcd_destroy(tcd);
-       }
-       /* if packets should not be decoded  */
-       else {
-               for (i = 0; i < j2k->cp->tileno_size; i++) {
-                       tileno = j2k->cp->tileno[i];
-                       opj_free(j2k->tile_data[tileno]);
-                       j2k->tile_data[tileno] = NULL;
-               }
-       }       
-       if (j2k->state & J2K_STATE_ERR)
-               j2k->state = J2K_STATE_MT + J2K_STATE_ERR;
-       else
-               j2k->state = J2K_STATE_MT; 
+static void j2k_read_eoc(opj_j2k_t *j2k)
+{
+    int i, tileno;
+    opj_bool success = OPJ_FALSE;
+
+    /* if packets should be decoded */
+    if (j2k->cp->limit_decoding != DECODE_ALL_BUT_PACKETS) {
+        opj_tcd_t *tcd = tcd_create(j2k->cinfo);
+        tcd_malloc_decode(tcd, j2k->image, j2k->cp);
+        for (i = 0; i < j2k->cp->tileno_size; i++) {
+            tcd_malloc_decode_tile(tcd, j2k->image, j2k->cp, i, j2k->cstr_info);
+            if (j2k->cp->tileno[i] != -1) {
+                tileno = j2k->cp->tileno[i];
+                success = tcd_decode_tile(tcd, j2k->tile_data[tileno], j2k->tile_len[tileno],
+                                          tileno, j2k->cstr_info);
+                opj_free(j2k->tile_data[tileno]);
+                j2k->tile_data[tileno] = NULL;
+                tcd_free_decode_tile(tcd, i);
+            } else {
+                success = OPJ_FALSE;
+            }
+            if (success == OPJ_FALSE) {
+                j2k->state |= J2K_STATE_ERR;
+                break;
+            }
+        }
+        tcd_free_decode(tcd);
+        tcd_destroy(tcd);
+    }
+    /* if packets should not be decoded  */
+    else {
+        for (i = 0; i < j2k->cp->tileno_size; i++) {
+            tileno = j2k->cp->tileno[i];
+            opj_free(j2k->tile_data[tileno]);
+            j2k->tile_data[tileno] = NULL;
+        }
+    }
+    if (j2k->state & J2K_STATE_ERR) {
+        j2k->state = J2K_STATE_MT + J2K_STATE_ERR;
+    } else {
+        j2k->state = J2K_STATE_MT;
+    }
 }
 
 typedef struct opj_dec_mstabent {
-       /** marker value */
-       int id;
-       /** value of the state when the marker can appear */
-       int states;
-       /** action linked to the marker */
-       void (*handler) (opj_j2k_t *j2k);
+    /** marker value */
+    int id;
+    /** value of the state when the marker can appear */
+    int states;
+    /** action linked to the marker */
+    void (*handler)(opj_j2k_t *j2k);
 } opj_dec_mstabent_t;
 
 opj_dec_mstabent_t j2k_dec_mstab[] = {
-  {J2K_MS_SOC, J2K_STATE_MHSOC, j2k_read_soc},
-  {J2K_MS_SOT, J2K_STATE_MH | J2K_STATE_TPHSOT, j2k_read_sot},
-  {J2K_MS_SOD, J2K_STATE_TPH, j2k_read_sod},
-  {J2K_MS_EOC, J2K_STATE_TPHSOT, j2k_read_eoc},
-  {J2K_MS_SIZ, J2K_STATE_MHSIZ, j2k_read_siz},
-  {J2K_MS_COD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_cod},
-  {J2K_MS_COC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_coc},
-  {J2K_MS_RGN, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_rgn},
-  {J2K_MS_QCD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_qcd},
-  {J2K_MS_QCC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_qcc},
-  {J2K_MS_POC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_poc},
-  {J2K_MS_TLM, J2K_STATE_MH, j2k_read_tlm},
-  {J2K_MS_PLM, J2K_STATE_MH, j2k_read_plm},
-  {J2K_MS_PLT, J2K_STATE_TPH, j2k_read_plt},
-  {J2K_MS_PPM, J2K_STATE_MH, j2k_read_ppm},
-  {J2K_MS_PPT, J2K_STATE_TPH, j2k_read_ppt},
-  {J2K_MS_SOP, 0, 0},
-  {J2K_MS_CRG, J2K_STATE_MH, j2k_read_crg},
-  {J2K_MS_COM, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_com},
+    {J2K_MS_SOC, J2K_STATE_MHSOC, j2k_read_soc},
+    {J2K_MS_SOT, J2K_STATE_MH | J2K_STATE_TPHSOT, j2k_read_sot},
+    {J2K_MS_SOD, J2K_STATE_TPH, j2k_read_sod},
+    {J2K_MS_EOC, J2K_STATE_TPHSOT, j2k_read_eoc},
+    {J2K_MS_SIZ, J2K_STATE_MHSIZ, j2k_read_siz},
+    {J2K_MS_COD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_cod},
+    {J2K_MS_COC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_coc},
+    {J2K_MS_RGN, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_rgn},
+    {J2K_MS_QCD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_qcd},
+    {J2K_MS_QCC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_qcc},
+    {J2K_MS_POC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_poc},
+    {J2K_MS_TLM, J2K_STATE_MH, j2k_read_tlm},
+    {J2K_MS_PLM, J2K_STATE_MH, j2k_read_plm},
+    {J2K_MS_PLT, J2K_STATE_TPH, j2k_read_plt},
+    {J2K_MS_PPM, J2K_STATE_MH, j2k_read_ppm},
+    {J2K_MS_PPT, J2K_STATE_TPH, j2k_read_ppt},
+    {J2K_MS_SOP, 0, 0},
+    {J2K_MS_CRG, J2K_STATE_MH, j2k_read_crg},
+    {J2K_MS_COM, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_com},
 
 #ifdef USE_JPWL
-  {J2K_MS_EPC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_epc},
-  {J2K_MS_EPB, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_epb},
-  {J2K_MS_ESD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_esd},
-  {J2K_MS_RED, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_red},
+    {J2K_MS_EPC, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_epc},
+    {J2K_MS_EPB, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_epb},
+    {J2K_MS_ESD, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_esd},
+    {J2K_MS_RED, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_red},
 #endif /* USE_JPWL */
 #ifdef USE_JPSEC
-  {J2K_MS_SEC, J2K_STATE_MH, j2k_read_sec},
-  {J2K_MS_INSEC, 0, j2k_read_insec},
+    {J2K_MS_SEC, J2K_STATE_MH, j2k_read_sec},
+    {J2K_MS_INSEC, 0, j2k_read_insec},
 #endif /* USE_JPSEC */
 
-  {0, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_unk}
+    {0, J2K_STATE_MH | J2K_STATE_TPH, j2k_read_unk}
 };
 
-static void j2k_read_unk(opj_j2k_t *j2k) {
-       opj_event_msg(j2k->cinfo, EVT_WARNING, "Unknown marker\n");
+static void j2k_read_unk(opj_j2k_t *j2k)
+{
+    opj_event_msg(j2k->cinfo, EVT_WARNING, "Unknown marker\n");
 
 #ifdef USE_JPWL
-       if (j2k->cp->correct) {
-               int m = 0, id, i;
-               int min_id = 0, min_dist = 17, cur_dist = 0, tmp_id;
-               cio_seek(j2k->cio, cio_tell(j2k->cio) - 2);
-               id = cio_read(j2k->cio, 2);
-               opj_event_msg(j2k->cinfo, EVT_ERROR,
-                       "JPWL: really don't know this marker %x\n",
-                       id);
-               if (!JPWL_ASSUME) {
-                       opj_event_msg(j2k->cinfo, EVT_ERROR,
-                               "- possible synch loss due to uncorrectable codestream errors => giving up\n");
-                       return;
-               }
-               /* OK, activate this at your own risk!!! */
-               /* we look for the marker at the minimum hamming distance from this */
-               while (j2k_dec_mstab[m].id) {
-                       
-                       /* 1's where they differ */
-                       tmp_id = j2k_dec_mstab[m].id ^ id;
-
-                       /* compute the hamming distance between our id and the current */
-                       cur_dist = 0;
-                       for (i = 0; i < 16; i++) {
-                               if ((tmp_id >> i) & 0x0001) {
-                                       cur_dist++;
-                               }
-                       }
-
-                       /* if current distance is smaller, set the minimum */
-                       if (cur_dist < min_dist) {
-                               min_dist = cur_dist;
-                               min_id = j2k_dec_mstab[m].id;
-                       }
-                       
-                       /* jump to the next marker */
-                       m++;
-               }
-
-               /* do we substitute the marker? */
-               if (min_dist < JPWL_MAXIMUM_HAMMING) {
-                       opj_event_msg(j2k->cinfo, EVT_ERROR,
-                               "- marker %x is at distance %d from the read %x\n",
-                               min_id, min_dist, id);
-                       opj_event_msg(j2k->cinfo, EVT_ERROR,
-                               "- trying to substitute in place and crossing fingers!\n");
-                       cio_seek(j2k->cio, cio_tell(j2k->cio) - 2);
-                       cio_write(j2k->cio, min_id, 2);
-
-                       /* rewind */
-                       cio_seek(j2k->cio, cio_tell(j2k->cio) - 2);
-
-               }
-
-       };
+    if (j2k->cp->correct) {
+        int m = 0, id, i;
+        int min_id = 0, min_dist = 17, cur_dist = 0, tmp_id;
+        cio_seek(j2k->cio, cio_tell(j2k->cio) - 2);
+        id = cio_read(j2k->cio, 2);
+        opj_event_msg(j2k->cinfo, EVT_ERROR,
+                      "JPWL: really don't know this marker %x\n",
+                      id);
+        if (!JPWL_ASSUME) {
+            opj_event_msg(j2k->cinfo, EVT_ERROR,
+                          "- possible synch loss due to uncorrectable codestream errors => giving up\n");
+            return;
+        }
+        /* OK, activate this at your own risk!!! */
+        /* we look for the marker at the minimum hamming distance from this */
+        while (j2k_dec_mstab[m].id) {
+
+            /* 1's where they differ */
+            tmp_id = j2k_dec_mstab[m].id ^ id;
+
+            /* compute the hamming distance between our id and the current */
+            cur_dist = 0;
+            for (i = 0; i < 16; i++) {
+                if ((tmp_id >> i) & 0x0001) {
+                    cur_dist++;
+                }
+            }
+
+            /* if current distance is smaller, set the minimum */
+            if (cur_dist < min_dist) {
+                min_dist = cur_dist;
+                min_id = j2k_dec_mstab[m].id;
+            }
+
+            /* jump to the next marker */
+            m++;
+        }
+
+        /* do we substitute the marker? */
+        if (min_dist < JPWL_MAXIMUM_HAMMING) {
+            opj_event_msg(j2k->cinfo, EVT_ERROR,
+                          "- marker %x is at distance %d from the read %x\n",
+                          min_id, min_dist, id);
+            opj_event_msg(j2k->cinfo, EVT_ERROR,
+                          "- trying to substitute in place and crossing fingers!\n");
+            cio_seek(j2k->cio, cio_tell(j2k->cio) - 2);
+            cio_write(j2k->cio, min_id, 2);
+
+            /* rewind */
+            cio_seek(j2k->cio, cio_tell(j2k->cio) - 2);
+
+        }
+
+    };
 #endif /* USE_JPWL */
 
 }
@@ -1778,45 +1878,49 @@ static void j2k_read_unk(opj_j2k_t *j2k) {
 Read the lookup table containing all the marker, status and action
 @param id Marker value
 */
-static opj_dec_mstabent_t *j2k_dec_mstab_lookup(int id) {
-       opj_dec_mstabent_t *e;
-       for (e = j2k_dec_mstab; e->id != 0; e++) {
-               if (e->id == id) {
-                       break;
-               }
-       }
-       return e;
+static opj_dec_mstabent_t *j2k_dec_mstab_lookup(int id)
+{
+    opj_dec_mstabent_t *e;
+    for (e = j2k_dec_mstab; e->id != 0; e++) {
+        if (e->id == id) {
+            break;
+        }
+    }
+    return e;
 }
 
 /* ----------------------------------------------------------------------- */
 /* J2K / JPT decoder interface                                             */
 /* ----------------------------------------------------------------------- */
 
-opj_j2k_t* j2k_create_decompress(opj_common_ptr cinfo) {
-       opj_j2k_t *j2k = (opj_j2k_t*) opj_calloc(1, sizeof(opj_j2k_t));
-       if(!j2k)
-               return NULL;
+opj_j2k_t* j2k_create_decompress(opj_common_ptr cinfo)
+{
+    opj_j2k_t *j2k = (opj_j2k_t*) opj_calloc(1, sizeof(opj_j2k_t));
+    if (!j2k) {
+        return NULL;
+    }
 
-       j2k->default_tcp = (opj_tcp_t*) opj_calloc(1, sizeof(opj_tcp_t));
-       if(!j2k->default_tcp) {
-               opj_free(j2k);
-               return NULL;
-       }
+    j2k->default_tcp = (opj_tcp_t*) opj_calloc(1, sizeof(opj_tcp_t));
+    if (!j2k->default_tcp) {
+        opj_free(j2k);
+        return NULL;
+    }
 
-       j2k->cinfo = cinfo;
-       j2k->tile_data = NULL;
+    j2k->cinfo = cinfo;
+    j2k->tile_data = NULL;
 
-       return j2k;
+    return j2k;
 }
 
-void j2k_destroy_decompress(opj_j2k_t *j2k) {
-       int i = 0;
+void j2k_destroy_decompress(opj_j2k_t *j2k)
+{
+    int i = 0;
 
-       if(j2k->tile_len != NULL) {
-               opj_free(j2k->tile_len);
-       }
-       if(j2k->tile_data != NULL) {
-        if(j2k->cp != NULL) {
+    if (j2k->tile_len != NULL) {
+        opj_free(j2k->tile_len);
+    }
+    if (j2k->tile_data != NULL) {
+        if (j2k->cp != NULL) {
             for (i = 0; i < j2k->cp->tileno_size; i++) {
                 int tileno = j2k->cp->tileno[i];
                 opj_free(j2k->tile_data[tileno]);
@@ -1824,813 +1928,851 @@ void j2k_destroy_decompress(opj_j2k_t *j2k) {
             }
         }
 
-               opj_free(j2k->tile_data);
-       }
-       if(j2k->default_tcp != NULL) {
-               opj_tcp_t *default_tcp = j2k->default_tcp;
-               if(default_tcp->ppt_data_first != NULL) {
-                       opj_free(default_tcp->ppt_data_first);
-               }
-               if(j2k->default_tcp->tccps != NULL) {
-                       opj_free(j2k->default_tcp->tccps);
-               }
-               opj_free(j2k->default_tcp);
-       }
-       if(j2k->cp != NULL) {
-               opj_cp_t *cp = j2k->cp;
-               if(cp->tcps != NULL) {
-                       for(i = 0; i < cp->tw * cp->th; i++) {
-                               if(cp->tcps[i].ppt_data_first != NULL) {
-                                       opj_free(cp->tcps[i].ppt_data_first);
-                               }
-                               if(cp->tcps[i].tccps != NULL) {
-                                       opj_free(cp->tcps[i].tccps);
-                               }
-                       }
-                       opj_free(cp->tcps);
-               }
-               if(cp->ppm_data_first != NULL) {
-                       opj_free(cp->ppm_data_first);
-               }
-               if(cp->tileno != NULL) {
-                       opj_free(cp->tileno);  
-               }
-               if(cp->comment != NULL) {
-                       opj_free(cp->comment);
-               }
-
-               opj_free(cp);
-       }
-       opj_free(j2k);
+        opj_free(j2k->tile_data);
+    }
+    if (j2k->default_tcp != NULL) {
+        opj_tcp_t *default_tcp = j2k->default_tcp;
+        if (default_tcp->ppt_data_first != NULL) {
+            opj_free(default_tcp->ppt_data_first);
+        }
+        if (j2k->default_tcp->tccps != NULL) {
+            opj_free(j2k->default_tcp->tccps);
+        }
+        opj_free(j2k->default_tcp);
+    }
+    if (j2k->cp != NULL) {
+        opj_cp_t *cp = j2k->cp;
+        if (cp->tcps != NULL) {
+            for (i = 0; i < cp->tw * cp->th; i++) {
+                if (cp->tcps[i].ppt_data_first != NULL) {
+                    opj_free(cp->tcps[i].ppt_data_first);
+                }
+                if (cp->tcps[i].tccps != NULL) {
+                    opj_free(cp->tcps[i].tccps);
+                }
+            }
+            opj_free(cp->tcps);
+        }
+        if (cp->ppm_data_first != NULL) {
+            opj_free(cp->ppm_data_first);
+        }
+        if (cp->tileno != NULL) {
+            opj_free(cp->tileno);
+        }
+        if (cp->comment != NULL) {
+            opj_free(cp->comment);
+        }
+
+        opj_free(cp);
+    }
+    opj_free(j2k);
 }
 
-void j2k_setup_decoder(opj_j2k_t *j2k, opj_dparameters_t *parameters) {
-       if(j2k && parameters) {
-               /* create and initialize the coding parameters structure */
-               opj_cp_t *cp = (opj_cp_t*) opj_calloc(1, sizeof(opj_cp_t));
-               cp->reduce = parameters->cp_reduce;     
-               cp->layer = parameters->cp_layer;
-               cp->limit_decoding = parameters->cp_limit_decoding;
+void j2k_setup_decoder(opj_j2k_t *j2k, opj_dparameters_t *parameters)
+{
+    if (j2k && parameters) {
+        /* create and initialize the coding parameters structure */
+        opj_cp_t *cp = (opj_cp_t*) opj_calloc(1, sizeof(opj_cp_t));
+        cp->reduce = parameters->cp_reduce;
+        cp->layer = parameters->cp_layer;
+        cp->limit_decoding = parameters->cp_limit_decoding;
 
 #ifdef USE_JPWL
-               cp->correct = parameters->jpwl_correct;
-               cp->exp_comps = parameters->jpwl_exp_comps;
-               cp->max_tiles = parameters->jpwl_max_tiles;
+        cp->correct = parameters->jpwl_correct;
+        cp->exp_comps = parameters->jpwl_exp_comps;
+        cp->max_tiles = parameters->jpwl_max_tiles;
 #endif /* USE_JPWL */
 
 
-               /* keep a link to cp so that we can destroy it later in j2k_destroy_decompress */
-               j2k->cp = cp;
-       }
+        /* keep a link to cp so that we can destroy it later in j2k_destroy_decompress */
+        j2k->cp = cp;
+    }
 }
 
-opj_image_t* j2k_decode(opj_j2k_t *j2k, opj_cio_t *cio, opj_codestream_info_t *cstr_info) {
-       opj_image_t *image = NULL;
+opj_image_t* j2k_decode(opj_j2k_t *j2k, opj_cio_t *cio,
+                        opj_codestream_info_t *cstr_info)
+{
+    opj_image_t *image = NULL;
 
-       opj_common_ptr cinfo = j2k->cinfo;      
+    opj_common_ptr cinfo = j2k->cinfo;
 
-       j2k->cio = cio;
-       j2k->cstr_info = cstr_info;
-       if (cstr_info)
-               memset(cstr_info, 0, sizeof(opj_codestream_info_t));
+    j2k->cio = cio;
+    j2k->cstr_info = cstr_info;
+    if (cstr_info) {
+        memset(cstr_info, 0, sizeof(opj_codestream_info_t));
+    }
 
-       /* create an empty image */
-       image = opj_image_create0();
-       j2k->image = image;
+    /* create an empty image */
+    image = opj_image_create0();
+    j2k->image = image;
 
-       j2k->state = J2K_STATE_MHSOC;
+    j2k->state = J2K_STATE_MHSOC;
 
-       for (;;) {
-               opj_dec_mstabent_t *e;
-               int id = cio_read(cio, 2);
+    for (;;) {
+        opj_dec_mstabent_t *e;
+        int id = cio_read(cio, 2);
 
 #ifdef USE_JPWL
-               /* we try to honor JPWL correction power */
-               if (j2k->cp->correct) {
-
-                       int orig_pos = cio_tell(cio);
-                       opj_bool status;
-
-                       /* call the corrector */
-                       status = jpwl_correct(j2k);
-
-                       /* go back to where you were */
-                       cio_seek(cio, orig_pos - 2);
-
-                       /* re-read the marker */
-                       id = cio_read(cio, 2);
-
-                       /* check whether it begins with ff */
-                       if (id >> 8 != 0xff) {
-                               opj_event_msg(cinfo, EVT_ERROR,
-                                       "JPWL: possible bad marker %x at %d\n",
-                                       id, cio_tell(cio) - 2);
-                               if (!JPWL_ASSUME) {
-                                       opj_image_destroy(image);
-                                       opj_event_msg(cinfo, EVT_ERROR, "JPWL: giving up\n");
-                                       return 0;
-                               }
-                               /* we try to correct */
-                               id = id | 0xff00;
-                               cio_seek(cio, cio_tell(cio) - 2);
-                               cio_write(cio, id, 2);
-                               opj_event_msg(cinfo, EVT_WARNING, "- trying to adjust this\n"
-                                       "- setting marker to %x\n",
-                                       id);
-                       }
-
-               }
+        /* we try to honor JPWL correction power */
+        if (j2k->cp->correct) {
+
+            int orig_pos = cio_tell(cio);
+            opj_bool status;
+
+            /* call the corrector */
+            status = jpwl_correct(j2k);
+
+            /* go back to where you were */
+            cio_seek(cio, orig_pos - 2);
+
+            /* re-read the marker */
+            id = cio_read(cio, 2);
+
+            /* check whether it begins with ff */
+            if (id >> 8 != 0xff) {
+                opj_event_msg(cinfo, EVT_ERROR,
+                              "JPWL: possible bad marker %x at %d\n",
+                              id, cio_tell(cio) - 2);
+                if (!JPWL_ASSUME) {
+                    opj_image_destroy(image);
+                    opj_event_msg(cinfo, EVT_ERROR, "JPWL: giving up\n");
+                    return 0;
+                }
+                /* we try to correct */
+                id = id | 0xff00;
+                cio_seek(cio, cio_tell(cio) - 2);
+                cio_write(cio, id, 2);
+                opj_event_msg(cinfo, EVT_WARNING, "- trying to adjust this\n"
+                              "- setting marker to %x\n",
+                              id);
+            }
+
+        }
 #endif /* USE_JPWL */
 
-               if (id >> 8 != 0xff) {
-               if(cio_numbytesleft(cio) != 0) /* not end of file reached and no EOC */
-          {
-               opj_event_msg(cinfo, EVT_ERROR, "%.8x: expected a marker instead of %x\n", cio_tell(cio) - 2, id);
-               opj_image_destroy(image);
-               return 0;
-          }
-               opj_event_msg(cinfo, EVT_WARNING, "%.8x: expected a marker instead of %x\n", cio_tell(cio) - 2, id);
-               j2k->state = J2K_STATE_NEOC;
-               break;
-               }
-               e = j2k_dec_mstab_lookup(id);
-               /* Check if the marker is known*/
-               if (!(j2k->state & e->states)) {
-                       opj_image_destroy(image);
-                       opj_event_msg(cinfo, EVT_ERROR, "%.8x: unexpected marker %x\n", cio_tell(cio) - 2, id);
-                       return 0;
-               }
-               /* Check if the decoding is limited to the main header*/
-               if (e->id == J2K_MS_SOT && j2k->cp->limit_decoding == LIMIT_TO_MAIN_HEADER) {
-                       opj_event_msg(cinfo, EVT_INFO, "Main Header decoded.\n");
-                       return image;
-               }               
-
-               if (e->handler) {
-                       (*e->handler)(j2k);
-               }
-               if (j2k->state & J2K_STATE_ERR) 
-        {
+        if (id >> 8 != 0xff) {
+            if (cio_numbytesleft(cio) != 0) { /* not end of file reached and no EOC */
+                opj_event_msg(cinfo, EVT_ERROR, "%.8x: expected a marker instead of %x\n",
+                              cio_tell(cio) - 2, id);
+                opj_image_destroy(image);
+                return 0;
+            }
+            opj_event_msg(cinfo, EVT_WARNING, "%.8x: expected a marker instead of %x\n",
+                          cio_tell(cio) - 2, id);
+            j2k->state = J2K_STATE_NEOC;
+            break;
+        }
+        e = j2k_dec_mstab_lookup(id);
+        /* Check if the marker is known*/
+        if (!(j2k->state & e->states)) {
+            opj_image_destroy(image);
+            opj_event_msg(cinfo, EVT_ERROR, "%.8x: unexpected marker %x\n",
+                          cio_tell(cio) - 2, id);
+            return 0;
+        }
+        /* Check if the decoding is limited to the main header*/
+        if (e->id == J2K_MS_SOT && j2k->cp->limit_decoding == LIMIT_TO_MAIN_HEADER) {
+            opj_event_msg(cinfo, EVT_INFO, "Main Header decoded.\n");
+            return image;
+        }
+
+        if (e->handler) {
+            (*e->handler)(j2k);
+        }
+        if (j2k->state & J2K_STATE_ERR) {
             opj_image_destroy(image);
-                       return NULL;    
-        }
-
-               if (j2k->state == J2K_STATE_MT) {
-                       break;
-               }
-               if (j2k->state == J2K_STATE_NEOC) {
-                       break;
-               }
-       }
-       if (j2k->state == J2K_STATE_NEOC) {
-               j2k_read_eoc(j2k);
-       }
-
-       if (j2k->state != J2K_STATE_MT) {
-               opj_event_msg(cinfo, EVT_WARNING, "Incomplete bitstream\n");
-       }
-       return image;
+            return NULL;
+        }
+
+        if (j2k->state == J2K_STATE_MT) {
+            break;
+        }
+        if (j2k->state == J2K_STATE_NEOC) {
+            break;
+        }
+    }
+    if (j2k->state == J2K_STATE_NEOC) {
+        j2k_read_eoc(j2k);
+    }
+
+    if (j2k->state != J2K_STATE_MT) {
+        opj_event_msg(cinfo, EVT_WARNING, "Incomplete bitstream\n");
+    }
+    return image;
 }
 
 /*
 * Read a JPT-stream and decode file
 *
 */
-opj_image_t* j2k_decode_jpt_stream(opj_j2k_t *j2k, opj_cio_t *cio,  opj_codestream_info_t *cstr_info) {
-       opj_image_t *image = NULL;
-       opj_jpt_msg_header_t header;
-       int position;
-       opj_common_ptr cinfo = j2k->cinfo;
-
-       OPJ_ARG_NOT_USED(cstr_info);
-
-       j2k->cio = cio;
-
-       /* create an empty image */
-       image = opj_image_create0();
-       j2k->image = image;
-
-       j2k->state = J2K_STATE_MHSOC;
-       
-       /* Initialize the header */
-       jpt_init_msg_header(&header);
-       /* Read the first header of the message */
-       jpt_read_msg_header(cinfo, cio, &header);
-       
-       position = cio_tell(cio);
-       if (header.Class_Id != 6) {     /* 6 : Main header data-bin message */
-               opj_image_destroy(image);
-               opj_event_msg(cinfo, EVT_ERROR, "[JPT-stream] : Expecting Main header first [class_Id %d] !\n", header.Class_Id);
-               return 0;
-       }
-       
-       for (;;) {
-               opj_dec_mstabent_t *e = NULL;
-               int id;
-               
-               if (!cio_numbytesleft(cio)) {
-                       j2k_read_eoc(j2k);
-                       return image;
-               }
-               /* data-bin read -> need to read a new header */
-               if ((unsigned int) (cio_tell(cio) - position) == header.Msg_length) {
-                       jpt_read_msg_header(cinfo, cio, &header);
-                       position = cio_tell(cio);
-                       if (header.Class_Id != 4) {     /* 4 : Tile data-bin message */
-                               opj_image_destroy(image);
-                               opj_event_msg(cinfo, EVT_ERROR, "[JPT-stream] : Expecting Tile info !\n");
-                               return 0;
-                       }
-               }
-               
-               id = cio_read(cio, 2);
-               if (id >> 8 != 0xff) {
-        if(cio_numbytesleft(cio) != 0) /* no end of file reached and no EOC */
-         {
-               opj_event_msg(cinfo, EVT_ERROR, "%.8x: expected a marker instead of %x\n", cio_tell(cio) - 2, id);
-               opj_image_destroy(image);
-               return 0;
-         }
-               opj_event_msg(cinfo, EVT_WARNING, "%.8x: expected a marker instead of %x\n", cio_tell(cio) - 2, id);
-               j2k->state = J2K_STATE_NEOC;
-               break;
-               }
-               e = j2k_dec_mstab_lookup(id);
-               if (!(j2k->state & e->states)) {
-                       opj_image_destroy(image);
-                       opj_event_msg(cinfo, EVT_ERROR, "%.8x: unexpected marker %x\n", cio_tell(cio) - 2, id);
-                       return 0;
-               }
-               if (e->handler) {
-                       (*e->handler)(j2k);
-               }
-               if (j2k->state == J2K_STATE_MT) {
-                       break;
-               }
-               if (j2k->state == J2K_STATE_NEOC) {
-                       break;
-               }
-       }
-       if (j2k->state == J2K_STATE_NEOC) {
-               j2k_read_eoc(j2k);
-       }
-       
-       if (j2k->state != J2K_STATE_MT) {
-               opj_event_msg(cinfo, EVT_WARNING, "Incomplete bitstream\n");
-       }
-
-       return image;
+opj_image_t* j2k_decode_jpt_stream(opj_j2k_t *j2k, opj_cio_t *cio,
+                                   opj_codestream_info_t *cstr_info)
+{
+    opj_image_t *image = NULL;
+    opj_jpt_msg_header_t header;
+    int position;
+    opj_common_ptr cinfo = j2k->cinfo;
+
+    OPJ_ARG_NOT_USED(cstr_info);
+
+    j2k->cio = cio;
+
+    /* create an empty image */
+    image = opj_image_create0();
+    j2k->image = image;
+
+    j2k->state = J2K_STATE_MHSOC;
+
+    /* Initialize the header */
+    jpt_init_msg_header(&header);
+    /* Read the first header of the message */
+    jpt_read_msg_header(cinfo, cio, &header);
+
+    position = cio_tell(cio);
+    if (header.Class_Id != 6) { /* 6 : Main header data-bin message */
+        opj_image_destroy(image);
+        opj_event_msg(cinfo, EVT_ERROR,
+                      "[JPT-stream] : Expecting Main header first [class_Id %d] !\n",
+                      header.Class_Id);
+        return 0;
+    }
+
+    for (;;) {
+        opj_dec_mstabent_t *e = NULL;
+        int id;
+
+        if (!cio_numbytesleft(cio)) {
+            j2k_read_eoc(j2k);
+            return image;
+        }
+        /* data-bin read -> need to read a new header */
+        if ((unsigned int)(cio_tell(cio) - position) == header.Msg_length) {
+            jpt_read_msg_header(cinfo, cio, &header);
+            position = cio_tell(cio);
+            if (header.Class_Id != 4) { /* 4 : Tile data-bin message */
+                opj_image_destroy(image);
+                opj_event_msg(cinfo, EVT_ERROR, "[JPT-stream] : Expecting Tile info !\n");
+                return 0;
+            }
+        }
+
+        id = cio_read(cio, 2);
+        if (id >> 8 != 0xff) {
+            if (cio_numbytesleft(cio) != 0) { /* no end of file reached and no EOC */
+                opj_event_msg(cinfo, EVT_ERROR, "%.8x: expected a marker instead of %x\n",
+                              cio_tell(cio) - 2, id);
+                opj_image_destroy(image);
+                return 0;
+            }
+            opj_event_msg(cinfo, EVT_WARNING, "%.8x: expected a marker instead of %x\n",
+                          cio_tell(cio) - 2, id);
+            j2k->state = J2K_STATE_NEOC;
+            break;
+        }
+        e = j2k_dec_mstab_lookup(id);
+        if (!(j2k->state & e->states)) {
+            opj_image_destroy(image);
+            opj_event_msg(cinfo, EVT_ERROR, "%.8x: unexpected marker %x\n",
+                          cio_tell(cio) - 2, id);
+            return 0;
+        }
+        if (e->handler) {
+            (*e->handler)(j2k);
+        }
+        if (j2k->state == J2K_STATE_MT) {
+            break;
+        }
+        if (j2k->state == J2K_STATE_NEOC) {
+            break;
+        }
+    }
+    if (j2k->state == J2K_STATE_NEOC) {
+        j2k_read_eoc(j2k);
+    }
+
+    if (j2k->state != J2K_STATE_MT) {
+        opj_event_msg(cinfo, EVT_WARNING, "Incomplete bitstream\n");
+    }
+
+    return image;
 }
 
 /* ----------------------------------------------------------------------- */
 /* J2K encoder interface                                                       */
 /* ----------------------------------------------------------------------- */
 
-opj_j2k_t* j2k_create_compress(opj_common_ptr cinfo) {
-       opj_j2k_t *j2k = (opj_j2k_t*) opj_calloc(1, sizeof(opj_j2k_t));
-       if(j2k) {
-               j2k->cinfo = cinfo;
-       }
-       return j2k;
+opj_j2k_t* j2k_create_compress(opj_common_ptr cinfo)
+{
+    opj_j2k_t *j2k = (opj_j2k_t*) opj_calloc(1, sizeof(opj_j2k_t));
+    if (j2k) {
+        j2k->cinfo = cinfo;
+    }
+    return j2k;
 }
 
-void j2k_destroy_compress(opj_j2k_t *j2k) {
-       int tileno;
-
-       if(!j2k) return;
-       if(j2k->cp != NULL) {
-               opj_cp_t *cp = j2k->cp;
-
-               if(cp->comment) {
-                       opj_free(cp->comment);
-               }
-               if(cp->matrice) {
-                       opj_free(cp->matrice);
-               }
-               for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
-                       opj_free(cp->tcps[tileno].tccps);
-               }
-               opj_free(cp->tcps);
-               opj_free(cp);
-       }
-
-       opj_free(j2k);
+void j2k_destroy_compress(opj_j2k_t *j2k)
+{
+    int tileno;
+
+    if (!j2k) {
+        return;
+    }
+    if (j2k->cp != NULL) {
+        opj_cp_t *cp = j2k->cp;
+
+        if (cp->comment) {
+            opj_free(cp->comment);
+        }
+        if (cp->matrice) {
+            opj_free(cp->matrice);
+        }
+        for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
+            opj_free(cp->tcps[tileno].tccps);
+        }
+        opj_free(cp->tcps);
+        opj_free(cp);
+    }
+
+    opj_free(j2k);
 }
 
-void j2k_setup_encoder(opj_j2k_t *j2k, opj_cparameters_t *parameters, opj_image_t *image) {
-       int i, j, tileno, numpocs_tile;
-       opj_cp_t *cp = NULL;
-
-       if(!j2k || !parameters || ! image) {
-               return;
-       }
-
-       /* create and initialize the coding parameters structure */
-       cp = (opj_cp_t*) opj_calloc(1, sizeof(opj_cp_t));
-
-       /* keep a link to cp so that we can destroy it later in j2k_destroy_compress */
-       j2k->cp = cp;
-
-       /* set default values for cp */
-       cp->tw = 1;
-       cp->th = 1;
-
-       /* 
-       copy user encoding parameters 
-       */
-       cp->cinema = parameters->cp_cinema;
-       cp->max_comp_size =     parameters->max_comp_size;
-       cp->rsiz   = parameters->cp_rsiz;
-       cp->disto_alloc = parameters->cp_disto_alloc;
-       cp->fixed_alloc = parameters->cp_fixed_alloc;
-       cp->fixed_quality = parameters->cp_fixed_quality;
-
-       /* mod fixed_quality */
-       if(parameters->cp_matrice) {
-               size_t array_size = parameters->tcp_numlayers * parameters->numresolution * 3 * sizeof(int);
-               cp->matrice = (int *) opj_malloc(array_size);
-               memcpy(cp->matrice, parameters->cp_matrice, array_size);
-       }
-
-       /* tiles */
-       cp->tdx = parameters->cp_tdx;
-       cp->tdy = parameters->cp_tdy;
-
-       /* tile offset */
-       cp->tx0 = parameters->cp_tx0;
-       cp->ty0 = parameters->cp_ty0;
-
-       /* comment string */
-       if(parameters->cp_comment) {
-               cp->comment = (char*)opj_malloc(strlen(parameters->cp_comment) + 1);
-               if(cp->comment) {
-                       strcpy(cp->comment, parameters->cp_comment);
-               }
-       }
-
-       /*
-       calculate other encoding parameters
-       */
-
-       if (parameters->tile_size_on) {
-               cp->tw = int_ceildiv(image->x1 - cp->tx0, cp->tdx);
-               cp->th = int_ceildiv(image->y1 - cp->ty0, cp->tdy);
-       } else {
-               cp->tdx = image->x1 - cp->tx0;
-               cp->tdy = image->y1 - cp->ty0;
-       }
-
-       if(parameters->tp_on){
-               cp->tp_flag = parameters->tp_flag;
-               cp->tp_on = 1;
-       }
-       
-       cp->img_size = 0;
-       for(i=0;i<image->numcomps ;i++){
-       cp->img_size += (image->comps[i].w *image->comps[i].h * image->comps[i].prec);
-       }
+void j2k_setup_encoder(opj_j2k_t *j2k, opj_cparameters_t *parameters,
+                       opj_image_t *image)
+{
+    int i, j, tileno, numpocs_tile;
+    opj_cp_t *cp = NULL;
+
+    if (!j2k || !parameters || ! image) {
+        return;
+    }
+
+    /* create and initialize the coding parameters structure */
+    cp = (opj_cp_t*) opj_calloc(1, sizeof(opj_cp_t));
+
+    /* keep a link to cp so that we can destroy it later in j2k_destroy_compress */
+    j2k->cp = cp;
+
+    /* set default values for cp */
+    cp->tw = 1;
+    cp->th = 1;
+
+    /*
+    copy user encoding parameters
+    */
+    cp->cinema = parameters->cp_cinema;
+    cp->max_comp_size = parameters->max_comp_size;
+    cp->rsiz   = parameters->cp_rsiz;
+    cp->disto_alloc = parameters->cp_disto_alloc;
+    cp->fixed_alloc = parameters->cp_fixed_alloc;
+    cp->fixed_quality = parameters->cp_fixed_quality;
+
+    /* mod fixed_quality */
+    if (parameters->cp_matrice) {
+        size_t array_size = parameters->tcp_numlayers * parameters->numresolution * 3 *
+                            sizeof(int);
+        cp->matrice = (int *) opj_malloc(array_size);
+        memcpy(cp->matrice, parameters->cp_matrice, array_size);
+    }
+
+    /* tiles */
+    cp->tdx = parameters->cp_tdx;
+    cp->tdy = parameters->cp_tdy;
+
+    /* tile offset */
+    cp->tx0 = parameters->cp_tx0;
+    cp->ty0 = parameters->cp_ty0;
+
+    /* comment string */
+    if (parameters->cp_comment) {
+        cp->comment = (char*)opj_malloc(strlen(parameters->cp_comment) + 1);
+        if (cp->comment) {
+            strcpy(cp->comment, parameters->cp_comment);
+        }
+    }
+
+    /*
+    calculate other encoding parameters
+    */
+
+    if (parameters->tile_size_on) {
+        cp->tw = int_ceildiv(image->x1 - cp->tx0, cp->tdx);
+        cp->th = int_ceildiv(image->y1 - cp->ty0, cp->tdy);
+    } else {
+        cp->tdx = image->x1 - cp->tx0;
+        cp->tdy = image->y1 - cp->ty0;
+    }
+
+    if (parameters->tp_on) {
+        cp->tp_flag = parameters->tp_flag;
+        cp->tp_on = 1;
+    }
+
+    cp->img_size = 0;
+    for (i = 0; i < image->numcomps ; i++) {
+        cp->img_size += (image->comps[i].w * image->comps[i].h * image->comps[i].prec);
+    }
 
 
 #ifdef USE_JPWL
-       /*
-       calculate JPWL encoding parameters
-       */
-
-       if (parameters->jpwl_epc_on) {
-               int i;
-
-               /* set JPWL on */
-               cp->epc_on = OPJ_TRUE;
-               cp->info_on = OPJ_FALSE; /* no informative technique */
-
-               /* set EPB on */
-               if ((parameters->jpwl_hprot_MH > 0) || (parameters->jpwl_hprot_TPH[0] > 0)) {
-                       cp->epb_on = OPJ_TRUE;
-                       
-                       cp->hprot_MH = parameters->jpwl_hprot_MH;
-                       for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) {
-                               cp->hprot_TPH_tileno[i] = parameters->jpwl_hprot_TPH_tileno[i];
-                               cp->hprot_TPH[i] = parameters->jpwl_hprot_TPH[i];
-                       }
-                       /* if tile specs are not specified, copy MH specs */
-                       if (cp->hprot_TPH[0] == -1) {
-                               cp->hprot_TPH_tileno[0] = 0;
-                               cp->hprot_TPH[0] = parameters->jpwl_hprot_MH;
-                       }
-                       for (i = 0; i < JPWL_MAX_NO_PACKSPECS; i++) {
-                               cp->pprot_tileno[i] = parameters->jpwl_pprot_tileno[i];
-                               cp->pprot_packno[i] = parameters->jpwl_pprot_packno[i];
-                               cp->pprot[i] = parameters->jpwl_pprot[i];
-                       }
-               }
-
-               /* set ESD writing */
-               if ((parameters->jpwl_sens_size == 1) || (parameters->jpwl_sens_size == 2)) {
-                       cp->esd_on = OPJ_TRUE;
-
-                       cp->sens_size = parameters->jpwl_sens_size;
-                       cp->sens_addr = parameters->jpwl_sens_addr;
-                       cp->sens_range = parameters->jpwl_sens_range;
-
-                       cp->sens_MH = parameters->jpwl_sens_MH;
-                       for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) {
-                               cp->sens_TPH_tileno[i] = parameters->jpwl_sens_TPH_tileno[i];
-                               cp->sens_TPH[i] = parameters->jpwl_sens_TPH[i];
-                       }
-               }
-
-               /* always set RED writing to false: we are at the encoder */
-               cp->red_on = OPJ_FALSE;
-
-       } else {
-               cp->epc_on = OPJ_FALSE;
-       }
+    /*
+    calculate JPWL encoding parameters
+    */
+
+    if (parameters->jpwl_epc_on) {
+        int i;
+
+        /* set JPWL on */
+        cp->epc_on = OPJ_TRUE;
+        cp->info_on = OPJ_FALSE; /* no informative technique */
+
+        /* set EPB on */
+        if ((parameters->jpwl_hprot_MH > 0) || (parameters->jpwl_hprot_TPH[0] > 0)) {
+            cp->epb_on = OPJ_TRUE;
+
+            cp->hprot_MH = parameters->jpwl_hprot_MH;
+            for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) {
+                cp->hprot_TPH_tileno[i] = parameters->jpwl_hprot_TPH_tileno[i];
+                cp->hprot_TPH[i] = parameters->jpwl_hprot_TPH[i];
+            }
+            /* if tile specs are not specified, copy MH specs */
+            if (cp->hprot_TPH[0] == -1) {
+                cp->hprot_TPH_tileno[0] = 0;
+                cp->hprot_TPH[0] = parameters->jpwl_hprot_MH;
+            }
+            for (i = 0; i < JPWL_MAX_NO_PACKSPECS; i++) {
+                cp->pprot_tileno[i] = parameters->jpwl_pprot_tileno[i];
+                cp->pprot_packno[i] = parameters->jpwl_pprot_packno[i];
+                cp->pprot[i] = parameters->jpwl_pprot[i];
+            }
+        }
+
+        /* set ESD writing */
+        if ((parameters->jpwl_sens_size == 1) || (parameters->jpwl_sens_size == 2)) {
+            cp->esd_on = OPJ_TRUE;
+
+            cp->sens_size = parameters->jpwl_sens_size;
+            cp->sens_addr = parameters->jpwl_sens_addr;
+            cp->sens_range = parameters->jpwl_sens_range;
+
+            cp->sens_MH = parameters->jpwl_sens_MH;
+            for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) {
+                cp->sens_TPH_tileno[i] = parameters->jpwl_sens_TPH_tileno[i];
+                cp->sens_TPH[i] = parameters->jpwl_sens_TPH[i];
+            }
+        }
+
+        /* always set RED writing to false: we are at the encoder */
+        cp->red_on = OPJ_FALSE;
+
+    } else {
+        cp->epc_on = OPJ_FALSE;
+    }
 #endif /* USE_JPWL */
 
 
-       /* initialize the mutiple tiles */
-       /* ---------------------------- */
-       cp->tcps = (opj_tcp_t*) opj_calloc(cp->tw * cp->th, sizeof(opj_tcp_t));
-
-       for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
-               opj_tcp_t *tcp = &cp->tcps[tileno];
-               tcp->numlayers = parameters->tcp_numlayers;
-               for (j = 0; j < tcp->numlayers; j++) {
-                       if(cp->cinema){
-                               if (cp->fixed_quality) {
-                                       tcp->distoratio[j] = parameters->tcp_distoratio[j];
-                               }
-                               tcp->rates[j] = parameters->tcp_rates[j];
-                       }else{
-                               if (cp->fixed_quality) {        /* add fixed_quality */
-                                       tcp->distoratio[j] = parameters->tcp_distoratio[j];
-                               } else {
-                                       tcp->rates[j] = parameters->tcp_rates[j];
-                               }
-                       }
-               }
-               tcp->csty = parameters->csty;
-               tcp->prg = parameters->prog_order;
-               tcp->mct = parameters->tcp_mct; 
-
-               numpocs_tile = 0;
-               tcp->POC = 0;
-               if (parameters->numpocs) {
-                       /* initialisation of POC */
-                       tcp->POC = 1;
-                       for (i = 0; i < parameters->numpocs; i++) {
-                               if((tileno == parameters->POC[i].tile - 1) || (parameters->POC[i].tile == -1)) {
-                                       opj_poc_t *tcp_poc = &tcp->pocs[numpocs_tile];
-                                       tcp_poc->resno0         = parameters->POC[numpocs_tile].resno0;
-                                       tcp_poc->compno0        = parameters->POC[numpocs_tile].compno0;
-                                       tcp_poc->layno1         = parameters->POC[numpocs_tile].layno1;
-                                       tcp_poc->resno1         = parameters->POC[numpocs_tile].resno1;
-                                       tcp_poc->compno1        = parameters->POC[numpocs_tile].compno1;
-                                       tcp_poc->prg1           = parameters->POC[numpocs_tile].prg1;
-                                       tcp_poc->tile           = parameters->POC[numpocs_tile].tile;
-                                       numpocs_tile++;
-                               }
-                       }
-                       tcp->numpocs = numpocs_tile -1 ;
-               }else{ 
-                       tcp->numpocs = 0;
-               }
-
-               tcp->tccps = (opj_tccp_t*) opj_calloc(image->numcomps, sizeof(opj_tccp_t));
-
-               for (i = 0; i < image->numcomps; i++) {
-                       opj_tccp_t *tccp = &tcp->tccps[i];
-                       tccp->csty = parameters->csty & 0x01;   /* 0 => one precinct || 1 => custom precinct  */
-                       tccp->numresolutions = parameters->numresolution;
-                       tccp->cblkw = int_floorlog2(parameters->cblockw_init);
-                       tccp->cblkh = int_floorlog2(parameters->cblockh_init);
-                       tccp->cblksty = parameters->mode;
-                       tccp->qmfbid = parameters->irreversible ? 0 : 1;
-                       tccp->qntsty = parameters->irreversible ? J2K_CCP_QNTSTY_SEQNT : J2K_CCP_QNTSTY_NOQNT;
-                       tccp->numgbits = 2;
-                       if (i == parameters->roi_compno) {
-                               tccp->roishift = parameters->roi_shift;
-                       } else {
-                               tccp->roishift = 0;
-                       }
-
-                       if(parameters->cp_cinema)
-                       {
-                               /*Precinct size for lowest frequency subband=128*/
-                               tccp->prcw[0] = 7;
-                               tccp->prch[0] = 7;
-                               /*Precinct size at all other resolutions = 256*/
-                               for (j = 1; j < tccp->numresolutions; j++) {
-                                       tccp->prcw[j] = 8;
-                                       tccp->prch[j] = 8;
-                               }
-                       }else{
-                               if (parameters->csty & J2K_CCP_CSTY_PRT) {
-                                       int p = 0;
-                                       for (j = tccp->numresolutions - 1; j >= 0; j--) {
-                                               if (p < parameters->res_spec) {
-                                                       
-                                                       if (parameters->prcw_init[p] < 1) {
-                                                               tccp->prcw[j] = 1;
-                                                       } else {
-                                                               tccp->prcw[j] = int_floorlog2(parameters->prcw_init[p]);
-                                                       }
-                                                       
-                                                       if (parameters->prch_init[p] < 1) {
-                                                               tccp->prch[j] = 1;
-                                                       }else {
-                                                               tccp->prch[j] = int_floorlog2(parameters->prch_init[p]);
-                                                       }
-
-                                               } else {
-                                                       int res_spec = parameters->res_spec;
-                                                       int size_prcw = parameters->prcw_init[res_spec - 1] >> (p - (res_spec - 1));
-                                                       int size_prch = parameters->prch_init[res_spec - 1] >> (p - (res_spec - 1));
-                                                       
-                                                       if (size_prcw < 1) {
-                                                               tccp->prcw[j] = 1;
-                                                       } else {
-                                                               tccp->prcw[j] = int_floorlog2(size_prcw);
-                                                       }
-                                                       
-                                                       if (size_prch < 1) {
-                                                               tccp->prch[j] = 1;
-                                                       } else {
-                                                               tccp->prch[j] = int_floorlog2(size_prch);
-                                                       }
-                                               }
-                                               p++;
-                                               /*printf("\nsize precinct for level %d : %d,%d\n", j,tccp->prcw[j], tccp->prch[j]); */
-                                       }       /*end for*/
-                               } else {
-                                       for (j = 0; j < tccp->numresolutions; j++) {
-                                               tccp->prcw[j] = 15;
-                                               tccp->prch[j] = 15;
-                                       }
-                               }
-                       }
-
-                       dwt_calc_explicit_stepsizes(tccp, image->comps[i].prec);
-               }
-       }
+    /* initialize the mutiple tiles */
+    /* ---------------------------- */
+    cp->tcps = (opj_tcp_t*) opj_calloc(cp->tw * cp->th, sizeof(opj_tcp_t));
+
+    for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
+        opj_tcp_t *tcp = &cp->tcps[tileno];
+        tcp->numlayers = parameters->tcp_numlayers;
+        for (j = 0; j < tcp->numlayers; j++) {
+            if (cp->cinema) {
+                if (cp->fixed_quality) {
+                    tcp->distoratio[j] = parameters->tcp_distoratio[j];
+                }
+                tcp->rates[j] = parameters->tcp_rates[j];
+            } else {
+                if (cp->fixed_quality) {    /* add fixed_quality */
+                    tcp->distoratio[j] = parameters->tcp_distoratio[j];
+                } else {
+                    tcp->rates[j] = parameters->tcp_rates[j];
+                }
+            }
+        }
+        tcp->csty = parameters->csty;
+        tcp->prg = parameters->prog_order;
+        tcp->mct = parameters->tcp_mct;
+
+        numpocs_tile = 0;
+        tcp->POC = 0;
+        if (parameters->numpocs) {
+            /* initialisation of POC */
+            tcp->POC = 1;
+            for (i = 0; i < parameters->numpocs; i++) {
+                if ((tileno == parameters->POC[i].tile - 1) ||
+                        (parameters->POC[i].tile == -1)) {
+                    opj_poc_t *tcp_poc = &tcp->pocs[numpocs_tile];
+                    tcp_poc->resno0     = parameters->POC[numpocs_tile].resno0;
+                    tcp_poc->compno0    = parameters->POC[numpocs_tile].compno0;
+                    tcp_poc->layno1     = parameters->POC[numpocs_tile].layno1;
+                    tcp_poc->resno1     = parameters->POC[numpocs_tile].resno1;
+                    tcp_poc->compno1    = parameters->POC[numpocs_tile].compno1;
+                    tcp_poc->prg1       = parameters->POC[numpocs_tile].prg1;
+                    tcp_poc->tile       = parameters->POC[numpocs_tile].tile;
+                    numpocs_tile++;
+                }
+            }
+            tcp->numpocs = numpocs_tile - 1 ;
+        } else {
+            tcp->numpocs = 0;
+        }
+
+        tcp->tccps = (opj_tccp_t*) opj_calloc(image->numcomps, sizeof(opj_tccp_t));
+
+        for (i = 0; i < image->numcomps; i++) {
+            opj_tccp_t *tccp = &tcp->tccps[i];
+            tccp->csty = parameters->csty &
+                         0x01;   /* 0 => one precinct || 1 => custom precinct  */
+            tccp->numresolutions = parameters->numresolution;
+            tccp->cblkw = int_floorlog2(parameters->cblockw_init);
+            tccp->cblkh = int_floorlog2(parameters->cblockh_init);
+            tccp->cblksty = parameters->mode;
+            tccp->qmfbid = parameters->irreversible ? 0 : 1;
+            tccp->qntsty = parameters->irreversible ? J2K_CCP_QNTSTY_SEQNT :
+                           J2K_CCP_QNTSTY_NOQNT;
+            tccp->numgbits = 2;
+            if (i == parameters->roi_compno) {
+                tccp->roishift = parameters->roi_shift;
+            } else {
+                tccp->roishift = 0;
+            }
+
+            if (parameters->cp_cinema) {
+                /*Precinct size for lowest frequency subband=128*/
+                tccp->prcw[0] = 7;
+                tccp->prch[0] = 7;
+                /*Precinct size at all other resolutions = 256*/
+                for (j = 1; j < tccp->numresolutions; j++) {
+                    tccp->prcw[j] = 8;
+                    tccp->prch[j] = 8;
+                }
+            } else {
+                if (parameters->csty & J2K_CCP_CSTY_PRT) {
+                    int p = 0;
+                    for (j = tccp->numresolutions - 1; j >= 0; j--) {
+                        if (p < parameters->res_spec) {
+
+                            if (parameters->prcw_init[p] < 1) {
+                                tccp->prcw[j] = 1;
+                            } else {
+                                tccp->prcw[j] = int_floorlog2(parameters->prcw_init[p]);
+                            }
+
+                            if (parameters->prch_init[p] < 1) {
+                                tccp->prch[j] = 1;
+                            } else {
+                                tccp->prch[j] = int_floorlog2(parameters->prch_init[p]);
+                            }
+
+                        } else {
+                            int res_spec = parameters->res_spec;
+                            int size_prcw = parameters->prcw_init[res_spec - 1] >> (p - (res_spec - 1));
+                            int size_prch = parameters->prch_init[res_spec - 1] >> (p - (res_spec - 1));
+
+                            if (size_prcw < 1) {
+                                tccp->prcw[j] = 1;
+                            } else {
+                                tccp->prcw[j] = int_floorlog2(size_prcw);
+                            }
+
+                            if (size_prch < 1) {
+                                tccp->prch[j] = 1;
+                            } else {
+                                tccp->prch[j] = int_floorlog2(size_prch);
+                            }
+                        }
+                        p++;
+                        /*printf("\nsize precinct for level %d : %d,%d\n", j,tccp->prcw[j], tccp->prch[j]); */
+                    }   /*end for*/
+                } else {
+                    for (j = 0; j < tccp->numresolutions; j++) {
+                        tccp->prcw[j] = 15;
+                        tccp->prch[j] = 15;
+                    }
+                }
+            }
+
+            dwt_calc_explicit_stepsizes(tccp, image->comps[i].prec);
+        }
+    }
 }
 
-opj_bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info) {
-       int tileno, compno;
-       opj_cp_t *cp = NULL;
-
-       opj_tcd_t *tcd = NULL;  /* TCD component */
-
-       j2k->cio = cio; 
-       j2k->image = image;
-
-       cp = j2k->cp;
-
-       /* INDEX >> */
-       j2k->cstr_info = cstr_info;
-       if (cstr_info) {
-               int compno;
-               cstr_info->tile = (opj_tile_info_t *) opj_malloc(cp->tw * cp->th * sizeof(opj_tile_info_t));
-               cstr_info->image_w = image->x1 - image->x0;
-               cstr_info->image_h = image->y1 - image->y0;
-               cstr_info->prog = (&cp->tcps[0])->prg;
-               cstr_info->tw = cp->tw;
-               cstr_info->th = cp->th;
-               cstr_info->tile_x = cp->tdx;    /* new version parser */
-               cstr_info->tile_y = cp->tdy;    /* new version parser */
-               cstr_info->tile_Ox = cp->tx0;   /* new version parser */
-               cstr_info->tile_Oy = cp->ty0;   /* new version parser */
-               cstr_info->numcomps = image->numcomps;
-               cstr_info->numlayers = (&cp->tcps[0])->numlayers;
-               cstr_info->numdecompos = (int*) opj_malloc(image->numcomps * sizeof(int));
-               for (compno=0; compno < image->numcomps; compno++) {
-                       cstr_info->numdecompos[compno] = (&cp->tcps[0])->tccps->numresolutions - 1;
-               }
-               cstr_info->D_max = 0.0;         /* ADD Marcela */
-               cstr_info->main_head_start = cio_tell(cio); /* position of SOC */
-               cstr_info->maxmarknum = 100;
-               cstr_info->marker = (opj_marker_info_t *) opj_malloc(cstr_info->maxmarknum * sizeof(opj_marker_info_t));
-               cstr_info->marknum = 0;
-       }
-       /* << INDEX */
-
-       j2k_write_soc(j2k);
-       j2k_write_siz(j2k);
-       j2k_write_cod(j2k);
-       j2k_write_qcd(j2k);
-
-       if(cp->cinema){
-               for (compno = 1; compno < image->numcomps; compno++) {
-                       j2k_write_coc(j2k, compno);
-                       j2k_write_qcc(j2k, compno);
-               }
-       }
-
-       for (compno = 0; compno < image->numcomps; compno++) {
-               opj_tcp_t *tcp = &cp->tcps[0];
-               if (tcp->tccps[compno].roishift)
-                       j2k_write_rgn(j2k, compno, 0);
-       }
-       if (cp->comment != NULL) {
-               j2k_write_com(j2k);
-       }
-
-       j2k->totnum_tp = j2k_calculate_tp(cp,image->numcomps,image,j2k);
-       /* TLM Marker*/
-       if(cp->cinema){
-               j2k_write_tlm(j2k);
-               if (cp->cinema == CINEMA4K_24) {
-                       j2k_write_poc(j2k);
-               }
-       }
-
-       /* uncomment only for testing JPSEC marker writing */
-       /* j2k_write_sec(j2k); */
-
-       /* INDEX >> */
-       if(cstr_info) {
-               cstr_info->main_head_end = cio_tell(cio) - 1;
-       }
-       /* << INDEX */
-       /**** Main Header ENDS here ***/
-
-       /* create the tile encoder */
-       tcd = tcd_create(j2k->cinfo);
-
-       /* encode each tile */
-       for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
-               int pino;
-               int tilepartno=0;
-               /* UniPG>> */
-               int acc_pack_num = 0;
-               /* <<UniPG */
-
-
-               opj_tcp_t *tcp = &cp->tcps[tileno];
-               opj_event_msg(j2k->cinfo, EVT_INFO, "tile number %d / %d\n", tileno + 1, cp->tw * cp->th);
-
-               j2k->curtileno = tileno;
-               j2k->cur_tp_num = 0;
-               tcd->cur_totnum_tp = j2k->cur_totnum_tp[j2k->curtileno];
-               /* initialisation before tile encoding  */
-               if (tileno == 0) {
-                       tcd_malloc_encode(tcd, image, cp, j2k->curtileno);
-               } else {
-                       tcd_init_encode(tcd, image, cp, j2k->curtileno);
-               }
-
-               /* INDEX >> */
-               if(cstr_info) {
-                       cstr_info->tile[j2k->curtileno].start_pos = cio_tell(cio) + j2k->pos_correction;
-                       cstr_info->tile[j2k->curtileno].maxmarknum = 10;
-                       cstr_info->tile[j2k->curtileno].marker = (opj_marker_info_t *) opj_malloc(cstr_info->tile[j2k->curtileno].maxmarknum * sizeof(opj_marker_info_t));
-                       cstr_info->tile[j2k->curtileno].marknum = 0;
-               }
-               /* << INDEX */
-
-               for(pino = 0; pino <= tcp->numpocs; pino++) {
-                       int tot_num_tp;
-                       tcd->cur_pino=pino;
-
-                       /*Get number of tile parts*/
-                       tot_num_tp = j2k_get_num_tp(cp,pino,tileno);
-                       tcd->tp_pos = cp->tp_pos;
-
-                       for(tilepartno = 0; tilepartno < tot_num_tp ; tilepartno++){
-                               j2k->tp_num = tilepartno;
-                               /* INDEX >> */
-                               if(cstr_info)
-                                       cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_start_pos =
-                                       cio_tell(cio) + j2k->pos_correction;
-                               /* << INDEX */
-                               j2k_write_sot(j2k);
-
-                               if(j2k->cur_tp_num == 0 && cp->cinema == 0){
-                                       for (compno = 1; compno < image->numcomps; compno++) {
-                                               j2k_write_coc(j2k, compno);
-                                               j2k_write_qcc(j2k, compno);
-                                       }
-                                       if (cp->tcps[tileno].numpocs) {
-                                               j2k_write_poc(j2k);
-                                       }
-                               }
-
-                               /* INDEX >> */
-                               if(cstr_info)
-                                       cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_end_header =
-                                       cio_tell(cio) + j2k->pos_correction + 1;
-                               /* << INDEX */
-
-                               j2k_write_sod(j2k, tcd);
-
-                               /* INDEX >> */
-                               if(cstr_info) {
-                                       cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_end_pos =
-                                               cio_tell(cio) + j2k->pos_correction - 1;
-                                       cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_start_pack =
-                                               acc_pack_num;
-                                       cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_numpacks =
-                                               cstr_info->packno - acc_pack_num;
-                                       acc_pack_num = cstr_info->packno;
-                               }
-                               /* << INDEX */
-
-                               j2k->cur_tp_num++;
-                       }                       
-               }
-               if(cstr_info) {
-                       cstr_info->tile[j2k->curtileno].end_pos = cio_tell(cio) + j2k->pos_correction - 1;
-               }
-
-
-               /*
-               if (tile->PPT) { // BAD PPT !!! 
-               FILE *PPT_file;
-               int i;
-               PPT_file=fopen("PPT","rb");
-               fprintf(stderr,"%c%c%c%c",255,97,tile->len_ppt/256,tile->len_ppt%256);
-               for (i=0;i<tile->len_ppt;i++) {
-               unsigned char elmt;
-               fread(&elmt, 1, 1, PPT_file);
-               fwrite(&elmt,1,1,f);
-               }
-               fclose(PPT_file);
-               unlink("PPT");
-               }
-               */
-
-       }
-
-       /* destroy the tile encoder */
-       tcd_free_encode(tcd);
-       tcd_destroy(tcd);
-
-       opj_free(j2k->cur_totnum_tp);
-
-       j2k_write_eoc(j2k);
-
-       if(cstr_info) {
-               cstr_info->codestream_size = cio_tell(cio) + j2k->pos_correction;
-               /* UniPG>> */
-               /* The following adjustment is done to adjust the codestream size */
-               /* if SOD is not at 0 in the buffer. Useful in case of JP2, where */
-               /* the first bunch of bytes is not in the codestream              */
-               cstr_info->codestream_size -= cstr_info->main_head_start;
-               /* <<UniPG */
-       }
+opj_bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image,
+                    opj_codestream_info_t *cstr_info)
+{
+    int tileno, compno;
+    opj_cp_t *cp = NULL;
+
+    opj_tcd_t *tcd = NULL;  /* TCD component */
+
+    j2k->cio = cio;
+    j2k->image = image;
+
+    cp = j2k->cp;
+
+    /* INDEX >> */
+    j2k->cstr_info = cstr_info;
+    if (cstr_info) {
+        int compno;
+        cstr_info->tile = (opj_tile_info_t *) opj_malloc(cp->tw * cp->th * sizeof(
+                              opj_tile_info_t));
+        cstr_info->image_w = image->x1 - image->x0;
+        cstr_info->image_h = image->y1 - image->y0;
+        cstr_info->prog = (&cp->tcps[0])->prg;
+        cstr_info->tw = cp->tw;
+        cstr_info->th = cp->th;
+        cstr_info->tile_x = cp->tdx;    /* new version parser */
+        cstr_info->tile_y = cp->tdy;    /* new version parser */
+        cstr_info->tile_Ox = cp->tx0;   /* new version parser */
+        cstr_info->tile_Oy = cp->ty0;   /* new version parser */
+        cstr_info->numcomps = image->numcomps;
+        cstr_info->numlayers = (&cp->tcps[0])->numlayers;
+        cstr_info->numdecompos = (int*) opj_malloc(image->numcomps * sizeof(int));
+        for (compno = 0; compno < image->numcomps; compno++) {
+            cstr_info->numdecompos[compno] = (&cp->tcps[0])->tccps->numresolutions - 1;
+        }
+        cstr_info->D_max = 0.0;     /* ADD Marcela */
+        cstr_info->main_head_start = cio_tell(cio); /* position of SOC */
+        cstr_info->maxmarknum = 100;
+        cstr_info->marker = (opj_marker_info_t *) opj_malloc(cstr_info->maxmarknum *
+                            sizeof(opj_marker_info_t));
+        cstr_info->marknum = 0;
+    }
+    /* << INDEX */
+
+    j2k_write_soc(j2k);
+    j2k_write_siz(j2k);
+    j2k_write_cod(j2k);
+    j2k_write_qcd(j2k);
+
+    if (cp->cinema) {
+        for (compno = 1; compno < image->numcomps; compno++) {
+            j2k_write_coc(j2k, compno);
+            j2k_write_qcc(j2k, compno);
+        }
+    }
+
+    for (compno = 0; compno < image->numcomps; compno++) {
+        opj_tcp_t *tcp = &cp->tcps[0];
+        if (tcp->tccps[compno].roishift) {
+            j2k_write_rgn(j2k, compno, 0);
+        }
+    }
+    if (cp->comment != NULL) {
+        j2k_write_com(j2k);
+    }
+
+    j2k->totnum_tp = j2k_calculate_tp(cp, image->numcomps, image, j2k);
+    /* TLM Marker*/
+    if (cp->cinema) {
+        j2k_write_tlm(j2k);
+        if (cp->cinema == CINEMA4K_24) {
+            j2k_write_poc(j2k);
+        }
+    }
+
+    /* uncomment only for testing JPSEC marker writing */
+    /* j2k_write_sec(j2k); */
+
+    /* INDEX >> */
+    if (cstr_info) {
+        cstr_info->main_head_end = cio_tell(cio) - 1;
+    }
+    /* << INDEX */
+    /**** Main Header ENDS here ***/
+
+    /* create the tile encoder */
+    tcd = tcd_create(j2k->cinfo);
+
+    /* encode each tile */
+    for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
+        int pino;
+        int tilepartno = 0;
+        /* UniPG>> */
+        int acc_pack_num = 0;
+        /* <<UniPG */
+
+
+        opj_tcp_t *tcp = &cp->tcps[tileno];
+        opj_event_msg(j2k->cinfo, EVT_INFO, "tile number %d / %d\n", tileno + 1,
+                      cp->tw * cp->th);
+
+        j2k->curtileno = tileno;
+        j2k->cur_tp_num = 0;
+        tcd->cur_totnum_tp = j2k->cur_totnum_tp[j2k->curtileno];
+        /* initialisation before tile encoding  */
+        if (tileno == 0) {
+            tcd_malloc_encode(tcd, image, cp, j2k->curtileno);
+        } else {
+            tcd_init_encode(tcd, image, cp, j2k->curtileno);
+        }
+
+        /* INDEX >> */
+        if (cstr_info) {
+            cstr_info->tile[j2k->curtileno].start_pos = cio_tell(cio) + j2k->pos_correction;
+            cstr_info->tile[j2k->curtileno].maxmarknum = 10;
+            cstr_info->tile[j2k->curtileno].marker = (opj_marker_info_t *) opj_malloc(
+                        cstr_info->tile[j2k->curtileno].maxmarknum * sizeof(opj_marker_info_t));
+            cstr_info->tile[j2k->curtileno].marknum = 0;
+        }
+        /* << INDEX */
+
+        for (pino = 0; pino <= tcp->numpocs; pino++) {
+            int tot_num_tp;
+            tcd->cur_pino = pino;
+
+            /*Get number of tile parts*/
+            tot_num_tp = j2k_get_num_tp(cp, pino, tileno);
+            tcd->tp_pos = cp->tp_pos;
+
+            for (tilepartno = 0; tilepartno < tot_num_tp ; tilepartno++) {
+                j2k->tp_num = tilepartno;
+                /* INDEX >> */
+                if (cstr_info)
+                    cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_start_pos =
+                        cio_tell(cio) + j2k->pos_correction;
+                /* << INDEX */
+                j2k_write_sot(j2k);
+
+                if (j2k->cur_tp_num == 0 && cp->cinema == 0) {
+                    for (compno = 1; compno < image->numcomps; compno++) {
+                        j2k_write_coc(j2k, compno);
+                        j2k_write_qcc(j2k, compno);
+                    }
+                    if (cp->tcps[tileno].numpocs) {
+                        j2k_write_poc(j2k);
+                    }
+                }
+
+                /* INDEX >> */
+                if (cstr_info)
+                    cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_end_header =
+                        cio_tell(cio) + j2k->pos_correction + 1;
+                /* << INDEX */
+
+                j2k_write_sod(j2k, tcd);
+
+                /* INDEX >> */
+                if (cstr_info) {
+                    cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_end_pos =
+                        cio_tell(cio) + j2k->pos_correction - 1;
+                    cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_start_pack =
+                        acc_pack_num;
+                    cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_numpacks =
+                        cstr_info->packno - acc_pack_num;
+                    acc_pack_num = cstr_info->packno;
+                }
+                /* << INDEX */
+
+                j2k->cur_tp_num++;
+            }
+        }
+        if (cstr_info) {
+            cstr_info->tile[j2k->curtileno].end_pos = cio_tell(cio) + j2k->pos_correction -
+                    1;
+        }
+
+
+        /*
+        if (tile->PPT) { // BAD PPT !!!
+        FILE *PPT_file;
+        int i;
+        PPT_file=fopen("PPT","rb");
+        fprintf(stderr,"%c%c%c%c",255,97,tile->len_ppt/256,tile->len_ppt%256);
+        for (i=0;i<tile->len_ppt;i++) {
+        unsigned char elmt;
+        fread(&elmt, 1, 1, PPT_file);
+        fwrite(&elmt,1,1,f);
+        }
+        fclose(PPT_file);
+        unlink("PPT");
+        }
+        */
+
+    }
+
+    /* destroy the tile encoder */
+    tcd_free_encode(tcd);
+    tcd_destroy(tcd);
+
+    opj_free(j2k->cur_totnum_tp);
+
+    j2k_write_eoc(j2k);
+
+    if (cstr_info) {
+        cstr_info->codestream_size = cio_tell(cio) + j2k->pos_correction;
+        /* UniPG>> */
+        /* The following adjustment is done to adjust the codestream size */
+        /* if SOD is not at 0 in the buffer. Useful in case of JP2, where */
+        /* the first bunch of bytes is not in the codestream              */
+        cstr_info->codestream_size -= cstr_info->main_head_start;
+        /* <<UniPG */
+    }
 
 #ifdef USE_JPWL
-       /*
-       preparation of JPWL marker segments
-       */
-       if(cp->epc_on) {
+    /*
+    preparation of JPWL marker segments
+    */
+    if (cp->epc_on) {
 
-               /* encode according to JPWL */
-               jpwl_encode(j2k, cio, image);
+        /* encode according to JPWL */
+        jpwl_encode(j2k, cio, image);
 
-       }
+    }
 #endif /* USE_JPWL */
 
-       return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static void j2k_add_mhmarker(opj_codestream_info_t *cstr_info, unsigned short int type, int pos, int len) {
+static void j2k_add_mhmarker(opj_codestream_info_t *cstr_info,
+                             unsigned short int type, int pos, int len)
+{
 
-       if (!cstr_info)
-               return;
+    if (!cstr_info) {
+        return;
+    }
 
-       /* expand the list? */
-       if ((cstr_info->marknum + 1) > cstr_info->maxmarknum) {
-               cstr_info->maxmarknum = 100 + (int) ((float) cstr_info->maxmarknum * 1.0F);
-               cstr_info->marker = (opj_marker_info_t*)opj_realloc(cstr_info->marker, cstr_info->maxmarknum);
-       }
+    /* expand the list? */
+    if ((cstr_info->marknum + 1) > cstr_info->maxmarknum) {
+        cstr_info->maxmarknum = 100 + (int)((float) cstr_info->maxmarknum * 1.0F);
+        cstr_info->marker = (opj_marker_info_t*)opj_realloc(cstr_info->marker,
+                            cstr_info->maxmarknum);
+    }
 
-       /* add the marker */
-       cstr_info->marker[cstr_info->marknum].type = type;
-       cstr_info->marker[cstr_info->marknum].pos = pos;
-       cstr_info->marker[cstr_info->marknum].len = len;
-       cstr_info->marknum++;
+    /* add the marker */
+    cstr_info->marker[cstr_info->marknum].type = type;
+    cstr_info->marker[cstr_info->marknum].pos = pos;
+    cstr_info->marker[cstr_info->marknum].len = len;
+    cstr_info->marknum++;
 
 }
 
-static void j2k_add_tlmarker( int tileno, opj_codestream_info_t *cstr_info, unsigned short int type, int pos, int len) {
+static void j2k_add_tlmarker(int tileno, opj_codestream_info_t *cstr_info,
+                             unsigned short int type, int pos, int len)
+{
 
-  opj_marker_info_t *marker;
+    opj_marker_info_t *marker;
 
-       if (!cstr_info)
-               return;
+    if (!cstr_info) {
+        return;
+    }
 
-       /* expand the list? */
-       if ((cstr_info->tile[tileno].marknum + 1) > cstr_info->tile[tileno].maxmarknum) {
-               cstr_info->tile[tileno].maxmarknum = 100 + (int) ((float) cstr_info->tile[tileno].maxmarknum * 1.0F);
-               cstr_info->tile[tileno].marker = (opj_marker_info_t*)opj_realloc(cstr_info->tile[tileno].marker, cstr_info->maxmarknum);
-       }
+    /* expand the list? */
+    if ((cstr_info->tile[tileno].marknum + 1) >
+            cstr_info->tile[tileno].maxmarknum) {
+        cstr_info->tile[tileno].maxmarknum = 100 + (int)((float)
+                                             cstr_info->tile[tileno].maxmarknum * 1.0F);
+        cstr_info->tile[tileno].marker = (opj_marker_info_t*)opj_realloc(
+                                             cstr_info->tile[tileno].marker, cstr_info->maxmarknum);
+    }
 
-       marker = &(cstr_info->tile[tileno].marker[cstr_info->tile[tileno].marknum]);
+    marker = &(cstr_info->tile[tileno].marker[cstr_info->tile[tileno].marknum]);
 
-       /* add the marker */
-       marker->type = type;
-       marker->pos = pos;
-       marker->len = len;
-       cstr_info->tile[tileno].marknum++;
+    /* add the marker */
+    marker->type = type;
+    marker->pos = pos;
+    marker->len = len;
+    cstr_info->tile[tileno].marknum++;
 }
index 1359812f9fff55a2c3864b2088ea4f8fbb416c78..7c96ca346aa679d12abc27b7d02498210c76edea 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
 #endif /* _WIN32 */
 #include "opj_includes.h"
 
-double OPJ_CALLCONV opj_clock(void) {
+double OPJ_CALLCONV opj_clock(void)
+{
 #ifdef _WIN32
-       /* _WIN32: use QueryPerformance (very accurate) */
-    LARGE_INTEGER freq , t ;
+    /* _WIN32: use QueryPerformance (very accurate) */
+    LARGE_INTEGER freq, t ;
     /* freq is the clock speed of the CPU */
     QueryPerformanceFrequency(&freq) ;
-       /* cout << "freq = " << ((double) freq.QuadPart) << endl; */
+    /* cout << "freq = " << ((double) freq.QuadPart) << endl; */
     /* t is the high resolution performance counter (see MSDN) */
-    QueryPerformanceCounter ( & t ) ;
-    return ( t.QuadPart /(double) freq.QuadPart ) ;
+    QueryPerformanceCounter(& t) ;
+    return (t.QuadPart / (double) freq.QuadPart) ;
 #else
-       /* Unix or Linux: use resource usage */
+    /* Unix or Linux: use resource usage */
     struct rusage t;
     double procTime;
     /* (1) Get the rusage data structure at this moment (man getrusage) */
-    getrusage(0,&t);
+    getrusage(0, &t);
     /* (2) What is the elapsed time ? - CPU time = User time + System time */
-       /* (2a) Get the seconds */
+    /* (2a) Get the seconds */
     procTime = t.ru_utime.tv_sec + t.ru_stime.tv_sec;
     /* (2b) More precisely! Get the microseconds part ! */
-    return ( procTime + (t.ru_utime.tv_usec + t.ru_stime.tv_usec) * 1e-6 ) ;
+    return (procTime + (t.ru_utime.tv_usec + t.ru_stime.tv_usec) * 1e-6) ;
 #endif
 }
 
index bb46005a61473de76ae8a86adac7be3f2c5a95f8..d2ca41f01ffecd93c0ff498cb5f32f16c7f36607 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * Copyright (c) 2010-2011, Kaori Hagihara
@@ -50,7 +50,8 @@ Read box headers
 @param box
 @return Returns true if successful, returns false otherwise
 */
-static opj_bool jp2_read_boxhdr(opj_common_ptr cinfo, opj_cio_t *cio, opj_jp2_box_t *box);
+static opj_bool jp2_read_boxhdr(opj_common_ptr cinfo, opj_cio_t *cio,
+                                opj_jp2_box_t *box);
 /*static void jp2_write_url(opj_cio_t *cio, char *Idx_file);*/
 /**
 Read the IHDR box - Image Header box
@@ -76,8 +77,10 @@ Read the FTYP box - File type box
 @return Returns true if successful, returns false otherwise
 */
 static opj_bool jp2_read_ftyp(opj_jp2_t *jp2, opj_cio_t *cio);
-static int jp2_write_jp2c(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info);
-static opj_bool jp2_read_jp2c(opj_jp2_t *jp2, opj_cio_t *cio, unsigned int *j2k_codestream_length, unsigned int *j2k_codestream_offset);
+static int jp2_write_jp2c(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image,
+                          opj_codestream_info_t *cstr_info);
+static opj_bool jp2_read_jp2c(opj_jp2_t *jp2, opj_cio_t *cio,
+                              unsigned int *j2k_codestream_length, unsigned int *j2k_codestream_offset);
 static void jp2_write_jp(opj_cio_t *cio);
 /**
 Read the JP box - JPEG 2000 signature
@@ -94,13 +97,14 @@ Decode the structure of a JP2 file
 @return Returns true if successful, returns false otherwise
 */
 static opj_bool jp2_read_struct(opj_jp2_t *jp2, opj_cio_t *cio,
-       opj_jp2_color_t *color);
+                                opj_jp2_color_t *color);
 /**
 Apply collected palette data
 @param color Collector for profile, cdef and pclr data
-@param image 
+@param image
 */
-static void jp2_apply_pclr(opj_jp2_color_t *color, opj_image_t *image, opj_common_ptr cinfo);
+static void jp2_apply_pclr(opj_jp2_color_t *color, opj_image_t *image,
+                           opj_common_ptr cinfo);
 /**
 Collect palette data
 @param jp2 JP2 handle
@@ -110,7 +114,7 @@ Collect palette data
 @return Returns true if successful, returns false otherwise
 */
 static opj_bool jp2_read_pclr(opj_jp2_t *jp2, opj_cio_t *cio,
-    opj_jp2_box_t *box, opj_jp2_color_t *color);
+                              opj_jp2_box_t *box, opj_jp2_color_t *color);
 /**
 Collect component mapping data
 @param jp2 JP2 handle
@@ -120,7 +124,7 @@ Collect component mapping data
 @return Returns true if successful, returns false otherwise
 */
 static opj_bool jp2_read_cmap(opj_jp2_t *jp2, opj_cio_t *cio,
-    opj_jp2_box_t *box, opj_jp2_color_t *color);
+                              opj_jp2_box_t *box, opj_jp2_color_t *color);
 /**
 Collect colour specification data
 @param jp2 JP2 handle
@@ -130,183 +134,193 @@ Collect colour specification data
 @return Returns true if successful, returns false otherwise
 */
 static opj_bool jp2_read_colr(opj_jp2_t *jp2, opj_cio_t *cio,
-    opj_jp2_box_t *box, opj_jp2_color_t *color);
+                              opj_jp2_box_t *box, opj_jp2_color_t *color);
 /*@}*/
 
 /*@}*/
 
 /* ----------------------------------------------------------------------- */
 
-static opj_bool jp2_read_boxhdr(opj_common_ptr cinfo, opj_cio_t *cio, opj_jp2_box_t *box) {
-       box->init_pos = cio_tell(cio);
-       box->length = cio_read(cio, 4);
-       box->type = cio_read(cio, 4);
-       if (box->length == 1) {
-               if (cio_read(cio, 4) != 0) {
-                       opj_event_msg(cinfo, EVT_ERROR, "Cannot handle box sizes higher than 2^32\n");
-                       return OPJ_FALSE;
-               }
-               box->length = cio_read(cio, 4);
-               if (box->length == 0) 
-                       box->length = cio_numbytesleft(cio) + 12;
-       }
-       else if (box->length == 0) {
-               box->length = cio_numbytesleft(cio) + 8;
-       }
-       if (box->length < 0) {
-               opj_event_msg(cinfo, EVT_ERROR, "Integer overflow in box->length\n");
-               return OPJ_FALSE; /* TODO: actually check jp2_read_boxhdr's return value */
-       }
-       
-       return OPJ_TRUE;
+static opj_bool jp2_read_boxhdr(opj_common_ptr cinfo, opj_cio_t *cio,
+                                opj_jp2_box_t *box)
+{
+    box->init_pos = cio_tell(cio);
+    box->length = cio_read(cio, 4);
+    box->type = cio_read(cio, 4);
+    if (box->length == 1) {
+        if (cio_read(cio, 4) != 0) {
+            opj_event_msg(cinfo, EVT_ERROR, "Cannot handle box sizes higher than 2^32\n");
+            return OPJ_FALSE;
+        }
+        box->length = cio_read(cio, 4);
+        if (box->length == 0) {
+            box->length = cio_numbytesleft(cio) + 12;
+        }
+    } else if (box->length == 0) {
+        box->length = cio_numbytesleft(cio) + 8;
+    }
+    if (box->length < 0) {
+        opj_event_msg(cinfo, EVT_ERROR, "Integer overflow in box->length\n");
+        return OPJ_FALSE; /* TODO: actually check jp2_read_boxhdr's return value */
+    }
+
+    return OPJ_TRUE;
 }
 
 #if 0
-static void jp2_write_url(opj_cio_t *cio, char *Idx_file) {
-       unsigned int i;
-       opj_jp2_box_t box;
-
-       box.init_pos = cio_tell(cio);
-       cio_skip(cio, 4);
-       cio_write(cio, JP2_URL, 4);     /* DBTL */
-       cio_write(cio, 0, 1);           /* VERS */
-       cio_write(cio, 0, 3);           /* FLAG */
-
-       if(Idx_file) {
-               for (i = 0; i < strlen(Idx_file); i++) {
-                       cio_write(cio, Idx_file[i], 1);
-               }
-       }
-
-       box.length = cio_tell(cio) - box.init_pos;
-       cio_seek(cio, box.init_pos);
-       cio_write(cio, box.length, 4);  /* L */
-       cio_seek(cio, box.init_pos + box.length);
+static void jp2_write_url(opj_cio_t *cio, char *Idx_file)
+{
+    unsigned int i;
+    opj_jp2_box_t box;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, JP2_URL, 4); /* DBTL */
+    cio_write(cio, 0, 1);       /* VERS */
+    cio_write(cio, 0, 3);       /* FLAG */
+
+    if (Idx_file) {
+        for (i = 0; i < strlen(Idx_file); i++) {
+            cio_write(cio, Idx_file[i], 1);
+        }
+    }
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);  /* L */
+    cio_seek(cio, box.init_pos + box.length);
 }
 #endif
 
-static opj_bool jp2_read_ihdr(opj_jp2_t *jp2, opj_cio_t *cio) {
-       opj_jp2_box_t box;
+static opj_bool jp2_read_ihdr(opj_jp2_t *jp2, opj_cio_t *cio)
+{
+    opj_jp2_box_t box;
 
-       opj_common_ptr cinfo = jp2->cinfo;
+    opj_common_ptr cinfo = jp2->cinfo;
 
-  if(jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE ) {
-    opj_event_msg(cinfo, EVT_ERROR, "Failed to read boxhdr\n");
-    return OPJ_FALSE;
-  }
-       if (JP2_IHDR != box.type) {
-               opj_event_msg(cinfo, EVT_ERROR, "Expected IHDR Marker\n");
-               return OPJ_FALSE;
-       }
+    if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
+        opj_event_msg(cinfo, EVT_ERROR, "Failed to read boxhdr\n");
+        return OPJ_FALSE;
+    }
+    if (JP2_IHDR != box.type) {
+        opj_event_msg(cinfo, EVT_ERROR, "Expected IHDR Marker\n");
+        return OPJ_FALSE;
+    }
 
-       jp2->h = cio_read(cio, 4);                      /* HEIGHT */
-       jp2->w = cio_read(cio, 4);                      /* WIDTH */
-       jp2->numcomps = cio_read(cio, 2);       /* NC */
-       jp2->comps = (opj_jp2_comps_t*) opj_malloc(jp2->numcomps * sizeof(opj_jp2_comps_t));
+    jp2->h = cio_read(cio, 4);          /* HEIGHT */
+    jp2->w = cio_read(cio, 4);          /* WIDTH */
+    jp2->numcomps = cio_read(cio, 2);   /* NC */
+    jp2->comps = (opj_jp2_comps_t*) opj_malloc(jp2->numcomps * sizeof(
+                     opj_jp2_comps_t));
 
-       jp2->bpc = cio_read(cio, 1);            /* BPC */
+    jp2->bpc = cio_read(cio, 1);        /* BPC */
 
-       jp2->C = cio_read(cio, 1);                      /* C */
-       jp2->UnkC = cio_read(cio, 1);           /* UnkC */
-       jp2->IPR = cio_read(cio, 1);            /* IPR */
+    jp2->C = cio_read(cio, 1);          /* C */
+    jp2->UnkC = cio_read(cio, 1);       /* UnkC */
+    jp2->IPR = cio_read(cio, 1);        /* IPR */
 
-       if (cio_tell(cio) - box.init_pos != box.length) {
-               opj_event_msg(cinfo, EVT_ERROR, "Error with IHDR Box\n");
-               return OPJ_FALSE;
-       }
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cinfo, EVT_ERROR, "Error with IHDR Box\n");
+        return OPJ_FALSE;
+    }
 
-       return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static void jp2_write_ihdr(opj_jp2_t *jp2, opj_cio_t *cio) {
-       opj_jp2_box_t box;
+static void jp2_write_ihdr(opj_jp2_t *jp2, opj_cio_t *cio)
+{
+    opj_jp2_box_t box;
 
-       box.init_pos = cio_tell(cio);
-       cio_skip(cio, 4);
-       cio_write(cio, JP2_IHDR, 4);            /* IHDR */
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, JP2_IHDR, 4);        /* IHDR */
 
-       cio_write(cio, jp2->h, 4);                      /* HEIGHT */
-       cio_write(cio, jp2->w, 4);                      /* WIDTH */
-       cio_write(cio, jp2->numcomps, 2);       /* NC */
+    cio_write(cio, jp2->h, 4);          /* HEIGHT */
+    cio_write(cio, jp2->w, 4);          /* WIDTH */
+    cio_write(cio, jp2->numcomps, 2);   /* NC */
 
-       cio_write(cio, jp2->bpc, 1);            /* BPC */
+    cio_write(cio, jp2->bpc, 1);        /* BPC */
 
-       cio_write(cio, jp2->C, 1);                      /* C : Always 7 */
-       cio_write(cio, jp2->UnkC, 1);           /* UnkC, colorspace unknown */
-       cio_write(cio, jp2->IPR, 1);            /* IPR, no intellectual property */
+    cio_write(cio, jp2->C, 1);          /* C : Always 7 */
+    cio_write(cio, jp2->UnkC, 1);       /* UnkC, colorspace unknown */
+    cio_write(cio, jp2->IPR, 1);        /* IPR, no intellectual property */
 
-       box.length = cio_tell(cio) - box.init_pos;
-       cio_seek(cio, box.init_pos);
-       cio_write(cio, box.length, 4);  /* L */
-       cio_seek(cio, box.init_pos + box.length);
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);  /* L */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
-static void jp2_write_bpcc(opj_jp2_t *jp2, opj_cio_t *cio) {
-       unsigned int i;
-       opj_jp2_box_t box;
+static void jp2_write_bpcc(opj_jp2_t *jp2, opj_cio_t *cio)
+{
+    unsigned int i;
+    opj_jp2_box_t box;
 
-       box.init_pos = cio_tell(cio);
-       cio_skip(cio, 4);
-       cio_write(cio, JP2_BPCC, 4);    /* BPCC */
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, JP2_BPCC, 4);    /* BPCC */
 
-       for (i = 0; i < jp2->numcomps; i++) {
-               cio_write(cio, jp2->comps[i].bpcc, 1);
-       }
+    for (i = 0; i < jp2->numcomps; i++) {
+        cio_write(cio, jp2->comps[i].bpcc, 1);
+    }
 
-       box.length = cio_tell(cio) - box.init_pos;
-       cio_seek(cio, box.init_pos);
-       cio_write(cio, box.length, 4);  /* L */
-       cio_seek(cio, box.init_pos + box.length);
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);  /* L */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 
-static opj_bool jp2_read_bpcc(opj_jp2_t *jp2, opj_cio_t *cio) {
-       unsigned int i;
-       opj_jp2_box_t box;
+static opj_bool jp2_read_bpcc(opj_jp2_t *jp2, opj_cio_t *cio)
+{
+    unsigned int i;
+    opj_jp2_box_t box;
 
-       opj_common_ptr cinfo = jp2->cinfo;
+    opj_common_ptr cinfo = jp2->cinfo;
 
-  if( jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE ) {
-    opj_event_msg(cinfo, EVT_ERROR, "Failed to read boxhdr\n");
-    return OPJ_FALSE;
-  }
-       if (JP2_BPCC != box.type) {
-               opj_event_msg(cinfo, EVT_ERROR, "Expected BPCC Marker\n");
-               return OPJ_FALSE;
-       }
+    if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
+        opj_event_msg(cinfo, EVT_ERROR, "Failed to read boxhdr\n");
+        return OPJ_FALSE;
+    }
+    if (JP2_BPCC != box.type) {
+        opj_event_msg(cinfo, EVT_ERROR, "Expected BPCC Marker\n");
+        return OPJ_FALSE;
+    }
 
-       for (i = 0; i < jp2->numcomps; i++) {
-               jp2->comps[i].bpcc = cio_read(cio, 1);
-       }
+    for (i = 0; i < jp2->numcomps; i++) {
+        jp2->comps[i].bpcc = cio_read(cio, 1);
+    }
 
-       if (cio_tell(cio) - box.init_pos != box.length) {
-               opj_event_msg(cinfo, EVT_ERROR, "Error with BPCC Box\n");
-               return OPJ_FALSE;
-       }
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cinfo, EVT_ERROR, "Error with BPCC Box\n");
+        return OPJ_FALSE;
+    }
 
-       return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static void jp2_write_colr(opj_jp2_t *jp2, opj_cio_t *cio) {
-       opj_jp2_box_t box;
+static void jp2_write_colr(opj_jp2_t *jp2, opj_cio_t *cio)
+{
+    opj_jp2_box_t box;
 
-       box.init_pos = cio_tell(cio);
-       cio_skip(cio, 4);
-       cio_write(cio, JP2_COLR, 4);            /* COLR */
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, JP2_COLR, 4);        /* COLR */
 
-       cio_write(cio, jp2->meth, 1);           /* METH */
-       cio_write(cio, jp2->precedence, 1);     /* PRECEDENCE */
-       cio_write(cio, jp2->approx, 1);         /* APPROX */
+    cio_write(cio, jp2->meth, 1);       /* METH */
+    cio_write(cio, jp2->precedence, 1); /* PRECEDENCE */
+    cio_write(cio, jp2->approx, 1);     /* APPROX */
 
-       if(jp2->meth == 2)
-        jp2->enumcs = 0;
+    if (jp2->meth == 2) {
+        jp2->enumcs = 0;
+    }
 
-       cio_write(cio, jp2->enumcs, 4); /* EnumCS */
+    cio_write(cio, jp2->enumcs, 4); /* EnumCS */
 
-       box.length = cio_tell(cio) - box.init_pos;
-       cio_seek(cio, box.init_pos);
-       cio_write(cio, box.length, 4);  /* L */
-       cio_seek(cio, box.init_pos + box.length);
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);  /* L */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 static void jp2_free_pclr(opj_jp2_color_t *color)
@@ -315,656 +329,710 @@ static void jp2_free_pclr(opj_jp2_color_t *color)
     opj_free(color->jp2_pclr->channel_size);
     opj_free(color->jp2_pclr->entries);
 
-       if(color->jp2_pclr->cmap) opj_free(color->jp2_pclr->cmap);
+    if (color->jp2_pclr->cmap) {
+        opj_free(color->jp2_pclr->cmap);
+    }
 
-    opj_free(color->jp2_pclr); color->jp2_pclr = NULL;
+    opj_free(color->jp2_pclr);
+    color->jp2_pclr = NULL;
 }
 
 static void free_color_data(opj_jp2_color_t *color)
 {
-       if(color->jp2_pclr)
-   {
-       jp2_free_pclr(color);
-   }
-       if(color->jp2_cdef) 
-   {
-       if(color->jp2_cdef->info) opj_free(color->jp2_cdef->info);
-       opj_free(color->jp2_cdef);
-   }
-       if(color->icc_profile_buf) opj_free(color->icc_profile_buf);
+    if (color->jp2_pclr) {
+        jp2_free_pclr(color);
+    }
+    if (color->jp2_cdef) {
+        if (color->jp2_cdef->info) {
+            opj_free(color->jp2_cdef->info);
+        }
+        opj_free(color->jp2_cdef);
+    }
+    if (color->icc_profile_buf) {
+        opj_free(color->icc_profile_buf);
+    }
 }
 
-static void jp2_apply_pclr(opj_jp2_color_t *color, opj_image_t *image, opj_common_ptr cinfo)
+static void jp2_apply_pclr(opj_jp2_color_t *color, opj_image_t *image,
+                           opj_common_ptr cinfo)
 {
-       opj_image_comp_t *old_comps, *new_comps;
-       unsigned char *channel_size, *channel_sign;
-       unsigned int *entries;
-       opj_jp2_cmap_comp_t *cmap;
-       int *src, *dst;
-       unsigned int j, max;
-       unsigned short i, nr_channels, cmp, pcol;
-       int k, top_k;
-
-       channel_size = color->jp2_pclr->channel_size;
-       channel_sign = color->jp2_pclr->channel_sign;
-       entries = color->jp2_pclr->entries;
-       cmap = color->jp2_pclr->cmap;
-       nr_channels = color->jp2_pclr->nr_channels;
-
-       old_comps = image->comps;
-       new_comps = (opj_image_comp_t*)
-        opj_malloc(nr_channels * sizeof(opj_image_comp_t));
-
-       for(i = 0; i < nr_channels; ++i)
-   {
-       pcol = cmap[i].pcol; cmp = cmap[i].cmp;
-
-  if( pcol < nr_channels )
-    new_comps[pcol] = old_comps[cmp];
-  else
-    {
-    opj_event_msg(cinfo, EVT_ERROR, "Error with pcol value %d (max: %d). skipping\n", pcol, nr_channels);
-    continue;
-    }
-
-       if(cmap[i].mtyp == 0) /* Direct use */
-  {
-       old_comps[cmp].data = NULL; continue;
-  }
-/* Palette mapping: */
-       new_comps[pcol].data = (int*)
-        opj_malloc(old_comps[cmp].w * old_comps[cmp].h * sizeof(int));
-       new_comps[pcol].prec = channel_size[i];
-       new_comps[pcol].sgnd = channel_sign[i];
-   }
-       top_k = color->jp2_pclr->nr_entries - 1;
-
-       for(i = 0; i < nr_channels; ++i)
-   {
-/* Direct use: */
-       if(cmap[i].mtyp == 0) continue;
-
-/* Palette mapping: */
-       cmp = cmap[i].cmp; pcol = cmap[i].pcol;
-       src = old_comps[cmp].data; 
-       dst = new_comps[pcol].data;
-       max = new_comps[pcol].w * new_comps[pcol].h;
-
-       for(j = 0; j < max; ++j)
-  {
-/* The index */
-       if((k = src[j]) < 0) k = 0; else if(k > top_k) k = top_k;
-/* The colour */
-       dst[j] = entries[k * nr_channels + pcol];
-  }
-   }
-       max = image->numcomps;
-       for(i = 0; i < max; ++i)
-   {
-       if(old_comps[i].data) opj_free(old_comps[i].data);
-   }
-       opj_free(old_comps);
-       image->comps = new_comps;
-       image->numcomps = nr_channels;
-
-       jp2_free_pclr(color);
+    opj_image_comp_t *old_comps, *new_comps;
+    unsigned char *channel_size, *channel_sign;
+    unsigned int *entries;
+    opj_jp2_cmap_comp_t *cmap;
+    int *src, *dst;
+    unsigned int j, max;
+    unsigned short i, nr_channels, cmp, pcol;
+    int k, top_k;
+
+    channel_size = color->jp2_pclr->channel_size;
+    channel_sign = color->jp2_pclr->channel_sign;
+    entries = color->jp2_pclr->entries;
+    cmap = color->jp2_pclr->cmap;
+    nr_channels = color->jp2_pclr->nr_channels;
+
+    old_comps = image->comps;
+    new_comps = (opj_image_comp_t*)
+                opj_malloc(nr_channels * sizeof(opj_image_comp_t));
+
+    for (i = 0; i < nr_channels; ++i) {
+        pcol = cmap[i].pcol;
+        cmp = cmap[i].cmp;
+
+        if (pcol < nr_channels) {
+            new_comps[pcol] = old_comps[cmp];
+        } else {
+            opj_event_msg(cinfo, EVT_ERROR,
+                          "Error with pcol value %d (max: %d). skipping\n", pcol, nr_channels);
+            continue;
+        }
+
+        if (cmap[i].mtyp == 0) { /* Direct use */
+            old_comps[cmp].data = NULL;
+            continue;
+        }
+        /* Palette mapping: */
+        new_comps[pcol].data = (int*)
+                               opj_malloc(old_comps[cmp].w * old_comps[cmp].h * sizeof(int));
+        new_comps[pcol].prec = channel_size[i];
+        new_comps[pcol].sgnd = channel_sign[i];
+    }
+    top_k = color->jp2_pclr->nr_entries - 1;
+
+    for (i = 0; i < nr_channels; ++i) {
+        /* Direct use: */
+        if (cmap[i].mtyp == 0) {
+            continue;
+        }
+
+        /* Palette mapping: */
+        cmp = cmap[i].cmp;
+        pcol = cmap[i].pcol;
+        src = old_comps[cmp].data;
+        dst = new_comps[pcol].data;
+        max = new_comps[pcol].w * new_comps[pcol].h;
+
+        for (j = 0; j < max; ++j) {
+            /* The index */
+            if ((k = src[j]) < 0) {
+                k = 0;
+            } else if (k > top_k) {
+                k = top_k;
+            }
+            /* The colour */
+            dst[j] = entries[k * nr_channels + pcol];
+        }
+    }
+    max = image->numcomps;
+    for (i = 0; i < max; ++i) {
+        if (old_comps[i].data) {
+            opj_free(old_comps[i].data);
+        }
+    }
+    opj_free(old_comps);
+    image->comps = new_comps;
+    image->numcomps = nr_channels;
+
+    jp2_free_pclr(color);
 
 }/* apply_pclr() */
 
 static opj_bool jp2_read_pclr(opj_jp2_t *jp2, opj_cio_t *cio,
-       opj_jp2_box_t *box, opj_jp2_color_t *color)
+                              opj_jp2_box_t *box, opj_jp2_color_t *color)
 {
-       opj_jp2_pclr_t *jp2_pclr;
-       unsigned char *channel_size, *channel_sign;
-       unsigned int *entries;
-       unsigned short nr_entries, nr_channels;
-       unsigned short i, j;
-       unsigned char uc;
-
-       OPJ_ARG_NOT_USED(box);
-       OPJ_ARG_NOT_USED(jp2);
-
-/* Part 1, I.5.3.4: 'There shall be at most one Palette box inside
- * a JP2 Header box' :
-*/
-       if(color->jp2_pclr) return OPJ_FALSE;
-
-       nr_entries = (unsigned short)cio_read(cio, 2); /* NE */
-       nr_channels = (unsigned short)cio_read(cio, 1);/* NPC */
-
-       entries = (unsigned int*)
-        opj_malloc(nr_channels * nr_entries * sizeof(unsigned int));
-       channel_size = (unsigned char*)opj_malloc(nr_channels);
-       channel_sign = (unsigned char*)opj_malloc(nr_channels);
-
-       jp2_pclr = (opj_jp2_pclr_t*)opj_malloc(sizeof(opj_jp2_pclr_t));
-       jp2_pclr->channel_sign = channel_sign;
-       jp2_pclr->channel_size = channel_size;
-       jp2_pclr->entries = entries;
-       jp2_pclr->nr_entries = nr_entries;
-       jp2_pclr->nr_channels = nr_channels;
-       jp2_pclr->cmap = NULL;
-
-       color->jp2_pclr = jp2_pclr;
-
-       for(i = 0; i < nr_channels; ++i)
-   {
-       uc = cio_read(cio, 1); /* Bi */
-       channel_size[i] = (uc & 0x7f) + 1;
-       channel_sign[i] = (uc & 0x80)?1:0;
-   }
-
-       for(j = 0; j < nr_entries; ++j)
-   {
-       for(i = 0; i < nr_channels; ++i)
-  {
-/* Cji */
-       *entries++ = cio_read(cio, (channel_size[i]+7)>>3);
-  }
-   }
-
-       return OPJ_TRUE;
+    opj_jp2_pclr_t *jp2_pclr;
+    unsigned char *channel_size, *channel_sign;
+    unsigned int *entries;
+    unsigned short nr_entries, nr_channels;
+    unsigned short i, j;
+    unsigned char uc;
+
+    OPJ_ARG_NOT_USED(box);
+    OPJ_ARG_NOT_USED(jp2);
+
+    /* Part 1, I.5.3.4: 'There shall be at most one Palette box inside
+     * a JP2 Header box' :
+    */
+    if (color->jp2_pclr) {
+        return OPJ_FALSE;
+    }
+
+    nr_entries = (unsigned short)cio_read(cio, 2); /* NE */
+    nr_channels = (unsigned short)cio_read(cio, 1);/* NPC */
+
+    entries = (unsigned int*)
+              opj_malloc(nr_channels * nr_entries * sizeof(unsigned int));
+    channel_size = (unsigned char*)opj_malloc(nr_channels);
+    channel_sign = (unsigned char*)opj_malloc(nr_channels);
+
+    jp2_pclr = (opj_jp2_pclr_t*)opj_malloc(sizeof(opj_jp2_pclr_t));
+    jp2_pclr->channel_sign = channel_sign;
+    jp2_pclr->channel_size = channel_size;
+    jp2_pclr->entries = entries;
+    jp2_pclr->nr_entries = nr_entries;
+    jp2_pclr->nr_channels = nr_channels;
+    jp2_pclr->cmap = NULL;
+
+    color->jp2_pclr = jp2_pclr;
+
+    for (i = 0; i < nr_channels; ++i) {
+        uc = cio_read(cio, 1); /* Bi */
+        channel_size[i] = (uc & 0x7f) + 1;
+        channel_sign[i] = (uc & 0x80) ? 1 : 0;
+    }
+
+    for (j = 0; j < nr_entries; ++j) {
+        for (i = 0; i < nr_channels; ++i) {
+            /* Cji */
+            *entries++ = cio_read(cio, (channel_size[i] + 7) >> 3);
+        }
+    }
+
+    return OPJ_TRUE;
 }/* jp2_read_pclr() */
 
 static opj_bool jp2_read_cmap(opj_jp2_t *jp2, opj_cio_t *cio,
-       opj_jp2_box_t *box, opj_jp2_color_t *color)
+                              opj_jp2_box_t *box, opj_jp2_color_t *color)
 {
-       opj_jp2_cmap_comp_t *cmap;
-       unsigned short i, nr_channels;
+    opj_jp2_cmap_comp_t *cmap;
+    unsigned short i, nr_channels;
 
-       OPJ_ARG_NOT_USED(box);
-       OPJ_ARG_NOT_USED(jp2);
+    OPJ_ARG_NOT_USED(box);
+    OPJ_ARG_NOT_USED(jp2);
 
-/* Need nr_channels: */
-       if(color->jp2_pclr == NULL) return OPJ_FALSE;
+    /* Need nr_channels: */
+    if (color->jp2_pclr == NULL) {
+        return OPJ_FALSE;
+    }
 
-/* Part 1, I.5.3.5: 'There shall be at most one Component Mapping box
- * inside a JP2 Header box' :
-*/
-       if(color->jp2_pclr->cmap) return OPJ_FALSE;
+    /* Part 1, I.5.3.5: 'There shall be at most one Component Mapping box
+     * inside a JP2 Header box' :
+    */
+    if (color->jp2_pclr->cmap) {
+        return OPJ_FALSE;
+    }
 
-       nr_channels = color->jp2_pclr->nr_channels;
-       cmap = (opj_jp2_cmap_comp_t*)
-        opj_malloc(nr_channels * sizeof(opj_jp2_cmap_comp_t));
+    nr_channels = color->jp2_pclr->nr_channels;
+    cmap = (opj_jp2_cmap_comp_t*)
+           opj_malloc(nr_channels * sizeof(opj_jp2_cmap_comp_t));
 
-       for(i = 0; i < nr_channels; ++i)
-   {
-       cmap[i].cmp = (unsigned short)cio_read(cio, 2);
-       cmap[i].mtyp = cio_read(cio, 1);
-       cmap[i].pcol = cio_read(cio, 1);
+    for (i = 0; i < nr_channels; ++i) {
+        cmap[i].cmp = (unsigned short)cio_read(cio, 2);
+        cmap[i].mtyp = cio_read(cio, 1);
+        cmap[i].pcol = cio_read(cio, 1);
 
-   }
-       color->jp2_pclr->cmap = cmap;
+    }
+    color->jp2_pclr->cmap = cmap;
 
-       return OPJ_TRUE;
+    return OPJ_TRUE;
 }/* jp2_read_cmap() */
 
 static void jp2_apply_cdef(opj_image_t *image, opj_jp2_color_t *color)
 {
-       opj_jp2_cdef_info_t *info;
-       int color_space;
-       unsigned short i, n, cn, typ, asoc, acn;
-
-       color_space = image->color_space;
-       info = color->jp2_cdef->info;
-       n = color->jp2_cdef->n;
-
-       for(i = 0; i < n; ++i)
-   {
-/* WATCH: acn = asoc - 1 ! */
-       if((asoc = info[i].asoc) == 0) continue;
+    opj_jp2_cdef_info_t *info;
+    int color_space;
+    unsigned short i, n, cn, typ, asoc, acn;
+
+    color_space = image->color_space;
+    info = color->jp2_cdef->info;
+    n = color->jp2_cdef->n;
+
+    for (i = 0; i < n; ++i) {
+        /* WATCH: acn = asoc - 1 ! */
+        if ((asoc = info[i].asoc) == 0) {
+            continue;
+        }
 
-       cn = info[i].cn; typ = info[i].typ; acn = asoc - 1;
+        cn = info[i].cn;
+        typ = info[i].typ;
+        acn = asoc - 1;
 
-       if(cn != acn)
-  {
-       opj_image_comp_t saved;
+        if (cn != acn) {
+            opj_image_comp_t saved;
 
-       memcpy(&saved, &image->comps[cn], sizeof(opj_image_comp_t));
-       memcpy(&image->comps[cn], &image->comps[acn], sizeof(opj_image_comp_t));
-       memcpy(&image->comps[acn], &saved, sizeof(opj_image_comp_t));
+            memcpy(&saved, &image->comps[cn], sizeof(opj_image_comp_t));
+            memcpy(&image->comps[cn], &image->comps[acn], sizeof(opj_image_comp_t));
+            memcpy(&image->comps[acn], &saved, sizeof(opj_image_comp_t));
 
-       info[i].asoc = cn + 1;
-       info[acn].asoc = info[acn].cn + 1;
-  }
-   }
-       if(color->jp2_cdef->info) opj_free(color->jp2_cdef->info);
+            info[i].asoc = cn + 1;
+            info[acn].asoc = info[acn].cn + 1;
+        }
+    }
+    if (color->jp2_cdef->info) {
+        opj_free(color->jp2_cdef->info);
+    }
 
-       opj_free(color->jp2_cdef); color->jp2_cdef = NULL;
+    opj_free(color->jp2_cdef);
+    color->jp2_cdef = NULL;
 
 }/* jp2_apply_cdef() */
 
 static opj_bool jp2_read_cdef(opj_jp2_t *jp2, opj_cio_t *cio,
-       opj_jp2_box_t *box, opj_jp2_color_t *color)
+                              opj_jp2_box_t *box, opj_jp2_color_t *color)
 {
-       opj_jp2_cdef_info_t *info;
-       unsigned short i, n;
+    opj_jp2_cdef_info_t *info;
+    unsigned short i, n;
 
-       OPJ_ARG_NOT_USED(box);
-       OPJ_ARG_NOT_USED(jp2);
+    OPJ_ARG_NOT_USED(box);
+    OPJ_ARG_NOT_USED(jp2);
 
-/* Part 1, I.5.3.6: 'The shall be at most one Channel Definition box
- * inside a JP2 Header box.' 
-*/
-       if(color->jp2_cdef) return OPJ_FALSE;
+    /* Part 1, I.5.3.6: 'The shall be at most one Channel Definition box
+     * inside a JP2 Header box.'
+    */
+    if (color->jp2_cdef) {
+        return OPJ_FALSE;
+    }
 
-       if((n = (unsigned short)cio_read(cio, 2)) == 0) return OPJ_FALSE; /* szukw000: FIXME */
+    if ((n = (unsigned short)cio_read(cio, 2)) == 0) {
+        return OPJ_FALSE;    /* szukw000: FIXME */
+    }
 
-       info = (opj_jp2_cdef_info_t*)
-        opj_malloc(n * sizeof(opj_jp2_cdef_info_t));
+    info = (opj_jp2_cdef_info_t*)
+           opj_malloc(n * sizeof(opj_jp2_cdef_info_t));
 
-       color->jp2_cdef = (opj_jp2_cdef_t*)opj_malloc(sizeof(opj_jp2_cdef_t));
-       color->jp2_cdef->info = info;
-       color->jp2_cdef->n = n;
+    color->jp2_cdef = (opj_jp2_cdef_t*)opj_malloc(sizeof(opj_jp2_cdef_t));
+    color->jp2_cdef->info = info;
+    color->jp2_cdef->n = n;
 
-       for(i = 0; i < n; ++i)
-   {
-       info[i].cn = (unsigned short)cio_read(cio, 2);
-       info[i].typ = (unsigned short)cio_read(cio, 2);
-       info[i].asoc = (unsigned short)cio_read(cio, 2);
+    for (i = 0; i < n; ++i) {
+        info[i].cn = (unsigned short)cio_read(cio, 2);
+        info[i].typ = (unsigned short)cio_read(cio, 2);
+        info[i].asoc = (unsigned short)cio_read(cio, 2);
 
-   }
-       return OPJ_TRUE;
+    }
+    return OPJ_TRUE;
 }/* jp2_read_cdef() */
 
 static opj_bool jp2_read_colr(opj_jp2_t *jp2, opj_cio_t *cio,
-       opj_jp2_box_t *box, opj_jp2_color_t *color) 
+                              opj_jp2_box_t *box, opj_jp2_color_t *color)
 {
-       int skip_len;
+    int skip_len;
     opj_common_ptr cinfo;
 
-/* Part 1, I.5.3.3 : 'A conforming JP2 reader shall ignore all Colour
- * Specification boxes after the first.' 
-*/
-       if(color->jp2_has_colr) return OPJ_FALSE;
-
-       cinfo = jp2->cinfo;
-
-       jp2->meth = cio_read(cio, 1);           /* METH */
-       jp2->precedence = cio_read(cio, 1);     /* PRECEDENCE */
-       jp2->approx = cio_read(cio, 1);         /* APPROX */
-
-       if (jp2->meth == 1) 
-   {
-       jp2->enumcs = cio_read(cio, 4); /* EnumCS */
-   } 
-       else
-       if (jp2->meth == 2) 
-   {
-/* skip PROFILE */
-       skip_len = box->init_pos + box->length - cio_tell(cio);
-       if (skip_len < 0) 
-  {
-       opj_event_msg(cinfo, EVT_ERROR, "Error with COLR box size\n");
-       return OPJ_FALSE;
-  }
-       if(skip_len > 0)
-  {
-       unsigned char *start;
-
-       start = cio_getbp(cio);
-       color->icc_profile_buf = (unsigned char*)opj_malloc(skip_len);
-       color->icc_profile_len = skip_len;
-
-       cio_skip(cio, box->init_pos + box->length - cio_tell(cio));
-
-       memcpy(color->icc_profile_buf, start, skip_len);
-  }
-   }
-
-       if (cio_tell(cio) - box->init_pos != box->length) 
-   {
-       opj_event_msg(cinfo, EVT_ERROR, "Error with COLR Box\n");
-       return OPJ_FALSE;
-   }
-       color->jp2_has_colr = 1;
-
-       return OPJ_TRUE;
+    /* Part 1, I.5.3.3 : 'A conforming JP2 reader shall ignore all Colour
+     * Specification boxes after the first.'
+    */
+    if (color->jp2_has_colr) {
+        return OPJ_FALSE;
+    }
+
+    cinfo = jp2->cinfo;
+
+    jp2->meth = cio_read(cio, 1);       /* METH */
+    jp2->precedence = cio_read(cio, 1); /* PRECEDENCE */
+    jp2->approx = cio_read(cio, 1);     /* APPROX */
+
+    if (jp2->meth == 1) {
+        jp2->enumcs = cio_read(cio, 4); /* EnumCS */
+    } else if (jp2->meth == 2) {
+        /* skip PROFILE */
+        skip_len = box->init_pos + box->length - cio_tell(cio);
+        if (skip_len < 0) {
+            opj_event_msg(cinfo, EVT_ERROR, "Error with COLR box size\n");
+            return OPJ_FALSE;
+        }
+        if (skip_len > 0) {
+            unsigned char *start;
+
+            start = cio_getbp(cio);
+            color->icc_profile_buf = (unsigned char*)opj_malloc(skip_len);
+            color->icc_profile_len = skip_len;
+
+            cio_skip(cio, box->init_pos + box->length - cio_tell(cio));
+
+            memcpy(color->icc_profile_buf, start, skip_len);
+        }
+    }
+
+    if (cio_tell(cio) - box->init_pos != box->length) {
+        opj_event_msg(cinfo, EVT_ERROR, "Error with COLR Box\n");
+        return OPJ_FALSE;
+    }
+    color->jp2_has_colr = 1;
+
+    return OPJ_TRUE;
 }/* jp2_read_colr() */
 
-opj_bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, opj_jp2_color_t *color) 
+opj_bool jp2_read_jp2h(opj_jp2_t *jp2, opj_cio_t *cio, opj_jp2_color_t *color)
 {
-       opj_jp2_box_t box;
-       int jp2h_end;
-
-       opj_common_ptr cinfo = jp2->cinfo;
-
-  if( jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE ) return OPJ_FALSE;
-  do {
-    if (JP2_JP2H != box.type) 
-      {
-      if (box.type == JP2_JP2C) 
-        {
-        opj_event_msg(cinfo, EVT_ERROR, "Expected JP2H Marker\n");
-        return OPJ_FALSE;
-        }
-         if (box.length <= 8) return OPJ_FALSE;
-      cio_skip(cio, box.length - 8);
+    opj_jp2_box_t box;
+    int jp2h_end;
 
-      if(cio->bp >= cio->end) return OPJ_FALSE;
+    opj_common_ptr cinfo = jp2->cinfo;
 
-      if( jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE ) return OPJ_FALSE;
-      }
-  } while(JP2_JP2H != box.type);
+    if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
+        return OPJ_FALSE;
+    }
+    do {
+        if (JP2_JP2H != box.type) {
+            if (box.type == JP2_JP2C) {
+                opj_event_msg(cinfo, EVT_ERROR, "Expected JP2H Marker\n");
+                return OPJ_FALSE;
+            }
+            if (box.length <= 8) {
+                return OPJ_FALSE;
+            }
+            cio_skip(cio, box.length - 8);
+
+            if (cio->bp >= cio->end) {
+                return OPJ_FALSE;
+            }
+
+            if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
+                return OPJ_FALSE;
+            }
+        }
+    } while (JP2_JP2H != box.type);
 
-       if (!jp2_read_ihdr(jp2, cio))
-               return OPJ_FALSE;
-       jp2h_end = box.init_pos + box.length;
+    if (!jp2_read_ihdr(jp2, cio)) {
+        return OPJ_FALSE;
+    }
+    jp2h_end = box.init_pos + box.length;
 
-  if (jp2->bpc == 255) 
-    {
-    if (!jp2_read_bpcc(jp2, cio))
-      return OPJ_FALSE;
+    if (jp2->bpc == 255) {
+        if (!jp2_read_bpcc(jp2, cio)) {
+            return OPJ_FALSE;
+        }
+    }
+    if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
+        return OPJ_FALSE;
     }
-  if( jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE ) return OPJ_FALSE;
 
-  while(cio_tell(cio) < jp2h_end)
-    {
-    if(box.type == JP2_COLR)
-      {
-      if( !jp2_read_colr(jp2, cio, &box, color))
-        {
-        if (box.length <= 8) return OPJ_FALSE;
-        cio_seek(cio, box.init_pos + 8);
-        cio_skip(cio, box.length - 8);
+    while (cio_tell(cio) < jp2h_end) {
+        if (box.type == JP2_COLR) {
+            if (!jp2_read_colr(jp2, cio, &box, color)) {
+                if (box.length <= 8) {
+                    return OPJ_FALSE;
+                }
+                cio_seek(cio, box.init_pos + 8);
+                cio_skip(cio, box.length - 8);
+            }
+            if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
+                return OPJ_FALSE;
+            }
+            continue;
         }
-      if( jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE ) return OPJ_FALSE;
-      continue;
-      }
-    if(box.type == JP2_CDEF && !jp2->ignore_pclr_cmap_cdef)
-      {
-      if( !jp2_read_cdef(jp2, cio, &box, color))
-        {
-        if (box.length <= 8) return OPJ_FALSE;
-        cio_seek(cio, box.init_pos + 8);
-        cio_skip(cio, box.length - 8);
+        if (box.type == JP2_CDEF && !jp2->ignore_pclr_cmap_cdef) {
+            if (!jp2_read_cdef(jp2, cio, &box, color)) {
+                if (box.length <= 8) {
+                    return OPJ_FALSE;
+                }
+                cio_seek(cio, box.init_pos + 8);
+                cio_skip(cio, box.length - 8);
+            }
+            if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
+                return OPJ_FALSE;
+            }
+            continue;
         }
-      if( jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE ) return OPJ_FALSE;
-      continue;
-      }
-    if(box.type == JP2_PCLR && !jp2->ignore_pclr_cmap_cdef)
-      {
-      if( !jp2_read_pclr(jp2, cio, &box, color))
-        {
-        if (box.length <= 8) return OPJ_FALSE;
-        cio_seek(cio, box.init_pos + 8);
-        cio_skip(cio, box.length - 8);
+        if (box.type == JP2_PCLR && !jp2->ignore_pclr_cmap_cdef) {
+            if (!jp2_read_pclr(jp2, cio, &box, color)) {
+                if (box.length <= 8) {
+                    return OPJ_FALSE;
+                }
+                cio_seek(cio, box.init_pos + 8);
+                cio_skip(cio, box.length - 8);
+            }
+            if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
+                return OPJ_FALSE;
+            }
+            continue;
+        }
+        if (box.type == JP2_CMAP && !jp2->ignore_pclr_cmap_cdef) {
+            if (!jp2_read_cmap(jp2, cio, &box, color)) {
+                if (box.length <= 8) {
+                    return OPJ_FALSE;
+                }
+                cio_seek(cio, box.init_pos + 8);
+                cio_skip(cio, box.length - 8);
+            }
+            if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
+                return OPJ_FALSE;
+            }
+            continue;
+        }
+        if (box.length <= 8) {
+            return OPJ_FALSE;
         }
-      if( jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE ) return OPJ_FALSE;
-      continue;
-      }
-    if(box.type == JP2_CMAP && !jp2->ignore_pclr_cmap_cdef)
-      {
-      if( !jp2_read_cmap(jp2, cio, &box, color))
-        {
-        if (box.length <= 8) return OPJ_FALSE;
         cio_seek(cio, box.init_pos + 8);
         cio_skip(cio, box.length - 8);
+        if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
+            return OPJ_FALSE;
         }
-      if( jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE ) return OPJ_FALSE;
-      continue;
-      }
-    if (box.length <= 8) return OPJ_FALSE;
-    cio_seek(cio, box.init_pos + 8);
-    cio_skip(cio, box.length - 8);
-    if( jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE ) return OPJ_FALSE;
 
     }/* while(cio_tell(cio) < box_end) */
 
-  cio_seek(cio, jp2h_end);
+    cio_seek(cio, jp2h_end);
 
-  /* Part 1, I.5.3.3 : 'must contain at least one' */
-  return (color->jp2_has_colr == 1);
+    /* Part 1, I.5.3.3 : 'must contain at least one' */
+    return (color->jp2_has_colr == 1);
 
 }/* jp2_read_jp2h() */
 
-opj_image_t* opj_jp2_decode(opj_jp2_t *jp2, opj_cio_t *cio, 
-       opj_codestream_info_t *cstr_info) 
+opj_image_t* opj_jp2_decode(opj_jp2_t *jp2, opj_cio_t *cio,
+                            opj_codestream_info_t *cstr_info)
 {
-       opj_common_ptr cinfo;
-       opj_image_t *image = NULL;
-       opj_jp2_color_t color;
-
-       if(!jp2 || !cio) 
-   {
-       return NULL;
-   }
-       memset(&color, 0, sizeof(opj_jp2_color_t));
-       cinfo = jp2->cinfo;
-
-/* JP2 decoding */
-       if(!jp2_read_struct(jp2, cio, &color)) 
-   {
-       free_color_data(&color);
-       opj_event_msg(cinfo, EVT_ERROR, "Failed to decode jp2 structure\n");
-       return NULL;
-   }
-
-/* J2K decoding */
-       image = j2k_decode(jp2->j2k, cio, cstr_info);
-
-       if(!image) 
-   {
-       free_color_data(&color);
-       opj_event_msg(cinfo, EVT_ERROR, "Failed to decode J2K image\n");
-       return NULL;
-   }
-   
-    if (!jp2->ignore_pclr_cmap_cdef){
-
-    /* Set Image Color Space */
-       if (jp2->enumcs == 16)
-               image->color_space = CLRSPC_SRGB;
-       else if (jp2->enumcs == 17)
-               image->color_space = CLRSPC_GRAY;
-       else if (jp2->enumcs == 18)
-               image->color_space = CLRSPC_SYCC;
-       else
-               image->color_space = CLRSPC_UNKNOWN;
-
-       if(color.jp2_cdef)
-   {
-       jp2_apply_cdef(image, &color);
-   }
-       if(color.jp2_pclr)
-   {
-/* Part 1, I.5.3.4: Either both or none : */
-       if( !color.jp2_pclr->cmap) 
-        jp2_free_pclr(&color);
-       else
-        jp2_apply_pclr(&color, image, cinfo);
-   }
-       if(color.icc_profile_buf)
-   {
-       image->icc_profile_buf = color.icc_profile_buf;
-       color.icc_profile_buf = NULL;
-       image->icc_profile_len = color.icc_profile_len;
-   }
-   }
-   
-       return image;
+    opj_common_ptr cinfo;
+    opj_image_t *image = NULL;
+    opj_jp2_color_t color;
+
+    if (!jp2 || !cio) {
+        return NULL;
+    }
+    memset(&color, 0, sizeof(opj_jp2_color_t));
+    cinfo = jp2->cinfo;
+
+    /* JP2 decoding */
+    if (!jp2_read_struct(jp2, cio, &color)) {
+        free_color_data(&color);
+        opj_event_msg(cinfo, EVT_ERROR, "Failed to decode jp2 structure\n");
+        return NULL;
+    }
+
+    /* J2K decoding */
+    image = j2k_decode(jp2->j2k, cio, cstr_info);
+
+    if (!image) {
+        free_color_data(&color);
+        opj_event_msg(cinfo, EVT_ERROR, "Failed to decode J2K image\n");
+        return NULL;
+    }
+
+    if (!jp2->ignore_pclr_cmap_cdef) {
+
+        /* Set Image Color Space */
+        if (jp2->enumcs == 16) {
+            image->color_space = CLRSPC_SRGB;
+        } else if (jp2->enumcs == 17) {
+            image->color_space = CLRSPC_GRAY;
+        } else if (jp2->enumcs == 18) {
+            image->color_space = CLRSPC_SYCC;
+        } else {
+            image->color_space = CLRSPC_UNKNOWN;
+        }
+
+        if (color.jp2_cdef) {
+            jp2_apply_cdef(image, &color);
+        }
+        if (color.jp2_pclr) {
+            /* Part 1, I.5.3.4: Either both or none : */
+            if (!color.jp2_pclr->cmap) {
+                jp2_free_pclr(&color);
+            } else {
+                jp2_apply_pclr(&color, image, cinfo);
+            }
+        }
+        if (color.icc_profile_buf) {
+            image->icc_profile_buf = color.icc_profile_buf;
+            color.icc_profile_buf = NULL;
+            image->icc_profile_len = color.icc_profile_len;
+        }
+    }
+
+    return image;
 
 }/* opj_jp2_decode() */
 
 
-void jp2_write_jp2h(opj_jp2_t *jp2, opj_cio_t *cio) {
-       opj_jp2_box_t box;
+void jp2_write_jp2h(opj_jp2_t *jp2, opj_cio_t *cio)
+{
+    opj_jp2_box_t box;
 
-       box.init_pos = cio_tell(cio);
-       cio_skip(cio, 4);
-       cio_write(cio, JP2_JP2H, 4);    /* JP2H */
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, JP2_JP2H, 4);    /* JP2H */
 
-       jp2_write_ihdr(jp2, cio);
+    jp2_write_ihdr(jp2, cio);
 
-       if (jp2->bpc == 255) {
-               jp2_write_bpcc(jp2, cio);
-       }
-       jp2_write_colr(jp2, cio);
+    if (jp2->bpc == 255) {
+        jp2_write_bpcc(jp2, cio);
+    }
+    jp2_write_colr(jp2, cio);
 
-       box.length = cio_tell(cio) - box.init_pos;
-       cio_seek(cio, box.init_pos);
-       cio_write(cio, box.length, 4);  /* L */
-       cio_seek(cio, box.init_pos + box.length);
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);  /* L */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
-static void jp2_write_ftyp(opj_jp2_t *jp2, opj_cio_t *cio) {
-       unsigned int i;
-       opj_jp2_box_t box;
+static void jp2_write_ftyp(opj_jp2_t *jp2, opj_cio_t *cio)
+{
+    unsigned int i;
+    opj_jp2_box_t box;
 
-       box.init_pos = cio_tell(cio);
-       cio_skip(cio, 4);
-       cio_write(cio, JP2_FTYP, 4);            /* FTYP */
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, JP2_FTYP, 4);        /* FTYP */
 
-       cio_write(cio, jp2->brand, 4);          /* BR */
-       cio_write(cio, jp2->minversion, 4);     /* MinV */
+    cio_write(cio, jp2->brand, 4);      /* BR */
+    cio_write(cio, jp2->minversion, 4); /* MinV */
 
-       for (i = 0; i < jp2->numcl; i++) {
-               cio_write(cio, jp2->cl[i], 4);  /* CL */
-       }
+    for (i = 0; i < jp2->numcl; i++) {
+        cio_write(cio, jp2->cl[i], 4);  /* CL */
+    }
 
-       box.length = cio_tell(cio) - box.init_pos;
-       cio_seek(cio, box.init_pos);
-       cio_write(cio, box.length, 4);  /* L */
-       cio_seek(cio, box.init_pos + box.length);
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);  /* L */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
-static opj_bool jp2_read_ftyp(opj_jp2_t *jp2, opj_cio_t *cio) {
-       int i;
-       opj_jp2_box_t box;
+static opj_bool jp2_read_ftyp(opj_jp2_t *jp2, opj_cio_t *cio)
+{
+    int i;
+    opj_jp2_box_t box;
 
-       opj_common_ptr cinfo = jp2->cinfo;
+    opj_common_ptr cinfo = jp2->cinfo;
 
-  if( jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE ) {
-    opj_event_msg(cinfo, EVT_ERROR, "Failed to read boxhdr\n");
-    return OPJ_FALSE;
-  }
-       if (JP2_FTYP != box.type) {
-               opj_event_msg(cinfo, EVT_ERROR, "Expected FTYP Marker\n");
-               return OPJ_FALSE;
-       }
+    if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
+        opj_event_msg(cinfo, EVT_ERROR, "Failed to read boxhdr\n");
+        return OPJ_FALSE;
+    }
+    if (JP2_FTYP != box.type) {
+        opj_event_msg(cinfo, EVT_ERROR, "Expected FTYP Marker\n");
+        return OPJ_FALSE;
+    }
 
-       jp2->brand = cio_read(cio, 4);          /* BR */
-       jp2->minversion = cio_read(cio, 4);     /* MinV */
-       jp2->numcl = (box.length - 16) / 4;
-       jp2->cl = (unsigned int *) opj_malloc(jp2->numcl * sizeof(unsigned int));
+    jp2->brand = cio_read(cio, 4);      /* BR */
+    jp2->minversion = cio_read(cio, 4); /* MinV */
+    jp2->numcl = (box.length - 16) / 4;
+    jp2->cl = (unsigned int *) opj_malloc(jp2->numcl * sizeof(unsigned int));
 
-       for (i = 0; i < (int)jp2->numcl; i++) {
-               jp2->cl[i] = cio_read(cio, 4);  /* CLi */
-       }
+    for (i = 0; i < (int)jp2->numcl; i++) {
+        jp2->cl[i] = cio_read(cio, 4);  /* CLi */
+    }
 
-       if (cio_tell(cio) - box.init_pos != box.length) {
-               opj_event_msg(cinfo, EVT_ERROR, "Error with FTYP Box\n");
-               return OPJ_FALSE;
-       }
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cinfo, EVT_ERROR, "Error with FTYP Box\n");
+        return OPJ_FALSE;
+    }
 
-       return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static int jp2_write_jp2c(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info) {
-       unsigned int j2k_codestream_offset, j2k_codestream_length;
-       opj_jp2_box_t box;
+static int jp2_write_jp2c(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image,
+                          opj_codestream_info_t *cstr_info)
+{
+    unsigned int j2k_codestream_offset, j2k_codestream_length;
+    opj_jp2_box_t box;
 
-       opj_j2k_t *j2k = jp2->j2k;
+    opj_j2k_t *j2k = jp2->j2k;
 
-       box.init_pos = cio_tell(cio);
-       cio_skip(cio, 4);
-       cio_write(cio, JP2_JP2C, 4);    /* JP2C */
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, JP2_JP2C, 4);    /* JP2C */
 
-       /* J2K encoding */
-       j2k_codestream_offset = cio_tell(cio);
-       if(!j2k_encode(j2k, cio, image, cstr_info)) {
-               opj_event_msg(j2k->cinfo, EVT_ERROR, "Failed to encode image\n");
-               return 0;
-       }
-       j2k_codestream_length = cio_tell(cio) - j2k_codestream_offset;
+    /* J2K encoding */
+    j2k_codestream_offset = cio_tell(cio);
+    if (!j2k_encode(j2k, cio, image, cstr_info)) {
+        opj_event_msg(j2k->cinfo, EVT_ERROR, "Failed to encode image\n");
+        return 0;
+    }
+    j2k_codestream_length = cio_tell(cio) - j2k_codestream_offset;
 
-       jp2->j2k_codestream_offset = j2k_codestream_offset;
-       jp2->j2k_codestream_length = j2k_codestream_length;
+    jp2->j2k_codestream_offset = j2k_codestream_offset;
+    jp2->j2k_codestream_length = j2k_codestream_length;
 
-       box.length = 8 + jp2->j2k_codestream_length;
-       cio_seek(cio, box.init_pos);
-       cio_write(cio, box.length, 4);  /* L */
-       cio_seek(cio, box.init_pos + box.length);
+    box.length = 8 + jp2->j2k_codestream_length;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);  /* L */
+    cio_seek(cio, box.init_pos + box.length);
 
-       return box.length;
+    return box.length;
 }
 
-static opj_bool jp2_read_jp2c(opj_jp2_t *jp2, opj_cio_t *cio, unsigned int *j2k_codestream_length, unsigned int *j2k_codestream_offset) {
-       opj_jp2_box_t box;
+static opj_bool jp2_read_jp2c(opj_jp2_t *jp2, opj_cio_t *cio,
+                              unsigned int *j2k_codestream_length, unsigned int *j2k_codestream_offset)
+{
+    opj_jp2_box_t box;
 
-       opj_common_ptr cinfo = jp2->cinfo;
+    opj_common_ptr cinfo = jp2->cinfo;
 
-  if( jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE ) {
-    opj_event_msg(cinfo, EVT_ERROR, "Failed to read boxhdr\n");
-    return OPJ_FALSE;
-  }
-       do {
-               if(JP2_JP2C != box.type) {
-                       if (box.length <= 8) return OPJ_FALSE;
-                       cio_skip(cio, box.length - 8);
-                       if( jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE ) return OPJ_FALSE;
-               }
-       } while(JP2_JP2C != box.type);
+    if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
+        opj_event_msg(cinfo, EVT_ERROR, "Failed to read boxhdr\n");
+        return OPJ_FALSE;
+    }
+    do {
+        if (JP2_JP2C != box.type) {
+            if (box.length <= 8) {
+                return OPJ_FALSE;
+            }
+            cio_skip(cio, box.length - 8);
+            if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
+                return OPJ_FALSE;
+            }
+        }
+    } while (JP2_JP2C != box.type);
 
-       *j2k_codestream_offset = cio_tell(cio);
-       if (box.length <= 8) return OPJ_FALSE;
-       *j2k_codestream_length = box.length - 8;
+    *j2k_codestream_offset = cio_tell(cio);
+    if (box.length <= 8) {
+        return OPJ_FALSE;
+    }
+    *j2k_codestream_length = box.length - 8;
 
-       return OPJ_TRUE;
+    return OPJ_TRUE;
 }
 
-static void jp2_write_jp(opj_cio_t *cio) {
-       opj_jp2_box_t box;
+static void jp2_write_jp(opj_cio_t *cio)
+{
+    opj_jp2_box_t box;
 
-       box.init_pos = cio_tell(cio);
-       cio_skip(cio, 4);
-       cio_write(cio, JP2_JP, 4);              /* JP2 signature */
-       cio_write(cio, 0x0d0a870a, 4);
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, JP2_JP, 4);      /* JP2 signature */
+    cio_write(cio, 0x0d0a870a, 4);
 
-       box.length = cio_tell(cio) - box.init_pos;
-       cio_seek(cio, box.init_pos);
-       cio_write(cio, box.length, 4);  /* L */
-       cio_seek(cio, box.init_pos + box.length);
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);  /* L */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
-static opj_bool jp2_read_jp(opj_jp2_t *jp2, opj_cio_t *cio) {
-       opj_jp2_box_t box;
-
-       opj_common_ptr cinfo = jp2->cinfo;
-
-  if( jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE ) {
-    opj_event_msg(cinfo, EVT_ERROR, "Failed to read boxhdr\n");
-    return OPJ_FALSE;
-  }
-       if (JP2_JP != box.type) {
-               opj_event_msg(cinfo, EVT_ERROR, "Expected JP Marker\n");
-               return OPJ_FALSE;
-       }
-       if (0x0d0a870a != cio_read(cio, 4)) {
-               opj_event_msg(cinfo, EVT_ERROR, "Error with JP Marker\n");
-               return OPJ_FALSE;
-       }
-       if (cio_tell(cio) - box.init_pos != box.length) {
-               opj_event_msg(cinfo, EVT_ERROR, "Error with JP Box size\n");
-               return OPJ_FALSE;
-       }
-
-       return OPJ_TRUE;
+static opj_bool jp2_read_jp(opj_jp2_t *jp2, opj_cio_t *cio)
+{
+    opj_jp2_box_t box;
+
+    opj_common_ptr cinfo = jp2->cinfo;
+
+    if (jp2_read_boxhdr(cinfo, cio, &box) == OPJ_FALSE) {
+        opj_event_msg(cinfo, EVT_ERROR, "Failed to read boxhdr\n");
+        return OPJ_FALSE;
+    }
+    if (JP2_JP != box.type) {
+        opj_event_msg(cinfo, EVT_ERROR, "Expected JP Marker\n");
+        return OPJ_FALSE;
+    }
+    if (0x0d0a870a != cio_read(cio, 4)) {
+        opj_event_msg(cinfo, EVT_ERROR, "Error with JP Marker\n");
+        return OPJ_FALSE;
+    }
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cinfo, EVT_ERROR, "Error with JP Box size\n");
+        return OPJ_FALSE;
+    }
+
+    return OPJ_TRUE;
 }
 
 
 static opj_bool jp2_read_struct(opj_jp2_t *jp2, opj_cio_t *cio,
-       opj_jp2_color_t *color) {
-       if (!jp2_read_jp(jp2, cio))
-               return OPJ_FALSE;
-       if (!jp2_read_ftyp(jp2, cio))
-               return OPJ_FALSE;
-       if (!jp2_read_jp2h(jp2, cio, color))
-               return OPJ_FALSE;
-       if (!jp2_read_jp2c(jp2, cio, &jp2->j2k_codestream_length, &jp2->j2k_codestream_offset))
-               return OPJ_FALSE;
-       
-       return OPJ_TRUE;
+                                opj_jp2_color_t *color)
+{
+    if (!jp2_read_jp(jp2, cio)) {
+        return OPJ_FALSE;
+    }
+    if (!jp2_read_ftyp(jp2, cio)) {
+        return OPJ_FALSE;
+    }
+    if (!jp2_read_jp2h(jp2, cio, color)) {
+        return OPJ_FALSE;
+    }
+    if (!jp2_read_jp2c(jp2, cio, &jp2->j2k_codestream_length,
+                       &jp2->j2k_codestream_offset)) {
+        return OPJ_FALSE;
+    }
+
+    return OPJ_TRUE;
 }
 
 
@@ -974,159 +1042,174 @@ static opj_bool jp2_read_struct(opj_jp2_t *jp2, opj_cio_t *cio,
 /* JP2 decoder interface                                             */
 /* ----------------------------------------------------------------------- */
 
-opj_jp2_t* jp2_create_decompress(opj_common_ptr cinfo) {
-       opj_jp2_t *jp2 = (opj_jp2_t*) opj_calloc(1, sizeof(opj_jp2_t));
-       if(jp2) {
-               jp2->cinfo = cinfo;
-               /* create the J2K codec */
-               jp2->j2k = j2k_create_decompress(cinfo);
-               if(jp2->j2k == NULL) {
-                       jp2_destroy_decompress(jp2);
-                       return NULL;
-               }
-       }
-       return jp2;
+opj_jp2_t* jp2_create_decompress(opj_common_ptr cinfo)
+{
+    opj_jp2_t *jp2 = (opj_jp2_t*) opj_calloc(1, sizeof(opj_jp2_t));
+    if (jp2) {
+        jp2->cinfo = cinfo;
+        /* create the J2K codec */
+        jp2->j2k = j2k_create_decompress(cinfo);
+        if (jp2->j2k == NULL) {
+            jp2_destroy_decompress(jp2);
+            return NULL;
+        }
+    }
+    return jp2;
 }
 
-void jp2_destroy_decompress(opj_jp2_t *jp2) {
-       if(jp2) {
-               /* destroy the J2K codec */
-               j2k_destroy_decompress(jp2->j2k);
-
-               if(jp2->comps) {
-                       opj_free(jp2->comps);
-               }
-               if(jp2->cl) {
-                       opj_free(jp2->cl);
-               }
-               opj_free(jp2);
-       }
+void jp2_destroy_decompress(opj_jp2_t *jp2)
+{
+    if (jp2) {
+        /* destroy the J2K codec */
+        j2k_destroy_decompress(jp2->j2k);
+
+        if (jp2->comps) {
+            opj_free(jp2->comps);
+        }
+        if (jp2->cl) {
+            opj_free(jp2->cl);
+        }
+        opj_free(jp2);
+    }
 }
 
-void jp2_setup_decoder(opj_jp2_t *jp2, opj_dparameters_t *parameters) {
-       /* setup the J2K codec */
-       j2k_setup_decoder(jp2->j2k, parameters);
-       /* further JP2 initializations go here */
-       jp2->ignore_pclr_cmap_cdef = parameters->flags & OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG;
+void jp2_setup_decoder(opj_jp2_t *jp2, opj_dparameters_t *parameters)
+{
+    /* setup the J2K codec */
+    j2k_setup_decoder(jp2->j2k, parameters);
+    /* further JP2 initializations go here */
+    jp2->ignore_pclr_cmap_cdef = parameters->flags &
+                                 OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG;
 }
 
 /* ----------------------------------------------------------------------- */
 /* JP2 encoder interface                                             */
 /* ----------------------------------------------------------------------- */
 
-opj_jp2_t* jp2_create_compress(opj_common_ptr cinfo) {
-       opj_jp2_t *jp2 = (opj_jp2_t*)opj_malloc(sizeof(opj_jp2_t));
-       if(jp2) {
-               jp2->cinfo = cinfo;
-               /* create the J2K codec */
-               jp2->j2k = j2k_create_compress(cinfo);
-               if(jp2->j2k == NULL) {
-                       jp2_destroy_compress(jp2);
-                       return NULL;
-               }
-       }
-       return jp2;
+opj_jp2_t* jp2_create_compress(opj_common_ptr cinfo)
+{
+    opj_jp2_t *jp2 = (opj_jp2_t*)opj_malloc(sizeof(opj_jp2_t));
+    if (jp2) {
+        jp2->cinfo = cinfo;
+        /* create the J2K codec */
+        jp2->j2k = j2k_create_compress(cinfo);
+        if (jp2->j2k == NULL) {
+            jp2_destroy_compress(jp2);
+            return NULL;
+        }
+    }
+    return jp2;
 }
 
-void jp2_destroy_compress(opj_jp2_t *jp2) {
-       if(jp2) {
-               /* destroy the J2K codec */
-               j2k_destroy_compress(jp2->j2k);
-
-               if(jp2->comps) {
-                       opj_free(jp2->comps);
-               }
-               if(jp2->cl) {
-                       opj_free(jp2->cl);
-               }
-               opj_free(jp2);
-       }
+void jp2_destroy_compress(opj_jp2_t *jp2)
+{
+    if (jp2) {
+        /* destroy the J2K codec */
+        j2k_destroy_compress(jp2->j2k);
+
+        if (jp2->comps) {
+            opj_free(jp2->comps);
+        }
+        if (jp2->cl) {
+            opj_free(jp2->cl);
+        }
+        opj_free(jp2);
+    }
 }
 
-void jp2_setup_encoder(opj_jp2_t *jp2, opj_cparameters_t *parameters, opj_image_t *image) {
-       int i;
-       int depth_0, sign;
-
-       if(!jp2 || !parameters || !image)
-               return;
-
-       /* setup the J2K codec */
-       /* ------------------- */
-
-       /* Check if number of components respects standard */
-       if (image->numcomps < 1 || image->numcomps > 16384) {
-               opj_event_msg(jp2->cinfo, EVT_ERROR, "Invalid number of components specified while setting up JP2 encoder\n");
-               return;
-       }
-
-       j2k_setup_encoder(jp2->j2k, parameters, image);
-
-       /* setup the JP2 codec */
-       /* ------------------- */
-       
-       /* Profile box */
-
-       jp2->brand = JP2_JP2;   /* BR */
-       jp2->minversion = 0;    /* MinV */
-       jp2->numcl = 1;
-       jp2->cl = (unsigned int*) opj_malloc(jp2->numcl * sizeof(unsigned int));
-       jp2->cl[0] = JP2_JP2;   /* CL0 : JP2 */
-
-       /* Image Header box */
-
-       jp2->numcomps = image->numcomps;        /* NC */
-       jp2->comps = (opj_jp2_comps_t*) opj_malloc(jp2->numcomps * sizeof(opj_jp2_comps_t));
-       jp2->h = image->y1 - image->y0;         /* HEIGHT */
-       jp2->w = image->x1 - image->x0;         /* WIDTH */
-       /* BPC */
-       depth_0 = image->comps[0].prec - 1;
-       sign = image->comps[0].sgnd;
-       jp2->bpc = depth_0 + (sign << 7);
-       for (i = 1; i < image->numcomps; i++) {
-               int depth = image->comps[i].prec - 1;
-               sign = image->comps[i].sgnd;
-               if (depth_0 != depth)
-                       jp2->bpc = 255;
-       }
-       jp2->C = 7;                     /* C : Always 7 */
-       jp2->UnkC = 0;          /* UnkC, colorspace specified in colr box */
-       jp2->IPR = 0;           /* IPR, no intellectual property */
-       
-       /* BitsPerComponent box */
-
-       for (i = 0; i < image->numcomps; i++) {
-               jp2->comps[i].bpcc = image->comps[i].prec - 1 + (image->comps[i].sgnd << 7);
-       }
-       jp2->meth = 1;
-       if (image->color_space == 1)
-               jp2->enumcs = 16;       /* sRGB as defined by IEC 61966-2.1 */
-       else if (image->color_space == 2)
-               jp2->enumcs = 17;       /* greyscale */
-       else if (image->color_space == 3)
-               jp2->enumcs = 18;       /* YUV */
-       jp2->precedence = 0;    /* PRECEDENCE */
-       jp2->approx = 0;                /* APPROX */
+void jp2_setup_encoder(opj_jp2_t *jp2, opj_cparameters_t *parameters,
+                       opj_image_t *image)
+{
+    int i;
+    int depth_0, sign;
+
+    if (!jp2 || !parameters || !image) {
+        return;
+    }
+
+    /* setup the J2K codec */
+    /* ------------------- */
+
+    /* Check if number of components respects standard */
+    if (image->numcomps < 1 || image->numcomps > 16384) {
+        opj_event_msg(jp2->cinfo, EVT_ERROR,
+                      "Invalid number of components specified while setting up JP2 encoder\n");
+        return;
+    }
+
+    j2k_setup_encoder(jp2->j2k, parameters, image);
+
+    /* setup the JP2 codec */
+    /* ------------------- */
+
+    /* Profile box */
+
+    jp2->brand = JP2_JP2;   /* BR */
+    jp2->minversion = 0;    /* MinV */
+    jp2->numcl = 1;
+    jp2->cl = (unsigned int*) opj_malloc(jp2->numcl * sizeof(unsigned int));
+    jp2->cl[0] = JP2_JP2;   /* CL0 : JP2 */
+
+    /* Image Header box */
+
+    jp2->numcomps = image->numcomps;    /* NC */
+    jp2->comps = (opj_jp2_comps_t*) opj_malloc(jp2->numcomps * sizeof(
+                     opj_jp2_comps_t));
+    jp2->h = image->y1 - image->y0;     /* HEIGHT */
+    jp2->w = image->x1 - image->x0;     /* WIDTH */
+    /* BPC */
+    depth_0 = image->comps[0].prec - 1;
+    sign = image->comps[0].sgnd;
+    jp2->bpc = depth_0 + (sign << 7);
+    for (i = 1; i < image->numcomps; i++) {
+        int depth = image->comps[i].prec - 1;
+        sign = image->comps[i].sgnd;
+        if (depth_0 != depth) {
+            jp2->bpc = 255;
+        }
+    }
+    jp2->C = 7;         /* C : Always 7 */
+    jp2->UnkC = 0;      /* UnkC, colorspace specified in colr box */
+    jp2->IPR = 0;       /* IPR, no intellectual property */
+
+    /* BitsPerComponent box */
+
+    for (i = 0; i < image->numcomps; i++) {
+        jp2->comps[i].bpcc = image->comps[i].prec - 1 + (image->comps[i].sgnd << 7);
+    }
+    jp2->meth = 1;
+    if (image->color_space == 1) {
+        jp2->enumcs = 16;    /* sRGB as defined by IEC 61966-2.1 */
+    } else if (image->color_space == 2) {
+        jp2->enumcs = 17;    /* greyscale */
+    } else if (image->color_space == 3) {
+        jp2->enumcs = 18;    /* YUV */
+    }
+    jp2->precedence = 0;    /* PRECEDENCE */
+    jp2->approx = 0;        /* APPROX */
 }
 
-opj_bool opj_jp2_encode(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info) {
+opj_bool opj_jp2_encode(opj_jp2_t *jp2, opj_cio_t *cio, opj_image_t *image,
+                        opj_codestream_info_t *cstr_info)
+{
 
-       int pos_iptr, pos_jp2c, len_jp2c;
-       pos_jp2c = pos_iptr = -1; /* remove a warning */
+    int pos_iptr, pos_jp2c, len_jp2c;
+    pos_jp2c = pos_iptr = -1; /* remove a warning */
 
-       /* JP2 encoding */
+    /* JP2 encoding */
 
-       /* JPEG 2000 Signature box */
-       jp2_write_jp(cio);
-       /* File Type box */
-       jp2_write_ftyp(jp2, cio);
-       /* JP2 Header box */
-       jp2_write_jp2h(jp2, cio);
+    /* JPEG 2000 Signature box */
+    jp2_write_jp(cio);
+    /* File Type box */
+    jp2_write_ftyp(jp2, cio);
+    /* JP2 Header box */
+    jp2_write_jp2h(jp2, cio);
 
-       /* J2K encoding */
-       if(!(len_jp2c = jp2_write_jp2c( jp2, cio, image, cstr_info))){
-           opj_event_msg(jp2->cinfo, EVT_ERROR, "Failed to encode image\n");
-           return OPJ_FALSE;
-       }
+    /* J2K encoding */
+    if (!(len_jp2c = jp2_write_jp2c(jp2, cio, image, cstr_info))) {
+        opj_event_msg(jp2->cinfo, EVT_ERROR, "Failed to encode image\n");
+        return OPJ_FALSE;
+    }
 
-       return OPJ_TRUE;
+    return OPJ_TRUE;
 }
index c31c87b4d50addd69f779574b7d715614f685a01..8e94583cd781c56eb506b4b7bb9788718c447588 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
  * Store information (7 bits) in value
  *
  */
-static unsigned int jpt_read_VBAS_info(opj_cio_t *cio, unsigned int value) {
-       unsigned char elmt;
-
-       elmt = cio_read(cio, 1);
-       while ((elmt >> 7) == 1) {
-               value = (value << 7);
-               value |= (elmt & 0x7f);
-               elmt = cio_read(cio, 1);
-       }
-       value = (value << 7);
-       value |= (elmt & 0x7f);
-
-       return value;
+static unsigned int jpt_read_VBAS_info(opj_cio_t *cio, unsigned int value)
+{
+    unsigned char elmt;
+
+    elmt = cio_read(cio, 1);
+    while ((elmt >> 7) == 1) {
+        value = (value << 7);
+        value |= (elmt & 0x7f);
+        elmt = cio_read(cio, 1);
+    }
+    value = (value << 7);
+    value |= (elmt & 0x7f);
+
+    return value;
 }
 
 /*
- * Initialize the value of the message header structure 
+ * Initialize the value of the message header structure
  *
  */
-void jpt_init_msg_header(opj_jpt_msg_header_t * header) {
-       header->Id = 0;         /* In-class Identifier    */
-       header->last_byte = 0;  /* Last byte information  */
-       header->Class_Id = 0;           /* Class Identifier       */
-       header->CSn_Id = 0;             /* CSn : index identifier */
-       header->Msg_offset = 0; /* Message offset         */
-       header->Msg_length = 0; /* Message length         */
-       header->Layer_nb = 0;           /* Auxiliary for JPP case */
+void jpt_init_msg_header(opj_jpt_msg_header_t * header)
+{
+    header->Id = 0;     /* In-class Identifier    */
+    header->last_byte = 0;  /* Last byte information  */
+    header->Class_Id = 0;       /* Class Identifier       */
+    header->CSn_Id = 0;     /* CSn : index identifier */
+    header->Msg_offset = 0; /* Message offset         */
+    header->Msg_length = 0; /* Message length         */
+    header->Layer_nb = 0;       /* Auxiliary for JPP case */
 }
 
 /*
@@ -74,87 +76,93 @@ void jpt_init_msg_header(opj_jpt_msg_header_t * header) {
  * Only parameters always present in message header
  *
  */
-static void jpt_reinit_msg_header(opj_jpt_msg_header_t * header) {
-       header->Id = 0;         /* In-class Identifier    */
-       header->last_byte = 0;  /* Last byte information  */
-       header->Msg_offset = 0; /* Message offset         */
-       header->Msg_length = 0; /* Message length         */
+static void jpt_reinit_msg_header(opj_jpt_msg_header_t * header)
+{
+    header->Id = 0;     /* In-class Identifier    */
+    header->last_byte = 0;  /* Last byte information  */
+    header->Msg_offset = 0; /* Message offset         */
+    header->Msg_length = 0; /* Message length         */
 }
 
 /*
  * Read the message header for a JPP/JPT - stream
  *
  */
-void jpt_read_msg_header(opj_common_ptr cinfo, opj_cio_t *cio, opj_jpt_msg_header_t *header) {
-       unsigned char elmt, Class = 0, CSn = 0;
-       jpt_reinit_msg_header(header);
-
-       /* ------------- */
-       /* VBAS : Bin-ID */
-       /* ------------- */
-       elmt = cio_read(cio, 1);
-
-       /* See for Class and CSn */
-       switch ((elmt >> 5) & 0x03) {
-               case 0:
-                       opj_event_msg(cinfo, EVT_ERROR, "Forbidden value encounter in message header !!\n");
-                       break;
-               case 1:
-                       Class = 0;
-                       CSn = 0;
-                       break;
-               case 2:
-                       Class = 1;
-                       CSn = 0;
-                       break;
-               case 3:
-                       Class = 1;
-                       CSn = 1;
-                       break;
-               default:
-                       break;
-       }
-
-       /* see information on bits 'c' [p 10 : A.2.1 general, ISO/IEC FCD 15444-9] */
-       if (((elmt >> 4) & 0x01) == 1)
-               header->last_byte = 1;
-
-       /* In-class identifier */
-       header->Id |= (elmt & 0x0f);
-       if ((elmt >> 7) == 1)
-               header->Id = jpt_read_VBAS_info(cio, header->Id);
-
-       /* ------------ */
-       /* VBAS : Class */
-       /* ------------ */
-       if (Class == 1) {
-               header->Class_Id = 0;
-               header->Class_Id = jpt_read_VBAS_info(cio, header->Class_Id);
-       }
-
-       /* ---------- */
-       /* VBAS : CSn */
-       /* ---------- */
-       if (CSn == 1) {
-               header->CSn_Id = 0;
-               header->CSn_Id = jpt_read_VBAS_info(cio, header->CSn_Id);
-       }
-
-       /* ----------------- */
-       /* VBAS : Msg_offset */
-       /* ----------------- */
-       header->Msg_offset = jpt_read_VBAS_info(cio, header->Msg_offset);
-
-       /* ----------------- */
-       /* VBAS : Msg_length */
-       /* ----------------- */
-       header->Msg_length = jpt_read_VBAS_info(cio, header->Msg_length);
-
-       /* ---------- */
-       /* VBAS : Aux */
-       /* ---------- */
-       if ((header->Class_Id & 0x01) == 1) {
-               header->Layer_nb = 0;
-               header->Layer_nb = jpt_read_VBAS_info(cio, header->Layer_nb);
-       }
+void jpt_read_msg_header(opj_common_ptr cinfo, opj_cio_t *cio,
+                         opj_jpt_msg_header_t *header)
+{
+    unsigned char elmt, Class = 0, CSn = 0;
+    jpt_reinit_msg_header(header);
+
+    /* ------------- */
+    /* VBAS : Bin-ID */
+    /* ------------- */
+    elmt = cio_read(cio, 1);
+
+    /* See for Class and CSn */
+    switch ((elmt >> 5) & 0x03) {
+    case 0:
+        opj_event_msg(cinfo, EVT_ERROR,
+                      "Forbidden value encounter in message header !!\n");
+        break;
+    case 1:
+        Class = 0;
+        CSn = 0;
+        break;
+    case 2:
+        Class = 1;
+        CSn = 0;
+        break;
+    case 3:
+        Class = 1;
+        CSn = 1;
+        break;
+    default:
+        break;
+    }
+
+    /* see information on bits 'c' [p 10 : A.2.1 general, ISO/IEC FCD 15444-9] */
+    if (((elmt >> 4) & 0x01) == 1) {
+        header->last_byte = 1;
+    }
+
+    /* In-class identifier */
+    header->Id |= (elmt & 0x0f);
+    if ((elmt >> 7) == 1) {
+        header->Id = jpt_read_VBAS_info(cio, header->Id);
+    }
+
+    /* ------------ */
+    /* VBAS : Class */
+    /* ------------ */
+    if (Class == 1) {
+        header->Class_Id = 0;
+        header->Class_Id = jpt_read_VBAS_info(cio, header->Class_Id);
+    }
+
+    /* ---------- */
+    /* VBAS : CSn */
+    /* ---------- */
+    if (CSn == 1) {
+        header->CSn_Id = 0;
+        header->CSn_Id = jpt_read_VBAS_info(cio, header->CSn_Id);
+    }
+
+    /* ----------------- */
+    /* VBAS : Msg_offset */
+    /* ----------------- */
+    header->Msg_offset = jpt_read_VBAS_info(cio, header->Msg_offset);
+
+    /* ----------------- */
+    /* VBAS : Msg_length */
+    /* ----------------- */
+    header->Msg_length = jpt_read_VBAS_info(cio, header->Msg_length);
+
+    /* ---------- */
+    /* VBAS : Aux */
+    /* ---------- */
+    if ((header->Class_Id & 0x01) == 1) {
+        header->Layer_nb = 0;
+        header->Layer_nb = jpt_read_VBAS_info(cio, header->Layer_nb);
+    }
 }
index 0f926194ead8afff6507f5ddbb60a4cf4cf35030..2d3a36c2fbee303b08a6c1ecba513d2746fa2d2c 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * All rights reserved.
@@ -55,142 +55,144 @@ static const double mct_norms_real[3] = { 1.732, 1.805, 1.573 };
 /* Forward reversible MCT. */
 /* </summary> */
 void mct_encode(
-               int* restrict c0,
-               int* restrict c1,
-               int* restrict c2,
-               int n)
+    int* restrict c0,
+    int* restrict c1,
+    int* restrict c2,
+    int n)
 {
-       int i;
-       for(i = 0; i < n; ++i) {
-               int r = c0[i];
-               int g = c1[i];
-               int b = c2[i];
-               int y = (r + (g * 2) + b) >> 2;
-               int u = b - g;
-               int v = r - g;
-               c0[i] = y;
-               c1[i] = u;
-               c2[i] = v;
-       }
+    int i;
+    for (i = 0; i < n; ++i) {
+        int r = c0[i];
+        int g = c1[i];
+        int b = c2[i];
+        int y = (r + (g * 2) + b) >> 2;
+        int u = b - g;
+        int v = r - g;
+        c0[i] = y;
+        c1[i] = u;
+        c2[i] = v;
+    }
 }
 
 /* <summary> */
 /* Inverse reversible MCT. */
 /* </summary> */
 void mct_decode(
-               int* restrict c0,
-               int* restrict c1, 
-               int* restrict c2, 
-               int n)
+    int* restrict c0,
+    int* restrict c1,
+    int* restrict c2,
+    int n)
 {
-       int i;
-       for (i = 0; i < n; ++i) {
-               int y = c0[i];
-               int u = c1[i];
-               int v = c2[i];
-               int g = y - ((u + v) >> 2);
-               int r = v + g;
-               int b = u + g;
-               c0[i] = r;
-               c1[i] = g;
-               c2[i] = b;
-       }
+    int i;
+    for (i = 0; i < n; ++i) {
+        int y = c0[i];
+        int u = c1[i];
+        int v = c2[i];
+        int g = y - ((u + v) >> 2);
+        int r = v + g;
+        int b = u + g;
+        c0[i] = r;
+        c1[i] = g;
+        c2[i] = b;
+    }
 }
 
 /* <summary> */
 /* Get norm of basis function of reversible MCT. */
 /* </summary> */
-double mct_getnorm(int compno) {
-       return mct_norms[compno];
+double mct_getnorm(int compno)
+{
+    return mct_norms[compno];
 }
 
 /* <summary> */
 /* Forward irreversible MCT. */
 /* </summary> */
 void mct_encode_real(
-               int* restrict c0,
-               int* restrict c1,
-               int* restrict c2,
-               int n)
+    int* restrict c0,
+    int* restrict c1,
+    int* restrict c2,
+    int n)
 {
-       int i;
-       for(i = 0; i < n; ++i) {
-               int r = c0[i];
-               int g = c1[i];
-               int b = c2[i];
-               int y =  fix_mul(r, 2449) + fix_mul(g, 4809) + fix_mul(b, 934);
-               int u = -fix_mul(r, 1382) - fix_mul(g, 2714) + fix_mul(b, 4096);
-               int v =  fix_mul(r, 4096) - fix_mul(g, 3430) - fix_mul(b, 666);
-               c0[i] = y;
-               c1[i] = u;
-               c2[i] = v;
-       }
+    int i;
+    for (i = 0; i < n; ++i) {
+        int r = c0[i];
+        int g = c1[i];
+        int b = c2[i];
+        int y =  fix_mul(r, 2449) + fix_mul(g, 4809) + fix_mul(b, 934);
+        int u = -fix_mul(r, 1382) - fix_mul(g, 2714) + fix_mul(b, 4096);
+        int v =  fix_mul(r, 4096) - fix_mul(g, 3430) - fix_mul(b, 666);
+        c0[i] = y;
+        c1[i] = u;
+        c2[i] = v;
+    }
 }
 
 /* <summary> */
 /* Inverse irreversible MCT. */
 /* </summary> */
 void mct_decode_real(
-               float* restrict c0,
-               float* restrict c1,
-               float* restrict c2,
-               int n)
+    float* restrict c0,
+    float* restrict c1,
+    float* restrict c2,
+    int n)
 {
-       int i;
+    int i;
 #ifdef __SSE__
-       __m128 vrv, vgu, vgv, vbu;
-       vrv = _mm_set1_ps(1.402f);
-       vgu = _mm_set1_ps(0.34413f);
-       vgv = _mm_set1_ps(0.71414f);
-       vbu = _mm_set1_ps(1.772f);
-       for (i = 0; i < (n >> 3); ++i) {
-               __m128 vy, vu, vv;
-               __m128 vr, vg, vb;
+    __m128 vrv, vgu, vgv, vbu;
+    vrv = _mm_set1_ps(1.402f);
+    vgu = _mm_set1_ps(0.34413f);
+    vgv = _mm_set1_ps(0.71414f);
+    vbu = _mm_set1_ps(1.772f);
+    for (i = 0; i < (n >> 3); ++i) {
+        __m128 vy, vu, vv;
+        __m128 vr, vg, vb;
 
-               vy = _mm_load_ps(c0);
-               vu = _mm_load_ps(c1);
-               vv = _mm_load_ps(c2);
-               vr = _mm_add_ps(vy, _mm_mul_ps(vv, vrv));
-               vg = _mm_sub_ps(_mm_sub_ps(vy, _mm_mul_ps(vu, vgu)), _mm_mul_ps(vv, vgv));
-               vb = _mm_add_ps(vy, _mm_mul_ps(vu, vbu));
-               _mm_store_ps(c0, vr);
-               _mm_store_ps(c1, vg);
-               _mm_store_ps(c2, vb);
-               c0 += 4;
-               c1 += 4;
-               c2 += 4;
+        vy = _mm_load_ps(c0);
+        vu = _mm_load_ps(c1);
+        vv = _mm_load_ps(c2);
+        vr = _mm_add_ps(vy, _mm_mul_ps(vv, vrv));
+        vg = _mm_sub_ps(_mm_sub_ps(vy, _mm_mul_ps(vu, vgu)), _mm_mul_ps(vv, vgv));
+        vb = _mm_add_ps(vy, _mm_mul_ps(vu, vbu));
+        _mm_store_ps(c0, vr);
+        _mm_store_ps(c1, vg);
+        _mm_store_ps(c2, vb);
+        c0 += 4;
+        c1 += 4;
+        c2 += 4;
 
-               vy = _mm_load_ps(c0);
-               vu = _mm_load_ps(c1);
-               vv = _mm_load_ps(c2);
-               vr = _mm_add_ps(vy, _mm_mul_ps(vv, vrv));
-               vg = _mm_sub_ps(_mm_sub_ps(vy, _mm_mul_ps(vu, vgu)), _mm_mul_ps(vv, vgv));
-               vb = _mm_add_ps(vy, _mm_mul_ps(vu, vbu));
-               _mm_store_ps(c0, vr);
-               _mm_store_ps(c1, vg);
-               _mm_store_ps(c2, vb);
-               c0 += 4;
-               c1 += 4;
-               c2 += 4;
-       }
-       n &= 7;
+        vy = _mm_load_ps(c0);
+        vu = _mm_load_ps(c1);
+        vv = _mm_load_ps(c2);
+        vr = _mm_add_ps(vy, _mm_mul_ps(vv, vrv));
+        vg = _mm_sub_ps(_mm_sub_ps(vy, _mm_mul_ps(vu, vgu)), _mm_mul_ps(vv, vgv));
+        vb = _mm_add_ps(vy, _mm_mul_ps(vu, vbu));
+        _mm_store_ps(c0, vr);
+        _mm_store_ps(c1, vg);
+        _mm_store_ps(c2, vb);
+        c0 += 4;
+        c1 += 4;
+        c2 += 4;
+    }
+    n &= 7;
 #endif
-       for(i = 0; i < n; ++i) {
-               float y = c0[i];
-               float u = c1[i];
-               float v = c2[i];
-               float r = y + (v * 1.402f);
-               float g = y - (u * 0.34413f) - (v * (0.71414f));
-               float b = y + (u * 1.772f);
-               c0[i] = r;
-               c1[i] = g;
-               c2[i] = b;
-       }
+    for (i = 0; i < n; ++i) {
+        float y = c0[i];
+        float u = c1[i];
+        float v = c2[i];
+        float r = y + (v * 1.402f);
+        float g = y - (u * 0.34413f) - (v * (0.71414f));
+        float b = y + (u * 1.772f);
+        c0[i] = r;
+        c1[i] = g;
+        c2[i] = b;
+    }
 }
 
 /* <summary> */
 /* Get norm of basis function of irreversible MCT. */
 /* </summary> */
-double mct_getnorm_real(int compno) {
-       return mct_norms_real[compno];
+double mct_getnorm_real(int compno)
+{
+    return mct_norms_real[compno];
 }
index b9034a301c8fa8accc4a7a681c6f4740d8a16b8d..01335fc66189332c5af4f8b2ca6d012d36114ea1 100644 (file)
@@ -1,12 +1,12 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
  * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
  * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
 /*@{*/
 
 /*
-* 
+*
 * Read box headers
 *
 */
 
 int mj2_read_boxhdr(mj2_box_t * box, opj_cio_t *cio)
 {
-  box->init_pos = cio_tell(cio);
-  box->length = cio_read(cio, 4);
-  box->type = cio_read(cio, 4);
-  if (box->length == 1) {
-    if (cio_read(cio, 4) != 0) {
-      opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Cannot handle box sizes higher than 2^32\n");
-      return 1;
-    };
+    box->init_pos = cio_tell(cio);
     box->length = cio_read(cio, 4);
-    if (box->length == 0) 
-      box->length = cio_numbytesleft(cio) + 12;
-  }
-  else if (box->length == 0) {
-    box->length = cio_numbytesleft(cio) + 8;
-  }
-  return 0;
+    box->type = cio_read(cio, 4);
+    if (box->length == 1) {
+        if (cio_read(cio, 4) != 0) {
+            opj_event_msg(cio->cinfo, EVT_ERROR,
+                          "Error: Cannot handle box sizes higher than 2^32\n");
+            return 1;
+        };
+        box->length = cio_read(cio, 4);
+        if (box->length == 0) {
+            box->length = cio_numbytesleft(cio) + 12;
+        }
+    } else if (box->length == 0) {
+        box->length = cio_numbytesleft(cio) + 8;
+    }
+    return 0;
 }
 
 /*
-* 
-* Initialisation of a Standard Movie, given a simple movie structure defined by the user 
+*
+* Initialisation of a Standard Movie, given a simple movie structure defined by the user
 * The movie will have one sample per chunk
-* 
+*
 * Arguments: opj_mj2_t * movie
-* Several variables of "movie" must be defined in order to enable a correct execution of 
+* Several variables of "movie" must be defined in order to enable a correct execution of
 * this function:
 *   - The number of tracks of each type (movie->num_vtk, movie->num_stk, movie->num_htk)
 *   - The memory for each must be allocated (movie->tk)
 *   - For each track:
-*        The track type (tk->track_type)
-*        The number of sample (tk->num_samples)
-*        The sample rate (tk->sample_rate)
+*     The track type (tk->track_type)
+*     The number of sample (tk->num_samples)
+*     The sample rate (tk->sample_rate)
 *
 */
 
 int OPJ_CALLCONV mj2_init_stdmovie(opj_mj2_t * movie)
 {
-  mj2_tk_t *tk0;
-  int i, w, h, prec;
-  unsigned int j;
-  time_t ltime;
-       
-  movie->brand = MJ2_MJ2;
-  movie->minversion = 0;
-  movie->num_cl = 2;
-  movie->cl = (unsigned int*) opj_malloc(movie->num_cl * sizeof(unsigned int));
-
-  movie->cl[0] = MJ2_MJ2;
-  movie->cl[1] = MJ2_MJ2S;
-  time(&ltime);                        /* Time since 1/1/70 */
-  movie->creation_time = (unsigned int) ltime + 2082844800;    /* Seconds between 1/1/04 and 1/1/70 */
-  movie->timescale = 1000;
-       
-  movie->rate = 1 << 16;               /* Rate to play presentation  (default = 0x00010000)          */
-  movie->volume = 1 << 8;              /* Movie volume (default = 0x0100)                            */
-  movie->trans_matrix[0] = 0x00010000; /* Transformation matrix for video                            */
-  movie->trans_matrix[1] = 0;  /* Unity is { 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 }  */
-  movie->trans_matrix[2] = 0;
-  movie->trans_matrix[3] = 0;
-  movie->trans_matrix[4] = 0x00010000;
-  movie->trans_matrix[5] = 0;
-  movie->trans_matrix[6] = 0;
-  movie->trans_matrix[7] = 0;
-  movie->trans_matrix[8] = 0x40000000;
-  movie->next_tk_id = 1;
-
-  tk0 = &movie->tk[0];
-  w = tk0->w; h = tk0->h; prec = tk0->depth;
-
-       for (i = 0; i < movie->num_htk + movie->num_stk + movie->num_vtk; i++) 
-   {
-    mj2_tk_t *tk = &movie->tk[i];
-
-    movie->next_tk_id++;
-    tk->jp2_struct.comps = NULL;
-    tk->jp2_struct.cl = NULL;
-  
-    if (tk->track_type == 0) /* no sound or hint track */
-   {
-    if (tk->num_samples == 0)
-                               return 1;
-                       
-    tk->w = w; tk->h = h; tk->depth = prec;
-      tk->Dim[0] = 0;
-      tk->Dim[1] = 0;
-                       
-      tk->timescale = 1000;    /* Timescale = 1 ms                                          */
-                       
-      tk->chunk[0].num_samples = 1;
-      tk->chunk[0].sample_descr_idx = 1;
-                       
-      tk->same_sample_size = 0;
-                       
-      tk->num_samplestochunk = 1;      /* One sample per chunk  */
-               tk->sampletochunk = (mj2_sampletochunk_t*) opj_malloc(tk->num_samplestochunk * sizeof(mj2_sampletochunk_t));
-      tk->sampletochunk[0].first_chunk = 1;
-      tk->sampletochunk[0].samples_per_chunk = 1;
-      tk->sampletochunk[0].sample_descr_idx = 1;
-      
-      if (tk->sample_rate == 0) 
-  {
-       opj_event_msg(tk->cinfo, EVT_ERROR,
-       "Error while initializing MJ2 movie: Sample rate of track"
-       " %d must be different from zero\n", tk->track_ID);
-       return 1;
-  }
-                       
-      for (j = 0; j < tk->num_samples; j++) 
-  {
-       tk->sample[j].sample_delta = tk->timescale / tk->sample_rate;
-  }
-                       
-      tk->num_tts = 1;
-               tk->tts = (mj2_tts_t*) opj_malloc(tk->num_tts * sizeof(mj2_tts_t));
-      tk->tts[0].sample_count = tk->num_samples;
-      tk->tts[0].sample_delta = tk->timescale / tk->sample_rate;
-                       
-      tk->horizresolution = 0x00480000;        /* Horizontal resolution (typically 72)                       */
-      tk->vertresolution = 0x00480000; /* Vertical resolution (typically 72)                         */
-      tk->compressorname[0] = 0x0f4d6f74;      /* Compressor Name[]: Motion JPEG2000                         */
-      tk->compressorname[1] = 0x696f6e20;
-      tk->compressorname[2] = 0x4a504547;
-      tk->compressorname[3] = 0x32303030;
-      tk->compressorname[4] = 0x00120000;
-      tk->compressorname[5] = 0;
-      tk->compressorname[6] = 0x00000042;
-      tk->compressorname[7] = 0x000000DC;
-      tk->num_url = 0;         /* Number of URL                                              */
-      tk->num_urn = 0;         /* Number of URN                                              */
-      tk->graphicsmode = 0;    /* Graphicsmode                                               */
-      tk->opcolor[0] = 0;      /* OpColor                                                    */
-      tk->opcolor[1] = 0;      /* OpColor                                                    */
-      tk->opcolor[2] = 0;      /* OpColor                                                    */
-      tk->creation_time = movie->creation_time;        /* Seconds between 1/1/04 and 1/1/70          */
-      tk->language = 0;                /* Language (undefined)                                       */
-      tk->layer = 0;
-      tk->volume = 1 << 8;             /* Movie volume (default = 0x0100) */
-      tk->trans_matrix[0] = 0x00010000;        /* Transformation matrix for track */
-      tk->trans_matrix[1] = 0; /* Unity is { 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 }  */
-      tk->trans_matrix[2] = 0;
-      tk->trans_matrix[3] = 0;
-      tk->trans_matrix[4] = 0x00010000;
-      tk->trans_matrix[5] = 0;
-      tk->trans_matrix[6] = 0;
-      tk->trans_matrix[7] = 0;
-      tk->trans_matrix[8] = 0x40000000;
-      tk->fieldcount = 1;
-      tk->fieldorder = 0;
-      tk->or_fieldcount = 1;
-      tk->or_fieldorder = 0;
-      tk->num_br = 2;
-               tk->br = (unsigned int*) opj_malloc(tk->num_br * sizeof(unsigned int));
-      tk->br[0] = MJ2_JP2;
-      tk->br[1] = MJ2_J2P0;
-      tk->num_jp2x = 0;
-      tk->hsub = 2;            /* 4:2:0                                                      */
-      tk->vsub = 2;            /* 4:2:0                                                      */
-      tk->hoff = 0;
-      tk->voff = 0;
-      tk->visual_w = tk->w << 16;
-      tk->visual_h = tk->h << 16;
+    mj2_tk_t *tk0;
+    int i, w, h, prec;
+    unsigned int j;
+    time_t ltime;
+
+    movie->brand = MJ2_MJ2;
+    movie->minversion = 0;
+    movie->num_cl = 2;
+    movie->cl = (unsigned int*) opj_malloc(movie->num_cl * sizeof(unsigned int));
+
+    movie->cl[0] = MJ2_MJ2;
+    movie->cl[1] = MJ2_MJ2S;
+    time(&ltime);         /* Time since 1/1/70 */
+    movie->creation_time = (unsigned int) ltime +
+                           2082844800; /* Seconds between 1/1/04 and 1/1/70 */
+    movie->timescale = 1000;
+
+    movie->rate = 1 <<
+                  16;        /* Rate to play presentation  (default = 0x00010000)          */
+    movie->volume = 1 <<
+                    8;       /* Movie volume (default = 0x0100)                            */
+    movie->trans_matrix[0] =
+        0x00010000;  /* Transformation matrix for video                            */
+    movie->trans_matrix[1] =
+        0;   /* Unity is { 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 }  */
+    movie->trans_matrix[2] = 0;
+    movie->trans_matrix[3] = 0;
+    movie->trans_matrix[4] = 0x00010000;
+    movie->trans_matrix[5] = 0;
+    movie->trans_matrix[6] = 0;
+    movie->trans_matrix[7] = 0;
+    movie->trans_matrix[8] = 0x40000000;
+    movie->next_tk_id = 1;
+
+    tk0 = &movie->tk[0];
+    w = tk0->w;
+    h = tk0->h;
+    prec = tk0->depth;
+
+    for (i = 0; i < movie->num_htk + movie->num_stk + movie->num_vtk; i++) {
+        mj2_tk_t *tk = &movie->tk[i];
+
+        movie->next_tk_id++;
+        tk->jp2_struct.comps = NULL;
+        tk->jp2_struct.cl = NULL;
+
+        if (tk->track_type == 0) { /* no sound or hint track */
+            if (tk->num_samples == 0) {
+                return 1;
+            }
+
+            tk->w = w;
+            tk->h = h;
+            tk->depth = prec;
+            tk->Dim[0] = 0;
+            tk->Dim[1] = 0;
+
+            tk->timescale =
+                1000; /* Timescale = 1 ms                                          */
+
+            tk->chunk[0].num_samples = 1;
+            tk->chunk[0].sample_descr_idx = 1;
+
+            tk->same_sample_size = 0;
+
+            tk->num_samplestochunk = 1;   /* One sample per chunk  */
+            tk->sampletochunk = (mj2_sampletochunk_t*) opj_malloc(tk->num_samplestochunk *
+                                sizeof(mj2_sampletochunk_t));
+            tk->sampletochunk[0].first_chunk = 1;
+            tk->sampletochunk[0].samples_per_chunk = 1;
+            tk->sampletochunk[0].sample_descr_idx = 1;
+
+            if (tk->sample_rate == 0) {
+                opj_event_msg(tk->cinfo, EVT_ERROR,
+                              "Error while initializing MJ2 movie: Sample rate of track"
+                              " %d must be different from zero\n", tk->track_ID);
+                return 1;
+            }
+
+            for (j = 0; j < tk->num_samples; j++) {
+                tk->sample[j].sample_delta = tk->timescale / tk->sample_rate;
+            }
+
+            tk->num_tts = 1;
+            tk->tts = (mj2_tts_t*) opj_malloc(tk->num_tts * sizeof(mj2_tts_t));
+            tk->tts[0].sample_count = tk->num_samples;
+            tk->tts[0].sample_delta = tk->timescale / tk->sample_rate;
+
+            tk->horizresolution =
+                0x00480000; /* Horizontal resolution (typically 72)                       */
+            tk->vertresolution =
+                0x00480000;  /* Vertical resolution (typically 72)                         */
+            tk->compressorname[0] =
+                0x0f4d6f74;   /* Compressor Name[]: Motion JPEG2000                         */
+            tk->compressorname[1] = 0x696f6e20;
+            tk->compressorname[2] = 0x4a504547;
+            tk->compressorname[3] = 0x32303030;
+            tk->compressorname[4] = 0x00120000;
+            tk->compressorname[5] = 0;
+            tk->compressorname[6] = 0x00000042;
+            tk->compressorname[7] = 0x000000DC;
+            tk->num_url =
+                0;      /* Number of URL                                              */
+            tk->num_urn =
+                0;      /* Number of URN                                              */
+            tk->graphicsmode =
+                0; /* Graphicsmode                                               */
+            tk->opcolor[0] =
+                0;   /* OpColor                                                    */
+            tk->opcolor[1] =
+                0;   /* OpColor                                                    */
+            tk->opcolor[2] =
+                0;   /* OpColor                                                    */
+            tk->creation_time =
+                movie->creation_time; /* Seconds between 1/1/04 and 1/1/70          */
+            tk->language = 0;     /* Language (undefined)                       */
+            tk->layer = 0;
+            tk->volume = 1 << 8;      /* Movie volume (default = 0x0100) */
+            tk->trans_matrix[0] = 0x00010000; /* Transformation matrix for track */
+            tk->trans_matrix[1] =
+                0;  /* Unity is { 0x00010000,0,0,0,0x00010000,0,0,0,0x40000000 }  */
+            tk->trans_matrix[2] = 0;
+            tk->trans_matrix[3] = 0;
+            tk->trans_matrix[4] = 0x00010000;
+            tk->trans_matrix[5] = 0;
+            tk->trans_matrix[6] = 0;
+            tk->trans_matrix[7] = 0;
+            tk->trans_matrix[8] = 0x40000000;
+            tk->fieldcount = 1;
+            tk->fieldorder = 0;
+            tk->or_fieldcount = 1;
+            tk->or_fieldorder = 0;
+            tk->num_br = 2;
+            tk->br = (unsigned int*) opj_malloc(tk->num_br * sizeof(unsigned int));
+            tk->br[0] = MJ2_JP2;
+            tk->br[1] = MJ2_J2P0;
+            tk->num_jp2x = 0;
+            tk->hsub =
+                2;     /* 4:2:0                                                      */
+            tk->vsub =
+                2;     /* 4:2:0                                                      */
+            tk->hoff = 0;
+            tk->voff = 0;
+            tk->visual_w = tk->w << 16;
+            tk->visual_h = tk->h << 16;
+        } else {
+            tk->num_br = 0;
+            tk->jp2xdata = NULL;
+        }
     }
-    else {
-      tk->num_br = 0;
-      tk->jp2xdata = NULL;
-    }
-  }
-  return 0;
+    return 0;
 }
 
 /*
@@ -224,19 +245,19 @@ int OPJ_CALLCONV mj2_init_stdmovie(opj_mj2_t * movie)
 */
 void mj2_tts_decompact(mj2_tk_t * tk)
 {
-  int i, j;
-  tk->num_samples = 0;
-  for (i = 0; i < tk->num_tts; i++) {
-    tk->num_samples += tk->tts[i].sample_count;
-  }
+    int i, j;
+    tk->num_samples = 0;
+    for (i = 0; i < tk->num_tts; i++) {
+        tk->num_samples += tk->tts[i].sample_count;
+    }
 
-  tk->sample = (mj2_sample_t*) opj_malloc(tk->num_samples * sizeof(mj2_sample_t));
+    tk->sample = (mj2_sample_t*) opj_malloc(tk->num_samples * sizeof(mj2_sample_t));
 
-  for (i = 0; i < tk->num_tts; i++) {
-    for (j = 0; j < tk->tts[i].sample_count; j++) {
-      tk->sample[j].sample_delta = tk->tts[i].sample_delta;
+    for (i = 0; i < tk->num_tts; i++) {
+        for (j = 0; j < tk->tts[i].sample_count; j++) {
+            tk->sample[j].sample_delta = tk->tts[i].sample_delta;
+        }
     }
-  }
 }
 
 /*
@@ -245,38 +266,39 @@ void mj2_tts_decompact(mj2_tk_t * tk)
 */
 void mj2_stsc_decompact(mj2_tk_t * tk)
 {
-  unsigned int i, j, k, sampleno = 0;
-  
-  if (tk->num_samplestochunk == 1) {
-    tk->num_chunks =
-      (unsigned int) ceil((double) tk->num_samples /
-      (double) tk->sampletochunk[0].samples_per_chunk);
-        tk->chunk = (mj2_chunk_t*) opj_malloc(tk->num_chunks * sizeof(mj2_chunk_t));
-    for (k = 0; k < tk->num_chunks; k++) {
-      tk->chunk[k].num_samples = tk->sampletochunk[0].samples_per_chunk;
-    }
-    
-  } else {
-    tk->chunk = (mj2_chunk_t*) opj_malloc(tk->num_samples * sizeof(mj2_chunk_t));
-    tk->num_chunks = 0;
-    for (i = 0; i < tk->num_samplestochunk -1 ; i++) {
-      for (j = tk->sampletochunk[i].first_chunk - 1;
-      j < tk->sampletochunk[i + 1].first_chunk - 1; j++) {
-                               tk->chunk[j].num_samples = tk->sampletochunk[i].samples_per_chunk;
-                               tk->num_chunks++;
-                               sampleno += tk->chunk[j].num_samples;
-      }
-    }
-    tk->num_chunks += (int)(tk->num_samples  - sampleno) / tk->sampletochunk[tk->num_samplestochunk - 1].samples_per_chunk;
-    for (k = tk->sampletochunk[tk->num_samplestochunk - 1].first_chunk - 1;
-    k < tk->num_chunks; k++) {
-      tk->chunk[k].num_samples =
-                               tk->sampletochunk[tk->num_samplestochunk - 1].samples_per_chunk;
+    unsigned int i, j, k, sampleno = 0;
+
+    if (tk->num_samplestochunk == 1) {
+        tk->num_chunks =
+            (unsigned int) ceil((double) tk->num_samples /
+                                (double) tk->sampletochunk[0].samples_per_chunk);
+        tk->chunk = (mj2_chunk_t*) opj_malloc(tk->num_chunks * sizeof(mj2_chunk_t));
+        for (k = 0; k < tk->num_chunks; k++) {
+            tk->chunk[k].num_samples = tk->sampletochunk[0].samples_per_chunk;
+        }
+
+    } else {
+        tk->chunk = (mj2_chunk_t*) opj_malloc(tk->num_samples * sizeof(mj2_chunk_t));
+        tk->num_chunks = 0;
+        for (i = 0; i < tk->num_samplestochunk - 1 ; i++) {
+            for (j = tk->sampletochunk[i].first_chunk - 1;
+                    j < tk->sampletochunk[i + 1].first_chunk - 1; j++) {
+                tk->chunk[j].num_samples = tk->sampletochunk[i].samples_per_chunk;
+                tk->num_chunks++;
+                sampleno += tk->chunk[j].num_samples;
+            }
+        }
+        tk->num_chunks += (int)(tk->num_samples  - sampleno) /
+                          tk->sampletochunk[tk->num_samplestochunk - 1].samples_per_chunk;
+        for (k = tk->sampletochunk[tk->num_samplestochunk - 1].first_chunk - 1;
+                k < tk->num_chunks; k++) {
+            tk->chunk[k].num_samples =
+                tk->sampletochunk[tk->num_samplestochunk - 1].samples_per_chunk;
+        }
+        tk->chunk = (mj2_chunk_t*)
+                    opj_realloc(tk->chunk, tk->num_chunks * sizeof(mj2_chunk_t));
     }
-    tk->chunk = (mj2_chunk_t*)
-        opj_realloc(tk->chunk, tk->num_chunks * sizeof(mj2_chunk_t));
-  }
-  
+
 }
 
 
@@ -286,17 +308,17 @@ void mj2_stsc_decompact(mj2_tk_t * tk)
 */
 void mj2_stco_decompact(mj2_tk_t * tk)
 {
-  unsigned int i, j, k = 0;
-  unsigned int intra_chunk_offset;
-       
-  for (i = 0; i < tk->num_chunks; i++) {
-    intra_chunk_offset = 0;
-    for (j = 0; j < tk->chunk[i].num_samples; j++) {
-      tk->sample[k].offset = intra_chunk_offset + tk->chunk[i].offset;
-      intra_chunk_offset += tk->sample[k].sample_size;
-      k++;
+    unsigned int i, j, k = 0;
+    unsigned int intra_chunk_offset;
+
+    for (i = 0; i < tk->num_chunks; i++) {
+        intra_chunk_offset = 0;
+        for (j = 0; j < tk->chunk[i].num_samples; j++) {
+            tk->sample[k].offset = intra_chunk_offset + tk->chunk[i].offset;
+            intra_chunk_offset += tk->sample[k].sample_size;
+            k++;
+        }
     }
-  }
 }
 
 /*
@@ -307,17 +329,17 @@ void mj2_stco_decompact(mj2_tk_t * tk)
 */
 void OPJ_CALLCONV mj2_write_jp(opj_cio_t *cio)
 {
-  mj2_box_t box;
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-       
-  cio_write(cio, MJ2_JP, 4);           /* JP */
-  cio_write(cio, 0x0d0a870a, 4);       /* 0x0d0a870a required in a JP box */
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);
-  cio_seek(cio, box.init_pos + box.length);
+    mj2_box_t box;
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+
+    cio_write(cio, MJ2_JP, 4);        /* JP */
+    cio_write(cio, 0x0d0a870a, 4);    /* 0x0d0a870a required in a JP box */
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -328,23 +350,24 @@ void OPJ_CALLCONV mj2_write_jp(opj_cio_t *cio)
 */
 int mj2_read_jp(opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);
-  if (MJ2_JP != box.type) {    /* Check Marker */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected JP Marker\n");
-    return 1;
-  }
-  if (0x0d0a870a != cio_read(cio, 4)) {        /* read the 0x0d0a870a required in a JP box */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with JP Marker\n");
-    return 1;
-  }
-  if (cio_tell(cio) - box.init_pos != box.length) {    /* Check box length */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with JP Box size \n");
-    return 1;
-  }
-  return 0;
-       
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);
+    if (MJ2_JP != box.type) { /* Check Marker */
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected JP Marker\n");
+        return 1;
+    }
+    if (0x0d0a870a != cio_read(cio,
+                               4)) { /* read the 0x0d0a870a required in a JP box */
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with JP Marker\n");
+        return 1;
+    }
+    if (cio_tell(cio) - box.init_pos != box.length) { /* Check box length */
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with JP Box size \n");
+        return 1;
+    }
+    return 0;
+
 }
 
 /*
@@ -355,22 +378,23 @@ int mj2_read_jp(opj_cio_t *cio)
 */
 void OPJ_CALLCONV mj2_write_ftyp(opj_mj2_t * movie, opj_cio_t *cio)
 {
-  int i;
-  mj2_box_t box;
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-       
-  cio_write(cio, MJ2_FTYP, 4); /* FTYP       */
-  cio_write(cio, movie->brand, 4);     /* BR         */
-  cio_write(cio, movie->minversion, 4);        /* MinV       */
-       
-  for (i = 0; i < movie->num_cl; i++)
-    cio_write(cio, movie->cl[i], 4);   /* CL         */
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* Length     */
-  cio_seek(cio, box.init_pos + box.length);
+    int i;
+    mj2_box_t box;
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+
+    cio_write(cio, MJ2_FTYP, 4);  /* FTYP       */
+    cio_write(cio, movie->brand, 4);  /* BR         */
+    cio_write(cio, movie->minversion, 4); /* MinV       */
+
+    for (i = 0; i < movie->num_cl; i++) {
+        cio_write(cio, movie->cl[i], 4);    /* CL         */
+    }
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* Length     */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -381,28 +405,29 @@ void OPJ_CALLCONV mj2_write_ftyp(opj_mj2_t * movie, opj_cio_t *cio)
 */
 int mj2_read_ftyp(opj_mj2_t * movie, opj_cio_t *cio)
 {
-  int i;
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);  /* Box Size */
-  if (MJ2_FTYP != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected FTYP Marker\n");
-    return 1;
-  }
-       
-  movie->brand = cio_read(cio, 4);     /* BR              */
-  movie->minversion = cio_read(cio, 4);        /* MinV            */
-  movie->num_cl = (box.length - 16) / 4;
-  movie->cl = (unsigned int*) opj_malloc(movie->num_cl * sizeof(unsigned int));
+    int i;
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);   /* Box Size */
+    if (MJ2_FTYP != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected FTYP Marker\n");
+        return 1;
+    }
+
+    movie->brand = cio_read(cio, 4);  /* BR              */
+    movie->minversion = cio_read(cio, 4); /* MinV            */
+    movie->num_cl = (box.length - 16) / 4;
+    movie->cl = (unsigned int*) opj_malloc(movie->num_cl * sizeof(unsigned int));
+
+    for (i = movie->num_cl - 1; i > -1; i--) {
+        movie->cl[i] = cio_read(cio, 4);    /* CLi */
+    }
 
-  for (i = movie->num_cl - 1; i > -1; i--)
-    movie->cl[i] = cio_read(cio, 4);   /* CLi */
-       
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with FTYP Box\n");
-    return 1;
-  }
-  return 0;
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with FTYP Box\n");
+        return 1;
+    }
+    return 0;
 }
 
 
@@ -414,25 +439,25 @@ int mj2_read_ftyp(opj_mj2_t * movie, opj_cio_t *cio)
 */
 void mj2_write_stco(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  mj2_box_t box;
-  unsigned int i;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_STCO, 4); /* STCO       */
-       
-  cio_write(cio, 0, 4);                /* Version = 0, flags = 0 */
-       
-  cio_write(cio, tk->num_chunks, 4);   /* Entry Count */
-       
-  for (i = 0; i < tk->num_chunks; i++) {
-    cio_write(cio, tk->chunk[i].offset, 4);    /* Entry offset */
-  }
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+    mj2_box_t box;
+    unsigned int i;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_STCO, 4);  /* STCO       */
+
+    cio_write(cio, 0, 4);     /* Version = 0, flags = 0 */
+
+    cio_write(cio, tk->num_chunks, 4);    /* Entry Count */
+
+    for (i = 0; i < tk->num_chunks; i++) {
+        cio_write(cio, tk->chunk[i].offset, 4); /* Entry offset */
+    }
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -443,43 +468,45 @@ void mj2_write_stco(mj2_tk_t * tk, opj_cio_t *cio)
 */
 int mj2_read_stco(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  unsigned int i;
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);  /* Box Size */
-  if (MJ2_STCO != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected STCO Marker\n");
-    return 1;
-  }
-       
-  if (0 != cio_read(cio, 1)) { /* Version = 0 */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in STCO box\n");
-    return 1;
-  }
-       
-  if (0 != cio_read(cio, 3)) { /* Flags = 0  */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in STCO box. Expected flag 0\n");
-    return 1;
-  }
-       
-       
-  if (cio_read(cio, 4) != tk->num_chunks) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, 
-                       "Error in STCO box: expecting same amount of entry-count as chunks \n");
-  } else {
-    for (i = 0; i < tk->num_chunks; i++) {
-      tk->chunk[i].offset = cio_read(cio, 4);  /* Entry offset */
+    unsigned int i;
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);   /* Box Size */
+    if (MJ2_STCO != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected STCO Marker\n");
+        return 1;
+    }
+
+    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error: Only Version 0 handled in STCO box\n");
+        return 1;
+    }
+
+    if (0 != cio_read(cio, 3)) {  /* Flags = 0  */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error with flag in STCO box. Expected flag 0\n");
+        return 1;
+    }
+
+
+    if (cio_read(cio, 4) != tk->num_chunks) {
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error in STCO box: expecting same amount of entry-count as chunks \n");
+    } else {
+        for (i = 0; i < tk->num_chunks; i++) {
+            tk->chunk[i].offset = cio_read(cio, 4);   /* Entry offset */
+        }
+    }
+
+    mj2_stco_decompact(tk);
+
+
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with STCO Box size\n");
+        return 1;
     }
-  }
-       
-  mj2_stco_decompact(tk);
-       
-       
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with STCO Box size\n");
-    return 1;
-  }
-  return 0;
+    return 0;
 }
 
 /*
@@ -490,35 +517,36 @@ int mj2_read_stco(mj2_tk_t * tk, opj_cio_t *cio)
 */
 void mj2_write_stsz(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  mj2_box_t box;
-  unsigned int i;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_STSZ, 4); /* STSZ       */
-       
-  cio_write(cio, 0, 4);                /* Version = 0, flags = 0 */
-       
-  if (tk->same_sample_size == 1) {     /* If they all have the same size */
-    cio_write(cio, tk->sample[0].sample_size, 4);      /* Size */
-               
-    cio_write(cio, 1, 4);              /* Entry count = 1 */
-  }
-       
-  else {
-    cio_write(cio, 0, 4);              /* Sample Size = 0 becase they all have different sizes */
-               
-    cio_write(cio, tk->num_samples, 4);        /* Sample Count */
-               
-    for (i = 0; i < tk->num_samples; i++) {
-      cio_write(cio, tk->sample[i].sample_size, 4);
+    mj2_box_t box;
+    unsigned int i;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_STSZ, 4);  /* STSZ       */
+
+    cio_write(cio, 0, 4);     /* Version = 0, flags = 0 */
+
+    if (tk->same_sample_size == 1) {  /* If they all have the same size */
+        cio_write(cio, tk->sample[0].sample_size, 4);   /* Size */
+
+        cio_write(cio, 1, 4);       /* Entry count = 1 */
+    }
+
+    else {
+        cio_write(cio, 0,
+                  4);       /* Sample Size = 0 becase they all have different sizes */
+
+        cio_write(cio, tk->num_samples, 4); /* Sample Count */
+
+        for (i = 0; i < tk->num_samples; i++) {
+            cio_write(cio, tk->sample[i].sample_size, 4);
+        }
     }
-  }
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -529,53 +557,55 @@ void mj2_write_stsz(mj2_tk_t * tk, opj_cio_t *cio)
 */
 int mj2_read_stsz(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  int sample_size;
-  unsigned int i;
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);  /* Box Size */
-  if (MJ2_STSZ != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected STSZ Marker\n");
-    return 1;
-  }
-       
-       
-  if (0 != cio_read(cio, 1)) { /* Version = 0 */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in STSZ box\n");
-    return 1;
-  }
-       
-  if (0 != cio_read(cio, 3)) { /* Flags = 0  */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in STSZ box. Expected flag 0\n");
-    return 1;
-  }
-       
-  sample_size = cio_read(cio, 4);
-       
-  if (sample_size != 0) {      /* Samples do have the same size */
-    tk->same_sample_size = 1;
-    for (i = 0; i < tk->num_samples; i++) {
-      tk->sample[i].sample_size = sample_size;
+    int sample_size;
+    unsigned int i;
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);   /* Box Size */
+    if (MJ2_STSZ != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected STSZ Marker\n");
+        return 1;
     }
-    cio_skip(cio,4);           /* Sample count = 1 */
-  } else {
-    tk->same_sample_size = 0;
-    if (tk->num_samples != cio_read(cio, 4)) { /* Sample count */
-      opj_event_msg(cio->cinfo, EVT_ERROR,
-                               "Error in STSZ box. Expected that sample-count is number of samples in track\n");
-      return 1;
+
+
+    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error: Only Version 0 handled in STSZ box\n");
+        return 1;
     }
-    for (i = 0; i < tk->num_samples; i++) {
-      tk->sample[i].sample_size = cio_read(cio, 4);    /* Sample Size */
+
+    if (0 != cio_read(cio, 3)) {  /* Flags = 0  */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error with flag in STSZ box. Expected flag 0\n");
+        return 1;
     }
-               
-    if (cio_tell(cio) - box.init_pos != box.length) {
-      opj_event_msg(cio->cinfo, EVT_ERROR, "Error with STSZ Box size\n");
-      return 1;
+
+    sample_size = cio_read(cio, 4);
+
+    if (sample_size != 0) {   /* Samples do have the same size */
+        tk->same_sample_size = 1;
+        for (i = 0; i < tk->num_samples; i++) {
+            tk->sample[i].sample_size = sample_size;
+        }
+        cio_skip(cio, 4);       /* Sample count = 1 */
+    } else {
+        tk->same_sample_size = 0;
+        if (tk->num_samples != cio_read(cio, 4)) {  /* Sample count */
+            opj_event_msg(cio->cinfo, EVT_ERROR,
+                          "Error in STSZ box. Expected that sample-count is number of samples in track\n");
+            return 1;
+        }
+        for (i = 0; i < tk->num_samples; i++) {
+            tk->sample[i].sample_size = cio_read(cio, 4); /* Sample Size */
+        }
+
+        if (cio_tell(cio) - box.init_pos != box.length) {
+            opj_event_msg(cio->cinfo, EVT_ERROR, "Error with STSZ Box size\n");
+            return 1;
+        }
     }
-  }
-  return 0;
-       
+    return 0;
+
 }
 
 /*
@@ -586,28 +616,30 @@ int mj2_read_stsz(mj2_tk_t * tk, opj_cio_t *cio)
 */
 void mj2_write_stsc(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  unsigned int i;
-  mj2_box_t box;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_STSC, 4); /* STSC       */
-       
-  cio_write(cio, 0, 4);                /* Version = 0, flags = 0 */
-       
-  cio_write(cio, tk->num_samplestochunk, 4);   /* Entry Count */
-       
-  for (i = 0; i < tk->num_samplestochunk; i++) {
-    cio_write(cio, tk->sampletochunk[i].first_chunk, 4);       /* First Chunk */
-    cio_write(cio, tk->sampletochunk[i].samples_per_chunk, 4); /* Samples per chunk */
-    cio_write(cio, tk->sampletochunk[i].sample_descr_idx, 4);  /* Samples description index */
-  }
-       
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+    unsigned int i;
+    mj2_box_t box;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_STSC, 4);  /* STSC       */
+
+    cio_write(cio, 0, 4);     /* Version = 0, flags = 0 */
+
+    cio_write(cio, tk->num_samplestochunk, 4);    /* Entry Count */
+
+    for (i = 0; i < tk->num_samplestochunk; i++) {
+        cio_write(cio, tk->sampletochunk[i].first_chunk, 4);    /* First Chunk */
+        cio_write(cio, tk->sampletochunk[i].samples_per_chunk,
+                  4);  /* Samples per chunk */
+        cio_write(cio, tk->sampletochunk[i].sample_descr_idx,
+                  4);   /* Samples description index */
+    }
+
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -618,44 +650,47 @@ void mj2_write_stsc(mj2_tk_t * tk, opj_cio_t *cio)
 */
 int mj2_read_stsc(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  unsigned int i;
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);  /* Box Size */
-  if (MJ2_STSC != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected STSC Marker\n");
-    return 1;
-  }
-       
-       
-  if (0 != cio_read(cio, 1)) { /* Version = 0 */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in STSC box\n");
-    return 1;
-  }
-       
-  if (0 != cio_read(cio, 3)) { /* Flags = 0  */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in STSC box. Expected flag 0\n");
-    return 1;
-  }
-       
-  tk->num_samplestochunk = cio_read(cio, 4);
-
-  tk->sampletochunk = (mj2_sampletochunk_t*) opj_malloc(tk->num_samplestochunk * sizeof(mj2_sampletochunk_t));
-
-  for (i = 0; i < tk->num_samplestochunk; i++) {
-    tk->sampletochunk[i].first_chunk = cio_read(cio, 4);
-    tk->sampletochunk[i].samples_per_chunk = cio_read(cio, 4);
-    tk->sampletochunk[i].sample_descr_idx = cio_read(cio, 4);
-  }
-       
-  mj2_stsc_decompact(tk);      /* decompact sample to chunk box */
-       
-       
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with STSC Box size\n");
-    return 1;
-  }
-  return 0;
+    unsigned int i;
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);   /* Box Size */
+    if (MJ2_STSC != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected STSC Marker\n");
+        return 1;
+    }
+
+
+    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error: Only Version 0 handled in STSC box\n");
+        return 1;
+    }
+
+    if (0 != cio_read(cio, 3)) {  /* Flags = 0  */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error with flag in STSC box. Expected flag 0\n");
+        return 1;
+    }
+
+    tk->num_samplestochunk = cio_read(cio, 4);
+
+    tk->sampletochunk = (mj2_sampletochunk_t*) opj_malloc(tk->num_samplestochunk *
+                        sizeof(mj2_sampletochunk_t));
+
+    for (i = 0; i < tk->num_samplestochunk; i++) {
+        tk->sampletochunk[i].first_chunk = cio_read(cio, 4);
+        tk->sampletochunk[i].samples_per_chunk = cio_read(cio, 4);
+        tk->sampletochunk[i].sample_descr_idx = cio_read(cio, 4);
+    }
+
+    mj2_stsc_decompact(tk);   /* decompact sample to chunk box */
+
+
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with STSC Box size\n");
+        return 1;
+    }
+    return 0;
 }
 
 /*
@@ -666,73 +701,75 @@ int mj2_read_stsc(mj2_tk_t * tk, opj_cio_t *cio)
 */
 void mj2_write_stts(mj2_tk_t * tk, opj_cio_t *cio)
 {
-       
-  int i;
-  mj2_box_t box;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_STTS, 4); /* STTS       */
-       
-  cio_write(cio, 0, 4);                /* Version = 0, flags = 0 */
-       
-  cio_write(cio, tk->num_tts, 4);      /* entry_count */
-  for (i = 0; i < tk->num_tts; i++) {
-    cio_write(cio, tk->tts[i].sample_count, 4);        /* Sample-count */
-    cio_write(cio, tk->tts[i].sample_delta, 4);        /* Sample-Delta */
-  }
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+
+    int i;
+    mj2_box_t box;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_STTS, 4);  /* STTS       */
+
+    cio_write(cio, 0, 4);     /* Version = 0, flags = 0 */
+
+    cio_write(cio, tk->num_tts, 4);   /* entry_count */
+    for (i = 0; i < tk->num_tts; i++) {
+        cio_write(cio, tk->tts[i].sample_count, 4); /* Sample-count */
+        cio_write(cio, tk->tts[i].sample_delta, 4); /* Sample-Delta */
+    }
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
 * Read the STTS box
 *
-* 
+*
 *
 */
 int mj2_read_stts(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  int i;
-       
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);
-  if (MJ2_STTS != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected STTS Marker\n");
-    return 1;
-  }
-       
-       
-  if (0 != cio_read(cio, 1)) { /* Version = 0 */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in STTS box\n");
-    return 1;
-  }
-       
-  if (0 != cio_read(cio, 3)) { /* Flags = 0  */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in STTS box. Expected flag 0\n");
-    return 1;
-  }
-       
-  tk->num_tts = cio_read(cio, 4);
-
-  tk->tts = (mj2_tts_t*) opj_malloc(tk->num_tts * sizeof(mj2_tts_t));
-
-  for (i = 0; i < tk->num_tts; i++) {
-    tk->tts[i].sample_count = cio_read(cio, 4);
-    tk->tts[i].sample_delta = cio_read(cio, 4);
-  }
-       
-  mj2_tts_decompact(tk);
-       
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with STTS Box size\n");
-    return 1;
-  }
-  return 0;
+    int i;
+
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);
+    if (MJ2_STTS != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected STTS Marker\n");
+        return 1;
+    }
+
+
+    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error: Only Version 0 handled in STTS box\n");
+        return 1;
+    }
+
+    if (0 != cio_read(cio, 3)) {  /* Flags = 0  */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error with flag in STTS box. Expected flag 0\n");
+        return 1;
+    }
+
+    tk->num_tts = cio_read(cio, 4);
+
+    tk->tts = (mj2_tts_t*) opj_malloc(tk->num_tts * sizeof(mj2_tts_t));
+
+    for (i = 0; i < tk->num_tts; i++) {
+        tk->tts[i].sample_count = cio_read(cio, 4);
+        tk->tts[i].sample_delta = cio_read(cio, 4);
+    }
+
+    mj2_tts_decompact(tk);
+
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with STTS Box size\n");
+        return 1;
+    }
+    return 0;
 }
 
 /*
@@ -743,21 +780,21 @@ int mj2_read_stts(mj2_tk_t * tk, opj_cio_t *cio)
 */
 void mj2_write_fiel(mj2_tk_t * tk, opj_cio_t *cio)
 {
-       
-  mj2_box_t box;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_FIEL, 4); /* STTS       */
-       
-  cio_write(cio, tk->fieldcount, 1);   /* Field count */
-  cio_write(cio, tk->fieldorder, 1);   /* Field order */
-       
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+
+    mj2_box_t box;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_FIEL, 4);  /* STTS       */
+
+    cio_write(cio, tk->fieldcount, 1);    /* Field count */
+    cio_write(cio, tk->fieldorder, 1);    /* Field order */
+
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -768,24 +805,24 @@ void mj2_write_fiel(mj2_tk_t * tk, opj_cio_t *cio)
 */
 int mj2_read_fiel(mj2_tk_t * tk, opj_cio_t *cio)
 {
-       
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);
-  if (MJ2_FIEL != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected FIEL Marker\n");
-    return 1;
-  }
-       
-       
-  tk->fieldcount = cio_read(cio, 1);
-  tk->fieldorder = cio_read(cio, 1);
-       
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with FIEL Box size\n");
-    return 1;
-  }
-  return 0;
+
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);
+    if (MJ2_FIEL != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected FIEL Marker\n");
+        return 1;
+    }
+
+
+    tk->fieldcount = cio_read(cio, 1);
+    tk->fieldorder = cio_read(cio, 1);
+
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with FIEL Box size\n");
+        return 1;
+    }
+    return 0;
 }
 
 /*
@@ -796,20 +833,20 @@ int mj2_read_fiel(mj2_tk_t * tk, opj_cio_t *cio)
 */
 void mj2_write_orfo(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_ORFO, 4);
-       
-  cio_write(cio, tk->or_fieldcount, 1);        /* Original Field count */
-  cio_write(cio, tk->or_fieldorder, 1);        /* Original Field order */
-       
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+    mj2_box_t box;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_ORFO, 4);
+
+    cio_write(cio, tk->or_fieldcount, 1); /* Original Field count */
+    cio_write(cio, tk->or_fieldorder, 1); /* Original Field order */
+
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -820,24 +857,24 @@ void mj2_write_orfo(mj2_tk_t * tk, opj_cio_t *cio)
 */
 int mj2_read_orfo(mj2_tk_t * tk, opj_cio_t *cio)
 {
-       
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);
-  if (MJ2_ORFO != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected ORFO Marker\n");
-    return 1;
-  }
-       
-       
-  tk->or_fieldcount = cio_read(cio, 1);
-  tk->or_fieldorder = cio_read(cio, 1);
-       
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with ORFO Box size\n");
-    return 1;
-  }
-  return 0;
+
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);
+    if (MJ2_ORFO != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected ORFO Marker\n");
+        return 1;
+    }
+
+
+    tk->or_fieldcount = cio_read(cio, 1);
+    tk->or_fieldorder = cio_read(cio, 1);
+
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with ORFO Box size\n");
+        return 1;
+    }
+    return 0;
 }
 
 /*
@@ -848,24 +885,24 @@ int mj2_read_orfo(mj2_tk_t * tk, opj_cio_t *cio)
 */
 void mj2_write_jp2p(mj2_tk_t * tk, opj_cio_t *cio)
 {
-       
-  int i;
-  mj2_box_t box;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_JP2P, 4);
-       
-  cio_write(cio, 0, 4);                /* Version 0, flags =0 */
-       
-  for (i = 0; i < tk->num_br; i++) {
-    cio_write(cio, tk->br[i], 4);
-  }
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+
+    int i;
+    mj2_box_t box;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_JP2P, 4);
+
+    cio_write(cio, 0, 4);     /* Version 0, flags =0 */
+
+    for (i = 0; i < tk->num_br; i++) {
+        cio_write(cio, tk->br[i], 4);
+    }
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -876,39 +913,41 @@ void mj2_write_jp2p(mj2_tk_t * tk, opj_cio_t *cio)
 */
 int mj2_read_jp2p(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  int i;
-       
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);
-  if (MJ2_JP2P != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected JP2P Marker\n");
-    return 1;
-  }
-       
-  if (0 != cio_read(cio, 1)) { /* Version = 0 */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in JP2P box\n");
-    return 1;
-  }
-       
-  if (0 != cio_read(cio, 3)) { /* Flags = 0  */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in JP2P box. Expected flag 0\n");
-    return 1;
-  }
-       
-       
-  tk->num_br = (box.length - 12) / 4;
-  tk->br = (unsigned int*) opj_malloc(tk->num_br * sizeof(unsigned int));
-
-  for (i = 0; i < tk->num_br; i++) {
-    tk->br[i] = cio_read(cio, 4);
-  }
-       
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with JP2P Box size\n");
-    return 1;
-  }
-  return 0;
+    int i;
+
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);
+    if (MJ2_JP2P != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected JP2P Marker\n");
+        return 1;
+    }
+
+    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error: Only Version 0 handled in JP2P box\n");
+        return 1;
+    }
+
+    if (0 != cio_read(cio, 3)) {  /* Flags = 0  */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error with flag in JP2P box. Expected flag 0\n");
+        return 1;
+    }
+
+
+    tk->num_br = (box.length - 12) / 4;
+    tk->br = (unsigned int*) opj_malloc(tk->num_br * sizeof(unsigned int));
+
+    for (i = 0; i < tk->num_br; i++) {
+        tk->br[i] = cio_read(cio, 4);
+    }
+
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with JP2P Box size\n");
+        return 1;
+    }
+    return 0;
 }
 
 /*
@@ -919,22 +958,22 @@ int mj2_read_jp2p(mj2_tk_t * tk, opj_cio_t *cio)
 */
 void mj2_write_jp2x(mj2_tk_t * tk, opj_cio_t *cio)
 {
-       
-  int i;
-  mj2_box_t box;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_JP2X, 4);
-       
-  for (i = 0; i < tk->num_jp2x; i++) {
-    cio_write(cio, tk->jp2xdata[i], 1);
-  }
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+
+    int i;
+    mj2_box_t box;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_JP2X, 4);
+
+    for (i = 0; i < tk->num_jp2x; i++) {
+        cio_write(cio, tk->jp2xdata[i], 1);
+    }
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -945,29 +984,30 @@ void mj2_write_jp2x(mj2_tk_t * tk, opj_cio_t *cio)
 */
 int mj2_read_jp2x(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  unsigned int i;
-       
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);
-  if (MJ2_JP2X != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected JP2X Marker\n");
-    return 1;
-  }
-       
-       
-  tk->num_jp2x = (box.length - 8);
-  tk->jp2xdata = (unsigned char*) opj_malloc(tk->num_jp2x * sizeof(unsigned char));
-
-  for (i = 0; i < tk->num_jp2x; i++) {
-    tk->jp2xdata[i] = cio_read(cio, 1);
-  }
-       
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with JP2X Box size\n");
-    return 1;
-  }
-  return 0;
+    unsigned int i;
+
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);
+    if (MJ2_JP2X != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected JP2X Marker\n");
+        return 1;
+    }
+
+
+    tk->num_jp2x = (box.length - 8);
+    tk->jp2xdata = (unsigned char*) opj_malloc(tk->num_jp2x * sizeof(
+                       unsigned char));
+
+    for (i = 0; i < tk->num_jp2x; i++) {
+        tk->jp2xdata[i] = cio_read(cio, 1);
+    }
+
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with JP2X Box size\n");
+        return 1;
+    }
+    return 0;
 }
 
 /*
@@ -978,22 +1018,22 @@ int mj2_read_jp2x(mj2_tk_t * tk, opj_cio_t *cio)
 */
 void mj2_write_jsub(mj2_tk_t * tk, opj_cio_t *cio)
 {
-       
-  mj2_box_t box;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_JSUB, 4);
-       
-  cio_write(cio, tk->hsub, 1);
-  cio_write(cio, tk->vsub, 1);
-  cio_write(cio, tk->hoff, 1);
-  cio_write(cio, tk->voff, 1);
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+
+    mj2_box_t box;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_JSUB, 4);
+
+    cio_write(cio, tk->hsub, 1);
+    cio_write(cio, tk->vsub, 1);
+    cio_write(cio, tk->hoff, 1);
+    cio_write(cio, tk->voff, 1);
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -1004,24 +1044,24 @@ void mj2_write_jsub(mj2_tk_t * tk, opj_cio_t *cio)
 */
 int mj2_read_jsub(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);
-  if (MJ2_JSUB != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected JSUB Marker\n");
-    return 1;
-  }
-       
-  tk->hsub = cio_read(cio, 1);
-  tk->vsub = cio_read(cio, 1);
-  tk->hoff = cio_read(cio, 1);;
-  tk->voff = cio_read(cio, 1);
-       
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with JSUB Box size\n");
-    return 1;
-  }
-  return 0;
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);
+    if (MJ2_JSUB != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected JSUB Marker\n");
+        return 1;
+    }
+
+    tk->hsub = cio_read(cio, 1);
+    tk->vsub = cio_read(cio, 1);
+    tk->hoff = cio_read(cio, 1);;
+    tk->voff = cio_read(cio, 1);
+
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with JSUB Box size\n");
+        return 1;
+    }
+    return 0;
 }
 
 /*
@@ -1032,63 +1072,65 @@ int mj2_read_jsub(mj2_tk_t * tk, opj_cio_t *cio)
 */
 void mj2_write_smj2(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_MJ2, 4);  /* MJ2       */
-       
-  cio_write(cio, 0, 4);                /* Version = 0, flags = 0 */
-       
-  cio_write(cio, 1, 4);
-       
-  cio_write(cio, 0, 2);                /* Pre-defined */
-       
-  cio_write(cio, 0, 2);                /* Reserved */
-       
-  cio_write(cio, 0, 4);                /* Pre-defined */
-  cio_write(cio, 0, 4);                /* Pre-defined */
-  cio_write(cio, 0, 4);                /* Pre-defined */
-       
-  cio_write(cio, tk->w, 2);            /* Width  */
-  cio_write(cio, tk->h, 2);            /* Height */
-       
-  cio_write(cio, tk->horizresolution, 4);      /* Horizontal resolution */
-  cio_write(cio, tk->vertresolution, 4);       /* Vertical resolution   */
-       
-  cio_write(cio, 0, 4);                /* Reserved */
-       
-  cio_write(cio, 1, 2);                /* Pre-defined = 1 */
-       
-  cio_write(cio, tk->compressorname[0], 4);    /* Compressor Name */
-  cio_write(cio, tk->compressorname[1], 4);
-  cio_write(cio, tk->compressorname[2], 4);
-  cio_write(cio, tk->compressorname[3], 4);
-  cio_write(cio, tk->compressorname[4], 4);
-  cio_write(cio, tk->compressorname[5], 4);
-  cio_write(cio, tk->compressorname[6], 4);
-  cio_write(cio, tk->compressorname[7], 4);
-       
-  cio_write(cio, tk->depth, 2);        /* Depth */
-       
-  cio_write(cio, 0xffff, 2);           /* Pre-defined = -1 */
-       
-  jp2_write_jp2h(&tk->jp2_struct, cio);
-       
-  mj2_write_fiel(tk, cio);
-       
-  if (tk->num_br != 0)
-    mj2_write_jp2p(tk, cio);
-  if (tk->num_jp2x != 0)
-    mj2_write_jp2x(tk, cio);
-       
-  mj2_write_jsub(tk, cio);
-  mj2_write_orfo(tk, cio);
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+    mj2_box_t box;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_MJ2, 4);   /* MJ2       */
+
+    cio_write(cio, 0, 4);     /* Version = 0, flags = 0 */
+
+    cio_write(cio, 1, 4);
+
+    cio_write(cio, 0, 2);     /* Pre-defined */
+
+    cio_write(cio, 0, 2);     /* Reserved */
+
+    cio_write(cio, 0, 4);     /* Pre-defined */
+    cio_write(cio, 0, 4);     /* Pre-defined */
+    cio_write(cio, 0, 4);     /* Pre-defined */
+
+    cio_write(cio, tk->w, 2);     /* Width  */
+    cio_write(cio, tk->h, 2);     /* Height */
+
+    cio_write(cio, tk->horizresolution, 4);   /* Horizontal resolution */
+    cio_write(cio, tk->vertresolution, 4);    /* Vertical resolution   */
+
+    cio_write(cio, 0, 4);     /* Reserved */
+
+    cio_write(cio, 1, 2);     /* Pre-defined = 1 */
+
+    cio_write(cio, tk->compressorname[0], 4); /* Compressor Name */
+    cio_write(cio, tk->compressorname[1], 4);
+    cio_write(cio, tk->compressorname[2], 4);
+    cio_write(cio, tk->compressorname[3], 4);
+    cio_write(cio, tk->compressorname[4], 4);
+    cio_write(cio, tk->compressorname[5], 4);
+    cio_write(cio, tk->compressorname[6], 4);
+    cio_write(cio, tk->compressorname[7], 4);
+
+    cio_write(cio, tk->depth, 2); /* Depth */
+
+    cio_write(cio, 0xffff, 2);        /* Pre-defined = -1 */
+
+    jp2_write_jp2h(&tk->jp2_struct, cio);
+
+    mj2_write_fiel(tk, cio);
+
+    if (tk->num_br != 0) {
+        mj2_write_jp2p(tk, cio);
+    }
+    if (tk->num_jp2x != 0) {
+        mj2_write_jp2x(tk, cio);
+    }
+
+    mj2_write_jsub(tk, cio);
+    mj2_write_orfo(tk, cio);
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -1099,124 +1141,132 @@ void mj2_write_smj2(mj2_tk_t * tk, opj_cio_t *cio)
 */
 int mj2_read_smj2(opj_image_t * img, mj2_tk_t * tk, opj_cio_t *cio)
 {
-  mj2_box_t box;
-  mj2_box_t box2;
-  opj_jp2_color_t color;
-  int i;
-  opj_bool ok;
-
-  mj2_read_boxhdr(&box, cio);
-       
-  if (MJ2_MJ2 != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error in SMJ2 box: Expected MJ2 Marker\n");
-    return 1;
-  }
-       
-  if (0 != cio_read(cio, 1)) { /* Version = 0 */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in MJP2 box\n");
-    return 1;
-  }
-       
-  if (0 != cio_read(cio, 3)) { /* Flags = 0  */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in MJP2 box. Expected flag 0\n");
-    return 1;
-  }
-       
-  cio_skip(cio,4);
-       
-  cio_skip(cio,2);                     /* Pre-defined */
-       
-  cio_skip(cio,2);                     /* Reserved */
-       
-  cio_skip(cio,4);                     /* Pre-defined */
-  cio_skip(cio,4);                     /* Pre-defined */
-  cio_skip(cio,4);                     /* Pre-defined */
-       
-  tk->w = cio_read(cio, 2);            /* Width  */
-  tk->h = cio_read(cio, 2);            /* Height */
-       
-  tk->horizresolution = cio_read(cio, 4);      /* Horizontal resolution */
-  tk->vertresolution = cio_read(cio, 4);       /* Vertical resolution   */
-       
-  cio_skip(cio,4);                     /* Reserved */
-       
-  cio_skip(cio,2);                     /* Pre-defined = 1 */
-       
-  tk->compressorname[0] = cio_read(cio, 4);    /* Compressor Name */
-  tk->compressorname[1] = cio_read(cio, 4);
-  tk->compressorname[2] = cio_read(cio, 4);
-  tk->compressorname[3] = cio_read(cio, 4);
-  tk->compressorname[4] = cio_read(cio, 4);
-  tk->compressorname[5] = cio_read(cio, 4);
-  tk->compressorname[6] = cio_read(cio, 4);
-  tk->compressorname[7] = cio_read(cio, 4);
-       
-  tk->depth = cio_read(cio, 2);        /* Depth */
-       
-  /* Init std value */
-  tk->num_jp2x = 0;
-  tk->fieldcount = 1;
-  tk->fieldorder = 0;
-  tk->or_fieldcount = 1;
-  tk->or_fieldorder = 0;
-       
-  cio_skip(cio,2);                     /* Pre-defined = -1 */
-  memset(&color, 0, sizeof(opj_jp2_color_t));
-  tk->jp2_struct.cinfo = tk->cinfo;
-
-  ok = jp2_read_jp2h(&tk->jp2_struct, cio, &color);
-
-  tk->jp2_struct.cinfo = NULL;
-
-  if(ok == OPJ_FALSE)
- {
-       opj_event_msg(tk->cinfo, EVT_ERROR, "Error reading JP2H Box\n");
-    return 1;
- }
-
-  tk->jp2_struct.comps = (opj_jp2_comps_t*) opj_malloc(tk->jp2_struct.numcomps * sizeof(opj_jp2_comps_t));
-  tk->jp2_struct.cl = (unsigned int*) opj_malloc(sizeof(unsigned int));
-
-  tk->num_br = 0;
-  tk->num_jp2x = 0;
-       
-  for (i = 0; cio_tell(cio) - box.init_pos < box.length; i++) {
-    mj2_read_boxhdr(&box2, cio);
-    cio_seek(cio, box2.init_pos);
-    switch (box2.type) {
-    case MJ2_FIEL:
-      if (mj2_read_fiel(tk, cio))
-                               return 1;
-      break;
-                       
-    case MJ2_JP2P:
-      if (mj2_read_jp2p(tk, cio))
-                               return 1;
-      break;
-                       
-    case MJ2_JP2X:
-      if (mj2_read_jp2x(tk, cio))
-                               return 1;
-      break;
-                       
-    case MJ2_JSUB:
-      if (mj2_read_jsub(tk, cio))
-                               return 1;
-      break;
-                       
-    case MJ2_ORFO:
-      if (mj2_read_orfo(tk, cio))
-                               return 1;
-      break;
-                       
-    default:
-      opj_event_msg(cio->cinfo, EVT_ERROR, "Error with MJP2 Box size\n");
-      return 1;
-      break;
-                       
-    }
-  }
-  return 0;
+    mj2_box_t box;
+    mj2_box_t box2;
+    opj_jp2_color_t color;
+    int i;
+    opj_bool ok;
+
+    mj2_read_boxhdr(&box, cio);
+
+    if (MJ2_MJ2 != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error in SMJ2 box: Expected MJ2 Marker\n");
+        return 1;
+    }
+
+    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error: Only Version 0 handled in MJP2 box\n");
+        return 1;
+    }
+
+    if (0 != cio_read(cio, 3)) {  /* Flags = 0  */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error with flag in MJP2 box. Expected flag 0\n");
+        return 1;
+    }
+
+    cio_skip(cio, 4);
+
+    cio_skip(cio, 2);         /* Pre-defined */
+
+    cio_skip(cio, 2);         /* Reserved */
+
+    cio_skip(cio, 4);         /* Pre-defined */
+    cio_skip(cio, 4);         /* Pre-defined */
+    cio_skip(cio, 4);         /* Pre-defined */
+
+    tk->w = cio_read(cio, 2);     /* Width  */
+    tk->h = cio_read(cio, 2);     /* Height */
+
+    tk->horizresolution = cio_read(cio, 4);   /* Horizontal resolution */
+    tk->vertresolution = cio_read(cio, 4);    /* Vertical resolution   */
+
+    cio_skip(cio, 4);         /* Reserved */
+
+    cio_skip(cio, 2);         /* Pre-defined = 1 */
+
+    tk->compressorname[0] = cio_read(cio, 4); /* Compressor Name */
+    tk->compressorname[1] = cio_read(cio, 4);
+    tk->compressorname[2] = cio_read(cio, 4);
+    tk->compressorname[3] = cio_read(cio, 4);
+    tk->compressorname[4] = cio_read(cio, 4);
+    tk->compressorname[5] = cio_read(cio, 4);
+    tk->compressorname[6] = cio_read(cio, 4);
+    tk->compressorname[7] = cio_read(cio, 4);
+
+    tk->depth = cio_read(cio, 2); /* Depth */
+
+    /* Init std value */
+    tk->num_jp2x = 0;
+    tk->fieldcount = 1;
+    tk->fieldorder = 0;
+    tk->or_fieldcount = 1;
+    tk->or_fieldorder = 0;
+
+    cio_skip(cio, 2);         /* Pre-defined = -1 */
+    memset(&color, 0, sizeof(opj_jp2_color_t));
+    tk->jp2_struct.cinfo = tk->cinfo;
+
+    ok = jp2_read_jp2h(&tk->jp2_struct, cio, &color);
+
+    tk->jp2_struct.cinfo = NULL;
+
+    if (ok == OPJ_FALSE) {
+        opj_event_msg(tk->cinfo, EVT_ERROR, "Error reading JP2H Box\n");
+        return 1;
+    }
+
+    tk->jp2_struct.comps = (opj_jp2_comps_t*) opj_malloc(tk->jp2_struct.numcomps *
+                           sizeof(opj_jp2_comps_t));
+    tk->jp2_struct.cl = (unsigned int*) opj_malloc(sizeof(unsigned int));
+
+    tk->num_br = 0;
+    tk->num_jp2x = 0;
+
+    for (i = 0; cio_tell(cio) - box.init_pos < box.length; i++) {
+        mj2_read_boxhdr(&box2, cio);
+        cio_seek(cio, box2.init_pos);
+        switch (box2.type) {
+        case MJ2_FIEL:
+            if (mj2_read_fiel(tk, cio)) {
+                return 1;
+            }
+            break;
+
+        case MJ2_JP2P:
+            if (mj2_read_jp2p(tk, cio)) {
+                return 1;
+            }
+            break;
+
+        case MJ2_JP2X:
+            if (mj2_read_jp2x(tk, cio)) {
+                return 1;
+            }
+            break;
+
+        case MJ2_JSUB:
+            if (mj2_read_jsub(tk, cio)) {
+                return 1;
+            }
+            break;
+
+        case MJ2_ORFO:
+            if (mj2_read_orfo(tk, cio)) {
+                return 1;
+            }
+            break;
+
+        default:
+            opj_event_msg(cio->cinfo, EVT_ERROR, "Error with MJP2 Box size\n");
+            return 1;
+            break;
+
+        }
+    }
+    return 0;
 }
 
 
@@ -1228,30 +1278,31 @@ int mj2_read_smj2(opj_image_t * img, mj2_tk_t * tk, opj_cio_t *cio)
 */
 void mj2_write_stsd(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_STSD, 4); /* STSD       */
-       
-  cio_write(cio, 0, 4);                /* Version = 0, flags = 0 */
-       
-  cio_write(cio, 1, 4);                /* entry_count = 1 (considering same JP2 headerboxes) */
-       
-  if (tk->track_type == 0) {
-    mj2_write_smj2(tk, cio);
-  } else if (tk->track_type == 1) {
-    /* Not implemented*/
-  }
-  if (tk->track_type == 2) {
-    /* Not implemented*/
-  }
-       
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+    mj2_box_t box;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_STSD, 4);  /* STSD       */
+
+    cio_write(cio, 0, 4);     /* Version = 0, flags = 0 */
+
+    cio_write(cio, 1,
+              4);     /* entry_count = 1 (considering same JP2 headerboxes) */
+
+    if (tk->track_type == 0) {
+        mj2_write_smj2(tk, cio);
+    } else if (tk->track_type == 1) {
+        /* Not implemented*/
+    }
+    if (tk->track_type == 2) {
+        /* Not implemented*/
+    }
+
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -1262,52 +1313,55 @@ void mj2_write_stsd(mj2_tk_t * tk, opj_cio_t *cio)
 */
 int mj2_read_stsd(mj2_tk_t * tk, opj_image_t * img, opj_cio_t *cio)
 {
-  int i;
-  int entry_count, len_2skip;
-       
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);
-       
-  if (MJ2_STSD != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected STSD Marker\n");
-    return 1;
-  }
-       
-  if (0 != cio_read(cio, 1)) { /* Version = 0 */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in STSD box\n");
-    return 1;
-  }
-       
-  if (0 != cio_read(cio, 3)) { /* Flags = 0  */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in STSD box. Expected flag 0\n");
-    return 1;
-  }
-       
-  entry_count = cio_read(cio, 4);
-       
-  if (tk->track_type == 0) {
-    for (i = 0; i < entry_count; i++) {
-      if (mj2_read_smj2(img, tk, cio))
-                               return 1;
-    }
-  } else if (tk->track_type == 1) {
-    len_2skip = cio_read(cio, 4);      /* Not implemented -> skipping box*/
-    cio_skip(cio,len_2skip - 4);
-  } else if (tk->track_type == 2) {
-    len_2skip = cio_read(cio, 4);      /* Not implemented -> skipping box*/
-    cio_skip(cio,len_2skip - 4);
-  }
-       
-       
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with STSD Box size\n");
-    return 1;
-  }
-  return 0;
-}
+    int i;
+    int entry_count, len_2skip;
 
-/*
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);
+
+    if (MJ2_STSD != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected STSD Marker\n");
+        return 1;
+    }
+
+    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error: Only Version 0 handled in STSD box\n");
+        return 1;
+    }
+
+    if (0 != cio_read(cio, 3)) {  /* Flags = 0  */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error with flag in STSD box. Expected flag 0\n");
+        return 1;
+    }
+
+    entry_count = cio_read(cio, 4);
+
+    if (tk->track_type == 0) {
+        for (i = 0; i < entry_count; i++) {
+            if (mj2_read_smj2(img, tk, cio)) {
+                return 1;
+            }
+        }
+    } else if (tk->track_type == 1) {
+        len_2skip = cio_read(cio, 4);   /* Not implemented -> skipping box*/
+        cio_skip(cio, len_2skip - 4);
+    } else if (tk->track_type == 2) {
+        len_2skip = cio_read(cio, 4);   /* Not implemented -> skipping box*/
+        cio_skip(cio, len_2skip - 4);
+    }
+
+
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with STSD Box size\n");
+        return 1;
+    }
+    return 0;
+}
+
+/*
 * Write the STBL box
 *
 * Sample table box box
@@ -1315,22 +1369,22 @@ int mj2_read_stsd(mj2_tk_t * tk, opj_image_t * img, opj_cio_t *cio)
 */
 void mj2_write_stbl(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_STBL, 4); /* STBL       */
-       
-  mj2_write_stsd(tk, cio);
-  mj2_write_stts(tk, cio);
-  mj2_write_stsc(tk, cio);
-  mj2_write_stsz(tk, cio);
-  mj2_write_stco(tk, cio);
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+    mj2_box_t box;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_STBL, 4);  /* STBL       */
+
+    mj2_write_stsd(tk, cio);
+    mj2_write_stts(tk, cio);
+    mj2_write_stsc(tk, cio);
+    mj2_write_stsz(tk, cio);
+    mj2_write_stco(tk, cio);
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -1341,30 +1395,35 @@ void mj2_write_stbl(mj2_tk_t * tk, opj_cio_t *cio)
 */
 int mj2_read_stbl(mj2_tk_t * tk, opj_image_t * img, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);
-  if (MJ2_STBL != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected STBL Marker\n");
-    return 1;
-  }
-       
-  if (mj2_read_stsd(tk, img, cio))
-    return 1;
-  if (mj2_read_stts(tk, cio))
-    return 1;
-  if (mj2_read_stsc(tk, cio))
-    return 1;
-  if (mj2_read_stsz(tk, cio))
-    return 1;
-  if (mj2_read_stco(tk, cio))
-    return 1;
-       
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with STBL Box size\n");
-    return 1;
-  }
-  return 0;
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);
+    if (MJ2_STBL != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected STBL Marker\n");
+        return 1;
+    }
+
+    if (mj2_read_stsd(tk, img, cio)) {
+        return 1;
+    }
+    if (mj2_read_stts(tk, cio)) {
+        return 1;
+    }
+    if (mj2_read_stsc(tk, cio)) {
+        return 1;
+    }
+    if (mj2_read_stsz(tk, cio)) {
+        return 1;
+    }
+    if (mj2_read_stco(tk, cio)) {
+        return 1;
+    }
+
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with STBL Box size\n");
+        return 1;
+    }
+    return 0;
 }
 
 /*
@@ -1375,26 +1434,27 @@ int mj2_read_stbl(mj2_tk_t * tk, opj_image_t * img, opj_cio_t *cio)
 */
 void mj2_write_url(mj2_tk_t * tk, int url_num, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_URL, 4);  /* URL       */
-       
-  if (url_num == 0)
-    cio_write(cio, 1, 4);              /* Version = 0, flags = 1 because stored in same file */
-  else {
-    cio_write(cio, 0, 4);              /* Version = 0, flags =  0 */
-    cio_write(cio, tk->url[url_num - 1].location[0], 4);
-    cio_write(cio, tk->url[url_num - 1].location[1], 4);
-    cio_write(cio, tk->url[url_num - 1].location[2], 4);
-    cio_write(cio, tk->url[url_num - 1].location[3], 4);
-  }
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+    mj2_box_t box;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_URL, 4);   /* URL       */
+
+    if (url_num == 0) {
+        cio_write(cio, 1,
+                  4);    /* Version = 0, flags = 1 because stored in same file */
+    } else {
+        cio_write(cio, 0, 4);       /* Version = 0, flags =  0 */
+        cio_write(cio, tk->url[url_num - 1].location[0], 4);
+        cio_write(cio, tk->url[url_num - 1].location[1], 4);
+        cio_write(cio, tk->url[url_num - 1].location[2], 4);
+        cio_write(cio, tk->url[url_num - 1].location[3], 4);
+    }
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -1405,34 +1465,35 @@ void mj2_write_url(mj2_tk_t * tk, int url_num, opj_cio_t *cio)
 */
 int mj2_read_url(mj2_tk_t * tk, int urn_num, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);
-  if (MJ2_URL != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected URL Marker\n");
-    return 1;
-  }
-       
-  if (0 != cio_read(cio, 1)) { /* Version = 0 */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in URL box\n");
-    return 1;
-  }
-       
-  if (1 != cio_read(cio, 3)) { /* If flags = 1 --> media data in file */
-    tk->url[urn_num].location[0] = cio_read(cio, 4);
-    tk->url[urn_num].location[1] = cio_read(cio, 4);
-    tk->url[urn_num].location[2] = cio_read(cio, 4);
-    tk->url[urn_num].location[3] = cio_read(cio, 4);
-  } else {
-    tk->num_url--;
-  }
-       
-       
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with URL Box size\n");
-    return 1;
-  }
-  return 0;
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);
+    if (MJ2_URL != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected URL Marker\n");
+        return 1;
+    }
+
+    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error: Only Version 0 handled in URL box\n");
+        return 1;
+    }
+
+    if (1 != cio_read(cio, 3)) {  /* If flags = 1 --> media data in file */
+        tk->url[urn_num].location[0] = cio_read(cio, 4);
+        tk->url[urn_num].location[1] = cio_read(cio, 4);
+        tk->url[urn_num].location[2] = cio_read(cio, 4);
+        tk->url[urn_num].location[3] = cio_read(cio, 4);
+    } else {
+        tk->num_url--;
+    }
+
+
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with URL Box size\n");
+        return 1;
+    }
+    return 0;
 }
 
 /*
@@ -1443,27 +1504,27 @@ int mj2_read_url(mj2_tk_t * tk, int urn_num, opj_cio_t *cio)
 */
 void mj2_write_urn(mj2_tk_t * tk, int urn_num, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_URN, 4);  /* URN       */
-       
-  cio_write(cio, 0, 4);                /* Version = 0, flags =  0 */
-       
-  cio_write(cio, tk->urn[urn_num].name[0], 4);
-  cio_write(cio, tk->urn[urn_num].name[1], 4);
-  cio_write(cio, tk->urn[urn_num].name[2], 4);
-  cio_write(cio, tk->urn[urn_num].name[3], 4);
-  cio_write(cio, tk->urn[urn_num].location[0], 4);
-  cio_write(cio, tk->urn[urn_num].location[1], 4);
-  cio_write(cio, tk->urn[urn_num].location[2], 4);
-  cio_write(cio, tk->urn[urn_num].location[3], 4);
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+    mj2_box_t box;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_URN, 4);   /* URN       */
+
+    cio_write(cio, 0, 4);     /* Version = 0, flags =  0 */
+
+    cio_write(cio, tk->urn[urn_num].name[0], 4);
+    cio_write(cio, tk->urn[urn_num].name[1], 4);
+    cio_write(cio, tk->urn[urn_num].name[2], 4);
+    cio_write(cio, tk->urn[urn_num].name[3], 4);
+    cio_write(cio, tk->urn[urn_num].location[0], 4);
+    cio_write(cio, tk->urn[urn_num].location[1], 4);
+    cio_write(cio, tk->urn[urn_num].location[2], 4);
+    cio_write(cio, tk->urn[urn_num].location[3], 4);
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -1474,37 +1535,38 @@ void mj2_write_urn(mj2_tk_t * tk, int urn_num, opj_cio_t *cio)
 */
 int mj2_read_urn(mj2_tk_t * tk, int urn_num, opj_cio_t *cio)
 {
-       
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);
-  if (MJ2_URN != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected URN Marker\n");
-    return 1;
-  }
-       
-  if (0 != cio_read(cio, 1)) { /* Version = 0 */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in URN box\n");
-    return 1;
-  }
-       
-  if (1 != cio_read(cio, 3)) { /* If flags = 1 --> media data in file */
-    tk->urn[urn_num].name[0] = cio_read(cio, 4);
-    tk->urn[urn_num].name[1] = cio_read(cio, 4);
-    tk->urn[urn_num].name[2] = cio_read(cio, 4);
-    tk->urn[urn_num].name[3] = cio_read(cio, 4);
-    tk->urn[urn_num].location[0] = cio_read(cio, 4);
-    tk->urn[urn_num].location[1] = cio_read(cio, 4);
-    tk->urn[urn_num].location[2] = cio_read(cio, 4);
-    tk->urn[urn_num].location[3] = cio_read(cio, 4);
-  }
-       
-       
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with URN Box size\n");
-    return 1;
-  }
-  return 0;
+
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);
+    if (MJ2_URN != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected URN Marker\n");
+        return 1;
+    }
+
+    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error: Only Version 0 handled in URN box\n");
+        return 1;
+    }
+
+    if (1 != cio_read(cio, 3)) {  /* If flags = 1 --> media data in file */
+        tk->urn[urn_num].name[0] = cio_read(cio, 4);
+        tk->urn[urn_num].name[1] = cio_read(cio, 4);
+        tk->urn[urn_num].name[2] = cio_read(cio, 4);
+        tk->urn[urn_num].name[3] = cio_read(cio, 4);
+        tk->urn[urn_num].location[0] = cio_read(cio, 4);
+        tk->urn[urn_num].location[1] = cio_read(cio, 4);
+        tk->urn[urn_num].location[2] = cio_read(cio, 4);
+        tk->urn[urn_num].location[3] = cio_read(cio, 4);
+    }
+
+
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with URN Box size\n");
+        return 1;
+    }
+    return 0;
 }
 
 
@@ -1516,32 +1578,34 @@ int mj2_read_urn(mj2_tk_t * tk, int urn_num, opj_cio_t *cio)
 */
 void mj2_write_dref(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  int i;
-  mj2_box_t box;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_DREF, 4); /* DREF       */
-       
-  cio_write(cio, 0, 4);                /* Version = 0, flags = 0 */
-       
-  if (tk->num_url + tk->num_urn == 0) {        /* Media data in same file */
-    cio_write(cio, 1, 4);              /* entry_count = 1 */
-    mj2_write_url(tk, 0, cio);
-  } else {
-    cio_write(cio, tk->num_url + tk->num_urn, 4);      /* entry_count */
-               
-    for (i = 0; i < tk->num_url; i++)
-      mj2_write_url(tk, i + 1, cio);
-               
-    for (i = 0; i < tk->num_urn; i++)
-      mj2_write_urn(tk, i, cio);
-  }
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+    int i;
+    mj2_box_t box;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_DREF, 4);  /* DREF       */
+
+    cio_write(cio, 0, 4);     /* Version = 0, flags = 0 */
+
+    if (tk->num_url + tk->num_urn == 0) { /* Media data in same file */
+        cio_write(cio, 1, 4);       /* entry_count = 1 */
+        mj2_write_url(tk, 0, cio);
+    } else {
+        cio_write(cio, tk->num_url + tk->num_urn, 4);   /* entry_count */
+
+        for (i = 0; i < tk->num_url; i++) {
+            mj2_write_url(tk, i + 1, cio);
+        }
+
+        for (i = 0; i < tk->num_urn; i++) {
+            mj2_write_urn(tk, i, cio);
+        }
+    }
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -1552,57 +1616,62 @@ void mj2_write_dref(mj2_tk_t * tk, opj_cio_t *cio)
 */
 int mj2_read_dref(mj2_tk_t * tk, opj_cio_t *cio)
 {
-       
-  int i;
-  int entry_count, marker;
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);
-  if (MJ2_DREF != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected DREF Marker\n");
-    return 1;
-  }
-       
-  if (0 != cio_read(cio, 1)) { /* Version = 0 */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in DREF box\n");
-    return 1;
-  }
-       
-  if (0 != cio_read(cio, 3)) { /* Flags = 0  */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in DREF box. Expected flag 0\n");
-    return 1;
-  }
-       
-  entry_count = cio_read(cio, 4);
-  tk->num_url = 0;
-  tk->num_urn = 0;
-       
-  for (i = 0; i < entry_count; i++) {
-    cio_skip(cio,4);
-    marker = cio_read(cio, 4);
-    if (marker == MJ2_URL) {
-      cio_skip(cio,-8);
-      tk->num_url++;
-      if (mj2_read_url(tk, tk->num_url, cio))
-                               return 1;
-    } else if (marker == MJ2_URN) {
-      cio_skip(cio,-8);
-      tk->num_urn++;
-      if (mj2_read_urn(tk, tk->num_urn, cio))
-                               return 1;
-    } else {
-      opj_event_msg(cio->cinfo, EVT_ERROR, "Error with in DREF box. Expected URN or URL box\n");
-      return 1;
+
+    int i;
+    int entry_count, marker;
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);
+    if (MJ2_DREF != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected DREF Marker\n");
+        return 1;
+    }
+
+    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error: Only Version 0 handled in DREF box\n");
+        return 1;
     }
-               
-  }
-       
-       
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with DREF Box size\n");
-    return 1;
-  }
-  return 0;
+
+    if (0 != cio_read(cio, 3)) {  /* Flags = 0  */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error with flag in DREF box. Expected flag 0\n");
+        return 1;
+    }
+
+    entry_count = cio_read(cio, 4);
+    tk->num_url = 0;
+    tk->num_urn = 0;
+
+    for (i = 0; i < entry_count; i++) {
+        cio_skip(cio, 4);
+        marker = cio_read(cio, 4);
+        if (marker == MJ2_URL) {
+            cio_skip(cio, -8);
+            tk->num_url++;
+            if (mj2_read_url(tk, tk->num_url, cio)) {
+                return 1;
+            }
+        } else if (marker == MJ2_URN) {
+            cio_skip(cio, -8);
+            tk->num_urn++;
+            if (mj2_read_urn(tk, tk->num_urn, cio)) {
+                return 1;
+            }
+        } else {
+            opj_event_msg(cio->cinfo, EVT_ERROR,
+                          "Error with in DREF box. Expected URN or URL box\n");
+            return 1;
+        }
+
+    }
+
+
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with DREF Box size\n");
+        return 1;
+    }
+    return 0;
 }
 
 /*
@@ -1613,18 +1682,18 @@ int mj2_read_dref(mj2_tk_t * tk, opj_cio_t *cio)
 */
 void mj2_write_dinf(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_DINF, 4); /* DINF       */
-       
-  mj2_write_dref(tk, cio);
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+    mj2_box_t box;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_DINF, 4);  /* DINF       */
+
+    mj2_write_dref(tk, cio);
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -1635,22 +1704,23 @@ void mj2_write_dinf(mj2_tk_t * tk, opj_cio_t *cio)
 */
 int mj2_read_dinf(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);
-  if (MJ2_DINF != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected DINF Marker\n");
-    return 1;
-  }
-       
-  if (mj2_read_dref(tk, cio))
-    return 1;
-       
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with DINF Box size\n");
-    return 1;
-  }
-  return 0;
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);
+    if (MJ2_DINF != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected DINF Marker\n");
+        return 1;
+    }
+
+    if (mj2_read_dref(tk, cio)) {
+        return 1;
+    }
+
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with DINF Box size\n");
+        return 1;
+    }
+    return 0;
 }
 
 /*
@@ -1661,23 +1731,23 @@ int mj2_read_dinf(mj2_tk_t * tk, opj_cio_t *cio)
 */
 void mj2_write_vmhd(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_VMHD, 4); /* VMHD       */
-       
-  cio_write(cio, 1, 4);                /* Version = 0, flags = 1 */
-       
-  cio_write(cio, tk->graphicsmode, 2);
-  cio_write(cio, tk->opcolor[0], 2);
-  cio_write(cio, tk->opcolor[1], 2);
-  cio_write(cio, tk->opcolor[2], 2);
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+    mj2_box_t box;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_VMHD, 4);  /* VMHD       */
+
+    cio_write(cio, 1, 4);     /* Version = 0, flags = 1 */
+
+    cio_write(cio, tk->graphicsmode, 2);
+    cio_write(cio, tk->opcolor[0], 2);
+    cio_write(cio, tk->opcolor[1], 2);
+    cio_write(cio, tk->opcolor[2], 2);
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -1688,35 +1758,37 @@ void mj2_write_vmhd(mj2_tk_t * tk, opj_cio_t *cio)
 */
 int mj2_read_vmhd(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);
-  if (MJ2_VMHD != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected VMHD Marker\n");
-    return 1;
-  }
-       
-  if (0 != cio_read(cio, 1)) { /* Version = 0 */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in VMHD box\n");
-    return 1;
-  }
-       
-  if (1 != cio_read(cio, 3)) { /* Flags = 1  */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in VMHD box. Expected flag 1\n");
-    return 1;
-  }
-       
-  tk->track_type = 0;
-  tk->graphicsmode = cio_read(cio, 2);
-  tk->opcolor[0] = cio_read(cio, 2);
-  tk->opcolor[1] = cio_read(cio, 2);
-  tk->opcolor[2] = cio_read(cio, 2);
-       
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with VMHD Box size\n");
-    return 1;
-  }
-  return 0;
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);
+    if (MJ2_VMHD != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected VMHD Marker\n");
+        return 1;
+    }
+
+    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error: Only Version 0 handled in VMHD box\n");
+        return 1;
+    }
+
+    if (1 != cio_read(cio, 3)) {  /* Flags = 1  */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error with flag in VMHD box. Expected flag 1\n");
+        return 1;
+    }
+
+    tk->track_type = 0;
+    tk->graphicsmode = cio_read(cio, 2);
+    tk->opcolor[0] = cio_read(cio, 2);
+    tk->opcolor[1] = cio_read(cio, 2);
+    tk->opcolor[2] = cio_read(cio, 2);
+
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with VMHD Box size\n");
+        return 1;
+    }
+    return 0;
 }
 
 /*
@@ -1727,22 +1799,22 @@ int mj2_read_vmhd(mj2_tk_t * tk, opj_cio_t *cio)
 */
 void mj2_write_smhd(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_SMHD, 4); /* SMHD       */
-       
-  cio_write(cio, 0, 4);                /* Version = 0, flags = 0 */
-       
-  cio_write(cio, tk->balance, 2);
-       
-  cio_write(cio, 0, 2);                /* Reserved */
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+    mj2_box_t box;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_SMHD, 4);  /* SMHD       */
+
+    cio_write(cio, 0, 4);     /* Version = 0, flags = 0 */
+
+    cio_write(cio, tk->balance, 2);
+
+    cio_write(cio, 0, 2);     /* Reserved */
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -1753,44 +1825,46 @@ void mj2_write_smhd(mj2_tk_t * tk, opj_cio_t *cio)
 */
 int mj2_read_smhd(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);
-  if (MJ2_SMHD != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected SMHD Marker\n");
-    return 1;
-  }
-       
-  if (0 != cio_read(cio, 1)) { /* Version = 0 */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in SMHD box\n");
-    return 1;
-  }
-       
-  if (0 != cio_read(cio, 3)) { /* Flags = 0  */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in SMHD box. Expected flag 0\n");
-    return 1;
-  }
-       
-  tk->track_type = 1;
-  tk->balance = cio_read(cio, 2);
-       
-  /* Init variables to zero to avoid problems when freeeing memory
-  The values will possibly be overidded when decoding the track structure */
-  tk->num_br = 0;
-  tk->num_url = 0;
-  tk->num_urn = 0;
-  tk->num_chunks = 0;
-  tk->num_tts = 0;
-  tk->num_samplestochunk = 0;
-  tk->num_samples = 0;
-       
-  cio_skip(cio,2);                     /* Reserved */
-       
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with SMHD Box size\n");
-    return 1;
-  }
-  return 0;
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);
+    if (MJ2_SMHD != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected SMHD Marker\n");
+        return 1;
+    }
+
+    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error: Only Version 0 handled in SMHD box\n");
+        return 1;
+    }
+
+    if (0 != cio_read(cio, 3)) {  /* Flags = 0  */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error with flag in SMHD box. Expected flag 0\n");
+        return 1;
+    }
+
+    tk->track_type = 1;
+    tk->balance = cio_read(cio, 2);
+
+    /* Init variables to zero to avoid problems when freeeing memory
+    The values will possibly be overidded when decoding the track structure */
+    tk->num_br = 0;
+    tk->num_url = 0;
+    tk->num_urn = 0;
+    tk->num_chunks = 0;
+    tk->num_tts = 0;
+    tk->num_samplestochunk = 0;
+    tk->num_samples = 0;
+
+    cio_skip(cio, 2);         /* Reserved */
+
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with SMHD Box size\n");
+        return 1;
+    }
+    return 0;
 }
 
 /*
@@ -1801,24 +1875,24 @@ int mj2_read_smhd(mj2_tk_t * tk, opj_cio_t *cio)
 */
 void mj2_write_hmhd(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_HMHD, 4); /* HMHD       */
-       
-  cio_write(cio, 0, 4);                /* Version = 0, flags = 0 */
-       
-  cio_write(cio, tk->maxPDUsize, 2);
-  cio_write(cio, tk->avgPDUsize, 2);
-  cio_write(cio, tk->maxbitrate, 4);
-  cio_write(cio, tk->avgbitrate, 4);
-  cio_write(cio, tk->slidingavgbitrate, 4);
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+    mj2_box_t box;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_HMHD, 4);  /* HMHD       */
+
+    cio_write(cio, 0, 4);     /* Version = 0, flags = 0 */
+
+    cio_write(cio, tk->maxPDUsize, 2);
+    cio_write(cio, tk->avgPDUsize, 2);
+    cio_write(cio, tk->maxbitrate, 4);
+    cio_write(cio, tk->avgbitrate, 4);
+    cio_write(cio, tk->slidingavgbitrate, 4);
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -1829,47 +1903,49 @@ void mj2_write_hmhd(mj2_tk_t * tk, opj_cio_t *cio)
 */
 int mj2_read_hmhd(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);
-  if (MJ2_HMHD != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected HMHD Marker\n");
-    return 1;
-  }
-       
-  if (0 != cio_read(cio, 1)) { /* Version = 0 */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in HMHD box\n");
-    return 1;
-  }
-       
-  if (0 != cio_read(cio, 3)) { /* Flags = 0  */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in HMHD box. Expected flag 0\n");
-    return 1;
-  }
-       
-  tk->track_type = 2;
-  tk->maxPDUsize = cio_read(cio, 2);
-  tk->avgPDUsize = cio_read(cio, 2);
-  tk->maxbitrate = cio_read(cio, 4);
-  tk->avgbitrate = cio_read(cio, 4);
-  tk->slidingavgbitrate = cio_read(cio, 4);
-       
-  /* Init variables to zero to avoid problems when freeeing memory
-  The values will possibly be overidded when decoding the track structure */
-  tk->num_br = 0;
-  tk->num_url = 0;
-  tk->num_urn = 0;
-  tk->num_chunks = 0;
-  tk->num_tts = 0;
-  tk->num_samplestochunk = 0;
-  tk->num_samples = 0;
-       
-       
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with HMHD Box size\n");
-    return 1;
-  }
-  return 0;
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);
+    if (MJ2_HMHD != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected HMHD Marker\n");
+        return 1;
+    }
+
+    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error: Only Version 0 handled in HMHD box\n");
+        return 1;
+    }
+
+    if (0 != cio_read(cio, 3)) {  /* Flags = 0  */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error with flag in HMHD box. Expected flag 0\n");
+        return 1;
+    }
+
+    tk->track_type = 2;
+    tk->maxPDUsize = cio_read(cio, 2);
+    tk->avgPDUsize = cio_read(cio, 2);
+    tk->maxbitrate = cio_read(cio, 4);
+    tk->avgbitrate = cio_read(cio, 4);
+    tk->slidingavgbitrate = cio_read(cio, 4);
+
+    /* Init variables to zero to avoid problems when freeeing memory
+    The values will possibly be overidded when decoding the track structure */
+    tk->num_br = 0;
+    tk->num_url = 0;
+    tk->num_urn = 0;
+    tk->num_chunks = 0;
+    tk->num_tts = 0;
+    tk->num_samplestochunk = 0;
+    tk->num_samples = 0;
+
+
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with HMHD Box size\n");
+        return 1;
+    }
+    return 0;
 }
 
 /*
@@ -1880,27 +1956,27 @@ int mj2_read_hmhd(mj2_tk_t * tk, opj_cio_t *cio)
 */
 void mj2_write_minf(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_MINF, 4); /* MINF       */
-       
-  if (tk->track_type == 0) {
-    mj2_write_vmhd(tk, cio);
-  } else if (tk->track_type == 1) {
-    mj2_write_smhd(tk, cio);
-  } else if (tk->track_type == 2) {
-    mj2_write_hmhd(tk, cio);
-  }
-       
-  mj2_write_dinf(tk, cio);
-  mj2_write_stbl(tk, cio);
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+    mj2_box_t box;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_MINF, 4);  /* MINF       */
+
+    if (tk->track_type == 0) {
+        mj2_write_vmhd(tk, cio);
+    } else if (tk->track_type == 1) {
+        mj2_write_smhd(tk, cio);
+    } else if (tk->track_type == 2) {
+        mj2_write_hmhd(tk, cio);
+    }
+
+    mj2_write_dinf(tk, cio);
+    mj2_write_stbl(tk, cio);
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -1911,45 +1987,51 @@ void mj2_write_minf(mj2_tk_t * tk, opj_cio_t *cio)
 */
 int mj2_read_minf(mj2_tk_t * tk, opj_image_t * img, opj_cio_t *cio)
 {
-       
-  unsigned int box_type;
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);
-  if (MJ2_MINF != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected MINF Marker\n");
-    return 1;
-  }
-       
-  cio_skip(cio,4);
-  box_type = cio_read(cio, 4);
-  cio_skip(cio,-8);
-       
-  if (box_type == MJ2_VMHD) {
-    if (mj2_read_vmhd(tk, cio))
-      return 1;
-  } else if (box_type == MJ2_SMHD) {
-    if (mj2_read_smhd(tk, cio))
-      return 1;
-  } else if (box_type == MJ2_HMHD) {
-    if (mj2_read_hmhd(tk, cio))
-      return 1;
-  } else {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error in MINF box expected vmhd, smhd or hmhd\n");
-    return 1;
-  }
-       
-  if (mj2_read_dinf(tk, cio))
-    return 1;
-       
-  if (mj2_read_stbl(tk, img, cio))
-    return 1;
-       
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with MINF Box size\n");
-    return 1;
-  }
-  return 0;
+
+    unsigned int box_type;
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);
+    if (MJ2_MINF != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected MINF Marker\n");
+        return 1;
+    }
+
+    cio_skip(cio, 4);
+    box_type = cio_read(cio, 4);
+    cio_skip(cio, -8);
+
+    if (box_type == MJ2_VMHD) {
+        if (mj2_read_vmhd(tk, cio)) {
+            return 1;
+        }
+    } else if (box_type == MJ2_SMHD) {
+        if (mj2_read_smhd(tk, cio)) {
+            return 1;
+        }
+    } else if (box_type == MJ2_HMHD) {
+        if (mj2_read_hmhd(tk, cio)) {
+            return 1;
+        }
+    } else {
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error in MINF box expected vmhd, smhd or hmhd\n");
+        return 1;
+    }
+
+    if (mj2_read_dinf(tk, cio)) {
+        return 1;
+    }
+
+    if (mj2_read_stbl(tk, img, cio)) {
+        return 1;
+    }
+
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with MINF Box size\n");
+        return 1;
+    }
+    return 0;
 }
 
 /*
@@ -1960,57 +2042,58 @@ int mj2_read_minf(mj2_tk_t * tk, opj_image_t * img, opj_cio_t *cio)
 */
 void mj2_write_hdlr(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_HDLR, 4); /* HDLR       */
-       
-  cio_write(cio, 0, 4);                /* Version = 0, flags = 0 */
-       
-  cio_write(cio, 0, 4);                /* Predefine */
-       
-  tk->name = 0;                        /* The track name is immediately determined by the track type */
-       
-  if (tk->track_type == 0) {
-    tk->handler_type = 0x76696465;     /* Handler type: vide */
-    cio_write(cio, tk->handler_type, 4);
-               
-    cio_write(cio, 0, 4);
-    cio_write(cio, 0, 4);
-    cio_write(cio, 0, 4);              /* Reserved */
-               
-    cio_write(cio, 0x76696465, 4);
-    cio_write(cio, 0x6F206d65, 4);
-    cio_write(cio, 0x64696120, 4);
-    cio_write(cio, 0x74726163, 4);
-    cio_write(cio, 0x6b00, 2); /* String: video media track */
-  } else if (tk->track_type == 1) {
-    tk->handler_type = 0x736F756E;     /* Handler type: soun */
-    cio_write(cio, tk->handler_type, 4);
-               
-    cio_write(cio, 0, 4);
-    cio_write(cio, 0, 4);
-    cio_write(cio, 0, 4);              /* Reserved */
-               
-    cio_write(cio, 0x536F756E, 4);
-    cio_write(cio, 0x6400, 2); /* String: Sound */
-  } else if (tk->track_type == 2) {
-    tk->handler_type = 0x68696E74;     /* Handler type: hint */
-    cio_write(cio, tk->handler_type, 4);
-               
-    cio_write(cio, 0, 4);
-    cio_write(cio, 0, 4);
-    cio_write(cio, 0, 4);              /* Reserved */
-               
-    cio_write(cio, 0x48696E74, 4);
-    cio_write(cio, 0, 2);              /* String: Hint */
-  }
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+    mj2_box_t box;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_HDLR, 4);  /* HDLR       */
+
+    cio_write(cio, 0, 4);     /* Version = 0, flags = 0 */
+
+    cio_write(cio, 0, 4);     /* Predefine */
+
+    tk->name =
+        0;         /* The track name is immediately determined by the track type */
+
+    if (tk->track_type == 0) {
+        tk->handler_type = 0x76696465;  /* Handler type: vide */
+        cio_write(cio, tk->handler_type, 4);
+
+        cio_write(cio, 0, 4);
+        cio_write(cio, 0, 4);
+        cio_write(cio, 0, 4);       /* Reserved */
+
+        cio_write(cio, 0x76696465, 4);
+        cio_write(cio, 0x6F206d65, 4);
+        cio_write(cio, 0x64696120, 4);
+        cio_write(cio, 0x74726163, 4);
+        cio_write(cio, 0x6b00, 2);  /* String: video media track */
+    } else if (tk->track_type == 1) {
+        tk->handler_type = 0x736F756E;  /* Handler type: soun */
+        cio_write(cio, tk->handler_type, 4);
+
+        cio_write(cio, 0, 4);
+        cio_write(cio, 0, 4);
+        cio_write(cio, 0, 4);       /* Reserved */
+
+        cio_write(cio, 0x536F756E, 4);
+        cio_write(cio, 0x6400, 2);  /* String: Sound */
+    } else if (tk->track_type == 2) {
+        tk->handler_type = 0x68696E74;  /* Handler type: hint */
+        cio_write(cio, tk->handler_type, 4);
+
+        cio_write(cio, 0, 4);
+        cio_write(cio, 0, 4);
+        cio_write(cio, 0, 4);       /* Reserved */
+
+        cio_write(cio, 0x48696E74, 4);
+        cio_write(cio, 0, 2);       /* String: Hint */
+    }
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -2021,43 +2104,45 @@ void mj2_write_hdlr(mj2_tk_t * tk, opj_cio_t *cio)
 */
 int mj2_read_hdlr(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  int i;
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);
-  if (MJ2_HDLR != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected HDLR Marker\n");
-    return 1;
-  }
-       
-       
-  if (0 != cio_read(cio, 1)) { /* Version = 0 */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in HDLR box\n");
-    return 1;
-  }
-       
-  if (0 != cio_read(cio, 3)) { /* Flags = 0  */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in HDLR box. Expected flag 0\n");
-    return 1;
-  }
-       
-  cio_skip(cio,4);                     /* Reserved */
-       
-  tk->handler_type = cio_read(cio, 4);
-  cio_skip(cio,12);                    /* Reserved */
-       
-  tk->name_size = box.length - 32;
-
-  tk->name = (char*) opj_malloc(tk->name_size * sizeof(char));
-  for (i = 0; i < tk->name_size; i++) {
-    tk->name[i] = cio_read(cio, 1);    /* Name */
-  }
-       
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with HDLR Box size\n");
-    return 1;
-  }
-  return 0;
+    int i;
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);
+    if (MJ2_HDLR != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected HDLR Marker\n");
+        return 1;
+    }
+
+
+    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error: Only Version 0 handled in HDLR box\n");
+        return 1;
+    }
+
+    if (0 != cio_read(cio, 3)) {  /* Flags = 0  */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error with flag in HDLR box. Expected flag 0\n");
+        return 1;
+    }
+
+    cio_skip(cio, 4);         /* Reserved */
+
+    tk->handler_type = cio_read(cio, 4);
+    cio_skip(cio, 12);        /* Reserved */
+
+    tk->name_size = box.length - 32;
+
+    tk->name = (char*) opj_malloc(tk->name_size * sizeof(char));
+    for (i = 0; i < tk->name_size; i++) {
+        tk->name[i] = cio_read(cio, 1); /* Name */
+    }
+
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with HDLR Box size\n");
+        return 1;
+    }
+    return 0;
 }
 
 /*
@@ -2068,41 +2153,43 @@ int mj2_read_hdlr(mj2_tk_t * tk, opj_cio_t *cio)
 */
 void mj2_write_mdhd(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  mj2_box_t box;
-  unsigned int i;
-  time_t ltime;
-  unsigned int modification_time;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_MDHD, 4); /* MDHD       */
-       
-  cio_write(cio, 0, 4);                /* Version = 0, flags = 0 */
-       
-  cio_write(cio, tk->creation_time, 4);        /* Creation Time */
-       
-  time(&ltime);                        /* Time since 1/1/70 */
-  modification_time = (unsigned int)ltime + 2082844800;        /* Seoonds between 1/1/04 and 1/1/70 */
-       
-  cio_write(cio, modification_time, 4);        /* Modification Time */
-       
-  cio_write(cio, tk->timescale, 4);    /* Timescale */
-       
-  tk->duration = 0;
-       
-  for (i = 0; i < tk->num_samples; i++)
-    tk->duration += tk->sample[i].sample_delta;
-       
-  cio_write(cio, tk->duration, 4);     /* Duration */
-       
-  cio_write(cio, tk->language, 2);     /* Language */
-       
-  cio_write(cio, 0, 2);                /* Predefined */
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+    mj2_box_t box;
+    unsigned int i;
+    time_t ltime;
+    unsigned int modification_time;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_MDHD, 4);  /* MDHD       */
+
+    cio_write(cio, 0, 4);     /* Version = 0, flags = 0 */
+
+    cio_write(cio, tk->creation_time, 4); /* Creation Time */
+
+    time(&ltime);         /* Time since 1/1/70 */
+    modification_time = (unsigned int)ltime +
+                        2082844800; /* Seoonds between 1/1/04 and 1/1/70 */
+
+    cio_write(cio, modification_time, 4); /* Modification Time */
+
+    cio_write(cio, tk->timescale, 4); /* Timescale */
+
+    tk->duration = 0;
+
+    for (i = 0; i < tk->num_samples; i++) {
+        tk->duration += tk->sample[i].sample_delta;
+    }
+
+    cio_write(cio, tk->duration, 4);  /* Duration */
+
+    cio_write(cio, tk->language, 2);  /* Language */
+
+    cio_write(cio, 0, 2);     /* Predefined */
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -2113,42 +2200,45 @@ void mj2_write_mdhd(mj2_tk_t * tk, opj_cio_t *cio)
 */
 int mj2_read_mdhd(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);
-  if (!(MJ2_MHDR == box.type || MJ2_MDHD == box.type)) {       /* Kakadu writes MHDR instead of MDHD*/
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected MDHD Marker\n");
-    return 1;
-  }
-       
-  if (0 != cio_read(cio, 1)) { /* Version = 0 */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in MDHD box\n");
-    return 1;
-  }
-       
-  if (0 != cio_read(cio, 3)) { /* Flags = 0 */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with flag in MDHD box. Expected flag 0\n");
-    return 1;
-  }
-       
-       
-  tk->creation_time = cio_read(cio, 4);        /* Creation Time */
-       
-  tk->modification_time = cio_read(cio, 4);    /* Modification Time */
-       
-  tk->timescale = cio_read(cio, 4);    /* Timescale */
-       
-  tk->duration = cio_read(cio, 4);     /* Duration */
-       
-  tk->language = cio_read(cio, 2);     /* Language */
-       
-  cio_skip(cio,2);                     /* Predefined */
-       
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with MDHD Box size\n");
-    return 1;
-  }
-  return 0;
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);
+    if (!(MJ2_MHDR == box.type ||
+            MJ2_MDHD == box.type)) {    /* Kakadu writes MHDR instead of MDHD*/
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected MDHD Marker\n");
+        return 1;
+    }
+
+    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error: Only Version 0 handled in MDHD box\n");
+        return 1;
+    }
+
+    if (0 != cio_read(cio, 3)) {  /* Flags = 0 */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error with flag in MDHD box. Expected flag 0\n");
+        return 1;
+    }
+
+
+    tk->creation_time = cio_read(cio, 4); /* Creation Time */
+
+    tk->modification_time = cio_read(cio, 4); /* Modification Time */
+
+    tk->timescale = cio_read(cio, 4); /* Timescale */
+
+    tk->duration = cio_read(cio, 4);  /* Duration */
+
+    tk->language = cio_read(cio, 2);  /* Language */
+
+    cio_skip(cio, 2);         /* Predefined */
+
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with MDHD Box size\n");
+        return 1;
+    }
+    return 0;
 }
 
 /*
@@ -2159,20 +2249,20 @@ int mj2_read_mdhd(mj2_tk_t * tk, opj_cio_t *cio)
 */
 void mj2_write_mdia(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_MDIA, 4); /* MDIA       */
-       
-  mj2_write_mdhd(tk, cio);
-  mj2_write_hdlr(tk, cio);
-  mj2_write_minf(tk, cio);
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+    mj2_box_t box;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_MDIA, 4);  /* MDIA       */
+
+    mj2_write_mdhd(tk, cio);
+    mj2_write_hdlr(tk, cio);
+    mj2_write_minf(tk, cio);
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -2183,26 +2273,29 @@ void mj2_write_mdia(mj2_tk_t * tk, opj_cio_t *cio)
 */
 int mj2_read_mdia(mj2_tk_t * tk, opj_image_t * img, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);
-  if (MJ2_MDIA != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected MDIA Marker\n");
-    return 1;
-  }
-       
-  if (mj2_read_mdhd(tk, cio))
-    return 1;
-  if (mj2_read_hdlr(tk, cio))
-    return 1;
-  if (mj2_read_minf(tk, img, cio))
-    return 1;
-       
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with MDIA Box size\n");
-    return 1;
-  }
-  return 0;
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);
+    if (MJ2_MDIA != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected MDIA Marker\n");
+        return 1;
+    }
+
+    if (mj2_read_mdhd(tk, cio)) {
+        return 1;
+    }
+    if (mj2_read_hdlr(tk, cio)) {
+        return 1;
+    }
+    if (mj2_read_minf(tk, img, cio)) {
+        return 1;
+    }
+
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with MDIA Box size\n");
+        return 1;
+    }
+    return 0;
 }
 
 /*
@@ -2213,64 +2306,66 @@ int mj2_read_mdia(mj2_tk_t * tk, opj_image_t * img, opj_cio_t *cio)
 */
 void mj2_write_tkhd(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  mj2_box_t box;
-  unsigned int i;
-  time_t ltime;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-       
-  cio_write(cio, MJ2_TKHD, 4); /* TKHD       */
-       
-  cio_write(cio, 3, 4);                /* Version=0, flags=3 */
-       
-  time(&ltime);                        /* Time since 1/1/70 */
-  tk->modification_time = (unsigned int)ltime + 2082844800;    /* Seoonds between 1/1/04 and 1/1/70 */
-       
-  cio_write(cio, tk->creation_time, 4);        /* Creation Time */
-       
-  cio_write(cio, tk->modification_time, 4);    /* Modification Time */
-       
-  cio_write(cio, tk->track_ID, 4);     /* Track ID */
-       
-  cio_write(cio, 0, 4);                /* Reserved */
-       
-  tk->duration = 0;
-       
-  for (i = 0; i < tk->num_samples; i++)
-    tk->duration += tk->sample[i].sample_delta;
-       
-  cio_write(cio, tk->duration, 4);     /* Duration */
-       
-  cio_write(cio, 0, 4);                /* Reserved */
-  cio_write(cio, 0, 4);                /* Reserved */
-       
-  cio_write(cio, tk->layer, 2);        /* Layer    */
-       
-  cio_write(cio, 0, 2);                /* Predefined */
-       
-  cio_write(cio, tk->volume, 2);       /* Volume       */
-       
-  cio_write(cio, 0, 2);                /* Reserved */
-       
-  cio_write(cio, tk->trans_matrix[0], 4);      /* Transformation matrix for track */
-  cio_write(cio, tk->trans_matrix[1], 4);
-  cio_write(cio, tk->trans_matrix[2], 4);
-  cio_write(cio, tk->trans_matrix[3], 4);
-  cio_write(cio, tk->trans_matrix[4], 4);
-  cio_write(cio, tk->trans_matrix[5], 4);
-  cio_write(cio, tk->trans_matrix[6], 4);
-  cio_write(cio, tk->trans_matrix[7], 4);
-  cio_write(cio, tk->trans_matrix[8], 4);
-       
-  cio_write(cio, tk->visual_w, 4);     /* Video Visual Width  */
-       
-  cio_write(cio, tk->visual_h, 4);     /* Video Visual Height */
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+    mj2_box_t box;
+    unsigned int i;
+    time_t ltime;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+
+    cio_write(cio, MJ2_TKHD, 4);  /* TKHD       */
+
+    cio_write(cio, 3, 4);     /* Version=0, flags=3 */
+
+    time(&ltime);         /* Time since 1/1/70 */
+    tk->modification_time = (unsigned int)ltime +
+                            2082844800; /* Seoonds between 1/1/04 and 1/1/70 */
+
+    cio_write(cio, tk->creation_time, 4); /* Creation Time */
+
+    cio_write(cio, tk->modification_time, 4); /* Modification Time */
+
+    cio_write(cio, tk->track_ID, 4);  /* Track ID */
+
+    cio_write(cio, 0, 4);     /* Reserved */
+
+    tk->duration = 0;
+
+    for (i = 0; i < tk->num_samples; i++) {
+        tk->duration += tk->sample[i].sample_delta;
+    }
+
+    cio_write(cio, tk->duration, 4);  /* Duration */
+
+    cio_write(cio, 0, 4);     /* Reserved */
+    cio_write(cio, 0, 4);     /* Reserved */
+
+    cio_write(cio, tk->layer, 2); /* Layer    */
+
+    cio_write(cio, 0, 2);     /* Predefined */
+
+    cio_write(cio, tk->volume, 2);    /* Volume       */
+
+    cio_write(cio, 0, 2);     /* Reserved */
+
+    cio_write(cio, tk->trans_matrix[0], 4);   /* Transformation matrix for track */
+    cio_write(cio, tk->trans_matrix[1], 4);
+    cio_write(cio, tk->trans_matrix[2], 4);
+    cio_write(cio, tk->trans_matrix[3], 4);
+    cio_write(cio, tk->trans_matrix[4], 4);
+    cio_write(cio, tk->trans_matrix[5], 4);
+    cio_write(cio, tk->trans_matrix[6], 4);
+    cio_write(cio, tk->trans_matrix[7], 4);
+    cio_write(cio, tk->trans_matrix[8], 4);
+
+    cio_write(cio, tk->visual_w, 4);  /* Video Visual Width  */
+
+    cio_write(cio, tk->visual_h, 4);  /* Video Visual Height */
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -2281,69 +2376,71 @@ void mj2_write_tkhd(mj2_tk_t * tk, opj_cio_t *cio)
 */
 int mj2_read_tkhd(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  int flag;
-       
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);
-       
-  if (MJ2_TKHD != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected TKHD Marker\n");
-    return 1;
-  }
-       
-  if (0 != cio_read(cio, 1)) { /* Version = 0 */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in TKHD box\n");
-    return 1;
-  }
-       
-  flag = cio_read(cio, 3);
-       
-  if (!(flag == 1 || flag == 2 || flag == 3 || flag == 4)) {   /* Flags = 1,2,3 or 4 */
-    opj_event_msg(cio->cinfo, EVT_ERROR,
-                       "Error with flag in TKHD box: Expected flag 1,2,3 or 4\n");
-    return 1;
-  }
-       
-  tk->creation_time = cio_read(cio, 4);        /* Creation Time */
-       
-  tk->modification_time = cio_read(cio, 4);    /* Modification Time */
-       
-  tk->track_ID = cio_read(cio, 4);     /* Track ID */
-       
-  cio_skip(cio,4);                     /* Reserved */
-       
-  tk->duration = cio_read(cio, 4);     /* Duration */
-       
-  cio_skip(cio,8);                     /* Reserved */
-       
-  tk->layer = cio_read(cio, 2);        /* Layer    */
-       
-  cio_read(cio, 2);                    /* Predefined */
-       
-  tk->volume = cio_read(cio, 2);       /* Volume       */
-       
-  cio_skip(cio,2);                     /* Reserved */
-       
-  tk->trans_matrix[0] = cio_read(cio, 4);      /* Transformation matrix for track */
-  tk->trans_matrix[1] = cio_read(cio, 4);
-  tk->trans_matrix[2] = cio_read(cio, 4);
-  tk->trans_matrix[3] = cio_read(cio, 4);
-  tk->trans_matrix[4] = cio_read(cio, 4);
-  tk->trans_matrix[5] = cio_read(cio, 4);
-  tk->trans_matrix[6] = cio_read(cio, 4);
-  tk->trans_matrix[7] = cio_read(cio, 4);
-  tk->trans_matrix[8] = cio_read(cio, 4);
-       
-  tk->visual_w = cio_read(cio, 4);     /* Video Visual Width  */
-       
-  tk->visual_h = cio_read(cio, 4);     /* Video Visual Height */
-       
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with TKHD Box size\n");
-    return 1;
-  }
-  return 0;
+    int flag;
+
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);
+
+    if (MJ2_TKHD != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected TKHD Marker\n");
+        return 1;
+    }
+
+    if (0 != cio_read(cio, 1)) {  /* Version = 0 */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error: Only Version 0 handled in TKHD box\n");
+        return 1;
+    }
+
+    flag = cio_read(cio, 3);
+
+    if (!(flag == 1 || flag == 2 || flag == 3 ||
+            flag == 4)) {    /* Flags = 1,2,3 or 4 */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error with flag in TKHD box: Expected flag 1,2,3 or 4\n");
+        return 1;
+    }
+
+    tk->creation_time = cio_read(cio, 4); /* Creation Time */
+
+    tk->modification_time = cio_read(cio, 4); /* Modification Time */
+
+    tk->track_ID = cio_read(cio, 4);  /* Track ID */
+
+    cio_skip(cio, 4);         /* Reserved */
+
+    tk->duration = cio_read(cio, 4);  /* Duration */
+
+    cio_skip(cio, 8);         /* Reserved */
+
+    tk->layer = cio_read(cio, 2); /* Layer    */
+
+    cio_read(cio, 2);         /* Predefined */
+
+    tk->volume = cio_read(cio, 2);    /* Volume       */
+
+    cio_skip(cio, 2);         /* Reserved */
+
+    tk->trans_matrix[0] = cio_read(cio, 4);   /* Transformation matrix for track */
+    tk->trans_matrix[1] = cio_read(cio, 4);
+    tk->trans_matrix[2] = cio_read(cio, 4);
+    tk->trans_matrix[3] = cio_read(cio, 4);
+    tk->trans_matrix[4] = cio_read(cio, 4);
+    tk->trans_matrix[5] = cio_read(cio, 4);
+    tk->trans_matrix[6] = cio_read(cio, 4);
+    tk->trans_matrix[7] = cio_read(cio, 4);
+    tk->trans_matrix[8] = cio_read(cio, 4);
+
+    tk->visual_w = cio_read(cio, 4);  /* Video Visual Width  */
+
+    tk->visual_h = cio_read(cio, 4);  /* Video Visual Height */
+
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with TKHD Box size\n");
+        return 1;
+    }
+    return 0;
 }
 
 /*
@@ -2354,20 +2451,20 @@ int mj2_read_tkhd(mj2_tk_t * tk, opj_cio_t *cio)
 */
 void mj2_write_trak(mj2_tk_t * tk, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-       
-  cio_write(cio, MJ2_TRAK, 4); /* TRAK       */
-       
-  mj2_write_tkhd(tk, cio);
-  mj2_write_mdia(tk, cio);
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+    mj2_box_t box;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+
+    cio_write(cio, MJ2_TRAK, 4);  /* TRAK       */
+
+    mj2_write_tkhd(tk, cio);
+    mj2_write_mdia(tk, cio);
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -2378,22 +2475,24 @@ void mj2_write_trak(mj2_tk_t * tk, opj_cio_t *cio)
 */
 int mj2_read_trak(mj2_tk_t * tk, opj_image_t * img, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);
-  if (MJ2_TRAK != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected TRAK Marker\n");
-    return 1;
-  }
-  if (mj2_read_tkhd(tk, cio))
-    return 1;
-  if (mj2_read_mdia(tk, img, cio))
-    return 1;
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with TRAK Box\n");
-    return 1;
-  }
-  return 0;
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);
+    if (MJ2_TRAK != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected TRAK Marker\n");
+        return 1;
+    }
+    if (mj2_read_tkhd(tk, cio)) {
+        return 1;
+    }
+    if (mj2_read_mdia(tk, img, cio)) {
+        return 1;
+    }
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with TRAK Box\n");
+        return 1;
+    }
+    return 0;
 }
 
 /*
@@ -2404,78 +2503,81 @@ int mj2_read_trak(mj2_tk_t * tk, opj_image_t * img, opj_cio_t *cio)
 */
 void mj2_write_mvhd(opj_mj2_t * movie, opj_cio_t *cio)
 {
-  int i;
-  mj2_box_t box;
-  unsigned j;
-  time_t ltime;
-  int max_tk_num = 0;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_MVHD, 4); /* MVHD       */
-       
-  cio_write(cio, 0, 4);                /* Version = 0, flags = 0 */
-       
-  time(&ltime);                        /* Time since 1/1/70 */
-  movie->modification_time = (unsigned int)ltime + 2082844800; /* Seoonds between 1/1/04 and 1/1/70 */
-       
-  cio_write(cio, movie->creation_time, 4);     /* Creation Time */
-       
-  cio_write(cio, movie->modification_time, 4); /* Modification Time */
-       
-  cio_write(cio, movie->timescale, 4); /* Timescale */
-       
-  movie->duration = 0;
-       
-  for (i = 0; i < (movie->num_stk + movie->num_htk + movie->num_vtk); i++) {
-    mj2_tk_t *tk = &movie->tk[i];
-               
-    for (j = 0; j < tk->num_samples; j++) {
-      movie->duration += tk->sample[j].sample_delta;
-    }
-  }
-       
-  cio_write(cio, movie->duration, 4);
-       
-  cio_write(cio, movie->rate, 4);      /* Rate to play presentation    */
-       
-  cio_write(cio, movie->volume, 2);    /* Volume       */
-       
-  cio_write(cio, 0, 2);                /* Reserved */
-  cio_write(cio, 0, 4);                /* Reserved */
-  cio_write(cio, 0, 4);                /* Reserved */
-       
-  cio_write(cio, movie->trans_matrix[0], 4);   /* Transformation matrix for video */
-  cio_write(cio, movie->trans_matrix[1], 4);
-  cio_write(cio, movie->trans_matrix[2], 4);
-  cio_write(cio, movie->trans_matrix[3], 4);
-  cio_write(cio, movie->trans_matrix[4], 4);
-  cio_write(cio, movie->trans_matrix[5], 4);
-  cio_write(cio, movie->trans_matrix[6], 4);
-  cio_write(cio, movie->trans_matrix[7], 4);
-  cio_write(cio, movie->trans_matrix[8], 4);
-       
-  cio_write(cio, 0, 4);                /* Pre-defined */
-  cio_write(cio, 0, 4);                /* Pre-defined */
-  cio_write(cio, 0, 4);                /* Pre-defined */
-  cio_write(cio, 0, 4);                /* Pre-defined */
-  cio_write(cio, 0, 4);                /* Pre-defined */
-  cio_write(cio, 0, 4);                /* Pre-defined */
-       
-       
-  for (i = 0; i < movie->num_htk + movie->num_stk + movie->num_vtk; i++) {
-    if (max_tk_num < movie->tk[i].track_ID)
-      max_tk_num = movie->tk[i].track_ID;
-  }
-       
-  movie->next_tk_id = max_tk_num + 1;
-       
-  cio_write(cio, movie->next_tk_id, 4);        /* ID of Next track to be added */
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);
+    int i;
+    mj2_box_t box;
+    unsigned j;
+    time_t ltime;
+    int max_tk_num = 0;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_MVHD, 4);  /* MVHD       */
+
+    cio_write(cio, 0, 4);     /* Version = 0, flags = 0 */
+
+    time(&ltime);         /* Time since 1/1/70 */
+    movie->modification_time = (unsigned int)ltime +
+                               2082844800;  /* Seoonds between 1/1/04 and 1/1/70 */
+
+    cio_write(cio, movie->creation_time, 4);  /* Creation Time */
+
+    cio_write(cio, movie->modification_time, 4);  /* Modification Time */
+
+    cio_write(cio, movie->timescale, 4);  /* Timescale */
+
+    movie->duration = 0;
+
+    for (i = 0; i < (movie->num_stk + movie->num_htk + movie->num_vtk); i++) {
+        mj2_tk_t *tk = &movie->tk[i];
+
+        for (j = 0; j < tk->num_samples; j++) {
+            movie->duration += tk->sample[j].sample_delta;
+        }
+    }
+
+    cio_write(cio, movie->duration, 4);
+
+    cio_write(cio, movie->rate, 4);   /* Rate to play presentation    */
+
+    cio_write(cio, movie->volume, 2); /* Volume       */
+
+    cio_write(cio, 0, 2);     /* Reserved */
+    cio_write(cio, 0, 4);     /* Reserved */
+    cio_write(cio, 0, 4);     /* Reserved */
+
+    cio_write(cio, movie->trans_matrix[0],
+              4);    /* Transformation matrix for video */
+    cio_write(cio, movie->trans_matrix[1], 4);
+    cio_write(cio, movie->trans_matrix[2], 4);
+    cio_write(cio, movie->trans_matrix[3], 4);
+    cio_write(cio, movie->trans_matrix[4], 4);
+    cio_write(cio, movie->trans_matrix[5], 4);
+    cio_write(cio, movie->trans_matrix[6], 4);
+    cio_write(cio, movie->trans_matrix[7], 4);
+    cio_write(cio, movie->trans_matrix[8], 4);
+
+    cio_write(cio, 0, 4);     /* Pre-defined */
+    cio_write(cio, 0, 4);     /* Pre-defined */
+    cio_write(cio, 0, 4);     /* Pre-defined */
+    cio_write(cio, 0, 4);     /* Pre-defined */
+    cio_write(cio, 0, 4);     /* Pre-defined */
+    cio_write(cio, 0, 4);     /* Pre-defined */
+
+
+    for (i = 0; i < movie->num_htk + movie->num_stk + movie->num_vtk; i++) {
+        if (max_tk_num < movie->tk[i].track_ID) {
+            max_tk_num = movie->tk[i].track_ID;
+        }
+    }
+
+    movie->next_tk_id = max_tk_num + 1;
+
+    cio_write(cio, movie->next_tk_id, 4); /* ID of Next track to be added */
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -2486,52 +2588,54 @@ void mj2_write_mvhd(opj_mj2_t * movie, opj_cio_t *cio)
 */
 int mj2_read_mvhd(opj_mj2_t * movie, opj_cio_t *cio)
 {
-  mj2_box_t box;
-       
-  mj2_read_boxhdr(&box, cio);
-  if (MJ2_MVHD != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected MVHD Marker\n");
-    return 1;
-  }
-       
-       
-  if (0 != cio_read(cio, 4)) { /* Version = 0, flags = 0 */
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Only Version 0 handled in MVHD box\n");
-  }
-       
-  movie->creation_time = cio_read(cio, 4);     /* Creation Time */
-       
-  movie->modification_time = cio_read(cio, 4); /* Modification Time */
-       
-  movie->timescale = cio_read(cio, 4); /* Timescale */
-       
-  movie->duration = cio_read(cio, 4);  /* Duration */
-       
-  movie->rate = cio_read(cio, 4);              /* Rate to play presentation    */
-       
-  movie->volume = cio_read(cio, 2);            /* Volume       */
-       
-  cio_skip(cio,10);                            /* Reserved */
-       
-  movie->trans_matrix[0] = cio_read(cio, 4);   /* Transformation matrix for video */
-  movie->trans_matrix[1] = cio_read(cio, 4);
-  movie->trans_matrix[2] = cio_read(cio, 4);
-  movie->trans_matrix[3] = cio_read(cio, 4);
-  movie->trans_matrix[4] = cio_read(cio, 4);
-  movie->trans_matrix[5] = cio_read(cio, 4);
-  movie->trans_matrix[6] = cio_read(cio, 4);
-  movie->trans_matrix[7] = cio_read(cio, 4);
-  movie->trans_matrix[8] = cio_read(cio, 4);
-       
-  cio_skip(cio,24);                    /* Pre-defined */
-       
-  movie->next_tk_id = cio_read(cio, 4);        /* ID of Next track to be added */
-       
-  if (cio_tell(cio) - box.init_pos != box.length) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error with MVHD Box Size\n");
-    return 1;
-  }
-  return 0;
+    mj2_box_t box;
+
+    mj2_read_boxhdr(&box, cio);
+    if (MJ2_MVHD != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected MVHD Marker\n");
+        return 1;
+    }
+
+
+    if (0 != cio_read(cio, 4)) {  /* Version = 0, flags = 0 */
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "Error: Only Version 0 handled in MVHD box\n");
+    }
+
+    movie->creation_time = cio_read(cio, 4);  /* Creation Time */
+
+    movie->modification_time = cio_read(cio, 4);  /* Modification Time */
+
+    movie->timescale = cio_read(cio, 4);  /* Timescale */
+
+    movie->duration = cio_read(cio, 4);   /* Duration */
+
+    movie->rate = cio_read(cio, 4);       /* Rate to play presentation    */
+
+    movie->volume = cio_read(cio, 2);     /* Volume       */
+
+    cio_skip(cio, 10);            /* Reserved */
+
+    movie->trans_matrix[0] = cio_read(cio,
+                                      4);    /* Transformation matrix for video */
+    movie->trans_matrix[1] = cio_read(cio, 4);
+    movie->trans_matrix[2] = cio_read(cio, 4);
+    movie->trans_matrix[3] = cio_read(cio, 4);
+    movie->trans_matrix[4] = cio_read(cio, 4);
+    movie->trans_matrix[5] = cio_read(cio, 4);
+    movie->trans_matrix[6] = cio_read(cio, 4);
+    movie->trans_matrix[7] = cio_read(cio, 4);
+    movie->trans_matrix[8] = cio_read(cio, 4);
+
+    cio_skip(cio, 24);        /* Pre-defined */
+
+    movie->next_tk_id = cio_read(cio, 4); /* ID of Next track to be added */
+
+    if (cio_tell(cio) - box.init_pos != box.length) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error with MVHD Box Size\n");
+        return 1;
+    }
+    return 0;
 }
 
 
@@ -2543,23 +2647,23 @@ int mj2_read_mvhd(opj_mj2_t * movie, opj_cio_t *cio)
 */
 void OPJ_CALLCONV mj2_write_moov(opj_mj2_t * movie, opj_cio_t *cio)
 {
-  int i;
-  mj2_box_t box;
-       
-  box.init_pos = cio_tell(cio);
-  cio_skip(cio,4);
-  cio_write(cio, MJ2_MOOV, 4); /* MOOV       */
-       
-  mj2_write_mvhd(movie, cio);
-       
-  for (i = 0; i < (movie->num_stk + movie->num_htk + movie->num_vtk); i++) {
-    mj2_write_trak(&movie->tk[i], cio);
-  }
-       
-  box.length = cio_tell(cio) - box.init_pos;
-  cio_seek(cio, box.init_pos);
-  cio_write(cio, box.length, 4);       /* L          */
-  cio_seek(cio, box.init_pos + box.length);    
+    int i;
+    mj2_box_t box;
+
+    box.init_pos = cio_tell(cio);
+    cio_skip(cio, 4);
+    cio_write(cio, MJ2_MOOV, 4);  /* MOOV       */
+
+    mj2_write_mvhd(movie, cio);
+
+    for (i = 0; i < (movie->num_stk + movie->num_htk + movie->num_vtk); i++) {
+        mj2_write_trak(&movie->tk[i], cio);
+    }
+
+    box.length = cio_tell(cio) - box.init_pos;
+    cio_seek(cio, box.init_pos);
+    cio_write(cio, box.length, 4);    /* L          */
+    cio_seek(cio, box.init_pos + box.length);
 }
 
 /*
@@ -2570,352 +2674,405 @@ void OPJ_CALLCONV mj2_write_moov(opj_mj2_t * movie, opj_cio_t *cio)
 */
 int mj2_read_moov(opj_mj2_t * movie, opj_image_t * img, opj_cio_t *cio)
 {
-  unsigned int i;
-  mj2_box_t box;
-  mj2_box_t box2;
-       
-  mj2_read_boxhdr(&box, cio);
-  if (MJ2_MOOV != box.type) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected MOOV Marker\n");
-    return 1;
-  }
-       
-  if (mj2_read_mvhd(movie, cio))
-    return 1;
-
-  movie->tk = (mj2_tk_t*) opj_malloc((movie->next_tk_id - 1) * sizeof(mj2_tk_t));
-
-  for (i = 0; cio_tell(cio) - box.init_pos < box.length; i++) {
-               mj2_tk_t *tk = &movie->tk[i];
-               tk->cinfo = movie->cinfo;
-    mj2_read_boxhdr(&box2, cio);
-    if (box2.type == MJ2_TRAK) {
-      cio_seek(cio, box2.init_pos);
-      if (mj2_read_trak(tk, img, cio))
-                               return 1;
-                       
-      if (tk->track_type == 0) {
-                               movie->num_vtk++;
-      } else if (tk->track_type == 1) {
-                               movie->num_stk++;
-      } else if (tk->track_type == 2) {
-                               movie->num_htk++;
-      }
-    } else if (box2.type == MJ2_MVEX) {
-      cio_seek(cio, box2.init_pos);
-      cio_skip(cio,box2.length);
-      i--;
-    } else {
-      opj_event_msg(cio->cinfo, EVT_ERROR, "Error with MOOV Box: Expected TRAK or MVEX box\n");
-      return 1;
+    unsigned int i;
+    mj2_box_t box;
+    mj2_box_t box2;
+
+    mj2_read_boxhdr(&box, cio);
+    if (MJ2_MOOV != box.type) {
+        opj_event_msg(cio->cinfo, EVT_ERROR, "Error: Expected MOOV Marker\n");
+        return 1;
+    }
+
+    if (mj2_read_mvhd(movie, cio)) {
+        return 1;
+    }
+
+    movie->tk = (mj2_tk_t*) opj_malloc((movie->next_tk_id - 1) * sizeof(mj2_tk_t));
+
+    for (i = 0; cio_tell(cio) - box.init_pos < box.length; i++) {
+        mj2_tk_t *tk = &movie->tk[i];
+        tk->cinfo = movie->cinfo;
+        mj2_read_boxhdr(&box2, cio);
+        if (box2.type == MJ2_TRAK) {
+            cio_seek(cio, box2.init_pos);
+            if (mj2_read_trak(tk, img, cio)) {
+                return 1;
+            }
+
+            if (tk->track_type == 0) {
+                movie->num_vtk++;
+            } else if (tk->track_type == 1) {
+                movie->num_stk++;
+            } else if (tk->track_type == 2) {
+                movie->num_htk++;
+            }
+        } else if (box2.type == MJ2_MVEX) {
+            cio_seek(cio, box2.init_pos);
+            cio_skip(cio, box2.length);
+            i--;
+        } else {
+            opj_event_msg(cio->cinfo, EVT_ERROR,
+                          "Error with MOOV Box: Expected TRAK or MVEX box\n");
+            return 1;
+        }
     }
-  }
-  return 0;
+    return 0;
 }
 
-int OPJ_CALLCONV mj2_read_struct(FILE *file, opj_mj2_t *movie) {
-  mj2_box_t box;
-  opj_image_t img;
-  unsigned char * src;
-  int fsresult;
-  int foffset;
-       opj_cio_t *cio;
-       
-       /* open a byte stream for reading */    
-       src = (unsigned char*) opj_malloc(300 * sizeof(unsigned char)); 
+int OPJ_CALLCONV mj2_read_struct(FILE *file, opj_mj2_t *movie)
+{
+    mj2_box_t box;
+    opj_image_t img;
+    unsigned char * src;
+    int fsresult;
+    int foffset;
+    opj_cio_t *cio;
 
-       /* Assuming that jp and ftyp markers size do
+    /* open a byte stream for reading */
+    src = (unsigned char*) opj_malloc(300 * sizeof(unsigned char));
+
+    /* Assuming that jp and ftyp markers size do
      not exceed 300 bytes */
-  fread(src,300,1, file);  
-  
-  cio = opj_cio_open((opj_common_ptr)movie->cinfo, src, 300);
-  
-  if (mj2_read_jp(cio))
-    return 1;
-  if (mj2_read_ftyp(movie, cio))
-    return 1;
-       
-  fsresult = fseek(file,cio_tell(cio),SEEK_SET);
-  if( fsresult ) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "End of file reached while trying to read data after FTYP box\n" );
-    return 1;
-  }
-       
-  foffset = cio_tell(cio);
-  
-  box.type = 0;
-  
-  fread(src,30,1,file);
-  cio = opj_cio_open((opj_common_ptr)movie->cinfo, src, 300);
-  mj2_read_boxhdr(&box, cio);
-  
-  while(box.type != MJ2_MOOV) {
-    
-    switch(box.type)
-    {
-    case MJ2_MDAT:
-      fsresult = fseek(file,foffset+box.length,SEEK_SET);
-      if( fsresult ) {
-                               opj_event_msg(cio->cinfo, EVT_ERROR, "End of file reached while trying to read MDAT box\n" );
-                               return 1;
-      }
-      foffset += box.length;
-      break;
-      
-    case MJ2_MOOF:
-      fsresult = fseek(file,foffset+box.length,SEEK_SET);
-      if( fsresult ) {
-                               opj_event_msg(cio->cinfo, EVT_ERROR, "End of file reached while trying to read MOOF box\n" );
-                               return 1;
-      }
-      foffset += box.length;
-      break;      
-    case MJ2_FREE:
-      fsresult = fseek(file,foffset+box.length,SEEK_SET);
-      if( fsresult ) {
-                               opj_event_msg(cio->cinfo, EVT_ERROR, "End of file reached while trying to read FREE box\n" );
-                               return 1;
-      }
-      foffset += box.length;
-      break;      
-    case MJ2_SKIP:
-      fsresult = fseek(file,foffset+box.length,SEEK_SET);
-      if( fsresult ) {
-                               opj_event_msg(cio->cinfo, EVT_ERROR, "End of file reached while trying to read SKIP box\n" );
-                               return 1;
-      }
-      foffset += box.length;
-      break;      
-    default:
-      opj_event_msg(cio->cinfo, EVT_ERROR, "Unknown box in MJ2 stream\n");
-      fsresult = fseek(file,foffset+box.length,SEEK_SET);
-      if( fsresult ) {
-                               opj_event_msg(cio->cinfo, EVT_ERROR, "End of file reached while trying to read end of unknown box\n"); 
-                               return 1;
-      }      
-      foffset += box.length;
-      break;
-    }
-    fsresult = fread(src,8,1,file);
-    if (fsresult != 1) {
-      opj_event_msg(cio->cinfo, EVT_ERROR, "MOOV box not found in file\n"); 
-      return 1;
+    fread(src, 300, 1, file);
+
+    cio = opj_cio_open((opj_common_ptr)movie->cinfo, src, 300);
+
+    if (mj2_read_jp(cio)) {
+        return 1;
+    }
+    if (mj2_read_ftyp(movie, cio)) {
+        return 1;
+    }
+
+    fsresult = fseek(file, cio_tell(cio), SEEK_SET);
+    if (fsresult) {
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "End of file reached while trying to read data after FTYP box\n");
+        return 1;
     }
-               cio = opj_cio_open((opj_common_ptr)movie->cinfo, src, 8);               
+
+    foffset = cio_tell(cio);
+
+    box.type = 0;
+
+    fread(src, 30, 1, file);
+    cio = opj_cio_open((opj_common_ptr)movie->cinfo, src, 300);
     mj2_read_boxhdr(&box, cio);
-  }    
 
-  fseek(file,foffset,SEEK_SET);
-  src = (unsigned char*)opj_realloc(src,box.length);
-  fsresult = fread(src,box.length,1,file);
-  if (fsresult != 1) {
-    opj_event_msg(cio->cinfo, EVT_ERROR, "End of file reached while trying to read MOOV box\n"); 
-    return 1;
-  }
-       
-       cio = opj_cio_open((opj_common_ptr)movie->cinfo, src, box.length);
-  
-  if (mj2_read_moov(movie, &img, cio))
-    return 1;
+    while (box.type != MJ2_MOOV) {
+
+        switch (box.type) {
+        case MJ2_MDAT:
+            fsresult = fseek(file, foffset + box.length, SEEK_SET);
+            if (fsresult) {
+                opj_event_msg(cio->cinfo, EVT_ERROR,
+                              "End of file reached while trying to read MDAT box\n");
+                return 1;
+            }
+            foffset += box.length;
+            break;
+
+        case MJ2_MOOF:
+            fsresult = fseek(file, foffset + box.length, SEEK_SET);
+            if (fsresult) {
+                opj_event_msg(cio->cinfo, EVT_ERROR,
+                              "End of file reached while trying to read MOOF box\n");
+                return 1;
+            }
+            foffset += box.length;
+            break;
+        case MJ2_FREE:
+            fsresult = fseek(file, foffset + box.length, SEEK_SET);
+            if (fsresult) {
+                opj_event_msg(cio->cinfo, EVT_ERROR,
+                              "End of file reached while trying to read FREE box\n");
+                return 1;
+            }
+            foffset += box.length;
+            break;
+        case MJ2_SKIP:
+            fsresult = fseek(file, foffset + box.length, SEEK_SET);
+            if (fsresult) {
+                opj_event_msg(cio->cinfo, EVT_ERROR,
+                              "End of file reached while trying to read SKIP box\n");
+                return 1;
+            }
+            foffset += box.length;
+            break;
+        default:
+            opj_event_msg(cio->cinfo, EVT_ERROR, "Unknown box in MJ2 stream\n");
+            fsresult = fseek(file, foffset + box.length, SEEK_SET);
+            if (fsresult) {
+                opj_event_msg(cio->cinfo, EVT_ERROR,
+                              "End of file reached while trying to read end of unknown box\n");
+                return 1;
+            }
+            foffset += box.length;
+            break;
+        }
+        fsresult = fread(src, 8, 1, file);
+        if (fsresult != 1) {
+            opj_event_msg(cio->cinfo, EVT_ERROR, "MOOV box not found in file\n");
+            return 1;
+        }
+        cio = opj_cio_open((opj_common_ptr)movie->cinfo, src, 8);
+        mj2_read_boxhdr(&box, cio);
+    }
+
+    fseek(file, foffset, SEEK_SET);
+    src = (unsigned char*)opj_realloc(src, box.length);
+    fsresult = fread(src, box.length, 1, file);
+    if (fsresult != 1) {
+        opj_event_msg(cio->cinfo, EVT_ERROR,
+                      "End of file reached while trying to read MOOV box\n");
+        return 1;
+    }
+
+    cio = opj_cio_open((opj_common_ptr)movie->cinfo, src, box.length);
 
-  opj_free(src);
-  return 0;
+    if (mj2_read_moov(movie, &img, cio)) {
+        return 1;
+    }
+
+    opj_free(src);
+    return 0;
 }
 
 /* ----------------------------------------------------------------------- */
-/* MJ2 decoder interface                                                                                                                                            */
+/* MJ2 decoder interface                                                                                 */
 /* ----------------------------------------------------------------------- */
 
-opj_dinfo_t* OPJ_CALLCONV mj2_create_decompress() {
-       opj_mj2_t* mj2;
-       opj_dinfo_t *dinfo = (opj_dinfo_t*) opj_calloc(1, sizeof(opj_dinfo_t));
-       if(!dinfo) return NULL;
-
-       dinfo->is_decompressor = OPJ_TRUE;      
-
-       mj2 = (opj_mj2_t*) opj_calloc(1, sizeof(opj_mj2_t));
-       dinfo->mj2_handle = mj2;
-       if(mj2) {
-               mj2->cinfo = (opj_common_ptr)dinfo;
-       }
-       mj2->j2k = j2k_create_decompress((opj_common_ptr)dinfo);
-       dinfo->j2k_handle = mj2->j2k;
-
-       return dinfo;
-}
-
-void OPJ_CALLCONV mj2_setup_decoder(opj_mj2_t *movie, mj2_dparameters_t *mj2_parameters) {
-       movie->num_vtk=0;
-  movie->num_stk=0;
-  movie->num_htk=0;    
-
-       /* setup the J2K decoder parameters */
-       j2k_setup_decoder((opj_j2k_t*)movie->cinfo->j2k_handle, 
-               &mj2_parameters->j2k_parameters);
-
-}
-
-void OPJ_CALLCONV mj2_destroy_decompress(opj_mj2_t *movie) {
-       if(movie) {
-               int i;
-               mj2_tk_t *tk=NULL;
-
-               if (movie->cinfo->j2k_handle) 
-                       j2k_destroy_compress(movie->j2k);
-               
-               if (movie->num_cl != 0)
-                       opj_free(movie->cl);
-               
-               for (i = 0; i < movie->num_vtk + movie->num_stk + movie->num_htk; i++) {
-                       tk = &movie->tk[i];
-                       if (tk->name_size != 0)
-                               opj_free(tk->name);
-                       if (tk->track_type == 0)  {/* Video track*/
-                               if (tk->jp2_struct.comps != NULL)
-                                       opj_free(tk->jp2_struct.comps);
-                               if (tk->jp2_struct.cl != NULL)
-                                       opj_free(tk->jp2_struct.cl);
-                               if (tk->num_jp2x != 0)
-                                       opj_free(tk->jp2xdata);
-                               
-                       }
-                       if (tk->num_url != 0)
-                               opj_free(tk->url);
-                       if (tk->num_urn != 0)
-                               opj_free(tk->urn);
-                       if (tk->num_br != 0)
-                               opj_free(tk->br);
-                       if (tk->num_tts != 0)
-                               opj_free(tk->tts);
-                       if (tk->num_chunks != 0)
-                               opj_free(tk->chunk);
-                       if (tk->num_samplestochunk != 0)
-                               opj_free(tk->sampletochunk);
-                       if (tk->num_samples != 0)
-                               opj_free(tk->sample);
-               }
-               
-               opj_free(movie->tk);
-       }       
-       opj_free(movie);
+opj_dinfo_t* OPJ_CALLCONV mj2_create_decompress()
+{
+    opj_mj2_t* mj2;
+    opj_dinfo_t *dinfo = (opj_dinfo_t*) opj_calloc(1, sizeof(opj_dinfo_t));
+    if (!dinfo) {
+        return NULL;
+    }
+
+    dinfo->is_decompressor = OPJ_TRUE;
+
+    mj2 = (opj_mj2_t*) opj_calloc(1, sizeof(opj_mj2_t));
+    dinfo->mj2_handle = mj2;
+    if (mj2) {
+        mj2->cinfo = (opj_common_ptr)dinfo;
+    }
+    mj2->j2k = j2k_create_decompress((opj_common_ptr)dinfo);
+    dinfo->j2k_handle = mj2->j2k;
+
+    return dinfo;
+}
+
+void OPJ_CALLCONV mj2_setup_decoder(opj_mj2_t *movie,
+                                    mj2_dparameters_t *mj2_parameters)
+{
+    movie->num_vtk = 0;
+    movie->num_stk = 0;
+    movie->num_htk = 0;
+
+    /* setup the J2K decoder parameters */
+    j2k_setup_decoder((opj_j2k_t*)movie->cinfo->j2k_handle,
+                      &mj2_parameters->j2k_parameters);
+
+}
+
+void OPJ_CALLCONV mj2_destroy_decompress(opj_mj2_t *movie)
+{
+    if (movie) {
+        int i;
+        mj2_tk_t *tk = NULL;
+
+        if (movie->cinfo->j2k_handle) {
+            j2k_destroy_compress(movie->j2k);
+        }
+
+        if (movie->num_cl != 0) {
+            opj_free(movie->cl);
+        }
+
+        for (i = 0; i < movie->num_vtk + movie->num_stk + movie->num_htk; i++) {
+            tk = &movie->tk[i];
+            if (tk->name_size != 0) {
+                opj_free(tk->name);
+            }
+            if (tk->track_type == 0)  {/* Video track*/
+                if (tk->jp2_struct.comps != NULL) {
+                    opj_free(tk->jp2_struct.comps);
+                }
+                if (tk->jp2_struct.cl != NULL) {
+                    opj_free(tk->jp2_struct.cl);
+                }
+                if (tk->num_jp2x != 0) {
+                    opj_free(tk->jp2xdata);
+                }
+
+            }
+            if (tk->num_url != 0) {
+                opj_free(tk->url);
+            }
+            if (tk->num_urn != 0) {
+                opj_free(tk->urn);
+            }
+            if (tk->num_br != 0) {
+                opj_free(tk->br);
+            }
+            if (tk->num_tts != 0) {
+                opj_free(tk->tts);
+            }
+            if (tk->num_chunks != 0) {
+                opj_free(tk->chunk);
+            }
+            if (tk->num_samplestochunk != 0) {
+                opj_free(tk->sampletochunk);
+            }
+            if (tk->num_samples != 0) {
+                opj_free(tk->sample);
+            }
+        }
+
+        opj_free(movie->tk);
+    }
+    opj_free(movie);
 }
 
 /* ----------------------------------------------------------------------- */
-/* MJ2 encoder interface                                                                                                                                            */
+/* MJ2 encoder interface                                                                                 */
 /* ----------------------------------------------------------------------- */
 
-opj_cinfo_t* OPJ_CALLCONV mj2_create_compress() {
-       opj_mj2_t* mj2;
-       opj_cinfo_t *cinfo = (opj_cinfo_t*) opj_calloc(1, sizeof(opj_cinfo_t));
-       if(!cinfo) return NULL;
-
-       mj2 = (opj_mj2_t*) opj_calloc(1, sizeof(opj_mj2_t));
-       cinfo->mj2_handle = mj2;
-       if(mj2) {
-               mj2->cinfo = (opj_common_ptr)cinfo;
-       }
-
-       mj2->j2k = j2k_create_compress(mj2->cinfo);
-       cinfo->j2k_handle = mj2->j2k;
-
-       return cinfo;
-}
-
-void OPJ_CALLCONV mj2_setup_encoder(opj_mj2_t *movie, mj2_cparameters_t *parameters) {
-       if(movie && parameters) {
-               opj_jp2_t *jp2_struct;
-                       
-               movie->num_htk = 0;       /* No hint tracks*/
-               movie->num_stk = 0;       /* No sound tracks*/
-               movie->num_vtk = 1;       /* One video track*/
-
-               movie->brand = MJ2_MJ2;  /* One brand: MJ2*/
-               movie->num_cl = 2;        /* Two compatible brands: MJ2 and MJ2S*/
-               movie->cl = (unsigned int*) opj_malloc(movie->num_cl * sizeof(unsigned int));
-               movie->cl[0] = MJ2_MJ2;
-               movie->cl[1] = MJ2_MJ2S;
-               movie->minversion = 0;    /* Minimum version: 0 */
-
-               movie->tk = (mj2_tk_t*) opj_malloc(sizeof(mj2_tk_t)); /*Memory allocation for the video track*/
-               movie->tk[0].track_ID = 1;        /* Track ID = 1 */
-               movie->tk[0].track_type = 0;      /* Video track */
-               movie->tk[0].Dim[0] = parameters->Dim[0];
-               movie->tk[0].Dim[1] = parameters->Dim[1];
-               movie->tk[0].w = parameters->w;
-               movie->tk[0].h = parameters->h;
-               movie->tk[0].CbCr_subsampling_dx = parameters->CbCr_subsampling_dx;
-               movie->tk[0].CbCr_subsampling_dy = parameters->CbCr_subsampling_dy;
-               movie->tk[0].sample_rate = parameters->frame_rate;
-               movie->tk[0].name_size = 0;
-               movie->tk[0].chunk = (mj2_chunk_t*) opj_malloc(sizeof(mj2_chunk_t));  
-               movie->tk[0].sample = (mj2_sample_t*) opj_malloc(sizeof(mj2_sample_t));
-               movie->tk[0].depth = parameters->prec;
-
-               jp2_struct = &movie->tk[0].jp2_struct;
-               jp2_struct->numcomps = parameters->numcomps;    /* NC */
-               jp2_struct->comps = (opj_jp2_comps_t*) opj_malloc(jp2_struct->numcomps * sizeof(opj_jp2_comps_t));
-               jp2_struct->precedence = 0;   /* PRECEDENCE*/
-               jp2_struct->approx = 0;   /* APPROX*/           
-               jp2_struct->brand = JP2_JP2;    /* BR         */
-               jp2_struct->minversion = 0;     /* MinV       */
-               jp2_struct->numcl = 1;
-               jp2_struct->cl = (unsigned int*) opj_malloc(jp2_struct->numcl * sizeof(unsigned int));
-               jp2_struct->cl[0] = JP2_JP2;    /* CL0 : JP2  */                
-               jp2_struct->C = 7;      /* C : Always 7*/
-               jp2_struct->UnkC = 0;      /* UnkC, colorspace specified in colr box*/
-               jp2_struct->IPR = 0;      /* IPR, no intellectual property*/                                            
-               jp2_struct->w = parameters->w;
-               jp2_struct->h = parameters->h;
-               jp2_struct->bpc = 7;  
-               jp2_struct->meth = parameters->meth;
-               jp2_struct->enumcs = parameters->enumcs;
-  }
-}
-
-void OPJ_CALLCONV mj2_destroy_compress(opj_mj2_t *movie) {
-       if(movie) {
-               int i;
-               mj2_tk_t *tk=NULL;
-
-               if (movie->cinfo->j2k_handle) {
-                       j2k_destroy_compress(movie->j2k);
-               }
-               
-               if (movie->num_cl != 0)
-                       opj_free(movie->cl);
-               
-               for (i = 0; i < movie->num_vtk + movie->num_stk + movie->num_htk; i++) {
-                       tk = &movie->tk[i];
-                       if (tk->name_size != 0)
-                               opj_free(tk->name);
-                       if (tk->track_type == 0)  {/* Video track*/
-                               if (tk->jp2_struct.comps != NULL)
-                                       opj_free(tk->jp2_struct.comps);
-                               if (tk->jp2_struct.cl != NULL)
-                                       opj_free(tk->jp2_struct.cl);
-                               if (tk->num_jp2x != 0)
-                                       opj_free(tk->jp2xdata);
-                               
-                       }
-                       if (tk->num_url != 0)
-                               opj_free(tk->url);
-                       if (tk->num_urn != 0)
-                               opj_free(tk->urn);
-                       if (tk->num_br != 0)
-                               opj_free(tk->br);
-                       if (tk->num_tts != 0)
-                               opj_free(tk->tts);
-                       if (tk->num_chunks != 0)
-                               opj_free(tk->chunk);
-                       if (tk->num_samplestochunk != 0)
-                               opj_free(tk->sampletochunk);
-                       if (tk->num_samples != 0)
-                               opj_free(tk->sample);
-               }
-               
-               opj_free(movie->tk);
-       }       
-       opj_free(movie);
+opj_cinfo_t* OPJ_CALLCONV mj2_create_compress()
+{
+    opj_mj2_t* mj2;
+    opj_cinfo_t *cinfo = (opj_cinfo_t*) opj_calloc(1, sizeof(opj_cinfo_t));
+    if (!cinfo) {
+        return NULL;
+    }
+
+    mj2 = (opj_mj2_t*) opj_calloc(1, sizeof(opj_mj2_t));
+    cinfo->mj2_handle = mj2;
+    if (mj2) {
+        mj2->cinfo = (opj_common_ptr)cinfo;
+    }
+
+    mj2->j2k = j2k_create_compress(mj2->cinfo);
+    cinfo->j2k_handle = mj2->j2k;
+
+    return cinfo;
+}
+
+void OPJ_CALLCONV mj2_setup_encoder(opj_mj2_t *movie,
+                                    mj2_cparameters_t *parameters)
+{
+    if (movie && parameters) {
+        opj_jp2_t *jp2_struct;
+
+        movie->num_htk = 0;   /* No hint tracks*/
+        movie->num_stk = 0;   /* No sound tracks*/
+        movie->num_vtk = 1;   /* One video track*/
+
+        movie->brand = MJ2_MJ2;  /* One brand: MJ2*/
+        movie->num_cl = 2;    /* Two compatible brands: MJ2 and MJ2S*/
+        movie->cl = (unsigned int*) opj_malloc(movie->num_cl * sizeof(unsigned int));
+        movie->cl[0] = MJ2_MJ2;
+        movie->cl[1] = MJ2_MJ2S;
+        movie->minversion = 0;    /* Minimum version: 0 */
+
+        movie->tk = (mj2_tk_t*) opj_malloc(sizeof(
+                                               mj2_tk_t)); /*Memory allocation for the video track*/
+        movie->tk[0].track_ID = 1;    /* Track ID = 1 */
+        movie->tk[0].track_type = 0;      /* Video track */
+        movie->tk[0].Dim[0] = parameters->Dim[0];
+        movie->tk[0].Dim[1] = parameters->Dim[1];
+        movie->tk[0].w = parameters->w;
+        movie->tk[0].h = parameters->h;
+        movie->tk[0].CbCr_subsampling_dx = parameters->CbCr_subsampling_dx;
+        movie->tk[0].CbCr_subsampling_dy = parameters->CbCr_subsampling_dy;
+        movie->tk[0].sample_rate = parameters->frame_rate;
+        movie->tk[0].name_size = 0;
+        movie->tk[0].chunk = (mj2_chunk_t*) opj_malloc(sizeof(mj2_chunk_t));
+        movie->tk[0].sample = (mj2_sample_t*) opj_malloc(sizeof(mj2_sample_t));
+        movie->tk[0].depth = parameters->prec;
+
+        jp2_struct = &movie->tk[0].jp2_struct;
+        jp2_struct->numcomps = parameters->numcomps;    /* NC */
+        jp2_struct->comps = (opj_jp2_comps_t*) opj_malloc(jp2_struct->numcomps * sizeof(
+                                opj_jp2_comps_t));
+        jp2_struct->precedence = 0;   /* PRECEDENCE*/
+        jp2_struct->approx = 0;   /* APPROX*/
+        jp2_struct->brand = JP2_JP2;    /* BR         */
+        jp2_struct->minversion = 0; /* MinV       */
+        jp2_struct->numcl = 1;
+        jp2_struct->cl = (unsigned int*) opj_malloc(jp2_struct->numcl * sizeof(
+                             unsigned int));
+        jp2_struct->cl[0] = JP2_JP2;    /* CL0 : JP2  */
+        jp2_struct->C = 7;      /* C : Always 7*/
+        jp2_struct->UnkC = 0;      /* UnkC, colorspace specified in colr box*/
+        jp2_struct->IPR = 0;      /* IPR, no intellectual property*/
+        jp2_struct->w = parameters->w;
+        jp2_struct->h = parameters->h;
+        jp2_struct->bpc = 7;
+        jp2_struct->meth = parameters->meth;
+        jp2_struct->enumcs = parameters->enumcs;
+    }
+}
+
+void OPJ_CALLCONV mj2_destroy_compress(opj_mj2_t *movie)
+{
+    if (movie) {
+        int i;
+        mj2_tk_t *tk = NULL;
+
+        if (movie->cinfo->j2k_handle) {
+            j2k_destroy_compress(movie->j2k);
+        }
+
+        if (movie->num_cl != 0) {
+            opj_free(movie->cl);
+        }
+
+        for (i = 0; i < movie->num_vtk + movie->num_stk + movie->num_htk; i++) {
+            tk = &movie->tk[i];
+            if (tk->name_size != 0) {
+                opj_free(tk->name);
+            }
+            if (tk->track_type == 0)  {/* Video track*/
+                if (tk->jp2_struct.comps != NULL) {
+                    opj_free(tk->jp2_struct.comps);
+                }
+                if (tk->jp2_struct.cl != NULL) {
+                    opj_free(tk->jp2_struct.cl);
+                }
+                if (tk->num_jp2x != 0) {
+                    opj_free(tk->jp2xdata);
+                }
+
+            }
+            if (tk->num_url != 0) {
+                opj_free(tk->url);
+            }
+            if (tk->num_urn != 0) {
+                opj_free(tk->urn);
+            }
+            if (tk->num_br != 0) {
+                opj_free(tk->br);
+            }
+            if (tk->num_tts != 0) {
+                opj_free(tk->tts);
+            }
+            if (tk->num_chunks != 0) {
+                opj_free(tk->chunk);
+            }
+            if (tk->num_samplestochunk != 0) {
+                opj_free(tk->sampletochunk);
+            }
+            if (tk->num_samples != 0) {
+                opj_free(tk->sample);
+            }
+        }
+
+        opj_free(movie->tk);
+    }
+    opj_free(movie);
 }
 
 /*@}*/
index f22650941f2bfb5b53880c237fe168f4be97794c..65aa3bc68ca29f0f1eff10e1c99a6c23b468958a 100644 (file)
 #include "opj_includes.h"
 #include "mj2_convert.h"
 
-/*  -----------------------          */
-/*                                   */
-/*                                   */
-/*  Count the number of frames       */
-/*  in a YUV file                    */
-/*                                   */
-/*  -----------------------          */
+/*  -----------------------       */
+/*                    */
+/*                    */
+/*  Count the number of frames        */
+/*  in a YUV file             */
+/*                    */
+/*  -----------------------       */
 
 unsigned int OPJ_CALLCONV yuv_num_frames(mj2_tk_t * tk, char *infile)
 {
-  unsigned int prec_size;
-  long end_of_f, frame_size;
-       FILE *f;
+    unsigned int prec_size;
+    long end_of_f, frame_size;
+    FILE *f;
 
-  f = fopen(infile,"rb");
-  if (!f) {  
-    fprintf(stderr, "failed to open %s for reading\n",infile);
-    return 0;
-  }
-       prec_size = (tk->depth + 7)/8;/* bytes of precision */
-
-  frame_size = (long) (tk->w * tk->h * (1.0 + (double) 2 / (double) (tk->CbCr_subsampling_dx * tk->CbCr_subsampling_dy)));     /* Calculate frame size */
-       frame_size *= prec_size; 
-       
-  fseek(f, 0, SEEK_END);
-  end_of_f = ftell(f);         /* Calculate file size */
-       
-  if (end_of_f < frame_size) {
-    fprintf(stderr,
-                       "YUV does not contains any frame of %d x %d size\n", tk->w,
-                       tk->h);
-    return 0;
-  }
-  fclose(f);
-       
-  return (unsigned int)(end_of_f / frame_size);
+    f = fopen(infile, "rb");
+    if (!f) {
+        fprintf(stderr, "failed to open %s for reading\n", infile);
+        return 0;
+    }
+    prec_size = (tk->depth + 7) / 8; /* bytes of precision */
+
+    frame_size = (long)(tk->w * tk->h * (1.0 + (double) 2 / (double)(
+            tk->CbCr_subsampling_dx *
+            tk->CbCr_subsampling_dy)));  /* Calculate frame size */
+    frame_size *= prec_size;
+
+    fseek(f, 0, SEEK_END);
+    end_of_f = ftell(f);      /* Calculate file size */
+
+    if (end_of_f < frame_size) {
+        fprintf(stderr,
+                "YUV does not contains any frame of %d x %d size\n", tk->w,
+                tk->h);
+        return 0;
+    }
+    fclose(f);
+
+    return (unsigned int)(end_of_f / frame_size);
 }
 
 /*  ----------------------- */
@@ -74,97 +76,97 @@ unsigned int OPJ_CALLCONV yuv_num_frames(mj2_tk_t * tk, char *infile)
 /* */
 /*  ----------------------- */
 
-opj_image_t * OPJ_CALLCONV mj2_image_create(mj2_tk_t * tk, opj_cparameters_t *parameters)
+opj_image_t * OPJ_CALLCONV mj2_image_create(mj2_tk_t * tk,
+        opj_cparameters_t *parameters)
 {
-       opj_image_cmptparm_t cmptparm[3];
-       opj_image_t * img;
-       int i;
-       int numcomps = 3;
-       int subsampling_dx = parameters->subsampling_dx;
-       int subsampling_dy = parameters->subsampling_dy;
-
-       /* initialize image components */
-       memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t));
-       for(i = 0; i < numcomps; i++) {
-               cmptparm[i].prec = tk->depth;
-               cmptparm[i].bpp = tk->depth;
-               cmptparm[i].sgnd = 0;           
-               cmptparm[i].dx = i ? subsampling_dx * tk->CbCr_subsampling_dx : subsampling_dx;
-               cmptparm[i].dy = i ? subsampling_dy * tk->CbCr_subsampling_dy : subsampling_dy;
-               cmptparm[i].w = tk->w;
-               cmptparm[i].h = tk->h;
-       }
-       /* create the image */
-       img = opj_image_create(numcomps, cmptparm, CLRSPC_SRGB);
-       return img;
+    opj_image_cmptparm_t cmptparm[3];
+    opj_image_t * img;
+    int i;
+    int numcomps = 3;
+    int subsampling_dx = parameters->subsampling_dx;
+    int subsampling_dy = parameters->subsampling_dy;
+
+    /* initialize image components */
+    memset(&cmptparm[0], 0, 3 * sizeof(opj_image_cmptparm_t));
+    for (i = 0; i < numcomps; i++) {
+        cmptparm[i].prec = tk->depth;
+        cmptparm[i].bpp = tk->depth;
+        cmptparm[i].sgnd = 0;
+        cmptparm[i].dx = i ? subsampling_dx * tk->CbCr_subsampling_dx : subsampling_dx;
+        cmptparm[i].dy = i ? subsampling_dy * tk->CbCr_subsampling_dy : subsampling_dy;
+        cmptparm[i].w = tk->w;
+        cmptparm[i].h = tk->h;
+    }
+    /* create the image */
+    img = opj_image_create(numcomps, cmptparm, CLRSPC_SRGB);
+    return img;
 }
 
-char OPJ_CALLCONV yuvtoimage(mj2_tk_t * tk, opj_image_t * img, int frame_num, opj_cparameters_t *parameters, char* infile)
+char OPJ_CALLCONV yuvtoimage(mj2_tk_t * tk, opj_image_t * img, int frame_num,
+                             opj_cparameters_t *parameters, char* infile)
 {
-  int i, compno;
-  int offset, size, max, prec_bytes, is_16, v;
-  long end_of_f, position;
-       int numcomps = 3;
-       int subsampling_dx = parameters->subsampling_dx;
-       int subsampling_dy = parameters->subsampling_dy;
-       FILE *yuvfile;
-       int *data;
-       unsigned char uc;
-
-  yuvfile = fopen(infile,"rb");
-  if (!yuvfile) {  
-    fprintf(stderr, "failed to open %s for readings\n",parameters->infile);
-    return 1;
-  }
-       is_16 = (tk->depth > 8);
-       prec_bytes = (is_16?2:1);
-
-  offset = (int) ((double) (frame_num * tk->w * tk->h) * (1.0 +
-               1.0 * (double) 2 / (double) (tk->CbCr_subsampling_dx * tk->CbCr_subsampling_dy)));
-  offset *= prec_bytes;
-
-  fseek(yuvfile, 0, SEEK_END);
-  end_of_f = ftell(yuvfile);
-  fseek(yuvfile, sizeof(unsigned char) * offset, SEEK_SET);
-  position = ftell(yuvfile);
-  if (position >= end_of_f) {
-    fprintf(stderr, "Cannot reach frame number %d in yuv file !!\n",
-                       frame_num);
-               fclose(yuvfile);
-    return 1;
-  }
-       
-  img->x0 = tk->Dim[0];
-  img->y0 = tk->Dim[1];
-  img->x1 = !tk->Dim[0] ? (tk->w - 1) * subsampling_dx + 1 : tk->Dim[0] +
-    (tk->w - 1) * subsampling_dx + 1;
-  img->y1 = !tk->Dim[1] ? (tk->h - 1) * subsampling_dy + 1 : tk->Dim[1] +
-    (tk->h - 1) * subsampling_dy + 1;
-
-       size = tk->w * tk->h * prec_bytes;
-       
-       for(compno = 0; compno < numcomps; compno++) 
-   {
-       max = size/(img->comps[compno].dx * img->comps[compno].dy);
-       data = img->comps[compno].data;
-
-       for (i = 0; i < max && !feof(yuvfile); i++)
-  {
-       v = 0;
-       fread(&uc, 1, 1, yuvfile);
-       v = uc;
-
-       if(is_16)
- {
-       fread(&uc, 1, 1, yuvfile);
-       v |= (uc<<8);
- }
-       *data++ = v;
-  }
-   }
-       fclose(yuvfile);
-       
-  return 0;
+    int i, compno;
+    int offset, size, max, prec_bytes, is_16, v;
+    long end_of_f, position;
+    int numcomps = 3;
+    int subsampling_dx = parameters->subsampling_dx;
+    int subsampling_dy = parameters->subsampling_dy;
+    FILE *yuvfile;
+    int *data;
+    unsigned char uc;
+
+    yuvfile = fopen(infile, "rb");
+    if (!yuvfile) {
+        fprintf(stderr, "failed to open %s for readings\n", parameters->infile);
+        return 1;
+    }
+    is_16 = (tk->depth > 8);
+    prec_bytes = (is_16 ? 2 : 1);
+
+    offset = (int)((double)(frame_num * tk->w * tk->h) * (1.0 +
+                   1.0 * (double) 2 / (double)(tk->CbCr_subsampling_dx *
+                           tk->CbCr_subsampling_dy)));
+    offset *= prec_bytes;
+
+    fseek(yuvfile, 0, SEEK_END);
+    end_of_f = ftell(yuvfile);
+    fseek(yuvfile, sizeof(unsigned char) * offset, SEEK_SET);
+    position = ftell(yuvfile);
+    if (position >= end_of_f) {
+        fprintf(stderr, "Cannot reach frame number %d in yuv file !!\n",
+                frame_num);
+        fclose(yuvfile);
+        return 1;
+    }
+
+    img->x0 = tk->Dim[0];
+    img->y0 = tk->Dim[1];
+    img->x1 = !tk->Dim[0] ? (tk->w - 1) * subsampling_dx + 1 : tk->Dim[0] +
+              (tk->w - 1) * subsampling_dx + 1;
+    img->y1 = !tk->Dim[1] ? (tk->h - 1) * subsampling_dy + 1 : tk->Dim[1] +
+              (tk->h - 1) * subsampling_dy + 1;
+
+    size = tk->w * tk->h * prec_bytes;
+
+    for (compno = 0; compno < numcomps; compno++) {
+        max = size / (img->comps[compno].dx * img->comps[compno].dy);
+        data = img->comps[compno].data;
+
+        for (i = 0; i < max && !feof(yuvfile); i++) {
+            v = 0;
+            fread(&uc, 1, 1, yuvfile);
+            v = uc;
+
+            if (is_16) {
+                fread(&uc, 1, 1, yuvfile);
+                v |= (uc << 8);
+            }
+            *data++ = v;
+        }
+    }
+    fclose(yuvfile);
+
+    return 0;
 }
 
 
@@ -179,88 +181,96 @@ char OPJ_CALLCONV yuvtoimage(mj2_tk_t * tk, opj_image_t * img, int frame_num, op
 
 opj_bool OPJ_CALLCONV imagetoyuv(opj_image_t * img, char *outfile)
 {
-  FILE *f;
-  int *data;
-  int i, v, is_16, prec_bytes;
-  unsigned char buf[2];
-
-  if (img->numcomps == 3) {
-    if (img->comps[0].dx != img->comps[1].dx / 2
-      || img->comps[1].dx != img->comps[2].dx) {
-      fprintf(stderr,
-                               "Error with the input image components size: cannot create yuv file)\n");
-      return OPJ_FALSE;
+    FILE *f;
+    int *data;
+    int i, v, is_16, prec_bytes;
+    unsigned char buf[2];
+
+    if (img->numcomps == 3) {
+        if (img->comps[0].dx != img->comps[1].dx / 2
+                || img->comps[1].dx != img->comps[2].dx) {
+            fprintf(stderr,
+                    "Error with the input image components size: cannot create yuv file)\n");
+            return OPJ_FALSE;
+        }
+    } else if (!(img->numcomps == 1)) {
+        fprintf(stderr,
+                "Error with the number of image components(must be one or three)\n");
+        return OPJ_FALSE;
     }
-  } else if (!(img->numcomps == 1)) {
-    fprintf(stderr,
-      "Error with the number of image components(must be one or three)\n");
-    return OPJ_FALSE;
-  }
-  
-  f = fopen(outfile, "a+b");
-  if (!f) {
-    fprintf(stderr, "failed to open %s for writing\n", outfile);
-    return OPJ_FALSE;
-  }
-  is_16 = (img->comps[0].prec > 8);
-  prec_bytes = (is_16?2:1);
-  data = img->comps[0].data;
-  
-  for (i = 0; i < (img->comps[0].w * img->comps[0].h); i++) {
-    v = *data++;
-    buf[0] = (unsigned char)v;
-
-       if(is_16) buf[1] = (unsigned char)(v>>8);
-
-    fwrite(buf, 1, prec_bytes, f);
-  }
-  
-  
-  if (img->numcomps == 3) {
-       data = img->comps[1].data;
-
-    for (i = 0; i < (img->comps[1].w * img->comps[1].h); i++) {
-      v = *data++;
-      buf[0] = (unsigned char)v;
-
-      if(is_16) buf[1] = (unsigned char)(v>>8);
-
-      fwrite(buf, 1, prec_bytes, f);
+
+    f = fopen(outfile, "a+b");
+    if (!f) {
+        fprintf(stderr, "failed to open %s for writing\n", outfile);
+        return OPJ_FALSE;
     }
-    data = img->comps[2].data;
-    
-    for (i = 0; i < (img->comps[2].w * img->comps[2].h); i++) {
-      v = *data++;
-      buf[0] = (unsigned char)v;
+    is_16 = (img->comps[0].prec > 8);
+    prec_bytes = (is_16 ? 2 : 1);
+    data = img->comps[0].data;
 
-      if(is_16) buf[1] = (unsigned char)(v>>8);
+    for (i = 0; i < (img->comps[0].w * img->comps[0].h); i++) {
+        v = *data++;
+        buf[0] = (unsigned char)v;
 
-      fwrite(buf, 1, prec_bytes, f);
-    }
-  } else if (img->numcomps == 1) {
-/* fake CbCr values */
-       if(is_16) 
-  { 
-       buf[0] = 255;
-       if(img->comps[0].prec == 10) buf[1] = 1;
-       else
-       if(img->comps[0].prec == 12) buf[1] = 3;
-       else
-        buf[1] = 125;
-  } 
-       else buf[0] = 125;
-
-    for (i = 0; i < (img->comps[0].w * img->comps[0].h * 0.25); i++) {
-      fwrite(buf, 1, prec_bytes, f);
+        if (is_16) {
+            buf[1] = (unsigned char)(v >> 8);
+        }
+
+        fwrite(buf, 1, prec_bytes, f);
     }
-    
-    
-    for (i = 0; i < (img->comps[0].w * img->comps[0].h * 0.25); i++) {
-      fwrite(buf, 1, prec_bytes, f);
+
+
+    if (img->numcomps == 3) {
+        data = img->comps[1].data;
+
+        for (i = 0; i < (img->comps[1].w * img->comps[1].h); i++) {
+            v = *data++;
+            buf[0] = (unsigned char)v;
+
+            if (is_16) {
+                buf[1] = (unsigned char)(v >> 8);
+            }
+
+            fwrite(buf, 1, prec_bytes, f);
+        }
+        data = img->comps[2].data;
+
+        for (i = 0; i < (img->comps[2].w * img->comps[2].h); i++) {
+            v = *data++;
+            buf[0] = (unsigned char)v;
+
+            if (is_16) {
+                buf[1] = (unsigned char)(v >> 8);
+            }
+
+            fwrite(buf, 1, prec_bytes, f);
+        }
+    } else if (img->numcomps == 1) {
+        /* fake CbCr values */
+        if (is_16) {
+            buf[0] = 255;
+            if (img->comps[0].prec == 10) {
+                buf[1] = 1;
+            } else if (img->comps[0].prec == 12) {
+                buf[1] = 3;
+            } else {
+                buf[1] = 125;
+            }
+        } else {
+            buf[0] = 125;
+        }
+
+        for (i = 0; i < (img->comps[0].w * img->comps[0].h * 0.25); i++) {
+            fwrite(buf, 1, prec_bytes, f);
+        }
+
+
+        for (i = 0; i < (img->comps[0].w * img->comps[0].h * 0.25); i++) {
+            fwrite(buf, 1, prec_bytes, f);
+        }
     }
-  }  
-  fclose(f);
-  return OPJ_TRUE;
+    fclose(f);
+    return OPJ_TRUE;
 }
 
 /*  ----------------------- */
@@ -270,103 +280,105 @@ opj_bool OPJ_CALLCONV imagetoyuv(opj_image_t * img, char *outfile)
 /* */
 /*  ----------------------- */
 
-int OPJ_CALLCONV imagetobmp(opj_image_t * img, char *outfile) {
-  int w,wr,h,hr,i,pad;
-  FILE *f;
-  
-  if (img->numcomps == 3 && img->comps[0].dx == img->comps[1].dx
-    && img->comps[1].dx == img->comps[2].dx
-    && img->comps[0].dy == img->comps[1].dy
-    && img->comps[1].dy == img->comps[2].dy
-    && img->comps[0].prec == img->comps[1].prec
-    && img->comps[1].prec == img->comps[2].prec) {
-    /* -->> -->> -->> -->>
-    
-      24 bits color
-      
-    <<-- <<-- <<-- <<-- */
-    
-    f = fopen(outfile, "wb");
-    if (!f) {
-      fprintf(stderr, "failed to open %s for writing\n", outfile);
-      return 1;
-    }   
-    
-    w = img->comps[0].w;
-    wr = int_ceildivpow2(img->comps[0].w, img->comps[0].factor);
-    
-    h = img->comps[0].h;
-    hr = int_ceildivpow2(img->comps[0].h, img->comps[0].factor);
-    
-    fprintf(f, "BM");
-    
-    /* FILE HEADER */
-    /* ------------- */
-    fprintf(f, "%c%c%c%c",
-      (unsigned char) (hr * wr * 3 + 3 * hr * (wr % 2) +
-      54) & 0xff,
-      (unsigned char) ((hr * wr * 3 + 3 * hr * (wr % 2) + 54)
-      >> 8) & 0xff,
-      (unsigned char) ((hr * wr * 3 + 3 * hr * (wr % 2) + 54)
-      >> 16) & 0xff,
-      (unsigned char) ((hr * wr * 3 + 3 * hr * (wr % 2) + 54)
-      >> 24) & 0xff);
-    fprintf(f, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff,
-      ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
-    fprintf(f, "%c%c%c%c", (54) & 0xff, ((54) >> 8) & 0xff,
-      ((54) >> 16) & 0xff, ((54) >> 24) & 0xff);
-    
-    /* INFO HEADER   */
-    /* ------------- */
-    fprintf(f, "%c%c%c%c", (40) & 0xff, ((40) >> 8) & 0xff,
-      ((40) >> 16) & 0xff, ((40) >> 24) & 0xff);
-    fprintf(f, "%c%c%c%c", (unsigned char) ((wr) & 0xff),
-      (unsigned char) ((wr) >> 8) & 0xff,
-      (unsigned char) ((wr) >> 16) & 0xff,
-      (unsigned char) ((wr) >> 24) & 0xff);
-    fprintf(f, "%c%c%c%c", (unsigned char) ((hr) & 0xff),
-      (unsigned char) ((hr) >> 8) & 0xff,
-      (unsigned char) ((hr) >> 16) & 0xff,
-      (unsigned char) ((hr) >> 24) & 0xff);
-    fprintf(f, "%c%c", (1) & 0xff, ((1) >> 8) & 0xff);
-    fprintf(f, "%c%c", (24) & 0xff, ((24) >> 8) & 0xff);
-    fprintf(f, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff,
-      ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
-    fprintf(f, "%c%c%c%c",
-      (unsigned char) (3 * hr * wr +
-      3 * hr * (wr % 2)) & 0xff,
-      (unsigned char) ((hr * wr * 3 + 3 * hr * (wr % 2)) >>
-      8) & 0xff,
-      (unsigned char) ((hr * wr * 3 + 3 * hr * (wr % 2)) >>
-      16) & 0xff,
-      (unsigned char) ((hr * wr * 3 + 3 * hr * (wr % 2)) >>
-      24) & 0xff);
-    fprintf(f, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
-      ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
-    fprintf(f, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
-      ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
-    fprintf(f, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff,
-      ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
-    fprintf(f, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff,
-      ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
-    
-    for (i = 0; i < wr * hr; i++) {
-      unsigned char R, G, B;
-      /* a modifier */
-      /* R = img->comps[0].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];*/
-      R = img->comps[0].data[w * hr - ((i) / (wr) + 1) * w + (i) % (wr)];
-      /* G = img->comps[1].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];*/
-      G = img->comps[1].data[w * hr - ((i) / (wr) + 1) * w + (i) % (wr)];
-      /* B = img->comps[2].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];*/
-      B = img->comps[2].data[w * hr - ((i) / (wr) + 1) * w + (i) % (wr)];
-      fprintf(f, "%c%c%c", B, G, R);
-      
-      if ((i + 1) % wr == 0) {
-                               for (pad = (3 * wr) % 4 ? 4 - (3 * wr) % 4 : 0; pad > 0; pad--) /* ADD */
-                                       fprintf(f, "%c", 0);
-      }
+int OPJ_CALLCONV imagetobmp(opj_image_t * img, char *outfile)
+{
+    int w, wr, h, hr, i, pad;
+    FILE *f;
+
+    if (img->numcomps == 3 && img->comps[0].dx == img->comps[1].dx
+            && img->comps[1].dx == img->comps[2].dx
+            && img->comps[0].dy == img->comps[1].dy
+            && img->comps[1].dy == img->comps[2].dy
+            && img->comps[0].prec == img->comps[1].prec
+            && img->comps[1].prec == img->comps[2].prec) {
+        /* -->> -->> -->> -->>
+
+          24 bits color
+
+        <<-- <<-- <<-- <<-- */
+
+        f = fopen(outfile, "wb");
+        if (!f) {
+            fprintf(stderr, "failed to open %s for writing\n", outfile);
+            return 1;
+        }
+
+        w = img->comps[0].w;
+        wr = int_ceildivpow2(img->comps[0].w, img->comps[0].factor);
+
+        h = img->comps[0].h;
+        hr = int_ceildivpow2(img->comps[0].h, img->comps[0].factor);
+
+        fprintf(f, "BM");
+
+        /* FILE HEADER */
+        /* ------------- */
+        fprintf(f, "%c%c%c%c",
+                (unsigned char)(hr * wr * 3 + 3 * hr * (wr % 2) +
+                                54) & 0xff,
+                (unsigned char)((hr * wr * 3 + 3 * hr * (wr % 2) + 54)
+                                >> 8) & 0xff,
+                (unsigned char)((hr * wr * 3 + 3 * hr * (wr % 2) + 54)
+                                >> 16) & 0xff,
+                (unsigned char)((hr * wr * 3 + 3 * hr * (wr % 2) + 54)
+                                >> 24) & 0xff);
+        fprintf(f, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff,
+                ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
+        fprintf(f, "%c%c%c%c", (54) & 0xff, ((54) >> 8) & 0xff,
+                ((54) >> 16) & 0xff, ((54) >> 24) & 0xff);
+
+        /* INFO HEADER   */
+        /* ------------- */
+        fprintf(f, "%c%c%c%c", (40) & 0xff, ((40) >> 8) & 0xff,
+                ((40) >> 16) & 0xff, ((40) >> 24) & 0xff);
+        fprintf(f, "%c%c%c%c", (unsigned char)((wr) & 0xff),
+                (unsigned char)((wr) >> 8) & 0xff,
+                (unsigned char)((wr) >> 16) & 0xff,
+                (unsigned char)((wr) >> 24) & 0xff);
+        fprintf(f, "%c%c%c%c", (unsigned char)((hr) & 0xff),
+                (unsigned char)((hr) >> 8) & 0xff,
+                (unsigned char)((hr) >> 16) & 0xff,
+                (unsigned char)((hr) >> 24) & 0xff);
+        fprintf(f, "%c%c", (1) & 0xff, ((1) >> 8) & 0xff);
+        fprintf(f, "%c%c", (24) & 0xff, ((24) >> 8) & 0xff);
+        fprintf(f, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff,
+                ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
+        fprintf(f, "%c%c%c%c",
+                (unsigned char)(3 * hr * wr +
+                                3 * hr * (wr % 2)) & 0xff,
+                (unsigned char)((hr * wr * 3 + 3 * hr * (wr % 2)) >>
+                                8) & 0xff,
+                (unsigned char)((hr * wr * 3 + 3 * hr * (wr % 2)) >>
+                                16) & 0xff,
+                (unsigned char)((hr * wr * 3 + 3 * hr * (wr % 2)) >>
+                                24) & 0xff);
+        fprintf(f, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
+                ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
+        fprintf(f, "%c%c%c%c", (7834) & 0xff, ((7834) >> 8) & 0xff,
+                ((7834) >> 16) & 0xff, ((7834) >> 24) & 0xff);
+        fprintf(f, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff,
+                ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
+        fprintf(f, "%c%c%c%c", (0) & 0xff, ((0) >> 8) & 0xff,
+                ((0) >> 16) & 0xff, ((0) >> 24) & 0xff);
+
+        for (i = 0; i < wr * hr; i++) {
+            unsigned char R, G, B;
+            /* a modifier */
+            /* R = img->comps[0].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];*/
+            R = img->comps[0].data[w * hr - ((i) / (wr) + 1) * w + (i) % (wr)];
+            /* G = img->comps[1].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];*/
+            G = img->comps[1].data[w * hr - ((i) / (wr) + 1) * w + (i) % (wr)];
+            /* B = img->comps[2].data[w * h - ((i) / (w) + 1) * w + (i) % (w)];*/
+            B = img->comps[2].data[w * hr - ((i) / (wr) + 1) * w + (i) % (wr)];
+            fprintf(f, "%c%c%c", B, G, R);
+
+            if ((i + 1) % wr == 0) {
+                for (pad = (3 * wr) % 4 ? 4 - (3 * wr) % 4 : 0; pad > 0; pad--) { /* ADD */
+                    fprintf(f, "%c", 0);
+                }
+            }
+        }
+        fclose(f);
     }
-    fclose(f);
-  }
-  return 0;
+    return 0;
 }
index 0b56162940d656651a144f176ad87d0b33a12dbb..60d057245baa25622ec1367407aedcd7d41dbdb4 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * All rights reserved.
@@ -72,13 +72,13 @@ static void mqc_setbits(opj_mqc_t *mqc);
 /**
 FIXME: documentation ???
 @param mqc MQC handle
-@return 
+@return
 */
 static INLINE int mqc_mpsexchange(opj_mqc_t *const mqc);
 /**
 FIXME: documentation ???
 @param mqc MQC handle
-@return 
+@return
 */
 static INLINE int mqc_lpsexchange(opj_mqc_t *const mqc);
 /**
@@ -99,500 +99,531 @@ static INLINE void mqc_renormd(opj_mqc_t *const mqc);
 /* This array defines all the possible states for a context. */
 /* </summary> */
 static opj_mqc_state_t mqc_states[47 * 2] = {
-       {0x5601, 0, &mqc_states[2], &mqc_states[3]},
-       {0x5601, 1, &mqc_states[3], &mqc_states[2]},
-       {0x3401, 0, &mqc_states[4], &mqc_states[12]},
-       {0x3401, 1, &mqc_states[5], &mqc_states[13]},
-       {0x1801, 0, &mqc_states[6], &mqc_states[18]},
-       {0x1801, 1, &mqc_states[7], &mqc_states[19]},
-       {0x0ac1, 0, &mqc_states[8], &mqc_states[24]},
-       {0x0ac1, 1, &mqc_states[9], &mqc_states[25]},
-       {0x0521, 0, &mqc_states[10], &mqc_states[58]},
-       {0x0521, 1, &mqc_states[11], &mqc_states[59]},
-       {0x0221, 0, &mqc_states[76], &mqc_states[66]},
-       {0x0221, 1, &mqc_states[77], &mqc_states[67]},
-       {0x5601, 0, &mqc_states[14], &mqc_states[13]},
-       {0x5601, 1, &mqc_states[15], &mqc_states[12]},
-       {0x5401, 0, &mqc_states[16], &mqc_states[28]},
-       {0x5401, 1, &mqc_states[17], &mqc_states[29]},
-       {0x4801, 0, &mqc_states[18], &mqc_states[28]},
-       {0x4801, 1, &mqc_states[19], &mqc_states[29]},
-       {0x3801, 0, &mqc_states[20], &mqc_states[28]},
-       {0x3801, 1, &mqc_states[21], &mqc_states[29]},
-       {0x3001, 0, &mqc_states[22], &mqc_states[34]},
-       {0x3001, 1, &mqc_states[23], &mqc_states[35]},
-       {0x2401, 0, &mqc_states[24], &mqc_states[36]},
-       {0x2401, 1, &mqc_states[25], &mqc_states[37]},
-       {0x1c01, 0, &mqc_states[26], &mqc_states[40]},
-       {0x1c01, 1, &mqc_states[27], &mqc_states[41]},
-       {0x1601, 0, &mqc_states[58], &mqc_states[42]},
-       {0x1601, 1, &mqc_states[59], &mqc_states[43]},
-       {0x5601, 0, &mqc_states[30], &mqc_states[29]},
-       {0x5601, 1, &mqc_states[31], &mqc_states[28]},
-       {0x5401, 0, &mqc_states[32], &mqc_states[28]},
-       {0x5401, 1, &mqc_states[33], &mqc_states[29]},
-       {0x5101, 0, &mqc_states[34], &mqc_states[30]},
-       {0x5101, 1, &mqc_states[35], &mqc_states[31]},
-       {0x4801, 0, &mqc_states[36], &mqc_states[32]},
-       {0x4801, 1, &mqc_states[37], &mqc_states[33]},
-       {0x3801, 0, &mqc_states[38], &mqc_states[34]},
-       {0x3801, 1, &mqc_states[39], &mqc_states[35]},
-       {0x3401, 0, &mqc_states[40], &mqc_states[36]},
-       {0x3401, 1, &mqc_states[41], &mqc_states[37]},
-       {0x3001, 0, &mqc_states[42], &mqc_states[38]},
-       {0x3001, 1, &mqc_states[43], &mqc_states[39]},
-       {0x2801, 0, &mqc_states[44], &mqc_states[38]},
-       {0x2801, 1, &mqc_states[45], &mqc_states[39]},
-       {0x2401, 0, &mqc_states[46], &mqc_states[40]},
-       {0x2401, 1, &mqc_states[47], &mqc_states[41]},
-       {0x2201, 0, &mqc_states[48], &mqc_states[42]},
-       {0x2201, 1, &mqc_states[49], &mqc_states[43]},
-       {0x1c01, 0, &mqc_states[50], &mqc_states[44]},
-       {0x1c01, 1, &mqc_states[51], &mqc_states[45]},
-       {0x1801, 0, &mqc_states[52], &mqc_states[46]},
-       {0x1801, 1, &mqc_states[53], &mqc_states[47]},
-       {0x1601, 0, &mqc_states[54], &mqc_states[48]},
-       {0x1601, 1, &mqc_states[55], &mqc_states[49]},
-       {0x1401, 0, &mqc_states[56], &mqc_states[50]},
-       {0x1401, 1, &mqc_states[57], &mqc_states[51]},
-       {0x1201, 0, &mqc_states[58], &mqc_states[52]},
-       {0x1201, 1, &mqc_states[59], &mqc_states[53]},
-       {0x1101, 0, &mqc_states[60], &mqc_states[54]},
-       {0x1101, 1, &mqc_states[61], &mqc_states[55]},
-       {0x0ac1, 0, &mqc_states[62], &mqc_states[56]},
-       {0x0ac1, 1, &mqc_states[63], &mqc_states[57]},
-       {0x09c1, 0, &mqc_states[64], &mqc_states[58]},
-       {0x09c1, 1, &mqc_states[65], &mqc_states[59]},
-       {0x08a1, 0, &mqc_states[66], &mqc_states[60]},
-       {0x08a1, 1, &mqc_states[67], &mqc_states[61]},
-       {0x0521, 0, &mqc_states[68], &mqc_states[62]},
-       {0x0521, 1, &mqc_states[69], &mqc_states[63]},
-       {0x0441, 0, &mqc_states[70], &mqc_states[64]},
-       {0x0441, 1, &mqc_states[71], &mqc_states[65]},
-       {0x02a1, 0, &mqc_states[72], &mqc_states[66]},
-       {0x02a1, 1, &mqc_states[73], &mqc_states[67]},
-       {0x0221, 0, &mqc_states[74], &mqc_states[68]},
-       {0x0221, 1, &mqc_states[75], &mqc_states[69]},
-       {0x0141, 0, &mqc_states[76], &mqc_states[70]},
-       {0x0141, 1, &mqc_states[77], &mqc_states[71]},
-       {0x0111, 0, &mqc_states[78], &mqc_states[72]},
-       {0x0111, 1, &mqc_states[79], &mqc_states[73]},
-       {0x0085, 0, &mqc_states[80], &mqc_states[74]},
-       {0x0085, 1, &mqc_states[81], &mqc_states[75]},
-       {0x0049, 0, &mqc_states[82], &mqc_states[76]},
-       {0x0049, 1, &mqc_states[83], &mqc_states[77]},
-       {0x0025, 0, &mqc_states[84], &mqc_states[78]},
-       {0x0025, 1, &mqc_states[85], &mqc_states[79]},
-       {0x0015, 0, &mqc_states[86], &mqc_states[80]},
-       {0x0015, 1, &mqc_states[87], &mqc_states[81]},
-       {0x0009, 0, &mqc_states[88], &mqc_states[82]},
-       {0x0009, 1, &mqc_states[89], &mqc_states[83]},
-       {0x0005, 0, &mqc_states[90], &mqc_states[84]},
-       {0x0005, 1, &mqc_states[91], &mqc_states[85]},
-       {0x0001, 0, &mqc_states[90], &mqc_states[86]},
-       {0x0001, 1, &mqc_states[91], &mqc_states[87]},
-       {0x5601, 0, &mqc_states[92], &mqc_states[92]},
-       {0x5601, 1, &mqc_states[93], &mqc_states[93]},
+    {0x5601, 0, &mqc_states[2], &mqc_states[3]},
+    {0x5601, 1, &mqc_states[3], &mqc_states[2]},
+    {0x3401, 0, &mqc_states[4], &mqc_states[12]},
+    {0x3401, 1, &mqc_states[5], &mqc_states[13]},
+    {0x1801, 0, &mqc_states[6], &mqc_states[18]},
+    {0x1801, 1, &mqc_states[7], &mqc_states[19]},
+    {0x0ac1, 0, &mqc_states[8], &mqc_states[24]},
+    {0x0ac1, 1, &mqc_states[9], &mqc_states[25]},
+    {0x0521, 0, &mqc_states[10], &mqc_states[58]},
+    {0x0521, 1, &mqc_states[11], &mqc_states[59]},
+    {0x0221, 0, &mqc_states[76], &mqc_states[66]},
+    {0x0221, 1, &mqc_states[77], &mqc_states[67]},
+    {0x5601, 0, &mqc_states[14], &mqc_states[13]},
+    {0x5601, 1, &mqc_states[15], &mqc_states[12]},
+    {0x5401, 0, &mqc_states[16], &mqc_states[28]},
+    {0x5401, 1, &mqc_states[17], &mqc_states[29]},
+    {0x4801, 0, &mqc_states[18], &mqc_states[28]},
+    {0x4801, 1, &mqc_states[19], &mqc_states[29]},
+    {0x3801, 0, &mqc_states[20], &mqc_states[28]},
+    {0x3801, 1, &mqc_states[21], &mqc_states[29]},
+    {0x3001, 0, &mqc_states[22], &mqc_states[34]},
+    {0x3001, 1, &mqc_states[23], &mqc_states[35]},
+    {0x2401, 0, &mqc_states[24], &mqc_states[36]},
+    {0x2401, 1, &mqc_states[25], &mqc_states[37]},
+    {0x1c01, 0, &mqc_states[26], &mqc_states[40]},
+    {0x1c01, 1, &mqc_states[27], &mqc_states[41]},
+    {0x1601, 0, &mqc_states[58], &mqc_states[42]},
+    {0x1601, 1, &mqc_states[59], &mqc_states[43]},
+    {0x5601, 0, &mqc_states[30], &mqc_states[29]},
+    {0x5601, 1, &mqc_states[31], &mqc_states[28]},
+    {0x5401, 0, &mqc_states[32], &mqc_states[28]},
+    {0x5401, 1, &mqc_states[33], &mqc_states[29]},
+    {0x5101, 0, &mqc_states[34], &mqc_states[30]},
+    {0x5101, 1, &mqc_states[35], &mqc_states[31]},
+    {0x4801, 0, &mqc_states[36], &mqc_states[32]},
+    {0x4801, 1, &mqc_states[37], &mqc_states[33]},
+    {0x3801, 0, &mqc_states[38], &mqc_states[34]},
+    {0x3801, 1, &mqc_states[39], &mqc_states[35]},
+    {0x3401, 0, &mqc_states[40], &mqc_states[36]},
+    {0x3401, 1, &mqc_states[41], &mqc_states[37]},
+    {0x3001, 0, &mqc_states[42], &mqc_states[38]},
+    {0x3001, 1, &mqc_states[43], &mqc_states[39]},
+    {0x2801, 0, &mqc_states[44], &mqc_states[38]},
+    {0x2801, 1, &mqc_states[45], &mqc_states[39]},
+    {0x2401, 0, &mqc_states[46], &mqc_states[40]},
+    {0x2401, 1, &mqc_states[47], &mqc_states[41]},
+    {0x2201, 0, &mqc_states[48], &mqc_states[42]},
+    {0x2201, 1, &mqc_states[49], &mqc_states[43]},
+    {0x1c01, 0, &mqc_states[50], &mqc_states[44]},
+    {0x1c01, 1, &mqc_states[51], &mqc_states[45]},
+    {0x1801, 0, &mqc_states[52], &mqc_states[46]},
+    {0x1801, 1, &mqc_states[53], &mqc_states[47]},
+    {0x1601, 0, &mqc_states[54], &mqc_states[48]},
+    {0x1601, 1, &mqc_states[55], &mqc_states[49]},
+    {0x1401, 0, &mqc_states[56], &mqc_states[50]},
+    {0x1401, 1, &mqc_states[57], &mqc_states[51]},
+    {0x1201, 0, &mqc_states[58], &mqc_states[52]},
+    {0x1201, 1, &mqc_states[59], &mqc_states[53]},
+    {0x1101, 0, &mqc_states[60], &mqc_states[54]},
+    {0x1101, 1, &mqc_states[61], &mqc_states[55]},
+    {0x0ac1, 0, &mqc_states[62], &mqc_states[56]},
+    {0x0ac1, 1, &mqc_states[63], &mqc_states[57]},
+    {0x09c1, 0, &mqc_states[64], &mqc_states[58]},
+    {0x09c1, 1, &mqc_states[65], &mqc_states[59]},
+    {0x08a1, 0, &mqc_states[66], &mqc_states[60]},
+    {0x08a1, 1, &mqc_states[67], &mqc_states[61]},
+    {0x0521, 0, &mqc_states[68], &mqc_states[62]},
+    {0x0521, 1, &mqc_states[69], &mqc_states[63]},
+    {0x0441, 0, &mqc_states[70], &mqc_states[64]},
+    {0x0441, 1, &mqc_states[71], &mqc_states[65]},
+    {0x02a1, 0, &mqc_states[72], &mqc_states[66]},
+    {0x02a1, 1, &mqc_states[73], &mqc_states[67]},
+    {0x0221, 0, &mqc_states[74], &mqc_states[68]},
+    {0x0221, 1, &mqc_states[75], &mqc_states[69]},
+    {0x0141, 0, &mqc_states[76], &mqc_states[70]},
+    {0x0141, 1, &mqc_states[77], &mqc_states[71]},
+    {0x0111, 0, &mqc_states[78], &mqc_states[72]},
+    {0x0111, 1, &mqc_states[79], &mqc_states[73]},
+    {0x0085, 0, &mqc_states[80], &mqc_states[74]},
+    {0x0085, 1, &mqc_states[81], &mqc_states[75]},
+    {0x0049, 0, &mqc_states[82], &mqc_states[76]},
+    {0x0049, 1, &mqc_states[83], &mqc_states[77]},
+    {0x0025, 0, &mqc_states[84], &mqc_states[78]},
+    {0x0025, 1, &mqc_states[85], &mqc_states[79]},
+    {0x0015, 0, &mqc_states[86], &mqc_states[80]},
+    {0x0015, 1, &mqc_states[87], &mqc_states[81]},
+    {0x0009, 0, &mqc_states[88], &mqc_states[82]},
+    {0x0009, 1, &mqc_states[89], &mqc_states[83]},
+    {0x0005, 0, &mqc_states[90], &mqc_states[84]},
+    {0x0005, 1, &mqc_states[91], &mqc_states[85]},
+    {0x0001, 0, &mqc_states[90], &mqc_states[86]},
+    {0x0001, 1, &mqc_states[91], &mqc_states[87]},
+    {0x5601, 0, &mqc_states[92], &mqc_states[92]},
+    {0x5601, 1, &mqc_states[93], &mqc_states[93]},
 };
 
-/* 
+/*
 ==========================================================
    local functions
 ==========================================================
 */
 
-static void mqc_byteout(opj_mqc_t *mqc) {
-       if (*mqc->bp == 0xff) {
-               mqc->bp++;
-               *mqc->bp = mqc->c >> 20;
-               mqc->c &= 0xfffff;
-               mqc->ct = 7;
-       } else {
-               if ((mqc->c & 0x8000000) == 0) {        /* ((mqc->c&0x8000000)==0) CHANGE */
-                       mqc->bp++;
-                       *mqc->bp = mqc->c >> 19;
-                       mqc->c &= 0x7ffff;
-                       mqc->ct = 8;
-               } else {
-                       (*mqc->bp)++;
-                       if (*mqc->bp == 0xff) {
-                               mqc->c &= 0x7ffffff;
-                               mqc->bp++;
-                               *mqc->bp = mqc->c >> 20;
-                               mqc->c &= 0xfffff;
-                               mqc->ct = 7;
-                       } else {
-                               mqc->bp++;
-                               *mqc->bp = mqc->c >> 19;
-                               mqc->c &= 0x7ffff;
-                               mqc->ct = 8;
-                       }
-               }
-       }
+static void mqc_byteout(opj_mqc_t *mqc)
+{
+    if (*mqc->bp == 0xff) {
+        mqc->bp++;
+        *mqc->bp = mqc->c >> 20;
+        mqc->c &= 0xfffff;
+        mqc->ct = 7;
+    } else {
+        if ((mqc->c & 0x8000000) == 0) {    /* ((mqc->c&0x8000000)==0) CHANGE */
+            mqc->bp++;
+            *mqc->bp = mqc->c >> 19;
+            mqc->c &= 0x7ffff;
+            mqc->ct = 8;
+        } else {
+            (*mqc->bp)++;
+            if (*mqc->bp == 0xff) {
+                mqc->c &= 0x7ffffff;
+                mqc->bp++;
+                *mqc->bp = mqc->c >> 20;
+                mqc->c &= 0xfffff;
+                mqc->ct = 7;
+            } else {
+                mqc->bp++;
+                *mqc->bp = mqc->c >> 19;
+                mqc->c &= 0x7ffff;
+                mqc->ct = 8;
+            }
+        }
+    }
 }
 
-static void mqc_renorme(opj_mqc_t *mqc) {
-       do {
-               mqc->a <<= 1;
-               mqc->c <<= 1;
-               mqc->ct--;
-               if (mqc->ct == 0) {
-                       mqc_byteout(mqc);
-               }
-       } while ((mqc->a & 0x8000) == 0);
+static void mqc_renorme(opj_mqc_t *mqc)
+{
+    do {
+        mqc->a <<= 1;
+        mqc->c <<= 1;
+        mqc->ct--;
+        if (mqc->ct == 0) {
+            mqc_byteout(mqc);
+        }
+    } while ((mqc->a & 0x8000) == 0);
 }
 
-static void mqc_codemps(opj_mqc_t *mqc) {
-       mqc->a -= (*mqc->curctx)->qeval;
-       if ((mqc->a & 0x8000) == 0) {
-               if (mqc->a < (*mqc->curctx)->qeval) {
-                       mqc->a = (*mqc->curctx)->qeval;
-               } else {
-                       mqc->c += (*mqc->curctx)->qeval;
-               }
-               *mqc->curctx = (*mqc->curctx)->nmps;
-               mqc_renorme(mqc);
-       } else {
-               mqc->c += (*mqc->curctx)->qeval;
-       }
+static void mqc_codemps(opj_mqc_t *mqc)
+{
+    mqc->a -= (*mqc->curctx)->qeval;
+    if ((mqc->a & 0x8000) == 0) {
+        if (mqc->a < (*mqc->curctx)->qeval) {
+            mqc->a = (*mqc->curctx)->qeval;
+        } else {
+            mqc->c += (*mqc->curctx)->qeval;
+        }
+        *mqc->curctx = (*mqc->curctx)->nmps;
+        mqc_renorme(mqc);
+    } else {
+        mqc->c += (*mqc->curctx)->qeval;
+    }
 }
 
-static void mqc_codelps(opj_mqc_t *mqc) {
-       mqc->a -= (*mqc->curctx)->qeval;
-       if (mqc->a < (*mqc->curctx)->qeval) {
-               mqc->c += (*mqc->curctx)->qeval;
-       } else {
-               mqc->a = (*mqc->curctx)->qeval;
-       }
-       *mqc->curctx = (*mqc->curctx)->nlps;
-       mqc_renorme(mqc);
+static void mqc_codelps(opj_mqc_t *mqc)
+{
+    mqc->a -= (*mqc->curctx)->qeval;
+    if (mqc->a < (*mqc->curctx)->qeval) {
+        mqc->c += (*mqc->curctx)->qeval;
+    } else {
+        mqc->a = (*mqc->curctx)->qeval;
+    }
+    *mqc->curctx = (*mqc->curctx)->nlps;
+    mqc_renorme(mqc);
 }
 
-static void mqc_setbits(opj_mqc_t *mqc) {
-       unsigned int tempc = mqc->c + mqc->a;
-       mqc->c |= 0xffff;
-       if (mqc->c >= tempc) {
-               mqc->c -= 0x8000;
-       }
+static void mqc_setbits(opj_mqc_t *mqc)
+{
+    unsigned int tempc = mqc->c + mqc->a;
+    mqc->c |= 0xffff;
+    if (mqc->c >= tempc) {
+        mqc->c -= 0x8000;
+    }
 }
 
-static INLINE int mqc_mpsexchange(opj_mqc_t *const mqc) {
-       int d;
-       if (mqc->a < (*mqc->curctx)->qeval) {
-               d = 1 - (*mqc->curctx)->mps;
-               *mqc->curctx = (*mqc->curctx)->nlps;
-       } else {
-               d = (*mqc->curctx)->mps;
-               *mqc->curctx = (*mqc->curctx)->nmps;
-       }
-       
-       return d;
+static INLINE int mqc_mpsexchange(opj_mqc_t *const mqc)
+{
+    int d;
+    if (mqc->a < (*mqc->curctx)->qeval) {
+        d = 1 - (*mqc->curctx)->mps;
+        *mqc->curctx = (*mqc->curctx)->nlps;
+    } else {
+        d = (*mqc->curctx)->mps;
+        *mqc->curctx = (*mqc->curctx)->nmps;
+    }
+
+    return d;
 }
 
-static INLINE int mqc_lpsexchange(opj_mqc_t *const mqc) {
-       int d;
-       if (mqc->a < (*mqc->curctx)->qeval) {
-               mqc->a = (*mqc->curctx)->qeval;
-               d = (*mqc->curctx)->mps;
-               *mqc->curctx = (*mqc->curctx)->nmps;
-       } else {
-               mqc->a = (*mqc->curctx)->qeval;
-               d = 1 - (*mqc->curctx)->mps;
-               *mqc->curctx = (*mqc->curctx)->nlps;
-       }
-       
-       return d;
+static INLINE int mqc_lpsexchange(opj_mqc_t *const mqc)
+{
+    int d;
+    if (mqc->a < (*mqc->curctx)->qeval) {
+        mqc->a = (*mqc->curctx)->qeval;
+        d = (*mqc->curctx)->mps;
+        *mqc->curctx = (*mqc->curctx)->nmps;
+    } else {
+        mqc->a = (*mqc->curctx)->qeval;
+        d = 1 - (*mqc->curctx)->mps;
+        *mqc->curctx = (*mqc->curctx)->nlps;
+    }
+
+    return d;
 }
 
 #ifdef MQC_PERF_OPT
-static INLINE void mqc_bytein(opj_mqc_t *const mqc) {
-       unsigned int i = *((unsigned int *) mqc->bp);
-       mqc->c += i & 0xffff00;
-       mqc->ct = i & 0x0f;
-       mqc->bp += (i >> 2) & 0x04;
+static INLINE void mqc_bytein(opj_mqc_t *const mqc)
+{
+    unsigned int i = *((unsigned int *) mqc->bp);
+    mqc->c += i & 0xffff00;
+    mqc->ct = i & 0x0f;
+    mqc->bp += (i >> 2) & 0x04;
 }
 #else
-static void mqc_bytein(opj_mqc_t *const mqc) {
-       if (mqc->bp != mqc->end) {
-               unsigned int c;
-               if (mqc->bp + 1 != mqc->end) {
-                       c = *(mqc->bp + 1);
-               } else {
-                       c = 0xff;
-               }
-               if (*mqc->bp == 0xff) {
-                       if (c > 0x8f) {
-                               mqc->c += 0xff00;
-                               mqc->ct = 8;
-                       } else {
-                               mqc->bp++;
-                               mqc->c += c << 9;
-                               mqc->ct = 7;
-                       }
-               } else {
-                       mqc->bp++;
-                       mqc->c += c << 8;
-                       mqc->ct = 8;
-               }
-       } else {
-               mqc->c += 0xff00;
-               mqc->ct = 8;
-       }
+static void mqc_bytein(opj_mqc_t *const mqc)
+{
+    if (mqc->bp != mqc->end) {
+        unsigned int c;
+        if (mqc->bp + 1 != mqc->end) {
+            c = *(mqc->bp + 1);
+        } else {
+            c = 0xff;
+        }
+        if (*mqc->bp == 0xff) {
+            if (c > 0x8f) {
+                mqc->c += 0xff00;
+                mqc->ct = 8;
+            } else {
+                mqc->bp++;
+                mqc->c += c << 9;
+                mqc->ct = 7;
+            }
+        } else {
+            mqc->bp++;
+            mqc->c += c << 8;
+            mqc->ct = 8;
+        }
+    } else {
+        mqc->c += 0xff00;
+        mqc->ct = 8;
+    }
 }
 #endif
 
-static INLINE void mqc_renormd(opj_mqc_t *const mqc) {
-       do {
-               if (mqc->ct == 0) {
-                       mqc_bytein(mqc);
-               }
-               mqc->a <<= 1;
-               mqc->c <<= 1;
-               mqc->ct--;
-       } while (mqc->a < 0x8000);
+static INLINE void mqc_renormd(opj_mqc_t *const mqc)
+{
+    do {
+        if (mqc->ct == 0) {
+            mqc_bytein(mqc);
+        }
+        mqc->a <<= 1;
+        mqc->c <<= 1;
+        mqc->ct--;
+    } while (mqc->a < 0x8000);
 }
 
-/* 
+/*
 ==========================================================
    MQ-Coder interface
 ==========================================================
 */
 
-opj_mqc_t* mqc_create(void) {
-       opj_mqc_t *mqc = (opj_mqc_t*)opj_malloc(sizeof(opj_mqc_t));
+opj_mqc_t* mqc_create(void)
+{
+    opj_mqc_t *mqc = (opj_mqc_t*)opj_malloc(sizeof(opj_mqc_t));
 #ifdef MQC_PERF_OPT
-       mqc->buffer = NULL;
+    mqc->buffer = NULL;
 #endif
-       return mqc;
+    return mqc;
 }
 
-void mqc_destroy(opj_mqc_t *mqc) {
-       if(mqc) {
+void mqc_destroy(opj_mqc_t *mqc)
+{
+    if (mqc) {
 #ifdef MQC_PERF_OPT
-               if (mqc->buffer) {
-                       opj_free(mqc->buffer);
-               }
+        if (mqc->buffer) {
+            opj_free(mqc->buffer);
+        }
 #endif
-               opj_free(mqc);
-       }
+        opj_free(mqc);
+    }
 }
 
-int mqc_numbytes(opj_mqc_t *mqc) {
-       return mqc->bp - mqc->start;
+int mqc_numbytes(opj_mqc_t *mqc)
+{
+    return mqc->bp - mqc->start;
 }
 
-void mqc_init_enc(opj_mqc_t *mqc, unsigned char *bp) {
-       mqc_setcurctx(mqc, 0);
-       mqc->a = 0x8000;
-       mqc->c = 0;
-       mqc->bp = bp - 1;
-       mqc->ct = 12;
-       if (*mqc->bp == 0xff) {
-               mqc->ct = 13;
-       }
-       mqc->start = bp;
+void mqc_init_enc(opj_mqc_t *mqc, unsigned char *bp)
+{
+    mqc_setcurctx(mqc, 0);
+    mqc->a = 0x8000;
+    mqc->c = 0;
+    mqc->bp = bp - 1;
+    mqc->ct = 12;
+    if (*mqc->bp == 0xff) {
+        mqc->ct = 13;
+    }
+    mqc->start = bp;
 }
 
-void mqc_encode(opj_mqc_t *mqc, int d) {
-       if ((*mqc->curctx)->mps == d) {
-               mqc_codemps(mqc);
-       } else {
-               mqc_codelps(mqc);
-       }
+void mqc_encode(opj_mqc_t *mqc, int d)
+{
+    if ((*mqc->curctx)->mps == d) {
+        mqc_codemps(mqc);
+    } else {
+        mqc_codelps(mqc);
+    }
 }
 
-void mqc_flush(opj_mqc_t *mqc) {
-       mqc_setbits(mqc);
-       mqc->c <<= mqc->ct;
-       mqc_byteout(mqc);
-       mqc->c <<= mqc->ct;
-       mqc_byteout(mqc);
-       
-       if (*mqc->bp != 0xff) {
-               mqc->bp++;
-       }
+void mqc_flush(opj_mqc_t *mqc)
+{
+    mqc_setbits(mqc);
+    mqc->c <<= mqc->ct;
+    mqc_byteout(mqc);
+    mqc->c <<= mqc->ct;
+    mqc_byteout(mqc);
+
+    if (*mqc->bp != 0xff) {
+        mqc->bp++;
+    }
 }
 
-void mqc_bypass_init_enc(opj_mqc_t *mqc) {
-       mqc->c = 0;
-       mqc->ct = 8;
-       /*if (*mqc->bp == 0xff) {
-       mqc->ct = 7;
+void mqc_bypass_init_enc(opj_mqc_t *mqc)
+{
+    mqc->c = 0;
+    mqc->ct = 8;
+    /*if (*mqc->bp == 0xff) {
+    mqc->ct = 7;
      } */
 }
 
-void mqc_bypass_enc(opj_mqc_t *mqc, int d) {
-       mqc->ct--;
-       mqc->c = mqc->c + (d << mqc->ct);
-       if (mqc->ct == 0) {
-               mqc->bp++;
-               *mqc->bp = mqc->c;
-               mqc->ct = 8;
-               if (*mqc->bp == 0xff) {
-                       mqc->ct = 7;
-               }
-               mqc->c = 0;
-       }
+void mqc_bypass_enc(opj_mqc_t *mqc, int d)
+{
+    mqc->ct--;
+    mqc->c = mqc->c + (d << mqc->ct);
+    if (mqc->ct == 0) {
+        mqc->bp++;
+        *mqc->bp = mqc->c;
+        mqc->ct = 8;
+        if (*mqc->bp == 0xff) {
+            mqc->ct = 7;
+        }
+        mqc->c = 0;
+    }
 }
 
-int mqc_bypass_flush_enc(opj_mqc_t *mqc) {
-       unsigned char bit_padding;
-       
-       bit_padding = 0;
-       
-       if (mqc->ct != 0) {
-               while (mqc->ct > 0) {
-                       mqc->ct--;
-                       mqc->c += bit_padding << mqc->ct;
-                       bit_padding = (bit_padding + 1) & 0x01;
-               }
-               mqc->bp++;
-               *mqc->bp = mqc->c;
-               mqc->ct = 8;
-               mqc->c = 0;
-       }
-       
-       return 1;
+int mqc_bypass_flush_enc(opj_mqc_t *mqc)
+{
+    unsigned char bit_padding;
+
+    bit_padding = 0;
+
+    if (mqc->ct != 0) {
+        while (mqc->ct > 0) {
+            mqc->ct--;
+            mqc->c += bit_padding << mqc->ct;
+            bit_padding = (bit_padding + 1) & 0x01;
+        }
+        mqc->bp++;
+        *mqc->bp = mqc->c;
+        mqc->ct = 8;
+        mqc->c = 0;
+    }
+
+    return 1;
 }
 
-void mqc_reset_enc(opj_mqc_t *mqc) {
-       mqc_resetstates(mqc);
-       mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46);
-       mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3);
-       mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4);
+void mqc_reset_enc(opj_mqc_t *mqc)
+{
+    mqc_resetstates(mqc);
+    mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46);
+    mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3);
+    mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4);
 }
 
-int mqc_restart_enc(opj_mqc_t *mqc) {
-       int correction = 1;
-       
-       /* <flush part> */
-       int n = 27 - 15 - mqc->ct;
-       mqc->c <<= mqc->ct;
-       while (n > 0) {
-               mqc_byteout(mqc);
-               n -= mqc->ct;
-               mqc->c <<= mqc->ct;
-       }
-       mqc_byteout(mqc);
-       
-       return correction;
+int mqc_restart_enc(opj_mqc_t *mqc)
+{
+    int correction = 1;
+
+    /* <flush part> */
+    int n = 27 - 15 - mqc->ct;
+    mqc->c <<= mqc->ct;
+    while (n > 0) {
+        mqc_byteout(mqc);
+        n -= mqc->ct;
+        mqc->c <<= mqc->ct;
+    }
+    mqc_byteout(mqc);
+
+    return correction;
 }
 
-void mqc_restart_init_enc(opj_mqc_t *mqc) {
-       /* <Re-init part> */
-       mqc_setcurctx(mqc, 0);
-       mqc->a = 0x8000;
-       mqc->c = 0;
-       mqc->ct = 12;
-       mqc->bp--;
-       if (*mqc->bp == 0xff) {
-               mqc->ct = 13;
-       }
+void mqc_restart_init_enc(opj_mqc_t *mqc)
+{
+    /* <Re-init part> */
+    mqc_setcurctx(mqc, 0);
+    mqc->a = 0x8000;
+    mqc->c = 0;
+    mqc->ct = 12;
+    mqc->bp--;
+    if (*mqc->bp == 0xff) {
+        mqc->ct = 13;
+    }
 }
 
-void mqc_erterm_enc(opj_mqc_t *mqc) {
-       int k = 11 - mqc->ct + 1;
-       
-       while (k > 0) {
-               mqc->c <<= mqc->ct;
-               mqc->ct = 0;
-               mqc_byteout(mqc);
-               k -= mqc->ct;
-       }
-       
-       if (*mqc->bp != 0xff) {
-               mqc_byteout(mqc);
-       }
+void mqc_erterm_enc(opj_mqc_t *mqc)
+{
+    int k = 11 - mqc->ct + 1;
+
+    while (k > 0) {
+        mqc->c <<= mqc->ct;
+        mqc->ct = 0;
+        mqc_byteout(mqc);
+        k -= mqc->ct;
+    }
+
+    if (*mqc->bp != 0xff) {
+        mqc_byteout(mqc);
+    }
 }
 
-void mqc_segmark_enc(opj_mqc_t *mqc) {
-       int i;
-       mqc_setcurctx(mqc, 18);
-       
-       for (i = 1; i < 5; i++) {
-               mqc_encode(mqc, i % 2);
-       }
+void mqc_segmark_enc(opj_mqc_t *mqc)
+{
+    int i;
+    mqc_setcurctx(mqc, 18);
+
+    for (i = 1; i < 5; i++) {
+        mqc_encode(mqc, i % 2);
+    }
 }
 
-void mqc_init_dec(opj_mqc_t *mqc, unsigned char *bp, int len) {
-       mqc_setcurctx(mqc, 0);
-       mqc->start = bp;
-       mqc->end = bp + len;
-       mqc->bp = bp;
-       if (len==0) mqc->c = 0xff << 16;
-       else mqc->c = *mqc->bp << 16;
+void mqc_init_dec(opj_mqc_t *mqc, unsigned char *bp, int len)
+{
+    mqc_setcurctx(mqc, 0);
+    mqc->start = bp;
+    mqc->end = bp + len;
+    mqc->bp = bp;
+    if (len == 0) {
+        mqc->c = 0xff << 16;
+    } else {
+        mqc->c = *mqc->bp << 16;
+    }
 
 #ifdef MQC_PERF_OPT
-       {
-               unsigned int c;
-               unsigned int *ip;
-               unsigned char *end = mqc->end - 1;
-               mqc->buffer = opj_realloc(mqc->buffer, (len + 1) * sizeof(unsigned int));
-               ip = (unsigned int *) mqc->buffer;
-
-               while (bp < end) {
-                       c = *(bp + 1);
-                       if (*bp == 0xff) {
-                               if (c > 0x8f) {
-                                       break;
-                               } else {
-                                       *ip = 0x00000017 | (c << 9);
-                               }
-                       } else {
-                               *ip = 0x00000018 | (c << 8);
-                       }
-                       bp++;
-                       ip++;
-               }
-
-               /* Handle last byte of data */
-               c = 0xff;
-               if (*bp == 0xff) {
-                       *ip = 0x0000ff18;
-               } else {
-                       bp++;
-                       *ip = 0x00000018 | (c << 8);
-               }
-               ip++;
-
-               *ip = 0x0000ff08;
-               mqc->bp = mqc->buffer;
-       }
+    {
+        unsigned int c;
+        unsigned int *ip;
+        unsigned char *end = mqc->end - 1;
+        mqc->buffer = opj_realloc(mqc->buffer, (len + 1) * sizeof(unsigned int));
+        ip = (unsigned int *) mqc->buffer;
+
+        while (bp < end) {
+            c = *(bp + 1);
+            if (*bp == 0xff) {
+                if (c > 0x8f) {
+                    break;
+                } else {
+                    *ip = 0x00000017 | (c << 9);
+                }
+            } else {
+                *ip = 0x00000018 | (c << 8);
+            }
+            bp++;
+            ip++;
+        }
+
+        /* Handle last byte of data */
+        c = 0xff;
+        if (*bp == 0xff) {
+            *ip = 0x0000ff18;
+        } else {
+            bp++;
+            *ip = 0x00000018 | (c << 8);
+        }
+        ip++;
+
+        *ip = 0x0000ff08;
+        mqc->bp = mqc->buffer;
+    }
 #endif
-       mqc_bytein(mqc);
-       mqc->c <<= 7;
-       mqc->ct -= 7;
-       mqc->a = 0x8000;
+    mqc_bytein(mqc);
+    mqc->c <<= 7;
+    mqc->ct -= 7;
+    mqc->a = 0x8000;
 }
 
-int mqc_decode(opj_mqc_t *const mqc) {
-       int d;
-       mqc->a -= (*mqc->curctx)->qeval;
-       if ((mqc->c >> 16) < (*mqc->curctx)->qeval) {
-               d = mqc_lpsexchange(mqc);
-               mqc_renormd(mqc);
-       } else {
-               mqc->c -= (*mqc->curctx)->qeval << 16;
-               if ((mqc->a & 0x8000) == 0) {
-                       d = mqc_mpsexchange(mqc);
-                       mqc_renormd(mqc);
-               } else {
-                       d = (*mqc->curctx)->mps;
-               }
-       }
-
-       return d;
+int mqc_decode(opj_mqc_t *const mqc)
+{
+    int d;
+    mqc->a -= (*mqc->curctx)->qeval;
+    if ((mqc->c >> 16) < (*mqc->curctx)->qeval) {
+        d = mqc_lpsexchange(mqc);
+        mqc_renormd(mqc);
+    } else {
+        mqc->c -= (*mqc->curctx)->qeval << 16;
+        if ((mqc->a & 0x8000) == 0) {
+            d = mqc_mpsexchange(mqc);
+            mqc_renormd(mqc);
+        } else {
+            d = (*mqc->curctx)->mps;
+        }
+    }
+
+    return d;
 }
 
-void mqc_resetstates(opj_mqc_t *mqc) {
-       int i;
-       for (i = 0; i < MQC_NUMCTXS; i++) {
-               mqc->ctxs[i] = mqc_states;
-       }
+void mqc_resetstates(opj_mqc_t *mqc)
+{
+    int i;
+    for (i = 0; i < MQC_NUMCTXS; i++) {
+        mqc->ctxs[i] = mqc_states;
+    }
 }
 
-void mqc_setstate(opj_mqc_t *mqc, int ctxno, int msb, int prob) {
-       mqc->ctxs[ctxno] = &mqc_states[msb + (prob << 1)];
+void mqc_setstate(opj_mqc_t *mqc, int ctxno, int msb, int prob)
+{
+    mqc->ctxs[ctxno] = &mqc_states[msb + (prob << 1)];
 }
 
 
index a2621f5dce096e585e1da4055ac313b4e1a9865d..ae4bf1e42b506984f9664b4e754b4eb2078b022d 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
 #ifdef _WIN32
 #ifndef OPJ_STATIC
 BOOL APIENTRY
-DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
+DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
+{
 
-       OPJ_ARG_NOT_USED(lpReserved);
-       OPJ_ARG_NOT_USED(hModule);
+    OPJ_ARG_NOT_USED(lpReserved);
+    OPJ_ARG_NOT_USED(hModule);
 
-       switch (ul_reason_for_call) {
-               case DLL_PROCESS_ATTACH :
-                       break;
-               case DLL_PROCESS_DETACH :
-                       break;
-               case DLL_THREAD_ATTACH :
-               case DLL_THREAD_DETACH :
-                       break;
+    switch (ul_reason_for_call) {
+    case DLL_PROCESS_ATTACH :
+        break;
+    case DLL_PROCESS_DETACH :
+        break;
+    case DLL_THREAD_ATTACH :
+    case DLL_THREAD_DETACH :
+        break;
     }
 
     return TRUE;
@@ -63,285 +64,311 @@ DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
 /* ---------------------------------------------------------------------- */
 
 
-const char* OPJ_CALLCONV opj_version(void) {
+const char* OPJ_CALLCONV opj_version(void)
+{
     return OPJ_PACKAGE_VERSION;
 }
 
-opj_dinfo_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT format) {
-       opj_dinfo_t *dinfo = (opj_dinfo_t*)opj_calloc(1, sizeof(opj_dinfo_t));
-       if(!dinfo) return NULL;
-       dinfo->is_decompressor = OPJ_TRUE;
-       switch(format) {
-               case CODEC_J2K:
-               case CODEC_JPT:
-                       /* get a J2K decoder handle */
-                       dinfo->j2k_handle = (void*)j2k_create_decompress((opj_common_ptr)dinfo);
-                       if(!dinfo->j2k_handle) {
-                               opj_free(dinfo);
-                               return NULL;
-                       }
-                       break;
-               case CODEC_JP2:
-                       /* get a JP2 decoder handle */
-                       dinfo->jp2_handle = (void*)jp2_create_decompress((opj_common_ptr)dinfo);
-                       if(!dinfo->jp2_handle) {
-                               opj_free(dinfo);
-                               return NULL;
-                       }
-                       break;
-               case CODEC_UNKNOWN:
-               default:
-                       opj_free(dinfo);
-                       return NULL;
-       }
+opj_dinfo_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT format)
+{
+    opj_dinfo_t *dinfo = (opj_dinfo_t*)opj_calloc(1, sizeof(opj_dinfo_t));
+    if (!dinfo) {
+        return NULL;
+    }
+    dinfo->is_decompressor = OPJ_TRUE;
+    switch (format) {
+    case CODEC_J2K:
+    case CODEC_JPT:
+        /* get a J2K decoder handle */
+        dinfo->j2k_handle = (void*)j2k_create_decompress((opj_common_ptr)dinfo);
+        if (!dinfo->j2k_handle) {
+            opj_free(dinfo);
+            return NULL;
+        }
+        break;
+    case CODEC_JP2:
+        /* get a JP2 decoder handle */
+        dinfo->jp2_handle = (void*)jp2_create_decompress((opj_common_ptr)dinfo);
+        if (!dinfo->jp2_handle) {
+            opj_free(dinfo);
+            return NULL;
+        }
+        break;
+    case CODEC_UNKNOWN:
+    default:
+        opj_free(dinfo);
+        return NULL;
+    }
 
-       dinfo->codec_format = format;
+    dinfo->codec_format = format;
 
-       return dinfo;
+    return dinfo;
 }
 
-void OPJ_CALLCONV opj_destroy_decompress(opj_dinfo_t *dinfo) {
-       if(dinfo) {
-               /* destroy the codec */
-               switch(dinfo->codec_format) {
-                       case CODEC_J2K:
-                       case CODEC_JPT:
-                               j2k_destroy_decompress((opj_j2k_t*)dinfo->j2k_handle);
-                               break;
-                       case CODEC_JP2:
-                               jp2_destroy_decompress((opj_jp2_t*)dinfo->jp2_handle);
-                               break;
-                       case CODEC_UNKNOWN:
-                       default:
-                               break;
-               }
-               /* destroy the decompressor */
-               opj_free(dinfo);
-       }
+void OPJ_CALLCONV opj_destroy_decompress(opj_dinfo_t *dinfo)
+{
+    if (dinfo) {
+        /* destroy the codec */
+        switch (dinfo->codec_format) {
+        case CODEC_J2K:
+        case CODEC_JPT:
+            j2k_destroy_decompress((opj_j2k_t*)dinfo->j2k_handle);
+            break;
+        case CODEC_JP2:
+            jp2_destroy_decompress((opj_jp2_t*)dinfo->jp2_handle);
+            break;
+        case CODEC_UNKNOWN:
+        default:
+            break;
+        }
+        /* destroy the decompressor */
+        opj_free(dinfo);
+    }
 }
 
-void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t *parameters) {
-       if(parameters) {
-               memset(parameters, 0, sizeof(opj_dparameters_t));
-               /* default decoding parameters */
-               parameters->cp_layer = 0;
-               parameters->cp_reduce = 0;
-               parameters->cp_limit_decoding = NO_LIMITATION;
+void OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t
+        *parameters)
+{
+    if (parameters) {
+        memset(parameters, 0, sizeof(opj_dparameters_t));
+        /* default decoding parameters */
+        parameters->cp_layer = 0;
+        parameters->cp_reduce = 0;
+        parameters->cp_limit_decoding = NO_LIMITATION;
 
-               parameters->decod_format = -1;
-               parameters->cod_format = -1;
-               parameters->flags = 0;          
-/* UniPG>> */
+        parameters->decod_format = -1;
+        parameters->cod_format = -1;
+        parameters->flags = 0;
+        /* UniPG>> */
 #ifdef USE_JPWL
-               parameters->jpwl_correct = OPJ_FALSE;
-               parameters->jpwl_exp_comps = JPWL_EXPECTED_COMPONENTS;
-               parameters->jpwl_max_tiles = JPWL_MAXIMUM_TILES;
+        parameters->jpwl_correct = OPJ_FALSE;
+        parameters->jpwl_exp_comps = JPWL_EXPECTED_COMPONENTS;
+        parameters->jpwl_max_tiles = JPWL_MAXIMUM_TILES;
 #endif /* USE_JPWL */
-/* <<UniPG */
-       }
+        /* <<UniPG */
+    }
 }
 
-void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo, opj_dparameters_t *parameters) {
-       if(dinfo && parameters) {
-               switch(dinfo->codec_format) {
-                       case CODEC_J2K:
-                       case CODEC_JPT:
-                               j2k_setup_decoder((opj_j2k_t*)dinfo->j2k_handle, parameters);
-                               break;
-                       case CODEC_JP2:
-                               jp2_setup_decoder((opj_jp2_t*)dinfo->jp2_handle, parameters);
-                               break;
-                       case CODEC_UNKNOWN:
-                       default:
-                               break;
-               }
-       }
+void OPJ_CALLCONV opj_setup_decoder(opj_dinfo_t *dinfo,
+                                    opj_dparameters_t *parameters)
+{
+    if (dinfo && parameters) {
+        switch (dinfo->codec_format) {
+        case CODEC_J2K:
+        case CODEC_JPT:
+            j2k_setup_decoder((opj_j2k_t*)dinfo->j2k_handle, parameters);
+            break;
+        case CODEC_JP2:
+            jp2_setup_decoder((opj_jp2_t*)dinfo->jp2_handle, parameters);
+            break;
+        case CODEC_UNKNOWN:
+        default:
+            break;
+        }
+    }
 }
 
-opj_image_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, opj_cio_t *cio) {
-       return opj_decode_with_info(dinfo, cio, NULL);
+opj_image_t* OPJ_CALLCONV opj_decode(opj_dinfo_t *dinfo, opj_cio_t *cio)
+{
+    return opj_decode_with_info(dinfo, cio, NULL);
 }
 
-opj_image_t* OPJ_CALLCONV opj_decode_with_info(opj_dinfo_t *dinfo, opj_cio_t *cio, opj_codestream_info_t *cstr_info) {
-       if(dinfo && cio) {
-               switch(dinfo->codec_format) {
-                       case CODEC_J2K:
-                               return j2k_decode((opj_j2k_t*)dinfo->j2k_handle, cio, cstr_info);
-                       case CODEC_JPT:
-                               return j2k_decode_jpt_stream((opj_j2k_t*)dinfo->j2k_handle, cio, cstr_info);
-                       case CODEC_JP2:
-                               return opj_jp2_decode((opj_jp2_t*)dinfo->jp2_handle, cio, cstr_info);
-                       case CODEC_UNKNOWN:
-                       default:
-                               break;
-               }
-       }
-       return NULL;
+opj_image_t* OPJ_CALLCONV opj_decode_with_info(opj_dinfo_t *dinfo,
+        opj_cio_t *cio, opj_codestream_info_t *cstr_info)
+{
+    if (dinfo && cio) {
+        switch (dinfo->codec_format) {
+        case CODEC_J2K:
+            return j2k_decode((opj_j2k_t*)dinfo->j2k_handle, cio, cstr_info);
+        case CODEC_JPT:
+            return j2k_decode_jpt_stream((opj_j2k_t*)dinfo->j2k_handle, cio, cstr_info);
+        case CODEC_JP2:
+            return opj_jp2_decode((opj_jp2_t*)dinfo->jp2_handle, cio, cstr_info);
+        case CODEC_UNKNOWN:
+        default:
+            break;
+        }
+    }
+    return NULL;
 }
 
-opj_cinfo_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT format) {
-       opj_cinfo_t *cinfo = (opj_cinfo_t*)opj_calloc(1, sizeof(opj_cinfo_t));
-       if(!cinfo) return NULL;
-       cinfo->is_decompressor = OPJ_FALSE;
-       switch(format) {
-               case CODEC_J2K:
-                       /* get a J2K coder handle */
-                       cinfo->j2k_handle = (void*)j2k_create_compress((opj_common_ptr)cinfo);
-                       if(!cinfo->j2k_handle) {
-                               opj_free(cinfo);
-                               return NULL;
-                       }
-                       break;
-               case CODEC_JP2:
-                       /* get a JP2 coder handle */
-                       cinfo->jp2_handle = (void*)jp2_create_compress((opj_common_ptr)cinfo);
-                       if(!cinfo->jp2_handle) {
-                               opj_free(cinfo);
-                               return NULL;
-                       }
-                       break;
-               case CODEC_JPT:
-               case CODEC_UNKNOWN:
-               default:
-                       opj_free(cinfo);
-                       return NULL;
-       }
+opj_cinfo_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT format)
+{
+    opj_cinfo_t *cinfo = (opj_cinfo_t*)opj_calloc(1, sizeof(opj_cinfo_t));
+    if (!cinfo) {
+        return NULL;
+    }
+    cinfo->is_decompressor = OPJ_FALSE;
+    switch (format) {
+    case CODEC_J2K:
+        /* get a J2K coder handle */
+        cinfo->j2k_handle = (void*)j2k_create_compress((opj_common_ptr)cinfo);
+        if (!cinfo->j2k_handle) {
+            opj_free(cinfo);
+            return NULL;
+        }
+        break;
+    case CODEC_JP2:
+        /* get a JP2 coder handle */
+        cinfo->jp2_handle = (void*)jp2_create_compress((opj_common_ptr)cinfo);
+        if (!cinfo->jp2_handle) {
+            opj_free(cinfo);
+            return NULL;
+        }
+        break;
+    case CODEC_JPT:
+    case CODEC_UNKNOWN:
+    default:
+        opj_free(cinfo);
+        return NULL;
+    }
 
-       cinfo->codec_format = format;
+    cinfo->codec_format = format;
 
-       return cinfo;
+    return cinfo;
 }
 
-void OPJ_CALLCONV opj_destroy_compress(opj_cinfo_t *cinfo) {
-       if(cinfo) {
-               /* destroy the codec */
-               switch(cinfo->codec_format) {
-                       case CODEC_J2K:
-                               j2k_destroy_compress((opj_j2k_t*)cinfo->j2k_handle);
-                               break;
-                       case CODEC_JP2:
-                               jp2_destroy_compress((opj_jp2_t*)cinfo->jp2_handle);
-                               break;
-                       case CODEC_JPT:
-                       case CODEC_UNKNOWN:
-                       default:
-                               break;
-               }
-               /* destroy the decompressor */
-               opj_free(cinfo);
-       }
+void OPJ_CALLCONV opj_destroy_compress(opj_cinfo_t *cinfo)
+{
+    if (cinfo) {
+        /* destroy the codec */
+        switch (cinfo->codec_format) {
+        case CODEC_J2K:
+            j2k_destroy_compress((opj_j2k_t*)cinfo->j2k_handle);
+            break;
+        case CODEC_JP2:
+            jp2_destroy_compress((opj_jp2_t*)cinfo->jp2_handle);
+            break;
+        case CODEC_JPT:
+        case CODEC_UNKNOWN:
+        default:
+            break;
+        }
+        /* destroy the decompressor */
+        opj_free(cinfo);
+    }
 }
 
-void OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameters_t *parameters) {
-       if(parameters) {
-               memset(parameters, 0, sizeof(opj_cparameters_t));
-               /* default coding parameters */
-               parameters->cp_cinema = OFF; 
-               parameters->max_comp_size = 0;
-               parameters->numresolution = 6;
-               parameters->cp_rsiz = STD_RSIZ;
-               parameters->cblockw_init = 64;
-               parameters->cblockh_init = 64;
-               parameters->prog_order = LRCP;
-               parameters->roi_compno = -1;            /* no ROI */
-               parameters->subsampling_dx = 1;
-               parameters->subsampling_dy = 1;
-               parameters->tp_on = 0;
-               parameters->decod_format = -1;
-               parameters->cod_format = -1;
-               parameters->tcp_rates[0] = 0;   
-               parameters->tcp_numlayers = 0;
-    parameters->cp_disto_alloc = 0;
-               parameters->cp_fixed_alloc = 0;
-               parameters->cp_fixed_quality = 0;
-/* UniPG>> */
+void OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameters_t
+        *parameters)
+{
+    if (parameters) {
+        memset(parameters, 0, sizeof(opj_cparameters_t));
+        /* default coding parameters */
+        parameters->cp_cinema = OFF;
+        parameters->max_comp_size = 0;
+        parameters->numresolution = 6;
+        parameters->cp_rsiz = STD_RSIZ;
+        parameters->cblockw_init = 64;
+        parameters->cblockh_init = 64;
+        parameters->prog_order = LRCP;
+        parameters->roi_compno = -1;        /* no ROI */
+        parameters->subsampling_dx = 1;
+        parameters->subsampling_dy = 1;
+        parameters->tp_on = 0;
+        parameters->decod_format = -1;
+        parameters->cod_format = -1;
+        parameters->tcp_rates[0] = 0;
+        parameters->tcp_numlayers = 0;
+        parameters->cp_disto_alloc = 0;
+        parameters->cp_fixed_alloc = 0;
+        parameters->cp_fixed_quality = 0;
+        /* UniPG>> */
 #ifdef USE_JPWL
-               parameters->jpwl_epc_on = OPJ_FALSE;
-               parameters->jpwl_hprot_MH = -1; /* -1 means unassigned */
-               {
-                       int i;
-                       for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) {
-                               parameters->jpwl_hprot_TPH_tileno[i] = -1; /* unassigned */
-                               parameters->jpwl_hprot_TPH[i] = 0; /* absent */
-                       }
-               };
-               {
-                       int i;
-                       for (i = 0; i < JPWL_MAX_NO_PACKSPECS; i++) {
-                               parameters->jpwl_pprot_tileno[i] = -1; /* unassigned */
-                               parameters->jpwl_pprot_packno[i] = -1; /* unassigned */
-                               parameters->jpwl_pprot[i] = 0; /* absent */
-                       }
-               };
-               parameters->jpwl_sens_size = 0; /* 0 means no ESD */
-               parameters->jpwl_sens_addr = 0; /* 0 means auto */
-               parameters->jpwl_sens_range = 0; /* 0 means packet */
-               parameters->jpwl_sens_MH = -1; /* -1 means unassigned */
-               {
-                       int i;
-                       for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) {
-                               parameters->jpwl_sens_TPH_tileno[i] = -1; /* unassigned */
-                               parameters->jpwl_sens_TPH[i] = -1; /* absent */
-                       }
-               };
+        parameters->jpwl_epc_on = OPJ_FALSE;
+        parameters->jpwl_hprot_MH = -1; /* -1 means unassigned */
+        {
+            int i;
+            for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) {
+                parameters->jpwl_hprot_TPH_tileno[i] = -1; /* unassigned */
+                parameters->jpwl_hprot_TPH[i] = 0; /* absent */
+            }
+        };
+        {
+            int i;
+            for (i = 0; i < JPWL_MAX_NO_PACKSPECS; i++) {
+                parameters->jpwl_pprot_tileno[i] = -1; /* unassigned */
+                parameters->jpwl_pprot_packno[i] = -1; /* unassigned */
+                parameters->jpwl_pprot[i] = 0; /* absent */
+            }
+        };
+        parameters->jpwl_sens_size = 0; /* 0 means no ESD */
+        parameters->jpwl_sens_addr = 0; /* 0 means auto */
+        parameters->jpwl_sens_range = 0; /* 0 means packet */
+        parameters->jpwl_sens_MH = -1; /* -1 means unassigned */
+        {
+            int i;
+            for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) {
+                parameters->jpwl_sens_TPH_tileno[i] = -1; /* unassigned */
+                parameters->jpwl_sens_TPH[i] = -1; /* absent */
+            }
+        };
 #endif /* USE_JPWL */
-/* <<UniPG */
-       }
+        /* <<UniPG */
+    }
 }
 
-void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo, opj_cparameters_t *parameters, opj_image_t *image) {
-       if(cinfo && parameters && image) {
-               switch(cinfo->codec_format) {
-                       case CODEC_J2K:
-                               j2k_setup_encoder((opj_j2k_t*)cinfo->j2k_handle, parameters, image);
-                               break;
-                       case CODEC_JP2:
-                               jp2_setup_encoder((opj_jp2_t*)cinfo->jp2_handle, parameters, image);
-                               break;
-                       case CODEC_JPT:
-                       case CODEC_UNKNOWN:
-                       default:
-                               break;
-               }
-       }
+void OPJ_CALLCONV opj_setup_encoder(opj_cinfo_t *cinfo,
+                                    opj_cparameters_t *parameters, opj_image_t *image)
+{
+    if (cinfo && parameters && image) {
+        switch (cinfo->codec_format) {
+        case CODEC_J2K:
+            j2k_setup_encoder((opj_j2k_t*)cinfo->j2k_handle, parameters, image);
+            break;
+        case CODEC_JP2:
+            jp2_setup_encoder((opj_jp2_t*)cinfo->jp2_handle, parameters, image);
+            break;
+        case CODEC_JPT:
+        case CODEC_UNKNOWN:
+        default:
+            break;
+        }
+    }
 }
 
-opj_bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, char *index) {
-       if (index != NULL)
-               opj_event_msg((opj_common_ptr)cinfo, EVT_WARNING, "Set index to NULL when calling the opj_encode function.\n"
-               "To extract the index, use the opj_encode_with_info() function.\n"
-               "No index will be generated during this encoding\n");
-       return opj_encode_with_info(cinfo, cio, image, NULL);
+opj_bool OPJ_CALLCONV opj_encode(opj_cinfo_t *cinfo, opj_cio_t *cio,
+                                 opj_image_t *image, char *index)
+{
+    if (index != NULL)
+        opj_event_msg((opj_common_ptr)cinfo, EVT_WARNING,
+                      "Set index to NULL when calling the opj_encode function.\n"
+                      "To extract the index, use the opj_encode_with_info() function.\n"
+                      "No index will be generated during this encoding\n");
+    return opj_encode_with_info(cinfo, cio, image, NULL);
 }
 
-opj_bool OPJ_CALLCONV opj_encode_with_info(opj_cinfo_t *cinfo, opj_cio_t *cio, opj_image_t *image, opj_codestream_info_t *cstr_info) {
-       if(cinfo && cio && image) {
-               switch(cinfo->codec_format) {
-                       case CODEC_J2K:
-                               return j2k_encode((opj_j2k_t*)cinfo->j2k_handle, cio, image, cstr_info);
-                       case CODEC_JP2:
-                               return opj_jp2_encode((opj_jp2_t*)cinfo->jp2_handle, cio, image, cstr_info);        
-                       case CODEC_JPT:
-                       case CODEC_UNKNOWN:
-                       default:
-                               break;
-               }
-       }
-       return OPJ_FALSE;
+opj_bool OPJ_CALLCONV opj_encode_with_info(opj_cinfo_t *cinfo, opj_cio_t *cio,
+        opj_image_t *image, opj_codestream_info_t *cstr_info)
+{
+    if (cinfo && cio && image) {
+        switch (cinfo->codec_format) {
+        case CODEC_J2K:
+            return j2k_encode((opj_j2k_t*)cinfo->j2k_handle, cio, image, cstr_info);
+        case CODEC_JP2:
+            return opj_jp2_encode((opj_jp2_t*)cinfo->jp2_handle, cio, image, cstr_info);
+        case CODEC_JPT:
+        case CODEC_UNKNOWN:
+        default:
+            break;
+        }
+    }
+    return OPJ_FALSE;
 }
 
-void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_t *cstr_info) {
-       if (cstr_info) {
-               int tileno;
-               for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) {
-                       opj_tile_info_t *tile_info = &cstr_info->tile[tileno];
-                       opj_free(tile_info->thresh);
-                       opj_free(tile_info->packet);
-                       opj_free(tile_info->tp);
-                       opj_free(tile_info->marker);
-               }
-               opj_free(cstr_info->tile);
-               opj_free(cstr_info->marker);
-               opj_free(cstr_info->numdecompos);
-       }
+void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_t *cstr_info)
+{
+    if (cstr_info) {
+        int tileno;
+        for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) {
+            opj_tile_info_t *tile_info = &cstr_info->tile[tileno];
+            opj_free(tile_info->thresh);
+            opj_free(tile_info->packet);
+            opj_free(tile_info->tp);
+            opj_free(tile_info->marker);
+        }
+        opj_free(cstr_info->tile);
+        opj_free(cstr_info->marker);
+        opj_free(cstr_info->numdecompos);
+    }
 }
index a22078bb508432c2a104682adb8d05af68bd9c0e..d0fdb9b1959378f01e7de2922253cfad9f434084 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * Copyright (c) 2006-2007, Parvatha Elangovan
 /**
 Get next packet in layer-resolution-component-precinct order.
 @param pi packet iterator to modify
-@return returns false if pi pointed to the last packet or else returns true 
+@return returns false if pi pointed to the last packet or else returns true
 */
 static opj_bool pi_next_lrcp(opj_pi_iterator_t * pi);
 /**
 Get next packet in resolution-layer-component-precinct order.
 @param pi packet iterator to modify
-@return returns false if pi pointed to the last packet or else returns true 
+@return returns false if pi pointed to the last packet or else returns true
 */
 static opj_bool pi_next_rlcp(opj_pi_iterator_t * pi);
 /**
 Get next packet in resolution-precinct-component-layer order.
 @param pi packet iterator to modify
-@return returns false if pi pointed to the last packet or else returns true 
+@return returns false if pi pointed to the last packet or else returns true
 */
 static opj_bool pi_next_rpcl(opj_pi_iterator_t * pi);
 /**
 Get next packet in precinct-component-resolution-layer order.
 @param pi packet iterator to modify
-@return returns false if pi pointed to the last packet or else returns true 
+@return returns false if pi pointed to the last packet or else returns true
 */
 static opj_bool pi_next_pcrl(opj_pi_iterator_t * pi);
 /**
 Get next packet in component-precinct-resolution-layer order.
 @param pi packet iterator to modify
-@return returns false if pi pointed to the last packet or else returns true 
+@return returns false if pi pointed to the last packet or else returns true
 */
 static opj_bool pi_next_cprl(opj_pi_iterator_t * pi);
 
@@ -79,891 +79,957 @@ static opj_bool pi_next_cprl(opj_pi_iterator_t * pi);
 
 /*@}*/
 
-/* 
+/*
 ==========================================================
    local functions
 ==========================================================
 */
 
-static opj_bool pi_next_lrcp(opj_pi_iterator_t * pi) {
-       opj_pi_comp_t *comp = NULL;
-       opj_pi_resolution_t *res = NULL;
-       long index = 0;
-       
-       if (!pi->first) {
-               comp = &pi->comps[pi->compno];
-               res = &comp->resolutions[pi->resno];
-               goto LABEL_SKIP;
-       } else {
-               pi->first = 0;
-       }
-
-       for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
-               for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1;
-               pi->resno++) {
-                       for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-                               comp = &pi->comps[pi->compno];
-                               if (pi->resno >= comp->numresolutions) {
-                                       continue;
-                               }
-                               res = &comp->resolutions[pi->resno];
-                               if (!pi->tp_on){
-                                       pi->poc.precno1 = res->pw * res->ph;
-                               }
-                               for (pi->precno = pi->poc.precno0; pi->precno < pi->poc.precno1; pi->precno++) {
-                                       index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p;
-                                       if (!pi->include[index]) {
-                                               pi->include[index] = 1;
-                                               return OPJ_TRUE;
-                                       }
-LABEL_SKIP:;
-                               }
-                       }
-               }
-       }
-       
-       return OPJ_FALSE;
+static opj_bool pi_next_lrcp(opj_pi_iterator_t * pi)
+{
+    opj_pi_comp_t *comp = NULL;
+    opj_pi_resolution_t *res = NULL;
+    long index = 0;
+
+    if (!pi->first) {
+        comp = &pi->comps[pi->compno];
+        res = &comp->resolutions[pi->resno];
+        goto LABEL_SKIP;
+    } else {
+        pi->first = 0;
+    }
+
+    for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
+        for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1;
+                pi->resno++) {
+            for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
+                comp = &pi->comps[pi->compno];
+                if (pi->resno >= comp->numresolutions) {
+                    continue;
+                }
+                res = &comp->resolutions[pi->resno];
+                if (!pi->tp_on) {
+                    pi->poc.precno1 = res->pw * res->ph;
+                }
+                for (pi->precno = pi->poc.precno0; pi->precno < pi->poc.precno1; pi->precno++) {
+                    index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
+                            pi->step_c + pi->precno * pi->step_p;
+                    if (!pi->include[index]) {
+                        pi->include[index] = 1;
+                        return OPJ_TRUE;
+                    }
+LABEL_SKIP:
+                    ;
+                }
+            }
+        }
+    }
+
+    return OPJ_FALSE;
 }
 
-static opj_bool pi_next_rlcp(opj_pi_iterator_t * pi) {
-       opj_pi_comp_t *comp = NULL;
-       opj_pi_resolution_t *res = NULL;
-       long index = 0;
-
-       if (!pi->first) {
-               comp = &pi->comps[pi->compno];
-               res = &comp->resolutions[pi->resno];
-               goto LABEL_SKIP;
-       } else {
-               pi->first = 0;
-       }
-
-       for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) {
-               for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
-                       for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-                               comp = &pi->comps[pi->compno];
-                               if (pi->resno >= comp->numresolutions) {
-                                       continue;
-                               }
-                               res = &comp->resolutions[pi->resno];
-                               if(!pi->tp_on){
-                                       pi->poc.precno1 = res->pw * res->ph;
-                               }
-                               for (pi->precno = pi->poc.precno0; pi->precno < pi->poc.precno1; pi->precno++) {
-                                       index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p;
-                                       if (!pi->include[index]) {
-                                               pi->include[index] = 1;
-                                               return OPJ_TRUE;
-                                       }
-LABEL_SKIP:;
-                               }
-                       }
-               }
-       }
-       
-       return OPJ_FALSE;
+static opj_bool pi_next_rlcp(opj_pi_iterator_t * pi)
+{
+    opj_pi_comp_t *comp = NULL;
+    opj_pi_resolution_t *res = NULL;
+    long index = 0;
+
+    if (!pi->first) {
+        comp = &pi->comps[pi->compno];
+        res = &comp->resolutions[pi->resno];
+        goto LABEL_SKIP;
+    } else {
+        pi->first = 0;
+    }
+
+    for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) {
+        for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
+            for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
+                comp = &pi->comps[pi->compno];
+                if (pi->resno >= comp->numresolutions) {
+                    continue;
+                }
+                res = &comp->resolutions[pi->resno];
+                if (!pi->tp_on) {
+                    pi->poc.precno1 = res->pw * res->ph;
+                }
+                for (pi->precno = pi->poc.precno0; pi->precno < pi->poc.precno1; pi->precno++) {
+                    index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
+                            pi->step_c + pi->precno * pi->step_p;
+                    if (!pi->include[index]) {
+                        pi->include[index] = 1;
+                        return OPJ_TRUE;
+                    }
+LABEL_SKIP:
+                    ;
+                }
+            }
+        }
+    }
+
+    return OPJ_FALSE;
 }
 
-static opj_bool pi_next_rpcl(opj_pi_iterator_t * pi) {
-       opj_pi_comp_t *comp = NULL;
-       opj_pi_resolution_t *res = NULL;
-       long index = 0;
-
-       if (!pi->first) {
-               goto LABEL_SKIP;
-       } else {
-               int compno, resno;
-               pi->first = 0;
-               pi->dx = 0;
-               pi->dy = 0;
-               for (compno = 0; compno < pi->numcomps; compno++) {
-                       comp = &pi->comps[compno];
-                       for (resno = 0; resno < comp->numresolutions; resno++) {
-                               int dx, dy;
-                               res = &comp->resolutions[resno];
-                               dx = comp->dx * (1 << (res->pdx + comp->numresolutions - 1 - resno));
-                               dy = comp->dy * (1 << (res->pdy + comp->numresolutions - 1 - resno));
-                               pi->dx = !pi->dx ? dx : int_min(pi->dx, dx);
-                               pi->dy = !pi->dy ? dy : int_min(pi->dy, dy);
-                       }
-               }
-       }
-if (!pi->tp_on){
-                       pi->poc.ty0 = pi->ty0;
-                       pi->poc.tx0 = pi->tx0;
-                       pi->poc.ty1 = pi->ty1;
-                       pi->poc.tx1 = pi->tx1;
-               }
-       for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) {
-               for (pi->y = pi->poc.ty0; pi->y < pi->poc.ty1; pi->y += pi->dy - (pi->y % pi->dy)) {
-                       for (pi->x = pi->poc.tx0; pi->x < pi->poc.tx1; pi->x += pi->dx - (pi->x % pi->dx)) {
-                               for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-                                       int levelno;
-                                       int trx0, try0;
-                                       int trx1, try1;
-                                       int rpx, rpy;
-                                       int prci, prcj;
-                                       comp = &pi->comps[pi->compno];
-                                       if (pi->resno >= comp->numresolutions) {
-                                               continue;
-                                       }
-                                       res = &comp->resolutions[pi->resno];
-                                       levelno = comp->numresolutions - 1 - pi->resno;
-                                       trx0 = int_ceildiv(pi->tx0, comp->dx << levelno);
-                                       try0 = int_ceildiv(pi->ty0, comp->dy << levelno);
-                                       trx1 = int_ceildiv(pi->tx1, comp->dx << levelno);
-                                       try1 = int_ceildiv(pi->ty1, comp->dy << levelno);
-                                       rpx = res->pdx + levelno;
-                                       rpy = res->pdy + levelno;
-                                       if (!((pi->y % (comp->dy << rpy) == 0) || ((pi->y == pi->ty0) && ((try0 << levelno) % (1 << rpy))))){
-                                               continue;       
-                                       }
-                                       if (!((pi->x % (comp->dx << rpx) == 0) || ((pi->x == pi->tx0) && ((trx0 << levelno) % (1 << rpx))))){
-                                               continue; 
-                                       }
-                                       
-                                       if ((res->pw==0)||(res->ph==0)) continue;
-                                       
-                                       if ((trx0==trx1)||(try0==try1)) continue;
-                                       
-                                       prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelno), res->pdx) 
-                                                - int_floordivpow2(trx0, res->pdx);
-                                       prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelno), res->pdy) 
-                                                - int_floordivpow2(try0, res->pdy);
-                                       pi->precno = prci + prcj * res->pw;
-                                       for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
-                                               index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p;
-                                               if (!pi->include[index]) {
-                                                       pi->include[index] = 1;
-                                                       return OPJ_TRUE;
-                                               }
-LABEL_SKIP:;
-                                       }
-                               }
-                       }
-               }
-       }
-       
-       return OPJ_FALSE;
+static opj_bool pi_next_rpcl(opj_pi_iterator_t * pi)
+{
+    opj_pi_comp_t *comp = NULL;
+    opj_pi_resolution_t *res = NULL;
+    long index = 0;
+
+    if (!pi->first) {
+        goto LABEL_SKIP;
+    } else {
+        int compno, resno;
+        pi->first = 0;
+        pi->dx = 0;
+        pi->dy = 0;
+        for (compno = 0; compno < pi->numcomps; compno++) {
+            comp = &pi->comps[compno];
+            for (resno = 0; resno < comp->numresolutions; resno++) {
+                int dx, dy;
+                res = &comp->resolutions[resno];
+                dx = comp->dx * (1 << (res->pdx + comp->numresolutions - 1 - resno));
+                dy = comp->dy * (1 << (res->pdy + comp->numresolutions - 1 - resno));
+                pi->dx = !pi->dx ? dx : int_min(pi->dx, dx);
+                pi->dy = !pi->dy ? dy : int_min(pi->dy, dy);
+            }
+        }
+    }
+    if (!pi->tp_on) {
+        pi->poc.ty0 = pi->ty0;
+        pi->poc.tx0 = pi->tx0;
+        pi->poc.ty1 = pi->ty1;
+        pi->poc.tx1 = pi->tx1;
+    }
+    for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) {
+        for (pi->y = pi->poc.ty0; pi->y < pi->poc.ty1;
+                pi->y += pi->dy - (pi->y % pi->dy)) {
+            for (pi->x = pi->poc.tx0; pi->x < pi->poc.tx1;
+                    pi->x += pi->dx - (pi->x % pi->dx)) {
+                for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
+                    int levelno;
+                    int trx0, try0;
+                    int trx1, try1;
+                    int rpx, rpy;
+                    int prci, prcj;
+                    comp = &pi->comps[pi->compno];
+                    if (pi->resno >= comp->numresolutions) {
+                        continue;
+                    }
+                    res = &comp->resolutions[pi->resno];
+                    levelno = comp->numresolutions - 1 - pi->resno;
+                    trx0 = int_ceildiv(pi->tx0, comp->dx << levelno);
+                    try0 = int_ceildiv(pi->ty0, comp->dy << levelno);
+                    trx1 = int_ceildiv(pi->tx1, comp->dx << levelno);
+                    try1 = int_ceildiv(pi->ty1, comp->dy << levelno);
+                    rpx = res->pdx + levelno;
+                    rpy = res->pdy + levelno;
+                    if (!((pi->y % (comp->dy << rpy) == 0) || ((pi->y == pi->ty0) &&
+                            ((try0 << levelno) % (1 << rpy))))) {
+                        continue;
+                    }
+                    if (!((pi->x % (comp->dx << rpx) == 0) || ((pi->x == pi->tx0) &&
+                            ((trx0 << levelno) % (1 << rpx))))) {
+                        continue;
+                    }
+
+                    if ((res->pw == 0) || (res->ph == 0)) {
+                        continue;
+                    }
+
+                    if ((trx0 == trx1) || (try0 == try1)) {
+                        continue;
+                    }
+
+                    prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelno), res->pdx)
+                           - int_floordivpow2(trx0, res->pdx);
+                    prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelno), res->pdy)
+                           - int_floordivpow2(try0, res->pdy);
+                    pi->precno = prci + prcj * res->pw;
+                    for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
+                        index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
+                                pi->step_c + pi->precno * pi->step_p;
+                        if (!pi->include[index]) {
+                            pi->include[index] = 1;
+                            return OPJ_TRUE;
+                        }
+LABEL_SKIP:
+                        ;
+                    }
+                }
+            }
+        }
+    }
+
+    return OPJ_FALSE;
 }
 
-static opj_bool pi_next_pcrl(opj_pi_iterator_t * pi) {
-       opj_pi_comp_t *comp = NULL;
-       opj_pi_resolution_t *res = NULL;
-       long index = 0;
-
-       if (!pi->first) {
-               comp = &pi->comps[pi->compno];
-               goto LABEL_SKIP;
-       } else {
-               int compno, resno;
-               pi->first = 0;
-               pi->dx = 0;
-               pi->dy = 0;
-               for (compno = 0; compno < pi->numcomps; compno++) {
-                       comp = &pi->comps[compno];
-                       for (resno = 0; resno < comp->numresolutions; resno++) {
-                               int dx, dy;
-                               res = &comp->resolutions[resno];
-                               dx = comp->dx * (1 << (res->pdx + comp->numresolutions - 1 - resno));
-                               dy = comp->dy * (1 << (res->pdy + comp->numresolutions - 1 - resno));
-                               pi->dx = !pi->dx ? dx : int_min(pi->dx, dx);
-                               pi->dy = !pi->dy ? dy : int_min(pi->dy, dy);
-                       }
-               }
-       }
-       if (!pi->tp_on){
-                       pi->poc.ty0 = pi->ty0;
-                       pi->poc.tx0 = pi->tx0;
-                       pi->poc.ty1 = pi->ty1;
-                       pi->poc.tx1 = pi->tx1;
-               }
-       for (pi->y = pi->poc.ty0; pi->y < pi->poc.ty1; pi->y += pi->dy - (pi->y % pi->dy)) {
-               for (pi->x = pi->poc.tx0; pi->x < pi->poc.tx1; pi->x += pi->dx - (pi->x % pi->dx)) {
-                       for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-                               comp = &pi->comps[pi->compno];
-                               for (pi->resno = pi->poc.resno0; pi->resno < int_min(pi->poc.resno1, comp->numresolutions); pi->resno++) {
-                                       int levelno;
-                                       int trx0, try0;
-                                       int trx1, try1;
-                                       int rpx, rpy;
-                                       int prci, prcj;
-                                       res = &comp->resolutions[pi->resno];
-                                       levelno = comp->numresolutions - 1 - pi->resno;
-                                       trx0 = int_ceildiv(pi->tx0, comp->dx << levelno);
-                                       try0 = int_ceildiv(pi->ty0, comp->dy << levelno);
-                                       trx1 = int_ceildiv(pi->tx1, comp->dx << levelno);
-                                       try1 = int_ceildiv(pi->ty1, comp->dy << levelno);
-                                       rpx = res->pdx + levelno;
-                                       rpy = res->pdy + levelno;
-                                       if (!((pi->y % (comp->dy << rpy) == 0) || ((pi->y == pi->ty0) && ((try0 << levelno) % (1 << rpy))))){
-                                               continue;       
-                                       }
-                                       if (!((pi->x % (comp->dx << rpx) == 0) || ((pi->x == pi->tx0) && ((trx0 << levelno) % (1 << rpx))))){
-                                               continue; 
-                                       }
-                                       
-                                       if ((res->pw==0)||(res->ph==0)) continue;
-                                       
-                                       if ((trx0==trx1)||(try0==try1)) continue;
-                                       
-                                       prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelno), res->pdx) 
-                                                - int_floordivpow2(trx0, res->pdx);
-                                       prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelno), res->pdy) 
-                                                - int_floordivpow2(try0, res->pdy);
-                                       pi->precno = prci + prcj * res->pw;
-                                       for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
-                                               index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p;
-                                               if (!pi->include[index]) {
-                                                       pi->include[index] = 1;
-                                                       return OPJ_TRUE;
-                                               }       
-LABEL_SKIP:;
-                                       }
-                               }
-                       }
-               }
-       }
-       
-       return OPJ_FALSE;
+static opj_bool pi_next_pcrl(opj_pi_iterator_t * pi)
+{
+    opj_pi_comp_t *comp = NULL;
+    opj_pi_resolution_t *res = NULL;
+    long index = 0;
+
+    if (!pi->first) {
+        comp = &pi->comps[pi->compno];
+        goto LABEL_SKIP;
+    } else {
+        int compno, resno;
+        pi->first = 0;
+        pi->dx = 0;
+        pi->dy = 0;
+        for (compno = 0; compno < pi->numcomps; compno++) {
+            comp = &pi->comps[compno];
+            for (resno = 0; resno < comp->numresolutions; resno++) {
+                int dx, dy;
+                res = &comp->resolutions[resno];
+                dx = comp->dx * (1 << (res->pdx + comp->numresolutions - 1 - resno));
+                dy = comp->dy * (1 << (res->pdy + comp->numresolutions - 1 - resno));
+                pi->dx = !pi->dx ? dx : int_min(pi->dx, dx);
+                pi->dy = !pi->dy ? dy : int_min(pi->dy, dy);
+            }
+        }
+    }
+    if (!pi->tp_on) {
+        pi->poc.ty0 = pi->ty0;
+        pi->poc.tx0 = pi->tx0;
+        pi->poc.ty1 = pi->ty1;
+        pi->poc.tx1 = pi->tx1;
+    }
+    for (pi->y = pi->poc.ty0; pi->y < pi->poc.ty1;
+            pi->y += pi->dy - (pi->y % pi->dy)) {
+        for (pi->x = pi->poc.tx0; pi->x < pi->poc.tx1;
+                pi->x += pi->dx - (pi->x % pi->dx)) {
+            for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
+                comp = &pi->comps[pi->compno];
+                for (pi->resno = pi->poc.resno0;
+                        pi->resno < int_min(pi->poc.resno1, comp->numresolutions); pi->resno++) {
+                    int levelno;
+                    int trx0, try0;
+                    int trx1, try1;
+                    int rpx, rpy;
+                    int prci, prcj;
+                    res = &comp->resolutions[pi->resno];
+                    levelno = comp->numresolutions - 1 - pi->resno;
+                    trx0 = int_ceildiv(pi->tx0, comp->dx << levelno);
+                    try0 = int_ceildiv(pi->ty0, comp->dy << levelno);
+                    trx1 = int_ceildiv(pi->tx1, comp->dx << levelno);
+                    try1 = int_ceildiv(pi->ty1, comp->dy << levelno);
+                    rpx = res->pdx + levelno;
+                    rpy = res->pdy + levelno;
+                    if (!((pi->y % (comp->dy << rpy) == 0) || ((pi->y == pi->ty0) &&
+                            ((try0 << levelno) % (1 << rpy))))) {
+                        continue;
+                    }
+                    if (!((pi->x % (comp->dx << rpx) == 0) || ((pi->x == pi->tx0) &&
+                            ((trx0 << levelno) % (1 << rpx))))) {
+                        continue;
+                    }
+
+                    if ((res->pw == 0) || (res->ph == 0)) {
+                        continue;
+                    }
+
+                    if ((trx0 == trx1) || (try0 == try1)) {
+                        continue;
+                    }
+
+                    prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelno), res->pdx)
+                           - int_floordivpow2(trx0, res->pdx);
+                    prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelno), res->pdy)
+                           - int_floordivpow2(try0, res->pdy);
+                    pi->precno = prci + prcj * res->pw;
+                    for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
+                        index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
+                                pi->step_c + pi->precno * pi->step_p;
+                        if (!pi->include[index]) {
+                            pi->include[index] = 1;
+                            return OPJ_TRUE;
+                        }
+LABEL_SKIP:
+                        ;
+                    }
+                }
+            }
+        }
+    }
+
+    return OPJ_FALSE;
 }
 
-static opj_bool pi_next_cprl(opj_pi_iterator_t * pi) {
-       opj_pi_comp_t *comp = NULL;
-       opj_pi_resolution_t *res = NULL;
-       long index = 0;
-
-       if (!pi->first) {
-               comp = &pi->comps[pi->compno];
-               goto LABEL_SKIP;
-       } else {
-               pi->first = 0;
-       }
-
-       for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
-               int resno;
-               comp = &pi->comps[pi->compno];
-               pi->dx = 0;
-               pi->dy = 0;
-               for (resno = 0; resno < comp->numresolutions; resno++) {
-                       int dx, dy;
-                       res = &comp->resolutions[resno];
-                       dx = comp->dx * (1 << (res->pdx + comp->numresolutions - 1 - resno));
-                       dy = comp->dy * (1 << (res->pdy + comp->numresolutions - 1 - resno));
-                       pi->dx = !pi->dx ? dx : int_min(pi->dx, dx);
-                       pi->dy = !pi->dy ? dy : int_min(pi->dy, dy);
-               }
-               if (!pi->tp_on){
-                       pi->poc.ty0 = pi->ty0;
-                       pi->poc.tx0 = pi->tx0;
-                       pi->poc.ty1 = pi->ty1;
-                       pi->poc.tx1 = pi->tx1;
-               }
-               for (pi->y = pi->poc.ty0; pi->y < pi->poc.ty1; pi->y += pi->dy - (pi->y % pi->dy)) {
-                       for (pi->x = pi->poc.tx0; pi->x < pi->poc.tx1; pi->x += pi->dx - (pi->x % pi->dx)) {
-                               for (pi->resno = pi->poc.resno0; pi->resno < int_min(pi->poc.resno1, comp->numresolutions); pi->resno++) {
-                                       int levelno;
-                                       int trx0, try0;
-                                       int trx1, try1;
-                                       int rpx, rpy;
-                                       int prci, prcj;
-                                       res = &comp->resolutions[pi->resno];
-                                       levelno = comp->numresolutions - 1 - pi->resno;
-                                       trx0 = int_ceildiv(pi->tx0, comp->dx << levelno);
-                                       try0 = int_ceildiv(pi->ty0, comp->dy << levelno);
-                                       trx1 = int_ceildiv(pi->tx1, comp->dx << levelno);
-                                       try1 = int_ceildiv(pi->ty1, comp->dy << levelno);
-                                       rpx = res->pdx + levelno;
-                                       rpy = res->pdy + levelno;
-                                       if (!((pi->y % (comp->dy << rpy) == 0) || ((pi->y == pi->ty0) && ((try0 << levelno) % (1 << rpy))))){
-                                               continue;       
-                                       }
-                                       if (!((pi->x % (comp->dx << rpx) == 0) || ((pi->x == pi->tx0) && ((trx0 << levelno) % (1 << rpx))))){
-                                               continue; 
-                                       }
-                                       
-                                       if ((res->pw==0)||(res->ph==0)) continue;
-                                       
-                                       if ((trx0==trx1)||(try0==try1)) continue;
-                                       
-                                       prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelno), res->pdx) 
-                                                - int_floordivpow2(trx0, res->pdx);
-                                       prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelno), res->pdy) 
-                                                - int_floordivpow2(try0, res->pdy);
-                                       pi->precno = prci + prcj * res->pw;
-                                       for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
-                                               index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * pi->step_c + pi->precno * pi->step_p;
-                                               if (!pi->include[index]) {
-                                                       pi->include[index] = 1;
-                                                       return OPJ_TRUE;
-                                               }
-LABEL_SKIP:;
-                                       }
-                               }
-                       }
-               }
-       }
-       
-       return OPJ_FALSE;
+static opj_bool pi_next_cprl(opj_pi_iterator_t * pi)
+{
+    opj_pi_comp_t *comp = NULL;
+    opj_pi_resolution_t *res = NULL;
+    long index = 0;
+
+    if (!pi->first) {
+        comp = &pi->comps[pi->compno];
+        goto LABEL_SKIP;
+    } else {
+        pi->first = 0;
+    }
+
+    for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) {
+        int resno;
+        comp = &pi->comps[pi->compno];
+        pi->dx = 0;
+        pi->dy = 0;
+        for (resno = 0; resno < comp->numresolutions; resno++) {
+            int dx, dy;
+            res = &comp->resolutions[resno];
+            dx = comp->dx * (1 << (res->pdx + comp->numresolutions - 1 - resno));
+            dy = comp->dy * (1 << (res->pdy + comp->numresolutions - 1 - resno));
+            pi->dx = !pi->dx ? dx : int_min(pi->dx, dx);
+            pi->dy = !pi->dy ? dy : int_min(pi->dy, dy);
+        }
+        if (!pi->tp_on) {
+            pi->poc.ty0 = pi->ty0;
+            pi->poc.tx0 = pi->tx0;
+            pi->poc.ty1 = pi->ty1;
+            pi->poc.tx1 = pi->tx1;
+        }
+        for (pi->y = pi->poc.ty0; pi->y < pi->poc.ty1;
+                pi->y += pi->dy - (pi->y % pi->dy)) {
+            for (pi->x = pi->poc.tx0; pi->x < pi->poc.tx1;
+                    pi->x += pi->dx - (pi->x % pi->dx)) {
+                for (pi->resno = pi->poc.resno0;
+                        pi->resno < int_min(pi->poc.resno1, comp->numresolutions); pi->resno++) {
+                    int levelno;
+                    int trx0, try0;
+                    int trx1, try1;
+                    int rpx, rpy;
+                    int prci, prcj;
+                    res = &comp->resolutions[pi->resno];
+                    levelno = comp->numresolutions - 1 - pi->resno;
+                    trx0 = int_ceildiv(pi->tx0, comp->dx << levelno);
+                    try0 = int_ceildiv(pi->ty0, comp->dy << levelno);
+                    trx1 = int_ceildiv(pi->tx1, comp->dx << levelno);
+                    try1 = int_ceildiv(pi->ty1, comp->dy << levelno);
+                    rpx = res->pdx + levelno;
+                    rpy = res->pdy + levelno;
+                    if (!((pi->y % (comp->dy << rpy) == 0) || ((pi->y == pi->ty0) &&
+                            ((try0 << levelno) % (1 << rpy))))) {
+                        continue;
+                    }
+                    if (!((pi->x % (comp->dx << rpx) == 0) || ((pi->x == pi->tx0) &&
+                            ((trx0 << levelno) % (1 << rpx))))) {
+                        continue;
+                    }
+
+                    if ((res->pw == 0) || (res->ph == 0)) {
+                        continue;
+                    }
+
+                    if ((trx0 == trx1) || (try0 == try1)) {
+                        continue;
+                    }
+
+                    prci = int_floordivpow2(int_ceildiv(pi->x, comp->dx << levelno), res->pdx)
+                           - int_floordivpow2(trx0, res->pdx);
+                    prcj = int_floordivpow2(int_ceildiv(pi->y, comp->dy << levelno), res->pdy)
+                           - int_floordivpow2(try0, res->pdy);
+                    pi->precno = prci + prcj * res->pw;
+                    for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) {
+                        index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno *
+                                pi->step_c + pi->precno * pi->step_p;
+                        if (!pi->include[index]) {
+                            pi->include[index] = 1;
+                            return OPJ_TRUE;
+                        }
+LABEL_SKIP:
+                        ;
+                    }
+                }
+            }
+        }
+    }
+
+    return OPJ_FALSE;
 }
 
-/* 
+/*
 ==========================================================
    Packet iterator interface
 ==========================================================
 */
 
-opj_pi_iterator_t *pi_create_decode(opj_image_t *image, opj_cp_t *cp, int tileno) {
-       int p, q;
-       int compno, resno, pino;
-       opj_pi_iterator_t *pi = NULL;
-       opj_tcp_t *tcp = NULL;
-       opj_tccp_t *tccp = NULL;
-
-       tcp = &cp->tcps[tileno];
-
-       pi = (opj_pi_iterator_t*) opj_calloc((tcp->numpocs + 1), sizeof(opj_pi_iterator_t));
-       if(!pi) {
-               /* TODO: throw an error */
-               return NULL;
-       }
-
-       for (pino = 0; pino < tcp->numpocs + 1; pino++) {       /* change */
-               int maxres = 0;
-               int maxprec = 0;
-               p = tileno % cp->tw;
-               q = tileno / cp->tw;
-
-               pi[pino].tx0 = int_max(cp->tx0 + p * cp->tdx, image->x0);
-               pi[pino].ty0 = int_max(cp->ty0 + q * cp->tdy, image->y0);
-               pi[pino].tx1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1);
-               pi[pino].ty1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1);
-               pi[pino].numcomps = image->numcomps;
-
-               pi[pino].comps = (opj_pi_comp_t*) opj_calloc(image->numcomps, sizeof(opj_pi_comp_t));
-               if(!pi[pino].comps) {
-                       /* TODO: throw an error */
-                       pi_destroy(pi, cp, tileno);
-                       return NULL;
-               }
-               
-               for (compno = 0; compno < pi->numcomps; compno++) {
-                       int tcx0, tcy0, tcx1, tcy1;
-                       opj_pi_comp_t *comp = &pi[pino].comps[compno];
-                       tccp = &tcp->tccps[compno];
-                       comp->dx = image->comps[compno].dx;
-                       comp->dy = image->comps[compno].dy;
-                       comp->numresolutions = tccp->numresolutions;
-
-                       comp->resolutions = (opj_pi_resolution_t*) opj_calloc(comp->numresolutions, sizeof(opj_pi_resolution_t));
-                       if(!comp->resolutions) {
-                               /* TODO: throw an error */
-                               pi_destroy(pi, cp, tileno);
-                               return NULL;
-                       }
-
-                       tcx0 = int_ceildiv(pi->tx0, comp->dx);
-                       tcy0 = int_ceildiv(pi->ty0, comp->dy);
-                       tcx1 = int_ceildiv(pi->tx1, comp->dx);
-                       tcy1 = int_ceildiv(pi->ty1, comp->dy);
-                       if (comp->numresolutions > maxres) {
-                               maxres = comp->numresolutions;
-                       }
-
-                       for (resno = 0; resno < comp->numresolutions; resno++) {
-                               int levelno;
-                               int rx0, ry0, rx1, ry1;
-                               int px0, py0, px1, py1;
-                               opj_pi_resolution_t *res = &comp->resolutions[resno];
-                               if (tccp->csty & J2K_CCP_CSTY_PRT) {
-                                       res->pdx = tccp->prcw[resno];
-                                       res->pdy = tccp->prch[resno];
-                               } else {
-                                       res->pdx = 15;
-                                       res->pdy = 15;
-                               }
-                               levelno = comp->numresolutions - 1 - resno;
-                               rx0 = int_ceildivpow2(tcx0, levelno);
-                               ry0 = int_ceildivpow2(tcy0, levelno);
-                               rx1 = int_ceildivpow2(tcx1, levelno);
-                               ry1 = int_ceildivpow2(tcy1, levelno);
-                               px0 = int_floordivpow2(rx0, res->pdx) << res->pdx;
-                               py0 = int_floordivpow2(ry0, res->pdy) << res->pdy;
-                               px1 = int_ceildivpow2(rx1, res->pdx) << res->pdx;
-                               py1 = int_ceildivpow2(ry1, res->pdy) << res->pdy;
-                               res->pw = (rx0==rx1)?0:((px1 - px0) >> res->pdx);
-                               res->ph = (ry0==ry1)?0:((py1 - py0) >> res->pdy);
-                               
-                               if (res->pw*res->ph > maxprec) {
-                                       maxprec = res->pw*res->ph;
-                               }
-                               
-                       }
-               }
-               
-               tccp = &tcp->tccps[0];
-               pi[pino].step_p = 1;
-               pi[pino].step_c = maxprec * pi[pino].step_p;
-               pi[pino].step_r = image->numcomps * pi[pino].step_c;
-               pi[pino].step_l = maxres * pi[pino].step_r;
-               
-               if (pino == 0) {
-                       pi[pino].include = (short int*) opj_calloc(image->numcomps * maxres * tcp->numlayers * maxprec, sizeof(short int));
-                       if(!pi[pino].include) {
-                               /* TODO: throw an error */
-                               pi_destroy(pi, cp, tileno);
-                               return NULL;
-                       }
-               }
-               else {
-                       pi[pino].include = pi[pino - 1].include;
-               }
-               
-               if (tcp->POC == 0) {
-                       pi[pino].first = 1;
-                       pi[pino].poc.resno0 = 0;
-                       pi[pino].poc.compno0 = 0;
-                       pi[pino].poc.layno1 = tcp->numlayers;
-                       pi[pino].poc.resno1 = maxres;
-                       pi[pino].poc.compno1 = image->numcomps;
-                       pi[pino].poc.prg = tcp->prg;
-               } else {
-                       pi[pino].first = 1;
-                       pi[pino].poc.resno0 = tcp->pocs[pino].resno0;
-                       pi[pino].poc.compno0 = tcp->pocs[pino].compno0;
-                       pi[pino].poc.layno1 = tcp->pocs[pino].layno1;
-                       pi[pino].poc.resno1 = tcp->pocs[pino].resno1;
-                       pi[pino].poc.compno1 = tcp->pocs[pino].compno1;
-                       pi[pino].poc.prg = tcp->pocs[pino].prg;
-               }
-               pi[pino].poc.layno0  = 0;
-               pi[pino].poc.precno0 = 0; 
-               pi[pino].poc.precno1 = maxprec;
-                       
-       }
-       
-       return pi;
+opj_pi_iterator_t *pi_create_decode(opj_image_t *image, opj_cp_t *cp,
+                                    int tileno)
+{
+    int p, q;
+    int compno, resno, pino;
+    opj_pi_iterator_t *pi = NULL;
+    opj_tcp_t *tcp = NULL;
+    opj_tccp_t *tccp = NULL;
+
+    tcp = &cp->tcps[tileno];
+
+    pi = (opj_pi_iterator_t*) opj_calloc((tcp->numpocs + 1),
+                                         sizeof(opj_pi_iterator_t));
+    if (!pi) {
+        /* TODO: throw an error */
+        return NULL;
+    }
+
+    for (pino = 0; pino < tcp->numpocs + 1; pino++) {   /* change */
+        int maxres = 0;
+        int maxprec = 0;
+        p = tileno % cp->tw;
+        q = tileno / cp->tw;
+
+        pi[pino].tx0 = int_max(cp->tx0 + p * cp->tdx, image->x0);
+        pi[pino].ty0 = int_max(cp->ty0 + q * cp->tdy, image->y0);
+        pi[pino].tx1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1);
+        pi[pino].ty1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1);
+        pi[pino].numcomps = image->numcomps;
+
+        pi[pino].comps = (opj_pi_comp_t*) opj_calloc(image->numcomps,
+                         sizeof(opj_pi_comp_t));
+        if (!pi[pino].comps) {
+            /* TODO: throw an error */
+            pi_destroy(pi, cp, tileno);
+            return NULL;
+        }
+
+        for (compno = 0; compno < pi->numcomps; compno++) {
+            int tcx0, tcy0, tcx1, tcy1;
+            opj_pi_comp_t *comp = &pi[pino].comps[compno];
+            tccp = &tcp->tccps[compno];
+            comp->dx = image->comps[compno].dx;
+            comp->dy = image->comps[compno].dy;
+            comp->numresolutions = tccp->numresolutions;
+
+            comp->resolutions = (opj_pi_resolution_t*) opj_calloc(comp->numresolutions,
+                                sizeof(opj_pi_resolution_t));
+            if (!comp->resolutions) {
+                /* TODO: throw an error */
+                pi_destroy(pi, cp, tileno);
+                return NULL;
+            }
+
+            tcx0 = int_ceildiv(pi->tx0, comp->dx);
+            tcy0 = int_ceildiv(pi->ty0, comp->dy);
+            tcx1 = int_ceildiv(pi->tx1, comp->dx);
+            tcy1 = int_ceildiv(pi->ty1, comp->dy);
+            if (comp->numresolutions > maxres) {
+                maxres = comp->numresolutions;
+            }
+
+            for (resno = 0; resno < comp->numresolutions; resno++) {
+                int levelno;
+                int rx0, ry0, rx1, ry1;
+                int px0, py0, px1, py1;
+                opj_pi_resolution_t *res = &comp->resolutions[resno];
+                if (tccp->csty & J2K_CCP_CSTY_PRT) {
+                    res->pdx = tccp->prcw[resno];
+                    res->pdy = tccp->prch[resno];
+                } else {
+                    res->pdx = 15;
+                    res->pdy = 15;
+                }
+                levelno = comp->numresolutions - 1 - resno;
+                rx0 = int_ceildivpow2(tcx0, levelno);
+                ry0 = int_ceildivpow2(tcy0, levelno);
+                rx1 = int_ceildivpow2(tcx1, levelno);
+                ry1 = int_ceildivpow2(tcy1, levelno);
+                px0 = int_floordivpow2(rx0, res->pdx) << res->pdx;
+                py0 = int_floordivpow2(ry0, res->pdy) << res->pdy;
+                px1 = int_ceildivpow2(rx1, res->pdx) << res->pdx;
+                py1 = int_ceildivpow2(ry1, res->pdy) << res->pdy;
+                res->pw = (rx0 == rx1) ? 0 : ((px1 - px0) >> res->pdx);
+                res->ph = (ry0 == ry1) ? 0 : ((py1 - py0) >> res->pdy);
+
+                if (res->pw * res->ph > maxprec) {
+                    maxprec = res->pw * res->ph;
+                }
+
+            }
+        }
+
+        tccp = &tcp->tccps[0];
+        pi[pino].step_p = 1;
+        pi[pino].step_c = maxprec * pi[pino].step_p;
+        pi[pino].step_r = image->numcomps * pi[pino].step_c;
+        pi[pino].step_l = maxres * pi[pino].step_r;
+
+        if (pino == 0) {
+            pi[pino].include = (short int*) opj_calloc(image->numcomps * maxres *
+                               tcp->numlayers * maxprec, sizeof(short int));
+            if (!pi[pino].include) {
+                /* TODO: throw an error */
+                pi_destroy(pi, cp, tileno);
+                return NULL;
+            }
+        } else {
+            pi[pino].include = pi[pino - 1].include;
+        }
+
+        if (tcp->POC == 0) {
+            pi[pino].first = 1;
+            pi[pino].poc.resno0 = 0;
+            pi[pino].poc.compno0 = 0;
+            pi[pino].poc.layno1 = tcp->numlayers;
+            pi[pino].poc.resno1 = maxres;
+            pi[pino].poc.compno1 = image->numcomps;
+            pi[pino].poc.prg = tcp->prg;
+        } else {
+            pi[pino].first = 1;
+            pi[pino].poc.resno0 = tcp->pocs[pino].resno0;
+            pi[pino].poc.compno0 = tcp->pocs[pino].compno0;
+            pi[pino].poc.layno1 = tcp->pocs[pino].layno1;
+            pi[pino].poc.resno1 = tcp->pocs[pino].resno1;
+            pi[pino].poc.compno1 = tcp->pocs[pino].compno1;
+            pi[pino].poc.prg = tcp->pocs[pino].prg;
+        }
+        pi[pino].poc.layno0  = 0;
+        pi[pino].poc.precno0 = 0;
+        pi[pino].poc.precno1 = maxprec;
+
+    }
+
+    return pi;
+}
+
+
+opj_pi_iterator_t *pi_initialise_encode(opj_image_t *image, opj_cp_t *cp,
+                                        int tileno, J2K_T2_MODE t2_mode)
+{
+    int p, q, pino;
+    int compno, resno;
+    int maxres = 0;
+    int maxprec = 0;
+    opj_pi_iterator_t *pi = NULL;
+    opj_tcp_t *tcp = NULL;
+    opj_tccp_t *tccp = NULL;
+
+    tcp = &cp->tcps[tileno];
+
+    pi = (opj_pi_iterator_t*) opj_calloc((tcp->numpocs + 1),
+                                         sizeof(opj_pi_iterator_t));
+    if (!pi) {
+        return NULL;
+    }
+    pi->tp_on = cp->tp_on;
+
+    for (pino = 0; pino < tcp->numpocs + 1 ; pino ++) {
+        p = tileno % cp->tw;
+        q = tileno / cp->tw;
+
+        pi[pino].tx0 = int_max(cp->tx0 + p * cp->tdx, image->x0);
+        pi[pino].ty0 = int_max(cp->ty0 + q * cp->tdy, image->y0);
+        pi[pino].tx1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1);
+        pi[pino].ty1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1);
+        pi[pino].numcomps = image->numcomps;
+
+        pi[pino].comps = (opj_pi_comp_t*) opj_calloc(image->numcomps,
+                         sizeof(opj_pi_comp_t));
+        if (!pi[pino].comps) {
+            pi_destroy(pi, cp, tileno);
+            return NULL;
+        }
+
+        for (compno = 0; compno < pi[pino].numcomps; compno++) {
+            int tcx0, tcy0, tcx1, tcy1;
+            opj_pi_comp_t *comp = &pi[pino].comps[compno];
+            tccp = &tcp->tccps[compno];
+            comp->dx = image->comps[compno].dx;
+            comp->dy = image->comps[compno].dy;
+            comp->numresolutions = tccp->numresolutions;
+
+            comp->resolutions = (opj_pi_resolution_t*) opj_malloc(comp->numresolutions *
+                                sizeof(opj_pi_resolution_t));
+            if (!comp->resolutions) {
+                pi_destroy(pi, cp, tileno);
+                return NULL;
+            }
+
+            tcx0 = int_ceildiv(pi[pino].tx0, comp->dx);
+            tcy0 = int_ceildiv(pi[pino].ty0, comp->dy);
+            tcx1 = int_ceildiv(pi[pino].tx1, comp->dx);
+            tcy1 = int_ceildiv(pi[pino].ty1, comp->dy);
+            if (comp->numresolutions > maxres) {
+                maxres = comp->numresolutions;
+            }
+
+            for (resno = 0; resno < comp->numresolutions; resno++) {
+                int levelno;
+                int rx0, ry0, rx1, ry1;
+                int px0, py0, px1, py1;
+                opj_pi_resolution_t *res = &comp->resolutions[resno];
+                if (tccp->csty & J2K_CCP_CSTY_PRT) {
+                    res->pdx = tccp->prcw[resno];
+                    res->pdy = tccp->prch[resno];
+                } else {
+                    res->pdx = 15;
+                    res->pdy = 15;
+                }
+                levelno = comp->numresolutions - 1 - resno;
+                rx0 = int_ceildivpow2(tcx0, levelno);
+                ry0 = int_ceildivpow2(tcy0, levelno);
+                rx1 = int_ceildivpow2(tcx1, levelno);
+                ry1 = int_ceildivpow2(tcy1, levelno);
+                px0 = int_floordivpow2(rx0, res->pdx) << res->pdx;
+                py0 = int_floordivpow2(ry0, res->pdy) << res->pdy;
+                px1 = int_ceildivpow2(rx1, res->pdx) << res->pdx;
+                py1 = int_ceildivpow2(ry1, res->pdy) << res->pdy;
+                res->pw = (rx0 == rx1) ? 0 : ((px1 - px0) >> res->pdx);
+                res->ph = (ry0 == ry1) ? 0 : ((py1 - py0) >> res->pdy);
+
+                if (res->pw * res->ph > maxprec) {
+                    maxprec = res->pw * res->ph;
+                }
+            }
+        }
+
+        tccp = &tcp->tccps[0];
+        pi[pino].step_p = 1;
+        pi[pino].step_c = maxprec * pi[pino].step_p;
+        pi[pino].step_r = image->numcomps * pi[pino].step_c;
+        pi[pino].step_l = maxres * pi[pino].step_r;
+
+        for (compno = 0; compno < pi->numcomps; compno++) {
+            opj_pi_comp_t *comp = &pi->comps[compno];
+            for (resno = 0; resno < comp->numresolutions; resno++) {
+                int dx, dy;
+                opj_pi_resolution_t *res = &comp->resolutions[resno];
+                dx = comp->dx * (1 << (res->pdx + comp->numresolutions - 1 - resno));
+                dy = comp->dy * (1 << (res->pdy + comp->numresolutions - 1 - resno));
+                pi[pino].dx = !pi->dx ? dx : int_min(pi->dx, dx);
+                pi[pino].dy = !pi->dy ? dy : int_min(pi->dy, dy);
+            }
+        }
+
+        if (pino == 0) {
+            pi[pino].include = (short int*) opj_calloc(tcp->numlayers * pi[pino].step_l,
+                               sizeof(short int));
+            if (!pi[pino].include) {
+                pi_destroy(pi, cp, tileno);
+                return NULL;
+            }
+        } else {
+            pi[pino].include = pi[pino - 1].include;
+        }
+
+        /* Generation of boundaries for each prog flag*/
+        if (tcp->POC && (cp->cinema || ((!cp->cinema) && (t2_mode == FINAL_PASS)))) {
+            tcp->pocs[pino].compS = tcp->pocs[pino].compno0;
+            tcp->pocs[pino].compE = tcp->pocs[pino].compno1;
+            tcp->pocs[pino].resS = tcp->pocs[pino].resno0;
+            tcp->pocs[pino].resE = tcp->pocs[pino].resno1;
+            tcp->pocs[pino].layE = tcp->pocs[pino].layno1;
+            tcp->pocs[pino].prg  = tcp->pocs[pino].prg1;
+            if (pino > 0) {
+                tcp->pocs[pino].layS = (tcp->pocs[pino].layE > tcp->pocs[pino - 1].layE) ?
+                                       tcp->pocs[pino - 1].layE : 0;
+            }
+        } else {
+            tcp->pocs[pino].compS = 0;
+            tcp->pocs[pino].compE = image->numcomps;
+            tcp->pocs[pino].resS = 0;
+            tcp->pocs[pino].resE = maxres;
+            tcp->pocs[pino].layS = 0;
+            tcp->pocs[pino].layE = tcp->numlayers;
+            tcp->pocs[pino].prg  = tcp->prg;
+        }
+        tcp->pocs[pino].prcS = 0;
+        tcp->pocs[pino].prcE = maxprec;;
+        tcp->pocs[pino].txS = pi[pino].tx0;
+        tcp->pocs[pino].txE = pi[pino].tx1;
+        tcp->pocs[pino].tyS = pi[pino].ty0;
+        tcp->pocs[pino].tyE = pi[pino].ty1;
+        tcp->pocs[pino].dx = pi[pino].dx;
+        tcp->pocs[pino].dy = pi[pino].dy;
+    }
+    return pi;
 }
 
 
-opj_pi_iterator_t *pi_initialise_encode(opj_image_t *image, opj_cp_t *cp, int tileno, J2K_T2_MODE t2_mode){ 
-       int p, q, pino;
-       int compno, resno;
-       int maxres = 0;
-       int maxprec = 0;
-       opj_pi_iterator_t *pi = NULL;
-       opj_tcp_t *tcp = NULL;
-       opj_tccp_t *tccp = NULL;
-       
-       tcp = &cp->tcps[tileno];
-
-       pi = (opj_pi_iterator_t*) opj_calloc((tcp->numpocs + 1), sizeof(opj_pi_iterator_t));
-       if(!pi) {       return NULL;}
-       pi->tp_on = cp->tp_on;
-
-       for(pino = 0;pino < tcp->numpocs+1 ; pino ++){
-               p = tileno % cp->tw;
-               q = tileno / cp->tw;
-
-               pi[pino].tx0 = int_max(cp->tx0 + p * cp->tdx, image->x0);
-               pi[pino].ty0 = int_max(cp->ty0 + q * cp->tdy, image->y0);
-               pi[pino].tx1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1);
-               pi[pino].ty1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1);
-               pi[pino].numcomps = image->numcomps;
-               
-               pi[pino].comps = (opj_pi_comp_t*) opj_calloc(image->numcomps, sizeof(opj_pi_comp_t));
-               if(!pi[pino].comps) {
-                       pi_destroy(pi, cp, tileno);
-                       return NULL;
-               }
-               
-               for (compno = 0; compno < pi[pino].numcomps; compno++) {
-                       int tcx0, tcy0, tcx1, tcy1;
-                       opj_pi_comp_t *comp = &pi[pino].comps[compno];
-                       tccp = &tcp->tccps[compno];
-                       comp->dx = image->comps[compno].dx;
-                       comp->dy = image->comps[compno].dy;
-                       comp->numresolutions = tccp->numresolutions;
-
-                       comp->resolutions = (opj_pi_resolution_t*) opj_malloc(comp->numresolutions * sizeof(opj_pi_resolution_t));
-                       if(!comp->resolutions) {
-                               pi_destroy(pi, cp, tileno);
-                               return NULL;
-                       }
-
-                       tcx0 = int_ceildiv(pi[pino].tx0, comp->dx);
-                       tcy0 = int_ceildiv(pi[pino].ty0, comp->dy);
-                       tcx1 = int_ceildiv(pi[pino].tx1, comp->dx);
-                       tcy1 = int_ceildiv(pi[pino].ty1, comp->dy);
-                       if (comp->numresolutions > maxres) {
-                               maxres = comp->numresolutions;
-                       }
-
-                       for (resno = 0; resno < comp->numresolutions; resno++) {
-                               int levelno;
-                               int rx0, ry0, rx1, ry1;
-                               int px0, py0, px1, py1;
-                               opj_pi_resolution_t *res = &comp->resolutions[resno];
-                               if (tccp->csty & J2K_CCP_CSTY_PRT) {
-                                       res->pdx = tccp->prcw[resno];
-                                       res->pdy = tccp->prch[resno];
-                               } else {
-                                       res->pdx = 15;
-                                       res->pdy = 15;
-                               }
-                               levelno = comp->numresolutions - 1 - resno;
-                               rx0 = int_ceildivpow2(tcx0, levelno);
-                               ry0 = int_ceildivpow2(tcy0, levelno);
-                               rx1 = int_ceildivpow2(tcx1, levelno);
-                               ry1 = int_ceildivpow2(tcy1, levelno);
-                               px0 = int_floordivpow2(rx0, res->pdx) << res->pdx;
-                               py0 = int_floordivpow2(ry0, res->pdy) << res->pdy;
-                               px1 = int_ceildivpow2(rx1, res->pdx) << res->pdx;
-                               py1 = int_ceildivpow2(ry1, res->pdy) << res->pdy;
-                               res->pw = (rx0==rx1)?0:((px1 - px0) >> res->pdx);
-                               res->ph = (ry0==ry1)?0:((py1 - py0) >> res->pdy);
-
-                               if (res->pw*res->ph > maxprec) {
-                                       maxprec = res->pw * res->ph;
-                               }
-                       }
-               }
-               
-               tccp = &tcp->tccps[0];
-               pi[pino].step_p = 1;
-               pi[pino].step_c = maxprec * pi[pino].step_p;
-               pi[pino].step_r = image->numcomps * pi[pino].step_c;
-               pi[pino].step_l = maxres * pi[pino].step_r;
-               
-               for (compno = 0; compno < pi->numcomps; compno++) {
-                       opj_pi_comp_t *comp = &pi->comps[compno];
-                       for (resno = 0; resno < comp->numresolutions; resno++) {
-                               int dx, dy;
-                               opj_pi_resolution_t *res = &comp->resolutions[resno];
-                               dx = comp->dx * (1 << (res->pdx + comp->numresolutions - 1 - resno));
-                               dy = comp->dy * (1 << (res->pdy + comp->numresolutions - 1 - resno));
-                               pi[pino].dx = !pi->dx ? dx : int_min(pi->dx, dx);
-                               pi[pino].dy = !pi->dy ? dy : int_min(pi->dy, dy);
-                       }
-               }
-
-               if (pino == 0) {
-                       pi[pino].include = (short int*) opj_calloc(tcp->numlayers * pi[pino].step_l, sizeof(short int));
-                       if(!pi[pino].include) {
-                               pi_destroy(pi, cp, tileno);
-                               return NULL;
-                       }
-               }
-               else {
-                       pi[pino].include = pi[pino - 1].include;
-               }
-               
-               /* Generation of boundaries for each prog flag*/
-                       if(tcp->POC && ( cp->cinema || ((!cp->cinema) && (t2_mode == FINAL_PASS)))){
-                               tcp->pocs[pino].compS= tcp->pocs[pino].compno0;
-                               tcp->pocs[pino].compE= tcp->pocs[pino].compno1;
-                               tcp->pocs[pino].resS = tcp->pocs[pino].resno0;
-                               tcp->pocs[pino].resE = tcp->pocs[pino].resno1;
-                               tcp->pocs[pino].layE = tcp->pocs[pino].layno1;
-                               tcp->pocs[pino].prg  = tcp->pocs[pino].prg1;
-                               if (pino > 0)
-                                       tcp->pocs[pino].layS = (tcp->pocs[pino].layE > tcp->pocs[pino - 1].layE) ? tcp->pocs[pino - 1].layE : 0;
-                       }else {
-                               tcp->pocs[pino].compS= 0;
-                               tcp->pocs[pino].compE= image->numcomps;
-                               tcp->pocs[pino].resS = 0;
-                               tcp->pocs[pino].resE = maxres;
-                               tcp->pocs[pino].layS = 0;
-                               tcp->pocs[pino].layE = tcp->numlayers;
-                               tcp->pocs[pino].prg  = tcp->prg;
-                       }
-                       tcp->pocs[pino].prcS = 0;
-                       tcp->pocs[pino].prcE = maxprec;;
-                       tcp->pocs[pino].txS = pi[pino].tx0;
-                       tcp->pocs[pino].txE = pi[pino].tx1;
-                       tcp->pocs[pino].tyS = pi[pino].ty0;
-                       tcp->pocs[pino].tyE = pi[pino].ty1;
-                       tcp->pocs[pino].dx = pi[pino].dx;
-                       tcp->pocs[pino].dy = pi[pino].dy;
-               }
-                       return pi;
-       }
-
-
-
-void pi_destroy(opj_pi_iterator_t *pi, opj_cp_t *cp, int tileno) {
-       int compno, pino;
-       opj_tcp_t *tcp = &cp->tcps[tileno];
-       if(pi) {
-               for (pino = 0; pino < tcp->numpocs + 1; pino++) {       
-                       if(pi[pino].comps) {
-                               for (compno = 0; compno < pi->numcomps; compno++) {
-                                       opj_pi_comp_t *comp = &pi[pino].comps[compno];
-                                       if(comp->resolutions) {
-                                               opj_free(comp->resolutions);
-                                       }
-                               }
-                               opj_free(pi[pino].comps);
-                       }
-               }
-               if(pi->include) {
-                       opj_free(pi->include);
-               }
-               opj_free(pi);
-       }
+
+void pi_destroy(opj_pi_iterator_t *pi, opj_cp_t *cp, int tileno)
+{
+    int compno, pino;
+    opj_tcp_t *tcp = &cp->tcps[tileno];
+    if (pi) {
+        for (pino = 0; pino < tcp->numpocs + 1; pino++) {
+            if (pi[pino].comps) {
+                for (compno = 0; compno < pi->numcomps; compno++) {
+                    opj_pi_comp_t *comp = &pi[pino].comps[compno];
+                    if (comp->resolutions) {
+                        opj_free(comp->resolutions);
+                    }
+                }
+                opj_free(pi[pino].comps);
+            }
+        }
+        if (pi->include) {
+            opj_free(pi->include);
+        }
+        opj_free(pi);
+    }
 }
 
-opj_bool pi_next(opj_pi_iterator_t * pi) {
-       switch (pi->poc.prg) {
-               case LRCP:
-                       return pi_next_lrcp(pi);
-               case RLCP:
-                       return pi_next_rlcp(pi);
-               case RPCL:
-                       return pi_next_rpcl(pi);
-               case PCRL:
-                       return pi_next_pcrl(pi);
-               case CPRL:
-                       return pi_next_cprl(pi);
-               case PROG_UNKNOWN:
-                       return OPJ_FALSE;
-       }
-       
-       return OPJ_FALSE;
+opj_bool pi_next(opj_pi_iterator_t * pi)
+{
+    switch (pi->poc.prg) {
+    case LRCP:
+        return pi_next_lrcp(pi);
+    case RLCP:
+        return pi_next_rlcp(pi);
+    case RPCL:
+        return pi_next_rpcl(pi);
+    case PCRL:
+        return pi_next_pcrl(pi);
+    case CPRL:
+        return pi_next_cprl(pi);
+    case PROG_UNKNOWN:
+        return OPJ_FALSE;
+    }
+
+    return OPJ_FALSE;
 }
 
-opj_bool pi_create_encode( opj_pi_iterator_t *pi, opj_cp_t *cp,int tileno, int pino,int tpnum, int tppos, J2K_T2_MODE t2_mode,int cur_totnum_tp){
-       char prog[4];
-       int i;
-       int incr_top=1,resetX=0;
-       opj_tcp_t *tcps =&cp->tcps[tileno];
-       opj_poc_t *tcp= &tcps->pocs[pino];
-
-       pi[pino].first = 1;
-       pi[pino].poc.prg = tcp->prg;
-
-       switch(tcp->prg){
-               case CPRL: strncpy(prog, "CPRL",4);
-                       break;
-               case LRCP: strncpy(prog, "LRCP",4);
-                       break;
-               case PCRL: strncpy(prog, "PCRL",4);
-                       break;
-               case RLCP: strncpy(prog, "RLCP",4);
-                       break;
-               case RPCL: strncpy(prog, "RPCL",4);
-                       break;
-               case PROG_UNKNOWN: 
-                       return OPJ_TRUE;
-       }
-
-       if(!(cp->tp_on && ((!cp->cinema && (t2_mode == FINAL_PASS)) || cp->cinema))){
-               pi[pino].poc.resno0 = tcp->resS;
-               pi[pino].poc.resno1 = tcp->resE;
-               pi[pino].poc.compno0 = tcp->compS;
-               pi[pino].poc.compno1 = tcp->compE;
-               pi[pino].poc.layno0 = tcp->layS;
-               pi[pino].poc.layno1 = tcp->layE;
-               pi[pino].poc.precno0 = tcp->prcS;
-               pi[pino].poc.precno1 = tcp->prcE;
-               pi[pino].poc.tx0 = tcp->txS;
-               pi[pino].poc.ty0 = tcp->tyS;
-               pi[pino].poc.tx1 = tcp->txE;
-               pi[pino].poc.ty1 = tcp->tyE;
-       }else {
-               if( tpnum < cur_totnum_tp){
-                       for(i=3;i>=0;i--){
-                               switch(prog[i]){
-                               case 'C':
-                                       if (i > tppos){
-                                               pi[pino].poc.compno0 = tcp->compS;
-                                               pi[pino].poc.compno1 = tcp->compE;
-                                       }else{
-                                               if (tpnum == 0){
-                                                       tcp->comp_t = tcp->compS;
-                                                       pi[pino].poc.compno0 = tcp->comp_t;
-                                                       pi[pino].poc.compno1 = tcp->comp_t+1;
-                                                       tcp->comp_t+=1;
-                                               }else{
-                                                       if (incr_top == 1){
-                                                               if(tcp->comp_t ==tcp->compE){
-                                                                       tcp->comp_t = tcp->compS;
-                                                                       pi[pino].poc.compno0 = tcp->comp_t;
-                                                                       pi[pino].poc.compno1 = tcp->comp_t+1;
-                                                                       tcp->comp_t+=1;
-                                                                       incr_top=1;
-                                                               }else{
-                                                                       pi[pino].poc.compno0 = tcp->comp_t;
-                                                                       pi[pino].poc.compno1 = tcp->comp_t+1;
-                                                                       tcp->comp_t+=1;
-                                                                       incr_top=0;
-                                                               }
-                                                       }else{
-                                                               pi[pino].poc.compno0 = tcp->comp_t-1;
-                                                               pi[pino].poc.compno1 = tcp->comp_t;
-                                                       }
-                                               }
-                                       }
-                                       break;
-
-                               case 'R':
-                                       if (i > tppos){
-                                               pi[pino].poc.resno0 = tcp->resS;
-                                               pi[pino].poc.resno1 = tcp->resE;
-                                       }else{
-                                               if (tpnum == 0){
-                                                       tcp->res_t = tcp->resS;
-                                                       pi[pino].poc.resno0 = tcp->res_t;
-                                                       pi[pino].poc.resno1 = tcp->res_t+1;
-                                                       tcp->res_t+=1;
-                                               }else{
-                                                       if (incr_top == 1){
-                                                               if(tcp->res_t==tcp->resE){
-                                                                       tcp->res_t = tcp->resS;
-                                                                       pi[pino].poc.resno0 = tcp->res_t;
-                                                                       pi[pino].poc.resno1 = tcp->res_t+1;
-                                                                       tcp->res_t+=1;
-                                                                       incr_top=1;
-                                                               }else{
-                                                                       pi[pino].poc.resno0 = tcp->res_t;
-                                                                       pi[pino].poc.resno1 = tcp->res_t+1;
-                                                                       tcp->res_t+=1;
-                                                                       incr_top=0;
-                                                               }
-                                                       }else{
-                                                               pi[pino].poc.resno0 = tcp->res_t - 1;
-                                                               pi[pino].poc.resno1 = tcp->res_t;
-                                                       }
-                                               }
-                                       }
-                                       break;
-
-                               case 'L':
-                                       if (i > tppos){
-                                               pi[pino].poc.layno0 = tcp->layS;
-                                               pi[pino].poc.layno1 = tcp->layE;
-                                       }else{
-                                               if (tpnum == 0){
-                                                       tcp->lay_t = tcp->layS;
-                                                       pi[pino].poc.layno0 = tcp->lay_t;
-                                                       pi[pino].poc.layno1 = tcp->lay_t+1;
-                                                       tcp->lay_t+=1;
-                                               }else{
-                                                       if (incr_top == 1){
-                                                               if(tcp->lay_t == tcp->layE){
-                                                                       tcp->lay_t = tcp->layS;
-                                                                       pi[pino].poc.layno0 = tcp->lay_t;
-                                                                       pi[pino].poc.layno1 = tcp->lay_t+1;
-                                                                       tcp->lay_t+=1;
-                                                                       incr_top=1;
-                                                               }else{
-                                                                       pi[pino].poc.layno0 = tcp->lay_t;
-                                                                       pi[pino].poc.layno1 = tcp->lay_t+1;
-                                                                       tcp->lay_t+=1;
-                                                                       incr_top=0;
-                                                               }
-                                                       }else{
-                                                               pi[pino].poc.layno0 = tcp->lay_t - 1;
-                                                               pi[pino].poc.layno1 = tcp->lay_t;
-                                                       }
-                                               }
-                                       }
-                                       break;
-
-                               case 'P':
-                                       switch(tcp->prg){
-                                               case LRCP:
-                                               case RLCP:
-                                                       if (i > tppos){
-                                                               pi[pino].poc.precno0 = tcp->prcS;
-                                                               pi[pino].poc.precno1 = tcp->prcE;
-                                                       }else{
-                                                               if (tpnum == 0){
-                                                                       tcp->prc_t = tcp->prcS;
-                                                                       pi[pino].poc.precno0 = tcp->prc_t;
-                                                                       pi[pino].poc.precno1 = tcp->prc_t+1;
-                                                                       tcp->prc_t+=1; 
-                                                               }else{
-                                                                       if (incr_top == 1){
-                                                                               if(tcp->prc_t == tcp->prcE){
-                                                                                       tcp->prc_t = tcp->prcS;
-                                                                                       pi[pino].poc.precno0 = tcp->prc_t;
-                                                                                       pi[pino].poc.precno1 = tcp->prc_t+1;
-                                                                                       tcp->prc_t+=1;
-                                                                                       incr_top=1;
-                                                                               }else{
-                                                                                       pi[pino].poc.precno0 = tcp->prc_t;
-                                                                                       pi[pino].poc.precno1 = tcp->prc_t+1;
-                                                                                       tcp->prc_t+=1;
-                                                                                       incr_top=0;
-                                                                               }
-                                                                       }else{
-                                                                               pi[pino].poc.precno0 = tcp->prc_t - 1;
-                                                                               pi[pino].poc.precno1 = tcp->prc_t;
-                                                                       }
-                                                               }
-                                                       }
-                                               break;
-                                               default:
-                                                       if (i > tppos){
-                                                               pi[pino].poc.tx0 = tcp->txS;
-                                                               pi[pino].poc.ty0 = tcp->tyS;
-                                                               pi[pino].poc.tx1 = tcp->txE;
-                                                               pi[pino].poc.ty1 = tcp->tyE;
-                                                       }else{
-                                                               if (tpnum == 0){
-                                                                       tcp->tx0_t = tcp->txS;
-                                                                       tcp->ty0_t = tcp->tyS;
-                                                                       pi[pino].poc.tx0 = tcp->tx0_t;
-                                                                       pi[pino].poc.tx1 = tcp->tx0_t + tcp->dx - (tcp->tx0_t % tcp->dx);
-                                                                       pi[pino].poc.ty0 = tcp->ty0_t;
-                                                                       pi[pino].poc.ty1 = tcp->ty0_t + tcp->dy - (tcp->ty0_t % tcp->dy);
-                                                                       tcp->tx0_t = pi[pino].poc.tx1;
-                                                                       tcp->ty0_t = pi[pino].poc.ty1;
-                                                               }else{
-                                                                       if (incr_top == 1){
-                                                                               if(tcp->tx0_t >= tcp->txE){
-                                                                                       if(tcp->ty0_t >= tcp->tyE){
-                                                                                               tcp->ty0_t = tcp->tyS;
-                                                                                               pi[pino].poc.ty0 = tcp->ty0_t;
-                                                                                               pi[pino].poc.ty1 = tcp->ty0_t + tcp->dy - (tcp->ty0_t % tcp->dy);
-                                                                                               tcp->ty0_t = pi[pino].poc.ty1;
-                                                                                               incr_top=1;resetX=1;
-                                                                                       }else{
-                                                                                               pi[pino].poc.ty0 = tcp->ty0_t;
-                                                                                               pi[pino].poc.ty1 = tcp->ty0_t + tcp->dy - (tcp->ty0_t % tcp->dy);
-                                                                                               tcp->ty0_t = pi[pino].poc.ty1;
-                                                                                               incr_top=0;resetX=1;
-                                                                                       }
-                                                                                       if(resetX==1){
-                                                                                               tcp->tx0_t = tcp->txS;
-                                                                                               pi[pino].poc.tx0 = tcp->tx0_t;
-                                                                                               pi[pino].poc.tx1 = tcp->tx0_t + tcp->dx- (tcp->tx0_t % tcp->dx);
-                                                                                               tcp->tx0_t = pi[pino].poc.tx1;
-                                                                                       }
-                                                                               }else{
-                                                                                       pi[pino].poc.tx0 = tcp->tx0_t;
-                                                                                       pi[pino].poc.tx1 = tcp->tx0_t + tcp->dx- (tcp->tx0_t % tcp->dx);
-                                                                                       tcp->tx0_t = pi[pino].poc.tx1;
-                                                                                       pi[pino].poc.ty0 = tcp->ty0_t - tcp->dy - (tcp->ty0_t % tcp->dy);
-                                                                                       pi[pino].poc.ty1 = tcp->ty0_t ;
-                                                                                       incr_top=0;
-                                                                               }
-                                                                       }else{
-                                                                               pi[pino].poc.tx0 = tcp->tx0_t - tcp->dx - (tcp->tx0_t % tcp->dx);
-                                                                               pi[pino].poc.tx1 = tcp->tx0_t ;
-                                                                               pi[pino].poc.ty0 = tcp->ty0_t - tcp->dy - (tcp->ty0_t % tcp->dy);
-                                                                               pi[pino].poc.ty1 = tcp->ty0_t ;
-                                                                       }
-                                                               }
-                                                       }
-                                               break;
-                                               }
-                                               break;
-                               }               
-                       } 
-               }
-       }       
-       return OPJ_FALSE;
+opj_bool pi_create_encode(opj_pi_iterator_t *pi, opj_cp_t *cp, int tileno,
+                          int pino, int tpnum, int tppos, J2K_T2_MODE t2_mode, int cur_totnum_tp)
+{
+    char prog[4];
+    int i;
+    int incr_top = 1, resetX = 0;
+    opj_tcp_t *tcps = &cp->tcps[tileno];
+    opj_poc_t *tcp = &tcps->pocs[pino];
+
+    pi[pino].first = 1;
+    pi[pino].poc.prg = tcp->prg;
+
+    switch (tcp->prg) {
+    case CPRL:
+        strncpy(prog, "CPRL", 4);
+        break;
+    case LRCP:
+        strncpy(prog, "LRCP", 4);
+        break;
+    case PCRL:
+        strncpy(prog, "PCRL", 4);
+        break;
+    case RLCP:
+        strncpy(prog, "RLCP", 4);
+        break;
+    case RPCL:
+        strncpy(prog, "RPCL", 4);
+        break;
+    case PROG_UNKNOWN:
+        return OPJ_TRUE;
+    }
+
+    if (!(cp->tp_on && ((!cp->cinema && (t2_mode == FINAL_PASS)) || cp->cinema))) {
+        pi[pino].poc.resno0 = tcp->resS;
+        pi[pino].poc.resno1 = tcp->resE;
+        pi[pino].poc.compno0 = tcp->compS;
+        pi[pino].poc.compno1 = tcp->compE;
+        pi[pino].poc.layno0 = tcp->layS;
+        pi[pino].poc.layno1 = tcp->layE;
+        pi[pino].poc.precno0 = tcp->prcS;
+        pi[pino].poc.precno1 = tcp->prcE;
+        pi[pino].poc.tx0 = tcp->txS;
+        pi[pino].poc.ty0 = tcp->tyS;
+        pi[pino].poc.tx1 = tcp->txE;
+        pi[pino].poc.ty1 = tcp->tyE;
+    } else {
+        if (tpnum < cur_totnum_tp) {
+            for (i = 3; i >= 0; i--) {
+                switch (prog[i]) {
+                case 'C':
+                    if (i > tppos) {
+                        pi[pino].poc.compno0 = tcp->compS;
+                        pi[pino].poc.compno1 = tcp->compE;
+                    } else {
+                        if (tpnum == 0) {
+                            tcp->comp_t = tcp->compS;
+                            pi[pino].poc.compno0 = tcp->comp_t;
+                            pi[pino].poc.compno1 = tcp->comp_t + 1;
+                            tcp->comp_t += 1;
+                        } else {
+                            if (incr_top == 1) {
+                                if (tcp->comp_t == tcp->compE) {
+                                    tcp->comp_t = tcp->compS;
+                                    pi[pino].poc.compno0 = tcp->comp_t;
+                                    pi[pino].poc.compno1 = tcp->comp_t + 1;
+                                    tcp->comp_t += 1;
+                                    incr_top = 1;
+                                } else {
+                                    pi[pino].poc.compno0 = tcp->comp_t;
+                                    pi[pino].poc.compno1 = tcp->comp_t + 1;
+                                    tcp->comp_t += 1;
+                                    incr_top = 0;
+                                }
+                            } else {
+                                pi[pino].poc.compno0 = tcp->comp_t - 1;
+                                pi[pino].poc.compno1 = tcp->comp_t;
+                            }
+                        }
+                    }
+                    break;
+
+                case 'R':
+                    if (i > tppos) {
+                        pi[pino].poc.resno0 = tcp->resS;
+                        pi[pino].poc.resno1 = tcp->resE;
+                    } else {
+                        if (tpnum == 0) {
+                            tcp->res_t = tcp->resS;
+                            pi[pino].poc.resno0 = tcp->res_t;
+                            pi[pino].poc.resno1 = tcp->res_t + 1;
+                            tcp->res_t += 1;
+                        } else {
+                            if (incr_top == 1) {
+                                if (tcp->res_t == tcp->resE) {
+                                    tcp->res_t = tcp->resS;
+                                    pi[pino].poc.resno0 = tcp->res_t;
+                                    pi[pino].poc.resno1 = tcp->res_t + 1;
+                                    tcp->res_t += 1;
+                                    incr_top = 1;
+                                } else {
+                                    pi[pino].poc.resno0 = tcp->res_t;
+                                    pi[pino].poc.resno1 = tcp->res_t + 1;
+                                    tcp->res_t += 1;
+                                    incr_top = 0;
+                                }
+                            } else {
+                                pi[pino].poc.resno0 = tcp->res_t - 1;
+                                pi[pino].poc.resno1 = tcp->res_t;
+                            }
+                        }
+                    }
+                    break;
+
+                case 'L':
+                    if (i > tppos) {
+                        pi[pino].poc.layno0 = tcp->layS;
+                        pi[pino].poc.layno1 = tcp->layE;
+                    } else {
+                        if (tpnum == 0) {
+                            tcp->lay_t = tcp->layS;
+                            pi[pino].poc.layno0 = tcp->lay_t;
+                            pi[pino].poc.layno1 = tcp->lay_t + 1;
+                            tcp->lay_t += 1;
+                        } else {
+                            if (incr_top == 1) {
+                                if (tcp->lay_t == tcp->layE) {
+                                    tcp->lay_t = tcp->layS;
+                                    pi[pino].poc.layno0 = tcp->lay_t;
+                                    pi[pino].poc.layno1 = tcp->lay_t + 1;
+                                    tcp->lay_t += 1;
+                                    incr_top = 1;
+                                } else {
+                                    pi[pino].poc.layno0 = tcp->lay_t;
+                                    pi[pino].poc.layno1 = tcp->lay_t + 1;
+                                    tcp->lay_t += 1;
+                                    incr_top = 0;
+                                }
+                            } else {
+                                pi[pino].poc.layno0 = tcp->lay_t - 1;
+                                pi[pino].poc.layno1 = tcp->lay_t;
+                            }
+                        }
+                    }
+                    break;
+
+                case 'P':
+                    switch (tcp->prg) {
+                    case LRCP:
+                    case RLCP:
+                        if (i > tppos) {
+                            pi[pino].poc.precno0 = tcp->prcS;
+                            pi[pino].poc.precno1 = tcp->prcE;
+                        } else {
+                            if (tpnum == 0) {
+                                tcp->prc_t = tcp->prcS;
+                                pi[pino].poc.precno0 = tcp->prc_t;
+                                pi[pino].poc.precno1 = tcp->prc_t + 1;
+                                tcp->prc_t += 1;
+                            } else {
+                                if (incr_top == 1) {
+                                    if (tcp->prc_t == tcp->prcE) {
+                                        tcp->prc_t = tcp->prcS;
+                                        pi[pino].poc.precno0 = tcp->prc_t;
+                                        pi[pino].poc.precno1 = tcp->prc_t + 1;
+                                        tcp->prc_t += 1;
+                                        incr_top = 1;
+                                    } else {
+                                        pi[pino].poc.precno0 = tcp->prc_t;
+                                        pi[pino].poc.precno1 = tcp->prc_t + 1;
+                                        tcp->prc_t += 1;
+                                        incr_top = 0;
+                                    }
+                                } else {
+                                    pi[pino].poc.precno0 = tcp->prc_t - 1;
+                                    pi[pino].poc.precno1 = tcp->prc_t;
+                                }
+                            }
+                        }
+                        break;
+                    default:
+                        if (i > tppos) {
+                            pi[pino].poc.tx0 = tcp->txS;
+                            pi[pino].poc.ty0 = tcp->tyS;
+                            pi[pino].poc.tx1 = tcp->txE;
+                            pi[pino].poc.ty1 = tcp->tyE;
+                        } else {
+                            if (tpnum == 0) {
+                                tcp->tx0_t = tcp->txS;
+                                tcp->ty0_t = tcp->tyS;
+                                pi[pino].poc.tx0 = tcp->tx0_t;
+                                pi[pino].poc.tx1 = tcp->tx0_t + tcp->dx - (tcp->tx0_t % tcp->dx);
+                                pi[pino].poc.ty0 = tcp->ty0_t;
+                                pi[pino].poc.ty1 = tcp->ty0_t + tcp->dy - (tcp->ty0_t % tcp->dy);
+                                tcp->tx0_t = pi[pino].poc.tx1;
+                                tcp->ty0_t = pi[pino].poc.ty1;
+                            } else {
+                                if (incr_top == 1) {
+                                    if (tcp->tx0_t >= tcp->txE) {
+                                        if (tcp->ty0_t >= tcp->tyE) {
+                                            tcp->ty0_t = tcp->tyS;
+                                            pi[pino].poc.ty0 = tcp->ty0_t;
+                                            pi[pino].poc.ty1 = tcp->ty0_t + tcp->dy - (tcp->ty0_t % tcp->dy);
+                                            tcp->ty0_t = pi[pino].poc.ty1;
+                                            incr_top = 1;
+                                            resetX = 1;
+                                        } else {
+                                            pi[pino].poc.ty0 = tcp->ty0_t;
+                                            pi[pino].poc.ty1 = tcp->ty0_t + tcp->dy - (tcp->ty0_t % tcp->dy);
+                                            tcp->ty0_t = pi[pino].poc.ty1;
+                                            incr_top = 0;
+                                            resetX = 1;
+                                        }
+                                        if (resetX == 1) {
+                                            tcp->tx0_t = tcp->txS;
+                                            pi[pino].poc.tx0 = tcp->tx0_t;
+                                            pi[pino].poc.tx1 = tcp->tx0_t + tcp->dx - (tcp->tx0_t % tcp->dx);
+                                            tcp->tx0_t = pi[pino].poc.tx1;
+                                        }
+                                    } else {
+                                        pi[pino].poc.tx0 = tcp->tx0_t;
+                                        pi[pino].poc.tx1 = tcp->tx0_t + tcp->dx - (tcp->tx0_t % tcp->dx);
+                                        tcp->tx0_t = pi[pino].poc.tx1;
+                                        pi[pino].poc.ty0 = tcp->ty0_t - tcp->dy - (tcp->ty0_t % tcp->dy);
+                                        pi[pino].poc.ty1 = tcp->ty0_t ;
+                                        incr_top = 0;
+                                    }
+                                } else {
+                                    pi[pino].poc.tx0 = tcp->tx0_t - tcp->dx - (tcp->tx0_t % tcp->dx);
+                                    pi[pino].poc.tx1 = tcp->tx0_t ;
+                                    pi[pino].poc.ty0 = tcp->ty0_t - tcp->dy - (tcp->ty0_t % tcp->dy);
+                                    pi[pino].poc.ty1 = tcp->ty0_t ;
+                                }
+                            }
+                        }
+                        break;
+                    }
+                    break;
+                }
+            }
+        }
+    }
+    return OPJ_FALSE;
 }
 
index dd82d1fbbe5e92e79239eb45c2f8a8f8228e5285..3e94d2be9e34697035168b7cf465c7b0ced29d2c 100644 (file)
@@ -1,12 +1,12 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
  * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
  * Copyright (c) 2002-2014, Professor Benoit Macq
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * All rights reserved.
 
 #include "opj_includes.h"
 
-/* 
+/*
 ==========================================================
    local functions
 ==========================================================
 */
 
 
-/* 
+/*
 ==========================================================
    RAW encoding interface
 ==========================================================
 */
 
-opj_raw_t* raw_create(void) {
-       opj_raw_t *raw = (opj_raw_t*)opj_malloc(sizeof(opj_raw_t));
-       return raw;
+opj_raw_t* raw_create(void)
+{
+    opj_raw_t *raw = (opj_raw_t*)opj_malloc(sizeof(opj_raw_t));
+    return raw;
 }
 
-void raw_destroy(opj_raw_t *raw) {
-       if(raw) {
-               opj_free(raw);
-       }
+void raw_destroy(opj_raw_t *raw)
+{
+    if (raw) {
+        opj_free(raw);
+    }
 }
 
-int raw_numbytes(opj_raw_t *raw) {
-       return raw->bp - raw->start;
+int raw_numbytes(opj_raw_t *raw)
+{
+    return raw->bp - raw->start;
 }
 
-void raw_init_dec(opj_raw_t *raw, unsigned char *bp, int len) {
-       raw->start = bp;
-       raw->lenmax = len;
-       raw->len = 0;
-       raw->c = 0;
-       raw->ct = 0;
+void raw_init_dec(opj_raw_t *raw, unsigned char *bp, int len)
+{
+    raw->start = bp;
+    raw->lenmax = len;
+    raw->len = 0;
+    raw->c = 0;
+    raw->ct = 0;
 }
 
-int raw_decode(opj_raw_t *raw) {
-       int d;
-       if (raw->ct == 0) {
-               raw->ct = 8;
-               if (raw->len == raw->lenmax) {
-                       raw->c = 0xff;
-               } else {
-                       if (raw->c == 0xff) {
-                               raw->ct = 7;
-                       }
-                       raw->c = *(raw->start + raw->len);
-                       raw->len++;
-               }
-       }
-       raw->ct--;
-       d = (raw->c >> raw->ct) & 0x01;
-       
-       return d;
+int raw_decode(opj_raw_t *raw)
+{
+    int d;
+    if (raw->ct == 0) {
+        raw->ct = 8;
+        if (raw->len == raw->lenmax) {
+            raw->c = 0xff;
+        } else {
+            if (raw->c == 0xff) {
+                raw->ct = 7;
+            }
+            raw->c = *(raw->start + raw->len);
+            raw->len++;
+        }
+    }
+    raw->ct--;
+    d = (raw->c >> raw->ct) & 0x01;
+
+    return d;
 }
 
index af2d564dc85ae138eb3b8be88b2f0476a5ee066f..ad9e541689db948bb1692321259591e4d57af6d9 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * Copyright (c) 2007, Callum Lerwick <seg@haxxed.com>
@@ -56,185 +56,185 @@ static void t1_updateflags(flag_t *flagsp, int s, int stride);
 Encode significant pass
 */
 static void t1_enc_sigpass_step(
-               opj_t1_t *t1,
-               flag_t *flagsp,
-               int *datap,
-               int orient,
-               int bpno,
-               int one,
-               int *nmsedec,
-               char type,
-               int vsc);
+    opj_t1_t *t1,
+    flag_t *flagsp,
+    int *datap,
+    int orient,
+    int bpno,
+    int one,
+    int *nmsedec,
+    char type,
+    int vsc);
 /**
 Decode significant pass
 */
 static INLINE void t1_dec_sigpass_step_raw(
-               opj_t1_t *t1,
-               flag_t *flagsp,
-               int *datap,
-               int orient,
-               int oneplushalf,
-               int vsc);
+    opj_t1_t *t1,
+    flag_t *flagsp,
+    int *datap,
+    int orient,
+    int oneplushalf,
+    int vsc);
 static INLINE void t1_dec_sigpass_step_mqc(
-               opj_t1_t *t1,
-               flag_t *flagsp,
-               int *datap,
-               int orient,
-               int oneplushalf);
+    opj_t1_t *t1,
+    flag_t *flagsp,
+    int *datap,
+    int orient,
+    int oneplushalf);
 static INLINE void t1_dec_sigpass_step_mqc_vsc(
-               opj_t1_t *t1,
-               flag_t *flagsp,
-               int *datap,
-               int orient,
-               int oneplushalf,
-               int vsc);
+    opj_t1_t *t1,
+    flag_t *flagsp,
+    int *datap,
+    int orient,
+    int oneplushalf,
+    int vsc);
 /**
 Encode significant pass
 */
 static void t1_enc_sigpass(
-               opj_t1_t *t1,
-               int bpno,
-               int orient,
-               int *nmsedec,
-               char type,
-               int cblksty);
+    opj_t1_t *t1,
+    int bpno,
+    int orient,
+    int *nmsedec,
+    char type,
+    int cblksty);
 /**
 Decode significant pass
 */
 static void t1_dec_sigpass_raw(
-               opj_t1_t *t1,
-               int bpno,
-               int orient,
-               int cblksty);
+    opj_t1_t *t1,
+    int bpno,
+    int orient,
+    int cblksty);
 static void t1_dec_sigpass_mqc(
-               opj_t1_t *t1,
-               int bpno,
-               int orient);
+    opj_t1_t *t1,
+    int bpno,
+    int orient);
 static void t1_dec_sigpass_mqc_vsc(
-               opj_t1_t *t1,
-               int bpno,
-               int orient);
+    opj_t1_t *t1,
+    int bpno,
+    int orient);
 /**
 Encode refinement pass
 */
 static void t1_enc_refpass_step(
-               opj_t1_t *t1,
-               flag_t *flagsp,
-               int *datap,
-               int bpno,
-               int one,
-               int *nmsedec,
-               char type,
-               int vsc);
+    opj_t1_t *t1,
+    flag_t *flagsp,
+    int *datap,
+    int bpno,
+    int one,
+    int *nmsedec,
+    char type,
+    int vsc);
 /**
 Decode refinement pass
 */
 static INLINE void t1_dec_refpass_step_raw(
-               opj_t1_t *t1,
-               flag_t *flagsp,
-               int *datap,
-               int poshalf,
-               int neghalf,
-               int vsc);
+    opj_t1_t *t1,
+    flag_t *flagsp,
+    int *datap,
+    int poshalf,
+    int neghalf,
+    int vsc);
 static INLINE void t1_dec_refpass_step_mqc(
-               opj_t1_t *t1,
-               flag_t *flagsp,
-               int *datap,
-               int poshalf,
-               int neghalf);
+    opj_t1_t *t1,
+    flag_t *flagsp,
+    int *datap,
+    int poshalf,
+    int neghalf);
 static INLINE void t1_dec_refpass_step_mqc_vsc(
-               opj_t1_t *t1,
-               flag_t *flagsp,
-               int *datap,
-               int poshalf,
-               int neghalf,
-               int vsc);
+    opj_t1_t *t1,
+    flag_t *flagsp,
+    int *datap,
+    int poshalf,
+    int neghalf,
+    int vsc);
 
 /**
 Encode refinement pass
 */
 static void t1_enc_refpass(
-               opj_t1_t *t1,
-               int bpno,
-               int *nmsedec,
-               char type,
-               int cblksty);
+    opj_t1_t *t1,
+    int bpno,
+    int *nmsedec,
+    char type,
+    int cblksty);
 /**
 Decode refinement pass
 */
 static void t1_dec_refpass_raw(
-               opj_t1_t *t1,
-               int bpno,
-               int cblksty);
+    opj_t1_t *t1,
+    int bpno,
+    int cblksty);
 static void t1_dec_refpass_mqc(
-               opj_t1_t *t1,
-               int bpno);
+    opj_t1_t *t1,
+    int bpno);
 static void t1_dec_refpass_mqc_vsc(
-               opj_t1_t *t1,
-               int bpno);
+    opj_t1_t *t1,
+    int bpno);
 /**
 Encode clean-up pass
 */
 static void t1_enc_clnpass_step(
-               opj_t1_t *t1,
-               flag_t *flagsp,
-               int *datap,
-               int orient,
-               int bpno,
-               int one,
-               int *nmsedec,
-               int partial,
-               int vsc);
+    opj_t1_t *t1,
+    flag_t *flagsp,
+    int *datap,
+    int orient,
+    int bpno,
+    int one,
+    int *nmsedec,
+    int partial,
+    int vsc);
 /**
 Decode clean-up pass
 */
 static void t1_dec_clnpass_step_partial(
-               opj_t1_t *t1,
-               flag_t *flagsp,
-               int *datap,
-               int orient,
-               int oneplushalf);
+    opj_t1_t *t1,
+    flag_t *flagsp,
+    int *datap,
+    int orient,
+    int oneplushalf);
 static void t1_dec_clnpass_step(
-               opj_t1_t *t1,
-               flag_t *flagsp,
-               int *datap,
-               int orient,
-               int oneplushalf);
+    opj_t1_t *t1,
+    flag_t *flagsp,
+    int *datap,
+    int orient,
+    int oneplushalf);
 static void t1_dec_clnpass_step_vsc(
-               opj_t1_t *t1,
-               flag_t *flagsp,
-               int *datap,
-               int orient,
-               int oneplushalf,
-               int partial,
-               int vsc);
+    opj_t1_t *t1,
+    flag_t *flagsp,
+    int *datap,
+    int orient,
+    int oneplushalf,
+    int partial,
+    int vsc);
 /**
 Encode clean-up pass
 */
 static void t1_enc_clnpass(
-               opj_t1_t *t1,
-               int bpno,
-               int orient,
-               int *nmsedec,
-               int cblksty);
+    opj_t1_t *t1,
+    int bpno,
+    int orient,
+    int *nmsedec,
+    int cblksty);
 /**
 Decode clean-up pass
 */
 static void t1_dec_clnpass(
-               opj_t1_t *t1,
-               int bpno,
-               int orient,
-               int cblksty);
+    opj_t1_t *t1,
+    int bpno,
+    int orient,
+    int cblksty);
 static double t1_getwmsedec(
-               int nmsedec,
-               int compno,
-               int level,
-               int orient,
-               int bpno,
-               int qmfbid,
-               double stepsize,
-               int numcomps,
-               int mct);
+    int nmsedec,
+    int compno,
+    int level,
+    int orient,
+    int bpno,
+    int qmfbid,
+    double stepsize,
+    int numcomps,
+    int mct);
 /**
 Encode 1 code-block
 @param t1 T1 handle
@@ -250,17 +250,17 @@ Encode 1 code-block
 @param tile
 */
 static void t1_encode_cblk(
-               opj_t1_t *t1,
-               opj_tcd_cblk_enc_t* cblk,
-               int orient,
-               int compno,
-               int level,
-               int qmfbid,
-               double stepsize,
-               int cblksty,
-               int numcomps,
-               int mct,
-               opj_tcd_tile_t * tile);
+    opj_t1_t *t1,
+    opj_tcd_cblk_enc_t* cblk,
+    int orient,
+    int compno,
+    int level,
+    int qmfbid,
+    double stepsize,
+    int cblksty,
+    int numcomps,
+    int mct,
+    opj_tcd_tile_t * tile);
 /**
 Decode 1 code-block
 @param t1 T1 handle
@@ -270,11 +270,11 @@ Decode 1 code-block
 @param cblksty Code-block style
 */
 static void t1_decode_cblk(
-               opj_t1_t *t1,
-               opj_tcd_cblk_dec_t* cblk,
-               int orient,
-               int roishift,
-               int cblksty);
+    opj_t1_t *t1,
+    opj_tcd_cblk_dec_t* cblk,
+    int orient,
+    int roishift,
+    int cblksty);
 
 /*@}*/
 
@@ -282,1310 +282,1347 @@ static void t1_decode_cblk(
 
 /* ----------------------------------------------------------------------- */
 
-static char t1_getctxno_zc(int f, int orient) {
-       return lut_ctxno_zc[(orient << 8) | (f & T1_SIG_OTH)];
+static char t1_getctxno_zc(int f, int orient)
+{
+    return lut_ctxno_zc[(orient << 8) | (f & T1_SIG_OTH)];
 }
 
-static char t1_getctxno_sc(int f) {
-       return lut_ctxno_sc[(f & (T1_SIG_PRIM | T1_SGN)) >> 4];
+static char t1_getctxno_sc(int f)
+{
+    return lut_ctxno_sc[(f & (T1_SIG_PRIM | T1_SGN)) >> 4];
 }
 
-static int t1_getctxno_mag(int f) {
-       int tmp1 = (f & T1_SIG_OTH) ? T1_CTXNO_MAG + 1 : T1_CTXNO_MAG;
-       int tmp2 = (f & T1_REFINE) ? T1_CTXNO_MAG + 2 : tmp1;
-       return (tmp2);
+static int t1_getctxno_mag(int f)
+{
+    int tmp1 = (f & T1_SIG_OTH) ? T1_CTXNO_MAG + 1 : T1_CTXNO_MAG;
+    int tmp2 = (f & T1_REFINE) ? T1_CTXNO_MAG + 2 : tmp1;
+    return (tmp2);
 }
 
-static char t1_getspb(int f) {
-       return lut_spb[(f & (T1_SIG_PRIM | T1_SGN)) >> 4];
+static char t1_getspb(int f)
+{
+    return lut_spb[(f & (T1_SIG_PRIM | T1_SGN)) >> 4];
 }
 
-static short t1_getnmsedec_sig(int x, int bitpos) {
-       if (bitpos > T1_NMSEDEC_FRACBITS) {
-               return lut_nmsedec_sig[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((1 << T1_NMSEDEC_BITS) - 1)];
-       }
-       
-       return lut_nmsedec_sig0[x & ((1 << T1_NMSEDEC_BITS) - 1)];
+static short t1_getnmsedec_sig(int x, int bitpos)
+{
+    if (bitpos > T1_NMSEDEC_FRACBITS) {
+        return lut_nmsedec_sig[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((
+                                                                         1 << T1_NMSEDEC_BITS) - 1)];
+    }
+
+    return lut_nmsedec_sig0[x & ((1 << T1_NMSEDEC_BITS) - 1)];
 }
 
-static short t1_getnmsedec_ref(int x, int bitpos) {
-       if (bitpos > T1_NMSEDEC_FRACBITS) {
-               return lut_nmsedec_ref[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((1 << T1_NMSEDEC_BITS) - 1)];
-       }
+static short t1_getnmsedec_ref(int x, int bitpos)
+{
+    if (bitpos > T1_NMSEDEC_FRACBITS) {
+        return lut_nmsedec_ref[(x >> (bitpos - T1_NMSEDEC_FRACBITS)) & ((
+                                                                         1 << T1_NMSEDEC_BITS) - 1)];
+    }
 
     return lut_nmsedec_ref0[x & ((1 << T1_NMSEDEC_BITS) - 1)];
 }
 
-static void t1_updateflags(flag_t *flagsp, int s, int stride) {
-       flag_t *np = flagsp - stride;
-       flag_t *sp = flagsp + stride;
-
-       static const flag_t mod[] = {
-               T1_SIG_S, T1_SIG_S|T1_SGN_S,
-               T1_SIG_E, T1_SIG_E|T1_SGN_E,
-               T1_SIG_W, T1_SIG_W|T1_SGN_W,
-               T1_SIG_N, T1_SIG_N|T1_SGN_N
-       };
-
-       np[-1] |= T1_SIG_SE;
-       np[0]  |= mod[s];
-       np[1]  |= T1_SIG_SW;
-
-       flagsp[-1] |= mod[s+2];
-       flagsp[0]  |= T1_SIG;
-       flagsp[1]  |= mod[s+4];
-
-       sp[-1] |= T1_SIG_NE;
-       sp[0]  |= mod[s+6];
-       sp[1]  |= T1_SIG_NW;
+static void t1_updateflags(flag_t *flagsp, int s, int stride)
+{
+    flag_t *np = flagsp - stride;
+    flag_t *sp = flagsp + stride;
+
+    static const flag_t mod[] = {
+        T1_SIG_S, T1_SIG_S | T1_SGN_S,
+        T1_SIG_E, T1_SIG_E | T1_SGN_E,
+        T1_SIG_W, T1_SIG_W | T1_SGN_W,
+        T1_SIG_N, T1_SIG_N | T1_SGN_N
+    };
+
+    np[-1] |= T1_SIG_SE;
+    np[0]  |= mod[s];
+    np[1]  |= T1_SIG_SW;
+
+    flagsp[-1] |= mod[s + 2];
+    flagsp[0]  |= T1_SIG;
+    flagsp[1]  |= mod[s + 4];
+
+    sp[-1] |= T1_SIG_NE;
+    sp[0]  |= mod[s + 6];
+    sp[1]  |= T1_SIG_NW;
 }
 
 static void t1_enc_sigpass_step(
-               opj_t1_t *t1,
-               flag_t *flagsp,
-               int *datap,
-               int orient,
-               int bpno,
-               int one,
-               int *nmsedec,
-               char type,
-               int vsc)
+    opj_t1_t *t1,
+    flag_t *flagsp,
+    int *datap,
+    int orient,
+    int bpno,
+    int one,
+    int *nmsedec,
+    char type,
+    int vsc)
 {
-       int v, flag;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp);
-       if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) {
-               v = int_abs(*datap) & one ? 1 : 0;
-               mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient));       /* ESSAI */
-               if (type == T1_TYPE_RAW) {      /* BYPASS/LAZY MODE */
-                       mqc_bypass_enc(mqc, v);
-               } else {
-                       mqc_encode(mqc, v);
-               }
-               if (v) {
-                       v = *datap < 0 ? 1 : 0;
-                       *nmsedec +=     t1_getnmsedec_sig(int_abs(*datap), bpno + T1_NMSEDEC_FRACBITS);
-                       mqc_setcurctx(mqc, t1_getctxno_sc(flag));       /* ESSAI */
-                       if (type == T1_TYPE_RAW) {      /* BYPASS/LAZY MODE */
-                               mqc_bypass_enc(mqc, v);
-                       } else {
-                               mqc_encode(mqc, v ^ t1_getspb(flag));
-                       }
-                       t1_updateflags(flagsp, v, t1->flags_stride);
-               }
-               *flagsp |= T1_VISIT;
-       }
+    int v, flag;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) :
+           (*flagsp);
+    if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) {
+        v = int_abs(*datap) & one ? 1 : 0;
+        mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient));   /* ESSAI */
+        if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
+            mqc_bypass_enc(mqc, v);
+        } else {
+            mqc_encode(mqc, v);
+        }
+        if (v) {
+            v = *datap < 0 ? 1 : 0;
+            *nmsedec += t1_getnmsedec_sig(int_abs(*datap), bpno + T1_NMSEDEC_FRACBITS);
+            mqc_setcurctx(mqc, t1_getctxno_sc(flag));   /* ESSAI */
+            if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
+                mqc_bypass_enc(mqc, v);
+            } else {
+                mqc_encode(mqc, v ^ t1_getspb(flag));
+            }
+            t1_updateflags(flagsp, v, t1->flags_stride);
+        }
+        *flagsp |= T1_VISIT;
+    }
 }
 
 static INLINE void t1_dec_sigpass_step_raw(
-               opj_t1_t *t1,
-               flag_t *flagsp,
-               int *datap,
-               int orient,
-               int oneplushalf,
-               int vsc)
+    opj_t1_t *t1,
+    flag_t *flagsp,
+    int *datap,
+    int orient,
+    int oneplushalf,
+    int vsc)
 {
-       int v, flag;
-       opj_raw_t *raw = t1->raw;       /* RAW component */
-       
-       OPJ_ARG_NOT_USED(orient);
-       
-       flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp);
-       if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) {
-                       if (raw_decode(raw)) {
-                               v = raw_decode(raw);    /* ESSAI */
-                               *datap = v ? -oneplushalf : oneplushalf;
-                               t1_updateflags(flagsp, v, t1->flags_stride);
-                       }
-               *flagsp |= T1_VISIT;
-       }
-}                              /* VSC and  BYPASS by Antonin */
+    int v, flag;
+    opj_raw_t *raw = t1->raw;   /* RAW component */
+
+    OPJ_ARG_NOT_USED(orient);
+
+    flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) :
+           (*flagsp);
+    if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) {
+        if (raw_decode(raw)) {
+            v = raw_decode(raw);    /* ESSAI */
+            *datap = v ? -oneplushalf : oneplushalf;
+            t1_updateflags(flagsp, v, t1->flags_stride);
+        }
+        *flagsp |= T1_VISIT;
+    }
+}               /* VSC and  BYPASS by Antonin */
 
 static INLINE void t1_dec_sigpass_step_mqc(
-               opj_t1_t *t1,
-               flag_t *flagsp,
-               int *datap,
-               int orient,
-               int oneplushalf)
+    opj_t1_t *t1,
+    flag_t *flagsp,
+    int *datap,
+    int orient,
+    int oneplushalf)
 {
-       int v, flag;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       flag = *flagsp;
-       if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) {
-                       mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient));
-                       if (mqc_decode(mqc)) {
-                               mqc_setcurctx(mqc, t1_getctxno_sc(flag));
-                               v = mqc_decode(mqc) ^ t1_getspb(flag);
-                               *datap = v ? -oneplushalf : oneplushalf;
-                               t1_updateflags(flagsp, v, t1->flags_stride);
-                       }
-               *flagsp |= T1_VISIT;
-       }
-}                              /* VSC and  BYPASS by Antonin */
+    int v, flag;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = *flagsp;
+    if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) {
+        mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient));
+        if (mqc_decode(mqc)) {
+            mqc_setcurctx(mqc, t1_getctxno_sc(flag));
+            v = mqc_decode(mqc) ^ t1_getspb(flag);
+            *datap = v ? -oneplushalf : oneplushalf;
+            t1_updateflags(flagsp, v, t1->flags_stride);
+        }
+        *flagsp |= T1_VISIT;
+    }
+}               /* VSC and  BYPASS by Antonin */
 
 static INLINE void t1_dec_sigpass_step_mqc_vsc(
-               opj_t1_t *t1,
-               flag_t *flagsp,
-               int *datap,
-               int orient,
-               int oneplushalf,
-               int vsc)
+    opj_t1_t *t1,
+    flag_t *flagsp,
+    int *datap,
+    int orient,
+    int oneplushalf,
+    int vsc)
 {
-       int v, flag;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp);
-       if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) {
-               mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient));
-               if (mqc_decode(mqc)) {
-                       mqc_setcurctx(mqc, t1_getctxno_sc(flag));
-                       v = mqc_decode(mqc) ^ t1_getspb(flag);
-                       *datap = v ? -oneplushalf : oneplushalf;
-                       t1_updateflags(flagsp, v, t1->flags_stride);
-               }
-               *flagsp |= T1_VISIT;
-       }
-}                              /* VSC and  BYPASS by Antonin */
+    int v, flag;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) :
+           (*flagsp);
+    if ((flag & T1_SIG_OTH) && !(flag & (T1_SIG | T1_VISIT))) {
+        mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient));
+        if (mqc_decode(mqc)) {
+            mqc_setcurctx(mqc, t1_getctxno_sc(flag));
+            v = mqc_decode(mqc) ^ t1_getspb(flag);
+            *datap = v ? -oneplushalf : oneplushalf;
+            t1_updateflags(flagsp, v, t1->flags_stride);
+        }
+        *flagsp |= T1_VISIT;
+    }
+}               /* VSC and  BYPASS by Antonin */
 
 static void t1_enc_sigpass(
-               opj_t1_t *t1,
-               int bpno,
-               int orient,
-               int *nmsedec,
-               char type,
-               int cblksty)
+    opj_t1_t *t1,
+    int bpno,
+    int orient,
+    int *nmsedec,
+    char type,
+    int cblksty)
 {
-       int i, j, k, one, vsc;
-       *nmsedec = 0;
-       one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
-       for (k = 0; k < t1->h; k += 4) {
-               for (i = 0; i < t1->w; ++i) {
-                       for (j = k; j < k + 4 && j < t1->h; ++j) {
-                               vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 || j == t1->h - 1)) ? 1 : 0;
-                               t1_enc_sigpass_step(
-                                               t1,
-                                               &t1->flags[((j+1) * t1->flags_stride) + i + 1],
-                                               &t1->data[(j * t1->w) + i],
-                                               orient,
-                                               bpno,
-                                               one,
-                                               nmsedec,
-                                               type,
-                                               vsc);
-                       }
-               }
-       }
+    int i, j, k, one, vsc;
+    *nmsedec = 0;
+    one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
+    for (k = 0; k < t1->h; k += 4) {
+        for (i = 0; i < t1->w; ++i) {
+            for (j = k; j < k + 4 && j < t1->h; ++j) {
+                vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 ||
+                        j == t1->h - 1)) ? 1 : 0;
+                t1_enc_sigpass_step(
+                    t1,
+                    &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
+                    &t1->data[(j * t1->w) + i],
+                    orient,
+                    bpno,
+                    one,
+                    nmsedec,
+                    type,
+                    vsc);
+            }
+        }
+    }
 }
 
 static void t1_dec_sigpass_raw(
-               opj_t1_t *t1,
-               int bpno,
-               int orient,
-               int cblksty)
+    opj_t1_t *t1,
+    int bpno,
+    int orient,
+    int cblksty)
 {
-       int i, j, k, one, half, oneplushalf, vsc;
-       one = 1 << bpno;
-       half = one >> 1;
-       oneplushalf = one | half;
-       for (k = 0; k < t1->h; k += 4) {
-               for (i = 0; i < t1->w; ++i) {
-                       for (j = k; j < k + 4 && j < t1->h; ++j) {
-                               vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 || j == t1->h - 1)) ? 1 : 0;
-                               t1_dec_sigpass_step_raw(
-                                               t1,
-                                               &t1->flags[((j+1) * t1->flags_stride) + i + 1],
-                                               &t1->data[(j * t1->w) + i],
-                                               orient,
-                                               oneplushalf,
-                                               vsc);
-                       }
-               }
-       }
-}                              /* VSC and  BYPASS by Antonin */
+    int i, j, k, one, half, oneplushalf, vsc;
+    one = 1 << bpno;
+    half = one >> 1;
+    oneplushalf = one | half;
+    for (k = 0; k < t1->h; k += 4) {
+        for (i = 0; i < t1->w; ++i) {
+            for (j = k; j < k + 4 && j < t1->h; ++j) {
+                vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 ||
+                        j == t1->h - 1)) ? 1 : 0;
+                t1_dec_sigpass_step_raw(
+                    t1,
+                    &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
+                    &t1->data[(j * t1->w) + i],
+                    orient,
+                    oneplushalf,
+                    vsc);
+            }
+        }
+    }
+}               /* VSC and  BYPASS by Antonin */
 
 static void t1_dec_sigpass_mqc(
-               opj_t1_t *t1,
-               int bpno,
-               int orient)
+    opj_t1_t *t1,
+    int bpno,
+    int orient)
 {
-       int i, j, k, one, half, oneplushalf;
-       int *data1 = t1->data;
-       flag_t *flags1 = &t1->flags[1];
-       one = 1 << bpno;
-       half = one >> 1;
-       oneplushalf = one | half;
-       for (k = 0; k < (t1->h & ~3); k += 4) {
-               for (i = 0; i < t1->w; ++i) {
-                       int *data2 = data1 + i;
-                       flag_t *flags2 = flags1 + i;
-                       flags2 += t1->flags_stride;
-                       t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf);
-                       data2 += t1->w;
-                       flags2 += t1->flags_stride;
-                       t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf);
-                       data2 += t1->w;
-                       flags2 += t1->flags_stride;
-                       t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf);
-                       data2 += t1->w;
-                       flags2 += t1->flags_stride;
-                       t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf);
-                       data2 += t1->w;
-               }
-               data1 += t1->w << 2;
-               flags1 += t1->flags_stride << 2;
-       }
-       for (i = 0; i < t1->w; ++i) {
-               int *data2 = data1 + i;
-               flag_t *flags2 = flags1 + i;
-               for (j = k; j < t1->h; ++j) {
-                       flags2 += t1->flags_stride;
-                       t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf);
-                       data2 += t1->w;
-               }
-       }
-}                              /* VSC and  BYPASS by Antonin */
+    int i, j, k, one, half, oneplushalf;
+    int *data1 = t1->data;
+    flag_t *flags1 = &t1->flags[1];
+    one = 1 << bpno;
+    half = one >> 1;
+    oneplushalf = one | half;
+    for (k = 0; k < (t1->h & ~3); k += 4) {
+        for (i = 0; i < t1->w; ++i) {
+            int *data2 = data1 + i;
+            flag_t *flags2 = flags1 + i;
+            flags2 += t1->flags_stride;
+            t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf);
+            data2 += t1->w;
+            flags2 += t1->flags_stride;
+            t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf);
+            data2 += t1->w;
+            flags2 += t1->flags_stride;
+            t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf);
+            data2 += t1->w;
+            flags2 += t1->flags_stride;
+            t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf);
+            data2 += t1->w;
+        }
+        data1 += t1->w << 2;
+        flags1 += t1->flags_stride << 2;
+    }
+    for (i = 0; i < t1->w; ++i) {
+        int *data2 = data1 + i;
+        flag_t *flags2 = flags1 + i;
+        for (j = k; j < t1->h; ++j) {
+            flags2 += t1->flags_stride;
+            t1_dec_sigpass_step_mqc(t1, flags2, data2, orient, oneplushalf);
+            data2 += t1->w;
+        }
+    }
+}               /* VSC and  BYPASS by Antonin */
 
 static void t1_dec_sigpass_mqc_vsc(
-               opj_t1_t *t1,
-               int bpno,
-               int orient)
+    opj_t1_t *t1,
+    int bpno,
+    int orient)
 {
-       int i, j, k, one, half, oneplushalf, vsc;
-       one = 1 << bpno;
-       half = one >> 1;
-       oneplushalf = one | half;
-       for (k = 0; k < t1->h; k += 4) {
-               for (i = 0; i < t1->w; ++i) {
-                       for (j = k; j < k + 4 && j < t1->h; ++j) {
-                               vsc = (j == k + 3 || j == t1->h - 1) ? 1 : 0;
-                               t1_dec_sigpass_step_mqc_vsc(
-                                               t1,
-                                               &t1->flags[((j+1) * t1->flags_stride) + i + 1],
-                                               &t1->data[(j * t1->w) + i],
-                                               orient,
-                                               oneplushalf,
-                                               vsc);
-                       }
-               }
-       }
-}                              /* VSC and  BYPASS by Antonin */
+    int i, j, k, one, half, oneplushalf, vsc;
+    one = 1 << bpno;
+    half = one >> 1;
+    oneplushalf = one | half;
+    for (k = 0; k < t1->h; k += 4) {
+        for (i = 0; i < t1->w; ++i) {
+            for (j = k; j < k + 4 && j < t1->h; ++j) {
+                vsc = (j == k + 3 || j == t1->h - 1) ? 1 : 0;
+                t1_dec_sigpass_step_mqc_vsc(
+                    t1,
+                    &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
+                    &t1->data[(j * t1->w) + i],
+                    orient,
+                    oneplushalf,
+                    vsc);
+            }
+        }
+    }
+}               /* VSC and  BYPASS by Antonin */
 
 static void t1_enc_refpass_step(
-               opj_t1_t *t1,
-               flag_t *flagsp,
-               int *datap,
-               int bpno,
-               int one,
-               int *nmsedec,
-               char type,
-               int vsc)
+    opj_t1_t *t1,
+    flag_t *flagsp,
+    int *datap,
+    int bpno,
+    int one,
+    int *nmsedec,
+    char type,
+    int vsc)
 {
-       int v, flag;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp);
-       if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) {
-               *nmsedec += t1_getnmsedec_ref(int_abs(*datap), bpno + T1_NMSEDEC_FRACBITS);
-               v = int_abs(*datap) & one ? 1 : 0;
-               mqc_setcurctx(mqc, t1_getctxno_mag(flag));      /* ESSAI */
-               if (type == T1_TYPE_RAW) {      /* BYPASS/LAZY MODE */
-                       mqc_bypass_enc(mqc, v);
-               } else {
-                       mqc_encode(mqc, v);
-               }
-               *flagsp |= T1_REFINE;
-       }
+    int v, flag;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) :
+           (*flagsp);
+    if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) {
+        *nmsedec += t1_getnmsedec_ref(int_abs(*datap), bpno + T1_NMSEDEC_FRACBITS);
+        v = int_abs(*datap) & one ? 1 : 0;
+        mqc_setcurctx(mqc, t1_getctxno_mag(flag));  /* ESSAI */
+        if (type == T1_TYPE_RAW) {  /* BYPASS/LAZY MODE */
+            mqc_bypass_enc(mqc, v);
+        } else {
+            mqc_encode(mqc, v);
+        }
+        *flagsp |= T1_REFINE;
+    }
 }
 
 static INLINE void t1_dec_refpass_step_raw(
-               opj_t1_t *t1,
-               flag_t *flagsp,
-               int *datap,
-               int poshalf,
-               int neghalf,
-               int vsc)
+    opj_t1_t *t1,
+    flag_t *flagsp,
+    int *datap,
+    int poshalf,
+    int neghalf,
+    int vsc)
 {
-       int v, t, flag;
-       
-       opj_raw_t *raw = t1->raw;       /* RAW component */
-       
-       flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp);
-       if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) {
-                       v = raw_decode(raw);
-               t = v ? poshalf : neghalf;
-               *datap += *datap < 0 ? -t : t;
-               *flagsp |= T1_REFINE;
-       }
-}                              /* VSC and  BYPASS by Antonin  */
+    int v, t, flag;
+
+    opj_raw_t *raw = t1->raw;   /* RAW component */
+
+    flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) :
+           (*flagsp);
+    if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) {
+        v = raw_decode(raw);
+        t = v ? poshalf : neghalf;
+        *datap += *datap < 0 ? -t : t;
+        *flagsp |= T1_REFINE;
+    }
+}               /* VSC and  BYPASS by Antonin  */
 
 static INLINE void t1_dec_refpass_step_mqc(
-               opj_t1_t *t1,
-               flag_t *flagsp,
-               int *datap,
-               int poshalf,
-               int neghalf)
+    opj_t1_t *t1,
+    flag_t *flagsp,
+    int *datap,
+    int poshalf,
+    int neghalf)
 {
-       int v, t, flag;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       flag = *flagsp;
-       if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) {
-               mqc_setcurctx(mqc, t1_getctxno_mag(flag));      /* ESSAI */
-                       v = mqc_decode(mqc);
-               t = v ? poshalf : neghalf;
-               *datap += *datap < 0 ? -t : t;
-               *flagsp |= T1_REFINE;
-               }
-}                              /* VSC and  BYPASS by Antonin  */
+    int v, t, flag;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = *flagsp;
+    if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) {
+        mqc_setcurctx(mqc, t1_getctxno_mag(flag));  /* ESSAI */
+        v = mqc_decode(mqc);
+        t = v ? poshalf : neghalf;
+        *datap += *datap < 0 ? -t : t;
+        *flagsp |= T1_REFINE;
+    }
+}               /* VSC and  BYPASS by Antonin  */
 
 static INLINE void t1_dec_refpass_step_mqc_vsc(
-               opj_t1_t *t1,
-               flag_t *flagsp,
-               int *datap,
-               int poshalf,
-               int neghalf,
-               int vsc)
+    opj_t1_t *t1,
+    flag_t *flagsp,
+    int *datap,
+    int poshalf,
+    int neghalf,
+    int vsc)
 {
-       int v, t, flag;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp);
-       if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) {
-               mqc_setcurctx(mqc, t1_getctxno_mag(flag));      /* ESSAI */
-               v = mqc_decode(mqc);
-               t = v ? poshalf : neghalf;
-               *datap += *datap < 0 ? -t : t;
-               *flagsp |= T1_REFINE;
-       }
-}                              /* VSC and  BYPASS by Antonin  */
+    int v, t, flag;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) :
+           (*flagsp);
+    if ((flag & (T1_SIG | T1_VISIT)) == T1_SIG) {
+        mqc_setcurctx(mqc, t1_getctxno_mag(flag));  /* ESSAI */
+        v = mqc_decode(mqc);
+        t = v ? poshalf : neghalf;
+        *datap += *datap < 0 ? -t : t;
+        *flagsp |= T1_REFINE;
+    }
+}               /* VSC and  BYPASS by Antonin  */
 
 static void t1_enc_refpass(
-               opj_t1_t *t1,
-               int bpno,
-               int *nmsedec,
-               char type,
-               int cblksty)
+    opj_t1_t *t1,
+    int bpno,
+    int *nmsedec,
+    char type,
+    int cblksty)
 {
-       int i, j, k, one, vsc;
-       *nmsedec = 0;
-       one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
-       for (k = 0; k < t1->h; k += 4) {
-               for (i = 0; i < t1->w; ++i) {
-                       for (j = k; j < k + 4 && j < t1->h; ++j) {
-                               vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 || j == t1->h - 1)) ? 1 : 0;
-                               t1_enc_refpass_step(
-                                               t1,
-                                               &t1->flags[((j+1) * t1->flags_stride) + i + 1],
-                                               &t1->data[(j * t1->w) + i],
-                                               bpno,
-                                               one,
-                                               nmsedec,
-                                               type,
-                                               vsc);
-                       }
-               }
-       }
+    int i, j, k, one, vsc;
+    *nmsedec = 0;
+    one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
+    for (k = 0; k < t1->h; k += 4) {
+        for (i = 0; i < t1->w; ++i) {
+            for (j = k; j < k + 4 && j < t1->h; ++j) {
+                vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 ||
+                        j == t1->h - 1)) ? 1 : 0;
+                t1_enc_refpass_step(
+                    t1,
+                    &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
+                    &t1->data[(j * t1->w) + i],
+                    bpno,
+                    one,
+                    nmsedec,
+                    type,
+                    vsc);
+            }
+        }
+    }
 }
 
 static void t1_dec_refpass_raw(
-               opj_t1_t *t1,
-               int bpno,
-               int cblksty)
+    opj_t1_t *t1,
+    int bpno,
+    int cblksty)
 {
-       int i, j, k, one, poshalf, neghalf;
-       int vsc;
-       one = 1 << bpno;
-       poshalf = one >> 1;
-       neghalf = bpno > 0 ? -poshalf : -1;
-       for (k = 0; k < t1->h; k += 4) {
-               for (i = 0; i < t1->w; ++i) {
-                       for (j = k; j < k + 4 && j < t1->h; ++j) {
-                               vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 || j == t1->h - 1)) ? 1 : 0;
-                               t1_dec_refpass_step_raw(
-                                               t1,
-                                               &t1->flags[((j+1) * t1->flags_stride) + i + 1],
-                                               &t1->data[(j * t1->w) + i],
-                                               poshalf,
-                                               neghalf,
-                                               vsc);
-                       }
-               }
-       }
-}                              /* VSC and  BYPASS by Antonin */
+    int i, j, k, one, poshalf, neghalf;
+    int vsc;
+    one = 1 << bpno;
+    poshalf = one >> 1;
+    neghalf = bpno > 0 ? -poshalf : -1;
+    for (k = 0; k < t1->h; k += 4) {
+        for (i = 0; i < t1->w; ++i) {
+            for (j = k; j < k + 4 && j < t1->h; ++j) {
+                vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 ||
+                        j == t1->h - 1)) ? 1 : 0;
+                t1_dec_refpass_step_raw(
+                    t1,
+                    &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
+                    &t1->data[(j * t1->w) + i],
+                    poshalf,
+                    neghalf,
+                    vsc);
+            }
+        }
+    }
+}               /* VSC and  BYPASS by Antonin */
 
 static void t1_dec_refpass_mqc(
-               opj_t1_t *t1,
-               int bpno)
+    opj_t1_t *t1,
+    int bpno)
 {
-       int i, j, k, one, poshalf, neghalf;
-       int *data1 = t1->data;
-       flag_t *flags1 = &t1->flags[1];
-       one = 1 << bpno;
-       poshalf = one >> 1;
-       neghalf = bpno > 0 ? -poshalf : -1;
-       for (k = 0; k < (t1->h & ~3); k += 4) {
-               for (i = 0; i < t1->w; ++i) {
-                       int *data2 = data1 + i;
-                       flag_t *flags2 = flags1 + i;
-                       flags2 += t1->flags_stride;
-                       t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf);
-                       data2 += t1->w;
-                       flags2 += t1->flags_stride;
-                       t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf);
-                       data2 += t1->w;
-                       flags2 += t1->flags_stride;
-                       t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf);
-                       data2 += t1->w;
-                       flags2 += t1->flags_stride;
-                       t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf);
-                       data2 += t1->w;
-               }
-               data1 += t1->w << 2;
-               flags1 += t1->flags_stride << 2;
-       }
-       for (i = 0; i < t1->w; ++i) {
-               int *data2 = data1 + i;
-               flag_t *flags2 = flags1 + i;
-               for (j = k; j < t1->h; ++j) {
-                       flags2 += t1->flags_stride;
-                       t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf);
-                       data2 += t1->w;
-               }
-       }
-}                              /* VSC and  BYPASS by Antonin */
+    int i, j, k, one, poshalf, neghalf;
+    int *data1 = t1->data;
+    flag_t *flags1 = &t1->flags[1];
+    one = 1 << bpno;
+    poshalf = one >> 1;
+    neghalf = bpno > 0 ? -poshalf : -1;
+    for (k = 0; k < (t1->h & ~3); k += 4) {
+        for (i = 0; i < t1->w; ++i) {
+            int *data2 = data1 + i;
+            flag_t *flags2 = flags1 + i;
+            flags2 += t1->flags_stride;
+            t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf);
+            data2 += t1->w;
+            flags2 += t1->flags_stride;
+            t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf);
+            data2 += t1->w;
+            flags2 += t1->flags_stride;
+            t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf);
+            data2 += t1->w;
+            flags2 += t1->flags_stride;
+            t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf);
+            data2 += t1->w;
+        }
+        data1 += t1->w << 2;
+        flags1 += t1->flags_stride << 2;
+    }
+    for (i = 0; i < t1->w; ++i) {
+        int *data2 = data1 + i;
+        flag_t *flags2 = flags1 + i;
+        for (j = k; j < t1->h; ++j) {
+            flags2 += t1->flags_stride;
+            t1_dec_refpass_step_mqc(t1, flags2, data2, poshalf, neghalf);
+            data2 += t1->w;
+        }
+    }
+}               /* VSC and  BYPASS by Antonin */
 
 static void t1_dec_refpass_mqc_vsc(
-               opj_t1_t *t1,
-               int bpno)
+    opj_t1_t *t1,
+    int bpno)
 {
-       int i, j, k, one, poshalf, neghalf;
-       int vsc;
-       one = 1 << bpno;
-       poshalf = one >> 1;
-       neghalf = bpno > 0 ? -poshalf : -1;
-       for (k = 0; k < t1->h; k += 4) {
-               for (i = 0; i < t1->w; ++i) {
-                       for (j = k; j < k + 4 && j < t1->h; ++j) {
-                               vsc = ((j == k + 3 || j == t1->h - 1)) ? 1 : 0;
-                               t1_dec_refpass_step_mqc_vsc(
-                                               t1,
-                                               &t1->flags[((j+1) * t1->flags_stride) + i + 1],
-                                               &t1->data[(j * t1->w) + i],
-                                               poshalf,
-                                               neghalf,
-                                               vsc);
-                       }
-               }
-       }
-}                              /* VSC and  BYPASS by Antonin */
+    int i, j, k, one, poshalf, neghalf;
+    int vsc;
+    one = 1 << bpno;
+    poshalf = one >> 1;
+    neghalf = bpno > 0 ? -poshalf : -1;
+    for (k = 0; k < t1->h; k += 4) {
+        for (i = 0; i < t1->w; ++i) {
+            for (j = k; j < k + 4 && j < t1->h; ++j) {
+                vsc = ((j == k + 3 || j == t1->h - 1)) ? 1 : 0;
+                t1_dec_refpass_step_mqc_vsc(
+                    t1,
+                    &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
+                    &t1->data[(j * t1->w) + i],
+                    poshalf,
+                    neghalf,
+                    vsc);
+            }
+        }
+    }
+}               /* VSC and  BYPASS by Antonin */
 
 static void t1_enc_clnpass_step(
-               opj_t1_t *t1,
-               flag_t *flagsp,
-               int *datap,
-               int orient,
-               int bpno,
-               int one,
-               int *nmsedec,
-               int partial,
-               int vsc)
+    opj_t1_t *t1,
+    flag_t *flagsp,
+    int *datap,
+    int orient,
+    int bpno,
+    int one,
+    int *nmsedec,
+    int partial,
+    int vsc)
 {
-       int v, flag;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp);
-       if (partial) {
-               goto LABEL_PARTIAL;
-       }
-       if (!(*flagsp & (T1_SIG | T1_VISIT))) {
-               mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient));
-               v = int_abs(*datap) & one ? 1 : 0;
-               mqc_encode(mqc, v);
-               if (v) {
+    int v, flag;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) :
+           (*flagsp);
+    if (partial) {
+        goto LABEL_PARTIAL;
+    }
+    if (!(*flagsp & (T1_SIG | T1_VISIT))) {
+        mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient));
+        v = int_abs(*datap) & one ? 1 : 0;
+        mqc_encode(mqc, v);
+        if (v) {
 LABEL_PARTIAL:
-                       *nmsedec += t1_getnmsedec_sig(int_abs(*datap), bpno + T1_NMSEDEC_FRACBITS);
-                       mqc_setcurctx(mqc, t1_getctxno_sc(flag));
-                       v = *datap < 0 ? 1 : 0;
-                       mqc_encode(mqc, v ^ t1_getspb(flag));
-                       t1_updateflags(flagsp, v, t1->flags_stride);
-               }
-       }
-       *flagsp &= ~T1_VISIT;
+            *nmsedec += t1_getnmsedec_sig(int_abs(*datap), bpno + T1_NMSEDEC_FRACBITS);
+            mqc_setcurctx(mqc, t1_getctxno_sc(flag));
+            v = *datap < 0 ? 1 : 0;
+            mqc_encode(mqc, v ^ t1_getspb(flag));
+            t1_updateflags(flagsp, v, t1->flags_stride);
+        }
+    }
+    *flagsp &= ~T1_VISIT;
 }
 
 static void t1_dec_clnpass_step_partial(
-               opj_t1_t *t1,
-               flag_t *flagsp,
-               int *datap,
-               int orient,
-               int oneplushalf)
+    opj_t1_t *t1,
+    flag_t *flagsp,
+    int *datap,
+    int orient,
+    int oneplushalf)
 {
-       int v, flag;
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       OPJ_ARG_NOT_USED(orient);
-       
-       flag = *flagsp;
-       mqc_setcurctx(mqc, t1_getctxno_sc(flag));
-       v = mqc_decode(mqc) ^ t1_getspb(flag);
-       *datap = v ? -oneplushalf : oneplushalf;
-       t1_updateflags(flagsp, v, t1->flags_stride);
-       *flagsp &= ~T1_VISIT;
-}                              /* VSC and  BYPASS by Antonin */
+    int v, flag;
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    OPJ_ARG_NOT_USED(orient);
+
+    flag = *flagsp;
+    mqc_setcurctx(mqc, t1_getctxno_sc(flag));
+    v = mqc_decode(mqc) ^ t1_getspb(flag);
+    *datap = v ? -oneplushalf : oneplushalf;
+    t1_updateflags(flagsp, v, t1->flags_stride);
+    *flagsp &= ~T1_VISIT;
+}               /* VSC and  BYPASS by Antonin */
 
 static void t1_dec_clnpass_step(
-               opj_t1_t *t1,
-               flag_t *flagsp,
-               int *datap,
-               int orient,
-               int oneplushalf)
+    opj_t1_t *t1,
+    flag_t *flagsp,
+    int *datap,
+    int orient,
+    int oneplushalf)
 {
-       int v, flag;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       flag = *flagsp;
-       if (!(flag & (T1_SIG | T1_VISIT))) {
-               mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient));
-               if (mqc_decode(mqc)) {
-                       mqc_setcurctx(mqc, t1_getctxno_sc(flag));
-                       v = mqc_decode(mqc) ^ t1_getspb(flag);
-                       *datap = v ? -oneplushalf : oneplushalf;
-                       t1_updateflags(flagsp, v, t1->flags_stride);
-               }
-       }
-       *flagsp &= ~T1_VISIT;
-}                              /* VSC and  BYPASS by Antonin */
+    int v, flag;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = *flagsp;
+    if (!(flag & (T1_SIG | T1_VISIT))) {
+        mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient));
+        if (mqc_decode(mqc)) {
+            mqc_setcurctx(mqc, t1_getctxno_sc(flag));
+            v = mqc_decode(mqc) ^ t1_getspb(flag);
+            *datap = v ? -oneplushalf : oneplushalf;
+            t1_updateflags(flagsp, v, t1->flags_stride);
+        }
+    }
+    *flagsp &= ~T1_VISIT;
+}               /* VSC and  BYPASS by Antonin */
 
 static void t1_dec_clnpass_step_vsc(
-               opj_t1_t *t1,
-               flag_t *flagsp,
-               int *datap,
-               int orient,
-               int oneplushalf,
-               int partial,
-               int vsc)
+    opj_t1_t *t1,
+    flag_t *flagsp,
+    int *datap,
+    int orient,
+    int oneplushalf,
+    int partial,
+    int vsc)
 {
-       int v, flag;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) : (*flagsp);
-       if (partial) {
-               goto LABEL_PARTIAL;
-       }
-       if (!(flag & (T1_SIG | T1_VISIT))) {
-               mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient));
-               if (mqc_decode(mqc)) {
+    int v, flag;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    flag = vsc ? ((*flagsp) & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) :
+           (*flagsp);
+    if (partial) {
+        goto LABEL_PARTIAL;
+    }
+    if (!(flag & (T1_SIG | T1_VISIT))) {
+        mqc_setcurctx(mqc, t1_getctxno_zc(flag, orient));
+        if (mqc_decode(mqc)) {
 LABEL_PARTIAL:
-                       mqc_setcurctx(mqc, t1_getctxno_sc(flag));
-                       v = mqc_decode(mqc) ^ t1_getspb(flag);
-                       *datap = v ? -oneplushalf : oneplushalf;
-                       t1_updateflags(flagsp, v, t1->flags_stride);
-               }
-       }
-       *flagsp &= ~T1_VISIT;
+            mqc_setcurctx(mqc, t1_getctxno_sc(flag));
+            v = mqc_decode(mqc) ^ t1_getspb(flag);
+            *datap = v ? -oneplushalf : oneplushalf;
+            t1_updateflags(flagsp, v, t1->flags_stride);
+        }
+    }
+    *flagsp &= ~T1_VISIT;
 }
 
 static void t1_enc_clnpass(
-               opj_t1_t *t1,
-               int bpno,
-               int orient,
-               int *nmsedec,
-               int cblksty)
+    opj_t1_t *t1,
+    int bpno,
+    int orient,
+    int *nmsedec,
+    int cblksty)
 {
-       int i, j, k, one, agg, runlen, vsc;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       *nmsedec = 0;
-       one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
-       for (k = 0; k < t1->h; k += 4) {
-               for (i = 0; i < t1->w; ++i) {
-                       if (k + 3 < t1->h) {
-                               if (cblksty & J2K_CCP_CBLKSTY_VSC) {
-                                       agg = !(MACRO_t1_flags(1 + k,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                               || MACRO_t1_flags(1 + k + 1,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                               || MACRO_t1_flags(1 + k + 2,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                               || (MACRO_t1_flags(1 + k + 3,1 + i) 
-                                               & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) & (T1_SIG | T1_VISIT | T1_SIG_OTH));
-                               } else {
-                                       agg = !(MACRO_t1_flags(1 + k,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                               || MACRO_t1_flags(1 + k + 1,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                               || MACRO_t1_flags(1 + k + 2,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                               || MACRO_t1_flags(1 + k + 3,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH));
-                               }
-                       } else {
-                               agg = 0;
-                       }
-                       if (agg) {
-                               for (runlen = 0; runlen < 4; ++runlen) {
-                                       if (int_abs(t1->data[((k + runlen)*t1->w) + i]) & one)
-                                               break;
-                               }
-                               mqc_setcurctx(mqc, T1_CTXNO_AGG);
-                               mqc_encode(mqc, runlen != 4);
-                               if (runlen == 4) {
-                                       continue;
-                               }
-                               mqc_setcurctx(mqc, T1_CTXNO_UNI);
-                               mqc_encode(mqc, runlen >> 1);
-                               mqc_encode(mqc, runlen & 1);
-                       } else {
-                               runlen = 0;
-                       }
-                       for (j = k + runlen; j < k + 4 && j < t1->h; ++j) {
-                               vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 || j == t1->h - 1)) ? 1 : 0;
-                               t1_enc_clnpass_step(
-                                               t1,
-                                               &t1->flags[((j+1) * t1->flags_stride) + i + 1],
-                                               &t1->data[(j * t1->w) + i],
-                                               orient,
-                                               bpno,
-                                               one,
-                                               nmsedec,
-                                               agg && (j == k + runlen),
-                                               vsc);
-                       }
-               }
-       }
+    int i, j, k, one, agg, runlen, vsc;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    *nmsedec = 0;
+    one = 1 << (bpno + T1_NMSEDEC_FRACBITS);
+    for (k = 0; k < t1->h; k += 4) {
+        for (i = 0; i < t1->w; ++i) {
+            if (k + 3 < t1->h) {
+                if (cblksty & J2K_CCP_CBLKSTY_VSC) {
+                    agg = !(MACRO_t1_flags(1 + k, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                            || MACRO_t1_flags(1 + k + 1, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                            || MACRO_t1_flags(1 + k + 2, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                            || (MACRO_t1_flags(1 + k + 3, 1 + i)
+                                & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) & (T1_SIG | T1_VISIT |
+                                        T1_SIG_OTH));
+                } else {
+                    agg = !(MACRO_t1_flags(1 + k, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                            || MACRO_t1_flags(1 + k + 1, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                            || MACRO_t1_flags(1 + k + 2, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                            || MACRO_t1_flags(1 + k + 3, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH));
+                }
+            } else {
+                agg = 0;
+            }
+            if (agg) {
+                for (runlen = 0; runlen < 4; ++runlen) {
+                    if (int_abs(t1->data[((k + runlen)*t1->w) + i]) & one) {
+                        break;
+                    }
+                }
+                mqc_setcurctx(mqc, T1_CTXNO_AGG);
+                mqc_encode(mqc, runlen != 4);
+                if (runlen == 4) {
+                    continue;
+                }
+                mqc_setcurctx(mqc, T1_CTXNO_UNI);
+                mqc_encode(mqc, runlen >> 1);
+                mqc_encode(mqc, runlen & 1);
+            } else {
+                runlen = 0;
+            }
+            for (j = k + runlen; j < k + 4 && j < t1->h; ++j) {
+                vsc = ((cblksty & J2K_CCP_CBLKSTY_VSC) && (j == k + 3 ||
+                        j == t1->h - 1)) ? 1 : 0;
+                t1_enc_clnpass_step(
+                    t1,
+                    &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
+                    &t1->data[(j * t1->w) + i],
+                    orient,
+                    bpno,
+                    one,
+                    nmsedec,
+                    agg && (j == k + runlen),
+                    vsc);
+            }
+        }
+    }
 }
 
 static void t1_dec_clnpass(
-               opj_t1_t *t1,
-               int bpno,
-               int orient,
-               int cblksty)
+    opj_t1_t *t1,
+    int bpno,
+    int orient,
+    int cblksty)
 {
-       int i, j, k, one, half, oneplushalf, agg, runlen, vsc;
-       int segsym = cblksty & J2K_CCP_CBLKSTY_SEGSYM;
-       
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-       
-       one = 1 << bpno;
-       half = one >> 1;
-       oneplushalf = one | half;
-       if (cblksty & J2K_CCP_CBLKSTY_VSC) {
-       for (k = 0; k < t1->h; k += 4) {
-               for (i = 0; i < t1->w; ++i) {
-                       if (k + 3 < t1->h) {
-                                       agg = !(MACRO_t1_flags(1 + k,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                               || MACRO_t1_flags(1 + k + 1,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                               || MACRO_t1_flags(1 + k + 2,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                               || (MACRO_t1_flags(1 + k + 3,1 + i) 
-                                               & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) & (T1_SIG | T1_VISIT | T1_SIG_OTH));
-                               } else {
-                               agg = 0;
-                       }
-                       if (agg) {
-                               mqc_setcurctx(mqc, T1_CTXNO_AGG);
-                               if (!mqc_decode(mqc)) {
-                                       continue;
-                               }
-                               mqc_setcurctx(mqc, T1_CTXNO_UNI);
-                               runlen = mqc_decode(mqc);
-                               runlen = (runlen << 1) | mqc_decode(mqc);
-                       } else {
-                               runlen = 0;
-                       }
-                       for (j = k + runlen; j < k + 4 && j < t1->h; ++j) {
-                                       vsc = (j == k + 3 || j == t1->h - 1) ? 1 : 0;
-                                       t1_dec_clnpass_step_vsc(
-                                               t1,
-                                               &t1->flags[((j+1) * t1->flags_stride) + i + 1],
-                                               &t1->data[(j * t1->w) + i],
-                                               orient,
-                                               oneplushalf,
-                                               agg && (j == k + runlen),
-                                               vsc);
-                       }
-               }
-       }
-       } else {
-               int *data1 = t1->data;
-               flag_t *flags1 = &t1->flags[1];
-               for (k = 0; k < (t1->h & ~3); k += 4) {
-                       for (i = 0; i < t1->w; ++i) {
-                               int *data2 = data1 + i;
-                               flag_t *flags2 = flags1 + i;
-                               agg = !(MACRO_t1_flags(1 + k,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                       || MACRO_t1_flags(1 + k + 1,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                       || MACRO_t1_flags(1 + k + 2,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
-                                       || MACRO_t1_flags(1 + k + 3,1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH));
-                               if (agg) {
-                                       mqc_setcurctx(mqc, T1_CTXNO_AGG);
-                                       if (!mqc_decode(mqc)) {
-                                               continue;
-                                       }
-                                       mqc_setcurctx(mqc, T1_CTXNO_UNI);
-                                       runlen = mqc_decode(mqc);
-                                       runlen = (runlen << 1) | mqc_decode(mqc);
-                                       flags2 += runlen * t1->flags_stride;
-                                       data2 += runlen * t1->w;
-                                       for (j = k + runlen; j < k + 4 && j < t1->h; ++j) {
-                                               flags2 += t1->flags_stride;
-                                               if (agg && (j == k + runlen)) {
-                                                       t1_dec_clnpass_step_partial(t1, flags2, data2, orient, oneplushalf);
-                                               } else {
-                                                       t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf);
-                                               }
-                                               data2 += t1->w;
-                                       }
-                               } else {
-                                       flags2 += t1->flags_stride;
-                                       t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf);
-                                       data2 += t1->w;
-                                       flags2 += t1->flags_stride;
-                                       t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf);
-                                       data2 += t1->w;
-                                       flags2 += t1->flags_stride;
-                                       t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf);
-                                       data2 += t1->w;
-                                       flags2 += t1->flags_stride;
-                                       t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf);
-                                       data2 += t1->w;
-                               }
-                       }
-                       data1 += t1->w << 2;
-                       flags1 += t1->flags_stride << 2;
-               }
-               for (i = 0; i < t1->w; ++i) {
-                       int *data2 = data1 + i;
-                       flag_t *flags2 = flags1 + i;
-                       for (j = k; j < t1->h; ++j) {
-                               flags2 += t1->flags_stride;
-                               t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf);
-                               data2 += t1->w;
-                       }
-               }
-       }
-
-       if (segsym) {
-               int v = 0;
-               mqc_setcurctx(mqc, T1_CTXNO_UNI);
-               v = mqc_decode(mqc);
-               v = (v << 1) | mqc_decode(mqc);
-               v = (v << 1) | mqc_decode(mqc);
-               v = (v << 1) | mqc_decode(mqc);
-               /*
-               if (v!=0xa) {
-                       opj_event_msg(t1->cinfo, EVT_WARNING, "Bad segmentation symbol %x\n", v);
-               } 
-               */
-       }
-}                              /* VSC and  BYPASS by Antonin */
+    int i, j, k, one, half, oneplushalf, agg, runlen, vsc;
+    int segsym = cblksty & J2K_CCP_CBLKSTY_SEGSYM;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    one = 1 << bpno;
+    half = one >> 1;
+    oneplushalf = one | half;
+    if (cblksty & J2K_CCP_CBLKSTY_VSC) {
+        for (k = 0; k < t1->h; k += 4) {
+            for (i = 0; i < t1->w; ++i) {
+                if (k + 3 < t1->h) {
+                    agg = !(MACRO_t1_flags(1 + k, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                            || MACRO_t1_flags(1 + k + 1, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                            || MACRO_t1_flags(1 + k + 2, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                            || (MACRO_t1_flags(1 + k + 3, 1 + i)
+                                & (~(T1_SIG_S | T1_SIG_SE | T1_SIG_SW | T1_SGN_S))) & (T1_SIG | T1_VISIT |
+                                        T1_SIG_OTH));
+                } else {
+                    agg = 0;
+                }
+                if (agg) {
+                    mqc_setcurctx(mqc, T1_CTXNO_AGG);
+                    if (!mqc_decode(mqc)) {
+                        continue;
+                    }
+                    mqc_setcurctx(mqc, T1_CTXNO_UNI);
+                    runlen = mqc_decode(mqc);
+                    runlen = (runlen << 1) | mqc_decode(mqc);
+                } else {
+                    runlen = 0;
+                }
+                for (j = k + runlen; j < k + 4 && j < t1->h; ++j) {
+                    vsc = (j == k + 3 || j == t1->h - 1) ? 1 : 0;
+                    t1_dec_clnpass_step_vsc(
+                        t1,
+                        &t1->flags[((j + 1) * t1->flags_stride) + i + 1],
+                        &t1->data[(j * t1->w) + i],
+                        orient,
+                        oneplushalf,
+                        agg && (j == k + runlen),
+                        vsc);
+                }
+            }
+        }
+    } else {
+        int *data1 = t1->data;
+        flag_t *flags1 = &t1->flags[1];
+        for (k = 0; k < (t1->h & ~3); k += 4) {
+            for (i = 0; i < t1->w; ++i) {
+                int *data2 = data1 + i;
+                flag_t *flags2 = flags1 + i;
+                agg = !(MACRO_t1_flags(1 + k, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                        || MACRO_t1_flags(1 + k + 1, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                        || MACRO_t1_flags(1 + k + 2, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH)
+                        || MACRO_t1_flags(1 + k + 3, 1 + i) & (T1_SIG | T1_VISIT | T1_SIG_OTH));
+                if (agg) {
+                    mqc_setcurctx(mqc, T1_CTXNO_AGG);
+                    if (!mqc_decode(mqc)) {
+                        continue;
+                    }
+                    mqc_setcurctx(mqc, T1_CTXNO_UNI);
+                    runlen = mqc_decode(mqc);
+                    runlen = (runlen << 1) | mqc_decode(mqc);
+                    flags2 += runlen * t1->flags_stride;
+                    data2 += runlen * t1->w;
+                    for (j = k + runlen; j < k + 4 && j < t1->h; ++j) {
+                        flags2 += t1->flags_stride;
+                        if (agg && (j == k + runlen)) {
+                            t1_dec_clnpass_step_partial(t1, flags2, data2, orient, oneplushalf);
+                        } else {
+                            t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf);
+                        }
+                        data2 += t1->w;
+                    }
+                } else {
+                    flags2 += t1->flags_stride;
+                    t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf);
+                    data2 += t1->w;
+                    flags2 += t1->flags_stride;
+                    t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf);
+                    data2 += t1->w;
+                    flags2 += t1->flags_stride;
+                    t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf);
+                    data2 += t1->w;
+                    flags2 += t1->flags_stride;
+                    t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf);
+                    data2 += t1->w;
+                }
+            }
+            data1 += t1->w << 2;
+            flags1 += t1->flags_stride << 2;
+        }
+        for (i = 0; i < t1->w; ++i) {
+            int *data2 = data1 + i;
+            flag_t *flags2 = flags1 + i;
+            for (j = k; j < t1->h; ++j) {
+                flags2 += t1->flags_stride;
+                t1_dec_clnpass_step(t1, flags2, data2, orient, oneplushalf);
+                data2 += t1->w;
+            }
+        }
+    }
+
+    if (segsym) {
+        int v = 0;
+        mqc_setcurctx(mqc, T1_CTXNO_UNI);
+        v = mqc_decode(mqc);
+        v = (v << 1) | mqc_decode(mqc);
+        v = (v << 1) | mqc_decode(mqc);
+        v = (v << 1) | mqc_decode(mqc);
+        /*
+        if (v!=0xa) {
+            opj_event_msg(t1->cinfo, EVT_WARNING, "Bad segmentation symbol %x\n", v);
+        }
+        */
+    }
+}               /* VSC and  BYPASS by Antonin */
 
 
 /** mod fixed_quality */
 static double t1_getwmsedec(
-               int nmsedec,
-               int compno,
-               int level,
-               int orient,
-               int bpno,
-               int qmfbid,
-               double stepsize,
-               int numcomps,
-               int mct)
+    int nmsedec,
+    int compno,
+    int level,
+    int orient,
+    int bpno,
+    int qmfbid,
+    double stepsize,
+    int numcomps,
+    int mct)
 {
-       double w1, w2, wmsedec;
-       if (qmfbid == 1) {
-               w1 = (mct && numcomps==3) ? mct_getnorm(compno) : 1.0;
-               w2 = dwt_getnorm(level, orient);
-       } else {                        /* if (qmfbid == 0) */
-               w1 = (mct && numcomps==3) ? mct_getnorm_real(compno) : 1.0;
-               w2 = dwt_getnorm_real(level, orient);
-       }
-       wmsedec = w1 * w2 * stepsize * (1 << bpno);
-       wmsedec *= wmsedec * nmsedec / 8192.0;
-       
-       return wmsedec;
+    double w1, w2, wmsedec;
+    if (qmfbid == 1) {
+        w1 = (mct && numcomps == 3) ? mct_getnorm(compno) : 1.0;
+        w2 = dwt_getnorm(level, orient);
+    } else {            /* if (qmfbid == 0) */
+        w1 = (mct && numcomps == 3) ? mct_getnorm_real(compno) : 1.0;
+        w2 = dwt_getnorm_real(level, orient);
+    }
+    wmsedec = w1 * w2 * stepsize * (1 << bpno);
+    wmsedec *= wmsedec * nmsedec / 8192.0;
+
+    return wmsedec;
 }
 
 static opj_bool allocate_buffers(
-               opj_t1_t *t1,
-               int w,
-               int h)
+    opj_t1_t *t1,
+    int w,
+    int h)
 {
-       int datasize=w * h;
-       int flagssize;
-
-       if(datasize > t1->datasize){
-               opj_aligned_free(t1->data);
-               t1->data = (int*) opj_aligned_malloc(datasize * sizeof(int));
-               if(!t1->data){
-                       return OPJ_FALSE;
-               }
-               t1->datasize=datasize;
-       }
-       memset(t1->data,0,datasize * sizeof(int));
-
-       t1->flags_stride=w+2;
-       flagssize=t1->flags_stride * (h+2);
-
-       if(flagssize > t1->flagssize){
-               opj_aligned_free(t1->flags);
-               t1->flags = (flag_t*) opj_aligned_malloc(flagssize * sizeof(flag_t));
-               if(!t1->flags){
-                       return OPJ_FALSE;
-               }
-               t1->flagssize=flagssize;
-       }
-       memset(t1->flags,0,flagssize * sizeof(flag_t));
-
-       t1->w=w;
-       t1->h=h;
-
-       return OPJ_TRUE;
+    int datasize = w * h;
+    int flagssize;
+
+    if (datasize > t1->datasize) {
+        opj_aligned_free(t1->data);
+        t1->data = (int*) opj_aligned_malloc(datasize * sizeof(int));
+        if (!t1->data) {
+            return OPJ_FALSE;
+        }
+        t1->datasize = datasize;
+    }
+    memset(t1->data, 0, datasize * sizeof(int));
+
+    t1->flags_stride = w + 2;
+    flagssize = t1->flags_stride * (h + 2);
+
+    if (flagssize > t1->flagssize) {
+        opj_aligned_free(t1->flags);
+        t1->flags = (flag_t*) opj_aligned_malloc(flagssize * sizeof(flag_t));
+        if (!t1->flags) {
+            return OPJ_FALSE;
+        }
+        t1->flagssize = flagssize;
+    }
+    memset(t1->flags, 0, flagssize * sizeof(flag_t));
+
+    t1->w = w;
+    t1->h = h;
+
+    return OPJ_TRUE;
 }
 
 /** mod fixed_quality */
 static void t1_encode_cblk(
-               opj_t1_t *t1,
-               opj_tcd_cblk_enc_t* cblk,
-               int orient,
-               int compno,
-               int level,
-               int qmfbid,
-               double stepsize,
-               int cblksty,
-               int numcomps,
-               int mct,
-               opj_tcd_tile_t * tile)
+    opj_t1_t *t1,
+    opj_tcd_cblk_enc_t* cblk,
+    int orient,
+    int compno,
+    int level,
+    int qmfbid,
+    double stepsize,
+    int cblksty,
+    int numcomps,
+    int mct,
+    opj_tcd_tile_t * tile)
 {
-       double cumwmsedec = 0.0;
-
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-
-       int passno, bpno, passtype;
-       int nmsedec = 0;
-       int i, max;
-       char type = T1_TYPE_MQ;
-       double tempwmsedec;
-
-       max = 0;
-       for (i = 0; i < t1->w * t1->h; ++i) {
-               int tmp = abs(t1->data[i]);
-               max = int_max(max, tmp);
-       }
-
-       cblk->numbps = max ? (int_floorlog2(max) + 1) - T1_NMSEDEC_FRACBITS : 0;
-       
-       bpno = cblk->numbps - 1;
-       passtype = 2;
-       
-       mqc_resetstates(mqc);
-       mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46);
-       mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3);
-       mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4);
-       mqc_init_enc(mqc, cblk->data);
-       
-       for (passno = 0; bpno >= 0; ++passno) {
-               opj_tcd_pass_t *pass = &cblk->passes[passno];
-               int correction = 3;
-               type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) && (cblksty & J2K_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
-               
-               switch (passtype) {
-                       case 0:
-                               t1_enc_sigpass(t1, bpno, orient, &nmsedec, type, cblksty);
-                               break;
-                       case 1:
-                               t1_enc_refpass(t1, bpno, &nmsedec, type, cblksty);
-                               break;
-                       case 2:
-                               t1_enc_clnpass(t1, bpno, orient, &nmsedec, cblksty);
-                               /* code switch SEGMARK (i.e. SEGSYM) */
-                               if (cblksty & J2K_CCP_CBLKSTY_SEGSYM)
-                                       mqc_segmark_enc(mqc);
-                               break;
-               }
-               
-               /* fixed_quality */
-               tempwmsedec = t1_getwmsedec(nmsedec, compno, level, orient, bpno, qmfbid, stepsize, numcomps, mct);
-               cumwmsedec += tempwmsedec;
-               tile->distotile += tempwmsedec;
-               
-               /* Code switch "RESTART" (i.e. TERMALL) */
-               if ((cblksty & J2K_CCP_CBLKSTY_TERMALL) && !((passtype == 2) && (bpno - 1 < 0))) {
-                       if (type == T1_TYPE_RAW) {
-                               mqc_flush(mqc);
-                               correction = 1;
-                               /* correction = mqc_bypass_flush_enc(); */
-                       } else {                        /* correction = mqc_restart_enc(); */
-                               mqc_flush(mqc);
-                               correction = 1;
-                       }
-                       pass->term = 1;
-               } else {
-                       if (((bpno < (cblk->numbps - 4) && (passtype > 0)) 
-                               || ((bpno == (cblk->numbps - 4)) && (passtype == 2))) && (cblksty & J2K_CCP_CBLKSTY_LAZY)) {
-                               if (type == T1_TYPE_RAW) {
-                                       mqc_flush(mqc);
-                                       correction = 1;
-                                       /* correction = mqc_bypass_flush_enc(); */
-                               } else {                /* correction = mqc_restart_enc(); */
-                                       mqc_flush(mqc);
-                                       correction = 1;
-                               }
-                               pass->term = 1;
-                       } else {
-                               pass->term = 0;
-                       }
-               }
-               
-               if (++passtype == 3) {
-                       passtype = 0;
-                       bpno--;
-               }
-               
-               if (pass->term && bpno > 0) {
-                       type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) && (cblksty & J2K_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
-                       if (type == T1_TYPE_RAW)
-                               mqc_bypass_init_enc(mqc);
-                       else
-                               mqc_restart_init_enc(mqc);
-               }
-               
-               pass->distortiondec = cumwmsedec;
-               pass->rate = mqc_numbytes(mqc) + correction;    /* FIXME */
-               
-               /* Code-switch "RESET" */
-               if (cblksty & J2K_CCP_CBLKSTY_RESET)
-                       mqc_reset_enc(mqc);
-       }
-       
-       /* Code switch "ERTERM" (i.e. PTERM) */
-       if (cblksty & J2K_CCP_CBLKSTY_PTERM)
-               mqc_erterm_enc(mqc);
-       else /* Default coding */ if (!(cblksty & J2K_CCP_CBLKSTY_LAZY))
-               mqc_flush(mqc);
-       
-       cblk->totalpasses = passno;
-
-       for (passno = 0; passno<cblk->totalpasses; passno++) {
-               opj_tcd_pass_t *pass = &cblk->passes[passno];
-               if (pass->rate > mqc_numbytes(mqc))
-                       pass->rate = mqc_numbytes(mqc);
-               /*Preventing generation of FF as last data byte of a pass*/
-               if((pass->rate>1) && (cblk->data[pass->rate - 1] == 0xFF)){
-                       pass->rate--;
-               }
-               pass->len = pass->rate - (passno == 0 ? 0 : cblk->passes[passno - 1].rate);             
-       }
+    double cumwmsedec = 0.0;
+
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    int passno, bpno, passtype;
+    int nmsedec = 0;
+    int i, max;
+    char type = T1_TYPE_MQ;
+    double tempwmsedec;
+
+    max = 0;
+    for (i = 0; i < t1->w * t1->h; ++i) {
+        int tmp = abs(t1->data[i]);
+        max = int_max(max, tmp);
+    }
+
+    cblk->numbps = max ? (int_floorlog2(max) + 1) - T1_NMSEDEC_FRACBITS : 0;
+
+    bpno = cblk->numbps - 1;
+    passtype = 2;
+
+    mqc_resetstates(mqc);
+    mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46);
+    mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3);
+    mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4);
+    mqc_init_enc(mqc, cblk->data);
+
+    for (passno = 0; bpno >= 0; ++passno) {
+        opj_tcd_pass_t *pass = &cblk->passes[passno];
+        int correction = 3;
+        type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) &&
+                (cblksty & J2K_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
+
+        switch (passtype) {
+        case 0:
+            t1_enc_sigpass(t1, bpno, orient, &nmsedec, type, cblksty);
+            break;
+        case 1:
+            t1_enc_refpass(t1, bpno, &nmsedec, type, cblksty);
+            break;
+        case 2:
+            t1_enc_clnpass(t1, bpno, orient, &nmsedec, cblksty);
+            /* code switch SEGMARK (i.e. SEGSYM) */
+            if (cblksty & J2K_CCP_CBLKSTY_SEGSYM) {
+                mqc_segmark_enc(mqc);
+            }
+            break;
+        }
+
+        /* fixed_quality */
+        tempwmsedec = t1_getwmsedec(nmsedec, compno, level, orient, bpno, qmfbid,
+                                    stepsize, numcomps, mct);
+        cumwmsedec += tempwmsedec;
+        tile->distotile += tempwmsedec;
+
+        /* Code switch "RESTART" (i.e. TERMALL) */
+        if ((cblksty & J2K_CCP_CBLKSTY_TERMALL) && !((passtype == 2) &&
+                (bpno - 1 < 0))) {
+            if (type == T1_TYPE_RAW) {
+                mqc_flush(mqc);
+                correction = 1;
+                /* correction = mqc_bypass_flush_enc(); */
+            } else {            /* correction = mqc_restart_enc(); */
+                mqc_flush(mqc);
+                correction = 1;
+            }
+            pass->term = 1;
+        } else {
+            if (((bpno < (cblk->numbps - 4) && (passtype > 0))
+                    || ((bpno == (cblk->numbps - 4)) && (passtype == 2))) &&
+                    (cblksty & J2K_CCP_CBLKSTY_LAZY)) {
+                if (type == T1_TYPE_RAW) {
+                    mqc_flush(mqc);
+                    correction = 1;
+                    /* correction = mqc_bypass_flush_enc(); */
+                } else {        /* correction = mqc_restart_enc(); */
+                    mqc_flush(mqc);
+                    correction = 1;
+                }
+                pass->term = 1;
+            } else {
+                pass->term = 0;
+            }
+        }
+
+        if (++passtype == 3) {
+            passtype = 0;
+            bpno--;
+        }
+
+        if (pass->term && bpno > 0) {
+            type = ((bpno < (cblk->numbps - 4)) && (passtype < 2) &&
+                    (cblksty & J2K_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
+            if (type == T1_TYPE_RAW) {
+                mqc_bypass_init_enc(mqc);
+            } else {
+                mqc_restart_init_enc(mqc);
+            }
+        }
+
+        pass->distortiondec = cumwmsedec;
+        pass->rate = mqc_numbytes(mqc) + correction;    /* FIXME */
+
+        /* Code-switch "RESET" */
+        if (cblksty & J2K_CCP_CBLKSTY_RESET) {
+            mqc_reset_enc(mqc);
+        }
+    }
+
+    /* Code switch "ERTERM" (i.e. PTERM) */
+    if (cblksty & J2K_CCP_CBLKSTY_PTERM) {
+        mqc_erterm_enc(mqc);
+    } else /* Default coding */ if (!(cblksty & J2K_CCP_CBLKSTY_LAZY)) {
+        mqc_flush(mqc);
+    }
+
+    cblk->totalpasses = passno;
+
+    for (passno = 0; passno < cblk->totalpasses; passno++) {
+        opj_tcd_pass_t *pass = &cblk->passes[passno];
+        if (pass->rate > mqc_numbytes(mqc)) {
+            pass->rate = mqc_numbytes(mqc);
+        }
+        /*Preventing generation of FF as last data byte of a pass*/
+        if ((pass->rate > 1) && (cblk->data[pass->rate - 1] == 0xFF)) {
+            pass->rate--;
+        }
+        pass->len = pass->rate - (passno == 0 ? 0 : cblk->passes[passno - 1].rate);
+    }
 }
 
 static void t1_decode_cblk(
-               opj_t1_t *t1,
-               opj_tcd_cblk_dec_t* cblk,
-               int orient,
-               int roishift,
-               int cblksty)
+    opj_t1_t *t1,
+    opj_tcd_cblk_dec_t* cblk,
+    int orient,
+    int roishift,
+    int cblksty)
 {
-       opj_raw_t *raw = t1->raw;       /* RAW component */
-       opj_mqc_t *mqc = t1->mqc;       /* MQC component */
-
-       int bpno, passtype;
-       int segno, passno;
-       char type = T1_TYPE_MQ; /* BYPASS mode */
-
-       if(!allocate_buffers(
-                               t1,
-                               cblk->x1 - cblk->x0,
-                               cblk->y1 - cblk->y0))
-       {
-               return;
-       }
-
-       bpno = roishift + cblk->numbps - 1;
-       passtype = 2;
-       
-       mqc_resetstates(mqc);
-       mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46);
-       mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3);
-       mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4);
-       
-       for (segno = 0; segno < cblk->numsegs; ++segno) {
-               opj_tcd_seg_t *seg = &cblk->segs[segno];
-               
-               /* BYPASS mode */
-               type = ((bpno <= (cblk->numbps - 1) - 4) && (passtype < 2) && (cblksty & J2K_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
-               /* FIXME: slviewer gets here with a null pointer. Why? Partially downloaded and/or corrupt textures? */
-               if(seg->data == NULL){
-                       continue;
-               }
-               if (type == T1_TYPE_RAW) {
-                       raw_init_dec(raw, (*seg->data) + seg->dataindex, seg->len);
-               } else {
-                       mqc_init_dec(mqc, (*seg->data) + seg->dataindex, seg->len);
-               }
-               
-               for (passno = 0; passno < seg->numpasses; ++passno) {
-                       switch (passtype) {
-                               case 0:
-                                       if (type == T1_TYPE_RAW) {
-                                               t1_dec_sigpass_raw(t1, bpno+1, orient, cblksty);
-                                       } else {
-                                               if (cblksty & J2K_CCP_CBLKSTY_VSC) {
-                                                       t1_dec_sigpass_mqc_vsc(t1, bpno+1, orient);
-                                               } else {
-                                                       t1_dec_sigpass_mqc(t1, bpno+1, orient);
-                                               }
-                                       }
-                                       break;
-                               case 1:
-                                       if (type == T1_TYPE_RAW) {
-                                               t1_dec_refpass_raw(t1, bpno+1, cblksty);
-                                       } else {
-                                               if (cblksty & J2K_CCP_CBLKSTY_VSC) {
-                                                       t1_dec_refpass_mqc_vsc(t1, bpno+1);
-                                               } else {
-                                                       t1_dec_refpass_mqc(t1, bpno+1);
-                                               }
-                                       }
-                                       break;
-                               case 2:
-                                       t1_dec_clnpass(t1, bpno+1, orient, cblksty);
-                                       break;
-                       }
-                       
-                       if ((cblksty & J2K_CCP_CBLKSTY_RESET) && type == T1_TYPE_MQ) {
-                               mqc_resetstates(mqc);
-                               mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46);                         
-                               mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3);
-                               mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4);
-                       }
-                       if (++passtype == 3) {
-                               passtype = 0;
-                               bpno--;
-                       }
-               }
-       }
+    opj_raw_t *raw = t1->raw;   /* RAW component */
+    opj_mqc_t *mqc = t1->mqc;   /* MQC component */
+
+    int bpno, passtype;
+    int segno, passno;
+    char type = T1_TYPE_MQ; /* BYPASS mode */
+
+    if (!allocate_buffers(
+                t1,
+                cblk->x1 - cblk->x0,
+                cblk->y1 - cblk->y0)) {
+        return;
+    }
+
+    bpno = roishift + cblk->numbps - 1;
+    passtype = 2;
+
+    mqc_resetstates(mqc);
+    mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46);
+    mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3);
+    mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4);
+
+    for (segno = 0; segno < cblk->numsegs; ++segno) {
+        opj_tcd_seg_t *seg = &cblk->segs[segno];
+
+        /* BYPASS mode */
+        type = ((bpno <= (cblk->numbps - 1) - 4) && (passtype < 2) &&
+                (cblksty & J2K_CCP_CBLKSTY_LAZY)) ? T1_TYPE_RAW : T1_TYPE_MQ;
+        /* FIXME: slviewer gets here with a null pointer. Why? Partially downloaded and/or corrupt textures? */
+        if (seg->data == NULL) {
+            continue;
+        }
+        if (type == T1_TYPE_RAW) {
+            raw_init_dec(raw, (*seg->data) + seg->dataindex, seg->len);
+        } else {
+            mqc_init_dec(mqc, (*seg->data) + seg->dataindex, seg->len);
+        }
+
+        for (passno = 0; passno < seg->numpasses; ++passno) {
+            switch (passtype) {
+            case 0:
+                if (type == T1_TYPE_RAW) {
+                    t1_dec_sigpass_raw(t1, bpno + 1, orient, cblksty);
+                } else {
+                    if (cblksty & J2K_CCP_CBLKSTY_VSC) {
+                        t1_dec_sigpass_mqc_vsc(t1, bpno + 1, orient);
+                    } else {
+                        t1_dec_sigpass_mqc(t1, bpno + 1, orient);
+                    }
+                }
+                break;
+            case 1:
+                if (type == T1_TYPE_RAW) {
+                    t1_dec_refpass_raw(t1, bpno + 1, cblksty);
+                } else {
+                    if (cblksty & J2K_CCP_CBLKSTY_VSC) {
+                        t1_dec_refpass_mqc_vsc(t1, bpno + 1);
+                    } else {
+                        t1_dec_refpass_mqc(t1, bpno + 1);
+                    }
+                }
+                break;
+            case 2:
+                t1_dec_clnpass(t1, bpno + 1, orient, cblksty);
+                break;
+            }
+
+            if ((cblksty & J2K_CCP_CBLKSTY_RESET) && type == T1_TYPE_MQ) {
+                mqc_resetstates(mqc);
+                mqc_setstate(mqc, T1_CTXNO_UNI, 0, 46);
+                mqc_setstate(mqc, T1_CTXNO_AGG, 0, 3);
+                mqc_setstate(mqc, T1_CTXNO_ZC, 0, 4);
+            }
+            if (++passtype == 3) {
+                passtype = 0;
+                bpno--;
+            }
+        }
+    }
 }
 
 /* ----------------------------------------------------------------------- */
 
-opj_t1_t* t1_create(opj_common_ptr cinfo) {
-       opj_t1_t *t1 = (opj_t1_t*) opj_malloc(sizeof(opj_t1_t));
-       if(!t1)
-               return NULL;
-
-       t1->cinfo = cinfo;
-       /* create MQC and RAW handles */
-       t1->mqc = mqc_create();
-       t1->raw = raw_create();
-
-       t1->data=NULL;
-       t1->flags=NULL;
-       t1->datasize=0;
-       t1->flagssize=0;
-
-       return t1;
+opj_t1_t* t1_create(opj_common_ptr cinfo)
+{
+    opj_t1_t *t1 = (opj_t1_t*) opj_malloc(sizeof(opj_t1_t));
+    if (!t1) {
+        return NULL;
+    }
+
+    t1->cinfo = cinfo;
+    /* create MQC and RAW handles */
+    t1->mqc = mqc_create();
+    t1->raw = raw_create();
+
+    t1->data = NULL;
+    t1->flags = NULL;
+    t1->datasize = 0;
+    t1->flagssize = 0;
+
+    return t1;
 }
 
-void t1_destroy(opj_t1_t *t1) {
-       if(t1) {
-               /* destroy MQC and RAW handles */
-               mqc_destroy(t1->mqc);
-               raw_destroy(t1->raw);
-               opj_aligned_free(t1->data);
-               opj_aligned_free(t1->flags);
-               opj_free(t1);
-       }
+void t1_destroy(opj_t1_t *t1)
+{
+    if (t1) {
+        /* destroy MQC and RAW handles */
+        mqc_destroy(t1->mqc);
+        raw_destroy(t1->raw);
+        opj_aligned_free(t1->data);
+        opj_aligned_free(t1->flags);
+        opj_free(t1);
+    }
 }
 
 void t1_encode_cblks(
-               opj_t1_t *t1,
-               opj_tcd_tile_t *tile,
-               opj_tcp_t *tcp)
+    opj_t1_t *t1,
+    opj_tcd_tile_t *tile,
+    opj_tcp_t *tcp)
 {
-       int compno, resno, bandno, precno, cblkno;
-
-       tile->distotile = 0;            /* fixed_quality */
-
-       for (compno = 0; compno < tile->numcomps; ++compno) {
-               opj_tcd_tilecomp_t* tilec = &tile->comps[compno];
-               opj_tccp_t* tccp = &tcp->tccps[compno];
-               int tile_w = tilec->x1 - tilec->x0;
-
-               for (resno = 0; resno < tilec->numresolutions; ++resno) {
-                       opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-
-                       for (bandno = 0; bandno < res->numbands; ++bandno) {
-                               opj_tcd_band_t* restrict band = &res->bands[bandno];
-        int bandconst = 8192 * 8192 / ((int) floor(band->stepsize * 8192));
-
-                               for (precno = 0; precno < res->pw * res->ph; ++precno) {
-                                       opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-                                       for (cblkno = 0; cblkno < prc->cw * prc->ch; ++cblkno) {
-                                               opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno];
-                                               int* restrict datap;
-                                               int* restrict tiledp;
-                                               int cblk_w;
-                                               int cblk_h;
-                                               int i, j;
-
-                                               int x = cblk->x0 - band->x0;
-                                               int y = cblk->y0 - band->y0;
-                                               if (band->bandno & 1) {
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       x += pres->x1 - pres->x0;
-                                               }
-                                               if (band->bandno & 2) {
-                                                       opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
-                                                       y += pres->y1 - pres->y0;
-                                               }
-
-                                               if(!allocate_buffers(
-                                                                       t1,
-                                                                       cblk->x1 - cblk->x0,
-                                                                       cblk->y1 - cblk->y0))
-                                               {
-                                                       return;
-                                               }
-
-                                               datap=t1->data;
-                                               cblk_w = t1->w;
-                                               cblk_h = t1->h;
-
-                                               tiledp=&tilec->data[(y * tile_w) + x];
-                                               if (tccp->qmfbid == 1) {
-                                                       for (j = 0; j < cblk_h; ++j) {
-                                                               for (i = 0; i < cblk_w; ++i) {
-                                                                       int tmp = tiledp[(j * tile_w) + i];
-                                                                       datap[(j * cblk_w) + i] = tmp << T1_NMSEDEC_FRACBITS;
-                                                               }
-                                                       }
-                                               } else {                /* if (tccp->qmfbid == 0) */
-                                                       for (j = 0; j < cblk_h; ++j) {
-                                                               for (i = 0; i < cblk_w; ++i) {
-                                                                       int tmp = tiledp[(j * tile_w) + i];
-                                                                       datap[(j * cblk_w) + i] =
-                                                                               fix_mul(
-                                                                               tmp,
-                                                                               bandconst) >> (11 - T1_NMSEDEC_FRACBITS);
-                                                               }
-                                                       }
-                                               }
-
-                                               t1_encode_cblk(
-                                                               t1,
-                                                               cblk,
-                                                               band->bandno,
-                                                               compno,
-                                                               tilec->numresolutions - 1 - resno,
-                                                               tccp->qmfbid,
-                                                               band->stepsize,
-                                                               tccp->cblksty,
-                                                               tile->numcomps,
-                                                               tcp->mct,
-                                                               tile);
-
-                                       } /* cblkno */
-                               } /* precno */
-                       } /* bandno */
-               } /* resno  */
-       } /* compno  */
+    int compno, resno, bandno, precno, cblkno;
+
+    tile->distotile = 0;        /* fixed_quality */
+
+    for (compno = 0; compno < tile->numcomps; ++compno) {
+        opj_tcd_tilecomp_t* tilec = &tile->comps[compno];
+        opj_tccp_t* tccp = &tcp->tccps[compno];
+        int tile_w = tilec->x1 - tilec->x0;
+
+        for (resno = 0; resno < tilec->numresolutions; ++resno) {
+            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+
+            for (bandno = 0; bandno < res->numbands; ++bandno) {
+                opj_tcd_band_t* restrict band = &res->bands[bandno];
+                int bandconst = 8192 * 8192 / ((int) floor(band->stepsize * 8192));
+
+                for (precno = 0; precno < res->pw * res->ph; ++precno) {
+                    opj_tcd_precinct_t *prc = &band->precincts[precno];
+
+                    for (cblkno = 0; cblkno < prc->cw * prc->ch; ++cblkno) {
+                        opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno];
+                        int* restrict datap;
+                        int* restrict tiledp;
+                        int cblk_w;
+                        int cblk_h;
+                        int i, j;
+
+                        int x = cblk->x0 - band->x0;
+                        int y = cblk->y0 - band->y0;
+                        if (band->bandno & 1) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            x += pres->x1 - pres->x0;
+                        }
+                        if (band->bandno & 2) {
+                            opj_tcd_resolution_t *pres = &tilec->resolutions[resno - 1];
+                            y += pres->y1 - pres->y0;
+                        }
+
+                        if (!allocate_buffers(
+                                    t1,
+                                    cblk->x1 - cblk->x0,
+                                    cblk->y1 - cblk->y0)) {
+                            return;
+                        }
+
+                        datap = t1->data;
+                        cblk_w = t1->w;
+                        cblk_h = t1->h;
+
+                        tiledp = &tilec->data[(y * tile_w) + x];
+                        if (tccp->qmfbid == 1) {
+                            for (j = 0; j < cblk_h; ++j) {
+                                for (i = 0; i < cblk_w; ++i) {
+                                    int tmp = tiledp[(j * tile_w) + i];
+                                    datap[(j * cblk_w) + i] = tmp << T1_NMSEDEC_FRACBITS;
+                                }
+                            }
+                        } else {        /* if (tccp->qmfbid == 0) */
+                            for (j = 0; j < cblk_h; ++j) {
+                                for (i = 0; i < cblk_w; ++i) {
+                                    int tmp = tiledp[(j * tile_w) + i];
+                                    datap[(j * cblk_w) + i] =
+                                        fix_mul(
+                                            tmp,
+                                            bandconst) >> (11 - T1_NMSEDEC_FRACBITS);
+                                }
+                            }
+                        }
+
+                        t1_encode_cblk(
+                            t1,
+                            cblk,
+                            band->bandno,
+                            compno,
+                            tilec->numresolutions - 1 - resno,
+                            tccp->qmfbid,
+                            band->stepsize,
+                            tccp->cblksty,
+                            tile->numcomps,
+                            tcp->mct,
+                            tile);
+
+                    } /* cblkno */
+                } /* precno */
+            } /* bandno */
+        } /* resno  */
+    } /* compno  */
 }
 
 void t1_decode_cblks(
-               opj_t1_t* t1,
-               opj_tcd_tilecomp_t* tilec,
-               opj_tccp_t* tccp)
+    opj_t1_t* t1,
+    opj_tcd_tilecomp_t* tilec,
+    opj_tccp_t* tccp)
 {
-       int resno, bandno, precno, cblkno;
-
-       int tile_w = tilec->x1 - tilec->x0;
-
-       for (resno = 0; resno < tilec->numresolutions; ++resno) {
-               opj_tcd_resolution_t* res = &tilec->resolutions[resno];
-
-               for (bandno = 0; bandno < res->numbands; ++bandno) {
-                       opj_tcd_band_t* restrict band = &res->bands[bandno];
-
-                       for (precno = 0; precno < res->pw * res->ph; ++precno) {
-                               opj_tcd_precinct_t* precinct = &band->precincts[precno];
-
-                               for (cblkno = 0; cblkno < precinct->cw * precinct->ch; ++cblkno) {
-                                       opj_tcd_cblk_dec_t* cblk = &precinct->cblks.dec[cblkno];
-                                       int* restrict datap;
-                                       int cblk_w, cblk_h;
-                                       int x, y;
-                                       int i, j;
-
-                                       t1_decode_cblk(
-                                                       t1,
-                                                       cblk,
-                                                       band->bandno,
-                                                       tccp->roishift,
-                                                       tccp->cblksty);
-
-                                       x = cblk->x0 - band->x0;
-                                       y = cblk->y0 - band->y0;
-                                       if (band->bandno & 1) {
-                                               opj_tcd_resolution_t* pres = &tilec->resolutions[resno - 1];
-                                               x += pres->x1 - pres->x0;
-                                       }
-                                       if (band->bandno & 2) {
-                                               opj_tcd_resolution_t* pres = &tilec->resolutions[resno - 1];
-                                               y += pres->y1 - pres->y0;
-                                       }
-
-                                       datap=t1->data;
-                                       cblk_w = t1->w;
-                                       cblk_h = t1->h;
-
-                                       if (tccp->roishift) {
-                                               int thresh = 1 << tccp->roishift;
-                                               for (j = 0; j < cblk_h; ++j) {
-                                                       for (i = 0; i < cblk_w; ++i) {
-                                                               int val = datap[(j * cblk_w) + i];
-                                                               int mag = abs(val);
-                                                               if (mag >= thresh) {
-                                                                       mag >>= tccp->roishift;
-                                                                       datap[(j * cblk_w) + i] = val < 0 ? -mag : mag;
-                                                               }
-                                                       }
-                                               }
-                                       }
-
-                                       if (tccp->qmfbid == 1) {
-                                               int* restrict tiledp = &tilec->data[(y * tile_w) + x];
-                                               for (j = 0; j < cblk_h; ++j) {
-                                                       for (i = 0; i < cblk_w; ++i) {
-                                                               int tmp = datap[(j * cblk_w) + i];
-                                                               ((int*)tiledp)[(j * tile_w) + i] = tmp / 2;
-                                                       }
-                                               }
-                                       } else {                /* if (tccp->qmfbid == 0) */
-                                               float* restrict tiledp = (float*) &tilec->data[(y * tile_w) + x];
-                                               for (j = 0; j < cblk_h; ++j) {
-                                                       float* restrict tiledp2 = tiledp;
-                                                       for (i = 0; i < cblk_w; ++i) {
-                                                               float tmp = *datap * band->stepsize;
-                                                               *tiledp2 = tmp;
-                                                               datap++;
-                                                               tiledp2++;
-                                                       }
-                                                       tiledp += tile_w;
-                                               }
-                                       }
-                                       opj_free(cblk->data);
-                                       opj_free(cblk->segs);
-                               } /* cblkno */
-                               opj_free(precinct->cblks.dec);
+    int resno, bandno, precno, cblkno;
+
+    int tile_w = tilec->x1 - tilec->x0;
+
+    for (resno = 0; resno < tilec->numresolutions; ++resno) {
+        opj_tcd_resolution_t* res = &tilec->resolutions[resno];
+
+        for (bandno = 0; bandno < res->numbands; ++bandno) {
+            opj_tcd_band_t* restrict band = &res->bands[bandno];
+
+            for (precno = 0; precno < res->pw * res->ph; ++precno) {
+                opj_tcd_precinct_t* precinct = &band->precincts[precno];
+
+                for (cblkno = 0; cblkno < precinct->cw * precinct->ch; ++cblkno) {
+                    opj_tcd_cblk_dec_t* cblk = &precinct->cblks.dec[cblkno];
+                    int* restrict datap;
+                    int cblk_w, cblk_h;
+                    int x, y;
+                    int i, j;
+
+                    t1_decode_cblk(
+                        t1,
+                        cblk,
+                        band->bandno,
+                        tccp->roishift,
+                        tccp->cblksty);
+
+                    x = cblk->x0 - band->x0;
+                    y = cblk->y0 - band->y0;
+                    if (band->bandno & 1) {
+                        opj_tcd_resolution_t* pres = &tilec->resolutions[resno - 1];
+                        x += pres->x1 - pres->x0;
+                    }
+                    if (band->bandno & 2) {
+                        opj_tcd_resolution_t* pres = &tilec->resolutions[resno - 1];
+                        y += pres->y1 - pres->y0;
+                    }
+
+                    datap = t1->data;
+                    cblk_w = t1->w;
+                    cblk_h = t1->h;
+
+                    if (tccp->roishift) {
+                        int thresh = 1 << tccp->roishift;
+                        for (j = 0; j < cblk_h; ++j) {
+                            for (i = 0; i < cblk_w; ++i) {
+                                int val = datap[(j * cblk_w) + i];
+                                int mag = abs(val);
+                                if (mag >= thresh) {
+                                    mag >>= tccp->roishift;
+                                    datap[(j * cblk_w) + i] = val < 0 ? -mag : mag;
+                                }
+                            }
+                        }
+                    }
+
+                    if (tccp->qmfbid == 1) {
+                        int* restrict tiledp = &tilec->data[(y * tile_w) + x];
+                        for (j = 0; j < cblk_h; ++j) {
+                            for (i = 0; i < cblk_w; ++i) {
+                                int tmp = datap[(j * cblk_w) + i];
+                                ((int*)tiledp)[(j * tile_w) + i] = tmp / 2;
+                            }
+                        }
+                    } else {        /* if (tccp->qmfbid == 0) */
+                        float* restrict tiledp = (float*) &tilec->data[(y * tile_w) + x];
+                        for (j = 0; j < cblk_h; ++j) {
+                            float* restrict tiledp2 = tiledp;
+                            for (i = 0; i < cblk_w; ++i) {
+                                float tmp = *datap * band->stepsize;
+                                *tiledp2 = tmp;
+                                datap++;
+                                tiledp2++;
+                            }
+                            tiledp += tile_w;
+                        }
+                    }
+                    opj_free(cblk->data);
+                    opj_free(cblk->segs);
+                } /* cblkno */
+                opj_free(precinct->cblks.dec);
                 precinct->cblks.dec = NULL;
-                       } /* precno */
-               } /* bandno */
-       } /* resno */
+            } /* precno */
+        } /* bandno */
+    } /* resno */
 }
 
index 9762762fbcb28a2112afe12332889ff1c95db3bf..c0c019dcb82f080b7dc99a82838503f0c8c635ec 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * All rights reserved.
@@ -59,18 +59,21 @@ Encode a packet of a tile to a destination buffer
 @param pi Packet identity
 @param dest Destination buffer
 @param len Length of the destination buffer
-@param cstr_info Codestream information structure 
+@param cstr_info Codestream information structure
 @param tileno Number of the tile encoded
-@return 
+@return
 */
-static int t2_encode_packet(opj_tcd_tile_t *tile, opj_tcp_t *tcp, opj_pi_iterator_t *pi, unsigned char *dest, int len, opj_codestream_info_t *cstr_info, int tileno);
+static int t2_encode_packet(opj_tcd_tile_t *tile, opj_tcp_t *tcp,
+                            opj_pi_iterator_t *pi, unsigned char *dest, int len,
+                            opj_codestream_info_t *cstr_info, int tileno);
 /**
 @param cblk
 @param index
 @param cblksty
 @param first
 */
-static opj_bool t2_init_seg(opj_tcd_cblk_dec_t* cblk, int index, int cblksty, int first);
+static opj_bool t2_init_seg(opj_tcd_cblk_dec_t* cblk, int index, int cblksty,
+                            int first);
 /**
 Decode a packet of a tile from a source buffer
 @param t2 T2 handle
@@ -80,10 +83,11 @@ Decode a packet of a tile from a source buffer
 @param tcp Tile coding parameters
 @param pi Packet identity
 @param pack_info Packet information
-@return 
+@return
 */
-static int t2_decode_packet(opj_t2_t* t2, unsigned char *src, int len, opj_tcd_tile_t *tile, 
-                                                                                                               opj_tcp_t *tcp, opj_pi_iterator_t *pi, opj_packet_info_t *pack_info);
+static int t2_decode_packet(opj_t2_t* t2, unsigned char *src, int len,
+                            opj_tcd_tile_t *tile,
+                            opj_tcp_t *tcp, opj_pi_iterator_t *pi, opj_packet_info_t *pack_info);
 
 /*@}*/
 
@@ -93,733 +97,785 @@ static int t2_decode_packet(opj_t2_t* t2, unsigned char *src, int len, opj_tcd_t
 
 /* #define RESTART 0x04 */
 
-static void t2_putcommacode(opj_bio_t *bio, int n) {
-       while (--n >= 0) {
-               bio_write(bio, 1, 1);
-       }
-       bio_write(bio, 0, 1);
+static void t2_putcommacode(opj_bio_t *bio, int n)
+{
+    while (--n >= 0) {
+        bio_write(bio, 1, 1);
+    }
+    bio_write(bio, 0, 1);
 }
 
-static int t2_getcommacode(opj_bio_t *bio) {
-       int n;
-       for (n = 0; bio_read(bio, 1); n++) {
-               ;
-       }
-       return n;
+static int t2_getcommacode(opj_bio_t *bio)
+{
+    int n;
+    for (n = 0; bio_read(bio, 1); n++) {
+        ;
+    }
+    return n;
 }
 
-static void t2_putnumpasses(opj_bio_t *bio, int n) {
-       if (n == 1) {
-               bio_write(bio, 0, 1);
-       } else if (n == 2) {
-               bio_write(bio, 2, 2);
-       } else if (n <= 5) {
-               bio_write(bio, 0xc | (n - 3), 4);
-       } else if (n <= 36) {
-               bio_write(bio, 0x1e0 | (n - 6), 9);
-       } else if (n <= 164) {
-               bio_write(bio, 0xff80 | (n - 37), 16);
-       }
+static void t2_putnumpasses(opj_bio_t *bio, int n)
+{
+    if (n == 1) {
+        bio_write(bio, 0, 1);
+    } else if (n == 2) {
+        bio_write(bio, 2, 2);
+    } else if (n <= 5) {
+        bio_write(bio, 0xc | (n - 3), 4);
+    } else if (n <= 36) {
+        bio_write(bio, 0x1e0 | (n - 6), 9);
+    } else if (n <= 164) {
+        bio_write(bio, 0xff80 | (n - 37), 16);
+    }
 }
 
-static int t2_getnumpasses(opj_bio_t *bio) {
-       int n;
-       if (!bio_read(bio, 1))
-               return 1;
-       if (!bio_read(bio, 1))
-               return 2;
-       if ((n = bio_read(bio, 2)) != 3)
-               return (3 + n);
-       if ((n = bio_read(bio, 5)) != 31)
-               return (6 + n);
-       return (37 + bio_read(bio, 7));
+static int t2_getnumpasses(opj_bio_t *bio)
+{
+    int n;
+    if (!bio_read(bio, 1)) {
+        return 1;
+    }
+    if (!bio_read(bio, 1)) {
+        return 2;
+    }
+    if ((n = bio_read(bio, 2)) != 3) {
+        return (3 + n);
+    }
+    if ((n = bio_read(bio, 5)) != 31) {
+        return (6 + n);
+    }
+    return (37 + bio_read(bio, 7));
 }
 
-static int t2_encode_packet(opj_tcd_tile_t * tile, opj_tcp_t * tcp, opj_pi_iterator_t *pi, unsigned char *dest, int length, opj_codestream_info_t *cstr_info, int tileno) {
-       int bandno, cblkno;
-       unsigned char *c = dest;
-
-       int compno = pi->compno;        /* component value */
-       int resno  = pi->resno;         /* resolution level value */
-       int precno = pi->precno;        /* precinct value */
-       int layno  = pi->layno;         /* quality layer value */
-
-       opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-       opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-       
-       opj_bio_t *bio = NULL;  /* BIO component */
-       
-       /* <SOP 0xff91> */
-       if (tcp->csty & J2K_CP_CSTY_SOP) {
-               c[0] = 255;
-               c[1] = 145;
-               c[2] = 0;
-               c[3] = 4;
-               c[4] = (unsigned char)((tile->packno % 65536) / 256);
-               c[5] = (unsigned char)((tile->packno % 65536) % 256);
-               c += 6;
-       }
-       /* </SOP> */
-       
-       if (!layno) {
-               for (bandno = 0; bandno < res->numbands; bandno++) {
-                       opj_tcd_band_t *band = &res->bands[bandno];
-                       opj_tcd_precinct_t *prc = &band->precincts[precno];
-                       tgt_reset(prc->incltree);
-                       tgt_reset(prc->imsbtree);
-                       for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                               opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno];
-                               cblk->numpasses = 0;
-                               tgt_setvalue(prc->imsbtree, cblkno, band->numbps - cblk->numbps);
-                       }
-               }
-       }
-       
-       bio = bio_create();
-       bio_init_enc(bio, c, length);
-       bio_write(bio, 1, 1);           /* Empty header bit */
-       
-       /* Writing Packet header */
-       for (bandno = 0; bandno < res->numbands; bandno++) {
-               opj_tcd_band_t *band = &res->bands[bandno];
-               opj_tcd_precinct_t *prc = &band->precincts[precno];
-               for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                       opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno];
-                       opj_tcd_layer_t *layer = &cblk->layers[layno];
-                       if (!cblk->numpasses && layer->numpasses) {
-                               tgt_setvalue(prc->incltree, cblkno, layno);
-                       }
-               }
-               for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                       opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno];
-                       opj_tcd_layer_t *layer = &cblk->layers[layno];
-                       int increment = 0;
-                       int nump = 0;
-                       int len = 0, passno;
-                       /* cblk inclusion bits */
-                       if (!cblk->numpasses) {
-                               tgt_encode(bio, prc->incltree, cblkno, layno + 1);
-                       } else {
-                               bio_write(bio, layer->numpasses != 0, 1);
-                       }
-                       /* if cblk not included, go to the next cblk  */
-                       if (!layer->numpasses) {
-                               continue;
-                       }
-                       /* if first instance of cblk --> zero bit-planes information */
-                       if (!cblk->numpasses) {
-                               cblk->numlenbits = 3;
-                               tgt_encode(bio, prc->imsbtree, cblkno, 999);
-                       }
-                       /* number of coding passes included */
-                       t2_putnumpasses(bio, layer->numpasses);
-                       
-                       /* computation of the increase of the length indicator and insertion in the header     */
-                       for (passno = cblk->numpasses; passno < cblk->numpasses + layer->numpasses; passno++) {
-                               opj_tcd_pass_t *pass = &cblk->passes[passno];
-                               nump++;
-                               len += pass->len;
-                               if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) {
-                                       increment = int_max(increment, int_floorlog2(len) + 1 - (cblk->numlenbits + int_floorlog2(nump)));
-                                       len = 0;
-                                       nump = 0;
-                               }
-                       }
-                       t2_putcommacode(bio, increment);
-
-                       /* computation of the new Length indicator */
-                       cblk->numlenbits += increment;
-
-                       /* insertion of the codeword segment length */
-                       for (passno = cblk->numpasses; passno < cblk->numpasses + layer->numpasses; passno++) {
-                               opj_tcd_pass_t *pass = &cblk->passes[passno];
-                               nump++;
-                               len += pass->len;
-                               if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) {
-                                       bio_write(bio, len, cblk->numlenbits + int_floorlog2(nump));
-                                       len = 0;
-                                       nump = 0;
-                               }
-                       }
-               }
-       }
-
-       if (bio_flush(bio)) {
-               bio_destroy(bio);
-               return -999;            /* modified to eliminate longjmp !! */
-       }
-
-       c += bio_numbytes(bio);
-       bio_destroy(bio);
-       
-       /* <EPH 0xff92> */
-       if (tcp->csty & J2K_CP_CSTY_EPH) {
-               c[0] = 255;
-               c[1] = 146;
-               c += 2;
-       }
-       /* </EPH> */
-
-       /* << INDEX */
-       /* End of packet header position. Currently only represents the distance to start of packet
-       // Will be updated later by incrementing with packet start value */
-       if(cstr_info && cstr_info->index_write) {
-               opj_packet_info_t *info_PK = &cstr_info->tile[tileno].packet[cstr_info->packno];
-               info_PK->end_ph_pos = (int)(c - dest);
-       }
-       /* INDEX >> */
-       
-       /* Writing the packet body */
-       
-       for (bandno = 0; bandno < res->numbands; bandno++) {
-               opj_tcd_band_t *band = &res->bands[bandno];
-               opj_tcd_precinct_t *prc = &band->precincts[precno];
-               for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                       opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno];
-                       opj_tcd_layer_t *layer = &cblk->layers[layno];
-                       if (!layer->numpasses) {
-                               continue;
-                       }
-                       if (c + layer->len > dest + length) {
-                               return -999;
-                       }
-                       
-                       memcpy(c, layer->data, layer->len);
-                       cblk->numpasses += layer->numpasses;
-                       c += layer->len;
-                       /* << INDEX */ 
-                       if(cstr_info && cstr_info->index_write) {
-                               opj_packet_info_t *info_PK = &cstr_info->tile[tileno].packet[cstr_info->packno];
-                               info_PK->disto += layer->disto;
-                               if (cstr_info->D_max < info_PK->disto) {
-                                       cstr_info->D_max = info_PK->disto;
-                               }
-                       }
-                       /* INDEX >> */
-               }
-       }
-       
-       return (c - dest);
+static int t2_encode_packet(opj_tcd_tile_t * tile, opj_tcp_t * tcp,
+                            opj_pi_iterator_t *pi, unsigned char *dest, int length,
+                            opj_codestream_info_t *cstr_info, int tileno)
+{
+    int bandno, cblkno;
+    unsigned char *c = dest;
+
+    int compno = pi->compno;    /* component value */
+    int resno  = pi->resno;     /* resolution level value */
+    int precno = pi->precno;    /* precinct value */
+    int layno  = pi->layno;     /* quality layer value */
+
+    opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+    opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+
+    opj_bio_t *bio = NULL;  /* BIO component */
+
+    /* <SOP 0xff91> */
+    if (tcp->csty & J2K_CP_CSTY_SOP) {
+        c[0] = 255;
+        c[1] = 145;
+        c[2] = 0;
+        c[3] = 4;
+        c[4] = (unsigned char)((tile->packno % 65536) / 256);
+        c[5] = (unsigned char)((tile->packno % 65536) % 256);
+        c += 6;
+    }
+    /* </SOP> */
+
+    if (!layno) {
+        for (bandno = 0; bandno < res->numbands; bandno++) {
+            opj_tcd_band_t *band = &res->bands[bandno];
+            opj_tcd_precinct_t *prc = &band->precincts[precno];
+            tgt_reset(prc->incltree);
+            tgt_reset(prc->imsbtree);
+            for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
+                opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno];
+                cblk->numpasses = 0;
+                tgt_setvalue(prc->imsbtree, cblkno, band->numbps - cblk->numbps);
+            }
+        }
+    }
+
+    bio = bio_create();
+    bio_init_enc(bio, c, length);
+    bio_write(bio, 1, 1);       /* Empty header bit */
+
+    /* Writing Packet header */
+    for (bandno = 0; bandno < res->numbands; bandno++) {
+        opj_tcd_band_t *band = &res->bands[bandno];
+        opj_tcd_precinct_t *prc = &band->precincts[precno];
+        for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
+            opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno];
+            opj_tcd_layer_t *layer = &cblk->layers[layno];
+            if (!cblk->numpasses && layer->numpasses) {
+                tgt_setvalue(prc->incltree, cblkno, layno);
+            }
+        }
+        for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
+            opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno];
+            opj_tcd_layer_t *layer = &cblk->layers[layno];
+            int increment = 0;
+            int nump = 0;
+            int len = 0, passno;
+            /* cblk inclusion bits */
+            if (!cblk->numpasses) {
+                tgt_encode(bio, prc->incltree, cblkno, layno + 1);
+            } else {
+                bio_write(bio, layer->numpasses != 0, 1);
+            }
+            /* if cblk not included, go to the next cblk  */
+            if (!layer->numpasses) {
+                continue;
+            }
+            /* if first instance of cblk --> zero bit-planes information */
+            if (!cblk->numpasses) {
+                cblk->numlenbits = 3;
+                tgt_encode(bio, prc->imsbtree, cblkno, 999);
+            }
+            /* number of coding passes included */
+            t2_putnumpasses(bio, layer->numpasses);
+
+            /* computation of the increase of the length indicator and insertion in the header     */
+            for (passno = cblk->numpasses; passno < cblk->numpasses + layer->numpasses;
+                    passno++) {
+                opj_tcd_pass_t *pass = &cblk->passes[passno];
+                nump++;
+                len += pass->len;
+                if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) {
+                    increment = int_max(increment,
+                                        int_floorlog2(len) + 1 - (cblk->numlenbits + int_floorlog2(nump)));
+                    len = 0;
+                    nump = 0;
+                }
+            }
+            t2_putcommacode(bio, increment);
+
+            /* computation of the new Length indicator */
+            cblk->numlenbits += increment;
+
+            /* insertion of the codeword segment length */
+            for (passno = cblk->numpasses; passno < cblk->numpasses + layer->numpasses;
+                    passno++) {
+                opj_tcd_pass_t *pass = &cblk->passes[passno];
+                nump++;
+                len += pass->len;
+                if (pass->term || passno == (cblk->numpasses + layer->numpasses) - 1) {
+                    bio_write(bio, len, cblk->numlenbits + int_floorlog2(nump));
+                    len = 0;
+                    nump = 0;
+                }
+            }
+        }
+    }
+
+    if (bio_flush(bio)) {
+        bio_destroy(bio);
+        return -999;        /* modified to eliminate longjmp !! */
+    }
+
+    c += bio_numbytes(bio);
+    bio_destroy(bio);
+
+    /* <EPH 0xff92> */
+    if (tcp->csty & J2K_CP_CSTY_EPH) {
+        c[0] = 255;
+        c[1] = 146;
+        c += 2;
+    }
+    /* </EPH> */
+
+    /* << INDEX */
+    /* End of packet header position. Currently only represents the distance to start of packet
+    // Will be updated later by incrementing with packet start value */
+    if (cstr_info && cstr_info->index_write) {
+        opj_packet_info_t *info_PK = &cstr_info->tile[tileno].packet[cstr_info->packno];
+        info_PK->end_ph_pos = (int)(c - dest);
+    }
+    /* INDEX >> */
+
+    /* Writing the packet body */
+
+    for (bandno = 0; bandno < res->numbands; bandno++) {
+        opj_tcd_band_t *band = &res->bands[bandno];
+        opj_tcd_precinct_t *prc = &band->precincts[precno];
+        for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
+            opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno];
+            opj_tcd_layer_t *layer = &cblk->layers[layno];
+            if (!layer->numpasses) {
+                continue;
+            }
+            if (c + layer->len > dest + length) {
+                return -999;
+            }
+
+            memcpy(c, layer->data, layer->len);
+            cblk->numpasses += layer->numpasses;
+            c += layer->len;
+            /* << INDEX */
+            if (cstr_info && cstr_info->index_write) {
+                opj_packet_info_t *info_PK = &cstr_info->tile[tileno].packet[cstr_info->packno];
+                info_PK->disto += layer->disto;
+                if (cstr_info->D_max < info_PK->disto) {
+                    cstr_info->D_max = info_PK->disto;
+                }
+            }
+            /* INDEX >> */
+        }
+    }
+
+    return (c - dest);
 }
 
-static opj_bool t2_init_seg(opj_tcd_cblk_dec_t* cblk, int index, int cblksty, int first) {
-       opj_tcd_seg_t* seg;
+static opj_bool t2_init_seg(opj_tcd_cblk_dec_t* cblk, int index, int cblksty,
+                            int first)
+{
+    opj_tcd_seg_t* seg;
     opj_tcd_seg_t* segs;
-    segs = (opj_tcd_seg_t*) opj_realloc(cblk->segs, (index + 1) * sizeof(opj_tcd_seg_t));
+    segs = (opj_tcd_seg_t*) opj_realloc(cblk->segs,
+                                        (index + 1) * sizeof(opj_tcd_seg_t));
 
-    if (segs == NULL)
-    {
+    if (segs == NULL) {
         return OPJ_FALSE;
     }
     cblk->segs = segs;
 
-       seg = &cblk->segs[index];
-       seg->data = NULL;
-       seg->dataindex = 0;
-       seg->numpasses = 0;
-       seg->len = 0;
-       if (cblksty & J2K_CCP_CBLKSTY_TERMALL) {
-               seg->maxpasses = 1;
-       }
-       else if (cblksty & J2K_CCP_CBLKSTY_LAZY) {
-               if (first) {
-                       seg->maxpasses = 10;
-               } else {
-                       seg->maxpasses = (((seg - 1)->maxpasses == 1) || ((seg - 1)->maxpasses == 10)) ? 2 : 1;
-               }
-       } else {
-               seg->maxpasses = 109;
-       }
+    seg = &cblk->segs[index];
+    seg->data = NULL;
+    seg->dataindex = 0;
+    seg->numpasses = 0;
+    seg->len = 0;
+    if (cblksty & J2K_CCP_CBLKSTY_TERMALL) {
+        seg->maxpasses = 1;
+    } else if (cblksty & J2K_CCP_CBLKSTY_LAZY) {
+        if (first) {
+            seg->maxpasses = 10;
+        } else {
+            seg->maxpasses = (((seg - 1)->maxpasses == 1) ||
+                              ((seg - 1)->maxpasses == 10)) ? 2 : 1;
+        }
+    } else {
+        seg->maxpasses = 109;
+    }
 
     return OPJ_TRUE;
 }
 
-static int t2_decode_packet(opj_t2_t* t2, unsigned char *src, int len, opj_tcd_tile_t *tile, 
-                                                                                                               opj_tcp_t *tcp, opj_pi_iterator_t *pi, opj_packet_info_t *pack_info) {
-       int bandno, cblkno;
-       unsigned char *c = src;
-
-       opj_cp_t *cp = t2->cp;
-
-       int compno = pi->compno;        /* component value */
-       int resno  = pi->resno;         /* resolution level value */
-       int precno = pi->precno;        /* precinct value */
-       int layno  = pi->layno;         /* quality layer value */
-
-       opj_tcd_resolution_t* res = &tile->comps[compno].resolutions[resno];
-
-       unsigned char *hd = NULL;
-       int present;
-       
-       opj_bio_t *bio = NULL;  /* BIO component */
-       
-       if (layno == 0) {
-               for (bandno = 0; bandno < res->numbands; bandno++) {
-                       opj_tcd_band_t *band = &res->bands[bandno];
-                       opj_tcd_precinct_t *prc = &band->precincts[precno];
-                       
-                       if ((band->x1-band->x0 == 0)||(band->y1-band->y0 == 0)) continue;
-                       
-                       tgt_reset(prc->incltree);
-                       tgt_reset(prc->imsbtree);
-                       for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                               opj_tcd_cblk_dec_t* cblk = &prc->cblks.dec[cblkno];
-                               cblk->numsegs = 0;
-                       }
-               }
-       }
-       
-       /* SOP markers */
-       
-       if (tcp->csty & J2K_CP_CSTY_SOP) {
-               if ((*c) != 0xff || (*(c + 1) != 0x91)) {
-                       opj_event_msg(t2->cinfo, EVT_WARNING, "Expected SOP marker\n");
-               } else {
-                       c += 6;
-               }
-               
-               /** TODO : check the Nsop value */
-       }
-       
-       /* 
-       When the marker PPT/PPM is used the packet header are store in PPT/PPM marker
-       This part deal with this caracteristic
-       step 1: Read packet header in the saved structure
-       step 2: Return to codestream for decoding 
-       */
-
-       bio = bio_create();
-       
-       if (cp->ppm == 1) {             /* PPM */
-               hd = cp->ppm_data;
-               bio_init_dec(bio, hd, cp->ppm_len);
-       } else if (tcp->ppt == 1) {     /* PPT */
-               hd = tcp->ppt_data;
-               bio_init_dec(bio, hd, tcp->ppt_len);
-       } else {                        /* Normal Case */
-               hd = c;
-               bio_init_dec(bio, hd, src+len-hd);
-       }
-       
-       present = bio_read(bio, 1);
-       
-       if (!present) {
-               bio_inalign(bio);
-               hd += bio_numbytes(bio);
-               bio_destroy(bio);
-               
-               /* EPH markers */
-               
-               if (tcp->csty & J2K_CP_CSTY_EPH) {
-                       if ((*hd) != 0xff || (*(hd + 1) != 0x92)) {
-                               printf("Error : expected EPH marker\n");
-                       } else {
-                               hd += 2;
-                       }
-               }
-
-               /* << INDEX */
-               /* End of packet header position. Currently only represents the distance to start of packet
-               // Will be updated later by incrementing with packet start value*/
-               if(pack_info) {
-                       pack_info->end_ph_pos = (int)(c - src);
-               }
-               /* INDEX >> */
-               
-               if (cp->ppm == 1) {             /* PPM case */
-                       cp->ppm_len += cp->ppm_data-hd;
-                       cp->ppm_data = hd;
-                       return (c - src);
-               }
-               if (tcp->ppt == 1) {    /* PPT case */
-                       tcp->ppt_len+=tcp->ppt_data-hd;
-                       tcp->ppt_data = hd;
-                       return (c - src);
-               }
-               
-               return (hd - src);
-       }
-       
-       for (bandno = 0; bandno < res->numbands; bandno++) {
-               opj_tcd_band_t *band = &res->bands[bandno];
-               opj_tcd_precinct_t *prc = &band->precincts[precno];
-               
-               if ((band->x1-band->x0 == 0)||(band->y1-band->y0 == 0)) continue;
-               
-               for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                       int included, increment, n, segno;
-                       opj_tcd_cblk_dec_t* cblk = &prc->cblks.dec[cblkno];
-                       /* if cblk not yet included before --> inclusion tagtree */
-                       if (!cblk->numsegs) {
-                               included = tgt_decode(bio, prc->incltree, cblkno, layno + 1);
-                               /* else one bit */
-                       } else {
-                               included = bio_read(bio, 1);
-                       }
-                       /* if cblk not included */
-                       if (!included) {
-                               cblk->numnewpasses = 0;
-                               continue;
-                       }
-                       /* if cblk not yet included --> zero-bitplane tagtree */
-                       if (!cblk->numsegs) {
-                               int i, numimsbs;
-                               for (i = 0; !tgt_decode(bio, prc->imsbtree, cblkno, i); i++) {
-                                       ;
-                               }
-                               numimsbs = i - 1;
-                               cblk->numbps = band->numbps - numimsbs;
-                               cblk->numlenbits = 3;
-                       }
-                       /* number of coding passes */
-                       cblk->numnewpasses = t2_getnumpasses(bio);
-                       increment = t2_getcommacode(bio);
-                       /* length indicator increment */
-                       cblk->numlenbits += increment;
-                       segno = 0;
-                       if (!cblk->numsegs) {
-                if (!t2_init_seg(cblk, segno, tcp->tccps[compno].cblksty, 1))
-                {
+static int t2_decode_packet(opj_t2_t* t2, unsigned char *src, int len,
+                            opj_tcd_tile_t *tile,
+                            opj_tcp_t *tcp, opj_pi_iterator_t *pi, opj_packet_info_t *pack_info)
+{
+    int bandno, cblkno;
+    unsigned char *c = src;
+
+    opj_cp_t *cp = t2->cp;
+
+    int compno = pi->compno;    /* component value */
+    int resno  = pi->resno;     /* resolution level value */
+    int precno = pi->precno;    /* precinct value */
+    int layno  = pi->layno;     /* quality layer value */
+
+    opj_tcd_resolution_t* res = &tile->comps[compno].resolutions[resno];
+
+    unsigned char *hd = NULL;
+    int present;
+
+    opj_bio_t *bio = NULL;  /* BIO component */
+
+    if (layno == 0) {
+        for (bandno = 0; bandno < res->numbands; bandno++) {
+            opj_tcd_band_t *band = &res->bands[bandno];
+            opj_tcd_precinct_t *prc = &band->precincts[precno];
+
+            if ((band->x1 - band->x0 == 0) || (band->y1 - band->y0 == 0)) {
+                continue;
+            }
+
+            tgt_reset(prc->incltree);
+            tgt_reset(prc->imsbtree);
+            for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
+                opj_tcd_cblk_dec_t* cblk = &prc->cblks.dec[cblkno];
+                cblk->numsegs = 0;
+            }
+        }
+    }
+
+    /* SOP markers */
+
+    if (tcp->csty & J2K_CP_CSTY_SOP) {
+        if ((*c) != 0xff || (*(c + 1) != 0x91)) {
+            opj_event_msg(t2->cinfo, EVT_WARNING, "Expected SOP marker\n");
+        } else {
+            c += 6;
+        }
+
+        /** TODO : check the Nsop value */
+    }
+
+    /*
+    When the marker PPT/PPM is used the packet header are store in PPT/PPM marker
+    This part deal with this caracteristic
+    step 1: Read packet header in the saved structure
+    step 2: Return to codestream for decoding
+    */
+
+    bio = bio_create();
+
+    if (cp->ppm == 1) {     /* PPM */
+        hd = cp->ppm_data;
+        bio_init_dec(bio, hd, cp->ppm_len);
+    } else if (tcp->ppt == 1) { /* PPT */
+        hd = tcp->ppt_data;
+        bio_init_dec(bio, hd, tcp->ppt_len);
+    } else {            /* Normal Case */
+        hd = c;
+        bio_init_dec(bio, hd, src + len - hd);
+    }
+
+    present = bio_read(bio, 1);
+
+    if (!present) {
+        bio_inalign(bio);
+        hd += bio_numbytes(bio);
+        bio_destroy(bio);
+
+        /* EPH markers */
+
+        if (tcp->csty & J2K_CP_CSTY_EPH) {
+            if ((*hd) != 0xff || (*(hd + 1) != 0x92)) {
+                printf("Error : expected EPH marker\n");
+            } else {
+                hd += 2;
+            }
+        }
+
+        /* << INDEX */
+        /* End of packet header position. Currently only represents the distance to start of packet
+        // Will be updated later by incrementing with packet start value*/
+        if (pack_info) {
+            pack_info->end_ph_pos = (int)(c - src);
+        }
+        /* INDEX >> */
+
+        if (cp->ppm == 1) {     /* PPM case */
+            cp->ppm_len += cp->ppm_data - hd;
+            cp->ppm_data = hd;
+            return (c - src);
+        }
+        if (tcp->ppt == 1) {    /* PPT case */
+            tcp->ppt_len += tcp->ppt_data - hd;
+            tcp->ppt_data = hd;
+            return (c - src);
+        }
+
+        return (hd - src);
+    }
+
+    for (bandno = 0; bandno < res->numbands; bandno++) {
+        opj_tcd_band_t *band = &res->bands[bandno];
+        opj_tcd_precinct_t *prc = &band->precincts[precno];
+
+        if ((band->x1 - band->x0 == 0) || (band->y1 - band->y0 == 0)) {
+            continue;
+        }
+
+        for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
+            int included, increment, n, segno;
+            opj_tcd_cblk_dec_t* cblk = &prc->cblks.dec[cblkno];
+            /* if cblk not yet included before --> inclusion tagtree */
+            if (!cblk->numsegs) {
+                included = tgt_decode(bio, prc->incltree, cblkno, layno + 1);
+                /* else one bit */
+            } else {
+                included = bio_read(bio, 1);
+            }
+            /* if cblk not included */
+            if (!included) {
+                cblk->numnewpasses = 0;
+                continue;
+            }
+            /* if cblk not yet included --> zero-bitplane tagtree */
+            if (!cblk->numsegs) {
+                int i, numimsbs;
+                for (i = 0; !tgt_decode(bio, prc->imsbtree, cblkno, i); i++) {
+                    ;
+                }
+                numimsbs = i - 1;
+                cblk->numbps = band->numbps - numimsbs;
+                cblk->numlenbits = 3;
+            }
+            /* number of coding passes */
+            cblk->numnewpasses = t2_getnumpasses(bio);
+            increment = t2_getcommacode(bio);
+            /* length indicator increment */
+            cblk->numlenbits += increment;
+            segno = 0;
+            if (!cblk->numsegs) {
+                if (!t2_init_seg(cblk, segno, tcp->tccps[compno].cblksty, 1)) {
                     opj_event_msg(t2->cinfo, EVT_ERROR, "Out of memory\n");
                     bio_destroy(bio);
                     return -999;
                 }
-                       } else {
-                               segno = cblk->numsegs - 1;
-                               if (cblk->segs[segno].numpasses == cblk->segs[segno].maxpasses) {
-                                       ++segno;
-                    if (!t2_init_seg(cblk, segno, tcp->tccps[compno].cblksty, 0))
-                    {
+            } else {
+                segno = cblk->numsegs - 1;
+                if (cblk->segs[segno].numpasses == cblk->segs[segno].maxpasses) {
+                    ++segno;
+                    if (!t2_init_seg(cblk, segno, tcp->tccps[compno].cblksty, 0)) {
                         opj_event_msg(t2->cinfo, EVT_ERROR, "Out of memory\n");
                         bio_destroy(bio);
                         return -999;
                     }
-                               }
-                       }
-                       n = cblk->numnewpasses;
-                       
-                       do {
-                               cblk->segs[segno].numnewpasses = int_min(cblk->segs[segno].maxpasses - cblk->segs[segno].numpasses, n);
-                               cblk->segs[segno].newlen = bio_read(bio, cblk->numlenbits + int_floorlog2(cblk->segs[segno].numnewpasses));
-                               n -= cblk->segs[segno].numnewpasses;
-                               if (n > 0) {
-                                       ++segno;
-                    if (!t2_init_seg(cblk, segno, tcp->tccps[compno].cblksty, 0))
-                    {
+                }
+            }
+            n = cblk->numnewpasses;
+
+            do {
+                cblk->segs[segno].numnewpasses = int_min(cblk->segs[segno].maxpasses -
+                                                 cblk->segs[segno].numpasses, n);
+                cblk->segs[segno].newlen = bio_read(bio,
+                                                    cblk->numlenbits + int_floorlog2(cblk->segs[segno].numnewpasses));
+                n -= cblk->segs[segno].numnewpasses;
+                if (n > 0) {
+                    ++segno;
+                    if (!t2_init_seg(cblk, segno, tcp->tccps[compno].cblksty, 0)) {
                         opj_event_msg(t2->cinfo, EVT_ERROR, "Out of memory\n");
                         bio_destroy(bio);
                         return -999;
                     }
-                               }
-                       } while (n > 0);
-               }
-       }
-       
-       if (bio_inalign(bio)) {
-               bio_destroy(bio);
-               return -999;
-       }
-       
-       hd += bio_numbytes(bio);
-       bio_destroy(bio);
-       
-       /* EPH markers */
-       if (tcp->csty & J2K_CP_CSTY_EPH) {
-               if ((*hd) != 0xff || (*(hd + 1) != 0x92)) {
-                       opj_event_msg(t2->cinfo, EVT_ERROR, "Expected EPH marker\n");
-                       return -999;
-               } else {
-                       hd += 2;
-               }
-       }
-
-       /* << INDEX */
-       /* End of packet header position. Currently only represents the distance to start of packet
-       // Will be updated later by incrementing with packet start value*/
-       if(pack_info) {
-               pack_info->end_ph_pos = (int)(hd - src);
-       }
-       /* INDEX >> */
-       
-       if (cp->ppm==1) {
-               cp->ppm_len+=cp->ppm_data-hd;
-               cp->ppm_data = hd;
-       } else if (tcp->ppt == 1) {
-               tcp->ppt_len+=tcp->ppt_data-hd;
-               tcp->ppt_data = hd;
-       } else {
-               c=hd;
-       }
-       
-       for (bandno = 0; bandno < res->numbands; bandno++) {
-               opj_tcd_band_t *band = &res->bands[bandno];
-               opj_tcd_precinct_t *prc = &band->precincts[precno];
-               
-               if ((band->x1-band->x0 == 0)||(band->y1-band->y0 == 0)) continue;
-               
-               for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                       opj_tcd_cblk_dec_t* cblk = &prc->cblks.dec[cblkno];
-                       opj_tcd_seg_t *seg = NULL;
-                       if (!cblk->numnewpasses)
-                               continue;
-                       if (!cblk->numsegs) {
-                               seg = &cblk->segs[0];
-                               cblk->numsegs++;
-                               cblk->len = 0;
-                       } else {
-                               seg = &cblk->segs[cblk->numsegs - 1];
-                               if (seg->numpasses == seg->maxpasses) {
-                                       seg++;
-                                       cblk->numsegs++;
-                               }
-                       }
-                       
-                       do {
-                               if (c + seg->newlen > src + len) {
-                                       return -999;
-                               }
+                }
+            } while (n > 0);
+        }
+    }
+
+    if (bio_inalign(bio)) {
+        bio_destroy(bio);
+        return -999;
+    }
+
+    hd += bio_numbytes(bio);
+    bio_destroy(bio);
+
+    /* EPH markers */
+    if (tcp->csty & J2K_CP_CSTY_EPH) {
+        if ((*hd) != 0xff || (*(hd + 1) != 0x92)) {
+            opj_event_msg(t2->cinfo, EVT_ERROR, "Expected EPH marker\n");
+            return -999;
+        } else {
+            hd += 2;
+        }
+    }
+
+    /* << INDEX */
+    /* End of packet header position. Currently only represents the distance to start of packet
+    // Will be updated later by incrementing with packet start value*/
+    if (pack_info) {
+        pack_info->end_ph_pos = (int)(hd - src);
+    }
+    /* INDEX >> */
+
+    if (cp->ppm == 1) {
+        cp->ppm_len += cp->ppm_data - hd;
+        cp->ppm_data = hd;
+    } else if (tcp->ppt == 1) {
+        tcp->ppt_len += tcp->ppt_data - hd;
+        tcp->ppt_data = hd;
+    } else {
+        c = hd;
+    }
+
+    for (bandno = 0; bandno < res->numbands; bandno++) {
+        opj_tcd_band_t *band = &res->bands[bandno];
+        opj_tcd_precinct_t *prc = &band->precincts[precno];
+
+        if ((band->x1 - band->x0 == 0) || (band->y1 - band->y0 == 0)) {
+            continue;
+        }
+
+        for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
+            opj_tcd_cblk_dec_t* cblk = &prc->cblks.dec[cblkno];
+            opj_tcd_seg_t *seg = NULL;
+            if (!cblk->numnewpasses) {
+                continue;
+            }
+            if (!cblk->numsegs) {
+                seg = &cblk->segs[0];
+                cblk->numsegs++;
+                cblk->len = 0;
+            } else {
+                seg = &cblk->segs[cblk->numsegs - 1];
+                if (seg->numpasses == seg->maxpasses) {
+                    seg++;
+                    cblk->numsegs++;
+                }
+            }
+
+            do {
+                if (c + seg->newlen > src + len) {
+                    return -999;
+                }
 
 #ifdef USE_JPWL
-                       /* we need here a j2k handle to verify if making a check to
-                       the validity of cblocks parameters is selected from user (-W) */
-
-                               /* let's check that we are not exceeding */
-                               if ((cblk->len + seg->newlen) > 8192) {
-                                       opj_event_msg(t2->cinfo, EVT_WARNING,
-                                               "JPWL: segment too long (%d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n",
-                                               seg->newlen, cblkno, precno, bandno, resno, compno);
-                                       if (!JPWL_ASSUME) {
-                                               opj_event_msg(t2->cinfo, EVT_ERROR, "JPWL: giving up\n");
-                                               return -999;
-                                       }
-                                       seg->newlen = 8192 - cblk->len;
-                                       opj_event_msg(t2->cinfo, EVT_WARNING, "      - truncating segment to %d\n", seg->newlen);
-                                       break;
-                               };
+                /* we need here a j2k handle to verify if making a check to
+                the validity of cblocks parameters is selected from user (-W) */
+
+                /* let's check that we are not exceeding */
+                if ((cblk->len + seg->newlen) > 8192) {
+                    opj_event_msg(t2->cinfo, EVT_WARNING,
+                                  "JPWL: segment too long (%d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n",
+                                  seg->newlen, cblkno, precno, bandno, resno, compno);
+                    if (!JPWL_ASSUME) {
+                        opj_event_msg(t2->cinfo, EVT_ERROR, "JPWL: giving up\n");
+                        return -999;
+                    }
+                    seg->newlen = 8192 - cblk->len;
+                    opj_event_msg(t2->cinfo, EVT_WARNING, "      - truncating segment to %d\n",
+                                  seg->newlen);
+                    break;
+                };
 
 #endif /* USE_JPWL */
-                               
-                               cblk->data = (unsigned char*) opj_realloc(cblk->data, (cblk->len + seg->newlen) * sizeof(unsigned char));
-                               memcpy(cblk->data + cblk->len, c, seg->newlen);
-                               if (seg->numpasses == 0) {
-                                       seg->data = &cblk->data;
-                                       seg->dataindex = cblk->len;
-                               }
-                               c += seg->newlen;
-                               cblk->len += seg->newlen;
-                               seg->len += seg->newlen;
-                               seg->numpasses += seg->numnewpasses;
-                               cblk->numnewpasses -= seg->numnewpasses;
-                               if (cblk->numnewpasses > 0) {
-                                       seg++;
-                                       cblk->numsegs++;
-                               }
-                       } while (cblk->numnewpasses > 0);
-               }
-       }
-       
-       return (c - src);
+
+                cblk->data = (unsigned char*) opj_realloc(cblk->data,
+                             (cblk->len + seg->newlen) * sizeof(unsigned char));
+                memcpy(cblk->data + cblk->len, c, seg->newlen);
+                if (seg->numpasses == 0) {
+                    seg->data = &cblk->data;
+                    seg->dataindex = cblk->len;
+                }
+                c += seg->newlen;
+                cblk->len += seg->newlen;
+                seg->len += seg->newlen;
+                seg->numpasses += seg->numnewpasses;
+                cblk->numnewpasses -= seg->numnewpasses;
+                if (cblk->numnewpasses > 0) {
+                    seg++;
+                    cblk->numsegs++;
+                }
+            } while (cblk->numnewpasses > 0);
+        }
+    }
+
+    return (c - src);
 }
 
 /* ----------------------------------------------------------------------- */
 
-int t2_encode_packets(opj_t2_t* t2,int tileno, opj_tcd_tile_t *tile, int maxlayers, unsigned char *dest, int len, opj_codestream_info_t *cstr_info,int tpnum, int tppos,int pino, J2K_T2_MODE t2_mode, int cur_totnum_tp){
-       unsigned char *c = dest;
-       int e = 0;
-       int compno;
-       opj_pi_iterator_t *pi = NULL;
-       int poc;
-       opj_image_t *image = t2->image;
-       opj_cp_t *cp = t2->cp;
-       opj_tcp_t *tcp = &cp->tcps[tileno];
-       int pocno = cp->cinema == CINEMA4K_24? 2: 1;
-       int maxcomp = cp->max_comp_size > 0 ? image->numcomps : 1;
-       
-       pi = pi_initialise_encode(image, cp, tileno, t2_mode);
-       if(!pi) {
-               /* TODO: throw an error */
-               return -999;
-       }
-       
-       if(t2_mode == THRESH_CALC ){ /* Calculating threshold */
-               for(compno = 0; compno < maxcomp; compno++ ){
-                       for(poc = 0; poc < pocno ; poc++){
-                               int comp_len = 0;
-                               int tpnum = compno;
-                               if (pi_create_encode(pi, cp,tileno,poc,tpnum,tppos,t2_mode,cur_totnum_tp)) {
-                                       opj_event_msg(t2->cinfo, EVT_ERROR, "Error initializing Packet Iterator\n");
-                                       pi_destroy(pi, cp, tileno);
-                                       return -999;
-                               }
-                               while (pi_next(&pi[poc])) {
-                                       if (pi[poc].layno < maxlayers) {
-                                               e = t2_encode_packet(tile, &cp->tcps[tileno], &pi[poc], c, dest + len - c, cstr_info, tileno);
-                                               comp_len = comp_len + e;
-                                               if (e == -999) {
-                                                       break;
-                                               } else {
-                                                       c += e;
-                                               }
-                                       }
-                               }
-                               if (e == -999) break;
-                               if (cp->max_comp_size){
-                                       if (comp_len > cp->max_comp_size){
-                                               e = -999;
-                                               break;
-                                       }
-                               }
-                       }
-                       if (e == -999)  break;
-               }
-       }else{  /* t2_mode == FINAL_PASS  */
-               pi_create_encode(pi, cp,tileno,pino,tpnum,tppos,t2_mode,cur_totnum_tp);
-               while (pi_next(&pi[pino])) {
-                       if (pi[pino].layno < maxlayers) {
-                               e = t2_encode_packet(tile, &cp->tcps[tileno], &pi[pino], c, dest + len - c, cstr_info, tileno);
-                               if (e == -999) {
-                                       break;
-                               } else {
-                                       c += e;
-                               }
-                               /* INDEX >> */
-                               if(cstr_info) {
-                                       if(cstr_info->index_write) {
-                                               opj_tile_info_t *info_TL = &cstr_info->tile[tileno];
-                                               opj_packet_info_t *info_PK = &info_TL->packet[cstr_info->packno];
-                                               if (!cstr_info->packno) {
-                                                       info_PK->start_pos = info_TL->end_header + 1;
-                                               } else {
-                                                       info_PK->start_pos = ((cp->tp_on | tcp->POC)&& info_PK->start_pos) ? info_PK->start_pos : info_TL->packet[cstr_info->packno - 1].end_pos + 1;
-                                               }
-                                               info_PK->end_pos = info_PK->start_pos + e - 1;
-                                               info_PK->end_ph_pos += info_PK->start_pos - 1;  /* End of packet header which now only represents the distance 
-                                                                                                                                                                                                                                               // to start of packet is incremented by value of start of packet*/
-                                       }
-                                       
-                                       cstr_info->packno++;
-                               }
-                               /* << INDEX */
-                               tile->packno++;
-                       }
-               }
-       }
-       
-       pi_destroy(pi, cp, tileno);
-       
-       if (e == -999) {
-               return e;
-       }
-       
-  return (c - dest);
+int t2_encode_packets(opj_t2_t* t2, int tileno, opj_tcd_tile_t *tile,
+                      int maxlayers, unsigned char *dest, int len, opj_codestream_info_t *cstr_info,
+                      int tpnum, int tppos, int pino, J2K_T2_MODE t2_mode, int cur_totnum_tp)
+{
+    unsigned char *c = dest;
+    int e = 0;
+    int compno;
+    opj_pi_iterator_t *pi = NULL;
+    int poc;
+    opj_image_t *image = t2->image;
+    opj_cp_t *cp = t2->cp;
+    opj_tcp_t *tcp = &cp->tcps[tileno];
+    int pocno = cp->cinema == CINEMA4K_24 ? 2 : 1;
+    int maxcomp = cp->max_comp_size > 0 ? image->numcomps : 1;
+
+    pi = pi_initialise_encode(image, cp, tileno, t2_mode);
+    if (!pi) {
+        /* TODO: throw an error */
+        return -999;
+    }
+
+    if (t2_mode == THRESH_CALC) { /* Calculating threshold */
+        for (compno = 0; compno < maxcomp; compno++) {
+            for (poc = 0; poc < pocno ; poc++) {
+                int comp_len = 0;
+                int tpnum = compno;
+                if (pi_create_encode(pi, cp, tileno, poc, tpnum, tppos, t2_mode,
+                                     cur_totnum_tp)) {
+                    opj_event_msg(t2->cinfo, EVT_ERROR, "Error initializing Packet Iterator\n");
+                    pi_destroy(pi, cp, tileno);
+                    return -999;
+                }
+                while (pi_next(&pi[poc])) {
+                    if (pi[poc].layno < maxlayers) {
+                        e = t2_encode_packet(tile, &cp->tcps[tileno], &pi[poc], c, dest + len - c,
+                                             cstr_info, tileno);
+                        comp_len = comp_len + e;
+                        if (e == -999) {
+                            break;
+                        } else {
+                            c += e;
+                        }
+                    }
+                }
+                if (e == -999) {
+                    break;
+                }
+                if (cp->max_comp_size) {
+                    if (comp_len > cp->max_comp_size) {
+                        e = -999;
+                        break;
+                    }
+                }
+            }
+            if (e == -999) {
+                break;
+            }
+        }
+    } else { /* t2_mode == FINAL_PASS  */
+        pi_create_encode(pi, cp, tileno, pino, tpnum, tppos, t2_mode, cur_totnum_tp);
+        while (pi_next(&pi[pino])) {
+            if (pi[pino].layno < maxlayers) {
+                e = t2_encode_packet(tile, &cp->tcps[tileno], &pi[pino], c, dest + len - c,
+                                     cstr_info, tileno);
+                if (e == -999) {
+                    break;
+                } else {
+                    c += e;
+                }
+                /* INDEX >> */
+                if (cstr_info) {
+                    if (cstr_info->index_write) {
+                        opj_tile_info_t *info_TL = &cstr_info->tile[tileno];
+                        opj_packet_info_t *info_PK = &info_TL->packet[cstr_info->packno];
+                        if (!cstr_info->packno) {
+                            info_PK->start_pos = info_TL->end_header + 1;
+                        } else {
+                            info_PK->start_pos = ((cp->tp_on | tcp->POC) &&
+                                                  info_PK->start_pos) ? info_PK->start_pos : info_TL->packet[cstr_info->packno -
+                                                                            1].end_pos + 1;
+                        }
+                        info_PK->end_pos = info_PK->start_pos + e - 1;
+                        info_PK->end_ph_pos += info_PK->start_pos -
+                                               1;  /* End of packet header which now only represents the distance
+                                                                                                                        // to start of packet is incremented by value of start of packet*/
+                    }
+
+                    cstr_info->packno++;
+                }
+                /* << INDEX */
+                tile->packno++;
+            }
+        }
+    }
+
+    pi_destroy(pi, cp, tileno);
+
+    if (e == -999) {
+        return e;
+    }
+
+    return (c - dest);
 }
 
-int t2_decode_packets(opj_t2_t *t2, unsigned char *src, int len, int tileno, opj_tcd_tile_t *tile, opj_codestream_info_t *cstr_info) {
-       unsigned char *c = src;
-       opj_pi_iterator_t *pi;
-       int pino, e = 0;
-       int n = 0, curtp = 0;
-       int tp_start_packno;
-
-       opj_image_t *image = t2->image;
-       opj_cp_t *cp = t2->cp;
-       
-       /* create a packet iterator */
-       pi = pi_create_decode(image, cp, tileno);
-       if(!pi) {
-               /* TODO: throw an error */
-               return -999;
-       }
-
-       tp_start_packno = 0;
-       
-       for (pino = 0; pino <= cp->tcps[tileno].numpocs; pino++) {
-               while (pi_next(&pi[pino])) {
-                       if ((cp->layer==0) || (cp->layer>=((pi[pino].layno)+1))) {
-                               opj_packet_info_t *pack_info;
-                               if (cstr_info)
-                                       pack_info = &cstr_info->tile[tileno].packet[cstr_info->packno];
-                               else
-                                       pack_info = NULL;
-                               e = t2_decode_packet(t2, c, src + len - c, tile, &cp->tcps[tileno], &pi[pino], pack_info);
-                       } else {
-                               e = 0;
-                       }
-            if(e == -999)
-            {
+int t2_decode_packets(opj_t2_t *t2, unsigned char *src, int len, int tileno,
+                      opj_tcd_tile_t *tile, opj_codestream_info_t *cstr_info)
+{
+    unsigned char *c = src;
+    opj_pi_iterator_t *pi;
+    int pino, e = 0;
+    int n = 0, curtp = 0;
+    int tp_start_packno;
+
+    opj_image_t *image = t2->image;
+    opj_cp_t *cp = t2->cp;
+
+    /* create a packet iterator */
+    pi = pi_create_decode(image, cp, tileno);
+    if (!pi) {
+        /* TODO: throw an error */
+        return -999;
+    }
+
+    tp_start_packno = 0;
+
+    for (pino = 0; pino <= cp->tcps[tileno].numpocs; pino++) {
+        while (pi_next(&pi[pino])) {
+            if ((cp->layer == 0) || (cp->layer >= ((pi[pino].layno) + 1))) {
+                opj_packet_info_t *pack_info;
+                if (cstr_info) {
+                    pack_info = &cstr_info->tile[tileno].packet[cstr_info->packno];
+                } else {
+                    pack_info = NULL;
+                }
+                e = t2_decode_packet(t2, c, src + len - c, tile, &cp->tcps[tileno], &pi[pino],
+                                     pack_info);
+            } else {
+                e = 0;
+            }
+            if (e == -999) {
                 pi_destroy(pi, cp, tileno);
                 return -999;
             }
-                       /* progression in resolution */
-                       image->comps[pi[pino].compno].resno_decoded =   
-                               (e > 0) ? 
-                               int_max(pi[pino].resno, image->comps[pi[pino].compno].resno_decoded) 
-                               : image->comps[pi[pino].compno].resno_decoded;
-                       n++;
-
-                       /* INDEX >> */
-                       if(cstr_info) {
-                               opj_tile_info_t *info_TL = &cstr_info->tile[tileno];
-                               opj_packet_info_t *info_PK = &info_TL->packet[cstr_info->packno];
-                               if (!cstr_info->packno) {
-                                       info_PK->start_pos = info_TL->end_header + 1;
-                               } else if (info_TL->packet[cstr_info->packno-1].end_pos >= (int)cstr_info->tile[tileno].tp[curtp].tp_end_pos){ /* New tile part*/
-                                       info_TL->tp[curtp].tp_numpacks = cstr_info->packno - tp_start_packno; /* Number of packets in previous tile-part*/
-          info_TL->tp[curtp].tp_start_pack = tp_start_packno;
-                                       tp_start_packno = cstr_info->packno;
-                                       curtp++;
-                                       info_PK->start_pos = cstr_info->tile[tileno].tp[curtp].tp_end_header+1;
-                               } else {
-                                       info_PK->start_pos = (cp->tp_on && info_PK->start_pos) ? info_PK->start_pos : info_TL->packet[cstr_info->packno - 1].end_pos + 1;
-                               }
-                               info_PK->end_pos = info_PK->start_pos + e - 1;
-                               info_PK->end_ph_pos += info_PK->start_pos - 1;  /* End of packet header which now only represents the distance 
-                                                                                                                                                                                                                               // to start of packet is incremented by value of start of packet*/
-                               cstr_info->packno++;
-                       }
-                       /* << INDEX */
-                       
-                       if (e == -999) {                /* ADD */
-                               break;
-                       } else {
-                               c += e;
-                       }                       
-               }
-       }
-       /* INDEX >> */
-       if(cstr_info) {
-               cstr_info->tile[tileno].tp[curtp].tp_numpacks = cstr_info->packno - tp_start_packno; /* Number of packets in last tile-part*/
-    cstr_info->tile[tileno].tp[curtp].tp_start_pack = tp_start_packno;
-       }
-       /* << INDEX */
-
-       /* don't forget to release pi */
-       pi_destroy(pi, cp, tileno);
-       
-       if (e == -999) {
-               return e;
-       }
-       
-       return (c - src);
+            /* progression in resolution */
+            image->comps[pi[pino].compno].resno_decoded =
+                (e > 0) ?
+                int_max(pi[pino].resno, image->comps[pi[pino].compno].resno_decoded)
+                : image->comps[pi[pino].compno].resno_decoded;
+            n++;
+
+            /* INDEX >> */
+            if (cstr_info) {
+                opj_tile_info_t *info_TL = &cstr_info->tile[tileno];
+                opj_packet_info_t *info_PK = &info_TL->packet[cstr_info->packno];
+                if (!cstr_info->packno) {
+                    info_PK->start_pos = info_TL->end_header + 1;
+                } else if (info_TL->packet[cstr_info->packno - 1].end_pos >=
+                           (int)cstr_info->tile[tileno].tp[curtp].tp_end_pos) { /* New tile part*/
+                    info_TL->tp[curtp].tp_numpacks = cstr_info->packno -
+                                                     tp_start_packno; /* Number of packets in previous tile-part*/
+                    info_TL->tp[curtp].tp_start_pack = tp_start_packno;
+                    tp_start_packno = cstr_info->packno;
+                    curtp++;
+                    info_PK->start_pos = cstr_info->tile[tileno].tp[curtp].tp_end_header + 1;
+                } else {
+                    info_PK->start_pos = (cp->tp_on &&
+                                          info_PK->start_pos) ? info_PK->start_pos : info_TL->packet[cstr_info->packno -
+                                                                    1].end_pos + 1;
+                }
+                info_PK->end_pos = info_PK->start_pos + e - 1;
+                info_PK->end_ph_pos += info_PK->start_pos -
+                                       1;  /* End of packet header which now only represents the distance
+                                                                                                                // to start of packet is incremented by value of start of packet*/
+                cstr_info->packno++;
+            }
+            /* << INDEX */
+
+            if (e == -999) {        /* ADD */
+                break;
+            } else {
+                c += e;
+            }
+        }
+    }
+    /* INDEX >> */
+    if (cstr_info) {
+        cstr_info->tile[tileno].tp[curtp].tp_numpacks = cstr_info->packno -
+                tp_start_packno; /* Number of packets in last tile-part*/
+        cstr_info->tile[tileno].tp[curtp].tp_start_pack = tp_start_packno;
+    }
+    /* << INDEX */
+
+    /* don't forget to release pi */
+    pi_destroy(pi, cp, tileno);
+
+    if (e == -999) {
+        return e;
+    }
+
+    return (c - src);
 }
 
 /* ----------------------------------------------------------------------- */
 
-opj_t2_t* t2_create(opj_common_ptr cinfo, opj_image_t *image, opj_cp_t *cp) {
-       /* create the tcd structure */
-       opj_t2_t *t2 = (opj_t2_t*)opj_malloc(sizeof(opj_t2_t));
-       if(!t2) return NULL;
-       t2->cinfo = cinfo;
-       t2->image = image;
-       t2->cp = cp;
+opj_t2_t* t2_create(opj_common_ptr cinfo, opj_image_t *image, opj_cp_t *cp)
+{
+    /* create the tcd structure */
+    opj_t2_t *t2 = (opj_t2_t*)opj_malloc(sizeof(opj_t2_t));
+    if (!t2) {
+        return NULL;
+    }
+    t2->cinfo = cinfo;
+    t2->image = image;
+    t2->cp = cp;
 
-       return t2;
+    return t2;
 }
 
-void t2_destroy(opj_t2_t *t2) {
-       if(t2) {
-               opj_free(t2);
-       }
+void t2_destroy(opj_t2_t *t2)
+{
+    if (t2) {
+        opj_free(t2);
+    }
 }
 
 
index 7875737cb248244d5544d73d35a7730633a31842..2a97043e2c7ddb1cd799e84d75ba1b6741923176 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * Copyright (c) 2006-2007, Parvatha Elangovan
 #define _ISOC99_SOURCE /* lrintf is C99 */
 #include "opj_includes.h"
 
-void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_image_t * img) {
-       int tileno, compno, resno, bandno, precno;/*, cblkno;*/
-
-       fprintf(fd, "image {\n");
-       fprintf(fd, "  tw=%d, th=%d x0=%d x1=%d y0=%d y1=%d\n", 
-               img->tw, img->th, tcd->image->x0, tcd->image->x1, tcd->image->y0, tcd->image->y1);
-
-       for (tileno = 0; tileno < img->th * img->tw; tileno++) {
-               opj_tcd_tile_t *tile = &tcd->tcd_image->tiles[tileno];
-               fprintf(fd, "  tile {\n");
-               fprintf(fd, "    x0=%d, y0=%d, x1=%d, y1=%d, numcomps=%d\n",
-                       tile->x0, tile->y0, tile->x1, tile->y1, tile->numcomps);
-               for (compno = 0; compno < tile->numcomps; compno++) {
-                       opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-                       fprintf(fd, "    tilec {\n");
-                       fprintf(fd,
-                               "      x0=%d, y0=%d, x1=%d, y1=%d, numresolutions=%d\n",
-                               tilec->x0, tilec->y0, tilec->x1, tilec->y1, tilec->numresolutions);
-                       for (resno = 0; resno < tilec->numresolutions; resno++) {
-                               opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-                               fprintf(fd, "\n   res {\n");
-                               fprintf(fd,
-                                       "          x0=%d, y0=%d, x1=%d, y1=%d, pw=%d, ph=%d, numbands=%d\n",
-                                       res->x0, res->y0, res->x1, res->y1, res->pw, res->ph, res->numbands);
-                               for (bandno = 0; bandno < res->numbands; bandno++) {
-                                       opj_tcd_band_t *band = &res->bands[bandno];
-                                       fprintf(fd, "        band {\n");
-                                       fprintf(fd,
-                                               "          x0=%d, y0=%d, x1=%d, y1=%d, stepsize=%f, numbps=%d\n",
-                                               band->x0, band->y0, band->x1, band->y1, band->stepsize, band->numbps);
-                                       for (precno = 0; precno < res->pw * res->ph; precno++) {
-                                               opj_tcd_precinct_t *prec = &band->precincts[precno];
-                                               fprintf(fd, "          prec {\n");
-                                               fprintf(fd,
-                                                       "            x0=%d, y0=%d, x1=%d, y1=%d, cw=%d, ch=%d\n",
-                                                       prec->x0, prec->y0, prec->x1, prec->y1, prec->cw, prec->ch);
-                                               /*
-                                               for (cblkno = 0; cblkno < prec->cw * prec->ch; cblkno++) {
-                                                       opj_tcd_cblk_t *cblk = &prec->cblks[cblkno];
-                                                       fprintf(fd, "            cblk {\n");
-                                                       fprintf(fd,
-                                                               "              x0=%d, y0=%d, x1=%d, y1=%d\n",
-                                                               cblk->x0, cblk->y0, cblk->x1, cblk->y1);
-                                                       fprintf(fd, "            }\n");
-                                               }
-                                               */
-                                               fprintf(fd, "          }\n");
-                                       }
-                                       fprintf(fd, "        }\n");
-                               }
-                               fprintf(fd, "      }\n");
-                       }
-                       fprintf(fd, "    }\n");
-               }
-               fprintf(fd, "  }\n");
-       }
-       fprintf(fd, "}\n");
+void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_image_t * img)
+{
+    int tileno, compno, resno, bandno, precno;/*, cblkno;*/
+
+    fprintf(fd, "image {\n");
+    fprintf(fd, "  tw=%d, th=%d x0=%d x1=%d y0=%d y1=%d\n",
+            img->tw, img->th, tcd->image->x0, tcd->image->x1, tcd->image->y0,
+            tcd->image->y1);
+
+    for (tileno = 0; tileno < img->th * img->tw; tileno++) {
+        opj_tcd_tile_t *tile = &tcd->tcd_image->tiles[tileno];
+        fprintf(fd, "  tile {\n");
+        fprintf(fd, "    x0=%d, y0=%d, x1=%d, y1=%d, numcomps=%d\n",
+                tile->x0, tile->y0, tile->x1, tile->y1, tile->numcomps);
+        for (compno = 0; compno < tile->numcomps; compno++) {
+            opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+            fprintf(fd, "    tilec {\n");
+            fprintf(fd,
+                    "      x0=%d, y0=%d, x1=%d, y1=%d, numresolutions=%d\n",
+                    tilec->x0, tilec->y0, tilec->x1, tilec->y1, tilec->numresolutions);
+            for (resno = 0; resno < tilec->numresolutions; resno++) {
+                opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+                fprintf(fd, "\n   res {\n");
+                fprintf(fd,
+                        "          x0=%d, y0=%d, x1=%d, y1=%d, pw=%d, ph=%d, numbands=%d\n",
+                        res->x0, res->y0, res->x1, res->y1, res->pw, res->ph, res->numbands);
+                for (bandno = 0; bandno < res->numbands; bandno++) {
+                    opj_tcd_band_t *band = &res->bands[bandno];
+                    fprintf(fd, "        band {\n");
+                    fprintf(fd,
+                            "          x0=%d, y0=%d, x1=%d, y1=%d, stepsize=%f, numbps=%d\n",
+                            band->x0, band->y0, band->x1, band->y1, band->stepsize, band->numbps);
+                    for (precno = 0; precno < res->pw * res->ph; precno++) {
+                        opj_tcd_precinct_t *prec = &band->precincts[precno];
+                        fprintf(fd, "          prec {\n");
+                        fprintf(fd,
+                                "            x0=%d, y0=%d, x1=%d, y1=%d, cw=%d, ch=%d\n",
+                                prec->x0, prec->y0, prec->x1, prec->y1, prec->cw, prec->ch);
+                        /*
+                        for (cblkno = 0; cblkno < prec->cw * prec->ch; cblkno++) {
+                            opj_tcd_cblk_t *cblk = &prec->cblks[cblkno];
+                            fprintf(fd, "            cblk {\n");
+                            fprintf(fd,
+                                "              x0=%d, y0=%d, x1=%d, y1=%d\n",
+                                cblk->x0, cblk->y0, cblk->x1, cblk->y1);
+                            fprintf(fd, "            }\n");
+                        }
+                        */
+                        fprintf(fd, "          }\n");
+                    }
+                    fprintf(fd, "        }\n");
+                }
+                fprintf(fd, "      }\n");
+            }
+            fprintf(fd, "    }\n");
+        }
+        fprintf(fd, "  }\n");
+    }
+    fprintf(fd, "}\n");
 }
 
 /* ----------------------------------------------------------------------- */
@@ -103,1447 +105,1524 @@ void tcd_dump(FILE *fd, opj_tcd_t *tcd, opj_tcd_image_t * img) {
 /**
 Create a new TCD handle
 */
-opj_tcd_t* tcd_create(opj_common_ptr cinfo) {
-       /* create the tcd structure */
-       opj_tcd_t *tcd = (opj_tcd_t*)opj_malloc(sizeof(opj_tcd_t));
-       if(!tcd) return NULL;
-       tcd->cinfo = cinfo;
-       tcd->tcd_image = (opj_tcd_image_t*)opj_malloc(sizeof(opj_tcd_image_t));
-       if(!tcd->tcd_image) {
-               opj_free(tcd);
-               return NULL;
-       }
-
-       return tcd;
+opj_tcd_t* tcd_create(opj_common_ptr cinfo)
+{
+    /* create the tcd structure */
+    opj_tcd_t *tcd = (opj_tcd_t*)opj_malloc(sizeof(opj_tcd_t));
+    if (!tcd) {
+        return NULL;
+    }
+    tcd->cinfo = cinfo;
+    tcd->tcd_image = (opj_tcd_image_t*)opj_malloc(sizeof(opj_tcd_image_t));
+    if (!tcd->tcd_image) {
+        opj_free(tcd);
+        return NULL;
+    }
+
+    return tcd;
 }
 
 /**
 Destroy a previously created TCD handle
 */
-void tcd_destroy(opj_tcd_t *tcd) {
-       if(tcd) {
-               opj_free(tcd->tcd_image);
-               opj_free(tcd);
-       }
+void tcd_destroy(opj_tcd_t *tcd)
+{
+    if (tcd) {
+        opj_free(tcd->tcd_image);
+        opj_free(tcd);
+    }
 }
 
 /* ----------------------------------------------------------------------- */
 
-void tcd_malloc_encode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp, int curtileno) {
-       int tileno, compno, resno, bandno, precno, cblkno;
-
-       tcd->image = image;
-       tcd->cp = cp;
-       tcd->tcd_image->tw = cp->tw;
-       tcd->tcd_image->th = cp->th;
-       tcd->tcd_image->tiles = (opj_tcd_tile_t *) opj_malloc(sizeof(opj_tcd_tile_t));
-       
-       for (tileno = 0; tileno < 1; tileno++) {
-               opj_tcp_t *tcp = &cp->tcps[curtileno];
-               int j;
-
-               /* cfr p59 ISO/IEC FDIS15444-1 : 2000 (18 august 2000) */
-               int p = curtileno % cp->tw;     /* si numerotation matricielle .. */
-               int q = curtileno / cp->tw;     /* .. coordonnees de la tile (q,p) q pour ligne et p pour colonne */
-
-               /* opj_tcd_tile_t *tile=&tcd->tcd_image->tiles[tileno]; */
-               opj_tcd_tile_t *tile = tcd->tcd_image->tiles;
-
-               /* 4 borders of the tile rescale on the image if necessary */
-               tile->x0 = int_max(cp->tx0 + p * cp->tdx, image->x0);
-               tile->y0 = int_max(cp->ty0 + q * cp->tdy, image->y0);
-               tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1);
-               tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1);
-               tile->numcomps = image->numcomps;
-               /* tile->PPT=image->PPT;  */
-
-               /* Modification of the RATE >> */
-               for (j = 0; j < tcp->numlayers; j++) {
-                       tcp->rates[j] = tcp->rates[j] ? 
-                               cp->tp_on ? 
-                                       (((float) (tile->numcomps 
-                                       * (tile->x1 - tile->x0) 
-                                       * (tile->y1 - tile->y0)
-                                       * image->comps[0].prec))
-                                       /(tcp->rates[j] * 8 * image->comps[0].dx * image->comps[0].dy)) - (((tcd->cur_totnum_tp - 1) * 14 )/ tcp->numlayers)
-                                       :
-                               ((float) (tile->numcomps 
-                                       * (tile->x1 - tile->x0) 
-                                       * (tile->y1 - tile->y0) 
-                                       * image->comps[0].prec))/ 
-                                       (tcp->rates[j] * 8 * image->comps[0].dx * image->comps[0].dy)
-                                       : 0;
-
-                       if (tcp->rates[j]) {
-                               if (j && tcp->rates[j] < tcp->rates[j - 1] + 10) {
-                                       tcp->rates[j] = tcp->rates[j - 1] + 20;
-                               } else {
-                                       if (!j && tcp->rates[j] < 30)
-                                               tcp->rates[j] = 30;
-                               }
-                               
-                               if(j == (tcp->numlayers-1)){
-                                       tcp->rates[j] = tcp->rates[j]- 2;
-                               }
-                       }
-               }
-               /* << Modification of the RATE */
-               
-               tile->comps = (opj_tcd_tilecomp_t *) opj_malloc(image->numcomps * sizeof(opj_tcd_tilecomp_t));
-               for (compno = 0; compno < tile->numcomps; compno++) {
-                       opj_tccp_t *tccp = &tcp->tccps[compno];
-
-                       opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-
-                       /* border of each tile component (global) */
-                       tilec->x0 = int_ceildiv(tile->x0, image->comps[compno].dx);
-                       tilec->y0 = int_ceildiv(tile->y0, image->comps[compno].dy);
-                       tilec->x1 = int_ceildiv(tile->x1, image->comps[compno].dx);
-                       tilec->y1 = int_ceildiv(tile->y1, image->comps[compno].dy);
-                       
-                       tilec->data = (int *) opj_aligned_malloc((tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0) * sizeof(int));
-                       tilec->numresolutions = tccp->numresolutions;
-
-                       tilec->resolutions = (opj_tcd_resolution_t *) opj_malloc(tilec->numresolutions * sizeof(opj_tcd_resolution_t));
-                       
-                       for (resno = 0; resno < tilec->numresolutions; resno++) {
-                               int pdx, pdy;
-                               int levelno = tilec->numresolutions - 1 - resno;
-                               int tlprcxstart, tlprcystart, brprcxend, brprcyend;
-                               int tlcbgxstart, tlcbgystart, brcbgxend, brcbgyend;
-                               int cbgwidthexpn, cbgheightexpn;
-                               int cblkwidthexpn, cblkheightexpn;
-
-                               opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-                               
-                               /* border for each resolution level (global) */
-                               res->x0 = int_ceildivpow2(tilec->x0, levelno);
-                               res->y0 = int_ceildivpow2(tilec->y0, levelno);
-                               res->x1 = int_ceildivpow2(tilec->x1, levelno);
-                               res->y1 = int_ceildivpow2(tilec->y1, levelno);
-                               
-                               res->numbands = resno == 0 ? 1 : 3;
-                               /* p. 35, table A-23, ISO/IEC FDIS154444-1 : 2000 (18 august 2000) */
-                               if (tccp->csty & J2K_CCP_CSTY_PRT) {
-                                       pdx = tccp->prcw[resno];
-                                       pdy = tccp->prch[resno];
-                               } else {
-                                       pdx = 15;
-                                       pdy = 15;
-                               }
-                               /* p. 64, B.6, ISO/IEC FDIS15444-1 : 2000 (18 august 2000)  */
-                               tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx;
-                               tlprcystart = int_floordivpow2(res->y0, pdy) << pdy;
-                               
-                               brprcxend = int_ceildivpow2(res->x1, pdx) << pdx;
-                               brprcyend = int_ceildivpow2(res->y1, pdy) << pdy;
-                               
-                               res->pw = (brprcxend - tlprcxstart) >> pdx;
-                               res->ph = (brprcyend - tlprcystart) >> pdy;
-                               
-                               if (resno == 0) {
-                                       tlcbgxstart = tlprcxstart;
-                                       tlcbgystart = tlprcystart;
-                                       brcbgxend = brprcxend;
-                                       brcbgyend = brprcyend;
-                                       cbgwidthexpn = pdx;
-                                       cbgheightexpn = pdy;
-                               } else {
-                                       tlcbgxstart = int_ceildivpow2(tlprcxstart, 1);
-                                       tlcbgystart = int_ceildivpow2(tlprcystart, 1);
-                                       brcbgxend = int_ceildivpow2(brprcxend, 1);
-                                       brcbgyend = int_ceildivpow2(brprcyend, 1);
-                                       cbgwidthexpn = pdx - 1;
-                                       cbgheightexpn = pdy - 1;
-                               }
-                               
-                               cblkwidthexpn = int_min(tccp->cblkw, cbgwidthexpn);
-                               cblkheightexpn = int_min(tccp->cblkh, cbgheightexpn);
-                               
-                               for (bandno = 0; bandno < res->numbands; bandno++) {
-                                       int x0b, y0b, i;
-                                       int gain, numbps;
-                                       opj_stepsize_t *ss = NULL;
-
-                                       opj_tcd_band_t *band = &res->bands[bandno];
-
-                                       band->bandno = resno == 0 ? 0 : bandno + 1;
-                                       x0b = (band->bandno == 1) || (band->bandno == 3) ? 1 : 0;
-                                       y0b = (band->bandno == 2) || (band->bandno == 3) ? 1 : 0;
-                                       
-                                       if (band->bandno == 0) {
-                                               /* band border (global) */
-                                               band->x0 = int_ceildivpow2(tilec->x0, levelno);
-                                               band->y0 = int_ceildivpow2(tilec->y0, levelno);
-                                               band->x1 = int_ceildivpow2(tilec->x1, levelno);
-                                               band->y1 = int_ceildivpow2(tilec->y1, levelno);
-                                       } else {
-                                               /* band border (global) */
-                                               band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelno) * x0b, levelno + 1);
-                                               band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelno) * y0b, levelno + 1);
-                                               band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelno) * x0b, levelno + 1);
-                                               band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelno) * y0b, levelno + 1);
-                                       }
-                                       
-                                       ss = &tccp->stepsizes[resno == 0 ? 0 : 3 * (resno - 1) + bandno + 1];
-                                       gain = tccp->qmfbid == 0 ? dwt_getgain_real(band->bandno) : dwt_getgain(band->bandno);                                  
-                                       numbps = image->comps[compno].prec + gain;
-                                       
-                                       band->stepsize = (float)((1.0 + ss->mant / 2048.0) * pow(2.0, numbps - ss->expn));
-                                       band->numbps = ss->expn + tccp->numgbits - 1;   /* WHY -1 ? */
-                                       
-                                       band->precincts = (opj_tcd_precinct_t *) opj_malloc(3 * res->pw * res->ph * sizeof(opj_tcd_precinct_t));
-                                       
-                                       for (i = 0; i < res->pw * res->ph * 3; i++) {
-                                               band->precincts[i].imsbtree = NULL;
-                                               band->precincts[i].incltree = NULL;
-                                               band->precincts[i].cblks.enc = NULL;
-                                       }
-                                       
-                                       for (precno = 0; precno < res->pw * res->ph; precno++) {
-                                               int tlcblkxstart, tlcblkystart, brcblkxend, brcblkyend;
-
-                                               int cbgxstart = tlcbgxstart + (precno % res->pw) * (1 << cbgwidthexpn);
-                                               int cbgystart = tlcbgystart + (precno / res->pw) * (1 << cbgheightexpn);
-                                               int cbgxend = cbgxstart + (1 << cbgwidthexpn);
-                                               int cbgyend = cbgystart + (1 << cbgheightexpn);
-
-                                               opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-                                               /* precinct size (global) */
-                                               prc->x0 = int_max(cbgxstart, band->x0);
-                                               prc->y0 = int_max(cbgystart, band->y0);
-                                               prc->x1 = int_min(cbgxend, band->x1);
-                                               prc->y1 = int_min(cbgyend, band->y1);
-
-                                               tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn;
-                                               tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn;
-                                               brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn;
-                                               brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn;
-                                               prc->cw = (brcblkxend - tlcblkxstart) >> cblkwidthexpn;
-                                               prc->ch = (brcblkyend - tlcblkystart) >> cblkheightexpn;
-
-                                               prc->cblks.enc = (opj_tcd_cblk_enc_t*) opj_calloc((prc->cw * prc->ch), sizeof(opj_tcd_cblk_enc_t));
-                                               prc->incltree = tgt_create(prc->cw, prc->ch);
-                                               prc->imsbtree = tgt_create(prc->cw, prc->ch);
-                                               
-                                               for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                                                       int cblkxstart = tlcblkxstart + (cblkno % prc->cw) * (1 << cblkwidthexpn);
-                                                       int cblkystart = tlcblkystart + (cblkno / prc->cw) * (1 << cblkheightexpn);
-                                                       int cblkxend = cblkxstart + (1 << cblkwidthexpn);
-                                                       int cblkyend = cblkystart + (1 << cblkheightexpn);
-                                                       
-                                                       opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno];
-
-                                                       /* code-block size (global) */
-                                                       cblk->x0 = int_max(cblkxstart, prc->x0);
-                                                       cblk->y0 = int_max(cblkystart, prc->y0);
-                                                       cblk->x1 = int_min(cblkxend, prc->x1);
-                                                       cblk->y1 = int_min(cblkyend, prc->y1);
-                                                       cblk->data = (unsigned char*) opj_calloc(9728+2, sizeof(unsigned char));
-                                                       /* FIXME: mqc_init_enc and mqc_byteout underrun the buffer if we don't do this. Why? */
-                                                       cblk->data[0] = 0;
-                                                       cblk->data[1] = 0;
-                                                       cblk->data += 2;
-                                                       cblk->layers = (opj_tcd_layer_t*) opj_calloc(100, sizeof(opj_tcd_layer_t));
-                                                       cblk->passes = (opj_tcd_pass_t*) opj_calloc(100, sizeof(opj_tcd_pass_t));
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
-       
-       /* tcd_dump(stdout, tcd, &tcd->tcd_image); */
+void tcd_malloc_encode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp,
+                       int curtileno)
+{
+    int tileno, compno, resno, bandno, precno, cblkno;
+
+    tcd->image = image;
+    tcd->cp = cp;
+    tcd->tcd_image->tw = cp->tw;
+    tcd->tcd_image->th = cp->th;
+    tcd->tcd_image->tiles = (opj_tcd_tile_t *) opj_malloc(sizeof(opj_tcd_tile_t));
+
+    for (tileno = 0; tileno < 1; tileno++) {
+        opj_tcp_t *tcp = &cp->tcps[curtileno];
+        int j;
+
+        /* cfr p59 ISO/IEC FDIS15444-1 : 2000 (18 august 2000) */
+        int p = curtileno % cp->tw; /* si numerotation matricielle .. */
+        int q = curtileno /
+                cp->tw; /* .. coordonnees de la tile (q,p) q pour ligne et p pour colonne */
+
+        /* opj_tcd_tile_t *tile=&tcd->tcd_image->tiles[tileno]; */
+        opj_tcd_tile_t *tile = tcd->tcd_image->tiles;
+
+        /* 4 borders of the tile rescale on the image if necessary */
+        tile->x0 = int_max(cp->tx0 + p * cp->tdx, image->x0);
+        tile->y0 = int_max(cp->ty0 + q * cp->tdy, image->y0);
+        tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1);
+        tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1);
+        tile->numcomps = image->numcomps;
+        /* tile->PPT=image->PPT;  */
+
+        /* Modification of the RATE >> */
+        for (j = 0; j < tcp->numlayers; j++) {
+            tcp->rates[j] = tcp->rates[j] ?
+                            cp->tp_on ?
+                            (((float)(tile->numcomps
+                                      * (tile->x1 - tile->x0)
+                                      * (tile->y1 - tile->y0)
+                                      * image->comps[0].prec))
+                             / (tcp->rates[j] * 8 * image->comps[0].dx * image->comps[0].dy)) - (((
+                                         tcd->cur_totnum_tp - 1) * 14) / tcp->numlayers)
+                            :
+                            ((float)(tile->numcomps
+                                     * (tile->x1 - tile->x0)
+                                     * (tile->y1 - tile->y0)
+                                     * image->comps[0].prec)) /
+                            (tcp->rates[j] * 8 * image->comps[0].dx * image->comps[0].dy)
+                            : 0;
+
+            if (tcp->rates[j]) {
+                if (j && tcp->rates[j] < tcp->rates[j - 1] + 10) {
+                    tcp->rates[j] = tcp->rates[j - 1] + 20;
+                } else {
+                    if (!j && tcp->rates[j] < 30) {
+                        tcp->rates[j] = 30;
+                    }
+                }
+
+                if (j == (tcp->numlayers - 1)) {
+                    tcp->rates[j] = tcp->rates[j] - 2;
+                }
+            }
+        }
+        /* << Modification of the RATE */
+
+        tile->comps = (opj_tcd_tilecomp_t *) opj_malloc(image->numcomps * sizeof(
+                          opj_tcd_tilecomp_t));
+        for (compno = 0; compno < tile->numcomps; compno++) {
+            opj_tccp_t *tccp = &tcp->tccps[compno];
+
+            opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+
+            /* border of each tile component (global) */
+            tilec->x0 = int_ceildiv(tile->x0, image->comps[compno].dx);
+            tilec->y0 = int_ceildiv(tile->y0, image->comps[compno].dy);
+            tilec->x1 = int_ceildiv(tile->x1, image->comps[compno].dx);
+            tilec->y1 = int_ceildiv(tile->y1, image->comps[compno].dy);
+
+            tilec->data = (int *) opj_aligned_malloc((tilec->x1 - tilec->x0) *
+                          (tilec->y1 - tilec->y0) * sizeof(int));
+            tilec->numresolutions = tccp->numresolutions;
+
+            tilec->resolutions = (opj_tcd_resolution_t *) opj_malloc(
+                                     tilec->numresolutions * sizeof(opj_tcd_resolution_t));
+
+            for (resno = 0; resno < tilec->numresolutions; resno++) {
+                int pdx, pdy;
+                int levelno = tilec->numresolutions - 1 - resno;
+                int tlprcxstart, tlprcystart, brprcxend, brprcyend;
+                int tlcbgxstart, tlcbgystart, brcbgxend, brcbgyend;
+                int cbgwidthexpn, cbgheightexpn;
+                int cblkwidthexpn, cblkheightexpn;
+
+                opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+
+                /* border for each resolution level (global) */
+                res->x0 = int_ceildivpow2(tilec->x0, levelno);
+                res->y0 = int_ceildivpow2(tilec->y0, levelno);
+                res->x1 = int_ceildivpow2(tilec->x1, levelno);
+                res->y1 = int_ceildivpow2(tilec->y1, levelno);
+
+                res->numbands = resno == 0 ? 1 : 3;
+                /* p. 35, table A-23, ISO/IEC FDIS154444-1 : 2000 (18 august 2000) */
+                if (tccp->csty & J2K_CCP_CSTY_PRT) {
+                    pdx = tccp->prcw[resno];
+                    pdy = tccp->prch[resno];
+                } else {
+                    pdx = 15;
+                    pdy = 15;
+                }
+                /* p. 64, B.6, ISO/IEC FDIS15444-1 : 2000 (18 august 2000)  */
+                tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx;
+                tlprcystart = int_floordivpow2(res->y0, pdy) << pdy;
+
+                brprcxend = int_ceildivpow2(res->x1, pdx) << pdx;
+                brprcyend = int_ceildivpow2(res->y1, pdy) << pdy;
+
+                res->pw = (brprcxend - tlprcxstart) >> pdx;
+                res->ph = (brprcyend - tlprcystart) >> pdy;
+
+                if (resno == 0) {
+                    tlcbgxstart = tlprcxstart;
+                    tlcbgystart = tlprcystart;
+                    brcbgxend = brprcxend;
+                    brcbgyend = brprcyend;
+                    cbgwidthexpn = pdx;
+                    cbgheightexpn = pdy;
+                } else {
+                    tlcbgxstart = int_ceildivpow2(tlprcxstart, 1);
+                    tlcbgystart = int_ceildivpow2(tlprcystart, 1);
+                    brcbgxend = int_ceildivpow2(brprcxend, 1);
+                    brcbgyend = int_ceildivpow2(brprcyend, 1);
+                    cbgwidthexpn = pdx - 1;
+                    cbgheightexpn = pdy - 1;
+                }
+
+                cblkwidthexpn = int_min(tccp->cblkw, cbgwidthexpn);
+                cblkheightexpn = int_min(tccp->cblkh, cbgheightexpn);
+
+                for (bandno = 0; bandno < res->numbands; bandno++) {
+                    int x0b, y0b, i;
+                    int gain, numbps;
+                    opj_stepsize_t *ss = NULL;
+
+                    opj_tcd_band_t *band = &res->bands[bandno];
+
+                    band->bandno = resno == 0 ? 0 : bandno + 1;
+                    x0b = (band->bandno == 1) || (band->bandno == 3) ? 1 : 0;
+                    y0b = (band->bandno == 2) || (band->bandno == 3) ? 1 : 0;
+
+                    if (band->bandno == 0) {
+                        /* band border (global) */
+                        band->x0 = int_ceildivpow2(tilec->x0, levelno);
+                        band->y0 = int_ceildivpow2(tilec->y0, levelno);
+                        band->x1 = int_ceildivpow2(tilec->x1, levelno);
+                        band->y1 = int_ceildivpow2(tilec->y1, levelno);
+                    } else {
+                        /* band border (global) */
+                        band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelno) * x0b, levelno + 1);
+                        band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelno) * y0b, levelno + 1);
+                        band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelno) * x0b, levelno + 1);
+                        band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelno) * y0b, levelno + 1);
+                    }
+
+                    ss = &tccp->stepsizes[resno == 0 ? 0 : 3 * (resno - 1) + bandno + 1];
+                    gain = tccp->qmfbid == 0 ? dwt_getgain_real(band->bandno) : dwt_getgain(
+                               band->bandno);
+                    numbps = image->comps[compno].prec + gain;
+
+                    band->stepsize = (float)((1.0 + ss->mant / 2048.0) * pow(2.0,
+                                             numbps - ss->expn));
+                    band->numbps = ss->expn + tccp->numgbits - 1;   /* WHY -1 ? */
+
+                    band->precincts = (opj_tcd_precinct_t *) opj_malloc(3 * res->pw * res->ph *
+                                      sizeof(opj_tcd_precinct_t));
+
+                    for (i = 0; i < res->pw * res->ph * 3; i++) {
+                        band->precincts[i].imsbtree = NULL;
+                        band->precincts[i].incltree = NULL;
+                        band->precincts[i].cblks.enc = NULL;
+                    }
+
+                    for (precno = 0; precno < res->pw * res->ph; precno++) {
+                        int tlcblkxstart, tlcblkystart, brcblkxend, brcblkyend;
+
+                        int cbgxstart = tlcbgxstart + (precno % res->pw) * (1 << cbgwidthexpn);
+                        int cbgystart = tlcbgystart + (precno / res->pw) * (1 << cbgheightexpn);
+                        int cbgxend = cbgxstart + (1 << cbgwidthexpn);
+                        int cbgyend = cbgystart + (1 << cbgheightexpn);
+
+                        opj_tcd_precinct_t *prc = &band->precincts[precno];
+
+                        /* precinct size (global) */
+                        prc->x0 = int_max(cbgxstart, band->x0);
+                        prc->y0 = int_max(cbgystart, band->y0);
+                        prc->x1 = int_min(cbgxend, band->x1);
+                        prc->y1 = int_min(cbgyend, band->y1);
+
+                        tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn;
+                        tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn;
+                        brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn;
+                        brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn;
+                        prc->cw = (brcblkxend - tlcblkxstart) >> cblkwidthexpn;
+                        prc->ch = (brcblkyend - tlcblkystart) >> cblkheightexpn;
+
+                        prc->cblks.enc = (opj_tcd_cblk_enc_t*) opj_calloc((prc->cw * prc->ch),
+                                         sizeof(opj_tcd_cblk_enc_t));
+                        prc->incltree = tgt_create(prc->cw, prc->ch);
+                        prc->imsbtree = tgt_create(prc->cw, prc->ch);
+
+                        for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
+                            int cblkxstart = tlcblkxstart + (cblkno % prc->cw) * (1 << cblkwidthexpn);
+                            int cblkystart = tlcblkystart + (cblkno / prc->cw) * (1 << cblkheightexpn);
+                            int cblkxend = cblkxstart + (1 << cblkwidthexpn);
+                            int cblkyend = cblkystart + (1 << cblkheightexpn);
+
+                            opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno];
+
+                            /* code-block size (global) */
+                            cblk->x0 = int_max(cblkxstart, prc->x0);
+                            cblk->y0 = int_max(cblkystart, prc->y0);
+                            cblk->x1 = int_min(cblkxend, prc->x1);
+                            cblk->y1 = int_min(cblkyend, prc->y1);
+                            cblk->data = (unsigned char*) opj_calloc(9728 + 2, sizeof(unsigned char));
+                            /* FIXME: mqc_init_enc and mqc_byteout underrun the buffer if we don't do this. Why? */
+                            cblk->data[0] = 0;
+                            cblk->data[1] = 0;
+                            cblk->data += 2;
+                            cblk->layers = (opj_tcd_layer_t*) opj_calloc(100, sizeof(opj_tcd_layer_t));
+                            cblk->passes = (opj_tcd_pass_t*) opj_calloc(100, sizeof(opj_tcd_pass_t));
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    /* tcd_dump(stdout, tcd, &tcd->tcd_image); */
 }
 
-void tcd_free_encode(opj_tcd_t *tcd) {
-       int tileno, compno, resno, bandno, precno, cblkno;
-
-       for (tileno = 0; tileno < 1; tileno++) {
-               opj_tcd_tile_t *tile = tcd->tcd_image->tiles;
-
-               for (compno = 0; compno < tile->numcomps; compno++) {
-                       opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-
-                       for (resno = 0; resno < tilec->numresolutions; resno++) {
-                               opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-
-                               for (bandno = 0; bandno < res->numbands; bandno++) {
-                                       opj_tcd_band_t *band = &res->bands[bandno];
-
-                                       for (precno = 0; precno < res->pw * res->ph; precno++) {
-                                               opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-                                               if (prc->incltree != NULL) {
-                                                       tgt_destroy(prc->incltree);
-                                                       prc->incltree = NULL;
-                                               }
-                                               if (prc->imsbtree != NULL) {
-                                                       tgt_destroy(prc->imsbtree);     
-                                                       prc->imsbtree = NULL;
-                                               }
-                                               for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                                                       opj_free(prc->cblks.enc[cblkno].data - 2);
-                                                       opj_free(prc->cblks.enc[cblkno].layers);
-                                                       opj_free(prc->cblks.enc[cblkno].passes);
-                                               }
-                                               opj_free(prc->cblks.enc);
-                                       } /* for (precno */
-                                       opj_free(band->precincts);
-                                       band->precincts = NULL;
-                               } /* for (bandno */
-                       } /* for (resno */
-                       opj_free(tilec->resolutions);
-                       tilec->resolutions = NULL;
-               } /* for (compno */
-               opj_free(tile->comps);
-               tile->comps = NULL;
-       } /* for (tileno */
-       opj_free(tcd->tcd_image->tiles);
-       tcd->tcd_image->tiles = NULL;
+void tcd_free_encode(opj_tcd_t *tcd)
+{
+    int tileno, compno, resno, bandno, precno, cblkno;
+
+    for (tileno = 0; tileno < 1; tileno++) {
+        opj_tcd_tile_t *tile = tcd->tcd_image->tiles;
+
+        for (compno = 0; compno < tile->numcomps; compno++) {
+            opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+
+            for (resno = 0; resno < tilec->numresolutions; resno++) {
+                opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+
+                for (bandno = 0; bandno < res->numbands; bandno++) {
+                    opj_tcd_band_t *band = &res->bands[bandno];
+
+                    for (precno = 0; precno < res->pw * res->ph; precno++) {
+                        opj_tcd_precinct_t *prc = &band->precincts[precno];
+
+                        if (prc->incltree != NULL) {
+                            tgt_destroy(prc->incltree);
+                            prc->incltree = NULL;
+                        }
+                        if (prc->imsbtree != NULL) {
+                            tgt_destroy(prc->imsbtree);
+                            prc->imsbtree = NULL;
+                        }
+                        for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
+                            opj_free(prc->cblks.enc[cblkno].data - 2);
+                            opj_free(prc->cblks.enc[cblkno].layers);
+                            opj_free(prc->cblks.enc[cblkno].passes);
+                        }
+                        opj_free(prc->cblks.enc);
+                    } /* for (precno */
+                    opj_free(band->precincts);
+                    band->precincts = NULL;
+                } /* for (bandno */
+            } /* for (resno */
+            opj_free(tilec->resolutions);
+            tilec->resolutions = NULL;
+        } /* for (compno */
+        opj_free(tile->comps);
+        tile->comps = NULL;
+    } /* for (tileno */
+    opj_free(tcd->tcd_image->tiles);
+    tcd->tcd_image->tiles = NULL;
 }
 
-void tcd_init_encode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp, int curtileno) {
-       int tileno, compno, resno, bandno, precno, cblkno;
-
-       for (tileno = 0; tileno < 1; tileno++) {
-               opj_tcp_t *tcp = &cp->tcps[curtileno];
-               int j;
-               /* cfr p59 ISO/IEC FDIS15444-1 : 2000 (18 august 2000) */
-               int p = curtileno % cp->tw;
-               int q = curtileno / cp->tw;
-
-               opj_tcd_tile_t *tile = tcd->tcd_image->tiles;
-               
-               /* 4 borders of the tile rescale on the image if necessary */
-               tile->x0 = int_max(cp->tx0 + p * cp->tdx, image->x0);
-               tile->y0 = int_max(cp->ty0 + q * cp->tdy, image->y0);
-               tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1);
-               tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1);
-               
-               tile->numcomps = image->numcomps;
-               /* tile->PPT=image->PPT; */
-
-               /* Modification of the RATE >> */
-               for (j = 0; j < tcp->numlayers; j++) {
-                       tcp->rates[j] = tcp->rates[j] ? 
-                               cp->tp_on ? 
-                                       (((float) (tile->numcomps 
-                                       * (tile->x1 - tile->x0) 
-                                       * (tile->y1 - tile->y0)
-                                       * image->comps[0].prec))
-                                       /(tcp->rates[j] * 8 * image->comps[0].dx * image->comps[0].dy)) - (((tcd->cur_totnum_tp - 1) * 14 )/ tcp->numlayers)
-                                       :
-                               ((float) (tile->numcomps 
-                                       * (tile->x1 - tile->x0) 
-                                       * (tile->y1 - tile->y0) 
-                                       * image->comps[0].prec))/ 
-                                       (tcp->rates[j] * 8 * image->comps[0].dx * image->comps[0].dy)
-                                       : 0;
-
-                       if (tcp->rates[j]) {
-                               if (j && tcp->rates[j] < tcp->rates[j - 1] + 10) {
-                                       tcp->rates[j] = tcp->rates[j - 1] + 20;
-                               } else {
-                                       if (!j && tcp->rates[j] < 30)
-                                               tcp->rates[j] = 30;
-                               }
-                       }
-               }
-               /* << Modification of the RATE */
-
-               /* tile->comps=(opj_tcd_tilecomp_t*)opj_realloc(tile->comps,image->numcomps*sizeof(opj_tcd_tilecomp_t)); */
-               for (compno = 0; compno < tile->numcomps; compno++) {
-                       opj_tccp_t *tccp = &tcp->tccps[compno];
-                       
-                       opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-
-                       /* border of each tile component (global) */
-                       tilec->x0 = int_ceildiv(tile->x0, image->comps[compno].dx);
-                       tilec->y0 = int_ceildiv(tile->y0, image->comps[compno].dy);
-                       tilec->x1 = int_ceildiv(tile->x1, image->comps[compno].dx);
-                       tilec->y1 = int_ceildiv(tile->y1, image->comps[compno].dy);
-                       
-                       tilec->data = (int *) opj_aligned_malloc((tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0) * sizeof(int));
-                       tilec->numresolutions = tccp->numresolutions;
-                       /* tilec->resolutions=(opj_tcd_resolution_t*)opj_realloc(tilec->resolutions,tilec->numresolutions*sizeof(opj_tcd_resolution_t)); */
-                       for (resno = 0; resno < tilec->numresolutions; resno++) {
-                               int pdx, pdy;
-
-                               int levelno = tilec->numresolutions - 1 - resno;
-                               int tlprcxstart, tlprcystart, brprcxend, brprcyend;
-                               int tlcbgxstart, tlcbgystart, brcbgxend, brcbgyend;
-                               int cbgwidthexpn, cbgheightexpn;
-                               int cblkwidthexpn, cblkheightexpn;
-                               
-                               opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-
-                               /* border for each resolution level (global) */
-                               res->x0 = int_ceildivpow2(tilec->x0, levelno);
-                               res->y0 = int_ceildivpow2(tilec->y0, levelno);
-                               res->x1 = int_ceildivpow2(tilec->x1, levelno);
-                               res->y1 = int_ceildivpow2(tilec->y1, levelno);  
-                               res->numbands = resno == 0 ? 1 : 3;
-
-                               /* p. 35, table A-23, ISO/IEC FDIS154444-1 : 2000 (18 august 2000) */
-                               if (tccp->csty & J2K_CCP_CSTY_PRT) {
-                                       pdx = tccp->prcw[resno];
-                                       pdy = tccp->prch[resno];
-                               } else {
-                                       pdx = 15;
-                                       pdy = 15;
-                               }
-                               /* p. 64, B.6, ISO/IEC FDIS15444-1 : 2000 (18 august 2000)  */
-                               tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx;
-                               tlprcystart = int_floordivpow2(res->y0, pdy) << pdy;
-                               brprcxend = int_ceildivpow2(res->x1, pdx) << pdx;
-                               brprcyend = int_ceildivpow2(res->y1, pdy) << pdy;
-                               
-                               res->pw = (brprcxend - tlprcxstart) >> pdx;
-                               res->ph = (brprcyend - tlprcystart) >> pdy;
-                               
-                               if (resno == 0) {
-                                       tlcbgxstart = tlprcxstart;
-                                       tlcbgystart = tlprcystart;
-                                       brcbgxend = brprcxend;
-                                       brcbgyend = brprcyend;
-                                       cbgwidthexpn = pdx;
-                                       cbgheightexpn = pdy;
-                               } else {
-                                       tlcbgxstart = int_ceildivpow2(tlprcxstart, 1);
-                                       tlcbgystart = int_ceildivpow2(tlprcystart, 1);
-                                       brcbgxend = int_ceildivpow2(brprcxend, 1);
-                                       brcbgyend = int_ceildivpow2(brprcyend, 1);
-                                       cbgwidthexpn = pdx - 1;
-                                       cbgheightexpn = pdy - 1;
-                               }
-                               
-                               cblkwidthexpn = int_min(tccp->cblkw, cbgwidthexpn);
-                               cblkheightexpn = int_min(tccp->cblkh, cbgheightexpn);
-                               
-                               for (bandno = 0; bandno < res->numbands; bandno++) {
-                                       int x0b, y0b;
-                                       int gain, numbps;
-                                       opj_stepsize_t *ss = NULL;
-
-                                       opj_tcd_band_t *band = &res->bands[bandno];
-
-                                       band->bandno = resno == 0 ? 0 : bandno + 1;
-                                       x0b = (band->bandno == 1) || (band->bandno == 3) ? 1 : 0;
-                                       y0b = (band->bandno == 2) || (band->bandno == 3) ? 1 : 0;
-                                       
-                                       if (band->bandno == 0) {
-                                               /* band border */
-                                               band->x0 = int_ceildivpow2(tilec->x0, levelno);
-                                               band->y0 = int_ceildivpow2(tilec->y0, levelno);
-                                               band->x1 = int_ceildivpow2(tilec->x1, levelno);
-                                               band->y1 = int_ceildivpow2(tilec->y1, levelno);
-                                       } else {
-                                               band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelno) * x0b, levelno + 1);
-                                               band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelno) * y0b, levelno + 1);
-                                               band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelno) * x0b, levelno + 1);
-                                               band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelno) * y0b, levelno + 1);
-                                       }
-                                       
-                                       ss = &tccp->stepsizes[resno == 0 ? 0 : 3 * (resno - 1) + bandno + 1];
-                                       gain = tccp->qmfbid == 0 ? dwt_getgain_real(band->bandno) : dwt_getgain(band->bandno);
-                                       numbps = image->comps[compno].prec + gain;
-                                       band->stepsize = (float)((1.0 + ss->mant / 2048.0) * pow(2.0, numbps - ss->expn));
-                                       band->numbps = ss->expn + tccp->numgbits - 1;   /* WHY -1 ? */
-                                       
-                                       for (precno = 0; precno < res->pw * res->ph; precno++) {
-                                               int tlcblkxstart, tlcblkystart, brcblkxend, brcblkyend;
-
-                                               int cbgxstart = tlcbgxstart + (precno % res->pw) * (1 << cbgwidthexpn);
-                                               int cbgystart = tlcbgystart + (precno / res->pw) * (1 << cbgheightexpn);
-                                               int cbgxend = cbgxstart + (1 << cbgwidthexpn);
-                                               int cbgyend = cbgystart + (1 << cbgheightexpn);
-                                               
-                                               opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-                                               /* precinct size (global) */
-                                               prc->x0 = int_max(cbgxstart, band->x0);
-                                               prc->y0 = int_max(cbgystart, band->y0);
-                                               prc->x1 = int_min(cbgxend, band->x1);
-                                               prc->y1 = int_min(cbgyend, band->y1);
-
-                                               tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn;
-                                               tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn;
-                                               brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn;
-                                               brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn;
-                                               prc->cw = (brcblkxend - tlcblkxstart) >> cblkwidthexpn;
-                                               prc->ch = (brcblkyend - tlcblkystart) >> cblkheightexpn;
-
-                                               opj_free(prc->cblks.enc);
-                                               prc->cblks.enc = (opj_tcd_cblk_enc_t*) opj_calloc(prc->cw * prc->ch, sizeof(opj_tcd_cblk_enc_t));
-
-                                               if (prc->incltree != NULL) {
-                                                       tgt_destroy(prc->incltree);
-                                               }
-                                               if (prc->imsbtree != NULL) {
-                                                       tgt_destroy(prc->imsbtree);
-                                               }
-                                               
-                                               prc->incltree = tgt_create(prc->cw, prc->ch);
-                                               prc->imsbtree = tgt_create(prc->cw, prc->ch);
-
-                                               for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                                                       int cblkxstart = tlcblkxstart + (cblkno % prc->cw) * (1 << cblkwidthexpn);
-                                                       int cblkystart = tlcblkystart + (cblkno / prc->cw) * (1 << cblkheightexpn);
-                                                       int cblkxend = cblkxstart + (1 << cblkwidthexpn);
-                                                       int cblkyend = cblkystart + (1 << cblkheightexpn);
-
-                                                       opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno];
-
-                                                       /* code-block size (global) */
-                                                       cblk->x0 = int_max(cblkxstart, prc->x0);
-                                                       cblk->y0 = int_max(cblkystart, prc->y0);
-                                                       cblk->x1 = int_min(cblkxend, prc->x1);
-                                                       cblk->y1 = int_min(cblkyend, prc->y1);
-                                                       cblk->data = (unsigned char*) opj_calloc(8192+2, sizeof(unsigned char));
-                                                       /* FIXME: mqc_init_enc and mqc_byteout underrun the buffer if we don't do this. Why? */
-                                                       cblk->data[0] = 0;
-                                                       cblk->data[1] = 0;
-                                                       cblk->data += 2;
-                                                       cblk->layers = (opj_tcd_layer_t*) opj_calloc(100, sizeof(opj_tcd_layer_t));
-                                                       cblk->passes = (opj_tcd_pass_t*) opj_calloc(100, sizeof(opj_tcd_pass_t));
-                                               }
-                                       } /* precno */
-                               } /* bandno */
-                       } /* resno */
-               } /* compno */
-       } /* tileno */
-
-       /* tcd_dump(stdout, tcd, &tcd->tcd_image); */
+void tcd_init_encode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp,
+                     int curtileno)
+{
+    int tileno, compno, resno, bandno, precno, cblkno;
+
+    for (tileno = 0; tileno < 1; tileno++) {
+        opj_tcp_t *tcp = &cp->tcps[curtileno];
+        int j;
+        /* cfr p59 ISO/IEC FDIS15444-1 : 2000 (18 august 2000) */
+        int p = curtileno % cp->tw;
+        int q = curtileno / cp->tw;
+
+        opj_tcd_tile_t *tile = tcd->tcd_image->tiles;
+
+        /* 4 borders of the tile rescale on the image if necessary */
+        tile->x0 = int_max(cp->tx0 + p * cp->tdx, image->x0);
+        tile->y0 = int_max(cp->ty0 + q * cp->tdy, image->y0);
+        tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1);
+        tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1);
+
+        tile->numcomps = image->numcomps;
+        /* tile->PPT=image->PPT; */
+
+        /* Modification of the RATE >> */
+        for (j = 0; j < tcp->numlayers; j++) {
+            tcp->rates[j] = tcp->rates[j] ?
+                            cp->tp_on ?
+                            (((float)(tile->numcomps
+                                      * (tile->x1 - tile->x0)
+                                      * (tile->y1 - tile->y0)
+                                      * image->comps[0].prec))
+                             / (tcp->rates[j] * 8 * image->comps[0].dx * image->comps[0].dy)) - (((
+                                         tcd->cur_totnum_tp - 1) * 14) / tcp->numlayers)
+                            :
+                            ((float)(tile->numcomps
+                                     * (tile->x1 - tile->x0)
+                                     * (tile->y1 - tile->y0)
+                                     * image->comps[0].prec)) /
+                            (tcp->rates[j] * 8 * image->comps[0].dx * image->comps[0].dy)
+                            : 0;
+
+            if (tcp->rates[j]) {
+                if (j && tcp->rates[j] < tcp->rates[j - 1] + 10) {
+                    tcp->rates[j] = tcp->rates[j - 1] + 20;
+                } else {
+                    if (!j && tcp->rates[j] < 30) {
+                        tcp->rates[j] = 30;
+                    }
+                }
+            }
+        }
+        /* << Modification of the RATE */
+
+        /* tile->comps=(opj_tcd_tilecomp_t*)opj_realloc(tile->comps,image->numcomps*sizeof(opj_tcd_tilecomp_t)); */
+        for (compno = 0; compno < tile->numcomps; compno++) {
+            opj_tccp_t *tccp = &tcp->tccps[compno];
+
+            opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+
+            /* border of each tile component (global) */
+            tilec->x0 = int_ceildiv(tile->x0, image->comps[compno].dx);
+            tilec->y0 = int_ceildiv(tile->y0, image->comps[compno].dy);
+            tilec->x1 = int_ceildiv(tile->x1, image->comps[compno].dx);
+            tilec->y1 = int_ceildiv(tile->y1, image->comps[compno].dy);
+
+            tilec->data = (int *) opj_aligned_malloc((tilec->x1 - tilec->x0) *
+                          (tilec->y1 - tilec->y0) * sizeof(int));
+            tilec->numresolutions = tccp->numresolutions;
+            /* tilec->resolutions=(opj_tcd_resolution_t*)opj_realloc(tilec->resolutions,tilec->numresolutions*sizeof(opj_tcd_resolution_t)); */
+            for (resno = 0; resno < tilec->numresolutions; resno++) {
+                int pdx, pdy;
+
+                int levelno = tilec->numresolutions - 1 - resno;
+                int tlprcxstart, tlprcystart, brprcxend, brprcyend;
+                int tlcbgxstart, tlcbgystart, brcbgxend, brcbgyend;
+                int cbgwidthexpn, cbgheightexpn;
+                int cblkwidthexpn, cblkheightexpn;
+
+                opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+
+                /* border for each resolution level (global) */
+                res->x0 = int_ceildivpow2(tilec->x0, levelno);
+                res->y0 = int_ceildivpow2(tilec->y0, levelno);
+                res->x1 = int_ceildivpow2(tilec->x1, levelno);
+                res->y1 = int_ceildivpow2(tilec->y1, levelno);
+                res->numbands = resno == 0 ? 1 : 3;
+
+                /* p. 35, table A-23, ISO/IEC FDIS154444-1 : 2000 (18 august 2000) */
+                if (tccp->csty & J2K_CCP_CSTY_PRT) {
+                    pdx = tccp->prcw[resno];
+                    pdy = tccp->prch[resno];
+                } else {
+                    pdx = 15;
+                    pdy = 15;
+                }
+                /* p. 64, B.6, ISO/IEC FDIS15444-1 : 2000 (18 august 2000)  */
+                tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx;
+                tlprcystart = int_floordivpow2(res->y0, pdy) << pdy;
+                brprcxend = int_ceildivpow2(res->x1, pdx) << pdx;
+                brprcyend = int_ceildivpow2(res->y1, pdy) << pdy;
+
+                res->pw = (brprcxend - tlprcxstart) >> pdx;
+                res->ph = (brprcyend - tlprcystart) >> pdy;
+
+                if (resno == 0) {
+                    tlcbgxstart = tlprcxstart;
+                    tlcbgystart = tlprcystart;
+                    brcbgxend = brprcxend;
+                    brcbgyend = brprcyend;
+                    cbgwidthexpn = pdx;
+                    cbgheightexpn = pdy;
+                } else {
+                    tlcbgxstart = int_ceildivpow2(tlprcxstart, 1);
+                    tlcbgystart = int_ceildivpow2(tlprcystart, 1);
+                    brcbgxend = int_ceildivpow2(brprcxend, 1);
+                    brcbgyend = int_ceildivpow2(brprcyend, 1);
+                    cbgwidthexpn = pdx - 1;
+                    cbgheightexpn = pdy - 1;
+                }
+
+                cblkwidthexpn = int_min(tccp->cblkw, cbgwidthexpn);
+                cblkheightexpn = int_min(tccp->cblkh, cbgheightexpn);
+
+                for (bandno = 0; bandno < res->numbands; bandno++) {
+                    int x0b, y0b;
+                    int gain, numbps;
+                    opj_stepsize_t *ss = NULL;
+
+                    opj_tcd_band_t *band = &res->bands[bandno];
+
+                    band->bandno = resno == 0 ? 0 : bandno + 1;
+                    x0b = (band->bandno == 1) || (band->bandno == 3) ? 1 : 0;
+                    y0b = (band->bandno == 2) || (band->bandno == 3) ? 1 : 0;
+
+                    if (band->bandno == 0) {
+                        /* band border */
+                        band->x0 = int_ceildivpow2(tilec->x0, levelno);
+                        band->y0 = int_ceildivpow2(tilec->y0, levelno);
+                        band->x1 = int_ceildivpow2(tilec->x1, levelno);
+                        band->y1 = int_ceildivpow2(tilec->y1, levelno);
+                    } else {
+                        band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelno) * x0b, levelno + 1);
+                        band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelno) * y0b, levelno + 1);
+                        band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelno) * x0b, levelno + 1);
+                        band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelno) * y0b, levelno + 1);
+                    }
+
+                    ss = &tccp->stepsizes[resno == 0 ? 0 : 3 * (resno - 1) + bandno + 1];
+                    gain = tccp->qmfbid == 0 ? dwt_getgain_real(band->bandno) : dwt_getgain(
+                               band->bandno);
+                    numbps = image->comps[compno].prec + gain;
+                    band->stepsize = (float)((1.0 + ss->mant / 2048.0) * pow(2.0,
+                                             numbps - ss->expn));
+                    band->numbps = ss->expn + tccp->numgbits - 1;   /* WHY -1 ? */
+
+                    for (precno = 0; precno < res->pw * res->ph; precno++) {
+                        int tlcblkxstart, tlcblkystart, brcblkxend, brcblkyend;
+
+                        int cbgxstart = tlcbgxstart + (precno % res->pw) * (1 << cbgwidthexpn);
+                        int cbgystart = tlcbgystart + (precno / res->pw) * (1 << cbgheightexpn);
+                        int cbgxend = cbgxstart + (1 << cbgwidthexpn);
+                        int cbgyend = cbgystart + (1 << cbgheightexpn);
+
+                        opj_tcd_precinct_t *prc = &band->precincts[precno];
+
+                        /* precinct size (global) */
+                        prc->x0 = int_max(cbgxstart, band->x0);
+                        prc->y0 = int_max(cbgystart, band->y0);
+                        prc->x1 = int_min(cbgxend, band->x1);
+                        prc->y1 = int_min(cbgyend, band->y1);
+
+                        tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn;
+                        tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn;
+                        brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn;
+                        brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn;
+                        prc->cw = (brcblkxend - tlcblkxstart) >> cblkwidthexpn;
+                        prc->ch = (brcblkyend - tlcblkystart) >> cblkheightexpn;
+
+                        opj_free(prc->cblks.enc);
+                        prc->cblks.enc = (opj_tcd_cblk_enc_t*) opj_calloc(prc->cw * prc->ch,
+                                         sizeof(opj_tcd_cblk_enc_t));
+
+                        if (prc->incltree != NULL) {
+                            tgt_destroy(prc->incltree);
+                        }
+                        if (prc->imsbtree != NULL) {
+                            tgt_destroy(prc->imsbtree);
+                        }
+
+                        prc->incltree = tgt_create(prc->cw, prc->ch);
+                        prc->imsbtree = tgt_create(prc->cw, prc->ch);
+
+                        for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
+                            int cblkxstart = tlcblkxstart + (cblkno % prc->cw) * (1 << cblkwidthexpn);
+                            int cblkystart = tlcblkystart + (cblkno / prc->cw) * (1 << cblkheightexpn);
+                            int cblkxend = cblkxstart + (1 << cblkwidthexpn);
+                            int cblkyend = cblkystart + (1 << cblkheightexpn);
+
+                            opj_tcd_cblk_enc_t* cblk = &prc->cblks.enc[cblkno];
+
+                            /* code-block size (global) */
+                            cblk->x0 = int_max(cblkxstart, prc->x0);
+                            cblk->y0 = int_max(cblkystart, prc->y0);
+                            cblk->x1 = int_min(cblkxend, prc->x1);
+                            cblk->y1 = int_min(cblkyend, prc->y1);
+                            cblk->data = (unsigned char*) opj_calloc(8192 + 2, sizeof(unsigned char));
+                            /* FIXME: mqc_init_enc and mqc_byteout underrun the buffer if we don't do this. Why? */
+                            cblk->data[0] = 0;
+                            cblk->data[1] = 0;
+                            cblk->data += 2;
+                            cblk->layers = (opj_tcd_layer_t*) opj_calloc(100, sizeof(opj_tcd_layer_t));
+                            cblk->passes = (opj_tcd_pass_t*) opj_calloc(100, sizeof(opj_tcd_pass_t));
+                        }
+                    } /* precno */
+                } /* bandno */
+            } /* resno */
+        } /* compno */
+    } /* tileno */
+
+    /* tcd_dump(stdout, tcd, &tcd->tcd_image); */
 }
 
-void tcd_malloc_decode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp) {
-       int i, j, tileno, p, q;
-       unsigned int x0 = 0, y0 = 0, x1 = 0, y1 = 0, w, h;
-
-       tcd->image = image;
-       tcd->tcd_image->tw = cp->tw;
-       tcd->tcd_image->th = cp->th;
-    tcd->tcd_image->tiles = (opj_tcd_tile_t *) opj_calloc(cp->tw * cp->th, sizeof(opj_tcd_tile_t));
-
-       /* 
-       Allocate place to store the decoded data = final image
-       Place limited by the tile really present in the codestream 
-       */
-
-       for (j = 0; j < cp->tileno_size; j++) {
-               opj_tcd_tile_t *tile;
-               
-               tileno = cp->tileno[j];         
-               tile = &(tcd->tcd_image->tiles[cp->tileno[tileno]]);            
-               tile->numcomps = image->numcomps;
-               tile->comps = (opj_tcd_tilecomp_t*) opj_calloc(image->numcomps, sizeof(opj_tcd_tilecomp_t));
-       }
-
-       for (i = 0; i < image->numcomps; i++) {
-               for (j = 0; j < cp->tileno_size; j++) {
-                       opj_tcd_tile_t *tile;
-                       opj_tcd_tilecomp_t *tilec;
-                       
-                       /* cfr p59 ISO/IEC FDIS15444-1 : 2000 (18 august 2000) */
-                       
-                       tileno = cp->tileno[j];
-                       
-                       tile = &(tcd->tcd_image->tiles[cp->tileno[tileno]]);
-                       tilec = &tile->comps[i];
-                       
-                       p = tileno % cp->tw;    /* si numerotation matricielle .. */
-                       q = tileno / cp->tw;    /* .. coordonnees de la tile (q,p) q pour ligne et p pour colonne */
-                       
-                       /* 4 borders of the tile rescale on the image if necessary */
-                       tile->x0 = int_max(cp->tx0 + p * cp->tdx, image->x0);
-                       tile->y0 = int_max(cp->ty0 + q * cp->tdy, image->y0);
-                       tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1);
-                       tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1);
-
-                       tilec->x0 = int_ceildiv(tile->x0, image->comps[i].dx);
-                       tilec->y0 = int_ceildiv(tile->y0, image->comps[i].dy);
-                       tilec->x1 = int_ceildiv(tile->x1, image->comps[i].dx);
-                       tilec->y1 = int_ceildiv(tile->y1, image->comps[i].dy);
-
-                       x0 = j == 0 ? tilec->x0 : int_min(x0, (unsigned int) tilec->x0);
-                       y0 = j == 0 ? tilec->y0 : int_min(y0,   (unsigned int) tilec->y0);
-                       x1 = j == 0 ? tilec->x1 : int_max(x1,   (unsigned int) tilec->x1);
-                       y1 = j == 0 ? tilec->y1 : int_max(y1,   (unsigned int) tilec->y1);
-               }
-
-               w = int_ceildivpow2(x1 - x0, image->comps[i].factor);
-               h = int_ceildivpow2(y1 - y0, image->comps[i].factor);
-
-               image->comps[i].w = w;
-               image->comps[i].h = h;
-               image->comps[i].x0 = x0;
-               image->comps[i].y0 = y0;
-       }
+void tcd_malloc_decode(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp)
+{
+    int i, j, tileno, p, q;
+    unsigned int x0 = 0, y0 = 0, x1 = 0, y1 = 0, w, h;
+
+    tcd->image = image;
+    tcd->tcd_image->tw = cp->tw;
+    tcd->tcd_image->th = cp->th;
+    tcd->tcd_image->tiles = (opj_tcd_tile_t *) opj_calloc(cp->tw * cp->th,
+                            sizeof(opj_tcd_tile_t));
+
+    /*
+    Allocate place to store the decoded data = final image
+    Place limited by the tile really present in the codestream
+    */
+
+    for (j = 0; j < cp->tileno_size; j++) {
+        opj_tcd_tile_t *tile;
+
+        tileno = cp->tileno[j];
+        tile = &(tcd->tcd_image->tiles[cp->tileno[tileno]]);
+        tile->numcomps = image->numcomps;
+        tile->comps = (opj_tcd_tilecomp_t*) opj_calloc(image->numcomps,
+                      sizeof(opj_tcd_tilecomp_t));
+    }
+
+    for (i = 0; i < image->numcomps; i++) {
+        for (j = 0; j < cp->tileno_size; j++) {
+            opj_tcd_tile_t *tile;
+            opj_tcd_tilecomp_t *tilec;
+
+            /* cfr p59 ISO/IEC FDIS15444-1 : 2000 (18 august 2000) */
+
+            tileno = cp->tileno[j];
+
+            tile = &(tcd->tcd_image->tiles[cp->tileno[tileno]]);
+            tilec = &tile->comps[i];
+
+            p = tileno % cp->tw;    /* si numerotation matricielle .. */
+            q = tileno /
+                cp->tw;    /* .. coordonnees de la tile (q,p) q pour ligne et p pour colonne */
+
+            /* 4 borders of the tile rescale on the image if necessary */
+            tile->x0 = int_max(cp->tx0 + p * cp->tdx, image->x0);
+            tile->y0 = int_max(cp->ty0 + q * cp->tdy, image->y0);
+            tile->x1 = int_min(cp->tx0 + (p + 1) * cp->tdx, image->x1);
+            tile->y1 = int_min(cp->ty0 + (q + 1) * cp->tdy, image->y1);
+
+            tilec->x0 = int_ceildiv(tile->x0, image->comps[i].dx);
+            tilec->y0 = int_ceildiv(tile->y0, image->comps[i].dy);
+            tilec->x1 = int_ceildiv(tile->x1, image->comps[i].dx);
+            tilec->y1 = int_ceildiv(tile->y1, image->comps[i].dy);
+
+            x0 = j == 0 ? tilec->x0 : int_min(x0, (unsigned int) tilec->x0);
+            y0 = j == 0 ? tilec->y0 : int_min(y0, (unsigned int) tilec->y0);
+            x1 = j == 0 ? tilec->x1 : int_max(x1, (unsigned int) tilec->x1);
+            y1 = j == 0 ? tilec->y1 : int_max(y1, (unsigned int) tilec->y1);
+        }
+
+        w = int_ceildivpow2(x1 - x0, image->comps[i].factor);
+        h = int_ceildivpow2(y1 - y0, image->comps[i].factor);
+
+        image->comps[i].w = w;
+        image->comps[i].h = h;
+        image->comps[i].x0 = x0;
+        image->comps[i].y0 = y0;
+    }
 }
 
-void tcd_malloc_decode_tile(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp, int tileno, opj_codestream_info_t *cstr_info) {
-       int compno, resno, bandno, precno, cblkno;
-       opj_tcp_t *tcp;
-       opj_tcd_tile_t *tile;
-
-       OPJ_ARG_NOT_USED(cstr_info);
-
-       tcd->cp = cp;
-       
-       tcp = &(cp->tcps[cp->tileno[tileno]]);
-       tile = &(tcd->tcd_image->tiles[cp->tileno[tileno]]);
-       
-       tileno = cp->tileno[tileno];
-       
-       for (compno = 0; compno < tile->numcomps; compno++) {
-               opj_tccp_t *tccp = &tcp->tccps[compno];
-               opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-               
-               if (tccp->numresolutions <= 0)
-               {
-                       cp->tileno[tileno] = -1;
-                       return;
-               }
-
-               /* border of each tile component (global) */
-               tilec->x0 = int_ceildiv(tile->x0, image->comps[compno].dx);
-               tilec->y0 = int_ceildiv(tile->y0, image->comps[compno].dy);
-               tilec->x1 = int_ceildiv(tile->x1, image->comps[compno].dx);
-               tilec->y1 = int_ceildiv(tile->y1, image->comps[compno].dy);
-
-               tilec->numresolutions = tccp->numresolutions;
-               tilec->resolutions = (opj_tcd_resolution_t *) opj_malloc(tilec->numresolutions * sizeof(opj_tcd_resolution_t));
-               
-               for (resno = 0; resno < tilec->numresolutions; resno++) {
-                       int pdx, pdy;
-                       int levelno = tilec->numresolutions - 1 - resno;
-                       int tlprcxstart, tlprcystart, brprcxend, brprcyend;
-                       int tlcbgxstart, tlcbgystart, brcbgxend, brcbgyend;
-                       int cbgwidthexpn, cbgheightexpn;
-                       int cblkwidthexpn, cblkheightexpn;
-                       
-                       opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-                       
-                       /* border for each resolution level (global) */
-                       res->x0 = int_ceildivpow2(tilec->x0, levelno);
-                       res->y0 = int_ceildivpow2(tilec->y0, levelno);
-                       res->x1 = int_ceildivpow2(tilec->x1, levelno);
-                       res->y1 = int_ceildivpow2(tilec->y1, levelno);
-                       res->numbands = resno == 0 ? 1 : 3;
-                       
-                       /* p. 35, table A-23, ISO/IEC FDIS154444-1 : 2000 (18 august 2000) */
-                       if (tccp->csty & J2K_CCP_CSTY_PRT) {
-                               pdx = tccp->prcw[resno];
-                               pdy = tccp->prch[resno];
-                       } else {
-                               pdx = 15;
-                               pdy = 15;
-                       }                       
-                       
-                       /* p. 64, B.6, ISO/IEC FDIS15444-1 : 2000 (18 august 2000)  */
-                       tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx;
-                       tlprcystart = int_floordivpow2(res->y0, pdy) << pdy;
-                       brprcxend = int_ceildivpow2(res->x1, pdx) << pdx;
-                       brprcyend = int_ceildivpow2(res->y1, pdy) << pdy;
-                       
-                       res->pw = (res->x0 == res->x1) ? 0 : ((brprcxend - tlprcxstart) >> pdx);
-                       res->ph = (res->y0 == res->y1) ? 0 : ((brprcyend - tlprcystart) >> pdy);
-                       
-                       if (resno == 0) {
-                               tlcbgxstart = tlprcxstart;
-                               tlcbgystart = tlprcystart;
-                               brcbgxend = brprcxend;
-                               brcbgyend = brprcyend;
-                               cbgwidthexpn = pdx;
-                               cbgheightexpn = pdy;
-                       } else {
-                               tlcbgxstart = int_ceildivpow2(tlprcxstart, 1);
-                               tlcbgystart = int_ceildivpow2(tlprcystart, 1);
-                               brcbgxend = int_ceildivpow2(brprcxend, 1);
-                               brcbgyend = int_ceildivpow2(brprcyend, 1);
-                               cbgwidthexpn = pdx - 1;
-                               cbgheightexpn = pdy - 1;
-                       }
-                       
-                       cblkwidthexpn = int_min(tccp->cblkw, cbgwidthexpn);
-                       cblkheightexpn = int_min(tccp->cblkh, cbgheightexpn);
-                       
-                       for (bandno = 0; bandno < res->numbands; bandno++) {
-                               int x0b, y0b;
-                               int gain, numbps;
-                               opj_stepsize_t *ss = NULL;
-                               
-                               opj_tcd_band_t *band = &res->bands[bandno];
-                               band->bandno = resno == 0 ? 0 : bandno + 1;
-                               x0b = (band->bandno == 1) || (band->bandno == 3) ? 1 : 0;
-                               y0b = (band->bandno == 2) || (band->bandno == 3) ? 1 : 0;
-                               
-                               if (band->bandno == 0) {
-                                       /* band border (global) */
-                                       band->x0 = int_ceildivpow2(tilec->x0, levelno);
-                                       band->y0 = int_ceildivpow2(tilec->y0, levelno);
-                                       band->x1 = int_ceildivpow2(tilec->x1, levelno);
-                                       band->y1 = int_ceildivpow2(tilec->y1, levelno);
-                               } else {
-                                       /* band border (global) */
-                                       band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelno) * x0b, levelno + 1);
-                                       band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelno) * y0b, levelno + 1);
-                                       band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelno) * x0b, levelno + 1);
-                                       band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelno) * y0b, levelno + 1);
-                               }
-                               
-                               ss = &tccp->stepsizes[resno == 0 ? 0 : 3 * (resno - 1) + bandno + 1];
-                               gain = tccp->qmfbid == 0 ? dwt_getgain_real(band->bandno) : dwt_getgain(band->bandno);
-                               numbps = image->comps[compno].prec + gain;
-                               band->stepsize = (float)(((1.0 + ss->mant / 2048.0) * pow(2.0, numbps - ss->expn)) * 0.5);
-                               band->numbps = ss->expn + tccp->numgbits - 1;   /* WHY -1 ? */
-                               
-                               band->precincts = (opj_tcd_precinct_t *) opj_malloc(res->pw * res->ph * sizeof(opj_tcd_precinct_t));
-                               
-                               for (precno = 0; precno < res->pw * res->ph; precno++) {
-                                       int tlcblkxstart, tlcblkystart, brcblkxend, brcblkyend;
-                                       int cbgxstart = tlcbgxstart + (precno % res->pw) * (1 << cbgwidthexpn);
-                                       int cbgystart = tlcbgystart + (precno / res->pw) * (1 << cbgheightexpn);
-                                       int cbgxend = cbgxstart + (1 << cbgwidthexpn);
-                                       int cbgyend = cbgystart + (1 << cbgheightexpn);
-                                       
-                                       opj_tcd_precinct_t *prc = &band->precincts[precno];
-                                       /* precinct size (global) */
-                                       prc->x0 = int_max(cbgxstart, band->x0);
-                                       prc->y0 = int_max(cbgystart, band->y0);
-                                       prc->x1 = int_min(cbgxend, band->x1);
-                                       prc->y1 = int_min(cbgyend, band->y1);
-                                       
-                                       tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn;
-                                       tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn;
-                                       brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn;
-                                       brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn;
-                                       prc->cw = (brcblkxend - tlcblkxstart) >> cblkwidthexpn;
-                                       prc->ch = (brcblkyend - tlcblkystart) >> cblkheightexpn;
-
-                                       prc->cblks.dec = (opj_tcd_cblk_dec_t*) opj_malloc(prc->cw * prc->ch * sizeof(opj_tcd_cblk_dec_t));
-
-                                       prc->incltree = tgt_create(prc->cw, prc->ch);
-                                       prc->imsbtree = tgt_create(prc->cw, prc->ch);
-                                       
-                                       for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                                               int cblkxstart = tlcblkxstart + (cblkno % prc->cw) * (1 << cblkwidthexpn);
-                                               int cblkystart = tlcblkystart + (cblkno / prc->cw) * (1 << cblkheightexpn);
-                                               int cblkxend = cblkxstart + (1 << cblkwidthexpn);
-                                               int cblkyend = cblkystart + (1 << cblkheightexpn);                                      
-
-                                               opj_tcd_cblk_dec_t* cblk = &prc->cblks.dec[cblkno];
-                                               cblk->data = NULL;
-                                               cblk->segs = NULL;
-                                               /* code-block size (global) */
-                                               cblk->x0 = int_max(cblkxstart, prc->x0);
-                                               cblk->y0 = int_max(cblkystart, prc->y0);
-                                               cblk->x1 = int_min(cblkxend, prc->x1);
-                                               cblk->y1 = int_min(cblkyend, prc->y1);
-                                               cblk->numsegs = 0;
-                                       }
-                               } /* precno */
-                       } /* bandno */
-               } /* resno */
-       } /* compno */
-       /* tcd_dump(stdout, tcd, &tcd->tcd_image); */
+void tcd_malloc_decode_tile(opj_tcd_t *tcd, opj_image_t * image, opj_cp_t * cp,
+                            int tileno, opj_codestream_info_t *cstr_info)
+{
+    int compno, resno, bandno, precno, cblkno;
+    opj_tcp_t *tcp;
+    opj_tcd_tile_t *tile;
+
+    OPJ_ARG_NOT_USED(cstr_info);
+
+    tcd->cp = cp;
+
+    tcp = &(cp->tcps[cp->tileno[tileno]]);
+    tile = &(tcd->tcd_image->tiles[cp->tileno[tileno]]);
+
+    tileno = cp->tileno[tileno];
+
+    for (compno = 0; compno < tile->numcomps; compno++) {
+        opj_tccp_t *tccp = &tcp->tccps[compno];
+        opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+
+        if (tccp->numresolutions <= 0) {
+            cp->tileno[tileno] = -1;
+            return;
+        }
+
+        /* border of each tile component (global) */
+        tilec->x0 = int_ceildiv(tile->x0, image->comps[compno].dx);
+        tilec->y0 = int_ceildiv(tile->y0, image->comps[compno].dy);
+        tilec->x1 = int_ceildiv(tile->x1, image->comps[compno].dx);
+        tilec->y1 = int_ceildiv(tile->y1, image->comps[compno].dy);
+
+        tilec->numresolutions = tccp->numresolutions;
+        tilec->resolutions = (opj_tcd_resolution_t *) opj_malloc(
+                                 tilec->numresolutions * sizeof(opj_tcd_resolution_t));
+
+        for (resno = 0; resno < tilec->numresolutions; resno++) {
+            int pdx, pdy;
+            int levelno = tilec->numresolutions - 1 - resno;
+            int tlprcxstart, tlprcystart, brprcxend, brprcyend;
+            int tlcbgxstart, tlcbgystart, brcbgxend, brcbgyend;
+            int cbgwidthexpn, cbgheightexpn;
+            int cblkwidthexpn, cblkheightexpn;
+
+            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+
+            /* border for each resolution level (global) */
+            res->x0 = int_ceildivpow2(tilec->x0, levelno);
+            res->y0 = int_ceildivpow2(tilec->y0, levelno);
+            res->x1 = int_ceildivpow2(tilec->x1, levelno);
+            res->y1 = int_ceildivpow2(tilec->y1, levelno);
+            res->numbands = resno == 0 ? 1 : 3;
+
+            /* p. 35, table A-23, ISO/IEC FDIS154444-1 : 2000 (18 august 2000) */
+            if (tccp->csty & J2K_CCP_CSTY_PRT) {
+                pdx = tccp->prcw[resno];
+                pdy = tccp->prch[resno];
+            } else {
+                pdx = 15;
+                pdy = 15;
+            }
+
+            /* p. 64, B.6, ISO/IEC FDIS15444-1 : 2000 (18 august 2000)  */
+            tlprcxstart = int_floordivpow2(res->x0, pdx) << pdx;
+            tlprcystart = int_floordivpow2(res->y0, pdy) << pdy;
+            brprcxend = int_ceildivpow2(res->x1, pdx) << pdx;
+            brprcyend = int_ceildivpow2(res->y1, pdy) << pdy;
+
+            res->pw = (res->x0 == res->x1) ? 0 : ((brprcxend - tlprcxstart) >> pdx);
+            res->ph = (res->y0 == res->y1) ? 0 : ((brprcyend - tlprcystart) >> pdy);
+
+            if (resno == 0) {
+                tlcbgxstart = tlprcxstart;
+                tlcbgystart = tlprcystart;
+                brcbgxend = brprcxend;
+                brcbgyend = brprcyend;
+                cbgwidthexpn = pdx;
+                cbgheightexpn = pdy;
+            } else {
+                tlcbgxstart = int_ceildivpow2(tlprcxstart, 1);
+                tlcbgystart = int_ceildivpow2(tlprcystart, 1);
+                brcbgxend = int_ceildivpow2(brprcxend, 1);
+                brcbgyend = int_ceildivpow2(brprcyend, 1);
+                cbgwidthexpn = pdx - 1;
+                cbgheightexpn = pdy - 1;
+            }
+
+            cblkwidthexpn = int_min(tccp->cblkw, cbgwidthexpn);
+            cblkheightexpn = int_min(tccp->cblkh, cbgheightexpn);
+
+            for (bandno = 0; bandno < res->numbands; bandno++) {
+                int x0b, y0b;
+                int gain, numbps;
+                opj_stepsize_t *ss = NULL;
+
+                opj_tcd_band_t *band = &res->bands[bandno];
+                band->bandno = resno == 0 ? 0 : bandno + 1;
+                x0b = (band->bandno == 1) || (band->bandno == 3) ? 1 : 0;
+                y0b = (band->bandno == 2) || (band->bandno == 3) ? 1 : 0;
+
+                if (band->bandno == 0) {
+                    /* band border (global) */
+                    band->x0 = int_ceildivpow2(tilec->x0, levelno);
+                    band->y0 = int_ceildivpow2(tilec->y0, levelno);
+                    band->x1 = int_ceildivpow2(tilec->x1, levelno);
+                    band->y1 = int_ceildivpow2(tilec->y1, levelno);
+                } else {
+                    /* band border (global) */
+                    band->x0 = int_ceildivpow2(tilec->x0 - (1 << levelno) * x0b, levelno + 1);
+                    band->y0 = int_ceildivpow2(tilec->y0 - (1 << levelno) * y0b, levelno + 1);
+                    band->x1 = int_ceildivpow2(tilec->x1 - (1 << levelno) * x0b, levelno + 1);
+                    band->y1 = int_ceildivpow2(tilec->y1 - (1 << levelno) * y0b, levelno + 1);
+                }
+
+                ss = &tccp->stepsizes[resno == 0 ? 0 : 3 * (resno - 1) + bandno + 1];
+                gain = tccp->qmfbid == 0 ? dwt_getgain_real(band->bandno) : dwt_getgain(
+                           band->bandno);
+                numbps = image->comps[compno].prec + gain;
+                band->stepsize = (float)(((1.0 + ss->mant / 2048.0) * pow(2.0,
+                                          numbps - ss->expn)) * 0.5);
+                band->numbps = ss->expn + tccp->numgbits - 1;   /* WHY -1 ? */
+
+                band->precincts = (opj_tcd_precinct_t *) opj_malloc(res->pw * res->ph * sizeof(
+                                      opj_tcd_precinct_t));
+
+                for (precno = 0; precno < res->pw * res->ph; precno++) {
+                    int tlcblkxstart, tlcblkystart, brcblkxend, brcblkyend;
+                    int cbgxstart = tlcbgxstart + (precno % res->pw) * (1 << cbgwidthexpn);
+                    int cbgystart = tlcbgystart + (precno / res->pw) * (1 << cbgheightexpn);
+                    int cbgxend = cbgxstart + (1 << cbgwidthexpn);
+                    int cbgyend = cbgystart + (1 << cbgheightexpn);
+
+                    opj_tcd_precinct_t *prc = &band->precincts[precno];
+                    /* precinct size (global) */
+                    prc->x0 = int_max(cbgxstart, band->x0);
+                    prc->y0 = int_max(cbgystart, band->y0);
+                    prc->x1 = int_min(cbgxend, band->x1);
+                    prc->y1 = int_min(cbgyend, band->y1);
+
+                    tlcblkxstart = int_floordivpow2(prc->x0, cblkwidthexpn) << cblkwidthexpn;
+                    tlcblkystart = int_floordivpow2(prc->y0, cblkheightexpn) << cblkheightexpn;
+                    brcblkxend = int_ceildivpow2(prc->x1, cblkwidthexpn) << cblkwidthexpn;
+                    brcblkyend = int_ceildivpow2(prc->y1, cblkheightexpn) << cblkheightexpn;
+                    prc->cw = (brcblkxend - tlcblkxstart) >> cblkwidthexpn;
+                    prc->ch = (brcblkyend - tlcblkystart) >> cblkheightexpn;
+
+                    prc->cblks.dec = (opj_tcd_cblk_dec_t*) opj_malloc(prc->cw * prc->ch * sizeof(
+                                         opj_tcd_cblk_dec_t));
+
+                    prc->incltree = tgt_create(prc->cw, prc->ch);
+                    prc->imsbtree = tgt_create(prc->cw, prc->ch);
+
+                    for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
+                        int cblkxstart = tlcblkxstart + (cblkno % prc->cw) * (1 << cblkwidthexpn);
+                        int cblkystart = tlcblkystart + (cblkno / prc->cw) * (1 << cblkheightexpn);
+                        int cblkxend = cblkxstart + (1 << cblkwidthexpn);
+                        int cblkyend = cblkystart + (1 << cblkheightexpn);
+
+                        opj_tcd_cblk_dec_t* cblk = &prc->cblks.dec[cblkno];
+                        cblk->data = NULL;
+                        cblk->segs = NULL;
+                        /* code-block size (global) */
+                        cblk->x0 = int_max(cblkxstart, prc->x0);
+                        cblk->y0 = int_max(cblkystart, prc->y0);
+                        cblk->x1 = int_min(cblkxend, prc->x1);
+                        cblk->y1 = int_min(cblkyend, prc->y1);
+                        cblk->numsegs = 0;
+                    }
+                } /* precno */
+            } /* bandno */
+        } /* resno */
+    } /* compno */
+    /* tcd_dump(stdout, tcd, &tcd->tcd_image); */
 }
 
-void tcd_makelayer_fixed(opj_tcd_t *tcd, int layno, int final) {
-       int compno, resno, bandno, precno, cblkno;
-       int value;                      /*, matrice[tcd_tcp->numlayers][tcd_tile->comps[0].numresolutions][3]; */
-       int matrice[10][10][3];
-       int i, j, k;
-
-       opj_cp_t *cp = tcd->cp;
-       opj_tcd_tile_t *tcd_tile = tcd->tcd_tile;
-       opj_tcp_t *tcd_tcp = tcd->tcp;
-
-       /*matrice=(int*)opj_malloc(tcd_tcp->numlayers*tcd_tile->comps[0].numresolutions*3*sizeof(int)); */
-       
-       for (compno = 0; compno < tcd_tile->numcomps; compno++) {
-               opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
-               for (i = 0; i < tcd_tcp->numlayers; i++) {
-                       for (j = 0; j < tilec->numresolutions; j++) {
-                               for (k = 0; k < 3; k++) {
-                                       matrice[i][j][k] =
-                                               (int) (cp->matrice[i * tilec->numresolutions * 3 + j * 3 + k] 
-                                               * (float) (tcd->image->comps[compno].prec / 16.0));
-                               }
-                       }
-               }
-        
-               for (resno = 0; resno < tilec->numresolutions; resno++) {
-                       opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-                       for (bandno = 0; bandno < res->numbands; bandno++) {
-                               opj_tcd_band_t *band = &res->bands[bandno];
-                               for (precno = 0; precno < res->pw * res->ph; precno++) {
-                                       opj_tcd_precinct_t *prc = &band->precincts[precno];
-                                       for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                                               opj_tcd_cblk_enc_t *cblk = &prc->cblks.enc[cblkno];
-                                               opj_tcd_layer_t *layer = &cblk->layers[layno];
-                                               int n;
-                                               int imsb = tcd->image->comps[compno].prec - cblk->numbps;       /* number of bit-plan equal to zero */
-                                               /* Correction of the matrix of coefficient to include the IMSB information */
-                                               if (layno == 0) {
-                                                       value = matrice[layno][resno][bandno];
-                                                       if (imsb >= value) {
-                                                               value = 0;
-                                                       } else {
-                                                               value -= imsb;
-                                                       }
-                                               } else {
-                                                       value = matrice[layno][resno][bandno] - matrice[layno - 1][resno][bandno];
-                                                       if (imsb >= matrice[layno - 1][resno][bandno]) {
-                                                               value -= (imsb - matrice[layno - 1][resno][bandno]);
-                                                               if (value < 0) {
-                                                                       value = 0;
-                                                               }
-                                                       }
-                                               }
-                                               
-                                               if (layno == 0) {
-                                                       cblk->numpassesinlayers = 0;
-                                               }
-                                               
-                                               n = cblk->numpassesinlayers;
-                                               if (cblk->numpassesinlayers == 0) {
-                                                       if (value != 0) {
-                                                               n = 3 * value - 2 + cblk->numpassesinlayers;
-                                                       } else {
-                                                               n = cblk->numpassesinlayers;
-                                                       }
-                                               } else {
-                                                       n = 3 * value + cblk->numpassesinlayers;
-                                               }
-                                               
-                                               layer->numpasses = n - cblk->numpassesinlayers;
-                                               
-                                               if (!layer->numpasses)
-                                                       continue;
-                                               
-                                               if (cblk->numpassesinlayers == 0) {
-                                                       layer->len = cblk->passes[n - 1].rate;
-                                                       layer->data = cblk->data;
-                                               } else {
-                                                       layer->len = cblk->passes[n - 1].rate - cblk->passes[cblk->numpassesinlayers - 1].rate;
-                                                       layer->data = cblk->data + cblk->passes[cblk->numpassesinlayers - 1].rate;
-                                               }
-                                               if (final)
-                                                       cblk->numpassesinlayers = n;
-                                       }
-                               }
-                       }
-               }
-       }
+void tcd_makelayer_fixed(opj_tcd_t *tcd, int layno, int final)
+{
+    int compno, resno, bandno, precno, cblkno;
+    int value;          /*, matrice[tcd_tcp->numlayers][tcd_tile->comps[0].numresolutions][3]; */
+    int matrice[10][10][3];
+    int i, j, k;
+
+    opj_cp_t *cp = tcd->cp;
+    opj_tcd_tile_t *tcd_tile = tcd->tcd_tile;
+    opj_tcp_t *tcd_tcp = tcd->tcp;
+
+    /*matrice=(int*)opj_malloc(tcd_tcp->numlayers*tcd_tile->comps[0].numresolutions*3*sizeof(int)); */
+
+    for (compno = 0; compno < tcd_tile->numcomps; compno++) {
+        opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
+        for (i = 0; i < tcd_tcp->numlayers; i++) {
+            for (j = 0; j < tilec->numresolutions; j++) {
+                for (k = 0; k < 3; k++) {
+                    matrice[i][j][k] =
+                        (int)(cp->matrice[i * tilec->numresolutions * 3 + j * 3 + k]
+                              * (float)(tcd->image->comps[compno].prec / 16.0));
+                }
+            }
+        }
+
+        for (resno = 0; resno < tilec->numresolutions; resno++) {
+            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+            for (bandno = 0; bandno < res->numbands; bandno++) {
+                opj_tcd_band_t *band = &res->bands[bandno];
+                for (precno = 0; precno < res->pw * res->ph; precno++) {
+                    opj_tcd_precinct_t *prc = &band->precincts[precno];
+                    for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
+                        opj_tcd_cblk_enc_t *cblk = &prc->cblks.enc[cblkno];
+                        opj_tcd_layer_t *layer = &cblk->layers[layno];
+                        int n;
+                        int imsb = tcd->image->comps[compno].prec -
+                                   cblk->numbps;   /* number of bit-plan equal to zero */
+                        /* Correction of the matrix of coefficient to include the IMSB information */
+                        if (layno == 0) {
+                            value = matrice[layno][resno][bandno];
+                            if (imsb >= value) {
+                                value = 0;
+                            } else {
+                                value -= imsb;
+                            }
+                        } else {
+                            value = matrice[layno][resno][bandno] - matrice[layno - 1][resno][bandno];
+                            if (imsb >= matrice[layno - 1][resno][bandno]) {
+                                value -= (imsb - matrice[layno - 1][resno][bandno]);
+                                if (value < 0) {
+                                    value = 0;
+                                }
+                            }
+                        }
+
+                        if (layno == 0) {
+                            cblk->numpassesinlayers = 0;
+                        }
+
+                        n = cblk->numpassesinlayers;
+                        if (cblk->numpassesinlayers == 0) {
+                            if (value != 0) {
+                                n = 3 * value - 2 + cblk->numpassesinlayers;
+                            } else {
+                                n = cblk->numpassesinlayers;
+                            }
+                        } else {
+                            n = 3 * value + cblk->numpassesinlayers;
+                        }
+
+                        layer->numpasses = n - cblk->numpassesinlayers;
+
+                        if (!layer->numpasses) {
+                            continue;
+                        }
+
+                        if (cblk->numpassesinlayers == 0) {
+                            layer->len = cblk->passes[n - 1].rate;
+                            layer->data = cblk->data;
+                        } else {
+                            layer->len = cblk->passes[n - 1].rate - cblk->passes[cblk->numpassesinlayers -
+                                         1].rate;
+                            layer->data = cblk->data + cblk->passes[cblk->numpassesinlayers - 1].rate;
+                        }
+                        if (final) {
+                            cblk->numpassesinlayers = n;
+                        }
+                    }
+                }
+            }
+        }
+    }
 }
 
-void tcd_rateallocate_fixed(opj_tcd_t *tcd) {
-       int layno;
-       for (layno = 0; layno < tcd->tcp->numlayers; layno++) {
-               tcd_makelayer_fixed(tcd, layno, 1);
-       }
+void tcd_rateallocate_fixed(opj_tcd_t *tcd)
+{
+    int layno;
+    for (layno = 0; layno < tcd->tcp->numlayers; layno++) {
+        tcd_makelayer_fixed(tcd, layno, 1);
+    }
 }
 
-void tcd_makelayer(opj_tcd_t *tcd, int layno, double thresh, int final) {
-       int compno, resno, bandno, precno, cblkno, passno;
-       
-       opj_tcd_tile_t *tcd_tile = tcd->tcd_tile;
-
-       tcd_tile->distolayer[layno] = 0;        /* fixed_quality */
-       
-       for (compno = 0; compno < tcd_tile->numcomps; compno++) {
-               opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
-               for (resno = 0; resno < tilec->numresolutions; resno++) {
-                       opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-                       for (bandno = 0; bandno < res->numbands; bandno++) {
-                               opj_tcd_band_t *band = &res->bands[bandno];
-                               for (precno = 0; precno < res->pw * res->ph; precno++) {
-                                       opj_tcd_precinct_t *prc = &band->precincts[precno];
-                                       for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                                               opj_tcd_cblk_enc_t *cblk = &prc->cblks.enc[cblkno];
-                                               opj_tcd_layer_t *layer = &cblk->layers[layno];
-                                               
-                                               int n;
-                                               if (layno == 0) {
-                                                       cblk->numpassesinlayers = 0;
-                                               }
-                                               n = cblk->numpassesinlayers;
-                                               for (passno = cblk->numpassesinlayers; passno < cblk->totalpasses; passno++) {
-                                                       int dr;
-                                                       double dd;
-                                                       opj_tcd_pass_t *pass = &cblk->passes[passno];
-                                                       if (n == 0) {
-                                                               dr = pass->rate;
-                                                               dd = pass->distortiondec;
-                                                       } else {
-                                                               dr = pass->rate - cblk->passes[n - 1].rate;
-                                                               dd = pass->distortiondec - cblk->passes[n - 1].distortiondec;
-                                                       }
-                                                       if (!dr) {
-                                                               if (dd != 0)
-                                                                       n = passno + 1;
-                                                               continue;
-                                                       }
-                                                       if (dd / dr >= thresh)
-                                                               n = passno + 1;
-                                               }
-                                               layer->numpasses = n - cblk->numpassesinlayers;
-                                               
-                                               if (!layer->numpasses) {
-                                                       layer->disto = 0;
-                                                       continue;
-                                               }
-                                               if (cblk->numpassesinlayers == 0) {
-                                                       layer->len = cblk->passes[n - 1].rate;
-                                                       layer->data = cblk->data;
-                                                       layer->disto = cblk->passes[n - 1].distortiondec;
-                                               } else {
-                                                       layer->len = cblk->passes[n - 1].rate - cblk->passes[cblk->numpassesinlayers - 1].rate;
-                                                       layer->data = cblk->data + cblk->passes[cblk->numpassesinlayers - 1].rate;
-                                                       layer->disto = cblk->passes[n - 1].distortiondec - cblk->passes[cblk->numpassesinlayers - 1].distortiondec;
-                                               }
-                                               
-                                               tcd_tile->distolayer[layno] += layer->disto;    /* fixed_quality */
-                                               
-                                               if (final)
-                                                       cblk->numpassesinlayers = n;
-                                       }
-                               }
-                       }
-               }
-       }
+void tcd_makelayer(opj_tcd_t *tcd, int layno, double thresh, int final)
+{
+    int compno, resno, bandno, precno, cblkno, passno;
+
+    opj_tcd_tile_t *tcd_tile = tcd->tcd_tile;
+
+    tcd_tile->distolayer[layno] = 0;    /* fixed_quality */
+
+    for (compno = 0; compno < tcd_tile->numcomps; compno++) {
+        opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
+        for (resno = 0; resno < tilec->numresolutions; resno++) {
+            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+            for (bandno = 0; bandno < res->numbands; bandno++) {
+                opj_tcd_band_t *band = &res->bands[bandno];
+                for (precno = 0; precno < res->pw * res->ph; precno++) {
+                    opj_tcd_precinct_t *prc = &band->precincts[precno];
+                    for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
+                        opj_tcd_cblk_enc_t *cblk = &prc->cblks.enc[cblkno];
+                        opj_tcd_layer_t *layer = &cblk->layers[layno];
+
+                        int n;
+                        if (layno == 0) {
+                            cblk->numpassesinlayers = 0;
+                        }
+                        n = cblk->numpassesinlayers;
+                        for (passno = cblk->numpassesinlayers; passno < cblk->totalpasses; passno++) {
+                            int dr;
+                            double dd;
+                            opj_tcd_pass_t *pass = &cblk->passes[passno];
+                            if (n == 0) {
+                                dr = pass->rate;
+                                dd = pass->distortiondec;
+                            } else {
+                                dr = pass->rate - cblk->passes[n - 1].rate;
+                                dd = pass->distortiondec - cblk->passes[n - 1].distortiondec;
+                            }
+                            if (!dr) {
+                                if (dd != 0) {
+                                    n = passno + 1;
+                                }
+                                continue;
+                            }
+                            if (dd / dr >= thresh) {
+                                n = passno + 1;
+                            }
+                        }
+                        layer->numpasses = n - cblk->numpassesinlayers;
+
+                        if (!layer->numpasses) {
+                            layer->disto = 0;
+                            continue;
+                        }
+                        if (cblk->numpassesinlayers == 0) {
+                            layer->len = cblk->passes[n - 1].rate;
+                            layer->data = cblk->data;
+                            layer->disto = cblk->passes[n - 1].distortiondec;
+                        } else {
+                            layer->len = cblk->passes[n - 1].rate - cblk->passes[cblk->numpassesinlayers -
+                                         1].rate;
+                            layer->data = cblk->data + cblk->passes[cblk->numpassesinlayers - 1].rate;
+                            layer->disto = cblk->passes[n - 1].distortiondec -
+                                           cblk->passes[cblk->numpassesinlayers - 1].distortiondec;
+                        }
+
+                        tcd_tile->distolayer[layno] += layer->disto;    /* fixed_quality */
+
+                        if (final) {
+                            cblk->numpassesinlayers = n;
+                        }
+                    }
+                }
+            }
+        }
+    }
 }
 
-opj_bool tcd_rateallocate(opj_tcd_t *tcd, unsigned char *dest, int len, opj_codestream_info_t *cstr_info) {
-       int compno, resno, bandno, precno, cblkno, passno, layno;
-       double min, max;
-       double cumdisto[100];   /* fixed_quality */
-       const double K = 1;             /* 1.1; fixed_quality */
-       double maxSE = 0;
-
-       opj_cp_t *cp = tcd->cp;
-       opj_tcd_tile_t *tcd_tile = tcd->tcd_tile;
-       opj_tcp_t *tcd_tcp = tcd->tcp;
-
-       min = DBL_MAX;
-       max = 0;
-       
-       tcd_tile->numpix = 0;           /* fixed_quality */
-       
-       for (compno = 0; compno < tcd_tile->numcomps; compno++) {
-               opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
-               tilec->numpix = 0;
-
-               for (resno = 0; resno < tilec->numresolutions; resno++) {
-                       opj_tcd_resolution_t *res = &tilec->resolutions[resno];
-
-                       for (bandno = 0; bandno < res->numbands; bandno++) {
-                               opj_tcd_band_t *band = &res->bands[bandno];
-
-                               for (precno = 0; precno < res->pw * res->ph; precno++) {
-                                       opj_tcd_precinct_t *prc = &band->precincts[precno];
-
-                                       for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
-                                               opj_tcd_cblk_enc_t *cblk = &prc->cblks.enc[cblkno];
-
-                                               for (passno = 0; passno < cblk->totalpasses; passno++) {
-                                                       opj_tcd_pass_t *pass = &cblk->passes[passno];
-                                                       int dr;
-                                                       double dd, rdslope;
-                                                       if (passno == 0) {
-                                                               dr = pass->rate;
-                                                               dd = pass->distortiondec;
-                                                       } else {
-                                                               dr = pass->rate - cblk->passes[passno - 1].rate;
-                                                               dd = pass->distortiondec - cblk->passes[passno - 1].distortiondec;
-                                                       }
-                                                       if (dr == 0) {
-                                                               continue;
-                                                       }
-                                                       rdslope = dd / dr;
-                                                       if (rdslope < min) {
-                                                               min = rdslope;
-                                                       }
-                                                       if (rdslope > max) {
-                                                               max = rdslope;
-                                                       }
-                                               } /* passno */
-                                               
-                                               /* fixed_quality */
-                                               tcd_tile->numpix += ((cblk->x1 - cblk->x0) * (cblk->y1 - cblk->y0));
-                                               tilec->numpix += ((cblk->x1 - cblk->x0) * (cblk->y1 - cblk->y0));
-                                       } /* cbklno */
-                               } /* precno */
-                       } /* bandno */
-               } /* resno */
-               
-               maxSE += (((double)(1 << tcd->image->comps[compno].prec) - 1.0) 
-                       * ((double)(1 << tcd->image->comps[compno].prec) -1.0)) 
-                       * ((double)(tilec->numpix));
-       } /* compno */
-       
-       /* index file */
-       if(cstr_info) {
-               opj_tile_info_t *tile_info = &cstr_info->tile[tcd->tcd_tileno];
-               tile_info->numpix = tcd_tile->numpix;
-               tile_info->distotile = tcd_tile->distotile;
-               tile_info->thresh = (double *) opj_malloc(tcd_tcp->numlayers * sizeof(double));
-       }
-       
-       for (layno = 0; layno < tcd_tcp->numlayers; layno++) {
-               double lo = min;
-               double hi = max;
-               int success = 0;
-               int maxlen = tcd_tcp->rates[layno] ? int_min(((int) ceil(tcd_tcp->rates[layno])), len) : len;
-               double goodthresh = 0;
-               double stable_thresh = 0;
-               int i;
-               double distotarget;             /* fixed_quality */
-               
-               /* fixed_quality */
-               distotarget = tcd_tile->distotile - ((K * maxSE) / pow((float)10, tcd_tcp->distoratio[layno] / 10));
-        
-               /* Don't try to find an optimal threshold but rather take everything not included yet, if
-                 -r xx,yy,zz,0   (disto_alloc == 1 and rates == 0)
-                 -q xx,yy,zz,0   (fixed_quality == 1 and distoratio == 0)
-                 ==> possible to have some lossy layers and the last layer for sure lossless */
-               if ( ((cp->disto_alloc==1) && (tcd_tcp->rates[layno]>0)) || ((cp->fixed_quality==1) && (tcd_tcp->distoratio[layno]>0))) {
-                       opj_t2_t *t2 = t2_create(tcd->cinfo, tcd->image, cp);
-                       double thresh = 0;
-
-                       for (i = 0; i < 128; i++) {
-                               int l = 0;
-                               double distoachieved = 0;       /* fixed_quality */
-                               thresh = (lo + hi) / 2;
-                               
-                               tcd_makelayer(tcd, layno, thresh, 0);
-                               
-                               if (cp->fixed_quality) {        /* fixed_quality */
-                                       if(cp->cinema){
-                                               l = t2_encode_packets(t2,tcd->tcd_tileno, tcd_tile, layno + 1, dest, maxlen, cstr_info,tcd->cur_tp_num,tcd->tp_pos,tcd->cur_pino,THRESH_CALC, tcd->cur_totnum_tp);
-                                               if (l == -999) {
-                                                       lo = thresh;
-                                                       continue;
-                                               }else{
-                       distoachieved = layno == 0 ? 
-                                                       tcd_tile->distolayer[0] : cumdisto[layno - 1] + tcd_tile->distolayer[layno];
-                                                       if (distoachieved < distotarget) {
-                                                               hi=thresh; 
-                                                               stable_thresh = thresh;
-                                                               continue;
-                                                       }else{
-                                                               lo=thresh;
-                                                       }
-                                               }
-                                       }else{
-                                               distoachieved = (layno == 0) ? 
-                                                       tcd_tile->distolayer[0] : (cumdisto[layno - 1] + tcd_tile->distolayer[layno]);
-                                               if (distoachieved < distotarget) {
-                                                       hi = thresh;
-                                                       stable_thresh = thresh;
-                                                       continue;
-                                               }
-                                               lo = thresh;
-                                       }
-                               } else {
-                                       l = t2_encode_packets(t2, tcd->tcd_tileno, tcd_tile, layno + 1, dest, maxlen, cstr_info,tcd->cur_tp_num,tcd->tp_pos,tcd->cur_pino,THRESH_CALC, tcd->cur_totnum_tp);
-                                       /* TODO: what to do with l ??? seek / tell ??? */
-                                       /* opj_event_msg(tcd->cinfo, EVT_INFO, "rate alloc: len=%d, max=%d\n", l, maxlen); */
-                                       if (l == -999) {
-                                               lo = thresh;
-                                               continue;
-                                       }
-                                       hi = thresh;
-                                       stable_thresh = thresh;
-                               }
-                       }
-                       success = 1;
-                       goodthresh = stable_thresh == 0? thresh : stable_thresh;
-                       t2_destroy(t2);
-               } else {
-                       success = 1;
-                       goodthresh = min;
-               }
-               
-               if (!success) {
-                       return OPJ_FALSE;
-               }
-               
-               if(cstr_info) { /* Threshold for Marcela Index */
-                       cstr_info->tile[tcd->tcd_tileno].thresh[layno] = goodthresh;
-               }
-               tcd_makelayer(tcd, layno, goodthresh, 1);
-        
-               /* fixed_quality */
-               cumdisto[layno] = (layno == 0) ? tcd_tile->distolayer[0] : (cumdisto[layno - 1] + tcd_tile->distolayer[layno]); 
-       }
-
-       return OPJ_TRUE;
+opj_bool tcd_rateallocate(opj_tcd_t *tcd, unsigned char *dest, int len,
+                          opj_codestream_info_t *cstr_info)
+{
+    int compno, resno, bandno, precno, cblkno, passno, layno;
+    double min, max;
+    double cumdisto[100];   /* fixed_quality */
+    const double K = 1;     /* 1.1; fixed_quality */
+    double maxSE = 0;
+
+    opj_cp_t *cp = tcd->cp;
+    opj_tcd_tile_t *tcd_tile = tcd->tcd_tile;
+    opj_tcp_t *tcd_tcp = tcd->tcp;
+
+    min = DBL_MAX;
+    max = 0;
+
+    tcd_tile->numpix = 0;       /* fixed_quality */
+
+    for (compno = 0; compno < tcd_tile->numcomps; compno++) {
+        opj_tcd_tilecomp_t *tilec = &tcd_tile->comps[compno];
+        tilec->numpix = 0;
+
+        for (resno = 0; resno < tilec->numresolutions; resno++) {
+            opj_tcd_resolution_t *res = &tilec->resolutions[resno];
+
+            for (bandno = 0; bandno < res->numbands; bandno++) {
+                opj_tcd_band_t *band = &res->bands[bandno];
+
+                for (precno = 0; precno < res->pw * res->ph; precno++) {
+                    opj_tcd_precinct_t *prc = &band->precincts[precno];
+
+                    for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
+                        opj_tcd_cblk_enc_t *cblk = &prc->cblks.enc[cblkno];
+
+                        for (passno = 0; passno < cblk->totalpasses; passno++) {
+                            opj_tcd_pass_t *pass = &cblk->passes[passno];
+                            int dr;
+                            double dd, rdslope;
+                            if (passno == 0) {
+                                dr = pass->rate;
+                                dd = pass->distortiondec;
+                            } else {
+                                dr = pass->rate - cblk->passes[passno - 1].rate;
+                                dd = pass->distortiondec - cblk->passes[passno - 1].distortiondec;
+                            }
+                            if (dr == 0) {
+                                continue;
+                            }
+                            rdslope = dd / dr;
+                            if (rdslope < min) {
+                                min = rdslope;
+                            }
+                            if (rdslope > max) {
+                                max = rdslope;
+                            }
+                        } /* passno */
+
+                        /* fixed_quality */
+                        tcd_tile->numpix += ((cblk->x1 - cblk->x0) * (cblk->y1 - cblk->y0));
+                        tilec->numpix += ((cblk->x1 - cblk->x0) * (cblk->y1 - cblk->y0));
+                    } /* cbklno */
+                } /* precno */
+            } /* bandno */
+        } /* resno */
+
+        maxSE += (((double)(1 << tcd->image->comps[compno].prec) - 1.0)
+                  * ((double)(1 << tcd->image->comps[compno].prec) - 1.0))
+                 * ((double)(tilec->numpix));
+    } /* compno */
+
+    /* index file */
+    if (cstr_info) {
+        opj_tile_info_t *tile_info = &cstr_info->tile[tcd->tcd_tileno];
+        tile_info->numpix = tcd_tile->numpix;
+        tile_info->distotile = tcd_tile->distotile;
+        tile_info->thresh = (double *) opj_malloc(tcd_tcp->numlayers * sizeof(double));
+    }
+
+    for (layno = 0; layno < tcd_tcp->numlayers; layno++) {
+        double lo = min;
+        double hi = max;
+        int success = 0;
+        int maxlen = tcd_tcp->rates[layno] ? int_min(((int) ceil(
+                         tcd_tcp->rates[layno])), len) : len;
+        double goodthresh = 0;
+        double stable_thresh = 0;
+        int i;
+        double distotarget;     /* fixed_quality */
+
+        /* fixed_quality */
+        distotarget = tcd_tile->distotile - ((K * maxSE) / pow((float)10,
+                                             tcd_tcp->distoratio[layno] / 10));
+
+        /* Don't try to find an optimal threshold but rather take everything not included yet, if
+          -r xx,yy,zz,0   (disto_alloc == 1 and rates == 0)
+          -q xx,yy,zz,0   (fixed_quality == 1 and distoratio == 0)
+          ==> possible to have some lossy layers and the last layer for sure lossless */
+        if (((cp->disto_alloc == 1) && (tcd_tcp->rates[layno] > 0)) ||
+                ((cp->fixed_quality == 1) && (tcd_tcp->distoratio[layno] > 0))) {
+            opj_t2_t *t2 = t2_create(tcd->cinfo, tcd->image, cp);
+            double thresh = 0;
+
+            for (i = 0; i < 128; i++) {
+                int l = 0;
+                double distoachieved = 0;   /* fixed_quality */
+                thresh = (lo + hi) / 2;
+
+                tcd_makelayer(tcd, layno, thresh, 0);
+
+                if (cp->fixed_quality) {    /* fixed_quality */
+                    if (cp->cinema) {
+                        l = t2_encode_packets(t2, tcd->tcd_tileno, tcd_tile, layno + 1, dest, maxlen,
+                                              cstr_info, tcd->cur_tp_num, tcd->tp_pos, tcd->cur_pino, THRESH_CALC,
+                                              tcd->cur_totnum_tp);
+                        if (l == -999) {
+                            lo = thresh;
+                            continue;
+                        } else {
+                            distoachieved = layno == 0 ?
+                                            tcd_tile->distolayer[0] : cumdisto[layno - 1] + tcd_tile->distolayer[layno];
+                            if (distoachieved < distotarget) {
+                                hi = thresh;
+                                stable_thresh = thresh;
+                                continue;
+                            } else {
+                                lo = thresh;
+                            }
+                        }
+                    } else {
+                        distoachieved = (layno == 0) ?
+                                        tcd_tile->distolayer[0] : (cumdisto[layno - 1] + tcd_tile->distolayer[layno]);
+                        if (distoachieved < distotarget) {
+                            hi = thresh;
+                            stable_thresh = thresh;
+                            continue;
+                        }
+                        lo = thresh;
+                    }
+                } else {
+                    l = t2_encode_packets(t2, tcd->tcd_tileno, tcd_tile, layno + 1, dest, maxlen,
+                                          cstr_info, tcd->cur_tp_num, tcd->tp_pos, tcd->cur_pino, THRESH_CALC,
+                                          tcd->cur_totnum_tp);
+                    /* TODO: what to do with l ??? seek / tell ??? */
+                    /* opj_event_msg(tcd->cinfo, EVT_INFO, "rate alloc: len=%d, max=%d\n", l, maxlen); */
+                    if (l == -999) {
+                        lo = thresh;
+                        continue;
+                    }
+                    hi = thresh;
+                    stable_thresh = thresh;
+                }
+            }
+            success = 1;
+            goodthresh = stable_thresh == 0 ? thresh : stable_thresh;
+            t2_destroy(t2);
+        } else {
+            success = 1;
+            goodthresh = min;
+        }
+
+        if (!success) {
+            return OPJ_FALSE;
+        }
+
+        if (cstr_info) { /* Threshold for Marcela Index */
+            cstr_info->tile[tcd->tcd_tileno].thresh[layno] = goodthresh;
+        }
+        tcd_makelayer(tcd, layno, goodthresh, 1);
+
+        /* fixed_quality */
+        cumdisto[layno] = (layno == 0) ? tcd_tile->distolayer[0] :
+                          (cumdisto[layno - 1] + tcd_tile->distolayer[layno]);
+    }
+
+    return OPJ_TRUE;
 }
 
-int tcd_encode_tile(opj_tcd_t *tcd, int tileno, unsigned char *dest, int len, opj_codestream_info_t *cstr_info) {
-       int compno;
-       int l, i, numpacks = 0;
-       opj_tcd_tile_t *tile = NULL;
-       opj_tcp_t *tcd_tcp = NULL;
-       opj_cp_t *cp = NULL;
-
-       opj_tcp_t *tcp = &tcd->cp->tcps[0];
-       opj_tccp_t *tccp = &tcp->tccps[0];
-       opj_image_t *image = tcd->image;
-       
-       opj_t1_t *t1 = NULL;            /* T1 component */
-       opj_t2_t *t2 = NULL;            /* T2 component */
-
-       tcd->tcd_tileno = tileno;
-       tcd->tcd_tile = tcd->tcd_image->tiles;
-       tcd->tcp = &tcd->cp->tcps[tileno];
-
-       tile = tcd->tcd_tile;
-       tcd_tcp = tcd->tcp;
-       cp = tcd->cp;
-
-       if(tcd->cur_tp_num == 0){
-               tcd->encoding_time = opj_clock();       /* time needed to encode a tile */
-               /* INDEX >> "Precinct_nb_X et Precinct_nb_Y" */
-               if(cstr_info) {
-                       opj_tcd_tilecomp_t *tilec_idx = &tile->comps[0];        /* based on component 0 */
-                       for (i = 0; i < tilec_idx->numresolutions; i++) {
-                               opj_tcd_resolution_t *res_idx = &tilec_idx->resolutions[i];
-                               
-                               cstr_info->tile[tileno].pw[i] = res_idx->pw;
-                               cstr_info->tile[tileno].ph[i] = res_idx->ph;
-                               
-                               numpacks += res_idx->pw * res_idx->ph;
-                               
-                               cstr_info->tile[tileno].pdx[i] = tccp->prcw[i];
-                               cstr_info->tile[tileno].pdy[i] = tccp->prch[i];
-                       }
-                       cstr_info->tile[tileno].packet = (opj_packet_info_t*) opj_calloc(cstr_info->numcomps * cstr_info->numlayers * numpacks, sizeof(opj_packet_info_t));
-               }
-               /* << INDEX */
-               
-               /*---------------TILE-------------------*/
-               
-               for (compno = 0; compno < tile->numcomps; compno++) {
-                       int x, y;
-                       
-                       int adjust = image->comps[compno].sgnd ? 0 : 1 << (image->comps[compno].prec - 1);
-                       int offset_x = int_ceildiv(image->x0, image->comps[compno].dx);
-                       int offset_y = int_ceildiv(image->y0, image->comps[compno].dy);
-                       
-                       opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-                       int tw = tilec->x1 - tilec->x0;
-                       int w = int_ceildiv(image->x1 - image->x0, image->comps[compno].dx);
-                       
-                       /* extract tile data */
-                       
-                       if (tcd_tcp->tccps[compno].qmfbid == 1) {
-                               for (y = tilec->y0; y < tilec->y1; y++) {
-                                       /* start of the src tile scanline */
-                                       int *data = &image->comps[compno].data[(tilec->x0 - offset_x) + (y - offset_y) * w];
-                                       /* start of the dst tile scanline */
-                                       int *tile_data = &tilec->data[(y - tilec->y0) * tw];
-                                       for (x = tilec->x0; x < tilec->x1; x++) {
-                                               *tile_data++ = *data++ - adjust;
-                                       }
-                               }
-                       } else if (tcd_tcp->tccps[compno].qmfbid == 0) {
-                               for (y = tilec->y0; y < tilec->y1; y++) {
-                                       /* start of the src tile scanline */
-                                       int *data = &image->comps[compno].data[(tilec->x0 - offset_x) + (y - offset_y) * w];
-                                       /* start of the dst tile scanline */
-                                       int *tile_data = &tilec->data[(y - tilec->y0) * tw];
-                                       for (x = tilec->x0; x < tilec->x1; x++) {
-                                               *tile_data++ = (*data++ - adjust) << 11;
-                                       }
-                                       
-                               }
-                       }
-               }
-               
-               /*----------------MCT-------------------*/
-               if (tcd_tcp->mct) {
-                       int samples = (tile->comps[0].x1 - tile->comps[0].x0) * (tile->comps[0].y1 - tile->comps[0].y0);
-                       if (tcd_tcp->tccps[0].qmfbid == 0) {
-                               mct_encode_real(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data, samples);
-                       } else {
-                               mct_encode(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data, samples);
-                       }
-               }
-               
-               /*----------------DWT---------------------*/
-               
-               for (compno = 0; compno < tile->numcomps; compno++) {
-                       opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-                       if (tcd_tcp->tccps[compno].qmfbid == 1) {
-                               dwt_encode(tilec);
-                       } else if (tcd_tcp->tccps[compno].qmfbid == 0) {
-                               dwt_encode_real(tilec);
-                       }
-               }
-               
-               /*------------------TIER1-----------------*/
-               t1 = t1_create(tcd->cinfo);
-               t1_encode_cblks(t1, tile, tcd_tcp);
-               t1_destroy(t1);
-               
-               /*-----------RATE-ALLOCATE------------------*/
-               
-               /* INDEX */
-               if(cstr_info) {
-                       cstr_info->index_write = 0;
-               }
-               if (cp->disto_alloc || cp->fixed_quality) {     /* fixed_quality */
-                       /* Normal Rate/distortion allocation */
-                       tcd_rateallocate(tcd, dest, len, cstr_info);
-               } else {
-                       /* Fixed layer allocation */
-                       tcd_rateallocate_fixed(tcd);
-               }
-       }
-       /*--------------TIER2------------------*/
-
-       /* INDEX */
-       if(cstr_info) {
-               cstr_info->index_write = 1;
-       }
-
-       t2 = t2_create(tcd->cinfo, image, cp);
-       l = t2_encode_packets(t2,tileno, tile, tcd_tcp->numlayers, dest, len, cstr_info,tcd->tp_num,tcd->tp_pos,tcd->cur_pino,FINAL_PASS,tcd->cur_totnum_tp);
-       t2_destroy(t2);
-       
-       /*---------------CLEAN-------------------*/
-
-       
-       if(tcd->cur_tp_num == tcd->cur_totnum_tp - 1){
-               tcd->encoding_time = opj_clock() - tcd->encoding_time;
-               opj_event_msg(tcd->cinfo, EVT_INFO, "- tile encoded in %f s\n", tcd->encoding_time);
-
-               /* cleaning memory */
-               for (compno = 0; compno < tile->numcomps; compno++) {
-                       opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-                       opj_aligned_free(tilec->data);
-               }
-       }
-
-       return l;
+int tcd_encode_tile(opj_tcd_t *tcd, int tileno, unsigned char *dest, int len,
+                    opj_codestream_info_t *cstr_info)
+{
+    int compno;
+    int l, i, numpacks = 0;
+    opj_tcd_tile_t *tile = NULL;
+    opj_tcp_t *tcd_tcp = NULL;
+    opj_cp_t *cp = NULL;
+
+    opj_tcp_t *tcp = &tcd->cp->tcps[0];
+    opj_tccp_t *tccp = &tcp->tccps[0];
+    opj_image_t *image = tcd->image;
+
+    opj_t1_t *t1 = NULL;        /* T1 component */
+    opj_t2_t *t2 = NULL;        /* T2 component */
+
+    tcd->tcd_tileno = tileno;
+    tcd->tcd_tile = tcd->tcd_image->tiles;
+    tcd->tcp = &tcd->cp->tcps[tileno];
+
+    tile = tcd->tcd_tile;
+    tcd_tcp = tcd->tcp;
+    cp = tcd->cp;
+
+    if (tcd->cur_tp_num == 0) {
+        tcd->encoding_time = opj_clock();   /* time needed to encode a tile */
+        /* INDEX >> "Precinct_nb_X et Precinct_nb_Y" */
+        if (cstr_info) {
+            opj_tcd_tilecomp_t *tilec_idx = &tile->comps[0];    /* based on component 0 */
+            for (i = 0; i < tilec_idx->numresolutions; i++) {
+                opj_tcd_resolution_t *res_idx = &tilec_idx->resolutions[i];
+
+                cstr_info->tile[tileno].pw[i] = res_idx->pw;
+                cstr_info->tile[tileno].ph[i] = res_idx->ph;
+
+                numpacks += res_idx->pw * res_idx->ph;
+
+                cstr_info->tile[tileno].pdx[i] = tccp->prcw[i];
+                cstr_info->tile[tileno].pdy[i] = tccp->prch[i];
+            }
+            cstr_info->tile[tileno].packet = (opj_packet_info_t*) opj_calloc(
+                                                 cstr_info->numcomps * cstr_info->numlayers * numpacks,
+                                                 sizeof(opj_packet_info_t));
+        }
+        /* << INDEX */
+
+        /*---------------TILE-------------------*/
+
+        for (compno = 0; compno < tile->numcomps; compno++) {
+            int x, y;
+
+            int adjust = image->comps[compno].sgnd ? 0 : 1 << (image->comps[compno].prec -
+                         1);
+            int offset_x = int_ceildiv(image->x0, image->comps[compno].dx);
+            int offset_y = int_ceildiv(image->y0, image->comps[compno].dy);
+
+            opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+            int tw = tilec->x1 - tilec->x0;
+            int w = int_ceildiv(image->x1 - image->x0, image->comps[compno].dx);
+
+            /* extract tile data */
+
+            if (tcd_tcp->tccps[compno].qmfbid == 1) {
+                for (y = tilec->y0; y < tilec->y1; y++) {
+                    /* start of the src tile scanline */
+                    int *data = &image->comps[compno].data[(tilec->x0 - offset_x) +
+                                                           (y - offset_y) * w];
+                    /* start of the dst tile scanline */
+                    int *tile_data = &tilec->data[(y - tilec->y0) * tw];
+                    for (x = tilec->x0; x < tilec->x1; x++) {
+                        *tile_data++ = *data++ - adjust;
+                    }
+                }
+            } else if (tcd_tcp->tccps[compno].qmfbid == 0) {
+                for (y = tilec->y0; y < tilec->y1; y++) {
+                    /* start of the src tile scanline */
+                    int *data = &image->comps[compno].data[(tilec->x0 - offset_x) +
+                                                           (y - offset_y) * w];
+                    /* start of the dst tile scanline */
+                    int *tile_data = &tilec->data[(y - tilec->y0) * tw];
+                    for (x = tilec->x0; x < tilec->x1; x++) {
+                        *tile_data++ = (*data++ - adjust) << 11;
+                    }
+
+                }
+            }
+        }
+
+        /*----------------MCT-------------------*/
+        if (tcd_tcp->mct) {
+            int samples = (tile->comps[0].x1 - tile->comps[0].x0) *
+                          (tile->comps[0].y1 - tile->comps[0].y0);
+            if (tcd_tcp->tccps[0].qmfbid == 0) {
+                mct_encode_real(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data,
+                                samples);
+            } else {
+                mct_encode(tile->comps[0].data, tile->comps[1].data, tile->comps[2].data,
+                           samples);
+            }
+        }
+
+        /*----------------DWT---------------------*/
+
+        for (compno = 0; compno < tile->numcomps; compno++) {
+            opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+            if (tcd_tcp->tccps[compno].qmfbid == 1) {
+                dwt_encode(tilec);
+            } else if (tcd_tcp->tccps[compno].qmfbid == 0) {
+                dwt_encode_real(tilec);
+            }
+        }
+
+        /*------------------TIER1-----------------*/
+        t1 = t1_create(tcd->cinfo);
+        t1_encode_cblks(t1, tile, tcd_tcp);
+        t1_destroy(t1);
+
+        /*-----------RATE-ALLOCATE------------------*/
+
+        /* INDEX */
+        if (cstr_info) {
+            cstr_info->index_write = 0;
+        }
+        if (cp->disto_alloc || cp->fixed_quality) { /* fixed_quality */
+            /* Normal Rate/distortion allocation */
+            tcd_rateallocate(tcd, dest, len, cstr_info);
+        } else {
+            /* Fixed layer allocation */
+            tcd_rateallocate_fixed(tcd);
+        }
+    }
+    /*--------------TIER2------------------*/
+
+    /* INDEX */
+    if (cstr_info) {
+        cstr_info->index_write = 1;
+    }
+
+    t2 = t2_create(tcd->cinfo, image, cp);
+    l = t2_encode_packets(t2, tileno, tile, tcd_tcp->numlayers, dest, len,
+                          cstr_info, tcd->tp_num, tcd->tp_pos, tcd->cur_pino, FINAL_PASS,
+                          tcd->cur_totnum_tp);
+    t2_destroy(t2);
+
+    /*---------------CLEAN-------------------*/
+
+
+    if (tcd->cur_tp_num == tcd->cur_totnum_tp - 1) {
+        tcd->encoding_time = opj_clock() - tcd->encoding_time;
+        opj_event_msg(tcd->cinfo, EVT_INFO, "- tile encoded in %f s\n",
+                      tcd->encoding_time);
+
+        /* cleaning memory */
+        for (compno = 0; compno < tile->numcomps; compno++) {
+            opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+            opj_aligned_free(tilec->data);
+        }
+    }
+
+    return l;
 }
 
-opj_bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len, int tileno, opj_codestream_info_t *cstr_info) {
-       int l;
-       int compno;
-       int eof = 0;
-       double tile_time, t1_time, dwt_time;
-       opj_tcd_tile_t *tile = NULL;
-
-       opj_t1_t *t1 = NULL;            /* T1 component */
-       opj_t2_t *t2 = NULL;            /* T2 component */
-       
-       tcd->tcd_tileno = tileno;
-       tcd->tcd_tile = &(tcd->tcd_image->tiles[tileno]);
-       tcd->tcp = &(tcd->cp->tcps[tileno]);
-       tile = tcd->tcd_tile;
-       
-       tile_time = opj_clock();        /* time needed to decode a tile */
-       opj_event_msg(tcd->cinfo, EVT_INFO, "tile %d of %d\n", tileno + 1, tcd->cp->tw * tcd->cp->th);
-
-       /* INDEX >>  */
-       if(cstr_info) {
-               int resno, compno, numprec = 0;
-               for (compno = 0; compno < cstr_info->numcomps; compno++) {
-                       opj_tcp_t *tcp = &tcd->cp->tcps[0];
-                       opj_tccp_t *tccp = &tcp->tccps[compno];
-                       opj_tcd_tilecomp_t *tilec_idx = &tile->comps[compno];   
-                       for (resno = 0; resno < tilec_idx->numresolutions; resno++) {
-                               opj_tcd_resolution_t *res_idx = &tilec_idx->resolutions[resno];
-                               cstr_info->tile[tileno].pw[resno] = res_idx->pw;
-                               cstr_info->tile[tileno].ph[resno] = res_idx->ph;
-                               numprec += res_idx->pw * res_idx->ph;
-                               if (tccp->csty & J2K_CP_CSTY_PRT) {
-                                       cstr_info->tile[tileno].pdx[resno] = tccp->prcw[resno];
-                                       cstr_info->tile[tileno].pdy[resno] = tccp->prch[resno];
-                               }
-                               else {
-                                       cstr_info->tile[tileno].pdx[resno] = 15;
-                                       cstr_info->tile[tileno].pdy[resno] = 15;
-                               }
-                       }
-               }
-               cstr_info->tile[tileno].packet = (opj_packet_info_t *) opj_malloc(cstr_info->numlayers * numprec * sizeof(opj_packet_info_t));
-               cstr_info->packno = 0;
-       }
-       /* << INDEX */
-       
-       /*--------------TIER2------------------*/
-       
-       t2 = t2_create(tcd->cinfo, tcd->image, tcd->cp);
-       l = t2_decode_packets(t2, src, len, tileno, tile, cstr_info);
-       t2_destroy(t2);
-
-       if (l == -999) {
-               eof = 1;
-               opj_event_msg(tcd->cinfo, EVT_ERROR, "tcd_decode: incomplete bitstream\n");
-       }
-       
-       /*------------------TIER1-----------------*/
-       
-       t1_time = opj_clock();  /* time needed to decode a tile */
-       t1 = t1_create(tcd->cinfo);
-    if (t1 == NULL)
-    {
+opj_bool tcd_decode_tile(opj_tcd_t *tcd, unsigned char *src, int len,
+                         int tileno, opj_codestream_info_t *cstr_info)
+{
+    int l;
+    int compno;
+    int eof = 0;
+    double tile_time, t1_time, dwt_time;
+    opj_tcd_tile_t *tile = NULL;
+
+    opj_t1_t *t1 = NULL;        /* T1 component */
+    opj_t2_t *t2 = NULL;        /* T2 component */
+
+    tcd->tcd_tileno = tileno;
+    tcd->tcd_tile = &(tcd->tcd_image->tiles[tileno]);
+    tcd->tcp = &(tcd->cp->tcps[tileno]);
+    tile = tcd->tcd_tile;
+
+    tile_time = opj_clock();    /* time needed to decode a tile */
+    opj_event_msg(tcd->cinfo, EVT_INFO, "tile %d of %d\n", tileno + 1,
+                  tcd->cp->tw * tcd->cp->th);
+
+    /* INDEX >>  */
+    if (cstr_info) {
+        int resno, compno, numprec = 0;
+        for (compno = 0; compno < cstr_info->numcomps; compno++) {
+            opj_tcp_t *tcp = &tcd->cp->tcps[0];
+            opj_tccp_t *tccp = &tcp->tccps[compno];
+            opj_tcd_tilecomp_t *tilec_idx = &tile->comps[compno];
+            for (resno = 0; resno < tilec_idx->numresolutions; resno++) {
+                opj_tcd_resolution_t *res_idx = &tilec_idx->resolutions[resno];
+                cstr_info->tile[tileno].pw[resno] = res_idx->pw;
+                cstr_info->tile[tileno].ph[resno] = res_idx->ph;
+                numprec += res_idx->pw * res_idx->ph;
+                if (tccp->csty & J2K_CP_CSTY_PRT) {
+                    cstr_info->tile[tileno].pdx[resno] = tccp->prcw[resno];
+                    cstr_info->tile[tileno].pdy[resno] = tccp->prch[resno];
+                } else {
+                    cstr_info->tile[tileno].pdx[resno] = 15;
+                    cstr_info->tile[tileno].pdy[resno] = 15;
+                }
+            }
+        }
+        cstr_info->tile[tileno].packet = (opj_packet_info_t *) opj_malloc(
+                                             cstr_info->numlayers * numprec * sizeof(opj_packet_info_t));
+        cstr_info->packno = 0;
+    }
+    /* << INDEX */
+
+    /*--------------TIER2------------------*/
+
+    t2 = t2_create(tcd->cinfo, tcd->image, tcd->cp);
+    l = t2_decode_packets(t2, src, len, tileno, tile, cstr_info);
+    t2_destroy(t2);
+
+    if (l == -999) {
+        eof = 1;
+        opj_event_msg(tcd->cinfo, EVT_ERROR, "tcd_decode: incomplete bitstream\n");
+    }
+
+    /*------------------TIER1-----------------*/
+
+    t1_time = opj_clock();  /* time needed to decode a tile */
+    t1 = t1_create(tcd->cinfo);
+    if (t1 == NULL) {
         opj_event_msg(tcd->cinfo, EVT_ERROR, "Out of memory\n");
         t1_destroy(t1);
         return OPJ_FALSE;
     }
 
-       for (compno = 0; compno < tile->numcomps; ++compno) {
-               opj_tcd_tilecomp_t* tilec = &tile->comps[compno];
-               /* The +3 is headroom required by the vectorized DWT */
-               tilec->data = (int*) opj_aligned_malloc((((tilec->x1 - tilec->x0) * (tilec->y1 - tilec->y0))+3) * sizeof(int));
-        if (tilec->data == NULL)
-        {
+    for (compno = 0; compno < tile->numcomps; ++compno) {
+        opj_tcd_tilecomp_t* tilec = &tile->comps[compno];
+        /* The +3 is headroom required by the vectorized DWT */
+        tilec->data = (int*) opj_aligned_malloc((((tilec->x1 - tilec->x0) *
+                                                (tilec->y1 - tilec->y0)) + 3) * sizeof(int));
+        if (tilec->data == NULL) {
             opj_event_msg(tcd->cinfo, EVT_ERROR, "Out of memory\n");
             return OPJ_FALSE;
         }
 
-               t1_decode_cblks(t1, tilec, &tcd->tcp->tccps[compno]);
-       }
-       t1_destroy(t1);
-       t1_time = opj_clock() - t1_time;
-       opj_event_msg(tcd->cinfo, EVT_INFO, "- tiers-1 took %f s\n", t1_time);
-       
-       /*----------------DWT---------------------*/
-
-       dwt_time = opj_clock(); /* time needed to decode a tile */
-       for (compno = 0; compno < tile->numcomps; compno++) {
-               opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
-               int numres2decode;
-
-               if (tcd->cp->reduce != 0) {
-                       if ( tile->comps[compno].numresolutions < ( tcd->cp->reduce - 1 ) ) {                           
-                               opj_event_msg(tcd->cinfo, EVT_ERROR, "Error decoding tile. The number of resolutions to remove [%d+1] is higher than the number "
-                                       " of resolutions in the original codestream [%d]\nModify the cp_reduce parameter.\n", tcd->cp->reduce, tile->comps[compno].numresolutions);
-                               return OPJ_FALSE;
-                       }
-      else {
-                       tcd->image->comps[compno].resno_decoded =
-                               tile->comps[compno].numresolutions - tcd->cp->reduce - 1;
-      }
-               }
-
-               numres2decode = tcd->image->comps[compno].resno_decoded + 1;
-               if(numres2decode > 0){
-                       if (tcd->tcp->tccps[compno].qmfbid == 1) {
-                               dwt_decode(tilec, numres2decode);
-                       } else {
-                               dwt_decode_real(tilec, numres2decode);
-                       }
-               }
-       }
-       dwt_time = opj_clock() - dwt_time;
-       opj_event_msg(tcd->cinfo, EVT_INFO, "- dwt took %f s\n", dwt_time);
-
-       /*----------------MCT-------------------*/
-
-       if (tcd->tcp->mct) {
-               int n = (tile->comps[0].x1 - tile->comps[0].x0) * (tile->comps[0].y1 - tile->comps[0].y0);
-
-               if (tile->numcomps >= 3 ){
-                       if (tcd->tcp->tccps[0].qmfbid == 1) {
-                               mct_decode(
-                                               tile->comps[0].data,
-                                               tile->comps[1].data,
-                                               tile->comps[2].data,
-                                               n);
-                       } else {
-                               mct_decode_real(
-                                               (float*)tile->comps[0].data,
-                                               (float*)tile->comps[1].data,
-                                               (float*)tile->comps[2].data,
-                                               n);
-                       }
-               } else{
-                       opj_event_msg(tcd->cinfo, EVT_WARNING,"Number of components (%d) is inconsistent with a MCT. Skip the MCT step.\n",tile->numcomps);
-               }
-       }
-
-       /*---------------TILE-------------------*/
-
-       for (compno = 0; compno < tile->numcomps; ++compno) {
-               opj_tcd_tilecomp_t* tilec = &tile->comps[compno];
-               opj_image_comp_t* imagec = &tcd->image->comps[compno];
-               opj_tcd_resolution_t* res = &tilec->resolutions[imagec->resno_decoded];
-               int adjust = imagec->sgnd ? 0 : 1 << (imagec->prec - 1);
-               int min = imagec->sgnd ? -(1 << (imagec->prec - 1)) : 0;
-               int max = imagec->sgnd ?  (1 << (imagec->prec - 1)) - 1 : (1 << imagec->prec) - 1;
-
-               int tw = tilec->x1 - tilec->x0;
-               int w = imagec->w;
-
-               int offset_x = int_ceildivpow2(imagec->x0, imagec->factor);
-               int offset_y = int_ceildivpow2(imagec->y0, imagec->factor);
-
-               int i, j;
-               if(!imagec->data){
-                       imagec->data = (int*) opj_malloc(imagec->w * imagec->h * sizeof(int));
-               }
-        if (!imagec->data)
-        {
+        t1_decode_cblks(t1, tilec, &tcd->tcp->tccps[compno]);
+    }
+    t1_destroy(t1);
+    t1_time = opj_clock() - t1_time;
+    opj_event_msg(tcd->cinfo, EVT_INFO, "- tiers-1 took %f s\n", t1_time);
+
+    /*----------------DWT---------------------*/
+
+    dwt_time = opj_clock(); /* time needed to decode a tile */
+    for (compno = 0; compno < tile->numcomps; compno++) {
+        opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
+        int numres2decode;
+
+        if (tcd->cp->reduce != 0) {
+            if (tile->comps[compno].numresolutions < (tcd->cp->reduce - 1)) {
+                opj_event_msg(tcd->cinfo, EVT_ERROR,
+                              "Error decoding tile. The number of resolutions to remove [%d+1] is higher than the number "
+                              " of resolutions in the original codestream [%d]\nModify the cp_reduce parameter.\n",
+                              tcd->cp->reduce, tile->comps[compno].numresolutions);
+                return OPJ_FALSE;
+            } else {
+                tcd->image->comps[compno].resno_decoded =
+                    tile->comps[compno].numresolutions - tcd->cp->reduce - 1;
+            }
+        }
+
+        numres2decode = tcd->image->comps[compno].resno_decoded + 1;
+        if (numres2decode > 0) {
+            if (tcd->tcp->tccps[compno].qmfbid == 1) {
+                dwt_decode(tilec, numres2decode);
+            } else {
+                dwt_decode_real(tilec, numres2decode);
+            }
+        }
+    }
+    dwt_time = opj_clock() - dwt_time;
+    opj_event_msg(tcd->cinfo, EVT_INFO, "- dwt took %f s\n", dwt_time);
+
+    /*----------------MCT-------------------*/
+
+    if (tcd->tcp->mct) {
+        int n = (tile->comps[0].x1 - tile->comps[0].x0) * (tile->comps[0].y1 -
+                tile->comps[0].y0);
+
+        if (tile->numcomps >= 3) {
+            if (tcd->tcp->tccps[0].qmfbid == 1) {
+                mct_decode(
+                    tile->comps[0].data,
+                    tile->comps[1].data,
+                    tile->comps[2].data,
+                    n);
+            } else {
+                mct_decode_real(
+                    (float*)tile->comps[0].data,
+                    (float*)tile->comps[1].data,
+                    (float*)tile->comps[2].data,
+                    n);
+            }
+        } else {
+            opj_event_msg(tcd->cinfo, EVT_WARNING,
+                          "Number of components (%d) is inconsistent with a MCT. Skip the MCT step.\n",
+                          tile->numcomps);
+        }
+    }
+
+    /*---------------TILE-------------------*/
+
+    for (compno = 0; compno < tile->numcomps; ++compno) {
+        opj_tcd_tilecomp_t* tilec = &tile->comps[compno];
+        opj_image_comp_t* imagec = &tcd->image->comps[compno];
+        opj_tcd_resolution_t* res = &tilec->resolutions[imagec->resno_decoded];
+        int adjust = imagec->sgnd ? 0 : 1 << (imagec->prec - 1);
+        int min = imagec->sgnd ? -(1 << (imagec->prec - 1)) : 0;
+        int max = imagec->sgnd ? (1 << (imagec->prec - 1)) - 1 :
+                  (1 << imagec->prec) - 1;
+
+        int tw = tilec->x1 - tilec->x0;
+        int w = imagec->w;
+
+        int offset_x = int_ceildivpow2(imagec->x0, imagec->factor);
+        int offset_y = int_ceildivpow2(imagec->y0, imagec->factor);
+
+        int i, j;
+        if (!imagec->data) {
+            imagec->data = (int*) opj_malloc(imagec->w * imagec->h * sizeof(int));
+        }
+        if (!imagec->data) {
             opj_event_msg(tcd->cinfo, EVT_ERROR, "Out of memory\n");
             return OPJ_FALSE;
         }
-               if(tcd->tcp->tccps[compno].qmfbid == 1) {
-                       for(j = res->y0; j < res->y1; ++j) {
-                               for(i = res->x0; i < res->x1; ++i) {
-                                       int v = tilec->data[i - res->x0 + (j - res->y0) * tw];
-                                       v += adjust;
-                                       imagec->data[(i - offset_x) + (j - offset_y) * w] = int_clamp(v, min, max);
-                               }
-                       }
-               }else{
-                       for(j = res->y0; j < res->y1; ++j) {
-                               for(i = res->x0; i < res->x1; ++i) {
-                                       float tmp = ((float*)tilec->data)[i - res->x0 + (j - res->y0) * tw];
-                                       int v = lrintf(tmp);
-                                       v += adjust;
-                                       imagec->data[(i - offset_x) + (j - offset_y) * w] = int_clamp(v, min, max);
-                               }
-                       }
-               }
-               opj_aligned_free(tilec->data);
-       }
-
-       tile_time = opj_clock() - tile_time;    /* time needed to decode a tile */
-       opj_event_msg(tcd->cinfo, EVT_INFO, "- tile decoded in %f s\n", tile_time);
-
-       if (eof) {
-               return OPJ_FALSE;
-       }
-       
-       return OPJ_TRUE;
+        if (tcd->tcp->tccps[compno].qmfbid == 1) {
+            for (j = res->y0; j < res->y1; ++j) {
+                for (i = res->x0; i < res->x1; ++i) {
+                    int v = tilec->data[i - res->x0 + (j - res->y0) * tw];
+                    v += adjust;
+                    imagec->data[(i - offset_x) + (j - offset_y) * w] = int_clamp(v, min, max);
+                }
+            }
+        } else {
+            for (j = res->y0; j < res->y1; ++j) {
+                for (i = res->x0; i < res->x1; ++i) {
+                    float tmp = ((float*)tilec->data)[i - res->x0 + (j - res->y0) * tw];
+                    int v = lrintf(tmp);
+                    v += adjust;
+                    imagec->data[(i - offset_x) + (j - offset_y) * w] = int_clamp(v, min, max);
+                }
+            }
+        }
+        opj_aligned_free(tilec->data);
+    }
+
+    tile_time = opj_clock() - tile_time;    /* time needed to decode a tile */
+    opj_event_msg(tcd->cinfo, EVT_INFO, "- tile decoded in %f s\n", tile_time);
+
+    if (eof) {
+        return OPJ_FALSE;
+    }
+
+    return OPJ_TRUE;
 }
 
-void tcd_free_decode(opj_tcd_t *tcd) {
-       opj_tcd_image_t *tcd_image = tcd->tcd_image;    
+void tcd_free_decode(opj_tcd_t *tcd)
+{
+    opj_tcd_image_t *tcd_image = tcd->tcd_image;
     int i = 0;
-    for (i = 0; i < tcd_image->tw * tcd_image->th; i++)
-    {
+    for (i = 0; i < tcd_image->tw * tcd_image->th; i++) {
         tcd_free_decode_tile(tcd, i);
     }
 
-       opj_free(tcd_image->tiles);
+    opj_free(tcd_image->tiles);
 }
 
-void tcd_free_decode_tile(opj_tcd_t *tcd, int tileno) {
-    int compno,resno,bandno,precno,cblkno;
+void tcd_free_decode_tile(opj_tcd_t *tcd, int tileno)
+{
+    int compno, resno, bandno, precno, cblkno;
 
-       opj_tcd_image_t *tcd_image = tcd->tcd_image;
+    opj_tcd_image_t *tcd_image = tcd->tcd_image;
 
-       opj_tcd_tile_t *tile = &tcd_image->tiles[tileno];
+    opj_tcd_tile_t *tile = &tcd_image->tiles[tileno];
     if (tile->comps != NULL) {
         for (compno = 0; compno < tile->numcomps; compno++) {
             opj_tcd_tilecomp_t *tilec = &tile->comps[compno];
@@ -1561,19 +1640,23 @@ void tcd_free_decode_tile(opj_tcd_t *tcd, int tileno) {
                             }
                             opj_free(prec->cblks.dec);
                         }
-                        if (prec->imsbtree != NULL) tgt_destroy(prec->imsbtree);
-                        if (prec->incltree != NULL) tgt_destroy(prec->incltree);
+                        if (prec->imsbtree != NULL) {
+                            tgt_destroy(prec->imsbtree);
+                        }
+                        if (prec->incltree != NULL) {
+                            tgt_destroy(prec->incltree);
+                        }
 
 
                     }
                     opj_free(band->precincts);
-                               }
-                       }
+                }
+            }
             opj_free(tilec->resolutions);
-               }
+        }
         opj_free(tile->comps);
         tile->comps = NULL;
-       }
+    }
 }
 
 
index d5d280d7a54ee9bbf38644bc3fa228d74bc2d447..ae5b893364c42ba284ab9a86976247d738c0fbd6 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * The copyright in this software is being made available under the 2-clauses 
- * BSD License, included below. This software may be subject to other third 
+ * The copyright in this software is being made available under the 2-clauses
+ * BSD License, included below. This software may be subject to other third
  * party and contributor rights, including patent rights, and no such rights
  * are granted under this license.
  *
@@ -8,7 +8,7 @@
  * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2001-2003, David Janssens
  * Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2007, Francois-Olivier Devaux 
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux
  * Copyright (c) 2003-2014, Antonin Descampe
  * Copyright (c) 2005, Herve Drolon, FreeImage Team
  * All rights reserved.
 
 #include "opj_includes.h"
 
-/* 
+/*
 ==========================================================
    Tag-tree coder interface
 ==========================================================
 */
 
-opj_tgt_tree_t *tgt_create(int numleafsh, int numleafsv) {
-       int nplh[32];
-       int nplv[32];
-       opj_tgt_node_t *node = NULL;
-       opj_tgt_node_t *parentnode = NULL;
-       opj_tgt_node_t *parentnode0 = NULL;
-       opj_tgt_tree_t *tree = NULL;
-       int i, j, k;
-       int numlvls;
-       int n;
-
-       tree = (opj_tgt_tree_t *) opj_malloc(sizeof(opj_tgt_tree_t));
-       if(!tree) return NULL;
-       tree->numleafsh = numleafsh;
-       tree->numleafsv = numleafsv;
-
-       numlvls = 0;
-       nplh[0] = numleafsh;
-       nplv[0] = numleafsv;
-       tree->numnodes = 0;
-       do {
-               n = nplh[numlvls] * nplv[numlvls];
-               nplh[numlvls + 1] = (nplh[numlvls] + 1) / 2;
-               nplv[numlvls + 1] = (nplv[numlvls] + 1) / 2;
-               tree->numnodes += n;
-               ++numlvls;
-       } while (n > 1);
-       
-       /* ADD */
-       if (tree->numnodes == 0) {
-               opj_free(tree);
-               return NULL;
-       }
-
-       tree->nodes = (opj_tgt_node_t*) opj_calloc(tree->numnodes, sizeof(opj_tgt_node_t));
-       if(!tree->nodes) {
-               opj_free(tree);
-               return NULL;
-       }
-
-       node = tree->nodes;
-       parentnode = &tree->nodes[tree->numleafsh * tree->numleafsv];
-       parentnode0 = parentnode;
-       
-       for (i = 0; i < numlvls - 1; ++i) {
-               for (j = 0; j < nplv[i]; ++j) {
-                       k = nplh[i];
-                       while (--k >= 0) {
-                               node->parent = parentnode;
-                               ++node;
-                               if (--k >= 0) {
-                                       node->parent = parentnode;
-                                       ++node;
-                               }
-                               ++parentnode;
-                       }
-                       if ((j & 1) || j == nplv[i] - 1) {
-                               parentnode0 = parentnode;
-                       } else {
-                               parentnode = parentnode0;
-                               parentnode0 += nplh[i];
-                       }
-               }
-       }
-       node->parent = 0;
-       
-       tgt_reset(tree);
-       
-       return tree;
+opj_tgt_tree_t *tgt_create(int numleafsh, int numleafsv)
+{
+    int nplh[32];
+    int nplv[32];
+    opj_tgt_node_t *node = NULL;
+    opj_tgt_node_t *parentnode = NULL;
+    opj_tgt_node_t *parentnode0 = NULL;
+    opj_tgt_tree_t *tree = NULL;
+    int i, j, k;
+    int numlvls;
+    int n;
+
+    tree = (opj_tgt_tree_t *) opj_malloc(sizeof(opj_tgt_tree_t));
+    if (!tree) {
+        return NULL;
+    }
+    tree->numleafsh = numleafsh;
+    tree->numleafsv = numleafsv;
+
+    numlvls = 0;
+    nplh[0] = numleafsh;
+    nplv[0] = numleafsv;
+    tree->numnodes = 0;
+    do {
+        n = nplh[numlvls] * nplv[numlvls];
+        nplh[numlvls + 1] = (nplh[numlvls] + 1) / 2;
+        nplv[numlvls + 1] = (nplv[numlvls] + 1) / 2;
+        tree->numnodes += n;
+        ++numlvls;
+    } while (n > 1);
+
+    /* ADD */
+    if (tree->numnodes == 0) {
+        opj_free(tree);
+        return NULL;
+    }
+
+    tree->nodes = (opj_tgt_node_t*) opj_calloc(tree->numnodes,
+                  sizeof(opj_tgt_node_t));
+    if (!tree->nodes) {
+        opj_free(tree);
+        return NULL;
+    }
+
+    node = tree->nodes;
+    parentnode = &tree->nodes[tree->numleafsh * tree->numleafsv];
+    parentnode0 = parentnode;
+
+    for (i = 0; i < numlvls - 1; ++i) {
+        for (j = 0; j < nplv[i]; ++j) {
+            k = nplh[i];
+            while (--k >= 0) {
+                node->parent = parentnode;
+                ++node;
+                if (--k >= 0) {
+                    node->parent = parentnode;
+                    ++node;
+                }
+                ++parentnode;
+            }
+            if ((j & 1) || j == nplv[i] - 1) {
+                parentnode0 = parentnode;
+            } else {
+                parentnode = parentnode0;
+                parentnode0 += nplh[i];
+            }
+        }
+    }
+    node->parent = 0;
+
+    tgt_reset(tree);
+
+    return tree;
 }
 
-void tgt_destroy(opj_tgt_tree_t *tree) {
-       opj_free(tree->nodes);
-       opj_free(tree);
+void tgt_destroy(opj_tgt_tree_t *tree)
+{
+    opj_free(tree->nodes);
+    opj_free(tree);
 }
 
-void tgt_reset(opj_tgt_tree_t *tree) {
-       int i;
-
-       if (NULL == tree)
-               return;
-       
-       for (i = 0; i < tree->numnodes; i++) {
-               tree->nodes[i].value = 999;
-               tree->nodes[i].low = 0;
-               tree->nodes[i].known = 0;
-       }
+void tgt_reset(opj_tgt_tree_t *tree)
+{
+    int i;
+
+    if (NULL == tree) {
+        return;
+    }
+
+    for (i = 0; i < tree->numnodes; i++) {
+        tree->nodes[i].value = 999;
+        tree->nodes[i].low = 0;
+        tree->nodes[i].known = 0;
+    }
 }
 
-void tgt_setvalue(opj_tgt_tree_t *tree, int leafno, int value) {
-       opj_tgt_node_t *node;
-       node = &tree->nodes[leafno];
-       while (node && node->value > value) {
-               node->value = value;
-               node = node->parent;
-       }
+void tgt_setvalue(opj_tgt_tree_t *tree, int leafno, int value)
+{
+    opj_tgt_node_t *node;
+    node = &tree->nodes[leafno];
+    while (node && node->value > value) {
+        node->value = value;
+        node = node->parent;
+    }
 }
 
-void tgt_encode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold) {
-       opj_tgt_node_t *stk[31];
-       opj_tgt_node_t **stkptr;
-       opj_tgt_node_t *node;
-       int low;
-
-       stkptr = stk;
-       node = &tree->nodes[leafno];
-       while (node->parent) {
-               *stkptr++ = node;
-               node = node->parent;
-       }
-       
-       low = 0;
-       for (;;) {
-               if (low > node->low) {
-                       node->low = low;
-               } else {
-                       low = node->low;
-               }
-               
-               while (low < threshold) {
-                       if (low >= node->value) {
-                               if (!node->known) {
-                                       bio_write(bio, 1, 1);
-                                       node->known = 1;
-                               }
-                               break;
-                       }
-                       bio_write(bio, 0, 1);
-                       ++low;
-               }
-               
-               node->low = low;
-               if (stkptr == stk)
-                       break;
-               node = *--stkptr;
-       }
+void tgt_encode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno,
+                int threshold)
+{
+    opj_tgt_node_t *stk[31];
+    opj_tgt_node_t **stkptr;
+    opj_tgt_node_t *node;
+    int low;
+
+    stkptr = stk;
+    node = &tree->nodes[leafno];
+    while (node->parent) {
+        *stkptr++ = node;
+        node = node->parent;
+    }
+
+    low = 0;
+    for (;;) {
+        if (low > node->low) {
+            node->low = low;
+        } else {
+            low = node->low;
+        }
+
+        while (low < threshold) {
+            if (low >= node->value) {
+                if (!node->known) {
+                    bio_write(bio, 1, 1);
+                    node->known = 1;
+                }
+                break;
+            }
+            bio_write(bio, 0, 1);
+            ++low;
+        }
+
+        node->low = low;
+        if (stkptr == stk) {
+            break;
+        }
+        node = *--stkptr;
+    }
 }
 
-int tgt_decode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold) {
-       opj_tgt_node_t *stk[31];
-       opj_tgt_node_t **stkptr;
-       opj_tgt_node_t *node;
-       int low;
-
-       stkptr = stk;
-       node = &tree->nodes[leafno];
-       while (node->parent) {
-               *stkptr++ = node;
-               node = node->parent;
-       }
-       
-       low = 0;
-       for (;;) {
-               if (low > node->low) {
-                       node->low = low;
-               } else {
-                       low = node->low;
-               }
-               while (low < threshold && low < node->value) {
-                       if (bio_read(bio, 1)) {
-                               node->value = low;
-                       } else {
-                               ++low;
-                       }
-               }
-               node->low = low;
-               if (stkptr == stk) {
-                       break;
-               }
-               node = *--stkptr;
-       }
-       
-       return (node->value < threshold) ? 1 : 0;
+int tgt_decode(opj_bio_t *bio, opj_tgt_tree_t *tree, int leafno, int threshold)
+{
+    opj_tgt_node_t *stk[31];
+    opj_tgt_node_t **stkptr;
+    opj_tgt_node_t *node;
+    int low;
+
+    stkptr = stk;
+    node = &tree->nodes[leafno];
+    while (node->parent) {
+        *stkptr++ = node;
+        node = node->parent;
+    }
+
+    low = 0;
+    for (;;) {
+        if (low > node->low) {
+            node->low = low;
+        } else {
+            low = node->low;
+        }
+        while (low < threshold && low < node->value) {
+            if (bio_read(bio, 1)) {
+                node->value = low;
+            } else {
+                ++low;
+            }
+        }
+        node->low = low;
+        if (stkptr == stk) {
+            break;
+        }
+        node = *--stkptr;
+    }
+
+    return (node->value < threshold) ? 1 : 0;
 }